{"version":3,"file":"yvan-vue.mjs","sources":["../../yvan-vue-src/node_modules/tslib/tslib.es6.js","../../yvan-vue-src/src/components/vjson/VJsonContext.ts","../../yvan-vue-src/src/components/design/widgetsConfig.js","../../yvan-vue-src/src/event-bus.js","../../yvan-vue-src/src/components/yv-utils.ts","../../yvan-vue-src/src/components/design/TsLanguageSupport.ts","../../yvan-vue-src/src/components/design/designer.js","../../yvan-vue-src/src/utils.ts","../../yvan-vue-src/src/components/design/yv-design-mixin.js","../../yvan-vue-src/src/components/design/designCompoent/yv-design-not-found.vue","../../yvan-vue-src/src/components/design/designCompoent/basePropMix.js","../../yvan-vue-src/src/components/design/designCompoent/yv-design-dialog-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-drawer-prop.vue","../../yvan-vue-src/src/components/design/yv-designer-desc.ts","../../yvan-vue-src/src/components/vjson/excel.ts","../../yvan-vue-src/src/runtime/ImportExcelDialog.vue","../../yvan-vue-src/src/components/LoadingDialog.vue","../../yvan-vue-src/node_modules/tokenize-this/TokenizeThis.js","../../yvan-vue-src/src/SqlWhereParser.js","../../yvan-vue-src/src/Conv.ts","../../yvan-vue-src/src/runtime/system.ts","../../yvan-vue-src/src/studio/utils/yv_print_template_dialog.vue","../../yvan-vue-src/src/studio/utils/PrintTools.ts","../../yvan-vue-src/src/components/ValidateDialog.vue","../../yvan-vue-src/src/runtime/bizMixin.js","../../yvan-vue-src/src/components/vjson/yv-vjson-aggrid.locale.js","../../yvan-vue-src/src/directive/resizeTo.ts","../../yvan-vue-src/src/directive/clickOutside2.ts","../../yvan-vue-src/src/components/vjson/baseVjsonMix.js","../../yvan-vue-src/src/components/vjson/yv-vjson-object.vue","../../yvan-vue-src/src/components/vjson/Defaults.ts","../../yvan-vue-src/src/components/raw/utils.ts","../../yvan-vue-src/src/components/vjson/yv-vjson-tree.vue","../../yvan-vue-src/src/components/design/yv-src-editor.vue","../../yvan-vue-src/src/studio/yv-studio-file-search.vue","../../yvan-vue-src/src/studio/yv-studio-file-search-window.js","../../yvan-vue-src/src/studio/yv-custom-dialog.vue","../../yvan-vue-src/src/studio/yv-studio.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-layout.vue","../../yvan-vue-src/src/components/layout/baseLayoutDesign.js","../../yvan-vue-src/src/components/layout/baseLayout.js","../../yvan-vue-src/src/components/vjson/yv-vjson-dialog.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-drawer.vue","../../yvan-vue-src/src/components/layout/DefaultLayout.vue","../../yvan-vue-src/src/components/layout/DefaultLayout.empty.js","../../yvan-vue-src/src/components/design/designCompoent/yv-design-input-express.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-input-params.vue","../../yvan-vue-src/src/components/layout/DefaultLayoutProp.vue","../../yvan-vue-src/src/components/layout/DefaultLayoutDesign.vue","../../yvan-vue-src/src/components/layout/MobileDefaultLayoutProp.vue","../../yvan-vue-src/src/components/layout/MobileDefaultLayoutDesign.vue","../../yvan-vue-src/src/components/layout/SimpleGrid.vue","../../yvan-vue-src/src/components/layout/SimpleGridProp.vue","../../yvan-vue-src/src/components/layout/SimpleGrid.empty.js","../../yvan-vue-src/src/components/layout/SimpleGridDesign.vue","../../yvan-vue-src/src/components/split.vue","../../yvan-vue-src/src/components/split.vue","../../yvan-vue-src/src/components/split-area.vue","../../yvan-vue-src/src/components/split-area.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-empty-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-input-icon.vue","../../yvan-vue-src/src/components/design/yv-designer-permissions.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-button-prop.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-button.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-button.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-form.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-input-height.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-form-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-form.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-form-item.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-form-item.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-textfield.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-input-width.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-textfield-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-textfield.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-treefield.vue","../../yvan-vue-src/src/store.ts","../../yvan-vue-src/src/constant.ts","../../yvan-vue-src/src/components/design/designCompoent/yv-design-datasource.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-treefield-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-treefield.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-titlefield.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-titlefield-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-titlefield.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-staticfield.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-staticfield-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-staticfield.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-alert-prop.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-alert.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-alert.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-numberfield.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-numberfield-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-numberfield.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-filefield.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-filefield-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-filefield.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-radiogroup.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-radiogroup-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-radiogroup.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-combo.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-combo-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-combo.vue","../../yvan-vue-src/src/components/vjson/ComboGridMixin.js","../../yvan-vue-src/src/components/vjson/yv-vjson-combogrid.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-combogrid-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-combogrid.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-combosearch.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-combosearch-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-combosearch.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-datefield.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-datefield-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-datefield.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-datetimefield-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-datetimefield.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-aggrid-column-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-aggrid-column.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-input-json.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-aggrid-prop.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-aggrid-editor.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-aggrid-combo.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-aggrid-date.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-aggrid-input.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-aggrid-combogrid.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-aggrid-action.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-aggrid-checkbox.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-aggrid-color.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-aggrid.vue","../../yvan-vue-src/node_modules/@vue/reactivity/node_modules/@vue/shared/dist/shared.esm-bundler.js","../../yvan-vue-src/node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js","../../yvan-vue-src/node_modules/ag-grid-community/dist/ag-grid-community.auto.esm.mjs","../../yvan-vue-src/node_modules/ag-grid-vue3/lib/VueComponentFactory.js","../../yvan-vue-src/node_modules/ag-grid-vue3/lib/VueFrameworkComponentWrapper.js","../../yvan-vue-src/node_modules/ag-grid-vue3/lib/Utils.js","../../yvan-vue-src/node_modules/ag-grid-vue3/lib/VueFrameworkOverrides.js","../../yvan-vue-src/node_modules/ag-grid-vue3/lib/AgGridVue.js","../../yvan-vue-src/src/components/design/designCompoent/yv-design-aggrid.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-toolbar.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-toolbar-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-toolbar.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-slot-prop.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-slot.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-slot.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-fieldslot-prop.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-fieldslot.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-fieldslot.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-tabs.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-tabs-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-tabs.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-split.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-split-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-split.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-checkbox-prop.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-checkbox.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-checkbox.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-divider-prop.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-divider.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-divider.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-divider-formitem-prop.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-divider-formitem.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-divider-formitem.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-tree-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-tree.vue","../../yvan-vue-src/src/components/design/designPrint/yv-designer-aggrid-combo.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-exprform-prop.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-aggrid-dynamic.vue","../../yvan-vue-src/src/components/vjson/yv-query-field.vue","../../yvan-vue-src/src/components/vjson/yv-querycode.vue","../../yvan-vue-src/src/components/vjson/yv-querybuild-util.js","../../yvan-vue-src/src/components/vjson/yv-querybuild.vue","../../yvan-vue-src/src/components/vjson/yv-ordercode.vue","../../yvan-vue-src/src/components/vjson/yv-orderbuild.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-parambuild.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-exprform.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-exprform.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-list.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-list-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-list.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-textel.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-textel-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-textel.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-gridcheck-prop.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-gridcheck.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-gridcheck.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-source.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-source-prop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-source.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-editorprop-prop.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-editorprop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-editorprop.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-log-prop.vue","../../yvan-vue-src/src/components/vjson/yv-vjson-log.vue","../../yvan-vue-src/src/components/design/designCompoent/yv-design-log.vue","../../yvan-vue-src/src/studio/pages/print-template-designer/utils.ts","../../yvan-vue-src/src/studio/pages/print-template-designer/Designer.ts","../../yvan-vue-src/src/studio/pages/print-template-designer/mixins/viewMixins.js","../../yvan-vue-src/src/studio/pages/print-template-designer/widgets/YLTypeText.vue","../../yvan-vue-src/src/studio/pages/print-template-designer/widgets/YLTypeBarcode.vue","../../yvan-vue-src/src/studio/pages/print-template-designer/widgets/YLTypeQrcode.vue","../../yvan-vue-src/src/studio/pages/print-template-designer/widgets/YLTypeImage.vue","../../yvan-vue-src/src/studio/pages/print-template-designer/widgets/YLTypeView.vue","../../yvan-vue-src/src/studio/pages/print-template-designer/widgets/index.ts","../../yvan-vue-src/src/components/index.ts","../../yvan-vue-src/src/components/design/CodeWindow.ts","../../yvan-vue-src/node_modules/ag-grid-enterprise/dist/ag-grid-enterprise.auto.esm.mjs","../../yvan-vue-src/src/ag_grid_license.js","../../yvan-vue-src/static/add-img.jpg","../../yvan-vue-src/src/studio/pages/yv-studio-home.vue","../../yvan-vue-src/src/studio/pages/yv-studio-design-api.vue","../../yvan-vue-src/src/studio/pages/yv-studio-design-fav.vue","../../yvan-vue-src/src/studio/pages/yv-studio-module-dialog.vue","../../yvan-vue-src/src/studio/utils/FileHelp.ts","../../yvan-vue-src/src/studio/pages/yv-studio-design-file.vue","../../yvan-vue-src/src/components/design/yv-designer-data-structure.vue","../../yvan-vue-src/src/components/design/yv-designer-ref-structure.vue","../../yvan-vue-src/src/studio/pages/yv-studio-design-outline.vue","../../yvan-vue-src/src/components/design/yv-designer-toolbox-config.js","../../yvan-vue-src/src/studio/pages/yv-studio-design-toolbox.vue","../../yvan-vue-src/src/components/design/Bem.vue","../../yvan-vue-src/src/components/design/yv-designer-paint.vue","../../yvan-vue-src/src/components/design/yv-designer-export.vue","../../yvan-vue-src/src/components/design/yv-preview.vue","../../yvan-vue-src/src/studio/pages/yv-studio-design-reset-layout.vue","../../yvan-vue-src/src/components/design/yv-preview-code.vue","../../yvan-vue-src/src/studio/pages/yv-studio-design.vue","../../yvan-vue-src/src/studio/pages/database/yv-database-sql-editor-dialog.vue","../../yvan-vue-src/src/studio/pages/database/yv-database-sql-editor-dialog.vue","../../yvan-vue-src/src/studio/pages/database/yv-database-table-dialog.vue","../../yvan-vue-src/src/studio/pages/database/yv-database-table-dialog.vue","../../yvan-vue-src/src/studio/pages/database/grid/grid-column-domain-cell-editor.vue","../../yvan-vue-src/src/studio/pages/database/grid/grid-column-domain-cell-editor.vue","../../yvan-vue-src/src/studio/pages/database/grid/grid-dict-cell-editor.vue","../../yvan-vue-src/src/studio/pages/database/grid/grid-dict-cell-editor.vue","../../yvan-vue-src/src/studio/pages/database/yv-database-table-design.vue","../../yvan-vue-src/src/studio/pages/database/yv-database-column-domain.vue","../../yvan-vue-src/src/studio/pages/yv-studio-database.vue","../../yvan-vue-src/src/studio/pages/yv-studio-database.vue","../../yvan-vue-src/src/studio/pages/yv-studio-dict.vue","../../yvan-vue-src/src/studio/pages/yv-studio-dict.vue","../../yvan-vue-src/src/studio/pages/api/ApiConfig.design.js","../../yvan-vue-src/src/studio/pages/api/ApiConfigDialog.design.js","../../yvan-vue-src/src/studio/pages/api/ApiConfigDialog.vue","../../yvan-vue-src/src/studio/pages/api/ApiInfoConfigDialog.design.js","../../yvan-vue-src/src/studio/pages/api/ApiInfoConfigDialog.vue","../../yvan-vue-src/src/studio/pages/api/ApiConfig.vue","../../yvan-vue-src/src/studio/pages/api/ApiLogs.design.js","../../yvan-vue-src/src/studio/pages/api/ApiLogs.vue","../../yvan-vue-src/src/studio/pages/yv-studio-interface.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-plan.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-plan.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-template-paper.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-template-paper.vue","../../x-spreadsheet/src/component/element.js","../../x-spreadsheet/src/core/alphabet.js","../../x-spreadsheet/src/core/cell_range.js","../../x-spreadsheet/src/core/selector.js","../../x-spreadsheet/src/core/scroll.js","../../x-spreadsheet/src/core/history.js","../../x-spreadsheet/src/core/clipboard.js","../../x-spreadsheet/src/core/auto_filter.js","../../x-spreadsheet/src/core/merge.js","../../x-spreadsheet/src/core/helper.js","../../x-spreadsheet/src/core/row.js","../../x-spreadsheet/src/core/col.js","../../x-spreadsheet/src/locale/en.js","../../x-spreadsheet/src/locale/locale.js","../../x-spreadsheet/src/core/validator.js","../../x-spreadsheet/src/core/validation.js","../../x-spreadsheet/src/core/data_proxy.js","../../x-spreadsheet/src/component/event.js","../../x-spreadsheet/src/config.js","../../x-spreadsheet/src/component/resizer.js","../../x-spreadsheet/src/component/scrollbar.js","../../x-spreadsheet/src/component/selector.js","../../x-spreadsheet/src/component/suggest.js","../../x-spreadsheet/src/component/icon.js","../../x-spreadsheet/src/component/calendar.js","../../x-spreadsheet/src/component/datepicker.js","../../x-spreadsheet/src/component/editor.js","../../x-spreadsheet/src/component/contextmenu.js","../../x-spreadsheet/src/core/font.js","../../x-spreadsheet/src/core/cell.js","../../x-spreadsheet/src/core/formula.js","../../x-spreadsheet/src/core/format.js","../../x-spreadsheet/src/canvas/draw.js","../../x-spreadsheet/src/component/table.js","../../x-spreadsheet/src/component/tooltip.js","../../x-spreadsheet/src/component/toolbar/item.js","../../x-spreadsheet/src/component/toolbar/dropdown_item.js","../../x-spreadsheet/src/component/dropdown.js","../../x-spreadsheet/src/component/dropdown_align.js","../../x-spreadsheet/src/component/toolbar/align.js","../../x-spreadsheet/src/component/toolbar/valign.js","../../x-spreadsheet/src/component/toolbar/toggle_item.js","../../x-spreadsheet/src/component/toolbar/bold.js","../../x-spreadsheet/src/component/toolbar/italic.js","../../x-spreadsheet/src/component/toolbar/strike.js","../../x-spreadsheet/src/component/toolbar/underline.js","../../x-spreadsheet/src/component/color_palette.js","../../x-spreadsheet/src/component/dropdown_color.js","../../x-spreadsheet/src/component/dropdown_linetype.js","../../x-spreadsheet/src/component/border_palette.js","../../x-spreadsheet/src/component/dropdown_border.js","../../x-spreadsheet/src/component/toolbar/border.js","../../x-spreadsheet/src/component/toolbar/icon_item.js","../../x-spreadsheet/src/component/toolbar/clearformat.js","../../x-spreadsheet/src/component/toolbar/paintformat.js","../../x-spreadsheet/src/component/toolbar/text_color.js","../../x-spreadsheet/src/component/toolbar/fill_color.js","../../x-spreadsheet/src/component/dropdown_fontsize.js","../../x-spreadsheet/src/component/toolbar/font_size.js","../../x-spreadsheet/src/component/dropdown_font.js","../../x-spreadsheet/src/component/toolbar/font.js","../../x-spreadsheet/src/component/dropdown_format.js","../../x-spreadsheet/src/component/toolbar/format.js","../../x-spreadsheet/src/component/toolbar/merge.js","../../x-spreadsheet/src/component/toolbar/redo.js","../../x-spreadsheet/src/component/toolbar/undo.js","../../x-spreadsheet/src/component/toolbar/textwrap.js","../../x-spreadsheet/src/component/toolbar/more.js","../../x-spreadsheet/src/component/toolbar/index.js","../../x-spreadsheet/src/component/modal.js","../../x-spreadsheet/src/component/form_input.js","../../x-spreadsheet/src/component/form_select.js","../../x-spreadsheet/src/component/form_field.js","../../x-spreadsheet/src/component/button.js","../../x-spreadsheet/src/component/modal_validation.js","../../x-spreadsheet/src/component/sort_filter.js","../../x-spreadsheet/src/component/message.js","../../x-spreadsheet/src/component/sheet.js","../../x-spreadsheet/src/component/bottombar.js","../../x-spreadsheet/src/index.js","../../x-spreadsheet/src/locale/zh-cn.js","../../yvan-vue-src/src/components/design/designPrint/yv-designer-json-datasource.vue","../../yvan-vue-src/src/components/design/designPrint/yv-designer-json-datasource.vue","../../yvan-vue-src/src/components/design/designPrint/yv-designer-sql-datasource.vue","../../yvan-vue-src/src/components/design/designPrint/yv-designer-sql-datasource.vue","../../yvan-vue-src/src/components/design/designPrint/yv-designer-data-props.vue","../../yvan-vue-src/src/components/design/designPrint/yv-designer-data-props.vue","../../yvan-vue-src/src/components/design/designPrint/yv-designer-base-props.vue","../../yvan-vue-src/src/components/design/designPrint/yv-designer-base-props.vue","../../yvan-vue-src/src/components/design/designPrint/yv-designer-qrcode-props.vue","../../yvan-vue-src/src/components/design/designPrint/yv-designer-qrcode-props.vue","../../yvan-vue-src/src/components/design/designPrint/yv-designer-style-props.vue","../../yvan-vue-src/src/components/design/designPrint/yv-designer-style-props.vue","../../yvan-vue-src/src/components/design/designPrint/yv-designer-props.vue","../../yvan-vue-src/src/components/design/designPrint/yv-designer-props.vue","../../yvan-vue-src/src/components/design/designPrint/yv-designer-spread.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-template-datasource-json.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-template-datasource-json.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-template-datasource-sql.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-template-datasource-sql.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-template-datasource.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-template-datasource.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-template-designer.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-template.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-template.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-terminal.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-terminal.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-task.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-task.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print-record.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print.vue","../../yvan-vue-src/src/studio/pages/yv-studio-print.vue","../../yvan-vue-src/src/studio/pages/yv-studio-param.vue","../../yvan-vue-src/src/studio/pages/yv-studio-search-widget.vue","../../yvan-vue-src/src/studio/pages/yv-studio-tools.design.js","../../yvan-vue-src/src/studio/pages/yv-studio-tools.vue","../../yvan-vue-src/src/studio/pages/yv-studio-workflow.vue","../../yvan-vue-src/src/studio/index.ts","../../yvan-vue-src/src/extend.ts","../../yvan-vue-src/src/hooks/useWindowSizeFn.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    var desc = Object.getOwnPropertyDescriptor(m, k);\r\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n        desc = { enumerable: true, get: function() { return m[k]; } };\r\n    }\r\n    Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n    if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n    return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import _ from 'lodash'\r\nimport Designer from \"../design/designer\";\r\n\r\nexport default class VJsonContext {\r\n\r\n    static createRuntime(vueInstance: any): VJsonContext {\r\n        const vcxt = new VJsonContext()\r\n        vcxt.scope = vueInstance\r\n        delete vcxt.data\r\n        delete vcxt.designer\r\n        return vcxt\r\n    }\r\n\r\n    readonly runtimeId = _.uniqueId('rt_')\r\n    _slots\r\n\r\n    getSlot(slotName: string) {\r\n        return this.runtimeId + \"_\" + slotName\r\n    }\r\n\r\n    setSlots(value) {\r\n        this._slots = value\r\n    }\r\n\r\n    getSlotByName(name) {\r\n        return this._slots[name]\r\n    }\r\n\r\n    /**\r\n     * [仅设计时有效] vjson 中，用 reference:'xx' 定义过的组件，在这里可以拿到引用\r\n     */\r\n    refs = {}\r\n\r\n    $uiBlocks = {}\r\n\r\n    /**\r\n     * [仅设计时有效] 数据模型对象\r\n     */\r\n    data = {}\r\n\r\n    /**\r\n     * [仅设计时有效] 设计器对象\r\n     */\r\n    designer!: Designer\r\n\r\n    /**\r\n     * 仅运行时有效\r\n     */\r\n    scope!: any\r\n}","\r\nexport const containers = [\r\n  {\r\n    type: 'grid',\r\n    category: 'container',\r\n    icon: 'x-fa fa-th',\r\n    cols: [],\r\n    options: {\r\n      name: '',\r\n      hidden: false,\r\n      gutter: 12,\r\n      colHeight: null,  //栅格列统一高度属性，用于解决栅格列设置响应式布局浮动后被挂住的问题！！\r\n      customClass: '',  //自定义css类名\r\n    }\r\n  },\r\n\r\n  {\r\n    type: 'table',\r\n    category: 'container',\r\n    icon: 'table',\r\n    rows: [],\r\n    options: {\r\n      name: '',\r\n      hidden: false,\r\n      customClass: '',  //自定义css类名\r\n    }\r\n  },\r\n\r\n  {\r\n    type: 'tab',\r\n    category: 'container',\r\n    icon: 'tab',\r\n    displayType: 'border-card',\r\n    tabs: [],\r\n    options: {\r\n      name: '',\r\n      hidden: false,\r\n      customClass: '',  //自定义css类名\r\n    }\r\n  },\r\n\r\n  {\r\n    type: 'toolbar',\r\n    category: 'container',\r\n    icon: 'x-fa fa-columns',\r\n    displayType: 'border-card',\r\n    tabs: [],\r\n    options: {\r\n      name: '',\r\n      hidden: false,\r\n      customClass: '',  //自定义css类名\r\n    }\r\n  },\r\n\r\n  {\r\n    type: 'grid-col',\r\n    category: 'container',\r\n    icon: 'grid-col',\r\n    internal: true,\r\n    widgetList: [],\r\n    options: {\r\n      name: '',\r\n      hidden: false,\r\n      span: 12,\r\n      offset: 0,\r\n      push: 0,\r\n      pull: 0,\r\n      responsive: false,  //是否开启响应式布局\r\n      md: 12,\r\n      sm: 12,\r\n      xs: 12,\r\n      customClass: '',  //自定义css类名\r\n    }\r\n  },\r\n\r\n  {\r\n    type: 'table-cell',\r\n    category: 'container',\r\n    icon: 'table-cell',\r\n    internal: true,\r\n    widgetList: [],\r\n    merged: false,\r\n    options: {\r\n      name: '',\r\n      cellWidth: '',\r\n      cellHeight: '',\r\n      colspan: 1,\r\n      rowspan: 1,\r\n      customClass: '',  //自定义css类名\r\n    }\r\n  },\r\n\r\n  {\r\n    type: 'tab-pane',\r\n    category: 'container',\r\n    icon: 'tab-pane',\r\n    internal: true,\r\n    widgetList: [],\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      hidden: false,\r\n      active: false,\r\n      disabled: false,\r\n      customClass: '',  //自定义css类名\r\n    }\r\n  },\r\n\r\n\r\n]\r\n\r\nexport const basicFields = [\r\n  {\r\n    type: 'input',\r\n    icon: 'text-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      type: 'text',\r\n      defaultValue: '',\r\n      placeholder: '',\r\n      columnWidth: '200px',\r\n      size: '',\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      readonly: false,\r\n      disabled: false,\r\n      hidden: false,\r\n      clearable: true,\r\n      showPassword: false,\r\n      required: false,\r\n      requiredHint: '',\r\n      validation: '',\r\n      validationHint: '',\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      minLength: null,\r\n      maxLength: null,\r\n      showWordLimit: false,\r\n      prefixIcon: '',\r\n      suffixIcon: '',\r\n      appendButton: false,\r\n      appendButtonDisabled: false,\r\n      buttonIcon: 'custom-search',\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onInput: '',\r\n      onChange: '',\r\n      onFocus: '',\r\n      onBlur: '',\r\n      onValidate: '',\r\n      onAppendButtonClick: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'textarea',\r\n    icon: 'textarea-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      rows: 3,\r\n      defaultValue: '',\r\n      placeholder: '',\r\n      columnWidth: '200px',\r\n      size: '',\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      readonly: false,\r\n      disabled: false,\r\n      hidden: false,\r\n      required: false,\r\n      requiredHint: '',\r\n      validation: '',\r\n      validationHint: '',\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      minLength: null,\r\n      maxLength: null,\r\n      showWordLimit: false,\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onInput: '',\r\n      onChange: '',\r\n      onFocus: '',\r\n      onBlur: '',\r\n      onValidate: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'number',\r\n    icon: 'number-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      defaultValue: 0,\r\n      placeholder: '',\r\n      columnWidth: '200px',\r\n      size: '',\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      disabled: false,\r\n      hidden: false,\r\n      required: false,\r\n      requiredHint: '',\r\n      validation: '',\r\n      validationHint: '',\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      min: -100000000000,\r\n      max: 100000000000,\r\n      precision: 0,\r\n      step: 1,\r\n      controlsPosition: 'right',\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onChange: '',\r\n      onFocus: '',\r\n      onBlur: '',\r\n      onValidate: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'radio',\r\n    icon: 'radio-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      defaultValue: null,\r\n      columnWidth: '200px',\r\n      size: '',\r\n      displayStyle: 'inline',\r\n      buttonStyle: false,\r\n      border: false,\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      disabled: false,\r\n      hidden: false,\r\n      optionItems: [\r\n        {label: 'radio 1', value: 1},\r\n        {label: 'radio 2', value: 2},\r\n        {label: 'radio 3', value: 3},\r\n      ],\r\n      required: false,\r\n      requiredHint: '',\r\n      validation: '',\r\n      validationHint: '',\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onChange: '',\r\n      onValidate: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'checkbox',\r\n    icon: 'checkbox-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      defaultValue: [],\r\n      columnWidth: '200px',\r\n      size: '',\r\n      displayStyle: 'inline',\r\n      buttonStyle: false,\r\n      border: false,\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      disabled: false,\r\n      hidden: false,\r\n      optionItems: [\r\n        {label: 'check 1', value: 1},\r\n        {label: 'check 2', value: 2},\r\n        {label: 'check 3', value: 3},\r\n      ],\r\n      required: false,\r\n      requiredHint: '',\r\n      validation: '',\r\n      validationHint: '',\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onChange: '',\r\n      onValidate: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'select',\r\n    icon: 'select-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      defaultValue: '',\r\n      placeholder: '',\r\n      columnWidth: '200px',\r\n      size: '',\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      disabled: false,\r\n      hidden: false,\r\n      clearable: true,\r\n      filterable: false,\r\n      allowCreate: false,\r\n      remote: false,\r\n      automaticDropdown: false,  //自动下拉\r\n      multiple: false,\r\n      multipleLimit: 0,\r\n      optionItems: [\r\n        {label: 'select 1', value: 1},\r\n        {label: 'select 2', value: 2},\r\n        {label: 'select 3', value: 3},\r\n      ],\r\n      required: false,\r\n      requiredHint: '',\r\n      validation: '',\r\n      validationHint: '',\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onRemoteQuery: '',\r\n      onChange: '',\r\n      onFocus: '',\r\n      onBlur: '',\r\n      onValidate: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'time',\r\n    icon: 'time-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      defaultValue: null,\r\n      placeholder: '',\r\n      columnWidth: '200px',\r\n      size: '',\r\n      autoFullWidth: true,\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      readonly: false,\r\n      disabled: false,\r\n      hidden: false,\r\n      clearable: true,\r\n      editable: false,\r\n      format: 'HH:mm:ss',  //时间格式\r\n      required: false,\r\n      requiredHint: '',\r\n      validation: '',\r\n      validationHint: '',\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onChange: '',\r\n      onFocus: '',\r\n      onBlur: '',\r\n      onValidate: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'time-range',\r\n    icon: 'time-range-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      defaultValue: null,\r\n      startPlaceholder: '',\r\n      endPlaceholder: '',\r\n      columnWidth: '200px',\r\n      size: '',\r\n      autoFullWidth: true,\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      readonly: false,\r\n      disabled: false,\r\n      hidden: false,\r\n      clearable: true,\r\n      editable: false,\r\n      format: 'HH:mm:ss',  //时间格式\r\n      required: false,\r\n      requiredHint: '',\r\n      validation: '',\r\n      validationHint: '',\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onChange: '',\r\n      onFocus: '',\r\n      onBlur: '',\r\n      onValidate: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'date',\r\n    icon: 'date-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      type: 'date',\r\n      defaultValue: null,\r\n      placeholder: '',\r\n      columnWidth: '200px',\r\n      size: '',\r\n      autoFullWidth: true,\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      readonly: false,\r\n      disabled: false,\r\n      hidden: false,\r\n      clearable: true,\r\n      editable: false,\r\n      format: 'YYYY-MM-DD',  //日期显示格式\r\n      valueFormat: 'YYYY-MM-DD',  //日期对象格式\r\n      required: false,\r\n      requiredHint: '',\r\n      validation: '',\r\n      validationHint: '',\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onChange: '',\r\n      onFocus: '',\r\n      onBlur: '',\r\n      onValidate: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'date-range',\r\n    icon: 'date-range-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      type: 'daterange',\r\n      defaultValue: null,\r\n      startPlaceholder: '',\r\n      endPlaceholder: '',\r\n      columnWidth: '200px',\r\n      size: '',\r\n      autoFullWidth: true,\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      readonly: false,\r\n      disabled: false,\r\n      hidden: false,\r\n      clearable: true,\r\n      editable: false,\r\n      format: 'YYYY-MM-DD',  //日期显示格式\r\n      valueFormat: 'YYYY-MM-DD',  //日期对象格式\r\n      required: false,\r\n      requiredHint: '',\r\n      validation: '',\r\n      validationHint: '',\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onChange: '',\r\n      onFocus: '',\r\n      onBlur: '',\r\n      onValidate: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'switch',\r\n    icon: 'switch-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      defaultValue: null,\r\n      columnWidth: '200px',\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      disabled: false,\r\n      hidden: false,\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      switchWidth: 40,\r\n      activeText: '',\r\n      inactiveText: '',\r\n      activeColor: null,\r\n      inactiveColor: null,\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onChange: '',\r\n      onValidate: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'rate',\r\n    icon: 'rate-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      defaultValue: null,\r\n      columnWidth: '200px',\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      disabled: false,\r\n      hidden: false,\r\n      required: false,\r\n      requiredHint: '',\r\n      validation: '',\r\n      validationHint: '',\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      max: 5,\r\n      lowThreshold: 2,\r\n      highThreshold: 4,\r\n      allowHalf: false,\r\n      showText: false,\r\n      showScore: false,\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onChange: '',\r\n      onValidate: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'color',\r\n    icon: 'color-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      defaultValue: null,\r\n      columnWidth: '200px',\r\n      size: '',\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      disabled: false,\r\n      hidden: false,\r\n      required: false,\r\n      requiredHint: '',\r\n      validation: '',\r\n      validationHint: '',\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onChange: '',\r\n      onValidate: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'slider',\r\n    icon: 'slider-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      columnWidth: '200px',\r\n      showStops: true,\r\n      size: '',\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      disabled: false,\r\n      hidden: false,\r\n      required: false,\r\n      requiredHint: '',\r\n      validation: '',\r\n      validationHint: '',\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      min: 0,\r\n      max: 100,\r\n      step: 10,\r\n      range: false,\r\n      //vertical: false,\r\n      height: null,\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onChange: '',\r\n      onValidate: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'static-text',\r\n    icon: 'static-text',\r\n    formItemFlag: false,\r\n    options: {\r\n      name: '',\r\n      columnWidth: '200px',\r\n      hidden: false,\r\n      textContent: 'static text',\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'html-text',\r\n    icon: 'html-text',\r\n    formItemFlag: false,\r\n    options: {\r\n      name: '',\r\n      columnWidth: '200px',\r\n      hidden: false,\r\n      htmlContent: '<b>html text</b>',\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'button',\r\n    icon: 'button',\r\n    formItemFlag: false,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      columnWidth: '200px',\r\n      size: '',\r\n      displayStyle: 'block',\r\n      disabled: false,\r\n      hidden: false,\r\n      type: '',\r\n      plain: false,\r\n      round: false,\r\n      circle: false,\r\n      icon: null,\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onClick: '',\r\n    },\r\n  },\r\n  {\r\n    xtype: 'button',\r\n    icon: 'x-fa fa-sign-in',\r\n    formItemFlag: false,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      columnWidth: '200px',\r\n      size: '',\r\n      displayStyle: 'block',\r\n      disabled: false,\r\n      hidden: false,\r\n      type: '',\r\n      plain: false,\r\n      round: false,\r\n      circle: false,\r\n      icon: null,\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onClick: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'divider',\r\n    icon: 'divider',\r\n    formItemFlag: false,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      columnWidth: '200px',\r\n      direction: 'horizontal',\r\n      contentPosition: 'center',\r\n      hidden: false,\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n    },\r\n  },\r\n\r\n  //\r\n\r\n]\r\n\r\nexport const advancedFields = [\r\n  {\r\n    type: 'picture-upload',\r\n    icon: 'picture-upload-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      columnWidth: '200px',\r\n      disabled: false,\r\n      hidden: false,\r\n      required: false,\r\n      requiredHint: '',\r\n      customRule: '',\r\n      customRuleHint: '',\r\n      //-------------------\r\n      uploadURL: '',\r\n      uploadTip: '',\r\n      withCredentials: false,\r\n      multipleSelect: false,\r\n      showFileList: true,\r\n      limit: 3,\r\n      fileMaxSize: 5, //MB\r\n      fileTypes: ['jpg', 'jpeg', 'png'],\r\n      //headers: [],\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onBeforeUpload: '',\r\n      onUploadSuccess: '',\r\n      onUploadError: '',\r\n      onFileRemove: '',\r\n      onValidate: '',\r\n      //onFileChange: '',\r\n    },\r\n\r\n  },\r\n\r\n  {\r\n    type: 'file-upload',\r\n    icon: 'file-upload-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      columnWidth: '200px',\r\n      disabled: false,\r\n      hidden: false,\r\n      required: false,\r\n      requiredHint: '',\r\n      customRule: '',\r\n      customRuleHint: '',\r\n      //-------------------\r\n      uploadURL: '',\r\n      uploadTip: '',\r\n      withCredentials: false,\r\n      multipleSelect: false,\r\n      showFileList: true,\r\n      limit: 3,\r\n      fileMaxSize: 5, //MB\r\n      fileTypes: ['doc', 'docx', 'xls', 'xlsx'],\r\n      //headers: [],\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onBeforeUpload: '',\r\n      onUploadSuccess: '',\r\n      onUploadError: '',\r\n      onFileRemove: '',\r\n      onValidate: '',\r\n      //onFileChange: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'rich-editor',\r\n    icon: 'rich-editor-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      placeholder: '',\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      columnWidth: '200px',\r\n      contentHeight: '200px',\r\n      disabled: false,\r\n      hidden: false,\r\n      required: false,\r\n      requiredHint: '',\r\n      customRule: '',\r\n      customRuleHint: '',\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      minLength: null,\r\n      maxLength: null,\r\n      showWordLimit: false,\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onValidate: '',\r\n    },\r\n  },\r\n\r\n  {\r\n    type: 'cascader',\r\n    icon: 'cascader-field',\r\n    formItemFlag: true,\r\n    options: {\r\n      name: '',\r\n      label: '',\r\n      labelAlign: '',\r\n      defaultValue: '',\r\n      placeholder: '',\r\n      size: '',\r\n      labelWidth: null,\r\n      labelHidden: false,\r\n      columnWidth: '200px',\r\n      disabled: false,\r\n      hidden: false,\r\n      clearable: true,\r\n      filterable: false,\r\n      multiple: false,\r\n      checkStrictly: false,  //可选择任意一级选项，默认不开启\r\n      showAllLevels: true,  //显示完整路径\r\n      optionItems: [\r\n        {label: 'select 1', value: 1, children: [{label: 'child 1', value: 11}]},\r\n        {label: 'select 2', value: 2},\r\n        {label: 'select 3', value: 3},\r\n      ],\r\n      required: false,\r\n      requiredHint: '',\r\n      customRule: '',\r\n      customRuleHint: '',\r\n      //-------------------\r\n      customClass: '',  //自定义css类名\r\n      labelIconClass: null,\r\n      labelIconPosition: 'rear',\r\n      labelTooltip: null,\r\n      //-------------------\r\n      onCreated: '',\r\n      onMounted: '',\r\n      onChange: '',\r\n      onFocus: '',\r\n      onBlur: '',\r\n      onValidate: '',\r\n    },\r\n  },\r\n\r\n]\r\n\r\nexport const customFields = [\r\n\r\n]\r\n\r\nexport function addContainerWidgetSchema(containerSchema) {\r\n  containers.push(containerSchema)\r\n}\r\n\r\nexport function addBasicFieldSchema(fieldSchema) {\r\n  basicFields.push(fieldSchema)\r\n}\r\n\r\nexport function addAdvancedFieldSchema(fieldSchema) {\r\n  advancedFields.push(fieldSchema)\r\n}\r\n\r\nexport function addCustomWidgetSchema(widgetSchema) {\r\n  customFields.push(widgetSchema)\r\n}\r\n","import mitt from 'mitt'\r\n\r\nconst instance = mitt()\r\nconst eventBus = {}\r\neventBus.$on = instance.on\r\neventBus.$off = instance.off\r\neventBus.$emit = instance.emit\r\n\r\nexport default eventBus\r\n","import _ from 'lodash'\r\nimport {h, markRaw} from \"vue\"\r\nimport * as ElementIcons from '@element-plus/icons-vue'\r\nimport {getLayoutOutlineDefine} from \"./design/yv-designer-desc\";\r\n\r\n/**\r\n * 计算 1mm 的像素数\r\n */\r\n// window['oneMMOfPx'] = oneMMOfPx\r\nwindow['oneMMOfPx'] = mmConversionPx(1)\r\n// console.log('1mm=' + window['oneMMOfPx'] + 'px');\r\n\r\nlet dpix: number = undefined\r\nlet dpiy: number = undefined\r\n\r\n/**\r\n * 解析控件中的 ctl.bind[property], 如果有绑定对象，尝试获取到值.\r\n * 如果 ctl.bind[property] 写的是 {a.b} 就从 vcxt.scope.a.b 中获取\r\n * 如果 ctl.bind[property] 写的是 a.b 就从 vcxt.scope.a.b 中获取\r\n * 如果 ctl.bind[property] 写的是 $row.a.b 就从 scope-dialog.row.a.b 中获取\r\n * @param ctl 子控件\r\n * @param property bind 中的属性, 比如 value 代表取 ctl.bind.value\r\n */\r\nexport function evalGetBind(ctl, property) {\r\n    if (!ctl.bind) {\r\n        return\r\n    }\r\n    let bindValue = ctl.bind[property]\r\n    if (!bindValue) {\r\n        return\r\n    }\r\n    if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n        bindValue = bindValue.substring(1, bindValue.length - 1)\r\n    }\r\n    if (!bindValue) {\r\n        return\r\n    }\r\n\r\n    if (_.startsWith(bindValue, '$row.')) {\r\n        bindValue = bindValue.substring(5)\r\n        return _.get(ctl.dialogScope, 'row.' + bindValue)\r\n    }\r\n    return _.get(ctl.vcxt.scope, bindValue)\r\n}\r\n\r\n/**\r\n * 解析控件中的 ctl.bind[property], 如果有绑定表达式，尝试写入值\r\n * 如果 ctl.bind[property] 写的是 {a.b} 就写入 ctl.vcxt.scope.a.b\r\n * 如果 ctl.bind[property] 写的是 a.b 就写入 ctl.vcxt.scope.a.b\r\n * 如果 ctl.bind[property] 写的是 $row.a.b 就写入 ctl.scope-dialog.row.a.b\r\n * @param ctl 子控件\r\n * @param property bind 中的属性, 比如 value 代表写入 ctl.bind.value 描述的目标中\r\n * @param value 写入的值\r\n */\r\nexport function evalSetBind(ctl, property, value) {\r\n    if (!ctl.bind) {\r\n        return\r\n    }\r\n    let bindValue = ctl.bind[property]\r\n    if (!bindValue) {\r\n        return\r\n    }\r\n    if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n        bindValue = bindValue.substring(1, bindValue.length - 1)\r\n    }\r\n    if (!bindValue) {\r\n        return\r\n    }\r\n\r\n    if (_.startsWith(bindValue, '$row.')) {\r\n        bindValue = bindValue.substring(5)\r\n        _.set(ctl.dialogScope, 'row.' + bindValue, value)\r\n        return\r\n    }\r\n    _.set(ctl.vcxt.scope, bindValue, value)\r\n}\r\n\r\n/**\r\n * 从引用名和xtype类型，深度递归查找到目标控件\r\n */\r\nexport function findVjsonByReference(vjson, xtype, reference) {\r\n    let result = undefined\r\n    let findCount = 0\r\n\r\n    const tryFindDesignVjson = (designVJson) => {\r\n        deepTrav(designVJson, (target) => {\r\n            // xtype 相同, 且 reference 相同, 且只有唯一的一条记录\r\n            if (target.xtype === xtype && target.reference === reference) {\r\n                result = target\r\n                findCount++\r\n            }\r\n        })\r\n    }\r\n\r\n    // 根据布局处理内容\r\n    const designerVjson = vjson\r\n    const define = getLayoutOutlineDefine(designerVjson)\r\n    if (!define) {\r\n        console.error('没有找到布局定义', designerVjson)\r\n    } else {\r\n        _.forOwn(define, (define, propName) => {\r\n            if (define.isList === true) {\r\n                _.forEach(designerVjson[propName], item => {\r\n                    tryFindDesignVjson(item)\r\n                })\r\n\r\n            } else {\r\n                tryFindDesignVjson(designerVjson[propName])\r\n            }\r\n        })\r\n    }\r\n\r\n    if (findCount === 1) {\r\n        return result\r\n    } else if (findCount === 0) {\r\n        system.msg('找到多个匹配的组件，无法确定')\r\n        return\r\n    }\r\n    system.msg('没有找到对应组件的设计时')\r\n}\r\n\r\n/**\r\n * 判断当前是否处于设计时状态\r\n */\r\nexport function isPreviewMode() {\r\n    return !!window['is_preview_mode'] && !!window['designer']\r\n}\r\n\r\n/**\r\n * 尝试根据运行时 vjson 获取到设计时的 vjson 本体\r\n * 一般用来根据运行时状态，设定设计时的某些属性\r\n */\r\nexport function tryGetDesignVjsonByRuntime(runtimeVjson, designer) {\r\n    let result = undefined\r\n    let findCount = 0\r\n\r\n    const tryFindDesignVjson = (designVJson) => {\r\n        deepTrav(designVJson, (target) => {\r\n            // xtype 相同, 且 reference 相同, 且只有唯一的一条记录\r\n            if (target.xtype === runtimeVjson.xtype &&\r\n                (!runtimeVjson.reference || target.reference === runtimeVjson.reference)) {\r\n\r\n                if (target.xtype === 'aggrid') {\r\n                    // target.columns\r\n                    // 获取 columns 中每个字段的 dataIndex\r\n                    const targetColumnJoin = _.map(target.columns, column => column.dataIndex).join(',')\r\n                    const runtimeVjsonColumnJoin = _.map(runtimeVjson.columns, column => column.dataIndex).join(',')\r\n                    if (targetColumnJoin !== runtimeVjsonColumnJoin) {\r\n                        return\r\n                    }\r\n                }\r\n\r\n                result = target\r\n                findCount++\r\n            }\r\n        })\r\n    }\r\n\r\n    // 根据布局处理内容\r\n    const designerVjson = designer.vjson\r\n    const define = getLayoutOutlineDefine(designerVjson)\r\n    if (!define) {\r\n        console.error('没有找到布局定义', designerVjson)\r\n    } else {\r\n        _.forOwn(define, (define, propName) => {\r\n            if (define.isList === true) {\r\n                _.forEach(designerVjson[propName], item => {\r\n                    tryFindDesignVjson(item)\r\n                })\r\n\r\n            } else {\r\n                tryFindDesignVjson(designerVjson[propName])\r\n            }\r\n        })\r\n    }\r\n\r\n    if (findCount === 1) {\r\n        return result\r\n    } else if (findCount === 0) {\r\n        system.msg('找到多个匹配的组件，无法确定')\r\n        return\r\n    }\r\n    system.msg('没有找到对应组件的设计时')\r\n}\r\n\r\nfunction conversion_getDPI() {\r\n    //@ts-ignore\r\n    if (window.screen.deviceXDPI) {\r\n        //@ts-ignore\r\n        dpix = window.screen.deviceXDPI;\r\n        //@ts-ignore\r\n        dpiy = window.screen.deviceYDPI;\r\n    } else {\r\n        const tmpNode = document.createElement(\"div\");\r\n        tmpNode.style.cssText = \"width:1in;height:1in;position:absolute;left:0px;top:0px;z-index:99;visibility:hidden\";\r\n        document.body.appendChild(tmpNode);\r\n        //@ts-ignore\r\n        dpix = parseInt(tmpNode.offsetWidth);\r\n        //@ts-ignore\r\n        dpiy = parseInt(tmpNode.offsetHeight);\r\n        tmpNode.parentNode.removeChild(tmpNode);\r\n    }\r\n}\r\n\r\n/**\r\n * mm转换为px\r\n * @param value\r\n * @returns {number}\r\n */\r\nfunction mmConversionPx(value) {\r\n    if (!dpix) {\r\n        conversion_getDPI()\r\n    }\r\n    const inch = value / 25.4;\r\n    const c_value = inch * dpix;\r\n    return c_value;\r\n}\r\n\r\nexport function calcStyle(vjson): any {\r\n    const style: any = {}\r\n    if (vjson.heightMode === 'fix') {\r\n        style.height = vjson.height\r\n    }\r\n    if (vjson.marginTop) {\r\n        style.marginTop = vjson.marginTop + 'px'\r\n    }\r\n    if (vjson.marginRight) {\r\n        style.marginRight = vjson.marginRight + 'px'\r\n    }\r\n    if (vjson.marginBottom) {\r\n        style.marginBottom = vjson.marginBottom + 'px'\r\n    }\r\n    if (vjson.marginLeft) {\r\n        style.marginLeft = vjson.marginLeft + 'px'\r\n    }\r\n    if (vjson.paddingTop) {\r\n        style.paddingTop = vjson.paddingTop + 'px'\r\n    }\r\n    if (vjson.paddingRight) {\r\n        style.paddingRight = vjson.paddingRight + 'px'\r\n    }\r\n    if (vjson.paddingBottom) {\r\n        style.paddingBottom = vjson.paddingBottom + 'px'\r\n    }\r\n    if (vjson.paddingLeft) {\r\n        style.paddingLeft = vjson.paddingLeft + 'px'\r\n    }\r\n    if (vjson.cssBackgroundColor) {\r\n        style.backgroundColor = vjson.cssBackgroundColor\r\n    }\r\n    if (vjson.cssColor) {\r\n        if (vjson.xtype === 'staticfield') {\r\n\r\n        } else {\r\n            style.color = vjson.cssColor\r\n        }\r\n\r\n    }\r\n    if (vjson.isBlod) {\r\n        style.fontWeight = 'bold'\r\n    }\r\n    if (vjson.cssFontSize) {\r\n        style.fontSize = vjson.cssFontSize\r\n    }\r\n    if (vjson.textAlign) {\r\n        style.textAlign = vjson.textAlign\r\n    }\r\n    if (vjson.isBorder) {\r\n        style.borderColor = '#dcdfe6'\r\n        style.borderStyle = 'solid'\r\n        style.borderWidth = vjson.isBorder[0] + ' ' + vjson.isBorder[1] + ' ' + vjson.isBorder[2] + ' ' + vjson.isBorder[3]\r\n    }\r\n    return style\r\n}\r\n\r\nexport function calcStyleLabel(vjson): any {//label风格\r\n    const style: any = {}\r\n    if (vjson.labelBackgroundColor) {\r\n        style.backgroundColor = vjson.labelBackgroundColor\r\n        style.padding = '0 5px'\r\n    }\r\n    if (vjson.cssColor) {\r\n        style.color = vjson.cssColor\r\n    }\r\n    if (vjson.isBlod) {\r\n        style.fontWeight = 'bold'\r\n    }\r\n    if (vjson.cssFontSize) {\r\n        style.fontSize = vjson.cssFontSize\r\n    }\r\n    return style\r\n}\r\n\r\nexport function calcStyleContent(vjson): any {//内容风格\r\n    const style: any = {}\r\n    if (vjson.textCssColor) {\r\n        style.color = vjson.textCssColor\r\n    }\r\n    if (vjson.textCssBgColor) {\r\n        style.backgroundColor = vjson.textCssBgColor\r\n        style.padding = '0 5px'\r\n    }\r\n    if (vjson.isBlod) {\r\n        style.fontWeight = 'bold'\r\n    }\r\n    if (vjson.cssFontSize) {\r\n        style.fontSize = vjson.textCssFont\r\n    }\r\n    return style\r\n}\r\n\r\nexport function calcStyleAndWidth(vjson) {\r\n    const style = calcStyle(vjson)\r\n    if (vjson.width) {\r\n        style.width = vjson.width\r\n    }\r\n    if (vjson.minHeight) {\r\n        style.minHeight = vjson.minHeight\r\n    }\r\n    if (vjson.maxHeight) {\r\n        style.maxHeight = vjson.maxHeight\r\n    }\r\n    if (vjson.isBorder) {\r\n        style.borderColor = '#dcdfe6'\r\n        style.borderStyle = 'solid'\r\n        style.borderWidth = vjson.isBorder[0] + ' ' + vjson.isBorder[1] + ' ' + vjson.isBorder[2] + ' ' + vjson.isBorder[3]\r\n    }\r\n    return style\r\n}\r\n\r\nexport function calcClass(vjson) {\r\n    const cls = []\r\n    if (vjson.cls) {\r\n        cls.push(vjson.cls)\r\n    }\r\n    if (vjson.heightMode === 'fit') {\r\n        cls.push('fit-height')\r\n    }\r\n    if (vjson.isCard) {\r\n        cls.push('yv-card')\r\n    }\r\n    return cls\r\n}\r\n\r\n/**\r\n * 获取某元素绝对位置\r\n */\r\nexport function getElementAbsPos(e) {\r\n    let t = e.offsetTop;\r\n    let l = e.offsetLeft;\r\n    while (e = e.offsetParent) {\r\n        t += e.offsetTop;\r\n        l += e.offsetLeft;\r\n    }\r\n    return {left: l, top: t};\r\n}\r\n\r\n/**\r\n * 基于某个VueInstance, 动态运行某个表达式\r\n * @param funcBody 函数体\r\n * @param vueInstance 某个 vue 组件\r\n */\r\nexport function runExpress(funcBody: any, vueInstance: any) {\r\n    const me = vueInstance.vcxt.scope\r\n    const keys = []\r\n    const values = []\r\n    // _.forOwn(me, (v, k) => {\r\n    //     keys.push(k)\r\n    //     values.push(v)\r\n    // })\r\n    //\r\n    // _.forOwn(me.$data, (v, k) => {\r\n    //     keys.push(k)\r\n    //     values.push(v)\r\n    // })\r\n\r\n    const func = Function(...keys, funcBody)\r\n    try {\r\n        return func.bind(vueInstance.vcxt.scope)(...values)\r\n    } catch (e) {\r\n        console.error('runExpress', e)\r\n        //@ts-ignore\r\n        system.showErrorDialog(e.toString())\r\n        return () => {\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * 从字符串，获取带方法体的JS对象。\r\n * 比如根据 design.js 的文本内容，提取出 object 并且内部带有 function 定义\r\n */\r\nexport function parseJsObject(strContent): any {\r\n    strContent = _.trim(strContent)\r\n    if (_.startsWith(strContent, 'export default')) {\r\n        strContent = strContent.substring('export default'.length)\r\n    }\r\n    return eval('(' + strContent + ')')\r\n}\r\n\r\n/**\r\n * 运行事件\r\n * @param scope vcxt.scope\r\n * @param vjson VJSON,是指能包含 listeners 属性的对象\r\n * @param eventName 事件名\r\n * @param args 事件参数\r\n */\r\nexport function runEvent(scope, vjson, eventName, ...args) {\r\n    if (!vjson.listeners) {\r\n        return\r\n    }\r\n    if (typeof vjson.listeners[eventName] === 'string') {\r\n        let funcBody = vjson.listeners[eventName]\r\n        const me = scope\r\n        const methodVarName = []\r\n\r\n        // // 吧 args 参数添加进去\r\n        _.forEach(args, (v, k) => {\r\n            methodVarName.push(\"arg\" + k)\r\n        })\r\n\r\n        // 花括号定义模式\r\n        if (_.startsWith(funcBody, \"{\")) {\r\n            if (_.endsWith(funcBody, \"}\")) {\r\n                // 剔除花括号\r\n                const methodName = funcBody.substring(1, funcBody.length - 1)\r\n\r\n                // 检查有没有其他符号\r\n                if (methodName.includes('+') || methodName.includes('-') || methodName.includes('(') ||\r\n                    methodName.includes(')') || methodName.includes('*') || methodName.includes('/') ||\r\n                    methodName.includes('{') || methodName.includes('}') || methodName.includes(' ')) {\r\n                    console.error('错误表达式:' + funcBody)\r\n                    return\r\n                }\r\n                // funcBody = \"return this.\" + funcBody + \"(arguments);\"\r\n                try {\r\n                    return me[methodName].call(me, ...args)\r\n                } catch (e) {\r\n                    console.error(e)\r\n                    system.showErrorDialog('方法运行错误' + e)\r\n                    return\r\n                }\r\n\r\n            } else {\r\n                console.error('错误表达式:' + funcBody)\r\n                return\r\n            }\r\n        }\r\n\r\n        const func = Function(...methodVarName, funcBody)\r\n        try {\r\n            return func.bind(scope)(...args)\r\n        } catch (e) {\r\n            console.error('runEventError', e)\r\n            //@ts-ignore\r\n            system.showErrorDialog(e.toString())\r\n            return\r\n        }\r\n    }\r\n    if (typeof vjson.listeners[eventName] === 'function') {\r\n        vjson.listeners[eventName].call(scope, this, ...args)\r\n    }\r\n}\r\n\r\nexport function deepEqual(obj1, obj2) {\r\n    console.log('deepEqual', obj1, obj2)\r\n    //其中一个为值类型或null\r\n    if (!(typeof obj1 === 'object') || !(typeof obj2 === 'object')) {\r\n        return obj1 === obj2;\r\n    }\r\n\r\n    //判断是否两个参数是同一个变量\r\n    if (obj1 === obj2) {\r\n        return true;\r\n    }\r\n\r\n    //判断keys数是否相等\r\n    const obj1Keys = Object.keys(obj1);\r\n    const obj2Keys = Object.keys(obj2);\r\n    if (obj1Keys.length !== obj2Keys.length) {\r\n        return false;\r\n    }\r\n\r\n    //深度比较每一个key\r\n    for (let key in obj1) {\r\n        if (!deepEqual(obj1[key], obj2[key])) {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    return true;\r\n}\r\n\r\n/**\r\n * 去掉 VJson 中每一个对象的 ID\r\n */\r\nexport function removeVJsonId(vjson) {\r\n    deepTrav(vjson, (obj) => {\r\n        if (obj.hasOwnProperty('id')) {\r\n            delete obj.id\r\n        }\r\n        if (obj.xtype === 'grid' || obj.xtype === 'yvgrid' || obj.xtype === 'aggrid' || obj.xtype === 'tree') {\r\n            // 为每一个 grid.column 加上 id\r\n            _.forEach(obj.columns, (c) => {\r\n                if (c.hasOwnProperty('id')) {\r\n                    delete c.id\r\n                }\r\n            })\r\n        }\r\n    });\r\n    return vjson\r\n}\r\n\r\n/**\r\n * 为 VJson 每一个对象加上 ID\r\n */\r\nexport function addVJsonId(vjson) {\r\n    deepTrav(vjson, (obj) => {\r\n        if (typeof obj.xtype === 'string') {\r\n            // 为每个带 xtype 属性的元素加上 id\r\n            if (!obj.hasOwnProperty('id')) {\r\n                obj.id = _.uniqueId('_id')\r\n            }\r\n        }\r\n        if (obj.xtype === 'split') {\r\n            // 为每个 split.items 属性的元素加上 id\r\n            _.forEach(obj.items, item => {\r\n                item.id = _.uniqueId('_id')\r\n            })\r\n        }\r\n        if (obj.xtype === 'grid' || obj.xtype === 'yvgrid' || obj.xtype === 'aggrid' || obj.xtype === 'tree' || obj.xtype === 'yvtree') {\r\n            // 为每一个 grid.column 加上 id\r\n            _.forEach(obj.columns, (c) => {\r\n                if (!c.hasOwnProperty('id')) {\r\n                    c.id = _.uniqueId('_id')\r\n                }\r\n            })\r\n        }\r\n    });\r\n    return vjson\r\n}\r\n\r\n/**\r\n * 分析 params 类似这样\r\n * {\r\n *     a: 'watch:{query.f1}:notNull',\r\n *     b: '{query.f2}',\r\n *     c: {\r\n *        c1: '{form1}',\r\n *        c2: 'watch:{form2}:notNull',\r\n *     }\r\n * }\r\n *\r\n * 运行Vue观察函数, 并主动回调\r\n * $watch('query.f1', (res)=>{},{deep:true})\r\n * $watch('form2', (res)=>{},{deep:true})\r\n *\r\n * 返回停止观察的函数\r\n *\r\n * @param $watch Vue.$watch函数\r\n * @param paramObject params描述\r\n * @param cb Watch回调函数\r\n */\r\nexport function analyzeParamsForWatch($watch, paramObject, cb): (() => void)[] {\r\n    const stopHandles: (() => void)[] = []\r\n\r\n    const watchIfExpress = (str) => {\r\n        if (_.startsWith(str, \"watch:\") && str.includes('{') && str.includes('}')) {\r\n            // '{foo}' 简单表达式\r\n            const start = str.indexOf('{')\r\n            const end = str.indexOf('}')\r\n\r\n            const path = str.substring(start + 1, end);\r\n            if (path.length > 0) {\r\n                const watchStop = $watch(path, (newVal) => {\r\n                    cb(path, newVal)\r\n                }, {deep: true})\r\n                // console.log('$watch ', path)\r\n                stopHandles.push(watchStop)\r\n\r\n                return '{' + path + '}'\r\n            }\r\n        }\r\n    }\r\n\r\n    const trav = (param) => {\r\n        _.forOwn(param, (value, key) => {\r\n            if (_.isPlainObject(value)) {\r\n                // 深度递归，对子对象进行求解\r\n                trav(value)\r\n\r\n            } else if (_.isString(value)) {\r\n                // 字符串直接用 calcExpress 表达式求解\r\n                const r = watchIfExpress(param[key])\r\n                // 以下代码注释掉，不要修改源参数，否则会导致表达式无法再次求解\r\n                // if (typeof r === 'string' && r) {\r\n                //     param[key] = r\r\n                // }\r\n\r\n            } else if (_.isArray(value)) {\r\n                // 数组求解\r\n                _.forEach(value, (v, idx) => {\r\n                    if (_.isPlainObject(v)) {\r\n                        // 深度递归，对子对象进行求解\r\n                        trav(v)\r\n                    } else if (_.isString(v)) {\r\n                        const r = watchIfExpress(v)\r\n                        // 以下代码注释掉，不要修改源参数，否则会导致表达式无法再次求解\r\n                        // if (typeof r === 'string' && r) {\r\n                        //     value[idx] = r\r\n                        // }\r\n                    }\r\n                })\r\n            }\r\n        })\r\n    }\r\n\r\n    trav(paramObject)\r\n    return stopHandles\r\n}\r\n\r\n/**\r\n * 为目标字符串每一行，加上一段前缀\r\n */\r\nexport function insertPrefixEachLine(target, prefix) {\r\n    return _.join(_.map(target.split('\\n'), line => {\r\n        return prefix + line\r\n    }), '\\n')\r\n}\r\n\r\nexport const addWindowResizeHandler = function (handler) {\r\n    const oldHandler: any = window.onresize\r\n    if (typeof window.onresize != 'function') {\r\n        window.onresize = handler\r\n    } else {\r\n        window.onresize = function () {\r\n            if (typeof oldHandler === 'function') {\r\n                oldHandler()\r\n            }\r\n            handler()\r\n        }\r\n    }\r\n}\r\n\r\nexport function getDefaultVExport(): any {\r\n    return {\r\n        props: {},\r\n        data: {},\r\n        computed: {},\r\n        methods: {},\r\n    }\r\n}\r\n\r\n/**\r\n * 深度遍历 vjson\r\n * @param obj 视图JSON\r\n * @param resolver 分析函数, 函数的第一个参数是被深度遍历对象，第二个参数是标记变量，如果标记变量中设定了 exitCallback 方法，退出当前遍历时会主动发生调用\r\n * @return 方法返回 false 时就不再进行深度遍历\r\n */\r\nexport function deepTrav(obj, resolver): undefined | boolean {\r\n    const markObj: any = {}\r\n    if (!obj) {\r\n        return\r\n    }\r\n    if (_.isArray(obj)) {\r\n\r\n\r\n    } else if (typeof obj === 'object') {\r\n        const r = resolver(obj, markObj)\r\n        if (r === false) {\r\n            // 短路判断\r\n            return false\r\n        }\r\n    }\r\n\r\n    if (_.isArray(obj.items)) {\r\n        let r\r\n        _.forEach(obj.items, (item) => {\r\n            r = deepTrav(item, resolver)\r\n            return r\r\n        })\r\n        if (r === false) {\r\n            // 短路判断\r\n            return false\r\n        }\r\n    }\r\n\r\n    if (typeof markObj?.exitCallback === 'function') {\r\n        markObj.exitCallback()\r\n    }\r\n}\r\n\r\n/**\r\n * 获取组件的拖拽类型\r\n */\r\nexport function getComponentDragGroup(vjson): 'rowGroup' | 'fieldGroup' {\r\n    if (typeof vjson.xtype === 'string' && vjson.xtype) {\r\n\r\n        const xtype: string = vjson.xtype\r\n        if (xtype === 'button' || xtype === 'combo' || xtype === 'combogrid') {\r\n            return 'fieldGroup'\r\n        }\r\n        if (xtype.includes('field')) {\r\n            return 'fieldGroup'\r\n        }\r\n        if (xtype.includes('check')) {\r\n            return 'fieldGroup'\r\n        }\r\n        if (xtype.includes('radio')) {\r\n            return 'fieldGroup'\r\n        }\r\n        if (xtype.includes('gridcolumn')) {\r\n            return 'fieldGroup'\r\n        }\r\n\r\n        return 'rowGroup'\r\n    }\r\n    console.error('can\\'t get drag group', vjson)\r\n}\r\n\r\n/**\r\n * 获取Vue组件图标\r\n * 不要再用这个函数！ getIcon 已经失效\r\n */\r\n// export function getIcon(icon): any {\r\n//     if (!icon) {\r\n//         return\r\n//     }\r\n//\r\n//     if (_.startsWith(icon, 'x-fa')) {\r\n//         return markRaw(() => {\r\n//             return h('i', {class: icon})\r\n//         })\r\n//     } else {\r\n//         const dd = ElementIcons[icon]\r\n//         if (dd) {\r\n//             // 来源于 elementUI\r\n//             return markRaw(() => {\r\n//                 return h(dd)\r\n//             })\r\n//         }\r\n//     }\r\n// }\r\n\r\nexport function getComponentName(vjson): string {\r\n    /*\r\n    const name = XTypeName[vjson.xtype]\r\n    if (name) {\r\n        return name\r\n    }\r\n     */\r\n    return vjson.xtype ?? vjson.toString()\r\n}\r\n\r\n/**\r\n * 获取 vjson 组件定义中的事件\r\n */\r\nexport function getListener(vjson, eventName, vcxt) {\r\n    const fn = _.get(vjson, 'listeners.' + eventName)\r\n    if (typeof fn === 'function') {\r\n        return fn\r\n    }\r\n    return () => {\r\n    }\r\n}\r\n\r\nexport function buildTreeData(data: Array<object>, config: {\r\n    idField?: string,\r\n    parentField?: string,\r\n    checkField?: string,\r\n    textField?: string,\r\n    iconField?: string,\r\n    checkStrictly?: boolean,\r\n}, checkedIds: string[] = []): Array<{\r\n    icon?: string,\r\n    text?: string,\r\n    children?: [],\r\n    raw: object,\r\n}> {\r\n    if (!data) data = [];\r\n    const allNode = []\r\n    for (const item of data) {\r\n        const node: any = {raw: item}\r\n        if (config?.idField) node.id = item[config?.idField];\r\n        if (config?.parentField) node.parent = item[config?.parentField];\r\n        if (config?.textField) node.text = item[config?.textField];\r\n        if (config?.iconField) node.icon = item[config?.iconField];\r\n        if (config?.checkField) node.check = item[config?.checkField] ?? false;\r\n        if (typeof node.check === 'string') {\r\n            if (node.check === 'true' || node.check === '1') {\r\n                node.check = true\r\n            } else {\r\n                node.check = false\r\n            }\r\n        }\r\n        allNode.push(node)\r\n    }\r\n    const tree = []\r\n    const buildTree = (node: any, isRoot: boolean) => {\r\n        if (!node.id) return\r\n        if (isRoot) tree.push(node)\r\n        const children = allNode.filter(n => n.parent === node.id);\r\n        // console.log(\"###\", node.id, node.check, config.checkStrictly, children.length)\r\n        if (node.check && (config.checkStrictly || children.length <= 0)) {\r\n            checkedIds.push(node.id)\r\n        }\r\n        if (children.length <= 0) return\r\n        node.children = children;\r\n        for (let child of node.children) {\r\n            buildTree(child, false)\r\n        }\r\n    };\r\n    const rootNode = []\r\n    for (let node of allNode) {\r\n        if (!node.parent) {\r\n            rootNode.push(node)\r\n            break\r\n        }\r\n        const parentNode = allNode.find(n => node.parent === n.id)\r\n        if (!parentNode) rootNode.push(node)\r\n    }\r\n    for (let root of rootNode) {\r\n        buildTree(root, true)\r\n    }\r\n    return tree;\r\n}\r\n\r\n\r\nexport function buildFieldTreeData(data: Array<object>, config: {\r\n    idField?: string,\r\n    parentField?: string,\r\n    checkField?: string,\r\n    textField?: string,\r\n    iconField?: string,\r\n    checkStrictly?: boolean,\r\n}): Array<{\r\n    icon?: string,\r\n    label?: string,\r\n    children?: [],\r\n    raw: object,\r\n}> {\r\n    if (!data) data = [];\r\n    const allNode = []\r\n    for (const item of data) {\r\n        const node: any = {raw: item}\r\n        if (config?.idField) node.value = item[config?.idField];\r\n        if (config?.parentField) node.parent = item[config?.parentField];\r\n        if (config?.textField) node.label = item[config?.textField];\r\n        allNode.push(node)\r\n    }\r\n    const tree = []\r\n    const buildTree = (node: any, isRoot: boolean) => {\r\n        if (!node.value) return\r\n        if (isRoot) tree.push(node)\r\n        const children = allNode.filter(n => n.parent === node.value);\r\n        // console.log(\"###\", node.id, node.check, config.checkStrictly, children.length)\r\n        if (children.length <= 0) return\r\n        node.children = children;\r\n        for (let child of node.children) {\r\n            buildTree(child, false)\r\n        }\r\n    };\r\n    const rootNode = []\r\n    for (let node of allNode) {\r\n        if (!node.parent) {\r\n            rootNode.push(node)\r\n            break\r\n        }\r\n        const parentNode = allNode.find(n => node.parent === n.value)\r\n        if (!parentNode) rootNode.push(node)\r\n    }\r\n    for (let root of rootNode) {\r\n        buildTree(root, true)\r\n    }\r\n    return tree;\r\n}","import Designer from \"./designer\"\r\nimport * as monaco from 'monaco-editor'\r\nimport _ from \"lodash\";\r\nimport JSON5 from 'json5'\r\nimport {getLayoutOutlineDefine} from \"./yv-designer-desc\";\r\nimport {toRaw} from \"vue\";\r\n\r\n/**\r\n * 源码编辑器中的 语言支持服务\r\n */\r\nexport default class TsLanguageSupport {\r\n\r\n    static instance = new TsLanguageSupport()\r\n\r\n    /**\r\n     * 当前设计器\r\n     */\r\n    designer: Designer\r\n\r\n    /**\r\n     * 用来释放声明用的数组\r\n     */\r\n    declareList: { content: string, filePath: string }[] = []\r\n\r\n    setupLists: (() => void)[] = []\r\n\r\n    isActived = false\r\n    isChanged = false\r\n    isInited = false\r\n    ts: any\r\n\r\n    /**\r\n     * 初始化语言提示模型\r\n     */\r\n    init(designer: Designer) {\r\n        this.designer = designer\r\n        // this.initOneEditor()\r\n        system.invokeStudio(\"MonacoTypes@getMonacoTypes\").then(({data: defineFileObject}) => {\r\n            _.forOwn(defineFileObject, (fileContent, filePath) => {\r\n                if (_.endsWith(filePath, 'index.d.ts')) {\r\n                    // 这个声明文件是给 idea 编译器用的, 不是给 monaco 用的\r\n                    return\r\n                }\r\n\r\n                this.declareList.push({\r\n                    content: fileContent, filePath\r\n                })\r\n            })\r\n        })\r\n    }\r\n\r\n    initOneEditor() {\r\n        monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({\r\n            noSemanticValidation: true,\r\n            noSyntaxValidation: false\r\n        });\r\n        monaco.languages.typescript.javascriptDefaults.setCompilerOptions({\r\n            target: monaco.languages.typescript.ScriptTarget.ES2016,\r\n            allowNonTsExtensions: true,\r\n        });\r\n\r\n        const defTsCompilerOptions = monaco.languages.typescript.typescriptDefaults.getCompilerOptions();\r\n        monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\r\n            ...defTsCompilerOptions,\r\n            target: monaco.languages.typescript.ScriptTarget.ES2020,\r\n            allowNonTsExtensions: true,\r\n            noLib: false,\r\n            lib: [\"es5\", \"es2015\", \"es2016\", \"es2017\", \"es2018\", \"es2019\", \"es2020\", \"es2021\", \"esnext\"],\r\n            // lib: [\"es5\"],\r\n            // module: monaco.languages.typescript.ModuleKind.AMD,\r\n            allowJs: true,\r\n            checkJs: false,\r\n            strict: true,\r\n            declaration: true,\r\n            skipLibCheck: true,\r\n            sourceMap: true,\r\n            inlineSourceMap: false,\r\n            inlineSources: true,\r\n            allowSyntheticDefaultImports: true,\r\n            forceConsistentCasingInFileNames: true,\r\n            noImplicitReturns: true,\r\n            noUnusedLocals: true,\r\n            experimentalDecorators: true,\r\n            emitDecoratorMetadata: true,\r\n        });\r\n        this.ts = monaco.languages.typescript.javascriptDefaults\r\n        window['ts'] = this.ts\r\n\r\n        setInterval(() => {\r\n            this.reload()\r\n\r\n        }, 1000)\r\n    }\r\n\r\n    /**\r\n     * 刷新语言上下文提示\r\n     */\r\n    reload() {\r\n        if (!this.isActived || !this.isChanged) {\r\n            // 没有激活 或相对之前没有改变\r\n            return\r\n        }\r\n        this.isChanged = false\r\n\r\n        /**\r\n         * 获取当前模块的所有数据\r\n         * {\r\n         *     a: null,\r\n         *     b: {\r\n         *         b1: null,\r\n         *         b2: null\r\n         *     }\r\n         * }\r\n         *\r\n         * 变成\r\n         * declare var a: string;\r\n         * declare var b: {\r\n         *     b1: string,\r\n         *     b2: string\r\n         * };\r\n         */\r\n        const root = this.designer.buildVExportData('reviewOnly')\r\n        const ttl = []\r\n        _.forOwn(root, (v, k) => {\r\n            let rootStringf\r\n            if (v === null) {\r\n                rootStringf = 'string'\r\n            } else {\r\n                rootStringf = JSON5.stringify(v, {replacer: null, space: '    ', quote: '\\''})\r\n                rootStringf = rootStringf.replace(/: null/g, ': string')\r\n            }\r\n            ttl.push('declare var ' + k + ': ' + rootStringf)\r\n        })\r\n\r\n        /**\r\n         * 获取当前模块的所有引用\r\n         * {\r\n         *     { xtype: 'button', reference: 'btn1' },\r\n         *     { xtype: 'aggrid', reference: 'grid1' },\r\n         * }\r\n         *\r\n         * 变成\r\n         * {\r\n         *     btn1: button\r\n         *     grid1: aggrid\r\n         * }\r\n         */\r\n        const vjson = toRaw(this.designer.vjson)\r\n        const refsList = {}\r\n\r\n        function deepTravGetReference(parent) {\r\n            // 用来深度递归 reference 属性\r\n            if (parent.xtype && typeof parent.reference === 'string' && parent.reference) {\r\n                refsList[parent.reference] = parent.xtype\r\n            }\r\n            if (_.isArray(parent.items) && _.size(parent.items) > 0) {\r\n                _.forEach(parent.items, item => {\r\n                    deepTravGetReference(item)\r\n                })\r\n            }\r\n        }\r\n\r\n        const defineRoot = getLayoutOutlineDefine(vjson)\r\n        if (!defineRoot) {\r\n            console.error('没有找到布局定义', vjson)\r\n        } else {\r\n            _.forOwn(defineRoot, (define, propName) => {\r\n                if (define.isList === true) {\r\n                    // 按枚举的方式进行\r\n                    _.forEach(vjson[propName], item => {\r\n                        deepTravGetReference(item)\r\n                    })\r\n\r\n                } else {\r\n                    // 按对象的方式进行\r\n                    deepTravGetReference(vjson[propName])\r\n                }\r\n            })\r\n        }\r\n\r\n        let refString = []\r\n        _.forOwn(refsList, (xtype, reference) => {\r\n            refString.push('    ' + reference + ': ' + xtype)\r\n        })\r\n\r\n        const content = `\r\n\r\n/**\r\n * 系统函数库\r\n */\r\ndeclare const system: System;\r\n\r\n/**\r\n * 业务数据\r\n */\r\n${ttl.join(';\\n')}\r\n\r\ndeclare var refs: {\r\n    ${refString.join('\\n')}\r\n}\r\n`\r\n        const vv = [\r\n            ...this.declareList,\r\n            {content}\r\n        ]\r\n        window['vv'] = vv\r\n        console.log('TsLanguageSupport Reload!', content)\r\n        this.ts.setExtraLibs(vv)\r\n    }\r\n\r\n    /**\r\n     * 标记模型发生变化\r\n     * 当前语言提示的上下文发生改变；如果是 active 状态，就需要尝试重新读取上下文\r\n     */\r\n    markModelChanged() {\r\n        this.isChanged = true\r\n    }\r\n\r\n    /**\r\n     * 标记当前编码编辑器是否处于活动状态.\r\n     * 当前语言提示的上下文发生改变；如果是 active 状态，就需要尝试重新读取上下文\r\n     */\r\n    setActived(actived: boolean) {\r\n        this.isActived = actived\r\n    }\r\n}","import _ from 'lodash'\r\nimport {advancedFields, basicFields, containers, customFields} from \"./widgetsConfig.js\"\r\nimport eventBus from \"../../event-bus\"\r\nimport {\r\n    addVJsonId,\r\n    deepTrav,\r\n    getComponentDragGroup,\r\n    getComponentName,\r\n    getDefaultVExport,\r\n    insertPrefixEachLine,\r\n    parseJsObject,\r\n    removeVJsonId\r\n} from \"../yv-utils\"\r\nimport JSON5 from \"json5\"\r\nimport {toRaw} from 'vue'\r\nimport localforage from 'localforage'\r\nimport {\r\n    getComponentDesc,\r\n    getDesignCmp,\r\n    getLayoutLoadHandler,\r\n    getLayoutOutlineDefine,\r\n    getLayoutSaveHandler\r\n} from \"./yv-designer-desc\"\r\nimport TsLanguageSupport from \"./TsLanguageSupport\";\r\n\r\nexport default class Designer {\r\n    constructor(vueInstance, vexport) {\r\n        if (!vexport) {\r\n            this.defaultVExport = _.cloneDeep(getDefaultVExport())\r\n        } else {\r\n            this.defaultVExport = vexport\r\n        }\r\n        this.vueInstance = vueInstance\r\n    }\r\n\r\n    getVJson() {\r\n        return toRaw(this.vjson)\r\n    }\r\n\r\n    refreshBEM() {\r\n        _.defer(() => {\r\n            eventBus.$emit('bem-refresh', {sender: this})\r\n        })\r\n    }\r\n\r\n    defaultVExport = getDefaultVExport()\r\n    vjson = {\r\n        items: [],\r\n        dialogs: [],\r\n    }\r\n    vexport = getDefaultVExport()\r\n\r\n    // 选中组件的 id\r\n    selectedId = null\r\n\r\n    // 选中的对话框\r\n    selectedDialogId = null\r\n\r\n    // 选中组件的 vjson\r\n    selectedWidget = null\r\n\r\n    //选中组件名称\r\n    selectedWidgetName = null\r\n\r\n    // 选中组件的 parentComponent, parentList, indexOfParentList 三个属性\r\n    selectedOption = {\r\n        parentComponent: undefined, parentList: undefined, indexOfParentList: undefined\r\n    }\r\n    vueInstance = null\r\n    // 多选模式（只能用于复制）\r\n    mulSelect = []\r\n    clipData = undefined\r\n\r\n    layoutType = 'PC'\r\n\r\n    historyData = {\r\n        index: -1,  //index: 0,\r\n        maxStep: 20, steps: [],\r\n    }\r\n\r\n    spaceCurrentIndex = -1\r\n    spaceIdList = []\r\n    spaceInfo = {}\r\n\r\n    initDesigner(resetFormJson) {\r\n        this.vjson.items = []\r\n        this.vexport = _.cloneDeep(this.vexport)\r\n\r\n        if (!resetFormJson) {\r\n            this.initHistoryData()\r\n        }\r\n    }\r\n\r\n    clearDesigner(skipHistoryChange) {\r\n        let emptyWidgetListFlag = (this.vjson.items.length === 0)\r\n        this.vjson.items = []\r\n        this.selectedId = null\r\n        this.selectedWidgetName = null\r\n        this.selectedWidget = {}  //this.selectedWidget = null\r\n        _.extend(this.vexport, this.defaultVExport) //\r\n\r\n        if (!!skipHistoryChange) {\r\n            //什么也不做！！\r\n        } else if (!emptyWidgetListFlag) {\r\n            this.emitHistoryChange()\r\n        } else {\r\n            this.saveCurrentHistoryStep()\r\n        }\r\n    }\r\n\r\n    getLayoutType() {\r\n        return this.layoutType\r\n    }\r\n\r\n    changeLayoutType(newType) {\r\n        this.layoutType = newType\r\n    }\r\n\r\n    /**\r\n     * 根据所有组件的 bind.value 属性\r\n     * 生成 vexport 对应的 data 属性 (除 vjson 之外)\r\n     * 比如：\r\n     * items:[\r\n     *  {bind:{value:\"{a.f1}\"}}\r\n     *  {bind:{value:\"{a.f2}\"}}\r\n     *  {bind:{value:\"$row.a.b\"}}\r\n     * ]\r\n     * 生成=>\r\n     * {\r\n     *     a: {\r\n     *         f1: '',\r\n     *         f2: ''\r\n     *     },\r\n     *     dialog_1: {\r\n     *         a: {\r\n     *            b: ''\r\n     *         }\r\n     *     }\r\n     * }\r\n     * @param useFor 用途 reviewOnly/空\r\n     */\r\n    buildVExportData(useFor) {\r\n        const dataRoot = {}\r\n        const targetVjson = toRaw(this.vjson)\r\n        let currentDialogReference = undefined\r\n\r\n        const resolverTarget = (vjson) => {\r\n            deepTrav(vjson, (target, markObj) => {\r\n                if (target.xtype) {\r\n                    if (target.xtype === 'dialog') {\r\n                        currentDialogReference = ''\r\n                        if (target.reference) {\r\n                            _.set(dataRoot, vjson.reference + '.isShow', false)\r\n                            _.set(dataRoot, vjson.reference + '.loading', false)\r\n                            _.set(dataRoot, vjson.reference + '.width', false)\r\n                            _.set(dataRoot, vjson.reference + '.title', false)\r\n                            _.set(dataRoot, vjson.reference + '.row', {})\r\n                            currentDialogReference = _.get(dataRoot, vjson.reference + '.row')\r\n                        }\r\n                        markObj.exitCallback = function () {\r\n                            currentDialogReference = undefined\r\n                        }\r\n\r\n                    } else if (target.xtype === 'drawer') {\r\n                        currentDialogReference = ''\r\n                        if (target.reference) {\r\n                            _.set(dataRoot, vjson.reference + '.isShow', false)\r\n                            _.set(dataRoot, vjson.reference + '.loading', false)\r\n                            _.set(dataRoot, vjson.reference + '.width', false)\r\n                            _.set(dataRoot, vjson.reference + '.title', false)\r\n                            _.set(dataRoot, vjson.reference + '.row', {})\r\n                            currentDialogReference = _.get(dataRoot, vjson.reference + '.row')\r\n                        }\r\n                        markObj.exitCallback = function () {\r\n                            currentDialogReference = undefined\r\n                        }\r\n\r\n                    } else {\r\n                        const designCmp = getDesignCmp(target)\r\n                        if (designCmp && typeof designCmp.buildVExportData === 'function') {\r\n                            designCmp.buildVExportData(target, dataRoot, useFor)\r\n                        }\r\n                    }\r\n                }\r\n\r\n                // 遍历 bind:{ xxx } 所有属性\r\n                if (target.xtype && target.bind) {\r\n                    if (useFor === 'reviewOnly') {\r\n                        _.forOwn(target.bind, (v, k) => {\r\n                            if (_.startsWith(v, \"{\") && _.endsWith(v, \"}\")) {\r\n                                if (currentDialogReference) {\r\n                                    if (_.startsWith(v, '{$row.') && typeof currentDialogReference === 'object') {\r\n                                        _.set(currentDialogReference, v.substring(6, v.length - 1), target.id)\r\n                                        return\r\n                                    }\r\n                                }\r\n\r\n                                _.set(dataRoot, v.substring(1, v.length - 1), target.id)\r\n                            }\r\n                        })\r\n\r\n                    } else {\r\n                        _.forOwn(target.bind, (v, k) => {\r\n                            if (_.startsWith(v, \"{\") && _.endsWith(v, \"}\")) {\r\n                                if (currentDialogReference) {\r\n                                    if (_.startsWith(v, '{$row.') && typeof currentDialogReference === 'object') {\r\n                                        _.set(currentDialogReference, v.substring(6, v.length - 1), target.id)\r\n                                        return\r\n                                    }\r\n                                }\r\n\r\n                                _.set(dataRoot, v.substring(1, v.length - 1), null)\r\n                            }\r\n                        })\r\n                    }\r\n                }\r\n            })\r\n        }\r\n\r\n        _.forEach(targetVjson.extendProps, (row) => {\r\n            if (row.name) {\r\n                _.set(dataRoot, row.name, row.value)\r\n            }\r\n        })\r\n        _.forEach(targetVjson.extendDatas, (row) => {\r\n            if (row.name) {\r\n                _.set(dataRoot, row.name, row.value)\r\n            }\r\n        })\r\n\r\n        const define = getLayoutOutlineDefine(targetVjson)\r\n        if (!define) {\r\n            console.error('没有找到布局定义', targetVjson)\r\n        } else {\r\n            _.forOwn(define, (define, propName) => {\r\n                if (define.isList === true) {\r\n                    _.forEach(targetVjson[propName], item => {\r\n                        resolverTarget(item)\r\n                    })\r\n\r\n                } else {\r\n                    resolverTarget(targetVjson[propName])\r\n                }\r\n            })\r\n        }\r\n\r\n        return dataRoot\r\n    }\r\n\r\n    _getAllReferenceForNamePool(referenceNamePool, vjson) {\r\n        deepTrav(vjson, (obj) => {\r\n            if (typeof obj.xtype === 'string' && typeof obj.reference === 'string' && obj.reference) {\r\n                referenceNamePool[obj.reference] = '1'\r\n            }\r\n        })\r\n    }\r\n\r\n    /**\r\n     * 生成 design.js 文件\r\n     */\r\n    exportFile() {\r\n        const vexport = _.cloneDeep(toRaw(this.vexport))\r\n        const vjson = _.cloneDeep(toRaw(this.vjson))\r\n\r\n        vexport.vjsonExchangeEnable = vjson.vjsonExchangeEnable\r\n        vexport.title = vjson.title\r\n        const buildFuncBody = (referenceNamePool, targetVJson) => {\r\n            /**\r\n             * 提取 vjson 中所有 bind 属性，并生成新的 vexport.computed 中的方法\r\n             */\r\n            deepTrav(targetVJson, (target) => {\r\n                if (typeof target.xtype === 'string') {\r\n                    _.forOwn(target.bind, (funcBody, propName) => {\r\n                        if (propName === 'value') {\r\n                            return\r\n                        }\r\n                        if (typeof funcBody === 'string' && !_.startsWith(funcBody, '{')) {\r\n                            const computedName = chooseReferenceName(referenceNamePool, target, propName)\r\n                            target.bind[propName] = '{' + computedName + '}'\r\n                            if (!vexport.computed) {\r\n                                vexport.computed = {}\r\n                            }\r\n                            vexport.computed[computedName] = markDynamicMethod(funcBody)\r\n                        }\r\n                    })\r\n                }\r\n            });\r\n\r\n            /**\r\n             * 提取 vjson 中所有 listeners 属性，并生成新的 vexport.methods 中的方法.\r\n             */\r\n            deepTrav(targetVJson, (target) => {\r\n                if (typeof target.xtype === 'string') {\r\n                    _.forOwn(target.listeners, (funcBody, propName) => {\r\n                        if (typeof funcBody === 'string' && !_.startsWith(funcBody, '{')) {\r\n                            const methodName = chooseReferenceName(referenceNamePool, target, propName)\r\n                            target.listeners[propName] = '{' + methodName + '}'\r\n                            if (!vexport.methods) {\r\n                                vexport.methods = {}\r\n                            }\r\n                            vexport.methods[methodName] = markDynamicMethod(funcBody)\r\n                        }\r\n                    })\r\n                }\r\n            });\r\n\r\n            /**\r\n             * 删除 chooseReferenceName 生成的临时名称属性\r\n             */\r\n            deepTrav(targetVJson, (target) => {\r\n                if (typeof target.xtype === 'string') {\r\n                    if (target._tmpReference) {\r\n                        delete target._tmpReference\r\n                    }\r\n                }\r\n            });\r\n\r\n            removeVJsonId(targetVJson)\r\n        }\r\n\r\n        /**\r\n         * 提取 vjson.listeners 根事件\r\n         */\r\n        _.forOwn(vjson.listeners, (funcBody, propName) => {\r\n            if (typeof funcBody === 'string' && !_.startsWith(funcBody, '{')) {\r\n                const methodName = propName\r\n                vjson.listeners[propName] = '{' + methodName + '}'\r\n                if (!vexport.methods) {\r\n                    vexport.methods = {}\r\n                }\r\n                vexport.methods[methodName] = markDynamicMethod(funcBody)\r\n            }\r\n        })\r\n\r\n        const define = getLayoutOutlineDefine(vjson)\r\n        if (!define) {\r\n            console.error('没有找到布局定义', vjson)\r\n        } else {\r\n            // 构造变量取名池，防止重名\r\n            const referenceNamePool = {}\r\n            _.forOwn(define, (define, propName) => {\r\n                if (define.isList === true) {\r\n                    _.forEach(vjson[propName], item => {\r\n                        this._getAllReferenceForNamePool(referenceNamePool, item)\r\n                    })\r\n\r\n                } else {\r\n                    this._getAllReferenceForNamePool(referenceNamePool, vjson[propName])\r\n                }\r\n            })\r\n            // 用变量池，进入对象中进行分析\r\n            _.forOwn(define, (define, propName) => {\r\n                if (define.isList === true) {\r\n                    _.forEach(vjson[propName], item => {\r\n                        buildFuncBody(referenceNamePool, item)\r\n                    })\r\n\r\n                } else {\r\n                    buildFuncBody(referenceNamePool, vjson[propName])\r\n                }\r\n            })\r\n        }\r\n\r\n        // vexport.data = _.defaultsDeep({}, vexport.data, this.buildVExportData())\r\n        // vexport.data.vjson = vjson\r\n        /**\r\n         * 根据 data 和 bind.value 构建新的 data 结构\r\n         */\r\n        const vexportData = _.defaultsDeep({}, vexport.data, this.buildVExportData())\r\n        vexportData.vjson = vjson\r\n        vexport.data = vexportDataToFuncBody(vexportData)\r\n\r\n        const saveHandle = getLayoutSaveHandler(vjson.layout)\r\n        if (saveHandle) {\r\n            saveHandle(vexport, vjson)\r\n        }\r\n\r\n        const code = stringifyDesignJsObject(vexport)\r\n        // console.log('code', code)\r\n        return code\r\n    }\r\n\r\n    /**\r\n     * 根据 vjson, 遍历所有的事件和属性\r\n     */\r\n    buildEventMap() {\r\n        const vjson = toRaw(this.vjson)\r\n        const eventData = []\r\n\r\n        const chooseDisplayName = (vjson) => {\r\n            const desc = getComponentDesc(vjson.xtype)\r\n            if (!desc || !desc.displayFn) {\r\n                return vjson.xtype + ' #' + vjson.id\r\n            }\r\n            return desc.displayFn(vjson)\r\n        }\r\n\r\n        const deepTravEvents = (targetVJson) => {\r\n            /**\r\n             * 提取 vjson 中所有 bind 属性，并生成新的 vexport.computed 中的方法\r\n             */\r\n            deepTrav(targetVJson, (target) => {\r\n                if (typeof target.xtype === 'string' && target.id) {\r\n                    const displayName = chooseDisplayName(target)\r\n\r\n                    /**\r\n                     * 提取 vjson 中所有 bind 属性\r\n                     */\r\n                    _.forOwn(target.bind, (funcBody, propName) => {\r\n                        if (propName === 'value') {\r\n                            return\r\n                        }\r\n                        if (typeof funcBody === 'string' && !_.startsWith(funcBody, '{')) {\r\n                            eventData.push({\r\n                                displayName,\r\n                                propName: propName,\r\n                                cmpId: target.id,\r\n                                parentObj: target.bind\r\n                            })\r\n                        }\r\n                    })\r\n\r\n                    /**\r\n                     * 提取 vjson 中所有 listeners 属性\r\n                     */\r\n                    _.forOwn(target.listeners, (funcBody, propName) => {\r\n                        if (typeof funcBody === 'string' && !_.startsWith(funcBody, '{')) {\r\n                            eventData.push({\r\n                                displayName,\r\n                                label: '@' + propName,\r\n                                propName: propName,\r\n                                cmpId: target.id,\r\n                                parentObj: target.listeners\r\n                            })\r\n                        }\r\n                    })\r\n                }\r\n            });\r\n        }\r\n\r\n        // 根据布局处理内容\r\n        const define = getLayoutOutlineDefine(vjson)\r\n        if (!define) {\r\n            console.error('没有找到布局定义', vjson)\r\n        } else {\r\n            _.forOwn(define, (define, propName) => {\r\n                if (define.isList === true) {\r\n                    _.forEach(vjson[propName], item => {\r\n                        deepTravEvents(item)\r\n                    })\r\n\r\n                } else {\r\n                    deepTravEvents(vjson[propName])\r\n                }\r\n            })\r\n        }\r\n\r\n        _.forOwn(vjson.listeners, (func, name) => {\r\n            const displayName = name\r\n            eventData.push({\r\n                displayName,\r\n                propName: name,\r\n                cmpId: 'ROOT',\r\n                parentObj: vjson.listeners\r\n            })\r\n        })\r\n\r\n        return eventData\r\n    }\r\n\r\n    /**\r\n     * 从 design.js 文件读取内容\r\n     */\r\n    loadFormFile(fileContent) {\r\n        let vexport\r\n\r\n        if (typeof fileContent === 'string') {\r\n            vexport = parseJsObject(fileContent)\r\n            // console.log('hasLoad', vexport)\r\n\r\n        } else if (typeof fileContent === 'object') {\r\n            vexport = _.cloneDeep(fileContent)\r\n            // console.log('hasLoad', vexport)\r\n\r\n        } else {\r\n            throw Error('错误的 design.js 文件格式')\r\n        }\r\n\r\n\r\n        if (!vexport || !_.isObject(vexport)) {\r\n            throw Error('错误的 design.js 文件格式')\r\n        }\r\n\r\n        // 将 data 函数结果反馈至 data\r\n        vexport['data'] = vexportFuncBodyToObject(vexport)\r\n\r\n        // 拿到 vjson\r\n        const vjson = vexport['data'].vjson\r\n        delete vexport['data'].vjson\r\n\r\n        /**\r\n         * 拆解JS方法，变成纯字符串表达式\r\n         * @param targetVJson\r\n         */\r\n        const removeFuncBody = (targetVJson) => {\r\n            /**\r\n             * 解析 vjson 中所有 bind 属性，并替换为 vexport.computed 中的方法体\r\n             *\r\n             * bind: {\r\n             *     xxx: '{abc}'\r\n             * }\r\n             * 转换为=>\r\n             * bind: {\r\n             *     xxx: 'console.log(\"xxx\") ...'\r\n             * }\r\n             */\r\n            deepTrav(targetVJson, (obj) => {\r\n                if (typeof obj.xtype === 'string') {\r\n                    _.forOwn(obj.bind, (value, key) => {\r\n                        if (typeof value === 'string' && _.startsWith(value, '{') && _.endsWith(value, '}')) {\r\n                            if (key === 'value') {\r\n                                return\r\n                            }\r\n\r\n                            const computedName = value.substring(1, value.length - 1)\r\n                            obj.bind[key] = stringifyMethodBody(vexport.computed[computedName])\r\n                        }\r\n                    })\r\n                }\r\n                // 处理表格列没有 xtype的情况\r\n                if (obj.xtype === 'yvgrid' && Array.isArray(obj.columns)) {\r\n                    _.forEach(obj.columns, (item) => {\r\n                        if (!item.xtype || typeof item.xtype !== \"string\") {\r\n                            item.xtype = \"gridcolumn\"\r\n                        }\r\n                    })\r\n                }\r\n                if (obj.xtype === 'aggrid' && Array.isArray(obj.columns)) {\r\n                    _.forEach(obj.columns, (item) => {\r\n                        if (!item.xtype || typeof item.xtype !== \"string\") {\r\n                            item.xtype = \"aggridcolumn\"\r\n                        }\r\n                    })\r\n                }\r\n            });\r\n\r\n            /**\r\n             * 解析 vjson 中所有 listeners 属性，并替换为 vexport.methods 中的方法体\r\n             *\r\n             * listeners: {\r\n             *     xxx: '{abc}'\r\n             * }\r\n             * 转换为=>\r\n             * listeners: {\r\n             *     xxx: 'console.log(\"xxx\") ...'\r\n             * }\r\n             */\r\n            deepTrav(targetVJson, (obj) => {\r\n                if (typeof obj.xtype === 'string') {\r\n                    _.forOwn(obj.listeners, (value, key) => {\r\n                        if (typeof value === 'string' && _.startsWith(value, '{') && _.endsWith(value, '}')) {\r\n                            const methodName = value.substring(1, value.length - 1)\r\n                            obj.listeners[key] = stringifyMethodBody(vexport.methods[methodName])\r\n                        }\r\n                    })\r\n                }\r\n            });\r\n        }\r\n\r\n        /**\r\n         * 拆解布局事件\r\n         */\r\n        _.forOwn(vjson.listeners, (value, key) => {\r\n            if (typeof value === 'string' && _.startsWith(value, '{') && _.endsWith(value, '}')) {\r\n                const methodName = value.substring(1, value.length - 1)\r\n                vjson.listeners[key] = stringifyMethodBody(vexport.methods[methodName])\r\n            }\r\n        })\r\n\r\n        // 根据布局处理内容\r\n        const define = getLayoutOutlineDefine(vjson)\r\n        if (!define) {\r\n            console.error('没有找到布局定义', vjson)\r\n        } else {\r\n            _.forOwn(define, (define, propName) => {\r\n                if (define.isList === true) {\r\n                    _.forEach(vjson[propName], item => {\r\n                        removeFuncBody(item)\r\n                    })\r\n\r\n                } else {\r\n                    removeFuncBody(vjson[propName])\r\n                }\r\n            })\r\n        }\r\n\r\n        // 为 vjson 加上 id\r\n        this._addIdByLayout(vjson)\r\n\r\n        vexport = JSON5.parse(JSON5.stringify(vexport))\r\n\r\n        const loadHandle = getLayoutLoadHandler(vjson.layout)\r\n        if (loadHandle) {\r\n            loadHandle(vexport, vjson)\r\n        }\r\n\r\n        this.vjson = vjson\r\n        this.vexport = vexport\r\n\r\n        this.emitEvent('form-json-imported', [])  // 通知其他组件\r\n        this.saveCurrentHistoryStep()\r\n        return true\r\n    }\r\n\r\n    /**\r\n     * 根据 id 选择组件, 内部根据组件的 selectme.native 选中组件, 再引起 setSelected(vjson,option) 的回调\r\n     */\r\n    selectById(cmpId) {\r\n        if (!cmpId) {\r\n            return\r\n        }\r\n        const cmp = document.getElementById(cmpId)\r\n        if (cmp) {\r\n            const evObj = new Event('selectme', {\r\n                bubbles: false,\r\n                cancelable: false,\r\n                composed: false\r\n            });\r\n            cmp.dispatchEvent(evObj);\r\n        }\r\n    }\r\n\r\n    setSelected(vjson, option) {\r\n        _.defer(() => {\r\n            eventBus.$emit('bem-refresh', {sender: this})\r\n        })\r\n        if (!vjson) {\r\n            this.clearSelected()\r\n            return\r\n        }\r\n\r\n        this.selectedWidget = vjson\r\n        if (!!vjson.id) {\r\n            this.selectedId = vjson.id\r\n            this.selectedWidgetName = getComponentName(vjson)\r\n            if (option) {\r\n                this.selectedOption = {\r\n                    parentComponent: option.parentComponent,\r\n                    parentList: option.parentList,\r\n                    indexOfParentList: option.indexOfParentList,\r\n                }\r\n            } else {\r\n                this.selectedOption = {\r\n                    parentComponent: undefined, parentList: undefined, indexOfParentList: undefined,\r\n                }\r\n            }\r\n        } else {\r\n            if (vjson && !vjson.xtype && typeof vjson.layout === 'string') {\r\n                this.selectedId = 'layout'\r\n                this.selectedWidgetName = '根布局'\r\n                this.selectedWidget = vjson\r\n            } else {\r\n                this.selectedId = undefined\r\n                this.selectedWidgetName = ''\r\n                this.selectedWidget = vjson\r\n            }\r\n            this.selectedOption = {\r\n                parentComponent: undefined, parentList: undefined, indexOfParentList: undefined,\r\n            }\r\n        }\r\n    }\r\n\r\n    clearSelected() {\r\n        this.selectedId = null\r\n        this.selectedWidgetName = null\r\n        this.selectedWidget = {}  //this.selectedWidget = null\r\n        this.selectedOption.parentComponent = undefined\r\n        this.selectedOption.parentList = undefined\r\n        this.selectedOption.indexOfParentList = undefined\r\n        eventBus.$emit('bem-refresh', {sender: this, source: 'dragEnd'})\r\n    }\r\n\r\n    copyComponent(vueInstance, vjson) {\r\n        const parentComponent = this.selectedOption.parentComponent\r\n        const parentList = this.selectedOption.parentList\r\n        const indexOfParentList = this.selectedOption.indexOfParentList\r\n\r\n        if (!parentList || !parentComponent) {\r\n            //@ts-ignore\r\n            system.msg('无法复制')\r\n            return\r\n        }\r\n\r\n        if (parentList[indexOfParentList]?.id !== vjson?.id) {\r\n            //@ts-ignore\r\n            system.msg(`复制的ID不一致: id=${parentList[indexOfParentList].id}, vjson=${vjson.id}`, parentList[indexOfParentList], vjson)\r\n            return\r\n        }\r\n\r\n        const target = _.cloneDeep(toRaw(parentList[indexOfParentList]))\r\n        removeVJsonId(target)\r\n        addVJsonId(target)\r\n        this.mulSelect = []\r\n\r\n        parentList.splice(indexOfParentList + 1, 0, target)\r\n        vueInstance.$nextTick(() => {\r\n            this.emitHistoryChange()\r\n            let idx = -1\r\n            if (target && target.id) {\r\n                idx = _.findIndex(parentList, (i) => {\r\n                    return i.id === target.id\r\n                })\r\n            }\r\n\r\n            // console.log('copyFinish', target.id, idx, target)\r\n            if (idx < 0) {\r\n                this.setSelected(target)\r\n            } else {\r\n                this.setSelected(target, {\r\n                    parentComponent, parentList, indexOfParentList: idx,\r\n                })\r\n            }\r\n        })\r\n    }\r\n\r\n    deleteComponent(vueInstance, vjson) {\r\n        const parentComponent = this.selectedOption.parentComponent\r\n        const parentList = this.selectedOption.parentList\r\n        const indexOfParentList = this.selectedOption.indexOfParentList\r\n\r\n        if (!parentList || !parentComponent) {\r\n            //@ts-ignore\r\n            system.msg('无法删除')\r\n            return\r\n        }\r\n\r\n        if (parentList[indexOfParentList]?.id !== vjson?.id) {\r\n            //@ts-ignore\r\n            system.msg(`删除的ID不一致: id=${parentList[indexOfParentList].id}, vjson=${vjson.id}`, parentList[indexOfParentList], vjson)\r\n            return\r\n        }\r\n        this.mulSelect = []\r\n\r\n        if (!!parentList) {\r\n            let nextSelected = null\r\n            if (parentList.length === 1) {\r\n                if (!!parentComponent) {\r\n                    nextSelected = parentComponent\r\n                }\r\n            } else if (parentList.length === (1 + indexOfParentList)) {\r\n                nextSelected = parentList[indexOfParentList - 1]\r\n            } else {\r\n                nextSelected = parentList[indexOfParentList + 1]\r\n            }\r\n\r\n            parentList.splice(indexOfParentList, 1)\r\n            vueInstance.$nextTick(() => {\r\n\r\n                this.emitHistoryChange()\r\n\r\n                let idx = -1\r\n                if (nextSelected && nextSelected.id) {\r\n                    idx = _.findIndex(parentList, (i) => {\r\n                        return i.id === nextSelected.id\r\n                    })\r\n                }\r\n\r\n                if (idx < 0) {\r\n                    this.setSelected(nextSelected)\r\n                } else {\r\n                    this.setSelected(nextSelected, {\r\n                        parentComponent, parentList, indexOfParentList: idx,\r\n                    })\r\n                }\r\n\r\n            })\r\n        }\r\n    }\r\n\r\n    checkWidgetMove(evt) {\r\n        if (evt && evt.relatedRect) {\r\n            eventBus.$emit('drag-related', {evt, rect: evt.relatedRect})\r\n        }\r\n        return true\r\n    }\r\n\r\n    dragEnd() {\r\n        eventBus.$emit('drag-end', {})\r\n        eventBus.$emit('bem-refresh', {sender: this, source: 'dragEnd'})\r\n    }\r\n\r\n    getContainerByType(typeName) {\r\n        let allWidgets = [...containers, ...basicFields, ...advancedFields, ...customFields]\r\n        let foundCon = null\r\n        allWidgets.forEach(con => {\r\n            if (!!con.category && !!con.type && (con.type === typeName)) {\r\n                foundCon = con\r\n            }\r\n        })\r\n\r\n        return foundCon\r\n    }\r\n\r\n    copyNewWidget(origin) {\r\n        let newCon\r\n        if (typeof origin.onCreate === 'function') {\r\n            newCon = origin.onCreate('clone')\r\n        }\r\n\r\n        if (!newCon) {\r\n            throw \"不支持的组件\"\r\n        }\r\n\r\n        return newCon\r\n    }\r\n\r\n    addFieldByDbClick(widget) {\r\n        //@ts-ignore\r\n        system.msg('双击无效')\r\n        // let newWidget = this.copyNewFieldWidget(widget)\r\n        // if (!!this.selectedWidget && this.selectedWidget.type === 'tab') {\r\n        //     //获取当前激活的tabPane\r\n        //     let activeTab = this.selectedWidget.tabs[0]\r\n        //     this.selectedWidget.tabs.forEach(tabPane => {\r\n        //         if (!!tabPane.options.active) {\r\n        //             activeTab = tabPane\r\n        //         }\r\n        //     })\r\n        //\r\n        //     !!activeTab && activeTab.items.push(newWidget)\r\n        // } else if (!!this.selectedWidget && !!this.selectedWidget.items) {\r\n        //     this.selectedWidget.items.push(newWidget)\r\n        // } else {\r\n        //     this.vjson.items.push(newWidget)\r\n        // }\r\n        //\r\n        // this.setSelected(newWidget)\r\n        // this.emitHistoryChange()\r\n    }\r\n\r\n    emitEvent(evtName, evtData) {  //用于兄弟组件发射事件\r\n        eventBus.$emit(evtName, evtData)\r\n    }\r\n\r\n    initHistoryData() {\r\n        this.loadFormContentFromStorage()\r\n        this.historyData.index++\r\n        this.historyData.steps[this.historyData.index] = ({\r\n            vjson: _.cloneDeep(this.vjson), vexport: _.cloneDeep(this.vexport)\r\n        })\r\n    }\r\n\r\n    emitHistoryChange() {\r\n        if (this.historyData.index === this.historyData.maxStep - 1) {\r\n            this.historyData.steps.shift()\r\n        } else {\r\n            this.historyData.index++\r\n        }\r\n\r\n        this.historyData.steps[this.historyData.index] = ({\r\n            vjson: _.cloneDeep(this.vjson), vexport: _.cloneDeep(this.vexport)\r\n        })\r\n\r\n        this.saveFormContentToStorage().finally()\r\n\r\n        if (this.historyData.index < this.historyData.steps.length - 1) {\r\n            this.historyData.steps = this.historyData.steps.slice(0, this.historyData.index + 1)\r\n        }\r\n    }\r\n\r\n    saveCurrentHistoryStep() {\r\n        this.historyData.steps[this.historyData.index] = _.cloneDeep({\r\n            vjson: this.vjson, vexport: this.vexport\r\n        })\r\n\r\n        this.refreshBEM()\r\n        this.saveFormContentToStorage().finally()\r\n    }\r\n\r\n    undoHistoryStep(vueInstance) {\r\n        if (this.historyData.index !== 0) {\r\n            this.historyData.index--\r\n        }\r\n\r\n        this.vjson = _.cloneDeep(this.historyData.steps[this.historyData.index].vjson)\r\n        this.vexport = _.cloneDeep(this.historyData.steps[this.historyData.index].vexport)\r\n        vueInstance.$nextTick(() => {\r\n            eventBus.$emit('bem-refresh', {sender: this, source: 'undo'})\r\n        })\r\n    }\r\n\r\n    redoHistoryStep(vueInstance) {\r\n        if (this.historyData.index !== (this.historyData.steps.length - 1)) {\r\n            this.historyData.index++\r\n        }\r\n\r\n        this.vjson = _.cloneDeep(this.historyData.steps[this.historyData.index].vjson)\r\n        this.vexport = _.cloneDeep(this.historyData.steps[this.historyData.index].vexport)\r\n        vueInstance.$nextTick(() => {\r\n            eventBus.$emit('bem-refresh', {sender: this, source: 'redo'})\r\n        })\r\n    }\r\n\r\n    undoEnabled() {\r\n        return (this.historyData.index > 0) && (this.historyData.steps.length > 0)\r\n    }\r\n\r\n    redoEnabled() {\r\n        return this.historyData.index < (this.historyData.steps.length - 1)\r\n    }\r\n\r\n    /**\r\n     * 创建空间\r\n     * @param id 模块标识符（一般就是文件绝对路径）\r\n     * @param module 模块信息, 用于保存时提取, 必须包含 name 属性\r\n     * @param content designJS 文件内容\r\n     */\r\n    async createSpace(id, module, content) {\r\n        let idx = _.findIndex(this.spaceIdList, (v) => v === id)\r\n        if (idx >= 0) {\r\n            // 已经存在\r\n            await this.switchSpace(idx)\r\n            return idx\r\n        }\r\n\r\n        this.spaceIdList.push(id)\r\n        this.spaceInfo[id] = {\r\n            label: module.name, module: toRaw(module),\r\n        }\r\n\r\n        this.spaceCurrentIndex = this.spaceIdList.length - 1\r\n        setTimeout(() => {\r\n            this.loadFormFile(content)\r\n            this.saveSpace().finally()\r\n        }, 500)\r\n\r\n        idx = this.spaceCurrentIndex\r\n        return idx\r\n    }\r\n\r\n    /**\r\n     * 载入空间\r\n     * @returns {Promise<void>}\r\n     */\r\n    async loadSpace() {\r\n        const res = await localforage.getItem('space') ?? {}\r\n        this.spaceIdList = res.list ?? []\r\n        this.spaceCurrentIndex = res.currentIndex ?? -1\r\n        this.spaceInfo = res.info ?? {}\r\n        // 语言提示模型被更改\r\n        TsLanguageSupport.instance.markModelChanged()\r\n    }\r\n\r\n    /**\r\n     * 保存当前空间状态\r\n     */\r\n    async saveSpace() {\r\n        const ret = {\r\n            list: toRaw(this.spaceIdList), info: toRaw(this.spaceInfo), currentIndex: toRaw(this.spaceCurrentIndex),\r\n        }\r\n        await localforage.setItem('space', ret)\r\n    }\r\n\r\n    /**\r\n     * 切换空间\r\n     */\r\n    async switchSpace(idx) {\r\n        this.spaceCurrentIndex = idx\r\n        this.clearSelected()\r\n        // 语言提示模型被更改\r\n        TsLanguageSupport.instance.markModelChanged()\r\n        await this.loadFormContentFromStorage()\r\n        await this.saveSpace()\r\n    }\r\n\r\n    /**\r\n     * 关闭空间\r\n     */\r\n    async closeSpace(idx) {\r\n        if (this.spaceIdList.length === 1) {\r\n            // 只有一个元素，要关闭，就完全清空\r\n            const id = this.spaceIdList[0]\r\n            await localforage.removeItem('space-' + id)\r\n            delete this.spaceInfo[id]\r\n\r\n            this.spaceCurrentIndex = -1\r\n            this.spaceInfo = {}\r\n            this.spaceIdList = []\r\n            await this.saveSpace()\r\n            return\r\n        }\r\n\r\n        const id = this.spaceIdList[idx]\r\n        const originId = this.spaceIdList[this.spaceCurrentIndex]\r\n        if (!id) {\r\n            //不存在的标签\r\n            return\r\n        }\r\n\r\n        await localforage.removeItem('space-' + id)\r\n        delete this.spaceInfo[id]\r\n        this.spaceIdList.splice(idx, 1)\r\n\r\n        if (this.spaceCurrentIndex === idx) {\r\n            // 关闭的是当前标签, 就要选好下一个标签是谁\r\n            if (idx >= this.spaceIdList.length - 1) {\r\n                // 关闭的是最后一个标签, 就是最后一个标签\r\n                this.spaceCurrentIndex = this.spaceIdList.length - 1\r\n            }\r\n            await this.loadFormContentFromStorage()\r\n            await this.saveSpace()\r\n\r\n        } else {\r\n            // 关闭的不是当前标签，当前的序号要重新改变\r\n            this.spaceCurrentIndex = _.findIndex(this.spaceIdList, (v) => v === originId)\r\n            await this.saveSpace()\r\n        }\r\n    }\r\n\r\n    /**\r\n     * 将当前 designer 中的 vexport/vjson 保存至 localstore\r\n     */\r\n    async saveFormContentToStorage() {\r\n        const id = this.spaceIdList[this.spaceCurrentIndex]\r\n        if (!id) {\r\n            system.showErrorDialog('保存失败, 没有找到 list[' + this.spaceCurrentIndex + '].id')\r\n            return Promise.reject('保存失败')\r\n        }\r\n\r\n        const vexport = _.cloneDeep(toRaw(this.vexport))\r\n        const vj = _.cloneDeep(toRaw(this.vjson))\r\n        const targetDialog = _.find(this.vjson.dialogs, d => d.id === this.selectedDialogId)\r\n        const selectedDialogReference = targetDialog ? targetDialog.reference : null\r\n\r\n        this._removeIdByLayout(vj)\r\n        const res = {\r\n            vexport: vexport, vjson: vj, selectedDialogReference\r\n        }\r\n\r\n        // return localforage.setItem('design_backup', res).finally()\r\n        await localforage.setItem('space-' + id, res)\r\n\r\n        /**\r\n         * 下面是 localStorage 的写法\r\n         * const vexport = _.cloneDeep(toRaw(this.vexport))\r\n         * const vj = _.cloneDeep(toRaw(this.vjson))\r\n         *\r\n         * this._removeIdByLayout(vj)\r\n         *\r\n         * window.localStorage.setItem('design_vjson__backup', JSON5.stringify(vj))\r\n         * window.localStorage.setItem('design_vexport_backup', JSON5.stringify(vexport))\r\n         */\r\n    }\r\n\r\n    async loadFormContentFromStorage() {\r\n        const id = this.spaceIdList[this.spaceCurrentIndex]\r\n        const res = await localforage.getItem('space-' + id)\r\n        // const res = JSON5.parse(resText)\r\n        if (res) {\r\n            const {vjson, vexport, selectedDialogReference} = res\r\n            if (!!vjson && !!vexport) {\r\n                this._addIdByLayout(vjson)\r\n                this.vjson = vjson\r\n                this.vexport = vexport\r\n                if (selectedDialogReference) {\r\n                    const targetDialog = _.find(this.vjson.dialogs, d => d.reference === selectedDialogReference)\r\n                    if (targetDialog) {\r\n                        this.selectedDialogId = targetDialog.id\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        /**\r\n         * 下面是 localStorage 的写法\r\n         * 不要删除\r\n         * const widgetListBackup = window.localStorage.getItem('design_vjson__backup')\r\n         * const vexportBackup = window.localStorage.getItem('design_vexport_backup')\r\n         * if (!!widgetListBackup && !!vexportBackup) {\r\n         *   const vj = JSON5.parse(widgetListBackup)\r\n         *   this._addIdByLayout(vj)\r\n         *   this.vjson = vj\r\n         *   this.vexport = JSON5.parse(vexportBackup)\r\n         * }\r\n         */\r\n    }\r\n\r\n    /**\r\n     * 为 vjson 去掉ID ( 不处理 funcBody  )\r\n     */\r\n    _removeIdByLayout(vjson) {\r\n        const resolverTarget = (target) => {\r\n            // 去掉组件 ID\r\n            removeVJsonId(target)\r\n        }\r\n\r\n        // 根据布局处理内容\r\n        const define = getLayoutOutlineDefine(vjson)\r\n        if (!define) {\r\n            console.error('没有找到布局定义', vjson)\r\n        } else {\r\n            _.forOwn(define, (define, propName) => {\r\n                if (define.isList === true) {\r\n                    _.forEach(vjson[propName], item => {\r\n                        resolverTarget(item)\r\n                    })\r\n\r\n                } else {\r\n                    resolverTarget(vjson[propName])\r\n                }\r\n            })\r\n        }\r\n    }\r\n\r\n    /**\r\n     * 为 vjson 加上ID ( 不处理 funcBody  )\r\n     */\r\n    _addIdByLayout(vjson) {\r\n\r\n        const resolverTarget = (target) => {\r\n            // 为遗漏的组件，加上 xtype\r\n            deepTrav(target, (it) => {\r\n                if (it.xtype === 'tabs') {\r\n                    _.forEach(it.items, (panel) => {\r\n                        if (!panel.xtype) {\r\n                            panel.xtype = 'tabpanel'\r\n                        }\r\n                    })\r\n\r\n                } else if (it.xtype === 'yvgrid' || it.xtype === 'aggrid') {\r\n                    _.forEach(it.columns, (panel) => {\r\n                        if (!panel.xtype) {\r\n                            panel.xtype = 'gridcolumn'\r\n                        }\r\n                    })\r\n\r\n                } else if (it.xtype === 'split') {\r\n                    _.forEach(it.items, (panel) => {\r\n                        if (!panel.xtype) {\r\n                            panel.xtype = 'splitarea'\r\n                        }\r\n                    })\r\n                }\r\n            })\r\n\r\n            // 为组件加上 ID\r\n            addVJsonId(target)\r\n        }\r\n\r\n        // 根据布局处理内容\r\n        const define = getLayoutOutlineDefine(vjson)\r\n        if (!define) {\r\n            console.error('没有找到布局定义', vjson)\r\n        } else {\r\n            _.forOwn(define, (define, propName) => {\r\n                if (define.isList === true) {\r\n                    _.forEach(vjson[propName], item => {\r\n                        resolverTarget(item)\r\n                    })\r\n\r\n                } else {\r\n                    resolverTarget(vjson[propName])\r\n                }\r\n            })\r\n        }\r\n\r\n    }\r\n\r\n    clipCopy() {\r\n        const clipData = []\r\n        _.forEach(this.mulSelect, item => {\r\n            const vjson = _.cloneDeep(item.vjson)\r\n            removeVJsonId(vjson)\r\n            clipData.push(vjson)\r\n        })\r\n\r\n        this.clipData = clipData\r\n        this.mulSelect = []\r\n        system.msg('已复制')\r\n    }\r\n\r\n    tryPaste() {\r\n        const msg = []\r\n        if (getComponentDragGroup(this.selectedWidget) === 'fieldGroup') {\r\n            // 如果当前选中的组件是 field\r\n            if (this.selectedOption.parentList && this.selectedOption.indexOfParentList >= 0) {\r\n                let i = 1\r\n                _.forEach(this.clipData, (item) => {\r\n                    // 循环剪切板，将内部 field 组件一个一个粘贴到目标的后面\r\n                    if (getComponentDragGroup(item) === 'fieldGroup') {\r\n                        const vjson = _.cloneDeep(item)\r\n                        addVJsonId(vjson)\r\n                        this.selectedOption.parentList.splice(this.selectedOption.indexOfParentList + i, 0, vjson)\r\n                        i++\r\n                    } else {\r\n                        msg.push('无法粘贴, row 组件无法粘贴至 field区域' + item.xtype)\r\n                    }\r\n                })\r\n            }\r\n\r\n        } else if (getComponentDragGroup(this.selectedWidget) === 'rowGroup') {\r\n            // 如果当前选中的组件是 form / toolbar\r\n            if (this.selectedWidget.xtype === 'form' || this.selectedWidget.xtype === 'toolbar') {\r\n                // 将剪切板 field 组件一个一个粘贴到其内部\r\n                _.forEach(this.clipData, (item) => {\r\n                    // 循环剪切板，将内部 field 组件一个一个粘贴到目标的后面\r\n                    if (getComponentDragGroup(item) === 'fieldGroup') {\r\n                        const vjson = _.cloneDeep(item)\r\n                        addVJsonId(vjson)\r\n                        this.selectedWidget.items.push(vjson)\r\n                    }\r\n                })\r\n            }\r\n\r\n            // 将剪切板 row 组件一个一个粘贴到其后面\r\n            if (this.selectedOption.parentList && this.selectedOption.indexOfParentList >= 0) {\r\n                let i = 1\r\n                _.forEach(this.clipData, (item) => {\r\n                    // 循环剪切板，将内部 field 组件一个一个粘贴到目标的后面\r\n                    if (getComponentDragGroup(item) === 'rowGroup') {\r\n                        const vjson = _.cloneDeep(item)\r\n                        addVJsonId(vjson)\r\n                        this.selectedOption.parentList.splice(this.selectedOption.indexOfParentList + i, 0, vjson)\r\n                        i++\r\n                    }\r\n                })\r\n            } else {\r\n                msg.push('无法粘贴, 找不到 parent-list.')\r\n            }\r\n        }\r\n\r\n        if (msg.length > 0) {\r\n            system.showErrorDialog(msg.join('; \\n'))\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * 为 target 组件，取一个方法名字\r\n * 如果有组件名(reference)，就以 \"组件名_属性名\" 为名称\r\n * 如果没有名字，就以 xtype+序号+属性名 为名称\r\n */\r\nfunction chooseReferenceName(referenceNamePool, target, propName) {\r\n    if (typeof target.reference === 'string' && _.size(target.reference) > 0) {\r\n        // 如果有组件名，就以 \"组件名_属性名\" 为名称\r\n        return target.reference + \"_\" + propName\r\n    }\r\n    if (typeof target._tmpReference === 'string' && _.size(target._tmpReference) > 0) {\r\n        // 如果有临时组件名，就以 \"组件名_属性名\" 为名称\r\n        return target._tmpReference + \"_\" + propName\r\n    }\r\n\r\n    // 没有组件名，就进行顺序生成\r\n    let name\r\n    let i = 0\r\n    while (true) {\r\n        i++\r\n        name = target.xtype + i\r\n        let isDup = false\r\n        if (referenceNamePool[name]) {\r\n            isDup = true\r\n        }\r\n\r\n        if (!isDup) {\r\n            // 发现没有重复的名称，就以这个名称为准\r\n            break\r\n        }\r\n    }\r\n\r\n    // 将临时名称加入到 target 属性上，后面再统一删除\r\n    target._tmpReference = name\r\n    referenceNamePool[name] = 'T'\r\n    return name + \"_\" + propName\r\n}\r\n\r\n/**\r\n * 动态生成JS, 千万不要乱动！！动了就回不来了！\r\n * computed: {\r\n *     textfield1_disabled: '[\"S\"]return this.f1 === 'd'[\"E\"]',\r\n * },\r\n * methods: {\r\n *     btn1_click: \"['S']console.log(\\\"form=\\\", this.$data)['E']\",\r\n *     textfield1_change: \"['S']console.log(\\\"1\\\");\\r\\nconsole.log('2');\\r\\nconsole.log('\\\\t3');\\r\\n['E']\",\r\n * },\r\n * 转换为 =>\r\n * computed: {\r\n *     textfield1_disabled() {\r\n *         return this.f1 === 'd'\r\n *     },\r\n * },\r\n * methods: {\r\n *     btn1_click() {\r\n *         console.log(\"form=\", this.$data)'\r\n *     },\r\n *     textfield1_change() {\r\n *         console.log(\"1\");\r\n *         console.log('2');\r\n *         console.log('\\t3');\r\n *     }\r\n * },\r\n */\r\nfunction stringifyDesignJsObject(vexport) {\r\n    // 改写 vexport\r\n    const vexportCP = _.cloneDeep(vexport)\r\n    // if (vexportCP.data?.vjson?.layoutParams) {\r\n    //     _.forEach(vexportCP.data.vjson.layoutParams, param => {\r\n    //         if (param?.name) {\r\n    //             vexportCP.props[param.name] = {\r\n    //                 required: false,\r\n    //                 // type: [],\r\n    //                 // default: \"\",\r\n    //             }\r\n    //         }\r\n    //     });\r\n    // }\r\n    let code = 'export default ' + JSON5.stringify(vexportCP, {replacer: null, space: '    ', quote: '\\''})\r\n    while (true) {\r\n        const START = ': \\'[\"S\"]'\r\n        const END = '[\"E\"]'\r\n\r\n        const s = code.indexOf(START)\r\n        if (s < 0) {\r\n            break\r\n        }\r\n        const e = code.indexOf(END)\r\n\r\n        const strExpress = code.substring(s + 2, e + 6)\r\n        let targetStr\r\n        eval(\"targetStr=\" + strExpress + \";\")\r\n\r\n        //@ts-ignore\r\n        targetStr = targetStr.substring(5, targetStr.length - 5)\r\n        code = code.substring(0, s) + \"() {\\n\" + insertPrefixEachLine(targetStr, '            ') + \"\\n        }\" + code.substring(e + 6)\r\n    }\r\n\r\n    return code\r\n}\r\n\r\n/**\r\n * 将 design.js 中的 data 变成函数模式\r\n * data: {\r\n *     a:1,\r\n *     b:2,\r\n *     vjson: {\r\n *         layout: 'DefaultLayout'\r\n *         items: [],\r\n *     }\r\n * }\r\n *\r\n * 变成代码模式:\r\n * data () {\r\n *     return {\r\n *         a: 1,\r\n *         b: 2,\r\n *         vjson: {\r\n *              layout: 'DefaultLayout',\r\n *              items: [],\r\n *         }\r\n *     }\r\n * }\r\n */\r\nfunction vexportDataToFuncBody(vexportData) {\r\n    return markDynamicMethod('// @VExportData-Start\\nreturn ' + JSON5.stringify(vexportData, {\r\n        replacer: null,\r\n        space: '    ',\r\n        quote: '\\''\r\n    }) + '\\n//@VExportData-End\\n')\r\n}\r\n\r\n/**\r\n * 将 design.js 中的 data 函数模式变换为 对象\r\n */\r\nfunction vexportFuncBodyToObject(vexport) {\r\n    if (typeof vexport.data === 'function') {\r\n        return vexport.data()\r\n    }\r\n    return vexport.data\r\n}\r\n\r\n/**\r\n * 根据字符串构建方法体, 并加上 [\"S\"] / [\"E\"]  作为前后缀，准备替换\r\n */\r\nfunction markDynamicMethod(funcBody) {\r\n    return '[\"S\"]' + funcBody + '[\"E\"]'\r\n}\r\n\r\n/**\r\n * 从 function 获取到 functionBody 的字符串格式\r\n * 并且自动去掉前面的 12 个空格\r\n */\r\nfunction stringifyMethodBody(func) {\r\n    if (typeof func === 'function') {\r\n        const bodyWithName = func.toString()\r\n        const funcBody = bodyWithName.substring(bodyWithName.indexOf('{') + 1, bodyWithName.lastIndexOf('}'))\r\n\r\n        const body = _.join(_.map(funcBody.split('\\n'), line => {\r\n            if (line.startsWith('            ')) {\r\n                return line.substring(12)\r\n            }\r\n            return line\r\n        }), '\\n')\r\n\r\n        return _.trim(body)\r\n    }\r\n    return ''\r\n}","import {h} from 'vue';\r\nimport {ElIcon} from \"element-plus\";\r\nimport * as AntdIcon from '@vicons/antd';\r\nimport * as FaIcon from '@vicons/fa';\r\nimport * as Icon5 from '@vicons/ionicons5';\r\nimport * as ElementPlusIconsVue from '@element-plus/icons-vue'\r\nimport _ from 'lodash'\r\nimport localforage from \"localforage\";\r\n\r\n/** 所有变量类型 */\r\nenum TypeEnum {\r\n    string = 'string',\r\n    number = 'number',\r\n    object = 'object',\r\n    array = 'array',\r\n    function = 'function',\r\n    null = 'null',\r\n    boolean = 'boolean',\r\n    symbol = 'symbol',\r\n    json = 'json',\r\n    math = 'math',\r\n    regexp = 'regexp',\r\n    date = 'date',\r\n    undefined = 'undefined',\r\n    nan = 'nan',\r\n    reactNode = 'react_node',\r\n}\r\n\r\ninterface DbTable {\r\n    description: string\r\n    schema_name: string\r\n    table_name: string\r\n    column_list: DbColumn[]\r\n}\r\n\r\ninterface DbColumn {\r\n    column_comment: string\r\n    column_dict: string\r\n    column_domain: string\r\n    column_name: string\r\n    column_note: string\r\n    column_size: number\r\n    column_ui: string\r\n    data_type: string\r\n    decimal_digits: number\r\n    default_value: string\r\n    display_position: number\r\n    is_primary_key: true\r\n    not_null: boolean\r\n    ordinal_position: number\r\n    schema_name: string\r\n    table_name: string\r\n}\r\n\r\n/**\r\n * 判断对象类型\r\n * @param object 对象\r\n */\r\nconst variableTypeOf = (object?: any): TypeEnum => {\r\n    const typeStr = Object.prototype.toString.call(object);\r\n    let typeName: TypeEnum;\r\n    switch (`${typeStr}`.toLowerCase()) {\r\n        case '[object string]':\r\n            typeName = TypeEnum.string;\r\n            break;\r\n        case '[object number]':\r\n            if (Number.isNaN(object)) {\r\n                return TypeEnum.nan;\r\n            }\r\n            typeName = TypeEnum.number;\r\n            break;\r\n        case '[object object]':\r\n            if (object.$$typeof && object.props) {\r\n                const type = variableTypeOf(object.$$typeof);\r\n                if (type === TypeEnum.symbol || type === TypeEnum.reactNode) {\r\n                    return TypeEnum.reactNode;\r\n                }\r\n            }\r\n            typeName = TypeEnum.object;\r\n            break;\r\n        case '[object array]':\r\n            typeName = TypeEnum.array;\r\n            break;\r\n        case '[object function]':\r\n            typeName = TypeEnum.function;\r\n            break;\r\n        case '[object null]':\r\n            typeName = TypeEnum.null;\r\n            break;\r\n        case '[object boolean]':\r\n            typeName = TypeEnum.boolean;\r\n            break;\r\n        case '[object date]':\r\n            typeName = TypeEnum.date;\r\n            break;\r\n        // 不常用\r\n        case '[object symbol]':\r\n            typeName = TypeEnum.symbol;\r\n            break;\r\n        case '[object json]':\r\n            typeName = TypeEnum.json;\r\n            break;\r\n        case '[object math]':\r\n            typeName = TypeEnum.math;\r\n            break;\r\n        case '[object regexp]':\r\n            typeName = TypeEnum.regexp;\r\n            break;\r\n        // 貌似不会走的分支\r\n        case '[object undefined]':\r\n            typeName = TypeEnum.undefined;\r\n            break;\r\n        // 无法识别\r\n        default:\r\n            if (object === undefined) {\r\n                return TypeEnum.undefined;\r\n            }\r\n            console.log('varTypeOf -> ', object, ' | -> ', typeStr, ' | ', `${typeStr}`.toLowerCase());\r\n            typeName = TypeEnum.object;\r\n    }\r\n    return typeName;\r\n};\r\n\r\n/**\r\n * 渲染图标\r\n */\r\nfunction renderIcon(icon) {\r\n    if (icon === false) {\r\n        return undefined;\r\n    }\r\n    let component: any = undefined;\r\n    if (variableTypeOf(icon) === TypeEnum.string) {\r\n        if (icon.startsWith(\"element \")) {\r\n            icon = icon.substring(\"element \".length);\r\n            component = ElementPlusIconsVue[icon];\r\n        } else if (icon.startsWith(\"antd \")) {\r\n            icon = icon.substring(\"antd \".length);\r\n            component = AntdIcon[icon];\r\n        } else if (icon.startsWith(\"fa \")) {\r\n            icon = icon.substring(\"fa \".length);\r\n            component = FaIcon[icon];\r\n        } else if (icon.startsWith(\"icon5 \")) {\r\n            icon = icon.substring(\"icon5 \".length);\r\n            component = Icon5[icon];\r\n        } else {\r\n            component = AntdIcon[icon];\r\n            if (!component) component = FaIcon[icon];\r\n            if (!component) component = Icon5[icon];\r\n            if (!component) component = ElementPlusIconsVue[icon];\r\n        }\r\n    }\r\n    if (!component) {\r\n        // component = AntdIcon[\"ProfileOutlined\"];\r\n        return undefined;\r\n    }\r\n    return () => h(ElIcon, null, {default: () => h(component)});\r\n}\r\n\r\n/**\r\n * 从全局缓存获取表格\r\n */\r\nfunction getTableByName(name): DbTable {\r\n    const databaseMeta = window['database_meta']\r\n    const table_list = databaseMeta[0].table_list;\r\n    if (!table_list) {\r\n        system.msg('请先加载数据库模块');\r\n        return\r\n    }\r\n    const idx = _.findIndex(table_list, (item: DbTable) => {\r\n        return item.table_name === name;\r\n    })\r\n    if (idx < 0) {\r\n        return\r\n    }\r\n    return table_list[idx] as DbTable\r\n}\r\n\r\nfunction getTableColumnByName(columnName): DbColumn[] {\r\n    const databaseMeta = window['database_meta']\r\n    const table_list = databaseMeta[0].table_list;\r\n    if (!table_list) {\r\n        system.msg('请先加载数据库模块');\r\n        return\r\n    }\r\n    const result = []\r\n    _.forEach(table_list, (item: DbTable) => {\r\n        _.forEach(item.column_list, (column: DbColumn) => {\r\n            if (column.column_name === columnName) {\r\n                result.push(column)\r\n            }\r\n        })\r\n    })\r\n\r\n    return result\r\n}\r\n\r\nexport {\r\n    TypeEnum,\r\n    variableTypeOf,\r\n    renderIcon,\r\n    getTableByName,\r\n    getTableColumnByName\r\n};","import VJsonContext from \"../vjson/VJsonContext\";\r\nimport {getDesignCmp} from \"./yv-designer-desc\";\r\nimport Designer from \"./designer\";\r\nimport eventBus from \"../../event-bus\";\r\nimport _ from \"lodash\";\r\nimport {renderIcon} from \"../../utils\";\r\nimport {calcClass, calcStyle, calcStyleAndWidth,calcStyleLabel,calcStyleContent} from \"../yv-utils\";\r\n\r\nexport default {\r\n    props: {\r\n        vjson: Object,\r\n        designer: Designer,\r\n        vcxt: VJsonContext,\r\n        parentComponent: {type: Object, required: false},\r\n        parentList: {type: Array, required: false},\r\n        indexOfParentList: {type: Number, required: false},\r\n    },\r\n    watch: {\r\n        'vjson.reference': {\r\n            immediate: true,\r\n            handler(newVal, oldVal) {\r\n                if (oldVal) {\r\n                    // 删除旧名称\r\n                    delete this.vcxt.refs[oldVal]\r\n                }\r\n\r\n                if (newVal) {\r\n                    this.vcxt.refs[this.vjson.reference] = this\r\n                }\r\n            }\r\n        }\r\n    },\r\n    created() {\r\n        // console.log('created ', this.vjson.xtype, toRaw(this.vjson), toRaw(this.vcxt))\r\n    },\r\n    computed: {\r\n        calcClass() {\r\n            return calcClass(this.vjson)\r\n        },\r\n\r\n        calcStyleAndWidth() {\r\n            return calcStyleAndWidth(this.vjson)\r\n        },\r\n\r\n        calcStyle() {\r\n            return calcStyle(this.vjson)\r\n        },\r\n\r\n        customClass() {\r\n            return this.vjson.cls ?? ''\r\n        },\r\n        calcStyleLabel(){\r\n            return calcStyleLabel(this.vjson)\r\n        },\r\n        calcStyleContent(){\r\n            return calcStyleContent(this.vjson)\r\n        }\r\n    },\r\n    methods: {\r\n        renderIcon: renderIcon,\r\n        getDesignCmp,\r\n        _scrollMe() {\r\n            eventBus.$emit('bem-refresh', {sender: this, source: 'scroll'})\r\n        },\r\n        _selectMe(evt) {\r\n            if (this.vjson.id) {\r\n                if (evt.ctrlKey) {\r\n                    // 按住 ctrl 键进行多选\r\n                    const idx = _.findIndex(this.designer.mulSelect, v => v.vjson.id === this.vjson.id)\r\n                    if (idx < 0) {\r\n                        // console.log('_selectMe mulSelect.push:', this.vjson.id)\r\n                        this.designer.mulSelect.push({\r\n                            vjson: this.vjson,\r\n                        })\r\n                    }\r\n                } else {\r\n                    // 没按 ctrl 进行单选\r\n                    // console.log('_selectMe mulSelect:', this.vjson.id)\r\n                    this.designer.mulSelect = [{\r\n                        vjson: this.vjson,\r\n                    }]\r\n                }\r\n            }\r\n            this.designer.setSelected(this.vjson, {\r\n                parentComponent: this.parentComponent,\r\n                parentList: this.parentList,\r\n                indexOfParentList: this.indexOfParentList,\r\n            })\r\n        },\r\n        _onDragAdd(evt, subList, parentComponent) {\r\n            const newIndex = evt.newIndex\r\n            if (!!subList[newIndex]) {\r\n                this.designer.setSelected(subList[newIndex], {\r\n                    parentComponent: parentComponent,\r\n                    parentList: subList,\r\n                    indexOfParentList: newIndex,\r\n                })\r\n\r\n            } else {\r\n                this.designer.clearSelected()\r\n            }\r\n\r\n            this.designer.emitHistoryChange()\r\n        },\r\n        _onDragUpdate() {\r\n            eventBus.$emit('bem-refresh', {sender: this, source: 'dragUpdate'})\r\n            this.designer.emitHistoryChange()\r\n        },\r\n\r\n        _checkMove(evt) {\r\n            return this.designer.checkWidgetMove(evt)\r\n        },\r\n\r\n        _onDragEnd() {\r\n            this.designer.dragEnd()\r\n        },\r\n    }\r\n}\r\n","<template>\r\n  <el-alert :id=\"id\" :key=\"id\"\r\n            :title=\"title\" :type=\"type\" :closable=\"false\"\r\n            @click.stop=\"_selectMe\"/>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  props: [\r\n    'title', 'type'\r\n  ],\r\n  data() {\r\n    const id = this.vjson?.id ?? _.uniqueId('_tmp_id')\r\n    return {\r\n      id\r\n    }\r\n  },\r\n  methods: {},\r\n}\r\n</script>","import Designer from \"../designer\";\r\nimport VJsonContext from \"../../vjson/VJsonContext\";\r\nimport _ from \"lodash\";\r\nimport {renderIcon} from '../../../utils'\r\nimport eventBus from \"../../../event-bus\";\r\nimport TsLanguageSupport from \"../TsLanguageSupport\";\r\n\r\n/**\r\n * 属性设计器的混入方法\r\n */\r\nexport default {\r\n    props: {\r\n        vjson: Object,\r\n        designer: Designer,\r\n        vcxt: VJsonContext,\r\n    },\r\n    data() {\r\n        /**\r\n         * bind 属性的定义\r\n         * {\r\n         *     value: \"{a.b}\"\r\n         * }\r\n         */\r\n        let bindValue = this.vjson.bind?.value\r\n        if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, \"}\")) {\r\n            bindValue = bindValue.substring(1, bindValue.length - 1)\r\n        } else {\r\n            bindValue = ''\r\n        }\r\n\r\n        /**\r\n         * bind2 属性的定义\r\n         * {\r\n         *     value2: \"{a.b}\"\r\n         * }\r\n         */\r\n        let bindValue2 = this.vjson.bind?.value2\r\n        if (_.startsWith(bindValue2, '{') && _.endsWith(bindValue2, \"}\")) {\r\n            bindValue2 = bindValue2.substring(1, bindValue2.length - 1)\r\n        } else {\r\n            bindValue2 = ''\r\n        }\r\n\r\n        return {\r\n            bindValue,\r\n            bindValue2,\r\n        }\r\n    },\r\n    watch: {\r\n        'bindValue': {\r\n            handler(newVal, oldVal) {\r\n                if (!this.allowSaveStep) {\r\n                    return\r\n                }\r\n                if (!newVal) {\r\n                    delete this.vjson.bind?.value\r\n                    return\r\n                }\r\n\r\n                if (!this.vjson.bind) {\r\n                    this.vjson.bind = {}\r\n                }\r\n                if (newVal !== oldVal) {\r\n                    // 语言提示模型被更改\r\n                    TsLanguageSupport.instance.markModelChanged()\r\n                }\r\n                this.vjson.bind.value = \"{\" + newVal + \"}\"\r\n            }\r\n        },\r\n\r\n        'bindValue2': {\r\n            handler(newVal, oldVal) {\r\n                if (!this.allowSaveStep) {\r\n                    return\r\n                }\r\n                if (!newVal) {\r\n                    delete this.vjson.bind?.value2\r\n                    return\r\n                }\r\n\r\n                if (!this.vjson.bind) {\r\n                    this.vjson.bind = {}\r\n                }\r\n                if (newVal !== oldVal) {\r\n                    // 语言提示模型被更改\r\n                    TsLanguageSupport.instance.markModelChanged()\r\n                }\r\n                this.vjson.bind.value2 = \"{\" + newVal + \"}\"\r\n            }\r\n        },\r\n\r\n        'formData.reference': {\r\n            handler(newVal, oldVal) {\r\n                if (this.allowSaveStep) {\r\n                    if (newVal !== oldVal) {\r\n                        // 语言提示模型被更改\r\n                        TsLanguageSupport.instance.markModelChanged()\r\n                    }\r\n                }\r\n            }\r\n        },\r\n\r\n        'formData': {\r\n            deep: true,\r\n            handler(newVal, oldVal) {\r\n                if (this.allowSaveStep) {\r\n                    this.$nextTick(() => {\r\n                        eventBus.$emit('bem-refresh', {sender: this, source: 'propUpdate'})\r\n                    })\r\n                    this.designer.saveCurrentHistoryStep()\r\n                }\r\n            }\r\n        },\r\n\r\n        'designer.selectedWidget': {\r\n            handler(vjson) {\r\n                if (!vjson) {\r\n                    this.bindValue = ''\r\n                    return\r\n                }\r\n\r\n                let bindValue = vjson.bind?.value\r\n                if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, \"}\")) {\r\n                    bindValue = bindValue.substring(1, bindValue.length - 1)\r\n                } else {\r\n                    bindValue = ''\r\n                }\r\n\r\n                this.bindValue = bindValue\r\n            }\r\n        }\r\n    },\r\n    computed: {\r\n        isRf() {\r\n            return this.designer.vjson.layout === \"MobileDefaultLayout\";\r\n        }\r\n    },\r\n    methods: {\r\n        renderIcon\r\n    }\r\n}","<template>\r\n  <div class=\"property tabs-property\">\r\n    <div class=\"title\">dialog 属性</div>\r\n    <el-form ref=\"vForm\" :rules=\"rules\" label-position=\"right\" label-width=\"120px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"关联表格\" prop=\"referenceGrid\">\r\n        <el-input v-model=\"formData.referenceGrid\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"页头元素\" prop=\"headerReference\">\r\n        <el-input v-model=\"formData.headerReference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"页脚元素\" prop=\"footerReference\">\r\n        <el-input v-model=\"formData.footerReference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"高度\" prop=\"height\">\r\n        <el-input v-model=\"formData.height\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"宽度\" prop=\"width\">\r\n        <el-input v-model=\"formData.width\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"标题\" prop=\"title\">\r\n        <el-input v-model=\"formData.title\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"自适应高度\" prop=\"flex\">\r\n        <el-switch v-model=\"formData.isFlex\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"默认显示\" prop=\"isShow\">\r\n        <el-switch v-model=\"formData.isShow\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"允许拖拽\" prop=\"draggable\">\r\n        <el-switch v-model=\"formData.draggable\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"点击遮罩关闭\" prop=\"closeOnClickModal\">\r\n        <el-switch v-model=\"formData.closeOnClickModal\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"按ESC关闭\" prop=\"closeOnPressEscape\">\r\n        <el-switch v-model=\"formData.closeOnPressEscape\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"显示关闭按钮\" prop=\"showClose\">\r\n        <el-switch v-model=\"formData.showClose\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"显示遮罩\" prop=\"modal\">\r\n        <el-switch v-model=\"formData.modal\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"层级\" prop=\"zIndex\">\r\n        <el-input v-model=\"formData.zIndex\"></el-input>\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../../design/designer\"\r\nimport basePropMix from \"../../design/designCompoent/basePropMix\"\r\n\r\nexport default {\r\n  components: {},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        height: this.vjson.height ?? '',\r\n        title: this.vjson.title,\r\n        isFlex: this.vjson.isFlex,\r\n      },\r\n    }\r\n  },\r\n  methods: {},\r\n  computed: {},\r\n  watch: {\r\n    'designer.selectedDialogId': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        const dialog = _.find(this.designer.vjson.dialogs, d => d.id === this.designer.selectedDialogId)\r\n        if (dialog?.xtype === 'dialog') {\r\n          this.formData = dialog\r\n        } else {\r\n          this.formData = {}\r\n        }\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    },\r\n  }\r\n}\r\n</script>","<template>\r\n  <div class=\"property tabs-property\">\r\n    <div class=\"title\">drawer 属性</div>\r\n    <el-form :rules=\"rules\" label-position=\"right\" label-width=\"110px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"页头元素\" prop=\"headerReference\">\r\n        <el-input v-model=\"formData.headerReference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"页脚元素\" prop=\"footerReference\">\r\n        <el-input v-model=\"formData.footerReference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"大小\" prop=\"size\">\r\n        <el-input v-model=\"formData.size\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"标题\" prop=\"title\">\r\n        <el-input v-model=\"formData.title\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"默认显示\" prop=\"isShow\">\r\n        <el-switch v-model=\"formData.isShow\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"点击遮罩关闭\" prop=\"closeOnClickModal\">\r\n        <el-switch v-model=\"formData.closeOnClickModal\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"按ESC关闭\" prop=\"closeOnPressEscape\">\r\n        <el-switch v-model=\"formData.closeOnPressEscape\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"显示关闭按钮\" prop=\"showClose\">\r\n        <el-switch v-model=\"formData.showClose\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"显示遮罩\" prop=\"modal\">\r\n        <el-switch v-model=\"formData.modal\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"层级\" prop=\"zIndex\">\r\n        <el-input v-model=\"formData.zIndex\"></el-input>\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../../design/designer\"\r\nimport basePropMix from \"../../design/designCompoent/basePropMix\"\r\nimport _ from \"lodash\";\r\n\r\nexport default {\r\n  components: {},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {},\r\n    }\r\n  },\r\n  methods: {},\r\n  computed: {},\r\n  watch: {\r\n    'designer.selectedDialogId': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        const dialog = _.find(designer.vjson.dialogs, d => d.id === designer?.selectedDialogId)\r\n        if (dialog?.xtype === 'drawer') {\r\n          this.formData = dialog\r\n        } else {\r\n          this.formData = {}\r\n        }\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    },\r\n  }\r\n}\r\n</script>","import _ from 'lodash'\r\nimport {h, markRaw, toRaw} from 'vue'\r\nimport {ElAlert, ElEmpty} from 'element-plus'\r\nimport YvDesignNotFound from './designCompoent/yv-design-not-found.vue'\r\nimport JSON5 from 'json5'\r\nimport Designer from \"./designer\"\r\nimport YvDesignDialogProp from './designCompoent/yv-design-dialog-prop.vue'\r\nimport YvDesignDrawerProp from './designCompoent/yv-design-drawer-prop.vue'\r\n\r\nexport class YvComponentDesc {\r\n    xtype: string\r\n    displayFn: (vjson: any) => string\r\n    vjsonComponent: any\r\n    vjsonComponentName: string\r\n    designerComponent: any\r\n    designerComponentName: string\r\n    propComponent: any\r\n    propComponentName: string\r\n\r\n    /**\r\n     * 可绑定属性\r\n     */\r\n    props: YvComponentProp[] = []\r\n\r\n    /**\r\n     * 事件\r\n     */\r\n    events: YvComponentEvent[] = []\r\n\r\n    /**\r\n     * 事件\r\n     */\r\n    methods: YvComponentMethods[] = []\r\n\r\n    /**\r\n     * 设计器组件\r\n     */\r\n    setDesign(name: string, cmp: any) {\r\n        this.designerComponent = cmp\r\n        this.designerComponentName = name\r\n    }\r\n\r\n    /**\r\n     * 属性编辑面板\r\n     */\r\n    setProp(name: string, cmp: any) {\r\n        this.propComponent = cmp\r\n        this.propComponentName = name\r\n    }\r\n\r\n    /**\r\n     * 运行时组件\r\n     */\r\n    setRuntime(name: string, cmp: any) {\r\n        this.vjsonComponent = cmp\r\n        this.vjsonComponentName = name\r\n    }\r\n\r\n    /**\r\n     * 组件获取中文说明时该如何获取\r\n     */\r\n    setDisplayFn(fn: (vjson: any) => string) {\r\n        this.displayFn = fn\r\n    }\r\n\r\n    /**\r\n     * 安装至全局 Vue 上下文\r\n     */\r\n    install(Vue) {\r\n        if (this.vjsonComponent) {\r\n            Vue.component(this.vjsonComponentName, this.vjsonComponent)\r\n        }\r\n        if (this.designerComponent) {\r\n            Vue.component(this.designerComponentName, this.designerComponent)\r\n        }\r\n        if (this.propComponent) {\r\n            Vue.component(this.propComponentName, this.propComponent)\r\n        }\r\n    }\r\n}\r\n\r\nfunction getComponentDescMap(): { [key: string]: YvComponentDesc } {\r\n    if (!window['_componentDescMap']) {\r\n        window['_componentDescMap'] = {}\r\n    }\r\n    return window['_componentDescMap']\r\n}\r\n\r\nfunction getLayouts() {\r\n    if (!window['_layouts']) {\r\n        window['_layouts'] = {}\r\n    }\r\n    return window['_layouts']\r\n}\r\n\r\ninterface OutLineDefine {\r\n    [key: string]: OutLineItemDefine\r\n}\r\n\r\ninterface OutLineItemDefine {\r\n    title: string\r\n    xtype?: string\r\n    isList?: boolean\r\n}\r\n\r\ntype LayoutSaveHandler = (vexport: any, vjson: any) => void\r\ntype LayoutLoadHandler = (vexport: any, vjson: any) => void\r\n\r\n/**\r\n * 注册布局\r\n * @param Vue 当前 VueApp\r\n * @param layout 布局名称(英文变量)\r\n * @param name 布局中文说明\r\n * @param component 布局组件\r\n * @param componentDesign 布局设计器\r\n * @param outline 布局大纲设计\r\n * @param layoutProp 布局属性设计器\r\n * @param emptyTemplate 布局空 design.js 内容\r\n * @param saveHandler 保存时的回调\r\n * @param loadHandler 载入时的回调\r\n */\r\nexport function registeLayout(Vue, layout: string, name: string, component, componentDesign,\r\n                              outline: OutLineDefine = {items: {title: '主要内容'}}, layoutProp: any,\r\n                              emptyTemplate: any, saveHandler?: LayoutSaveHandler, loadHandler?: LayoutLoadHandler) {\r\n    getLayouts()[layout] = {\r\n        component: component ? markRaw(component) : undefined,\r\n        componentDesign: componentDesign ? markRaw(componentDesign) : undefined,\r\n        name,\r\n        outline,\r\n        layoutProp,\r\n        emptyTemplate,\r\n        saveHandler,\r\n        loadHandler,\r\n    }\r\n}\r\n\r\n/**\r\n * 获取布局保存时的回调\r\n */\r\nexport function getLayoutEventHandler(name: string): LayoutSaveHandler | undefined {\r\n    const layout = getLayouts()[name]\r\n    if (!layout) {\r\n        system.msg('没有定义布局 ' + name)\r\n        return\r\n    }\r\n    return layout.eventHandler\r\n}\r\n\r\n/**\r\n * 获取布局保存时的回调\r\n */\r\nexport function getLayoutSaveHandler(name: string): LayoutSaveHandler | undefined {\r\n    const layout = getLayouts()[name]\r\n    if (!layout) {\r\n        system.msg('没有定义布局 ' + name)\r\n        return\r\n    }\r\n    return layout.saveHandler\r\n}\r\n\r\n/**\r\n * 获取布局载入时的回调\r\n */\r\nexport function getLayoutLoadHandler(name: string): LayoutLoadHandler | undefined {\r\n    const layout = getLayouts()[name]\r\n    if (!layout) {\r\n        system.msg('没有定义布局 ' + name)\r\n        return\r\n    }\r\n    return layout.loadHandler\r\n}\r\n\r\n/**\r\n * 获取全部布局（列表） layout,name 属性\r\n */\r\nexport function getLayoutList(): { layout: string, name: string, designSupport: boolean }[] {\r\n    const list: { layout: string, name: string, designSupport: boolean, layoutType: string }[] = []\r\n    _.forOwn(getLayouts(), (value: any, key) => {\r\n        list.push({\r\n            name: value.name,\r\n            layout: key,\r\n            designSupport: !!value.componentDesign,\r\n            layoutType: value.componentDesign?.layoutType\r\n        })\r\n    })\r\n    return list\r\n}\r\n\r\n/**\r\n * 空布局模式\r\n */\r\nexport function getLayoutEmptyTemplate(name: string) {\r\n    const layout = getLayouts()[name]\r\n    if (!layout) {\r\n        system.msg('没有定义布局 ' + name)\r\n        return\r\n    }\r\n    if (!layout.emptyTemplate) {\r\n        system.msg('没有定义空模板 ' + name)\r\n        return\r\n    }\r\n    return layout.emptyTemplate\r\n}\r\n\r\n/**\r\n * 获取布局的运行时\r\n */\r\nexport function getLayout(name) {\r\n    const layout = getLayouts()[name]?.component\r\n    if (!layout) {\r\n        return h(ElAlert, {\r\n            title: '没有定义布局 ' + name,\r\n            type: 'error',\r\n            closable: false,\r\n        })\r\n    }\r\n    return layout\r\n}\r\n\r\n/**\r\n * 获取布局的设计时\r\n */\r\nexport function getLayoutDesign(vjson: any) {\r\n    const layoutName = vjson.layout\r\n    const layout = getLayouts()[layoutName]?.componentDesign\r\n    if (!layout) {\r\n        return h(ElAlert, {\r\n            title: '没有定义布局 ' + name,\r\n            type: 'error',\r\n            closable: false,\r\n        })\r\n    }\r\n    return layout\r\n}\r\n\r\n/**\r\n * 获取布局的设计时\r\n */\r\nexport function getLayoutProp(vjson: any) {\r\n    const layoutName = vjson.layout\r\n    const layoutProp = getLayouts()[layoutName]?.layoutProp\r\n    if (!layoutProp) {\r\n        return h(ElAlert, {\r\n            title: '没有定义布局设计器 ' + layoutName,\r\n            type: 'error',\r\n            closable: false,\r\n        })\r\n    }\r\n    return layoutProp\r\n}\r\n\r\n/**\r\n * 获取布局的大纲定义\r\n */\r\nexport function getLayoutOutlineDefine(vjson: any) {\r\n    const layoutName = vjson.layout\r\n    return getLayouts()[layoutName]?.outline\r\n}\r\n\r\n/**\r\n * 注册组件\r\n */\r\nexport function registeComponent(xtype: string): YvComponentDesc {\r\n    if (!xtype) {\r\n        throw Error('yvan-component xtype not null!')\r\n    }\r\n    if (_.has(getComponentDescMap(), xtype)) {\r\n        throw Error('yvan-component is exists, xtype=' + xtype)\r\n    }\r\n\r\n    const desc = new YvComponentDesc()\r\n    desc.xtype = xtype\r\n    getComponentDescMap()[xtype] = desc\r\n    return desc\r\n}\r\n\r\nexport function getRuntimeCmpDebug(vjson: any) {\r\n    console.log('vjson', toRaw(vjson))\r\n    debugger\r\n    return getRuntimeCmp(vjson)\r\n}\r\n\r\n/**\r\n * 根据 xtype，返回运行时组件\r\n */\r\nexport function getRuntimeCmp(vjson: any) {\r\n\r\n    const xtype = vjson.xtype\r\n\r\n    if (!xtype) {\r\n        // 空属性面板\r\n        console.log('=== vjson', toRaw(vjson))\r\n        return markRaw(() => {\r\n            return h(ElAlert, {\r\n                id: _.uniqueId('_id'),\r\n                title: '没有定义 xtype: ' + (JSON5.stringify(vjson)),\r\n                type: 'error',\r\n                closable: false,\r\n            })\r\n        })\r\n    }\r\n\r\n    const desc = getComponentDesc(xtype)\r\n    if (!desc || !desc.vjsonComponent) {\r\n        // 空属性面板\r\n        // return markRaw(() => {\r\n        //     return h(ElAlert, {\r\n        //         id: _.uniqueId('_id'),\r\n        //         title: '没有找到组件 xtype=' + xtype,\r\n        //         type: 'error',\r\n        //         closable: false,\r\n        //     })\r\n        // })\r\n        return markRaw(() => {\r\n            return h(YvDesignNotFound, {\r\n                title: \"can't found xtype=\" + xtype,\r\n                type: 'error',\r\n            })\r\n        })\r\n    }\r\n\r\n    return markRaw(desc.vjsonComponent)\r\n}\r\n\r\n/**\r\n * 根据 xtype，返回设计时组件\r\n */\r\nexport function getDesignCmp(vjson: any, defaultXType?: string) {\r\n    if (!vjson.xtype) {\r\n        if (!defaultXType) {\r\n            // 空属性面板\r\n            return markRaw({\r\n                render() {\r\n                    return h(YvDesignNotFound, {\r\n                        title: '没有定义 xtype:' + JSON5.stringify(vjson),\r\n                        type: 'error',\r\n                        closable: false,\r\n                    })\r\n                }\r\n            })\r\n        } else {\r\n            vjson.xtype = defaultXType\r\n        }\r\n    }\r\n\r\n    const desc = getComponentDesc(vjson.xtype)\r\n    if (!desc || !desc.designerComponent) {\r\n        // 空属性面板\r\n        return markRaw({\r\n            render() {\r\n                return h(YvDesignNotFound, {\r\n                    title: '没有找到组件 xtype=' + vjson.xtype,\r\n                    type: 'error',\r\n                    closable: false,\r\n                })\r\n            }\r\n        })\r\n    }\r\n\r\n    return markRaw(desc.designerComponent)\r\n}\r\n\r\n/**\r\n * 获取属性设计面板\r\n */\r\nexport function getDesignPropCmp(vjson: any, designer?: Designer) {\r\n    if (!vjson || !vjson.xtype) {\r\n        if (vjson && typeof vjson.layout === 'string') {\r\n            if (designer?.selectedDialogId) {\r\n                // 当前选中的对话框的属性\r\n                const dialog = _.find(vjson.dialogs, d => d.id === designer?.selectedDialogId)\r\n                if (dialog?.xtype === 'dialog') {\r\n                    return markRaw(YvDesignDialogProp)\r\n\r\n                } else if (dialog?.xtype === 'drawer') {\r\n                    return markRaw(YvDesignDrawerProp)\r\n                }\r\n            }\r\n            return markRaw(getLayoutProp(vjson))\r\n        }\r\n\r\n\r\n        // 空属性面板\r\n        return markRaw(() => {\r\n            return h(ElEmpty, {\r\n                description: '请选择组件',\r\n            })\r\n        })\r\n    }\r\n\r\n    const desc = getComponentDesc(vjson.xtype)\r\n    if (!desc || !desc.propComponent) {\r\n        // 空属性面板\r\n        return markRaw(() => {\r\n            return h(ElEmpty, {\r\n                description: '组件 ' + vjson.xtype + ' 设计器未定义',\r\n            })\r\n        })\r\n    }\r\n\r\n    return markRaw(desc.propComponent)\r\n}\r\n\r\n/**\r\n * 获取默认值\r\n */\r\nexport function getDescDefaults(type: 'events' | 'methods' | 'props' | 'values'): any[] {\r\n    if (type === 'events') {\r\n        return [\r\n            {name: 'afterrender', desc: '渲染后'},\r\n            {name: 'destory', desc: '卸载后'},\r\n        ]\r\n\r\n    } else if (type === 'props') {\r\n        return [\r\n            {name: 'hidden', desc: '隐藏', bindable: true},\r\n            {name: 'emptyText', desc: '空文本', bindable: true},\r\n        ]\r\n\r\n    } else if (type === 'methods') {\r\n        return [\r\n            {name: 'performClick', desc: '模拟点击', events: []}\r\n        ]\r\n    }\r\n}\r\n\r\n/**\r\n * 根据 xtype 找到组件描述\r\n */\r\nexport function getComponentDesc(xtype: string): YvComponentDesc | undefined {\r\n    return getComponentDescMap()[xtype]\r\n}\r\n\r\nconst _toolbox = {\r\n    containers: [],\r\n    basicFields: [],\r\n    advancedFields: [],\r\n    customFields: [],\r\n}\r\n\r\n/**\r\n * 安装工具箱\r\n */\r\nexport function setupToolbox(options) {\r\n    _.forOwn(options, (v, k) => {\r\n        _.forEach(v, item => {\r\n            item.key = _.uniqueId()\r\n        })\r\n    })\r\n\r\n    _.extend(_toolbox, options)\r\n}\r\n\r\ninterface VariableDefine {\r\n    /**\r\n     * 变量名\r\n     */\r\n    name: String\r\n\r\n    /**\r\n     * 获取变量值\r\n     */\r\n    getValue(): any\r\n}\r\n\r\nlet _variableDefineList: VariableDefine[] = []\r\n\r\n/**\r\n * 获取全部全局表达式定义\r\n */\r\nexport function getGlobalVariable(): VariableDefine[] {\r\n    return _variableDefineList\r\n}\r\n\r\n/**\r\n * 根据名称获取全局表达式\r\n * @param name 名称，如果不传此参数，就返回全部全局定义\r\n */\r\nexport function getGlobalVariableByName(name): VariableDefine {\r\n    return _.find(_variableDefineList, item => name === item.name)\r\n}\r\n\r\n/**\r\n * 设置全局变量环境\r\n * @param variableDefineList 变量定义\r\n */\r\nexport function setGlobalVariable(variableDefineList: VariableDefine[]) {\r\n    _variableDefineList = variableDefineList\r\n}\r\n\r\n/**\r\n * 添加全局变量参数\r\n * @param variableDefine 变量定义\r\n */\r\nexport function addGlobalVariable(variableDefine: VariableDefine) {\r\n    _variableDefineList.push(variableDefine)\r\n}\r\n\r\n/**\r\n * 获取工具箱\r\n */\r\nexport function getToolbox(type: 'containers' | 'basicFields' | 'advancedFields' | 'customFields' | 'customFields2') {\r\n    return _toolbox[type]\r\n}\r\n\r\ninterface YvComponentMethods {\r\n    /**\r\n     * 方法名称\r\n     */\r\n    name: String\r\n\r\n    /**\r\n     * 方法描述\r\n     */\r\n    desc?: String\r\n\r\n    events: {\r\n        /**\r\n         * 参数名\r\n         */\r\n        name: String\r\n\r\n        /**\r\n         * 参数说明\r\n         */\r\n        desc?: String\r\n    }[]\r\n\r\n    /**\r\n     * 方法返回值\r\n     */\r\n    returnValue?: {\r\n        desc?: String\r\n    }\r\n}\r\n\r\ninterface YvComponentEvent {\r\n    /**\r\n     * 事件名称\r\n     */\r\n    name: String\r\n\r\n    /**\r\n     * 事件描述\r\n     */\r\n    desc?: String\r\n\r\n    events: {\r\n        /**\r\n         * 事件参数名\r\n         */\r\n        name: String\r\n\r\n        /**\r\n         * 事件参数说明\r\n         */\r\n        desc?: String\r\n    }[]\r\n}\r\n\r\ninterface YvComponentProp {\r\n    /**\r\n     * 属性名称\r\n     */\r\n    name: String\r\n\r\n    /**\r\n     * 属性描述\r\n     */\r\n    desc?: String\r\n\r\n    /**\r\n     * 是否支持绑定\r\n     */\r\n    bindable: boolean\r\n}","import lodash from 'lodash'\r\nimport xlsx, {WorkSheet} from 'xlsx'\r\n\r\nfunction adaptiveWidth(ws: WorkSheet) {\r\n    const min = 15\r\n    const max = 25\r\n    // 计算每个列的最大宽度\r\n    const columnWidths = [];\r\n    Object.keys(ws).forEach((cell) => {\r\n        if (!columnWidths[cell]) {\r\n            columnWidths[cell] = min\r\n        }\r\n        if (ws[cell].v) {\r\n            const cellLength = ws[cell].v.toString().length + 3\r\n            columnWidths[cell] = lodash.max([min, cellLength])\r\n        }\r\n    })\r\n    // 设置每个单元格的值和列宽度\r\n    ws['!rows'] = [{}];\r\n    Object.keys(ws).forEach((cell) => {\r\n        const width = lodash.min([columnWidths[cell], max])\r\n        if (!ws['!cols']) {\r\n            ws['!cols'] = []\r\n        }\r\n        ws['!cols'].push({wch: width})\r\n    });\r\n    // // 将格式应用于第1行\r\n    // const headerStyle = {\r\n    //     font: { bold: true },\r\n    //     alignment: { horizontal: 'center' },\r\n    //     fill: { type: 'pattern', patternType: 'solid', bgColor: { rgb: '87CEFA' } }\r\n    // };\r\n}\r\n\r\nfunction createExcel(config: {\r\n    fileName: string,\r\n    sheetName: string,\r\n    heads: Array<any>,\r\n    data: Array<Array<any>>,\r\n}) {\r\n    // 创建一个新的工作簿\r\n    const workbook = xlsx.utils.book_new()\r\n    // 创建一个新的工作表\r\n    const worksheet = xlsx.utils.aoa_to_sheet([config.heads] || [[]])\r\n    adaptiveWidth(worksheet)\r\n    xlsx.utils.sheet_add_aoa(worksheet, config.data || [])\r\n    // 将工作表添加到工作簿中\r\n    xlsx.utils.book_append_sheet(workbook, worksheet, config.sheetName || 'Sheet1')\r\n    // 导出 Excel 文件并保存到本地\r\n    xlsx.writeFile(workbook, config.fileName || '数据.xlsx')\r\n}\r\n\r\nfunction readExcel(heads: Array<{ header: string, dataIndex: string }>, file: Blob): Promise<Array<any>> {\r\n    return new Promise<Array<any>>((resolve, reject) => {\r\n        try {\r\n            const reader = new FileReader();\r\n            reader.onload = event => {\r\n                try {\r\n                    const data = new Uint8Array(event.target.result as any);\r\n                    const workbook = xlsx.read(data, {type: 'array'});\r\n                    const sheet = workbook.Sheets[workbook.SheetNames[0]];\r\n                    const rows = xlsx.utils.sheet_to_json(sheet);\r\n                    const headMap = {};\r\n                    lodash.forEach(heads, value => {\r\n                        headMap[value.header] = value.dataIndex;\r\n                    });\r\n                    const excelRows = [];\r\n                    for (let i = 0; i < rows.length; i++) {\r\n                        const row = rows[i] as object;\r\n                        const excelRow = {};\r\n                        lodash.forEach(heads, value => {\r\n                            excelRow[value.dataIndex] = \"\";\r\n                        });\r\n                        lodash.forEach(row, (value, key) => {\r\n                            const dataIndex = headMap[key]\r\n                            if (dataIndex) {\r\n                                excelRow[dataIndex] = value;\r\n                            }\r\n                        });\r\n                        excelRows.push(excelRow);\r\n                    }\r\n                    resolve(excelRows);\r\n                } catch (e) {\r\n                    reject(e);\r\n                }\r\n            };\r\n            reader.readAsArrayBuffer(file);\r\n        } catch (e) {\r\n            reject(e);\r\n        }\r\n    });\r\n}\r\n\r\nexport {\r\n    createExcel,\r\n    readExcel,\r\n}","<template>\r\n  <el-dialog\r\n      v-model=\"showExcelImport\"\r\n      title=\"导入Excel\"\r\n      :width=\"460\"\r\n      :append-to-body=\"true\"\r\n  >\r\n    <div style=\"margin: 8px 0 16px 0;\">\r\n      <el-upload\r\n          ref=\"upload\"\r\n          :limit=\"0\"\r\n          :auto-upload=\"false\"\r\n          accept=\".xls,.xlsx\"\r\n          :on-exceed=\"handleExceed\"\r\n          :on-change=\"onChangeFile\"\r\n          :on-remove=\"onRemoveFile\"\r\n      >\r\n        <template #trigger>\r\n          <el-button type=\"primary\">选择Excel文件</el-button>\r\n        </template>\r\n      </el-upload>\r\n      <div><a style=\"color: #0086b3;cursor: pointer;\" @click=\"downloadExcel\">下载</a>Excel模版</div>\r\n    </div>\r\n    <template #footer>\r\n        <span class=\"dialog-footer\">\r\n          <el-button @click=\"closeDialog\">取消</el-button>\r\n          <el-button type=\"primary\" @click=\"importExcel\">导入</el-button>\r\n        </span>\r\n    </template>\r\n  </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport _ from \"lodash\"\r\nimport {genFileId} from \"element-plus\";\r\nimport {createExcel, readExcel} from \"../components/vjson/excel\";\r\n\r\nexport default {\r\n  name: \"ImportExcelDialog\",\r\n  props: {\r\n    config: Object,\r\n    resolve: Function,\r\n    reject: Function,\r\n    _insId: Object,\r\n  },\r\n  data() {\r\n    return {\r\n      showExcelImport: true,\r\n    };\r\n  },\r\n  mounted() {\r\n    // window['aaa'] = this;\r\n    // console.log(this.$props);\r\n    // console.log(this.$emit);\r\n  },\r\n  methods: {\r\n    handleExceed(files) {\r\n      const upload = this.$refs.upload\r\n      upload.clearFiles()\r\n      const file = files[0]\r\n      file.uid = genFileId()\r\n      upload.handleStart(file)\r\n    },\r\n\r\n    onChangeFile(uploadFile, uploadFiles) {\r\n      this.file = uploadFile.raw\r\n      // console.log(uploadFile, uploadFiles)\r\n    },\r\n\r\n    onRemoveFile() {\r\n      this.file = null\r\n    },\r\n\r\n    closeDialog() {\r\n      this.showExcelImport = false;\r\n      if(this.$props?.reject) this.$props?.reject();\r\n    },\r\n\r\n    downloadExcel() {\r\n      const heads = this.$props.config?.columns?.map(c => c.header);\r\n      createExcel({\r\n        fileName: this.$props.config?.fileName || 'Excel导入模版.xlsx',\r\n        heads: heads,\r\n        data: [],\r\n      })\r\n    },\r\n\r\n    importExcel() {\r\n      if (!this.file) {\r\n        system.msg(\"还未选择上传文件！\")\r\n        return\r\n      }\r\n      const heads = this.$props.config?.columns.map(c => ({header: c.header, dataIndex: c.dataIndex}));\r\n      // console.log(this.file)\r\n      readExcel(heads, this.file).then(excelRows => {\r\n        // console.log(\"excelRows\", excelRows);\r\n        this.showExcelImport = false;\r\n        if(this.$props?.resolve) this.$props?.resolve(excelRows);\r\n      });\r\n    },\r\n  },\r\n  watch: {\r\n    showExcelImport: {\r\n      handler(newVal) {\r\n        if(!newVal) {\r\n          // $(\"#yv-hide-container\").css(\"display\", \"none\");\r\n          const {rootElementList} = window\r\n          _.remove(rootElementList, item => item.props._insId === this.$props._insId)\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n\r\n</style>","<template>\r\n  <el-dialog v-model=\"isShow\" @closed=\"onClosed\" append-to-body\r\n             :close-on-click-modal=\"false\"\r\n             :close-on-press-escape=\"false\"\r\n             :show-close=\"false\" class=\"yvan-loading\">\r\n      <div class=\"yvan-loading\">\r\n          <el-icon class=\"is-loading\">\r\n            <Loading />\r\n          </el-icon>\r\n        <div class=\"yvan-loading-wait\">请稍等...</div>\r\n      </div>\r\n  </el-dialog>\r\n</template>\r\n<script>\r\nimport _ from \"lodash\";\r\nimport {Loading} from '@element-plus/icons-vue'\r\nexport default {\r\n  props: [\r\n    '_insId'\r\n  ],\r\n  components: {\r\n    Loading\r\n  },\r\n  data() {\r\n    return {\r\n      isShow: false,\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    this.isShow = true\r\n  },\r\n\r\n  methods: {\r\n    onClosed() {\r\n      const {rootElementList} = window\r\n\r\n      console.log(this.$props._insId, rootElementList.map(r => r))\r\n      _.remove(rootElementList, (item) => item.props._insId === this.$props._insId)\r\n    },\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n  .el-dialog.yvan-loading{\r\n    background: none;\r\n    box-shadow: none;\r\n    &>.el-dialog__header{\r\n      padding:0\r\n    }\r\n    &>.el-dialog__body{\r\n      background: none;\r\n      display: flex;\r\n      flex-direction: column;\r\n      justify-items: center;\r\n      align-items: center;\r\n      .yvan-loading{\r\n        color: #fff;\r\n        text-align: center;\r\n        width:100px;\r\n        height:100px;\r\n        background: #000;\r\n        border-radius: 10px;\r\n        padding-top:10px;\r\n        box-shadow: 3px 3px 3px rgba(0,0,0,.1);\r\n        .is-loading{\r\n          font-size: 50px;\r\n        }\r\n        .yvan-loading-wait{\r\n          font-size: 16px;\r\n        }\r\n      }\r\n    }\r\n  }\r\n</style>","\"use strict\";\n\nconst MODE_NONE = 'modeNone';\nconst MODE_DEFAULT = 'modeDefault';\nconst MODE_MATCH = 'modeMatch';\n\n/**\n * Sorts the tokenizable substrings by their length DESC.\n *\n * @param {string} a\n * @param {string} b\n * @returns {number}\n */\nconst sortTokenizableSubstrings = (a, b) => {\n\n    if (a.length > b.length) {\n        return -1;\n    }\n    if (a.length < b.length) {\n        return 1;\n    }\n    return 0;\n};\n\nconst endsWith = (str, suffix) => {\n    return str.indexOf(suffix, str.length - suffix.length) !== -1;\n};\n\n/**\n * Create an instance of this class for each new string you wish to parse.\n */\nclass Tokenizer {\n\n    /**\n     *\n     * @param {TokenizeThis} factory\n     * @param {string} str\n     * @param {function} forEachToken\n     */\n    constructor(factory, str, forEachToken) {\n\n        /**\n         * Holds the processed configuration.\n         *\n         * @type {TokenizeThis}\n         */\n        this.factory = factory;\n\n        /**\n         * The string to tokenize.\n         *\n         * @type {string}\n         */\n        this.str = str;\n\n        /**\n         * The function to call for teach token.\n         *\n         * @type {Function}\n         */\n        this.forEachToken = forEachToken;\n\n        /**\n         * The previous character consumed.\n         *\n         * @type {string}\n         */\n        this.previousChr = '';\n\n        /**\n         * The current quote to match.\n         *\n         * @type {string}\n         */\n        this.toMatch = '';\n\n        /**\n         * The current token being created.\n         *\n         * @type {string}\n         */\n        this.currentToken = '';\n\n        /**\n         * Keeps track of the current \"mode\" of tokenization.\n         * The tokenization rules are different depending if you are tokenizing an explicit string (surrounded by quotes),\n         * versus a non-explicit string (not surrounded by quotes).\n         *\n         * @type {*[]}\n         */\n        this.modeStack = [MODE_NONE];\n\n        this.currentIndex = 0;\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    getCurrentMode() {\n\n        return this.modeStack[this.modeStack.length - 1];\n    }\n\n    /**\n     *\n     * @param {string} mode\n     * @returns {Number}\n     */\n    setCurrentMode(mode) {\n\n        return this.modeStack.push(mode);\n    }\n\n    /**\n     *\n     * @returns {string}\n     */\n    completeCurrentMode() {\n\n        const currentMode = this.getCurrentMode();\n\n        if (currentMode === MODE_DEFAULT) {\n            this.pushDefaultModeTokenizables();\n        }\n\n        /**\n         * Don't push out empty tokens, unless they were an explicit string, e.g. \"\"\n         */\n        if ((currentMode === MODE_MATCH && this.currentToken === '') || this.currentToken !== '') {\n            this.push(this.currentToken);\n        }\n        this.currentToken = '';\n\n        return this.modeStack.pop();\n    }\n\n    /**\n     *\n     * @param {*} token\n     */\n    push(token) {\n\n        let surroundedBy = '';\n\n        if (this.factory.convertLiterals && this.getCurrentMode() !== MODE_MATCH) {\n\n            /**\n             * Convert the string version of literals into their...literal..form.\n             */\n            switch(token.toLowerCase()) {\n                case 'null':\n                    token = null;\n                    break;\n                case 'true':\n                    token = true;\n                    break;\n                case 'false':\n                    token = false;\n                    break;\n                default:\n                    if (isFinite(token)) {\n                        token = Number(token);\n                    }\n                    break;\n            }\n        } else {\n\n            /**\n             * The purpose of also transmitting the surroundedBy quote is to inform whether or not the token was an explicit string,\n             * versus a non-explicit string, e.g. \"=\" vs. =\n             * @type {string}\n             */\n            surroundedBy = this.toMatch;\n        }\n\n        if (this.forEachToken) {\n            this.forEachToken(token, surroundedBy, this.currentIndex);\n        }\n    }\n\n    tokenize() {\n\n        let index = 0;\n\n        while(index < this.str.length) {\n\n            this.currentIndex = index;\n            this.consume(this.str.charAt(index++));\n        }\n\n        while (this.getCurrentMode() !== MODE_NONE) {\n\n            this.completeCurrentMode();\n        }\n    }\n\n    /**\n     *\n     * @param {string} chr\n     */\n    consume(chr) {\n\n        this[this.getCurrentMode()](chr);\n        this.previousChr = chr;\n    }\n\n    /**\n     *\n     * @param {string} chr\n     * @returns {*}\n     */\n    [MODE_NONE](chr) {\n\n        if (!this.factory.matchMap[chr]) {\n\n            this.setCurrentMode(MODE_DEFAULT);\n            return this.consume(chr);\n        }\n\n        this.setCurrentMode(MODE_MATCH);\n        this.toMatch = chr;\n    }\n\n    /**\n     *\n     * @param {string} chr\n     * @returns {string}\n     */\n    [MODE_DEFAULT](chr) {\n\n        /**\n         * If we encounter a delimiter, its time to push out the current token.\n         */\n        if (this.factory.delimiterMap[chr]) {\n\n            return this.completeCurrentMode();\n        }\n\n        /**\n         * If we encounter a quote, only push out the current token if there's a sub-token directly before it.\n         */\n        if (this.factory.matchMap[chr]) {\n\n            let tokenizeIndex = 0;\n\n            while (tokenizeIndex < this.factory.tokenizeList.length) {\n\n                if (endsWith(this.currentToken, this.factory.tokenizeList[tokenizeIndex++])) {\n                    this.completeCurrentMode();\n                    return this.consume(chr);\n                }\n            }\n        }\n\n        this.currentToken+=chr;\n\n        return this.currentToken;\n    }\n\n    /**\n     * This crazy function parses out potential tokenizable substrings out of the current token.\n     *\n     * @returns {*}\n     */\n    pushDefaultModeTokenizables() {\n\n        // TODO: refactor this to be more performant.\n\n        let tokenizeIndex = 0;\n        let lowestIndexOfTokenize = Infinity;\n        let toTokenize = null;\n\n        /**\n         * Iterate through the list of tokenizable substrings.\n         */\n        while(this.currentToken && tokenizeIndex < this.factory.tokenizeList.length) {\n\n            const tokenize = this.factory.tokenizeList[tokenizeIndex++];\n            const indexOfTokenize = this.currentToken.indexOf(tokenize);\n\n            /**\n             * Find the substring closest to the beginning of the current token.\n             */\n            if (indexOfTokenize !== -1 && indexOfTokenize < lowestIndexOfTokenize) {\n\n                lowestIndexOfTokenize = indexOfTokenize;\n                toTokenize = tokenize;\n            }\n        }\n\n        /**\n         * No substrings to tokenize.  You're done.\n         */\n        if (!toTokenize) {\n            return;\n        }\n\n        /**\n         * A substring was found, but not at the very beginning of the string, e.g. A=B, where \"=\" is the substring.\n         * This will push out \"A\" first.\n         */\n        if (lowestIndexOfTokenize > 0) {\n            this.push(this.currentToken.substring(0, lowestIndexOfTokenize));\n        }\n\n        /**\n         * Push out the substring, then modify the current token to be everything past that substring.\n         * Recursively call this function again until there are no more substrings to tokenize.\n         */\n        if (lowestIndexOfTokenize !== -1) {\n\n            this.push(toTokenize);\n            this.currentToken = this.currentToken.substring(lowestIndexOfTokenize + toTokenize.length);\n            return this.pushDefaultModeTokenizables();\n        }\n    }\n\n    /**\n     *\n     * @param {string} chr\n     * @returns {string}\n     */\n    [MODE_MATCH](chr) {\n\n        if (chr === this.toMatch) {\n\n            if (this.previousChr !== this.factory.escapeCharacter) {\n\n                return this.completeCurrentMode();\n            }\n            this.currentToken = this.currentToken.substring(0, this.currentToken.length - 1);\n        }\n\n        this.currentToken+=chr;\n\n        return this.currentToken;\n    }\n}\n\n/**\n * This is the main class.  It takes in the config, processes it, and creates tokenizer instances based on that config.\n */\nclass TokenizeThis {\n\n    /**\n     *\n     * @param {{shouldTokenize: string[], shouldMatch: string[], shouldDelimitBy: string[]}} [config]\n     */\n    constructor(config) {\n\n        if (!config) {\n            config = {};\n        }\n\n        /**\n         *\n         * @type {{shouldTokenize: string[], shouldMatch: string[], shouldDelimitBy: string[], convertLiterals: boolean, escapeCharacter: string}}\n         */\n        config = Object.assign({}, this.constructor.defaultConfig, config);\n\n        /**\n         *\n         * @type {boolean}\n         */\n        this.convertLiterals = config.convertLiterals;\n\n        /**\n         *\n         * @type {string}\n         */\n        this.escapeCharacter = config.escapeCharacter;\n\n        /**\n         * Holds the list of tokenizable substrings.\n         *\n         * @type {Array}\n         */\n        this.tokenizeList = [];\n\n        /**\n         * Holds an easy lookup map of tokenizable substrings.\n         *\n         * @type {{}}\n         */\n        this.tokenizeMap = {};\n\n        /**\n         * Holds the list of quotes to match explicit strings with.\n         *\n         * @type {Array}\n         */\n        this.matchList = [];\n\n        /**\n         * Holds an easy lookup map of quotes to match explicit strings with.\n         *\n         * @type {{}}\n         */\n        this.matchMap = {};\n\n        /**\n         * Holds the list of delimiters.\n         *\n         * @type {Array}\n         */\n        this.delimiterList = [];\n\n        /**\n         * Holds an easy lookup map of delimiters.\n         *\n         * @type {{}}\n         */\n        this.delimiterMap = {};\n\n        /**\n         * Sorts the tokenizable substrings based on their length,\n         * such that \"<=\" will get matched before \"<\" does.\n         */\n        config.shouldTokenize.sort(sortTokenizableSubstrings).forEach((token) => {\n\n            if (!this.tokenizeMap[token]) {\n                this.tokenizeList.push(token);\n                this.tokenizeMap[token] = token;\n            }\n        });\n\n        config.shouldMatch.forEach((match) => {\n\n            if (!this.matchMap[match]) {\n                this.matchList.push(match);\n                this.matchMap[match] = match;\n            }\n        });\n\n        config.shouldDelimitBy.forEach((delimiter) => {\n\n            if (!this.delimiterMap[delimiter]) {\n                this.delimiterList.push(delimiter);\n                this.delimiterMap[delimiter] = delimiter;\n            }\n        });\n    }\n\n    /**\n     * Creates a Tokenizer, then immediately calls \"tokenize\".\n     *\n     * @param {string} str\n     * @param {function} forEachToken\n     * @returns {*}\n     */\n    tokenize(str, forEachToken) {\n\n        const tokenizerInstance = new Tokenizer(this, str, forEachToken);\n        return tokenizerInstance.tokenize();\n    }\n\n    /**\n     *\n     * @returns {{shouldTokenize: string[], shouldMatch: string[], shouldDelimitBy: string[], convertLiterals: boolean, escapeCharacter: string}}\n     */\n    static get defaultConfig() {\n\n        return {\n            shouldTokenize: ['(', ')', ',', '*', '/', '%', '+', '-', '=', '!=', '!', '<', '>', '<=', '>=', '^'],\n            shouldMatch: ['\"', \"'\", '`'],\n            shouldDelimitBy: [' ', \"\\n\", \"\\r\", \"\\t\"],\n            convertLiterals: true,\n            escapeCharacter: \"\\\\\"\n        };\n    }\n}\n\n/**\n *\n * @type {TokenizeThis}\n */\nmodule.exports = TokenizeThis;\n","/**\r\n * 第三方类: https://github.com/shaunpersad/sql-where-parser#readme\r\n */\r\n//@ts-ignore\r\nimport TokenizeThis from 'tokenize-this';\r\n\r\n/**\r\n * To distinguish between the binary minus and unary.\r\n *\r\n * @type {Symbol}\r\n */\r\nexport const OPERATOR_UNARY_MINUS = Symbol('-');\r\n\r\n/**\r\n * Number of operands in a unary operation.\r\n *\r\n * @type {number}\r\n */\r\nexport const OPERATOR_TYPE_UNARY = 1;\r\n\r\n/**\r\n * Number of operands in a binary operation.\r\n *\r\n * @type {number}\r\n */\r\nexport const OPERATOR_TYPE_BINARY = 2;\r\n\r\n/**\r\n * Number of operands in a ternary operation.\r\n *\r\n * @type {number}\r\n */\r\nexport const OPERATOR_TYPE_TERNARY = 3;\r\n\r\n/**\r\n * Defining the use of the unary minus.\r\n *\r\n * @type {{operators: [{}], tokenizer: {shouldTokenize: string[], shouldMatch: string[], shouldDelimitBy: string[]}}}\r\n */\r\n//@ts-ignore\r\nexport const unaryMinusDefinition = {\r\n    //@ts-ignore\r\n    [OPERATOR_UNARY_MINUS]: OPERATOR_TYPE_UNARY\r\n};\r\n\r\n/**\r\n * A wrapper class around operators to distinguish them from regular tokens.\r\n */\r\nclass Operator {\r\n\r\n    constructor(value, type, precedence) {\r\n        this.value = value;\r\n        this.type = type;\r\n        this.precedence = precedence;\r\n    }\r\n\r\n    toJSON() {\r\n        return this.value;\r\n    }\r\n\r\n    toString() {\r\n        return `${this.value}`;\r\n    }\r\n}\r\n\r\n/**\r\n * The main parser class.\r\n */\r\nexport class SqlWhereParser {\r\n\r\n    /**\r\n     *\r\n     * @param {{operators: [{}], tokenizer: {shouldTokenize: string[], shouldMatch: string[], shouldDelimitBy: string[]}}} [config]\r\n     */\r\n    constructor(config) {\r\n\r\n        if (!config) {\r\n            //@ts-ignore\r\n            config = {};\r\n        }\r\n\r\n        /**\r\n         *\r\n         * @type {{operators: [{}], tokenizer: {shouldTokenize: string[], shouldMatch: string[], shouldDelimitBy: string[]}}}\r\n         */\r\n        //@ts-ignore\r\n        config = Object.assign({}, this.constructor.defaultConfig, config);\r\n\r\n        /**\r\n         *\r\n         * @type {TokenizeThis}\r\n         */\r\n        this.tokenizer = new TokenizeThis(config.tokenizer);\r\n\r\n        /**\r\n         *\r\n         * @type {{}}\r\n         */\r\n        this.operators = {};\r\n\r\n        /**\r\n         * Flattens the operator definitions into a single object,\r\n         * whose keys are the operators, and the values are the Operator class wrappers.\r\n         */\r\n        config.operators.forEach((operators, precedence) => {\r\n\r\n            //@ts-ignore\r\n            Object.keys(operators).concat(Object.getOwnPropertySymbols(operators)).forEach((operator) => {\r\n\r\n                this.operators[operator] = new Operator(operator, operators[operator], precedence);\r\n            });\r\n        });\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {string} sql\r\n     * @param {function} [evaluator]\r\n     * @returns {{}}\r\n     */\r\n    parse(sql, evaluator) {\r\n\r\n        const operatorStack = [];\r\n        const outputStream = [];\r\n        let lastOperator = undefined;\r\n        let tokenCount = 0;\r\n        let lastTokenWasOperatorOrLeftParenthesis = false;\r\n\r\n        if (!evaluator) {\r\n            evaluator = this.defaultEvaluator;\r\n        }\r\n\r\n        /**\r\n         * The following mess is an implementation of the Shunting-Yard Algorithm: http://wcipeg.com/wiki/Shunting_yard_algorithm\r\n         * See also: https://en.wikipedia.org/wiki/Shunting-yard_algorithm\r\n         */\r\n        this.tokenizer.tokenize(`(${sql})`, (token, surroundedBy) => {\r\n\r\n            tokenCount++;\r\n\r\n            /**\r\n             * Read a token.\r\n             */\r\n\r\n            if (typeof token === 'string' && !surroundedBy) {\r\n\r\n                let normalizedToken = token.toUpperCase();\r\n\r\n                /**\r\n                 * If the token is an operator, o1, then:\r\n                 */\r\n                if (this.operators[normalizedToken]) {\r\n\r\n                    /**\r\n                     * Hard-coded rule for between to ignore the next AND.\r\n                     */\r\n                    if (lastOperator === 'BETWEEN' && normalizedToken === 'AND') {\r\n                        lastOperator = 'AND';\r\n                        return;\r\n                    }\r\n\r\n                    /**\r\n                     * If the conditions are right for unary minus, convert it.\r\n                     */\r\n                    if (normalizedToken === '-' && (tokenCount === 1 || lastTokenWasOperatorOrLeftParenthesis)) {\r\n                        //@ts-ignore\r\n                        normalizedToken = OPERATOR_UNARY_MINUS;\r\n                    }\r\n\r\n                    /**\r\n                     * While there is an operator token o2 at the top of the operator stack,\r\n                     * and o1's precedence is less than or equal to that of o2,\r\n                     * pop o2 off the operator stack, onto the output queue:\r\n                     */\r\n                    while (operatorStack[operatorStack.length - 1] && operatorStack[operatorStack.length - 1] !== '(' && operatorStack[operatorStack.length - 1] !== '['\r\n                    && this.operatorPrecedenceFromValues(normalizedToken, operatorStack[operatorStack.length - 1])) {\r\n\r\n                        const operator = this.operators[operatorStack.pop()];\r\n                        const operands = [];\r\n                        let numOperands = operator.type;\r\n                        while (numOperands--) {\r\n                            operands.unshift(outputStream.pop());\r\n                        }\r\n                        outputStream.push(evaluator(operator.value, operands));\r\n                    }\r\n\r\n                    /**\r\n                     * At the end of iteration push o1 onto the operator stack.\r\n                     */\r\n                    operatorStack.push(normalizedToken);\r\n                    lastOperator = normalizedToken;\r\n\r\n                    lastTokenWasOperatorOrLeftParenthesis = true;\r\n\r\n                    /**\r\n                     * If the token is a left parenthesis (i.e. \"(\"), then push it onto the stack:\r\n                     */\r\n                } else if (token === '(' || token === '[') {\r\n\r\n                    operatorStack.push(token);\r\n                    lastTokenWasOperatorOrLeftParenthesis = true;\r\n\r\n                    /**\r\n                     * If the token is a right parenthesis (i.e. \")\"):\r\n                     */\r\n                } else if (token === ')' || token === ']') {\r\n\r\n                    /**\r\n                     * Until the token at the top of the stack is a left parenthesis,\r\n                     * pop operators off the stack onto the output queue.\r\n                     */\r\n                    while (operatorStack.length && operatorStack[operatorStack.length - 1] !== '(' && operatorStack[operatorStack.length - 1] !== '[') {\r\n\r\n                        const operator = this.operators[operatorStack.pop()];\r\n                        const operands = [];\r\n                        let numOperands = operator.type;\r\n                        while (numOperands--) {\r\n                            operands.unshift(outputStream.pop());\r\n                        }\r\n\r\n                        outputStream.push(evaluator(operator.value, operands));\r\n                    }\r\n                    if (!operatorStack.length) {\r\n                        throw new SyntaxError('Unmatched parenthesis.');\r\n                    }\r\n                    /**\r\n                     * Pop the left parenthesis from the stack, but not onto the output queue.\r\n                     */\r\n                    operatorStack.pop();\r\n                    lastTokenWasOperatorOrLeftParenthesis = false;\r\n\r\n                    /**\r\n                     * Push everything else to the output queue.\r\n                     */\r\n                } else {\r\n                    outputStream.push(token);\r\n                    lastTokenWasOperatorOrLeftParenthesis = false;\r\n                }\r\n\r\n                /**\r\n                 * Push explicit strings to the output queue.\r\n                 */\r\n            } else {\r\n                outputStream.push(token);\r\n                lastTokenWasOperatorOrLeftParenthesis = false;\r\n            }\r\n        });\r\n\r\n\r\n        /**\r\n         * While there are still operator tokens in the stack:\r\n         */\r\n        while (operatorStack.length) {\r\n\r\n            const operatorValue = operatorStack.pop();\r\n\r\n            /**\r\n             * If the operator token on the top of the stack is a parenthesis, then there are mismatched parentheses.\r\n             */\r\n            if (operatorValue === '(' || operatorValue === '[') {\r\n                throw new SyntaxError('Unmatched parenthesis.');\r\n            }\r\n            const operator = this.operators[operatorValue];\r\n            const operands = [];\r\n            let numOperands = operator.type;\r\n            while (numOperands--) {\r\n                operands.unshift(outputStream.pop());\r\n            }\r\n\r\n            /**\r\n             * Pop the operator onto the output queue.\r\n             */\r\n            outputStream.push(evaluator(operator.value, operands));\r\n        }\r\n\r\n        if (outputStream.length > 1) {\r\n            throw new SyntaxError('Could not reduce to a single expression.');\r\n        }\r\n\r\n        return outputStream[0];\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {string} sql\r\n     * @returns {[]}\r\n     */\r\n    toArray(sql) {\r\n\r\n        let expression = [];\r\n        let tokenCount = 0;\r\n        let lastToken = undefined;\r\n        const expressionParentheses = [];\r\n\r\n        this.tokenizer.tokenize(`(${sql})`, (token, surroundedBy) => {\r\n\r\n            tokenCount++;\r\n\r\n            switch (token) {\r\n                case '(':\r\n                case '[':\r\n                    expressionParentheses.push(expression.length);\r\n                    break;\r\n                case ')':\r\n                case ']':\r\n                    const precedenceParenthesisIndex = expressionParentheses.pop();\r\n\r\n                    let expressionTokens = expression.splice(precedenceParenthesisIndex, expression.length);\r\n\r\n                    while (expressionTokens && expressionTokens.constructor === Array && expressionTokens.length === 1) {\r\n                        expressionTokens = expressionTokens[0];\r\n                    }\r\n                    expression.push(expressionTokens);\r\n                    break;\r\n                case '':\r\n                    break;\r\n                case ',':\r\n                    break;\r\n                default:\r\n                    let operator = null;\r\n                    if (!surroundedBy) {\r\n                        operator = this.getOperator(token);\r\n                        if (token === '-' && (tokenCount === 1 || (lastToken === '(' || (lastToken && lastToken.constructor === Operator)))) {\r\n                            operator = this.getOperator(OPERATOR_UNARY_MINUS);\r\n                        }\r\n                    }\r\n                    expression.push(operator ? operator : token);\r\n                    break;\r\n            }\r\n            lastToken = token;\r\n        });\r\n\r\n        while (expression && expression.constructor === Array && expression.length === 1) {\r\n            expression = expression[0];\r\n        }\r\n\r\n        return expression;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {string|Symbol} operatorValue1\r\n     * @param {string|Symbol} operatorValue2\r\n     * @returns {boolean}\r\n     */\r\n    operatorPrecedenceFromValues(operatorValue1, operatorValue2) {\r\n        //@ts-ignore\r\n        return this.operators[operatorValue2].precedence <= this.operators[operatorValue1].precedence;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {string|Symbol} operatorValue\r\n     * @returns {*}\r\n     */\r\n    getOperator(operatorValue) {\r\n\r\n        if (typeof operatorValue === 'string') {\r\n            return this.operators[operatorValue.toUpperCase()];\r\n        }\r\n        if (typeof operatorValue === 'symbol') {\r\n            return this.operators[operatorValue];\r\n        }\r\n        return null;\r\n    }\r\n\r\n\r\n    /**\r\n     *\r\n     * @param {string|Symbol} operatorValue\r\n     * @param {[]} operands\r\n     * @returns {*}\r\n     */\r\n    defaultEvaluator(operatorValue, operands) {\r\n\r\n        /**\r\n         * Convert back to regular minus, now that we have the proper number of operands.\r\n         */\r\n        if (operatorValue === OPERATOR_UNARY_MINUS) {\r\n            operatorValue = '-';\r\n        }\r\n        /**\r\n         * This is a trick to avoid the problem of inconsistent comma usage in SQL.\r\n         */\r\n        if (operatorValue === ',') {\r\n            //@ts-ignore\r\n            return [].concat(operands[0], operands[1]);\r\n        }\r\n\r\n        return {\r\n            //@ts-ignore\r\n            [operatorValue]: operands\r\n        };\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {{operators: [{}], tokenizer: {shouldTokenize: string[], shouldMatch: string[], shouldDelimitBy: string[]}}}\r\n     */\r\n    static get defaultConfig() {\r\n\r\n        return {\r\n            //@ts-ignore\r\n            operators: [ // TODO: add more operator definitions\r\n                {\r\n                    '!': OPERATOR_TYPE_UNARY\r\n                },\r\n                unaryMinusDefinition,\r\n                {\r\n                    '^': OPERATOR_TYPE_BINARY\r\n                },\r\n                {\r\n                    '*': OPERATOR_TYPE_BINARY,\r\n                    '/': OPERATOR_TYPE_BINARY,\r\n                    '%': OPERATOR_TYPE_BINARY\r\n                },\r\n                {\r\n                    '+': OPERATOR_TYPE_BINARY,\r\n                    '-': OPERATOR_TYPE_BINARY\r\n                },\r\n                {\r\n                    '=': OPERATOR_TYPE_BINARY,\r\n                    '<': OPERATOR_TYPE_BINARY,\r\n                    '>': OPERATOR_TYPE_BINARY,\r\n                    '<=': OPERATOR_TYPE_BINARY,\r\n                    '>=': OPERATOR_TYPE_BINARY,\r\n                    '!=': OPERATOR_TYPE_BINARY\r\n                },\r\n                {\r\n                    ',': OPERATOR_TYPE_BINARY // We treat commas as an operator, to aid in turning arbitrary numbers of comma-separated values into arrays.\r\n                },\r\n                {\r\n                    'NOT': OPERATOR_TYPE_UNARY\r\n                },\r\n                {\r\n                    'BETWEEN': OPERATOR_TYPE_TERNARY,\r\n                    'IN': OPERATOR_TYPE_BINARY,\r\n                    'IS': OPERATOR_TYPE_BINARY,\r\n                    'LIKE': OPERATOR_TYPE_BINARY\r\n                },\r\n                {\r\n                    'AND': OPERATOR_TYPE_BINARY\r\n                },\r\n                {\r\n                    'OR': OPERATOR_TYPE_BINARY\r\n                }\r\n            ],\r\n            tokenizer: {\r\n                shouldTokenize: ['(', ')', ',', '*', '/', '%', '+', '-', '=', '!=', '!', '<', '>', '<=', '>=', '^'],\r\n                shouldMatch: ['\"', \"'\", '`'],\r\n                shouldDelimitBy: [' ', \"\\n\", \"\\r\", \"\\t\"]\r\n            }\r\n        };\r\n    }\r\n\r\n    static get Operator() {\r\n        return Operator;\r\n    }\r\n\r\n    static get OPERATOR_UNARY_MINUS() {\r\n        return OPERATOR_UNARY_MINUS;\r\n    }\r\n}","import _ from 'lodash'\r\n\r\nexport function toNumber(value: any, defaultValue: number = undefined): number {\r\n    if (typeof value === 'number') {\r\n        return value\r\n    }\r\n    if (typeof value === 'string') {\r\n        let v: any = value\r\n        if (_.endsWith(value, 'L') || _.endsWith(value, 'l')) {\r\n            v = value.substring(0, value.length - 1)\r\n        }\r\n        v = parseInt(value)\r\n        if (isNaN(v)) {\r\n            return defaultValue\r\n        }\r\n        return v\r\n    }\r\n    return defaultValue\r\n}\r\n\r\n/**\r\n * 将任意类型转换为 Long 类型形式, Long 类型在前端是字符串的形式，否则会越位\r\n */\r\nexport function asLong(value: any, defaultValue: String = '0'): String {\r\n    if (typeof value === 'number') {\r\n        return value.toString()\r\n    }\r\n    if (typeof value === 'string') {\r\n        if (_.endsWith(value, 'L') || _.endsWith(value, 'l')) {\r\n            value = value.substring(0, value.length - 1)\r\n        }\r\n\r\n        // 提取 value 字符串中所有的数字\r\n        const result = value.replace(/[^0-9]/ig, \"\")\r\n        if (!result) {\r\n            return defaultValue\r\n        }\r\n        if (result === 'N/A' || result === 'NaN') {\r\n            return defaultValue.toString()\r\n        }\r\n        return result\r\n    }\r\n    return defaultValue\r\n}\r\n\r\n/**\r\n * 将任意类型转换为 String 类型形式\r\n */\r\nexport function asString(value: any): string {\r\n    if (typeof value === 'undefined') {\r\n        return ''\r\n    }\r\n    if (value === 'null') {\r\n        return ''\r\n    }\r\n    if (typeof value === 'string') {\r\n        return value\r\n    }\r\n    if (typeof value === 'number') {\r\n        return value.toString()\r\n    }\r\n    if (value instanceof Date) {\r\n        // 转换为 yyyy-MM-dd 格式\r\n        const year = value.getFullYear()\r\n        const month = value.getMonth() + 1 > 9 ? value.getMonth() + 1 : '0' + (value.getMonth() + 1)\r\n        const day = value.getDate() > 9 ? value.getDate() : '0' + value.getDate()\r\n        return `${year}-${month}-${day}`\r\n    }\r\n    return value.toString()\r\n}\r\n\r\n/**\r\n * 将任意类型转换为 Decimal 类型形式\r\n */\r\nexport function asDecimal(value: any, defaultValue: number = undefined): number {\r\n    return toNumber(value, defaultValue)\r\n}\r\n\r\n/**\r\n * 将任意类型转换为 Integer 类型形式\r\n */\r\nexport function asInteger(value: any, defaultValue: number = undefined): number {\r\n    return toNumber(value, defaultValue)\r\n}","import $ from \"jquery\";\r\nimport _ from \"lodash\"\r\nimport {QuestionFilled} from '@element-plus/icons-vue'\r\nimport {defineComponent, h, markRaw, nextTick, toRaw, unref} from \"vue\"\r\nimport {ElDialog, ElMessageBox, ElTag} from 'element-plus'\r\nimport JSON5 from 'json5'\r\nimport {getLayoutOutlineDefine, getRuntimeCmp} from \"../components/design/yv-designer-desc\";\r\n// @ts-ignore\r\nimport ImportExcelDialog from \"./ImportExcelDialog.vue\"\r\n// @ts-ignore\r\nimport LoadingDialog from \"../components/LoadingDialog.vue\"\r\nimport {renderIcon} from \"../utils\"\r\nimport localforage from 'localforage'\r\nimport {OPERATOR_TYPE_BINARY, SqlWhereParser} from \"../SqlWhereParser\";\r\nimport * as Conv from \"../Conv\"\r\n\r\n//@ts-ignore\r\nif (typeof String.prototype.replaceAll === 'undefined') {\r\n    //@ts-ignore\r\n    String.prototype.replaceAll = function (targetStr, newStr) {\r\n        let sourceStr = this.valueOf();\r\n        while (sourceStr.indexOf(targetStr) !== -1) {\r\n            sourceStr = sourceStr.replace(targetStr, newStr);\r\n        }\r\n        return sourceStr;\r\n    };\r\n}\r\n\r\nexport interface RestApiResult<T> {\r\n    success: string,\r\n    msg: string,\r\n    data: T\r\n}\r\n\r\nlocalforage.getItem('DatabaseMeta').then(cacheData => {\r\n    if (cacheData) {\r\n        // @ts-ignore\r\n        const res = JSON.parse(cacheData)\r\n        window['database_meta'] = res\r\n    }\r\n})\r\n\r\nexport default class System {\r\n    _ = _\r\n    toRaw = toRaw\r\n    unref = unref\r\n    nextTick = nextTick\r\n    defer = _.defer\r\n    extend = _.extend\r\n    JSON5 = JSON5\r\n    globalLoadingButtonInstance = null\r\n    globalLoadingHandle = null\r\n    renderIcon = renderIcon\r\n    asLong = Conv.asLong\r\n    asNumber = Conv.toNumber\r\n    asString = Conv.asString\r\n    asDecimal = Conv.asDecimal\r\n    asInteger = Conv.asInteger\r\n\r\n    private studioRequest: any\r\n\r\n    setStudioRequest(request) {\r\n        this.studioRequest = request\r\n    }\r\n\r\n    /**\r\n     * 查询框确认数据\r\n     */\r\n    searchSaveData(data: any) {\r\n\r\n    }\r\n\r\n    /**\r\n     * 深度遍历 vjson, 并调用 callback\r\n     * @param vjson 要遍历的 vjson(如果 vjson 带 layout 属性，则按照布局遍历 layout 所有子元素)\r\n     * @param cb 回调函数, 参数 callback(cmpVjson, specCode). 如果返回false, 则停止遍历\r\n     *   cmpVjson: 当前遍历到的组件 vjson,\r\n     *   specCode: 当前遍历到的 vjson 的特征串, 这个特征串可以用于界面规则的制定，只要界面没有发生重大变化，每次遍历到的特征串都是一样的\r\n     *             specCode取值优先级如下:\r\n     *               1. 第一优先级，如果组件有 uiBlock 属性，则取 uiBlock 属性值\r\n     *               2. 第二优先级，如果组件有 reference 属性，则取 reference 属性值\r\n     *               3. 如果什么名字都没有，取 'toolbar:toolbar[1] / items:form[0]'\r\n     *   返回值: 如果返回 false, 则停止遍历\r\n     */\r\n    vjsonDepthTrave(vjson: any, cb: (cmpVjson: any, specCode: string) => boolean | undefined): void {\r\n        if (typeof vjson !== 'object' || !vjson) {\r\n            return\r\n        }\r\n        if (typeof vjson.layout === 'string') {\r\n            const define = getLayoutOutlineDefine(vjson)\r\n            if (!define) {\r\n                console.error('没有找到布局定义', vjson.layout)\r\n            } else {\r\n                _.forOwn(define, (define, propName) => {\r\n                    if (define.isList === true) {\r\n                        _.forEach(vjson[propName], (item, idx) => {\r\n                            _vjsonDepthTrave(item, cb, [`${propName}[${idx}]`])\r\n                        })\r\n\r\n                    } else {\r\n                        _vjsonDepthTrave(vjson[propName], cb, [propName])\r\n                    }\r\n                })\r\n            }\r\n        } else {\r\n            _vjsonDepthTrave(vjson, cb, [])\r\n        }\r\n    }\r\n\r\n    getUser() {\r\n        /**\r\n         * avatar email expiredTime loginName nickname telephone uid\r\n         */\r\n        return window['$user']\r\n    }\r\n\r\n    /**\r\n     * 分析 VJson 界面中所有带 blocks 属性的组件，并填充 uiInfo 数组，用于界面规则的制定\r\n     * @param vjson 要分析的 vjson\r\n     */\r\n    vjsonDeepAnalyze(vjson) {\r\n        const uiInfos = []\r\n        const uiBlocks = new Set()\r\n        _deepAnalysis(vjson, uiBlocks, uiInfos)\r\n        return uiInfos\r\n    }\r\n\r\n\r\n    /**\r\n     * 根据自定义UI规则的设置，填充 vjson 中对应 uiBlock.uiKey 的子元素内容，当匹配到UI规则有描述时，调用 callback 回调\r\n     * @param vjson 要分析的 vjson\r\n     * @param customSetting 客户自定义UI规则的设置\r\n     * @param callback 回调函数, 参数 callback(parentJson, cmpJson, uiBlock, uiKey, setting, idx)\r\n     * @param extCallback 扩展字段回调函数, 参数 callback(parentJson, uiBlock, extSettingList)\r\n     * @param lotCallback 动态批属性回调函数, 参数 callback(parentJson, uiBlock)\r\n     */\r\n    vjsonDeepFill(vjson, customSetting, callback, extCallback, lotCallback) {\r\n        _deepFill(vjson, customSetting, callback, extCallback, lotCallback)\r\n    }\r\n\r\n    /**\r\n     * 解析 SQL\r\n     * a.id=1  and  a.code like 'a' and a.vid in (1,2,3) and ( a.type='1' or a.type='2' or a.type in ('3','4','5') )\r\n     * @param sql\r\n     * @return 解析结果\r\n     * [\r\n     *   'a.id',\r\n     *   '=',\r\n     *   1,\r\n     *   'AND',\r\n     *   'a.code',\r\n     *   'LIKE',\r\n     *   'a',\r\n     *   'AND',\r\n     *   'a.vid',\r\n     *   'IN',\r\n     *   [\r\n     *     1,\r\n     *     2,\r\n     *     3,\r\n     *   ],\r\n     *   'AND',\r\n     *   [\r\n     *     'a.type',\r\n     *     '=',\r\n     *     '1',\r\n     *     'OR',\r\n     *     'a.type',\r\n     *     '=',\r\n     *     '2',\r\n     *     'OR',\r\n     *     'a.type',\r\n     *     'IN',\r\n     *     [\r\n     *       '3',\r\n     *       '4',\r\n     *       '5',\r\n     *     ],\r\n     *   ],\r\n     * ]\r\n     */\r\n    parseSql(sql) {\r\n        return this.sqlParser.toArray(sql)\r\n    }\r\n\r\n    /**\r\n     * 解析 Groovy\r\n     * a.vid in [1,2,3] && a.vid !in [4,5] &&  a.code.contains('998') && a.f1 >10 && a.f2<=20 && ( a.type=='1' || a.type=='2' || a.type in ['3','4','5'] )\r\n     * @param sql\r\n     * @return 解析结果\r\n     * [\r\n     *   'a.vid',\r\n     *   'IN',\r\n     *   [\r\n     *     1,\r\n     *     2,\r\n     *     3,\r\n     *   ],\r\n     *   '&&',\r\n     *   'a.vid',\r\n     *   '!IN',\r\n     *   [\r\n     *     4,\r\n     *     5,\r\n     *   ],\r\n     *   '&&',\r\n     *   'a.code',\r\n     *   '.contains',\r\n     *   '998',\r\n     *   '&&',\r\n     *   'a.f1',\r\n     *   '>',\r\n     *   10,\r\n     *   '&&',\r\n     *   'a.f2',\r\n     *   '<=',\r\n     *   20,\r\n     *   '&&',\r\n     *   [\r\n     *     'a.type',\r\n     *     '==',\r\n     *     '1',\r\n     *     '||',\r\n     *     'a.type',\r\n     *     '==',\r\n     *     '2',\r\n     *     '||',\r\n     *     'a.type',\r\n     *     'IN',\r\n     *     [\r\n     *       '3',\r\n     *       '4',\r\n     *       '5',\r\n     *     ],\r\n     *   ],\r\n     * ]\r\n     */\r\n    parseProgram(sql) {\r\n        return this.programParser.toArray(sql)\r\n    }\r\n\r\n    syncTime() {\r\n        try {\r\n            $.get(\"/time\", {t1: Number(new Date())}, function (data) {\r\n                data = data.data;\r\n                var t1 = Number(data.t1);    // 客户端时间(请求前)\r\n                var t2 = Number(data.t2);    // 数据库时间\r\n                var t3 = Number(data.t3);    // 数据库时间 + 查询时间\r\n                var t4 = Number(new Date()); // 客户端时间(请求后)\r\n                window[\"time_offset\"] = ((t2 - t1) + (t3 - t4)) / 2;\r\n                console.log(\"time_offset --> \", window[\"time_offset\"]);\r\n            });\r\n        } catch (e) {\r\n            console.log(\"时间同步失败\", e);\r\n        }\r\n    }\r\n\r\n    getNowDate() {\r\n        const date = new Date()\r\n        const Y = date.getFullYear()\r\n        const M = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1\r\n        const D = date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()\r\n        return `${Y}-${M}-${D}`\r\n    }\r\n\r\n    formatTimestamp(timestamp) {\r\n        const date = new Date(timestamp)\r\n        const Y = date.getFullYear()\r\n        const M = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1\r\n        const D = date.getDate()\r\n        return `${Y}-${M}-${D}`\r\n    }\r\n\r\n    /**\r\n     * 调用后端服务\r\n     * @param url API地址\r\n     * @param body API参数\r\n     */\r\n    invokeServer(url: string, body?: any): Promise<RestApiResult<any>> {\r\n        return this.studioRequest.invoke(`/wms_api/api/${url}`, [body]) as Promise<RestApiResult<any>>\r\n    }\r\n\r\n    public invoke(url: string, body: any, config?: any): Promise<any> {\r\n        return this.studioRequest.invoke(`/wms_api/api/${url}`, [body], config)\r\n    }\r\n\r\n    /**\r\n     * 调用后端服务\r\n     * @param url API地址\r\n     * @param body API参数\r\n     */\r\n    invokeStudio(url: string, body?: any): Promise<RestApiResult<any>> {\r\n        if (url === 'FileManager@getMateData') {\r\n            // 将数据缓存进 localstore\r\n            return new Promise<RestApiResult<any>>((resolve, reject) => {\r\n                const cacheData = window['database_meta']\r\n                if (cacheData) {\r\n                    resolve(cacheData)\r\n\r\n                } else {\r\n                    this.studioRequest.invoke(`/wms_api/api/com/yvan/studio/${url}`, [body]).then(res => {\r\n                        if (res[0]) {\r\n                            localforage.setItem('DatabaseMeta', JSON.stringify(res)).finally(() => {\r\n                            })\r\n                        }\r\n                        window['database_meta'] = res\r\n                        resolve(res)\r\n                    }).catch((e) => {\r\n                        reject(e)\r\n                    })\r\n                }\r\n            })\r\n        }\r\n        return this.studioRequest.invoke(`/wms_api/api/com/yvan/studio/${url}`, [body]) as Promise<RestApiResult<any>>\r\n    }\r\n\r\n    /**\r\n     * 弹出用户必须点击确认的错误信息\r\n     */\r\n    showErrorDialog(msgOrTitle: string, msg?: string) {\r\n        if (!msg) {\r\n            console.error(msgOrTitle)\r\n            ElMessageBox.alert(\r\n                msgOrTitle,\r\n                '错误',\r\n                {\r\n                    confirmButtonText: '关闭',\r\n                    type: 'error',\r\n                    draggable: true,\r\n                }\r\n            ).finally()\r\n        } else {\r\n            console.error(msg)\r\n            ElMessageBox.alert(\r\n                msg,\r\n                msgOrTitle,\r\n                {\r\n                    confirmButtonText: '关闭',\r\n                    type: 'error',\r\n                    draggable: true,\r\n                }\r\n            ).finally()\r\n        }\r\n    }\r\n\r\n    /**\r\n     * 弹出用户必须确认的提示信息\r\n     */\r\n    showInfoDialog(content: string) {\r\n        this.alert(content)\r\n    }\r\n\r\n    /**\r\n     * 全局 “正在载入...” 对话框\r\n     */\r\n    showLoading() {\r\n        if (this.globalLoadingHandle) {\r\n            // 存在 \"正在载入...\" 对话框\r\n            return\r\n        }\r\n\r\n        const _insId = _.uniqueId('_dlg')\r\n\r\n        // @ts-ignore\r\n        const {rootElementList} = window\r\n        rootElementList.push({\r\n            cmp: markRaw(LoadingDialog),\r\n            props: {\r\n                _insId: _insId,\r\n            }\r\n        })\r\n\r\n        this.globalLoadingHandle = () => {\r\n            _.remove(rootElementList, (item: any) => item.props._insId === _insId)\r\n        }\r\n    }\r\n\r\n    /**\r\n     * 关闭 “正在载入...” 对话框\r\n     */\r\n    clearLoading() {\r\n        if (typeof this.globalLoadingHandle === 'function') {\r\n            this.globalLoadingHandle()\r\n        }\r\n        this.globalLoadingHandle = null\r\n    }\r\n\r\n    /**\r\n     * 在触发的按钮上显示 loading 状态\r\n     * @return 关闭 loading 状态的函数\r\n     */\r\n    showLoadingIfButton(): () => void {\r\n        if (!this.globalLoadingButtonInstance) {\r\n            return\r\n        }\r\n\r\n        this.globalLoadingButtonInstance.loading = true\r\n\r\n        const handle = this.globalLoadingButtonInstance\r\n\r\n        return () => {\r\n            handle.loading = false\r\n        }\r\n    }\r\n\r\n    pushCmpWithId(cmp, props) {\r\n        // @ts-ignore\r\n        const {rootElementList} = window\r\n        rootElementList.push({\r\n            cmp: markRaw(cmp),\r\n            props: {\r\n                _insId: _.uniqueId(),\r\n                ...props\r\n            }\r\n        })\r\n    }\r\n\r\n    removeCmp(cmp) {\r\n        // @ts-ignore\r\n        const {rootElementList} = window\r\n        _.remove(rootElementList, (item: any) => item.props._insId === cmp.$props._insId)\r\n    }\r\n\r\n    /**\r\n     * 根据路径，异步打开某个组件，并拿到对话框的返回值\r\n     * 原生 el-dialog 模式\r\n     */\r\n    showDialog(bizCmp, props: any = {}): Promise<any> {\r\n        let title = props.title\r\n        delete props.title\r\n        let width = props.width\r\n        delete props.width\r\n\r\n        return new Promise<any>((resolve, reject) => {\r\n            const _insId = _.uniqueId('_dlg')\r\n\r\n            const dialogCmp = defineComponent({\r\n                data() {\r\n                    return {\r\n                        title: title ?? '对话框',\r\n                        isShow: true,\r\n                        returnOk: false,\r\n                        footerCmp: markRaw(() => undefined),\r\n                        footerProp: {},\r\n                        specHeight: 'auto',\r\n                    }\r\n                },\r\n                render() {\r\n                    const dialogInstance = this\r\n\r\n                    return h(ElDialog,\r\n                        {\r\n                            modelValue: this.isShow,\r\n                            appendToBody: true,\r\n                            draggable: true,\r\n                            modal: true,\r\n                            destroyOnClose: true,\r\n                            closeOnPressEscape: true,\r\n                            title: this.title,\r\n                            style: {\r\n                                width: width || '90%',\r\n                            },\r\n                            onClosed() {\r\n                                if (!dialogInstance.returnOk) {\r\n                                    // 只要不是正常通过 returnOk 关闭的，都是返回 Promise.reject\r\n                                    reject()\r\n                                }\r\n                                // @ts-ignore\r\n                                const {rootElementList} = window\r\n                                _.remove(rootElementList, (item: any) => item.props._insId === _insId)\r\n                            },\r\n                            onVnodeMounted(dialogInstance) {\r\n                                // console.log('dialog', dialogInstance.el)\r\n                            }\r\n                        },\r\n                        {\r\n                            default(defaultProps) {\r\n                                const targetProps = _.cloneDeep(props)\r\n\r\n                                // if (specHeight) {\r\n                                //     if (!targetProps.style) {\r\n                                //         targetProps.style = {}\r\n                                //     }\r\n                                //     targetProps.style.height = specHeight\r\n                                // }\r\n                                return h(bizCmp, {\r\n                                        style: {\r\n                                            height: dialogInstance.specHeight\r\n                                        },\r\n                                        ...targetProps,\r\n                                        _input: targetProps,\r\n                                        onVnodeBeforeMount(bizInstance) {\r\n\r\n                                            // 提取高度\r\n                                            if (bizInstance.component.data.vjson?.height) {\r\n                                                const specHeight = bizInstance.component.data.vjson.height\r\n                                                // if (!targetProps.style) targetProps.style = {}\r\n                                                // targetProps.style.height = specHeight ?? \"500px\"\r\n                                                // dialogInstance.specHeight = specHeight ?? \"500px\"\r\n                                                dialogInstance.specHeight = specHeight ?? \"500px\"\r\n                                            }\r\n\r\n                                            // 提取标题\r\n                                            if (bizInstance.component.data.vjson?.title) {\r\n                                                bizInstance.component.ctx.setTitle(bizInstance.component.data.vjson.title)\r\n                                            }\r\n\r\n                                            // 提取页脚组件\r\n                                            const vjson = bizInstance.component.data.vjson\r\n                                            const footerReference = vjson?.footerReference\r\n                                            let footerDefine\r\n\r\n                                            if (footerReference) {\r\n                                                const defineList = getLayoutOutlineDefine(vjson)\r\n                                                _.forEach(defineList, (define, propName) => {\r\n                                                    if (define.isList) {\r\n                                                        _.forEach(vjson [propName], item => {\r\n                                                            if (item.reference === footerReference) {\r\n                                                                footerDefine = _.cloneDeep(item)\r\n                                                                /**\r\n                                                                 * 删除当前位置的 vjson 元素\r\n                                                                 * 将 footerDefine 在后续 slot.footer 处渲染\r\n                                                                 */\r\n                                                                // item.hidden = true\r\n                                                                _.remove(vjson[propName], i => i === item)\r\n\r\n                                                                _.defer(() => {\r\n                                                                    const cmp = getRuntimeCmp(footerDefine)\r\n                                                                    footerDefine.hidden = false\r\n\r\n                                                                    dialogInstance.footerCmp = cmp\r\n                                                                    dialogInstance.footerProp = {\r\n                                                                        vjson: footerDefine,\r\n                                                                        vcxt: bizInstance.component.data.vcxt\r\n                                                                    }\r\n                                                                })\r\n                                                                return false\r\n                                                            }\r\n                                                        })\r\n                                                    }\r\n                                                })\r\n\r\n                                                if (!footerDefine) {\r\n                                                    system.showErrorDialog(\"can't found footerDefine:\" + footerReference)\r\n                                                }\r\n                                            }\r\n                                        },\r\n                                        onVnodeMounted(bizInstance) {\r\n                                            /** 一下代码用来调试\r\n                                             console.log(bizInstance)\r\n                                             window['bizCmp'] = bizInstance\r\n                                             debugger\r\n                                             console.log('vue', bizInstance.$el)\r\n                                             */\r\n                                        },\r\n                                        onSetTitle(title) {\r\n                                            dialogInstance.title = title\r\n                                        },\r\n                                        onOk(result) {\r\n                                            // 通过收到业务组件 bizMixin.js 的 OK 事件，引起窗口关闭\r\n                                            dialogInstance.isShow = false\r\n                                            dialogInstance.returnOk = true\r\n                                            dialogInstance.$nextTick(() => {\r\n                                                resolve(result)\r\n                                            })\r\n                                        },\r\n                                        onCloseDialog() {\r\n                                            // 收到业务组件 bizMixin.js 的关闭请求\r\n                                            dialogInstance.isShow = false\r\n                                        },\r\n                                    }\r\n                                )\r\n                            },\r\n                            footer(props) {\r\n                                return h(dialogInstance.footerCmp, dialogInstance.footerProp)\r\n                            },\r\n                            header({close, titleClass, key, titleId}) {\r\n\r\n                                const headerTags = [\r\n                                    h('span', {}, dialogInstance.title ?? ''),\r\n                                ]\r\n                                if (window['is_preview_mode']) {\r\n\r\n                                } else {\r\n                                    headerTags.push(\r\n                                        h(ElTag, {\r\n                                            type: \"success\",\r\n                                            onClick() {\r\n                                                // close()\r\n                                                const f = bizCmp.__file\r\n                                                if (f) {\r\n                                                    system.openStudioModule(f.substring(f.indexOf('/wms-ui-pc/src/pages/') + 10))\r\n                                                }\r\n                                            }\r\n                                        }, '进入设计'),\r\n                                    )\r\n                                }\r\n\r\n                                return h('div', {\r\n                                    class: titleClass + ' my-title',\r\n                                }, headerTags)\r\n                            }\r\n                        }\r\n                    )\r\n                }\r\n            })\r\n\r\n            // @ts-ignore\r\n            const {rootElementList} = window\r\n            rootElementList.push({\r\n                cmp: markRaw(dialogCmp),\r\n                props: {\r\n                    _insId: _insId,\r\n                }\r\n            })\r\n        })\r\n    }\r\n\r\n    importExcelDialog(config: {\r\n        fileName?: string,\r\n        sheetName?: string,\r\n        columns: Array<{\r\n            header: string;\r\n            dataIndex: string;\r\n        }>;\r\n    }): Promise<any> {\r\n        return new Promise<any>((resolve, reject) => {\r\n            const _insId = _.uniqueId('_dlg')\r\n            const dialogCmp = defineComponent({\r\n                render() {\r\n                    return h(ImportExcelDialog,\r\n                        {\r\n                            config: config,\r\n                            resolve,\r\n                            reject,\r\n                            _insId: _insId\r\n                        },\r\n                    )\r\n                }\r\n            })\r\n            // @ts-ignore\r\n            const {rootElementList} = window\r\n            // $(\"#yv-hide-container\").css(\"display\", \"unset\");\r\n            rootElementList.push({\r\n                cmp: markRaw(dialogCmp),\r\n                props: {\r\n                    _insId: _insId\r\n                }\r\n            })\r\n        });\r\n    }\r\n\r\n    /**\r\n     * 信息提示内容，强提示，必须用户点击确认\r\n     * @param msg 消息内容\r\n     */\r\n    alert(msg) {\r\n        console.info(msg)\r\n        ElMessageBox.alert(msg, '提示', {\r\n            confirmButtonText: '关闭',\r\n            draggable: true,\r\n            // 1110000\r\n        })\r\n    }\r\n\r\n    /**\r\n     * 轻量级提示信息\r\n     * @param message 消息内容\r\n     */\r\n    msg(message: string) {\r\n        // ElMessage(cc)\r\n        console.log(message)\r\n\r\n        const $body = $('body')\r\n\r\n        $body.find('[xtype=tooltip]').remove()\r\n        const $w = $(\r\n            '<div xtype=\"tooltip\" class=\"yvan-msg yvan-anim yvan-anim-00\">' +\r\n            '  <div class=\"yvan-msg-content\">' +\r\n            _.escape(message) +\r\n            '</div></div>'\r\n        )\r\n        $body.append($w)\r\n\r\n        const iframeWidth = $w.parent().width() as number\r\n        const iframeHeight = $w.parent().height() as number\r\n\r\n        const windowWidth = $w.width() as number\r\n        const windowHeight = $w.height() as number\r\n\r\n        let setWidth = (iframeWidth - windowWidth) / 2\r\n        let setHeight = (iframeHeight - windowHeight) / 2\r\n        if (iframeHeight < windowHeight || setHeight < 0) {\r\n            setHeight = 0\r\n        }\r\n        if (iframeWidth < windowWidth || setWidth < 0) {\r\n            setWidth = 0\r\n        }\r\n        $w.css({left: setWidth, top: setHeight})\r\n        setTimeout(() => {\r\n            $w.remove()\r\n        }, 3000)\r\n    }\r\n\r\n    /**\r\n     * 弹出确认对话框\r\n     * @param msg 消息内容\r\n     */\r\n    confirm(msg): Promise<void> {\r\n        return new Promise((resolve, reject) => {\r\n            ElMessageBox.confirm(msg, '再次确认',\r\n                {\r\n                    confirmButtonText: '确定',\r\n                    cancelButtonText: '取消',\r\n                    icon: markRaw(QuestionFilled),\r\n                }\r\n            ).then(() => {\r\n                resolve()\r\n\r\n            }).catch(() => {\r\n                reject()\r\n            })\r\n        })\r\n    }\r\n\r\n    /**\r\n     * 判断是否为空\r\n     * @param value\r\n     */\r\n    isEmpty(value?: any): boolean {\r\n        if (typeof value === 'undefined' || value === null) {\r\n            return true;\r\n        }\r\n        if (typeof value === 'number' && isNaN(value)) {\r\n            return true;\r\n        }\r\n        if (value === 'N/A') {\r\n            return true;\r\n        }\r\n        return (\"\" + value).trim().length <= 0;\r\n    }\r\n\r\n    /**\r\n     * 替换内部结构中，所有 N/A\r\n     */\r\n    replaceNA(obj) {\r\n        if (obj === 'N/A') {\r\n            return ''\r\n        }\r\n\r\n        if (_.isArray(obj)) {\r\n            _.forEach(obj, (value, idx) => {\r\n                if (value === 'N/A') {\r\n                    obj[idx] = ''\r\n                } else {\r\n                    if (typeof value === \"string\" && /^-?\\d*\\.\\d+$/.test(value)) {\r\n                        let count = 0;\r\n                        for (let i = value.length - 1; i > 0; i--) {\r\n                            if (value[i] === \"0\") {\r\n                                count++\r\n                            } else if (value[i] === \".\") {\r\n                                count++\r\n                                break;\r\n                            } else {\r\n                                break;\r\n                            }\r\n                        }\r\n                        obj[idx] = value.substr(0, value.length - count);\r\n                    } else {\r\n                        this.replaceNA(value)\r\n                    }\r\n                }\r\n            })\r\n        } else if (_.isPlainObject(obj)) {\r\n            _.forOwn(obj, (value, key) => {\r\n                if (value === 'N/A') {\r\n                    obj[key] = ''\r\n                } else {\r\n                    if (typeof value === \"string\" && /^-?\\d*\\.\\d+$/.test(value)) {\r\n\r\n                        let count = 0;\r\n                        for (let i = value.length - 1; i > 0; i--) {\r\n                            if (value[i] === \"0\") {\r\n                                count++\r\n                            } else if (value[i] === \".\") {\r\n                                count++\r\n                                break;\r\n                            } else {\r\n                                break;\r\n                            }\r\n                        }\r\n                        obj[key] = value.substr(0, value.length - count);\r\n                    } else {\r\n                        this.replaceNA(value)\r\n                    }\r\n                }\r\n            })\r\n        }\r\n    }\r\n\r\n    openStudioModule(path, href = '/#/studio/design') {\r\n        if (!path) return;\r\n\r\n        // 两个窗口之间通信消息, 关联 TreeMenuLayout.vue:showStudio\r\n        const studioWindow = window['studioWindow']\r\n        if (!studioWindow) {\r\n            // 记录 target 名称，方便两个窗口之间通信消息, 关联 MultiPage.vue:openStudioModule\r\n            window['studioWindow'] = window.open(href, 'studio');\r\n            return\r\n        }\r\n\r\n        /* /src/pages/rule/lot/RuleLot.vue */\r\n        studioWindow.postMessage({path: path, message: 'msg', type: 'OpenModule'}, '*')\r\n        studioWindow.focus()\r\n    }\r\n\r\n    sqlParser = new SqlWhereParser()\r\n    programParser = new SqlWhereParser({\r\n        //@ts-ignore\r\n        operators: [\r\n            {\r\n                '!IN': OPERATOR_TYPE_BINARY,\r\n                'IN': OPERATOR_TYPE_BINARY,\r\n            },\r\n            {\r\n                '==': OPERATOR_TYPE_BINARY,\r\n                '<': OPERATOR_TYPE_BINARY,\r\n                '>': OPERATOR_TYPE_BINARY,\r\n                '<=': OPERATOR_TYPE_BINARY,\r\n                '>=': OPERATOR_TYPE_BINARY,\r\n                '!=': OPERATOR_TYPE_BINARY\r\n            },\r\n            {\r\n                '&&': OPERATOR_TYPE_BINARY\r\n            },\r\n            {\r\n                '||': OPERATOR_TYPE_BINARY\r\n            }\r\n        ],\r\n        tokenizer: {\r\n            shouldTokenize: ['(', ')', '[', ']', ',', '.contains', '==', '!=', '<', '>', '<=', '>='],\r\n            shouldMatch: ['\"', \"'\", '`'],\r\n            shouldDelimitBy: [' ', \"\\n\", \"\\r\", \"\\t\"]\r\n        }\r\n    })\r\n}\r\n\r\nfunction _deepFill(parentJson, customSetting, callback, extCallback, lotCallback) {\r\n    if (_.isArray(parentJson)) {\r\n        // 数组\r\n        _.forEach(parentJson, value => {\r\n            // 递归查找\r\n            _deepFill(value, customSetting, callback, extCallback, lotCallback)\r\n        })\r\n    } else if (_.isObject(parentJson)) {\r\n        // 普通对象\r\n        const uiBlock = parentJson[\"uiBlock\"]\r\n        if (uiBlock) {\r\n            // 有 uiBlock 属性\r\n            if (parentJson[\"xtype\"] === \"aggrid\") {\r\n                // 表格处理\r\n                if (!parentJson[\"columns\"]) {\r\n                    parentJson[\"columns\"] = []\r\n                }\r\n                const columns = parentJson[\"columns\"]\r\n                _.forEach(columns, (col, idx) => {\r\n                    if (!col.dataIndex || _.toString(col.dataIndex).includes('.')) {\r\n                        // 包含特殊符号，或没有名称的字段，不列入管理范围\r\n                        return\r\n                    }\r\n                    const uiKey = col.header ?? col.dataIndex ?? col.field\r\n                    // 在 customSetting 中找到是否包含 uiBlock.uiKey 的自定义属性描述\r\n                    const setting = _.get(customSetting, uiBlock + '.' + uiKey)\r\n                    if (setting) {\r\n                        callback(parentJson, col, uiBlock, uiKey, setting, idx)\r\n                    }\r\n                });\r\n\r\n                const extCmpList = _.get(customSetting, 'ext.' + uiBlock)\r\n                if (extCmpList) {\r\n                    extCallback(parentJson, uiBlock, extCmpList)\r\n                }\r\n\r\n                lotCallback(parentJson, uiBlock)\r\n                return\r\n\r\n            } else if (parentJson['xtype'] === 'form') {\r\n                // 表单处理\r\n                if (!_.isArray(parentJson['items'])) {\r\n                    parentJson['items'] = []\r\n                }\r\n\r\n                const items = parentJson['items']\r\n                _.forEach(items, (item, idx) => {\r\n                    const uiKey = item[\"uiKey\"] ?? item['fieldLabel']\r\n                    if (!uiKey || uiKey === '-') {\r\n                        return\r\n                    }\r\n                    const setting = _.get(customSetting, uiBlock + '.' + uiKey)\r\n                    if (setting) {\r\n                        callback(parentJson, item, uiBlock, uiKey, setting, idx)\r\n                    }\r\n                });\r\n\r\n                const extCmpList = _.get(customSetting, 'ext.' + uiBlock)\r\n                if (extCmpList) {\r\n                    extCallback(parentJson, uiBlock, extCmpList)\r\n                }\r\n                lotCallback(parentJson, uiBlock)\r\n                return\r\n\r\n            } else if (parentJson['xtype'] === 'tabs') {\r\n                // 选项卡\r\n                if (!_.isArray(parentJson['items'])) {\r\n                    parentJson['items'] = []\r\n                }\r\n                const items = parentJson['items']\r\n                _.forEach(items, (item, idx) => {\r\n                    if (item.xtype !== 'tabpanel') {\r\n                        // 选项卡只读子选项卡\r\n                        return\r\n                    }\r\n                    const uiKey = item['title']\r\n                    if (!uiKey || uiKey === '-') {\r\n                        return\r\n                    }\r\n                    const setting = _.get(customSetting, uiBlock + '.' + uiKey)\r\n                    if (setting) {\r\n                        callback(parentJson, item, uiBlock, uiKey, setting, idx)\r\n                    }\r\n                    _deepFill(item.items, customSetting, callback, extCallback, lotCallback)\r\n                });\r\n                lotCallback(parentJson, uiBlock)\r\n                return\r\n\r\n            } else if (parentJson['xtype'] === 'toolbar') {\r\n                // 工具条\r\n                if (!_.isArray(parentJson['items'])) {\r\n                    parentJson['items'] = []\r\n                }\r\n\r\n                const items = parentJson['items']\r\n                _.forEach(items, (item, idx) => {\r\n                    if (item.xtype !== 'button') {\r\n                        // 工具条组件只读取按钮\r\n                        return\r\n                    }\r\n                    const uiKey = item[\"uiKey\"] ?? item['text']\r\n                    if (!uiKey || uiKey === '-') {\r\n                        return\r\n                    }\r\n                    const setting = _.get(customSetting, uiBlock + '.' + uiKey)\r\n                    if (setting) {\r\n                        callback(parentJson, item, uiBlock, uiKey, setting, idx)\r\n                    }\r\n                });\r\n                lotCallback(parentJson, uiBlock)\r\n                return\r\n            }\r\n        }\r\n        _.forOwn(parentJson, (value, key) => {\r\n            // 递归查找\r\n            if (_.isObject(value)) {\r\n                _deepFill(value, customSetting, callback, extCallback, lotCallback)\r\n            }\r\n        })\r\n    }\r\n}\r\n\r\nfunction _deepAnalysis(parentJson, uiBlocks, uiInfos) {\r\n    if (_.isArray(parentJson)) {\r\n        // 数组\r\n        _.forEach(parentJson, value => {\r\n            // 递归查找\r\n            _deepAnalysis(value, uiBlocks, uiInfos)\r\n        })\r\n    } else if (_.isObject(parentJson)) {\r\n        // 普通对象\r\n        const uiBlock = parentJson[\"uiBlock\"]\r\n        if (uiBlock) {\r\n            if (uiBlocks.has(uiBlock)) {\r\n                system.msg(`uiBlock=[${uiBlock}]出现重复`)\r\n            }\r\n            uiBlocks.add(uiBlock);\r\n\r\n            if (parentJson[\"xtype\"] === \"aggrid\") {\r\n                // 表格处理\r\n                const columns = parentJson[\"columns\"]\r\n                if (_.isArray(columns)) {\r\n                    _.forEach(columns, (col, idx) => {\r\n                        if (!col.dataIndex || _.toString(col.dataIndex).includes('.')) {\r\n                            // 包含特殊符号，或没有名称的字段，不列入管理范围\r\n                            return\r\n                        }\r\n                        uiInfos.push({\r\n                            ui_block: uiBlock,\r\n                            ui_key: col.header ?? col.dataIndex ?? col.field,\r\n                            dm_field_order: idx,\r\n                            dm_field_label: col.header,\r\n                            dm_field_ui: {...col},\r\n                        });\r\n                    });\r\n                }\r\n                return\r\n\r\n            } else if (parentJson['xtype'] === 'form') {\r\n                // 表单处理\r\n                const items = parentJson['items']\r\n                if (_.isArray(items)) {\r\n                    _.forEach(items, (item, idx) => {\r\n                        const uiKey = item[\"uiKey\"] ?? item['fieldLabel']\r\n                        if (!uiKey || uiKey === '-') {\r\n                            return\r\n                        }\r\n                        uiInfos.push({\r\n                            ui_block: uiBlock,\r\n                            ui_key: uiKey,\r\n                            dm_field_order: idx,\r\n                            dm_field_label: item.fieldLabel,\r\n                            dm_field_ui: {...item},\r\n                        });\r\n                    });\r\n                }\r\n                return\r\n\r\n            } else if (parentJson['xtype'] === 'tabs') {\r\n                // 选项卡\r\n                const items = parentJson['items']\r\n                if (_.isArray(items)) {\r\n                    _.forEach(items, (item, idx) => {\r\n                        if (item.xtype !== 'tabpanel') {\r\n                            // 选项卡只读子选项卡\r\n                            return\r\n                        }\r\n                        const uiKey = item['title']\r\n                        if (!uiKey || uiKey === '-') {\r\n                            return\r\n                        }\r\n                        uiInfos.push({\r\n                            ui_block: uiBlock,\r\n                            ui_key: uiKey,\r\n                            dm_field_order: idx,\r\n                            dm_field_label: item.title,\r\n                            dm_field_ui: {...item},\r\n                        });\r\n                        _deepAnalysis(item.items, uiBlocks, uiInfos)\r\n                    });\r\n                }\r\n                return\r\n\r\n            } else if (parentJson['xtype'] === 'toolbar') {\r\n                // 工具条\r\n                const items = parentJson['items']\r\n                if (_.isArray(items)) {\r\n                    _.forEach(items, (item, idx) => {\r\n                        if (item.xtype !== 'button') {\r\n                            // 工具条组件只读取按钮\r\n                            return\r\n                        }\r\n                        const uiKey = item[\"uiKey\"] ?? item['text']\r\n                        if (!uiKey || uiKey === '-') {\r\n                            return\r\n                        }\r\n                        uiInfos.push({\r\n                            ui_block: uiBlock,\r\n                            ui_key: uiKey,\r\n                            dm_field_order: idx,\r\n                            dm_field_label: item.text,\r\n                            dm_field_ui: {...item},\r\n                        });\r\n                    });\r\n                }\r\n                return\r\n            }\r\n        }\r\n        _.forEach(parentJson, value => {\r\n            // 递归查找\r\n            if (_.isObject(value)) {\r\n                _deepAnalysis(value, uiBlocks, uiInfos)\r\n            }\r\n        })\r\n    }\r\n}\r\n\r\n/**\r\n * 深度遍历json对象, 递归调用callback\r\n * @param vjson json对象\r\n * @param cb 回调函数, 如果返回false, 则停止遍历\r\n * @param parentPaths 父路径\r\n */\r\nfunction _vjsonDepthTrave(vjson: any, cb: (targetVjson: any, jsonpath: string) => boolean | undefined, parentPaths: string[]): boolean | undefined {\r\n    if (_.isArray(vjson)) {\r\n        // 数组\r\n        let ret = undefined\r\n        _.forEach(vjson, (value, idx) => {\r\n            // 递归查找\r\n            ret = _vjsonDepthTrave(value, cb, [...parentPaths, '[' + idx + ']'])\r\n            if (ret === false) {\r\n                return false\r\n            }\r\n            if (ret === true) {\r\n                return\r\n            }\r\n        })\r\n        if (ret === false) {\r\n            return false\r\n        }\r\n        if (ret === true) {\r\n            return\r\n        }\r\n\r\n    } else if (_.isObject(vjson) && typeof vjson['xtype'] === 'string') {\r\n        let specCode = vjson['uiBlock']\r\n        if (!specCode) {\r\n            specCode = vjson['reference']\r\n        }\r\n        if (!specCode) {\r\n            specCode = _.join(parentPaths, '.')\r\n        }\r\n        const ret = cb(vjson, specCode)\r\n        if (ret === false) {\r\n            return false\r\n        }\r\n        if (ret === true) {\r\n            return\r\n        }\r\n    }\r\n\r\n    if (_.isArray(vjson['items'])) {\r\n        let ret = undefined\r\n        _.forEach(vjson.items, (value, idx) => {\r\n            const ret = _vjsonDepthTrave(value, cb, [...parentPaths, `items[${idx}]`])\r\n            if (ret === false) {\r\n                return false\r\n            }\r\n            if (ret === true) {\r\n                return\r\n            }\r\n        })\r\n        if (ret === false) {\r\n            return false\r\n        }\r\n    }\r\n}\r\n\r\n\r\n// const LoadingDialog = defineComponent({\r\n//     data() {\r\n//         return {\r\n//             isShow: true,\r\n//         }\r\n//     },\r\n//     render() {\r\n//         return h(ElDialog,\r\n//             {\r\n//                 modelValue: this.isShow,\r\n//                 appendToBody: true,\r\n//                 draggable: true,\r\n//                 modal: true,\r\n//                 destroyOnClose: true,\r\n//                 closeOnPressEscape: false,\r\n//                 title: '正在载入',\r\n//                 style: {\r\n//                     width: '90%'\r\n//                 },\r\n//                 onClosed() {\r\n//                     // @ts-ignore\r\n//                     const {rootElementList} = window\r\n//                     _.remove(rootElementList, (item: any) => item.prop._insId === _insId)\r\n//                 },\r\n//                 onVnodeMounted(dialogInstance) {\r\n//                     // console.log('dialog', dialogInstance.el)\r\n//                 }\r\n//             },\r\n//             [\r\n//                 h('div', null,\r\n//                     [\r\n//                         h(renderIcon('Loading')),\r\n//                         h('span', {\r\n//                             style: {\r\n//                                 color: 'red',\r\n//                                 fontSize: '22px',\r\n//                             }\r\n//                         }, '请稍等...'),\r\n//                     ])\r\n//             ]\r\n//         )\r\n//     }\r\n// })","<template>\r\n  <div class=\"template-list\">\r\n    <ag-grid-vue\r\n        style=\"width: 100%; height: 500px\"\r\n        class=\"ag-theme-alpine\"\r\n        v-bind=\"gridOptions\"\r\n        :rowData=\"rowData\"\r\n        @grid-ready=\"onGridReady\"\r\n    >\r\n    </ag-grid-vue>\r\n    <div class=\"yv-toolbar yv-toolbar-flat\">\r\n      <el-button type=\"primary\" class=\"yv-button\" :icon=\"renderIcon('fa Print')\" v-bind=\"printerBtnOptions\"\r\n                 @click=\"doPrint\">\r\n        打印\r\n      </el-button>\r\n      <el-button type=\"default\" class=\"yv-button\" :icon=\"renderIcon('fa PowerOff')\" @click=\"cancelPrinter\">\r\n        取消\r\n      </el-button>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport {renderIcon} from '../../utils'\r\n\r\nexport default {\r\n  name: \"yv_print_template_dialog\",\r\n  props: {\r\n    _input: Object\r\n  },\r\n  data() {\r\n    return {\r\n      gridOptions: {\r\n        columnDefs: [\r\n          {width: 30, 'pinned': 'left', checkboxSelection: true},\r\n          {headerName: \"打印模板编码\", field: \"print_template_code\"},\r\n          {headerName: \"打印模板名称\", field: \"print_template_name\"},\r\n        ],\r\n        rowSelection: 'single',\r\n      },\r\n      rowData: [],\r\n      api: null,\r\n      printerBtnOptions: {\r\n        loading: false\r\n      }\r\n    }\r\n  },\r\n  mounted() {\r\n    this.loadPrintTemplateByPlanCode()\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    onGridReady(params) {\r\n      this.api = params.api\r\n      this.api.sizeColumnsToFit()\r\n    },\r\n    format(params) {\r\n\r\n      return \"abc\";\r\n    },\r\n    loadPrintTemplateByPlanCode() {\r\n      const params = {'plan_code': this._input.printPlanCode}\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintTemplateManager@findTemplateByPlanCode\", params).then((res) => {\r\n        this.rowData = res.data\r\n      })\r\n    },\r\n    doPrint() {\r\n      const selectedRows = this.api.getSelectedRows()\r\n      if (!selectedRows || selectedRows.length <= 0) {\r\n        system.showErrorDialog(\"请选择打印模板\")\r\n        return\r\n      }\r\n      if (selectedRows.length > 1) {\r\n        system.showErrorDialog(\"最多只能选择一个打印模板\")\r\n        return\r\n      }\r\n      const planCode = this._input.printPlanCode;\r\n      const templateCodes = selectedRows.map(row => row.print_template_code)\r\n      const parameters = this._input.parameters;\r\n      this.printerBtnOptions.loading = true\r\n      window['printTools'].invokePrintByTemplateCode(planCode, templateCodes, parameters).then(res => {\r\n\r\n\r\n      }).finally(() => {\r\n        this.printerBtnOptions.loading = false\r\n        const result = {}\r\n        this.$emit('ok', result)\r\n      })\r\n    },\r\n    cancelPrinter() {\r\n      this.$emit('closeDialog')\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.template-list {\r\n  overflow: hidden;\r\n\r\n  .yv-toolbar {\r\n    margin-top: 10px;\r\n    float: right;\r\n    border: none;\r\n  }\r\n}\r\n</style>","import _ from 'lodash'\r\nimport YvPrintTemplateDialog from \"./yv_print_template_dialog.vue\";\r\n\r\nexport default class PrintTools {\r\n\r\n    /**\r\n     * 弹出可以选择的打印模板\r\n     * @param printPlanCode\r\n     * @param parameters\r\n     */\r\n    showTemplateDialog(printPlanCode: string, parameters: Map<string, object>): Promise<any> {\r\n        if (!printPlanCode) {\r\n            system.showErrorDialog(\"打印场景编码必填\")\r\n            return\r\n        }\r\n        const params = {printPlanCode: printPlanCode, parameters, title: '请选择打印模板', width: '40%'}\r\n        return system.showDialog(YvPrintTemplateDialog, params)\r\n    }\r\n\r\n    /**\r\n     * 调用打印\r\n     * @param printPlanCode\r\n     * @param templateCodes\r\n     * @param parameters\r\n     */\r\n    invokePrintByTemplateCode(printPlanCode: string, templateCodes: Array<string>, parameters: Map<string, object>): Promise<any> {\r\n        const params = {\r\n            plan_code: printPlanCode,\r\n            template_codes: templateCodes,\r\n            query: parameters\r\n        }\r\n        return new Promise((resolve, reject) => {\r\n            system.invokeServer(\"/com/galaxis/wms/print/PrintServer@doPrint\", params).then((res) => {\r\n                const fileUrl = res.data.fileUrl;\r\n                if (fileUrl) {\r\n                    const newWindow = window.open(fileUrl, '', 'width=800,height=800');\r\n                    // newWindow.print();\r\n                }\r\n                resolve(res)\r\n            }).catch(error => {\r\n                reject(error)\r\n            })\r\n        })\r\n    }\r\n\r\n    /**\r\n     * 打开对话框\r\n     * @param url       转向网页的地址;\r\n     * @param name      网页名称，可为空;\r\n     * @param iWidth    弹出窗口的宽度;\r\n     * @param iHeight   弹出窗口的高度;\r\n     */\r\n    openWindow(url, name, iWidth, iHeight): WindowProxy | null {\r\n        // window.screen.height获得屏幕的高，window.screen.width获得屏幕的宽\r\n        // 获得窗口的垂直位置;\r\n        const iTop = (window.screen.height - 30 - iHeight) / 2;\r\n        // 获得窗口的水平位置;\r\n        const iLeft = (window.screen.width - 10 - iWidth) / 2;\r\n        return window.open(url, name, 'height=' + iHeight + ',,innerHeight=' + iHeight + ',width=' + iWidth + ',innerWidth=' + iWidth + ',top=' + iTop + ',left=' + iLeft + ',toolbar=no,menubar=no,scrollbars=auto,resizeable=no,location=no,status=no');\r\n    }\r\n\r\n    /**\r\n     * 调用打印\r\n     * @param printPlanCode\r\n     * @param parameters\r\n     */\r\n    invokePrint(printPlanCode: string, parameters: Map<string, object>): Promise<any> {\r\n        const params = {\r\n            plan_code: printPlanCode,\r\n            query: parameters\r\n        }\r\n        return new Promise((resolve, reject) => {\r\n            system.invokeServer(\"/com/galaxis/wms/print/PrintServer@doPrint\", params).then((res) => {\r\n                const fileUrl = res.data.fileUrl;\r\n                if (fileUrl) {\r\n                    const newWindow = this.openWindow(fileUrl, '', 800, 800);\r\n                    // newWindow.print();\r\n                }\r\n                resolve(res)\r\n            }).catch(error => {\r\n                reject(error)\r\n            })\r\n        })\r\n    }\r\n}","<template>\r\n  <el-dialog v-model=\"isShow\" title=\"表单校验错误\" @closed=\"onClosed\" append-to-body\r\n             :close-on-click-modal=\"true\"\r\n             :close-on-press-escape=\"true\"\r\n             :show-close=\"true\">\r\n    <div v-for=\"error in errors\">\r\n      <el-button type=\"danger\" :icon=\"renderIcon('CircleCloseFilled')\" text @click=\"jumpError(error)\">\r\n        {{ error.message }}\r\n      </el-button>\r\n    </div>\r\n  </el-dialog>\r\n</template>\r\n<script>\r\nimport _ from \"lodash\";\r\nimport {CircleCloseFilled} from '@element-plus/icons-vue'\r\nimport {renderIcon} from \"../utils\";\r\n\r\nexport default {\r\n  props: [\r\n    'scope',\r\n    '_insId',\r\n    'validRetList'\r\n  ],\r\n\r\n  data() {\r\n    const errors = []\r\n    _.forEach(this.validRetList, validRet => {\r\n      _.forOwn(validRet, (value, key) => {\r\n        if (_.isArray(value)) {\r\n          _.forEach(value, e => {\r\n            errors.push(e)\r\n          })\r\n        } else {\r\n          errors.push(value)\r\n        }\r\n      })\r\n    })\r\n\r\n    return {\r\n      CircleCloseFilled,\r\n      isShow: false,\r\n      errors: errors,\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    this.isShow = true\r\n  },\r\n\r\n  methods: {\r\n    renderIcon,\r\n    jumpError(error) {\r\n      this.isShow = false\r\n      if (typeof error.showError === 'function') {\r\n        // 有些错误是在组件内部处理的，需要调用组件的 showError 方法\r\n        error.showError()\r\n\r\n      } else {\r\n        // 滚动到错误的字段\r\n        this.$nextTick(() => {\r\n          this.$props.scope.scrollToField(error.field)\r\n        })\r\n      }\r\n    },\r\n    onClosed() {\r\n      system.removeCmp(this)\r\n    },\r\n  }\r\n}\r\n</script>","import _ from 'lodash'\r\nimport {toRaw} from 'vue'\r\nimport VJsonContext from \"../components/vjson/VJsonContext\"\r\nimport ValidateDialog from \"../components/ValidateDialog.vue\"\r\nimport {ElMessage} from 'element-plus'\r\n\r\nfunction getCookie(cname) {\r\n    const name = cname + \"=\";\r\n    const ca = document.cookie.split(';');\r\n    for (let i = 0; i < ca.length; i++) {\r\n        const c = ca[i].trim();\r\n        if (c.indexOf(name) === 0) return c.substring(name.length, c.length);\r\n    }\r\n    return \"\";\r\n}\r\n\r\nexport default {\r\n    props: {\r\n        _input: {\r\n            required: false,\r\n        },\r\n    },\r\n    emits: [\r\n        'ok', 'closeDialog'\r\n    ],\r\n    data() {\r\n        // 创建组件上下文\r\n        // const pagePath = this.$route?.meta?.pagePath\r\n        const vcxt = VJsonContext.createRuntime(this)\r\n\r\n        let _relPath = ''\r\n        let _absPath\r\n        let pagePath\r\n        // /src/pages/rule/RuleOut.vue\r\n        const fileOnVite = this._?.type?.__file\r\n        if(fileOnVite){\r\n            _absPath = fileOnVite\r\n            const absPathIdx = _absPath.indexOf('/src/pages/')\r\n            pagePath = _absPath.substring(absPathIdx)\r\n            console.log('pagePath', pagePath)\r\n\r\n            const idx = _absPath?.indexOf('/src/pages')\r\n            if (idx > 0) {\r\n                _relPath = _absPath.substring(idx + 4)\r\n            }\r\n\r\n        }else {\r\n            _absPath = this._?.type?.__filename\r\n            if (typeof _absPath !== 'string') {\r\n                alert('Vue 模块没有 _.type.__filename, 请确保适用 vite 调试打包')\r\n                // debugger\r\n                // throw Error('vue module not exists _.type.__file, make sure use vite to package')\r\n            }\r\n            const idx = _absPath?.indexOf('/src/pages')\r\n            if (idx >= 0) {\r\n                _relPath = _absPath.substring(idx + 4)\r\n            }\r\n            pagePath = _absPath;\r\n        }\r\n\r\n\r\n\r\n        // 所有 $prop 属性都会被复制到 data 中\r\n        let propData = {}\r\n        _.forOwn(this.$props?._input, (v, k) => {\r\n            if (k.startsWith('_'))\r\n                return\r\n            propData[k] = v\r\n        })\r\n\r\n\r\n\r\n        // 创建全局变量\r\n        const global = {}\r\n        const whId = getCookie(\"whId\")\r\n        if (whId) {\r\n            global.whId = whId;\r\n        }\r\n\r\n        return {\r\n            pagePath,\r\n            _relPath, _absPath, vcxt,\r\n            input: _.cloneDeep(this.$props?._input || {}),\r\n            global,\r\n            _innerForms: [],\r\n            footerDefine: undefined,\r\n            ...propData,\r\n            vjsonRaw: null,\r\n        }\r\n    },\r\n    created() {\r\n        console.time(this.pagePath)\r\n\r\n        if (typeof this.onCreated === 'function') {\r\n            this.onCreated(this)\r\n        }\r\n    },\r\n    mounted() {\r\n        if (typeof this.onMounted === 'function') {\r\n            this.onMounted(this)\r\n        }\r\n        this.$nextTick(() => {\r\n            console.timeEnd(this.pagePath)\r\n        })\r\n        window['cp'] = this\r\n\r\n        this.vjsonRaw = _.cloneDeep(this.vjson)\r\n        // if (this.vjson.allowRuleUi) {\r\n        //    this.loadRuleUi()\r\n        // }\r\n\r\n        if (typeof window['HookVjsonOnInit'] === 'function') {\r\n            const result = window['HookVjsonOnInit'](this, this.vjson)\r\n            if (result) {\r\n                this.vjson.layoutLoading = true\r\n                result.then(newVjson => {\r\n                    if (newVjson) {\r\n                        this.vjson = newVjson\r\n                    }\r\n\r\n                }).finally(() => {\r\n                    this.vjson.layoutLoading = false\r\n                })\r\n            }\r\n        }\r\n\r\n    },\r\n    unmounted() {\r\n        if (typeof this.onUnmounted === 'function') {\r\n            this.onUnmounted(this)\r\n        }\r\n    },\r\n    computed: {},\r\n    methods: {\r\n        ok(result) {\r\n            this.$emit('ok', result)\r\n        },\r\n        close() {\r\n            this.$emit('closeDialog')\r\n        },\r\n        setTitle(result) {\r\n            this.$emit('setTitle', result)\r\n        },\r\n\r\n        _registeForm(formInstance) {\r\n            this._innerForms.push(formInstance)\r\n        },\r\n        _unregForm(formInstance) {\r\n            _.remove(this._innerForms, i => i === formInstance)\r\n        },\r\n\r\n        scrollToField(field) {\r\n            _.forEach(this._innerForms, form => {\r\n                if (typeof form.scrollToField === 'function') {\r\n                    form.scrollToField(field)\r\n                }\r\n            })\r\n        },\r\n\r\n        /**\r\n         * 根据规则, 重新加载组件\r\n         * @param option 重加载参数\r\n         */\r\n        reloadByRule(reloadOption) {\r\n            const hookVjsonComponentOnRuntime = window['HookVjsonComponentOnRuntime']\r\n            if (typeof hookVjsonComponentOnRuntime === 'function') {\r\n                hookVjsonComponentOnRuntime(this, this.vjson, reloadOption)\r\n            }\r\n        },\r\n\r\n        /**\r\n         * 读取UI规则\r\n         */\r\n        loadRuleUi() {\r\n            let path = this._relPath\r\n            // 如果页面是 .vue 结尾的，则将 .vue 后缀去掉\r\n            if (path.endsWith('.vue')) {\r\n                path = path.substring(0, path.length - 4)\r\n            }\r\n\r\n            // 如果页面是 /pages/ 开头的，则将 /pages 去掉\r\n            if (path.startsWith('/pages/')) {\r\n                path = path.substring(6)\r\n            }\r\n\r\n            const params = {}\r\n            _.forEach(this.vjson.ruleUiParams, (param, idx) => {\r\n                if (param.name) {\r\n                    Object.assign(params, toRaw(_.get(this, param.name)))\r\n                } else {\r\n                    // 空行，将自己的 data 全部抛给 params\r\n                    Object.assign(params, toRaw(this.$data))\r\n                    // 将 params 中，下划线开头的所有变量都删除\r\n                    _.forOwn(params, (v, k) => {\r\n                        if (k.startsWith('_')) {\r\n                            delete params[k]\r\n                        }\r\n                    })\r\n                    // 将 this.refs 下所有变量名字都删除\r\n                    _.forOwn(this.refs, (v, k) => {\r\n                        delete params[k]\r\n                    })\r\n                    delete params.vcxt\r\n                    delete params.vjson\r\n                    delete params.vjsonRaw\r\n                    delete params.refs\r\n                }\r\n            })\r\n\r\n            const el = ElMessage({\r\n                dangerouslyUseHTMLString: true,\r\n                message: '读取界面规则',\r\n                grouping: true,\r\n            })\r\n            system.invokeServer('/pages/rule/RuleUi@getCustSetting', {\r\n                path,\r\n                pagePath: this.pagePath,\r\n                ...params\r\n\r\n            }).then(res => {\r\n                const rules = res.data\r\n                this.applyRuleUi(rules)\r\n\r\n            }).finally(() => {\r\n                el.close()\r\n            })\r\n        },\r\n\r\n        /**\r\n         * 应用界面规则\r\n         * block 块的结构是:\r\n         * {\r\n         *     block1: {\r\n         *         field1: {\r\n         *             is_hidden: '0001' | '0000',\r\n         *             is_required: '0001' | '0000',\r\n         *             cust_display_label: null | string,\r\n         *             cust_ui: // 强制指定某种编辑模式, 可能是 null\r\n         *                 null |\r\n         *                 {\r\n         *                     xtype: \"combobox\",\r\n         *                     fieldLabel: \"备注(项目1)\",\r\n         *                     editable: true,\r\n         *                     dataType: 1,\r\n         *                     dataEnum: [\r\n         *                         {id: '', text: '', dictValue: '1', dictText: 'A'}\r\n         *                     ],\r\n         *                     dataType: 2,\r\n         *                     dataDict: 'WH',\r\n         *                 } |\r\n         *                 {\r\n         *                     \"xtype\":\"textfield\",\r\n         *                     \"editable\":true\r\n         *                 } |\r\n         *                 {\r\n         *                     \"xtype\":\"numberfield\",\r\n         *                     \"editable\":true\r\n         *                 }\r\n         *         },\r\n         *         field2: {...},\r\n         *         field3: {...}\r\n         *     },\r\n         *     block2: {...},\r\n         *     block3: {...}\r\n         *     ext: {\r\n         *         block1: {...},\r\n         *         block2: {...},\r\n         *         block3: {...}\r\n         *     }\r\n         * }\r\n         *\r\n         * @param customSetting 界面规则\r\n         */\r\n        applyRuleUi(customSetting) {\r\n            const finallyVjson = _.cloneDeep(this.vjsonRaw)\r\n            if (!customSetting) {\r\n                this.vjson = finallyVjson\r\n                return\r\n            }\r\n\r\n            let lots = undefined\r\n            if (customSetting.lots) {\r\n                lots = JSON.parse(customSetting.lots)\r\n            }\r\n            console.log('lots', lots)\r\n\r\n            if (typeof window['ExchangeVjson'] === \"function\") {\r\n                const ret = window['ExchangeVjson'](this, finallyVjson)\r\n                if (ret) {\r\n                    if (ret.force) {\r\n                        // 强制刷新页面\r\n                        this.vjson = ret.vjson\r\n                        return\r\n\r\n                    } else {\r\n\r\n                    }\r\n                    this.vjson = finallyVjson\r\n                    return\r\n                }\r\n            }\r\n\r\n            system.vjsonDeepFill(finallyVjson, customSetting,\r\n                (cmpJson, targetVJson, uiBlock, uiKey, setting, idx) => {\r\n                    // console.log('applyRuleUi', cmpJson, item, uiBlock, uiKey, setting, idx)\r\n                    if (!setting) {\r\n                        return\r\n                    }\r\n                    if (cmpJson.xtype === 'form') {\r\n                        // 控制到表单项\r\n                        const cust_ui = setting.cust_ui\r\n                        if (cust_ui) {\r\n                            Object.assign(targetVJson, cust_ui)\r\n\r\n                            // 删除没用的字段\r\n                            delete targetVJson.editable\r\n\r\n                            targetVJson.xtype = cust_ui.xtype\r\n                            if (cust_ui.xtype === 'combobox') {\r\n                                targetVJson.xtype = 'combo'\r\n                                if (cust_ui.dataEnum) {\r\n                                    targetVJson.dataEnum = cust_ui.dataEnum\r\n                                }\r\n                                if (cust_ui.dict) {\r\n                                    targetVJson.dataDict = cust_ui.dict\r\n                                }\r\n                                if (cust_ui.dataType) {\r\n                                    targetVJson.dataType = cust_ui.dataType\r\n                                    if (targetVJson.dataType === 1) {\r\n                                        // 兼容dataEnum {id: '', text: '', dictValue: '1', dictText: 'A'} 转换为 {id: '1', text: 'A'}\r\n                                        targetVJson.dataEnum = _.map(targetVJson.dataEnum, i => {\r\n                                            return {\r\n                                                id: i.id || i.dictValue,\r\n                                                text: i.text || i.dictText,\r\n                                            }\r\n                                        })\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n\r\n\r\n                        if (setting.is_hidden === '0001') {\r\n                            targetVJson.hidden = true\r\n                        } else if (setting.is_hidden === '0000') {\r\n                            targetVJson.hidden = false\r\n                        }\r\n\r\n                        if (setting.is_required === '0001') {\r\n                            targetVJson.required = true\r\n                        } else if (setting.is_required === '0000') {\r\n                            targetVJson.required = false\r\n                        }\r\n\r\n                        if (setting.cust_display_label) {\r\n                            targetVJson.fieldLabel = setting.cust_display_label\r\n                        }\r\n\r\n                    } else if (cmpJson.xtype === 'aggrid') {\r\n                        // 控制到表格字段\r\n                        const cust_ui = setting.cust_ui\r\n\r\n                        if (setting.is_hidden === '0001') {\r\n                            targetVJson.hidden = true\r\n                        } else if (setting.is_hidden === '0000') {\r\n                            targetVJson.hidden = false\r\n                        }\r\n\r\n                        if (setting.editable && !targetVJson.editor) {\r\n                            targetVJson.editor = {}\r\n                        }\r\n\r\n                        if (targetVJson.editor) {\r\n                            if (setting.is_required === '0001') {\r\n                                targetVJson.editor.required = true\r\n                            } else if (setting.is_required === '0000') {\r\n                                targetVJson.editor.required = false\r\n                            }\r\n                        }\r\n\r\n                        if (setting.cust_display_label) {\r\n                            targetVJson.header = setting.cust_display_label\r\n                        }\r\n\r\n                        if (cust_ui && cust_ui.editable) {\r\n                            Object.assign(targetVJson.editor, cust_ui)\r\n\r\n                            // 删除没用的字段\r\n                            delete targetVJson.editor.fieldLabel\r\n                            delete targetVJson.editor.editable\r\n\r\n                            if (cust_ui.xtype === 'combobox') {\r\n                                targetVJson.dict = cust_ui.dict\r\n                            }\r\n                        }\r\n                    }\r\n                },\r\n                (parentJson, uiBlock, extSettingList) => {\r\n                    /**\r\n                     * attr_name: \"扩展1\"\r\n                     * biz_code_category: \"\"\r\n                     * component_code: \"input\"\r\n                     * edit: 1\r\n                     * extprop_field: \"remark01\"\r\n                     * extprop_oms_property: \"E1\"\r\n                     * field_type: \"\"\r\n                     * isshow: 1\r\n                     * required: 1\r\n                     */\r\n\r\n                    if (parentJson.xtype === 'form') {\r\n                        // 扩展到表单, 格式如下\r\n                        const uiBlockExtPrefix = parentJson['uiBlockExtPrefix']\r\n                        _.forEach(extSettingList, (extSetting, idx) => {\r\n                            /**\r\n                             * {\r\n                             *     xtype: 'numberfield',\r\n                             *     fieldLabel: '优先级',\r\n                             *     bind: {\r\n                             *         value: '{uiBlockExtPrefix.priority}',\r\n                             *     },\r\n                             *     required: true,\r\n                             *     readonly: false,\r\n                             *     hidden: false,\r\n                             * },\r\n                             */\r\n                            const targetVJson = {\r\n                                fieldLabel: extSetting['attr_name'],\r\n                                bind: {value: '',},\r\n                            }\r\n\r\n                            // input 输入框number 数字类型  select 下拉框\r\n                            if (extSetting['component_code'] === 'number') {\r\n                                targetVJson.xtype = 'numberfield'\r\n                            } else if (extSetting['component_code'] === 'select') {\r\n                                _.assign(targetVJson, {\r\n                                    xtype: 'combo',\r\n                                    dataType: 1,\r\n                                    dataEnum: [],\r\n                                })\r\n                                const biz_code_category = extSetting['biz_code_category']\r\n                                if (biz_code_category) {\r\n                                    const arr = eval(biz_code_category)\r\n                                    if (_.isArray(arr)) {\r\n                                        _.forEach(arr, item => {\r\n                                            targetVJson.dataEnum.push({\r\n                                                id: item['value'],\r\n                                                text: item['key'],\r\n                                            })\r\n                                        })\r\n                                    }\r\n                                }\r\n\r\n                            } else {\r\n                                targetVJson.xtype = 'textfield'\r\n                            }\r\n\r\n                            // 必填\r\n                            targetVJson.required = ('' + extSetting['required'] === '1')\r\n\r\n                            // 允许编辑\r\n                            targetVJson.readonly = ('' + extSetting['edit'] !== '1')\r\n\r\n                            // 隐藏\r\n                            targetVJson.hidden = ('' + extSetting['isshow'] !== '1')\r\n\r\n                            // 绑定属性\r\n                            if (!uiBlockExtPrefix) {\r\n                                targetVJson.bind.value = `{${extSetting['extprop_field']}}`\r\n                            } else {\r\n                                targetVJson.bind.value = `{${uiBlockExtPrefix}.${extSetting['extprop_field']}}`\r\n                            }\r\n\r\n                            if (_.isArray(parentJson.items)) {\r\n                                parentJson.items.push(targetVJson)\r\n                            } else {\r\n                                parentJson.items = [targetVJson]\r\n                            }\r\n                        })\r\n\r\n                    } else if (parentJson.xtype === 'aggrid') {\r\n                        // 扩展到表格\r\n                        const uiBlockExtPrefix = parentJson['uiBlockExtPrefix']\r\n                        _.forEach(extSettingList, (extSetting, idx) => {\r\n                            /**\r\n                             * {\r\n                             *     xtype: 'aggridcolumn',\r\n                             *     dataIndex: 'rule_seed_code',\r\n                             *     header: '规则编码',\r\n                             *     field: 'rule_seed_code',\r\n                             *     hidden: false,\r\n                             *     editable: true,\r\n                             *     editor: {\r\n                             *         xtype: 'textfield',\r\n                             *         xtype: 'combobox',\r\n                             *         allowBlank: true,\r\n                             *         dataType: 1,\r\n                             *         dataEnum: [\r\n                             *             {\r\n                             *                 dictValue: '1',\r\n                             *                 dictText: 'A',\r\n                             *             },\r\n                             *         ],\r\n                             *     },\r\n                             * },\r\n                             */\r\n                            const targetVJson = {\r\n                                xtype: 'aggridcolumn',\r\n                                dataIndex: extSetting['extprop_field'],\r\n                                header: extSetting['attr_name'],\r\n                                field: extSetting['extprop_field'],\r\n                                hidden: ('' + extSetting['isshow'] !== '1'),\r\n                                editable: ('' + extSetting['edit'] === '1'),\r\n                                editor: {\r\n                                    allowBlank: ('' + extSetting['required'] !== '1'),\r\n                                }\r\n                            }\r\n\r\n                            // input 输入框number 数字类型  select 下拉框\r\n                            if (extSetting['component_code'] === 'number') {\r\n                                targetVJson.editor.xtype = 'numberfield'\r\n                            } else if (extSetting['component_code'] === 'select') {\r\n                                _.assign(targetVJson.editor, {\r\n                                    xtype: 'combobox',\r\n                                    dataType: 1,\r\n                                    dataEnum: [],\r\n                                })\r\n                                const biz_code_category = extSetting['biz_code_category']\r\n                                if (biz_code_category) {\r\n                                    const arr = eval(biz_code_category)\r\n                                    if (_.isArray(arr)) {\r\n                                        _.forEach(arr, item => {\r\n                                            targetVJson.editor.dataEnum.push({\r\n                                                dictValue: item['value'],\r\n                                                dictText: item['key'],\r\n                                            })\r\n                                        })\r\n                                    }\r\n                                }\r\n\r\n                            } else {\r\n                                targetVJson.editor.xtype = 'textfield'\r\n                            }\r\n\r\n                            if (_.isArray(parentJson.columns)) {\r\n                                parentJson.columns.push(targetVJson)\r\n                            } else {\r\n                                parentJson.columns = [targetVJson]\r\n                            }\r\n                        })\r\n                    }\r\n                },\r\n                (parentJson, uiBlock) => {\r\n                    if (!lots) {\r\n                        // 没有库存属性设置\r\n                        return\r\n                    }\r\n\r\n                    if (parentJson.xtype === 'form') {\r\n                        // _.find(parentJson.items, )\r\n                        const items = parentJson.items\r\n                        const lotItemIdx = _.findIndex(items, c => c.replaceFor === 'lot')\r\n                        if (lotItemIdx < 0) {\r\n                            // 没有找到要插入库存属性的地方\r\n                            return\r\n                        }\r\n\r\n                        // 删除 lotColumnIdx 这一列, 并插入批属性字段\r\n                        const pushItems = []\r\n                        _.forEach(lots, item => {\r\n                            /**\r\n                             * lot 字段结构\r\n                             * {\r\n                             *     \"lot_rule_id\": \"7000000001\",\r\n                             *     \"lot_field\": \"lot001\",\r\n                             *     \"lot_att_flag\": \"0001\",\r\n                             *     \"is_not_null\": \"0001\",\r\n                             *     \"oms_ref\": null,\r\n                             *     \"is_att_key\": \"0001\",\r\n                             *     \"is_val\": \"0001\",\r\n                             *     \"is_show\": \"0001\",\r\n                             *     \"ui_setting\": {\r\n                             *         \"xtype\": \"textfield\",\r\n                             *         \"editable\": true,\r\n                             *         \"fieldLabel\": \"扩展1\",\r\n                             *         \"required\": true\r\n                             *     }\r\n                             * }\r\n                             *\r\n                             * 转换为表格 item 结构\r\n                             * {\r\n                             *     xtype: 'textfield',\r\n                             *     fieldLabel: 'rule_name',\r\n                             *     bind:{\r\n                             *         value: parentJson.uiBlockExtPrefix + '.' + item.lot_field,\r\n                             *     },\r\n                             *     hidden: false,\r\n                             *     readonly: false,\r\n                             *     required: false,\r\n                             * }\r\n                             */\r\n                            const ui_setting = item.ui_setting\r\n\r\n                            if (!ui_setting?.xtype) {\r\n                                // 没有定义编辑类型\r\n                                return\r\n                            }\r\n\r\n                            const targetVJson = {\r\n                                ...ui_setting,\r\n                                hidden: item.is_show !== '0001',\r\n                                readonly: !ui_setting.editable,\r\n                                required: item.is_not_null === '0001',\r\n                                bind: {\r\n                                    value: '{' + parentJson.uiBlockExtPrefix + '.' + item.lot_field + '}',\r\n                                }\r\n                            }\r\n                            if (!parentJson.uiBlockExtPrefix) {\r\n                                targetVJson.bind.value = '{' + item.lot_field + '}'\r\n                            }\r\n\r\n                            // 删除没用的字段\r\n                            delete targetVJson.editable\r\n\r\n                            if (ui_setting.xtype === 'combobox') {\r\n                                // 下拉框单独设置\r\n                                targetVJson.xtype = 'combo'\r\n                                if (ui_setting.dataEnum) {\r\n                                    targetVJson.dataEnum = ui_setting.dataEnum\r\n                                }\r\n                                if (ui_setting.dataDict) {\r\n                                    targetVJson.dataDict = ui_setting.dataDict\r\n                                }\r\n                                if (ui_setting.dataType) {\r\n                                    targetVJson.dataType = ui_setting.dataType\r\n                                    if (ui_setting.dataType === 1) {\r\n                                        // 兼容dataEnum {id: '', text: '', dictValue: '1', dictText: 'A'} 转换为 {id: '1', text: 'A'}\r\n                                        targetVJson.dataEnum = _.map(ui_setting.dataEnum, i => {\r\n                                            return {\r\n                                                id: i.id || i.dictValue,\r\n                                                text: i.text || i.dictText,\r\n                                            }\r\n                                        })\r\n                                    }\r\n                                }\r\n                            }\r\n\r\n                            pushItems.push(targetVJson)\r\n                        })\r\n\r\n                        // 删除 lotColumnIdx 这一列, 并插入批属性字段\r\n                        items.splice(lotItemIdx, 1, ...pushItems)\r\n\r\n                    } else if (parentJson.xtype === 'aggrid') {\r\n                        // 找到 columns 属性中 replaceFor: 'lot' 的列所在的 column\r\n                        const columns = parentJson.columns\r\n                        const lotColumnIdx = _.findIndex(columns, c => c.replaceFor === 'lot')\r\n                        if (lotColumnIdx < 0) {\r\n                            // 没有找到要插入库存属性的地方\r\n                            return\r\n                        }\r\n\r\n                        // 删除 lotColumnIdx 这一列, 并插入批属性字段\r\n                        const pushColumns = []\r\n                        _.forEach(lots, lot => {\r\n                            /**\r\n                             * lot 字段结构\r\n                             * {\r\n                             *     \"lot_rule_id\": \"7000000001\",\r\n                             *     \"lot_field\": \"lot001\",\r\n                             *     \"lot_att_flag\": \"0001\",\r\n                             *     \"is_not_null\": \"0001\",\r\n                             *     \"oms_ref\": null,\r\n                             *     \"is_att_key\": \"0001\",\r\n                             *     \"is_val\": \"0001\",\r\n                             *     \"is_show\": \"0001\",\r\n                             *     \"ui_setting\": {\r\n                             *         \"xtype\": \"textfield\",\r\n                             *         \"editable\": true,\r\n                             *         \"fieldLabel\": \"扩展1\",\r\n                             *         \"required\": true\r\n                             *     }\r\n                             * }\r\n                             *\r\n                             * 转换为表格 column 结构\r\n                             * {\r\n                             *     xtype: 'aggridcolumn',\r\n                             *     dataIndex: 'rule_name',\r\n                             *     header: '名称',\r\n                             *     field: 'rule_name',\r\n                             *     editable: true,\r\n                             *     editor: {\r\n                             *         xtype: 'textfield',\r\n                             *         dataEnum: [\r\n                             *             {\r\n                             *                 dictValue: '1',\r\n                             *                 dictText: 'A',\r\n                             *             },\r\n                             *             {\r\n                             *                 dictValue: '2',\r\n                             *                 dictText: 'B',\r\n                             *             },\r\n                             *         ],\r\n                             *     },\r\n                             * }\r\n                             */\r\n\r\n                            const targetVJson = {\r\n                                xtype: 'aggridcolumn',\r\n                                dataIndex: lot.lot_field,\r\n                                hidden: lot.is_show !== '0001',\r\n                                header: lot.lot_field,\r\n                                editable: false,\r\n                            }\r\n\r\n                            const ui_setting = lot.ui_setting\r\n                            if (ui_setting?.xtype) {\r\n                                if (ui_setting.fieldLabel) {\r\n                                    // 字段中文\r\n                                    targetVJson.header = ui_setting.fieldLabel\r\n                                }\r\n\r\n                                if (ui_setting.xtype === 'combobox') {\r\n                                    targetVJson.dict = ui_setting.dict\r\n                                }\r\n\r\n                                if (ui_setting.editable) {\r\n                                    targetVJson.editable = true\r\n                                    targetVJson.editor = {\r\n                                        ...ui_setting,\r\n                                        allowBlank: lot.is_not_null !== '0001'\r\n                                    }\r\n\r\n                                    // 删除没用的字段\r\n                                    delete targetVJson.editor.fieldLabel\r\n                                    delete targetVJson.editor.editable\r\n                                }\r\n                            }\r\n\r\n                            pushColumns.push(targetVJson)\r\n                        })\r\n\r\n                        // 删除 lotColumnIdx 这一列, 并插入批属性字段\r\n                        columns.splice(lotColumnIdx, 1, ...pushColumns)\r\n                        console.log('columns', columns)\r\n                    }\r\n                }\r\n            )\r\n            this.vjson = finallyVjson\r\n        },\r\n\r\n        /**\r\n         * 校验所有窗口\r\n         */\r\n        validateForms() {\r\n            return new Promise((resolve, reject) => {\r\n                const cl = system.showLoadingIfButton()\r\n                Promise.all(_.map(this._innerForms, r => r.validate()))\r\n                    .then(res => {\r\n                        resolve(res)\r\n\r\n                    })\r\n                    .catch((...validRetList) => {\r\n                        system.pushCmpWithId(ValidateDialog, {\r\n                            scope: this,\r\n                            validRetList\r\n                        })\r\n                        reject(validRetList)\r\n\r\n                    })\r\n                    .finally(() => {\r\n                        if (cl) {\r\n                            cl()\r\n                        }\r\n                    })\r\n            })\r\n        },\r\n\r\n        clearForms() {\r\n            _.forEach(this._innerForms, f => {\r\n                f.resetFields()\r\n            })\r\n        }\r\n    }\r\n}","export const localeText = {\r\n    page: \"页\",\r\n    more: \"更多\",\r\n    to: \"到\",\r\n    of: \"of\",\r\n    next: \"下⼀页\",\r\n    last: \"上⼀页\",\r\n    first: \"⾸页\",\r\n    previous: \"上⼀页\",\r\n    loadingOoo: \"加载中...\",\r\n    selectAll: \"查询全部\",\r\n    searchOoo: \"查询...\",\r\n    blanks: \"空⽩\",\r\n    filterOoo: \"过滤...\",\r\n    applyFilter: \"保存过滤器...\",\r\n    equals: \"相等\",\r\n    notEqual: \"不相等\",\r\n    lessThan: \"⼩于\",\r\n    greaterThan: \"⼤于\",\r\n    lessThanOrEqual: \"⼩于等于\",\r\n    greaterThanOrEqual: \"⼤于等于\",\r\n    inRange: \"范围\",\r\n    contains: \"包含\",\r\n    notContains: \"不包含\",\r\n    startsWith: \"开始于\",\r\n    endsWith: \"结束于\",\r\n    group: \"组\",\r\n    columns: \"列\",\r\n    filters: \"筛选\",\r\n    rowGroupColumns: \"laPivot Cols\",\r\n    rowGroupColumnsEmptyMessage: \"la drag cols to group\",\r\n    valueColumns: \"laValue Cols\",\r\n    pivotMode: \"laPivot-Mode\",\r\n    groups: \"laGroups\",\r\n    values: \"值\",\r\n    pivots: \"laPivots\",\r\n    valueColumnsEmptyMessage: \"la drag cols to aggregate\",\r\n    pivotColumnsEmptyMessage: \"la drag here to pivot\",\r\n    toolPanelButton: \"la tool panel\",\r\n    noRowsToShow: \"数据为空\",\r\n    pinColumn: \"固定\",\r\n    valueAggregation: \"laValue Agg\",\r\n    autosizeThiscolumn: \"自动调整宽度\",\r\n    autosizeAllColumns: \"自动调整所有字段宽度\",\r\n    groupBy: \"分组\",\r\n    ungroupBy: \"不分组\",\r\n    resetColumns: \"重置列\",\r\n    expandAll: \"展开全部\",\r\n    collapseAll: \"关闭\",\r\n    toolPanel: \"⼯具⾯板\",\r\n    export: \"导出\",\r\n    csvExport: \"导出为CSV格式⽂件\",\r\n    excelExport: \"导出到Excel\",\r\n    pinLeft: \"左固定 &lt;&lt;\",\r\n    pinRight: \"右固定 &gt;&gt;\",\r\n    noPin: \"不要固定\",\r\n    sum: \"总数\",\r\n    min: \"最⼩值\",\r\n    max: \"最⼤值\",\r\n    none: \"⽆\",\r\n    count: \"总\",\r\n    average: \"平均值\",\r\n    copy: \"复制\",\r\n    copyWithHeaders: \"带表头复制\",\r\n    copyWithGroupHeaders: '带分组表头复制',\r\n    ctrlC: \"ctrl + C\",\r\n    paste: \"粘贴\",\r\n    ctrlV: \"ctrl + V\"\r\n}","export default {\r\n    name: 'resizeTo',\r\n    mounted(el, binding) {\r\n        // 这里使用debounce防抖处理，防抖的延时时间可以通过自定义指令的参数传过来，如`v-resize:300`表示300ms延时\r\n        // 也可以将此处延时去掉，放在绑定的函数中自定义\r\n        function debounce(getRefFn, delay = 300) {\r\n            let t = null\r\n            return function () {\r\n                if (t) {\r\n                    clearTimeout(t)\r\n                }\r\n                const context = this\r\n                t = setTimeout(function () {\r\n                    if (typeof getRefFn === 'function') {\r\n                        const yvgrid = getRefFn()\r\n                        if (yvgrid) {\r\n                            yvgrid.setSizeBy(el)\r\n                        }\r\n                    }\r\n                }, delay)\r\n            }\r\n        }\r\n\r\n        el._resizer = new window.ResizeObserver(debounce(binding.value, Number(binding.arg) || 300))\r\n        el._resizer.observe(el)\r\n    },\r\n    unmounted(el) {\r\n        el._resizer.disconnect()\r\n    },\r\n}","import $ from 'jquery'\r\n\r\nexport default {\r\n    name: 'clickOutside2',\r\n    mounted(el, binding) {\r\n        function clickHandler(e) {\r\n            // 这里判断点击的元素是否是本身，是本身，则返回\r\n            if (el.contains(e.target)) {\r\n                return false;\r\n            }\r\n            if ($(e.target).closest('.el-popper').length > 0) {\r\n                return false;\r\n            }\r\n            // 判断指令中是否绑定了函数\r\n            if (typeof binding.value === 'function') {\r\n                // 如果绑定了函数 则调用那个函数，此处binding.value就是handleClose方法\r\n                binding.value(e);\r\n            }\r\n        }\r\n\r\n        // 给当前元素绑定个私有变量，方便在unbind中可以解除事件监听\r\n        el.__vueClickOutside__ = clickHandler;\r\n        document.addEventListener('mousedown', clickHandler);\r\n    },\r\n    unmounted(el) {\r\n        document.removeEventListener('mousedown', el.__vueClickOutside__);\r\n        delete el.__vueClickOutside__;\r\n    },\r\n}","import {nextTick} from 'vue'\r\nimport {\r\n    calcClass,\r\n    calcStyle,\r\n    calcStyleAndWidth,\r\n    runEvent,\r\n    runExpress,\r\n    evalSetBind,\r\n    evalGetBind\r\n} from '../yv-utils'\r\nimport {getRuntimeCmp, getRuntimeCmpDebug} from '../design/yv-designer-desc'\r\nimport _ from \"lodash\";\r\nimport VJsonContext from \"./VJsonContext\";\r\nimport EventBus from \"../../event-bus\";\r\nimport {renderIcon} from \"../../utils\";\r\n\r\n/**\r\n * 公共混入方法\r\n */\r\nexport default {\r\n    props: {\r\n        vcxt: VJsonContext,\r\n        vjson: Object,\r\n        dialogScope: Object,\r\n        parentComponent: {type: Object, required: false},\r\n        parentList: {type: Array, required: false},\r\n        indexOfParentList: {type: Number, required: false},\r\n    },\r\n    data() {\r\n        let hidden = this.vjson.hidden ?? false\r\n\r\n        if (typeof window['$security']?.hasAnyPermissions === 'function' &&\r\n            _.isArray(this.vjson.permissions) &&\r\n            _.size(this.vjson.permissions) > 0) {\r\n\r\n            if (!window['$security']?.hasAnyPermissions(...this.vjson.permissions)) {\r\n                hidden = true\r\n            }\r\n        }\r\n\r\n        return {\r\n            _destroyed: true,\r\n            hidden: hidden\r\n            // _timeId: _.uniqueId('_time')\r\n        }\r\n    },\r\n    created() {\r\n        // console.time(this._timeId)\r\n        this._destroyed = false\r\n        const reference = this.vjson.reference\r\n        if (reference) {\r\n            // 在模型中挂接实体类\r\n            _.set(this.vcxt.scope.$data, 'refs.' + reference, this)\r\n        }\r\n    },\r\n    mounted() {\r\n        /**\r\n         * 解析所有 bind 中带有的表达式\r\n         * {\r\n         *     value: \"{a.b}\",      // value 忽略\r\n         *     disabled: \"{calcProp1}\"  // 解析为 return this.calcProp1\r\n         *     readonly: \"return this.calc1 - this.calc2\" // 解析为 express 表达式EVAL即可\r\n         * }\r\n         */\r\n        nextTick(() => {\r\n            this.runEvent('afterrender')\r\n        })\r\n        this.stopList = []\r\n        _.forOwn(this.vjson.bind, (express, property) => {\r\n            if (property === 'value' && _.startsWith(express, \"{\")) {\r\n                // value 属性，以大括号开头的是 Ext 表达式语法，该属性是由 bindValue 解析使用，可以忽略\r\n                return\r\n            }\r\n\r\n            if (_.startsWith(express, \"{\")) {\r\n                if (_.endsWith(express, \"}\")) {\r\n                    // 剔除花括号\r\n                    express = express.substring(1, express.length - 1)\r\n\r\n                    // 检查有没有其他符号\r\n                    if (express.includes('+') || express.includes('-') || express.includes('(') ||\r\n                        express.includes(')') || express.includes('*') || express.includes('/') ||\r\n                        express.includes('{') || express.includes('}') || express.includes(' ')) {\r\n                        console.error('错误表达式:' + express)\r\n                        return\r\n                    }\r\n                    express = \"return this.\" + express + \";\"\r\n\r\n                } else {\r\n                    console.error('错误表达式:' + express)\r\n                    return\r\n                }\r\n            }\r\n\r\n            const stopHandle = this.$watch(() => {\r\n                return runExpress(express, this)\r\n            }, (calcValue) => {\r\n                this[property] = calcValue\r\n            }, {immediate: true})\r\n\r\n            this.stopList.push(stopHandle)\r\n        })\r\n\r\n        // this.$nextTick(() => {\r\n        //     if (this.vjson.xtype) {\r\n        //         console.timeLog(this._timeId, 'vjson-' + this.vjson.xtype)\r\n        //     } else if (this.vjson.layout) {\r\n        //         console.timeLog(this._timeId, 'layout-' + this.vjson.layout)\r\n        //     } else if (_.isArray(this.vjson)) {\r\n        //         console.timeLog(this._timeId, 'array-' + _.size(this.vjson))\r\n        //     }\r\n        // })\r\n    },\r\n    unmounted() {\r\n        this._destroyed = true\r\n        nextTick(() => {\r\n            this.runEvent('destory')\r\n        })\r\n\r\n        // 释放所有 bind 属性绑定\r\n        _.forEach(this.stopList, (handler) => {\r\n            handler()\r\n        })\r\n\r\n        const reference = this.vjson.reference\r\n        if (reference) {\r\n            // 在模型中挂接实体类\r\n            if (this.vcxt.scope.$data.refs) {\r\n                delete this.vcxt.scope.$data.refs[reference]\r\n            }\r\n        }\r\n    },\r\n    computed: {\r\n        realValue() {\r\n            // let bindValue = this.bind?.value\r\n            // if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n            //     bindValue = bindValue.substring(1, bindValue.length - 1)\r\n            //     return _.get(this.vcxt.scope.$data, bindValue)\r\n            // }\r\n            let v = evalGetBind(this, 'value')\r\n            if (typeof v === 'number') {\r\n                if (v === 0) {\r\n                    v = ''\r\n                } else {\r\n                    v = v + ''\r\n                }\r\n            }\r\n\r\n            if (this.vjson.multiple) {\r\n                if (!v) {\r\n                    return []\r\n                } else {\r\n                    return _.split(v, ',')\r\n                }\r\n            }\r\n            return v\r\n        },\r\n        calcClass() {\r\n            return calcClass(this.vjson)\r\n        },\r\n\r\n        calcStyle() {\r\n            return calcStyle(this.vjson)\r\n        },\r\n\r\n        calcStyleAndWidth() {\r\n            return calcStyleAndWidth(this.vjson)\r\n        },\r\n    },\r\n    methods: {\r\n        getRuntimeCmp,\r\n        renderIcon,\r\n        _getFormItemBaseRule(vjson) {\r\n            const rules = []\r\n            if (vjson.required) {\r\n                let message\r\n                if (vjson.fieldLabel) {\r\n                    message = '\"' + vjson.fieldLabel + '\" 不能为空'\r\n                } else {\r\n                    message = '不能为空'\r\n                }\r\n                // rules.push({required: true, message: message, fieldLabel: vjson.fieldLabel, trigger: 'change',})\r\n                rules.push({\r\n                    validator: ({field, fieldLabel, fullField, message, type}, value, callback, kv, opt) => {\r\n                        let ret = true\r\n                        if (typeof value === 'undefined' || value === null) {\r\n                            ret = false\r\n                        } else if (typeof value === 'string' && ('' + value).length <= 0) {\r\n                            ret = false\r\n                        }\r\n\r\n                        if (ret) {\r\n                            // 验证通过\r\n                            callback()\r\n                        } else {\r\n                            callback(new Error(message))\r\n                        }\r\n                        return ret\r\n                    }, required: true,\r\n                    message: message, trigger: 'change',\r\n                })\r\n            }\r\n\r\n            return rules;\r\n        },\r\n        _onFocus(e) {\r\n            // getListener(this.vjson, 'focus', this.vcxt)(this, this.vcxt.scope, e)\r\n            this.runEvent('focus', ...arguments)\r\n        },\r\n        _onBlur(e) {\r\n            // getListener(this.vjson, 'blur', this.vcxt)(this, this.vcxt.scope, e)\r\n            this.runEvent('blur', ...arguments)\r\n        },\r\n\r\n        _onValueChange(value) {\r\n            // let bindValue = this.bind?.value\r\n            // if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n            //     bindValue = bindValue.substring(1, bindValue.length - 1)\r\n            //     _.set(this.vcxt.scope.$data, bindValue, value)\r\n            // }\r\n            if (this.vjson.multiple) {\r\n                value = _.join(value, ',')\r\n            }\r\n            evalSetBind(this, 'value', value)\r\n        },\r\n\r\n        /**\r\n         * 在运行时，运行 VJson 的对应事件, vjson 对事件的定义有两种方法\r\n         * {\r\n         *     xtype: 'button',\r\n         *     listeners: {\r\n         *         click: '{btn1_click}',   // 自动替换为下面\r\n         *         click: 'this.btn1_click()',  // 直接运行 EVAL\r\n         *     }\r\n         * }\r\n         *\r\n         *\r\n         * @param eventName 事件名称\r\n         * @param args 事件参数\r\n         */\r\n        runEvent(eventName, ...args) {\r\n            runEvent(this.vcxt.scope, this.vjson, eventName, ...args)\r\n        },\r\n\r\n    },\r\n}","<template>\r\n  <div class=\"yv-row-container\">\r\n    <component v-for=\"(item,idx) in vjson\"\r\n               :is=\"getRuntimeCmp(item)\"\r\n               :key=\"idx\"\r\n               :vjson=\"item\"\r\n               :vcxt=\"vcxt\"\r\n               :dialog-scope=\"dialogScope\"\r\n               :parent-component=\"vjson\"\r\n               :parent-list=\"vjson\"\r\n               :index-of-parent-list=\"idx\"\r\n    />\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport {getRuntimeCmp} from \"../design/yv-designer-desc\";\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  data() {\r\n    return {\r\n    }\r\n  },\r\n  methods: {\r\n    getRuntimeCmp\r\n  }\r\n}\r\n\r\n</script>","const common: any = {\r\n    hidden: false,\r\n    disabled: false,\r\n    loading: false,\r\n    cls: '',\r\n}\r\n\r\nconst commonField: any = {\r\n    ...common,\r\n    fieldLabel: '',\r\n    placeholder: '请输入',\r\n    size: 'default',\r\n    loading: false,\r\n    readonly: false,\r\n    weight: 1,\r\n}\r\n\r\nexport const Source: any = {\r\n    ...common,\r\n    language: 'sql',\r\n    readonly: false\r\n}\r\n\r\nexport const Tabs: any = {\r\n    ...common,\r\n    defaultActiveName: 'tab_0',\r\n    tabPosition: 'top',\r\n    stretch: false,\r\n    closable: false,\r\n    type: '',\r\n    items: [],\r\n    isBorder: ['0px', '0px', '0px', '0px']\r\n}\r\n\r\nexport const Split: any = {\r\n    ...common,\r\n    defaultSize: 50,\r\n    direction: 'horizontal',\r\n    hiddenSplit: false,\r\n    items: [],\r\n    title1: '',\r\n    title2: '',\r\n    collapse1: false,\r\n    collapse2: false,\r\n    isBorder: ['0px', '0px', '0px', '0px']\r\n}\r\n\r\nexport const Tab: any = {\r\n    ...common,\r\n    items: [],\r\n    isBorder: ['0px', '0px', '0px', '0px']\r\n}\r\n\r\nexport const Button: any = {\r\n    ...common,\r\n    text: '',\r\n    type: 'default',\r\n    plain: false,\r\n    round: false,\r\n    circle: false,\r\n    link: false,\r\n    loading: false,\r\n    size: 'default',\r\n    iconCls: undefined,\r\n}\r\n\r\nexport const Toolbar: any = {\r\n    ...common,\r\n    alignRight: false,\r\n    isFlat: true,\r\n    isBorder: ['0px', '0px', '0px', '0px'],\r\n    items: []\r\n}\r\n\r\nexport const Tree: any = {\r\n    ...common,\r\n    keepExpandKeys: false,\r\n    defaultExpandAll: false,\r\n    checkStrictly: true,\r\n    checkbox: false,\r\n    data: [],\r\n    isBorder: ['0px', '0px', '0px', '0px']\r\n}\r\n\r\nexport const Cols: any = {\r\n    ...common,\r\n    gutter: 0,\r\n    items: []\r\n}\r\n\r\nexport const Divider: any = {\r\n    ...common,\r\n    direction: 'horizontal',\r\n    borderStyle: 'solid',\r\n    contentPosition: 'center',\r\n}\r\n\r\nexport const DividerFormitem: any = {\r\n    ...common,\r\n    borderStyle: 'solid',\r\n    contentPosition: 'center',\r\n}\r\n\r\nexport const List: any = {\r\n    ...common,\r\n    rows: []\r\n}\r\nexport const Gridcheck: any = {\r\n    ...common,\r\n}\r\nexport const Form: any = {\r\n    ...common,\r\n    colsOfRow: 2,\r\n    scrollable: false,\r\n    size: 'default',\r\n    gutter: '',\r\n    labelPosition: 'right',\r\n    inlineMessage: true,\r\n    showMessage: true,\r\n    labelWidth: '',\r\n    validateOnRuleChange: true,\r\n    allowShrink: true,\r\n    shrink: true,\r\n    isBorder: ['0px', '0px', '0px', '0px'],\r\n    items: [],\r\n}\r\n\r\nexport const baseFormItem: any = {\r\n    fieldLabel: '',\r\n    required: false,\r\n    labelWidth: undefined\r\n}\r\n\r\nexport const Textfield: any = {\r\n    ...commonField,\r\n}\r\n\r\nexport const Checkbox: any = {\r\n    ...commonField,\r\n    convType: 'bool'\r\n}\r\n\r\nexport const Staticfield: any = {\r\n    ...commonField,\r\n    text: '',\r\n}\r\n\r\nexport const Numberfield: any = {\r\n    ...commonField,\r\n}\r\n\r\nexport const Filefield: any = {\r\n    ...commonField,\r\n}\r\n\r\nexport const Radiogroup: any = {\r\n    ...commonField,\r\n    displayField: 'text',\r\n    valueField: 'id',\r\n    border: false\r\n}\r\n\r\nexport const Combo: any = {\r\n    ...commonField,\r\n    displayField: 'text',\r\n    valueField: 'id',\r\n    data: []\r\n}\r\n\r\nexport const Combosearch: any = {\r\n    ...commonField,\r\n    allowCustomInput: false,\r\n}\r\n\r\nexport const Combogrid: any = {\r\n    ...commonField,\r\n    allowCustomInput: false,\r\n    widget: undefined,\r\n    param: {},\r\n    lookup: {},\r\n}\r\n\r\nexport const Datefield: any = {\r\n    ...commonField,\r\n    type: 'date'\r\n}\r\n\r\nexport const Datetimefield: any = {\r\n    ...commonField,\r\n    type: 'datetime'\r\n}\r\n\r\nexport const Treefield: any = {\r\n    ...commonField,\r\n    filterable: true,\r\n    showCheckbox: false,\r\n    checkStrictly: true,\r\n}\r\n\r\nexport const Alert: any = {\r\n    ...common,\r\n    type: '',\r\n    title: '',\r\n    description: undefined,\r\n    showIcon: false,\r\n    center: false,\r\n    closeText: '',\r\n    closable: true,\r\n}\r\n\r\nexport const Aggrid: any = {\r\n    ...common,\r\n    height: '300px',\r\n    pagination: true,\r\n    pageSize: 50,\r\n    autoLoad: false,\r\n    rowNumber: false,    // 序号列\r\n    hiLightSelectedRow: false,\r\n    isBindMode: false,\r\n    rowDragable: false,\r\n    pageSizeOption: [\r\n        {value: '20',},\r\n        {value: '50',},\r\n        {value: '100',},\r\n        {value: '200',},\r\n        {value: '300',},\r\n        {value: '500',},\r\n        {value: '1000',},\r\n        {value: '10000',},\r\n    ],\r\n    hideFooterToolbar: false, // 隐藏底部按钮\r\n    hideFooterToolbarRefresh: false, // 隐藏底部刷新按钮\r\n    hideFooterToolbarRowCount: false, // 隐藏底部行数统计\r\n    hideFooterToolbarExcelExport: false, // 隐藏底部导出按钮\r\n    hideFooterToolbarExcelImport: false,\r\n    hideFooterToolbarFilter: false, // 隐藏底部筛选按钮\r\n}\r\n\r\nexport const XTypeName: any = {\r\n    button: '按钮',\r\n    combo: '下拉框',\r\n    combogrid: '数据窗口',\r\n    datefield: '日期输入框',\r\n    datetimefield: '日期事件输入框',\r\n    tabs: '选项卡',\r\n    form: '表单',\r\n    textfield: '文本输入框',\r\n    toolbar: '工具条',\r\n    yvgrid: '增强表格',\r\n    gridcolumn: '字段',\r\n}\r\n\r\nexport const Exprform: any = {\r\n    ...common,\r\n    exprType: 'program',\r\n    language: 'java',\r\n    readonly: false\r\n}\r\n\r\nexport const Editorprop: any = {\r\n    ...common,\r\n    columnName: '',\r\n    columnComment: '',\r\n}\r\n\r\nexport const Dialog: any = {\r\n    title: '对话框',\r\n    width: '50%',\r\n    fullscreen: false,\r\n    isShow: false,\r\n    draggable: true,\r\n    closeOnClickModal: true,\r\n    closeOnPressEscape: true,\r\n    showClose: true,\r\n    modal: true,\r\n    headerReference: '',\r\n    footerReference: '',\r\n}\r\n\r\nexport const Drawer: any = {\r\n    title: '抽屉',\r\n    size: '50%',\r\n    closeOnClickModal: true,\r\n    closeOnPressEscape: true,\r\n    direction: 'rtl',\r\n    isShow: false,\r\n    showClose: true,\r\n    modal: true,\r\n    headerReference: '',\r\n    footerReference: '',\r\n}","import _ from 'lodash'\r\nimport {toRaw} from 'vue'\r\nimport {getGlobalVariableByName} from \"../design/yv-designer-desc\";\r\n\r\nexport const SIMPLE_RE = /^(?:\\{(?:(\\d+)|([a-z_][\\w\\.]*))\\})$/i\r\n\r\nexport function lookupScope(extHandle: any): any {\r\n    if (!extHandle) {\r\n        // @ts-ignore\r\n        return\r\n    }\r\n    return extHandle.scope\r\n}\r\n\r\nexport function lookupFn(vcxt: any, event: string, errorWho?: any): Function {\r\n    if (isDesignMode(vcxt, undefined)) {\r\n        return Ext.emptyFn\r\n    }\r\n\r\n    if (!_.startsWith(event, '{') && !_.endsWith(event, '}')) {\r\n        console.error('无法识别的事件响应类型', event)\r\n        throw new TypeError('无法识别的事件响应类型')\r\n    }\r\n\r\n    const eventName = event.substring(1, event.length - 1)\r\n    const funcResult = vcxt.scope[eventName]\r\n\r\n    if (typeof funcResult !== 'function') {\r\n        console.error('无法找到事件', event, vcxt, errorWho)\r\n        // throw new TypeError('无法识别的事件响应类型')\r\n        return () => {\r\n        }\r\n    }\r\n\r\n    // if (!_.startsWith(event, 'scope.') &&\r\n    //     !_.startsWith(event, 'system.') &&\r\n    //     !_.startsWith(event, 'format.')) {\r\n    //     console.error('无法识别的事件响应类型', event)\r\n    //     throw new TypeError('无法识别的事件响应类型')\r\n    // }\r\n    //\r\n    // // 为 eval 准备环境\r\n    // const system = {}\r\n    // const format = {} // window['yvanLib']\r\n    //\r\n    // const keys: any[] = []\r\n    // const values: any[] = []\r\n    // _.forOwn(scope, (value, key) => {\r\n    //     const idxKey = key.indexOf('//')\r\n    //     if (idxKey >= 0) {\r\n    //         keys.push(key.substr(0, idxKey))\r\n    //     } else {\r\n    //         keys.push(key)\r\n    //     }\r\n    //     values.push(value)\r\n    // })\r\n    //\r\n    // const func: Function = //eval(event)\r\n    //     Function('scope', 'system', 'format', ...keys, 'return ' + event)\r\n    //\r\n    // const funcResult = func(scope, system, format, ...values)\r\n    //\r\n    // if (typeof funcResult !== 'function') {\r\n    //     console.error('无法识别的事件响应类型', event, func, errorWho)\r\n    //     throw new TypeError('无法识别的事件响应类型')\r\n    // }\r\n\r\n    return funcResult\r\n}\r\n\r\nexport function isDesignMode(control: any, config: any) {\r\n    return false\r\n}\r\n\r\nexport function isEmpty(value: any): Boolean {\r\n    if (typeof value === 'undefined' || value === null) {\r\n        return true\r\n    }\r\n    if (typeof value === 'number' && isNaN(value)) {\r\n        return true\r\n    }\r\n    if (value === 'N/A') {\r\n        return true\r\n    }\r\n    return (\"\" + value).trim().length <= 0\r\n}\r\n\r\nexport function toString(value: any): String {\r\n    if (typeof value === 'undefined' || value === null) {\r\n        return \"\"\r\n    }\r\n    if (typeof value === 'number' && isNaN(value)) {\r\n        return \"\"\r\n    }\r\n    if (value === 'N/A') {\r\n        return \"\"\r\n    }\r\n    return (\"\" + value)\r\n}\r\n\r\nexport function createUUID(): String {\r\n    //@ts-ignore\r\n    return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>\r\n        (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)\r\n    );\r\n}\r\n\r\n/**\r\n * 尝试根据含表达式的对象回写, calcObjectFlat 的逆向方法\r\n * @example\r\n * tryWriteObject({ a:'{query.a}', b:{b1:'{query.b1}', b2:'{query.b2}'},c:'aa',d:['{query.d1}','{query.d2}']}, {a:'aValue', b:{b1:'b1Value', b2:'b2Value'}, c:'aa', d:[1,2]})\r\n *\r\n * expressObject:\r\n * {\r\n *     a: '{query.a}',\r\n *     b: {\r\n *         b1: '{query.b1}',\r\n *         b2: '{query.b2}',\r\n *     },\r\n *     c: 'aa',\r\n *     d: [\r\n *         '{query.a}',\r\n *         '{query.b2}'\r\n *     ]\r\n * }\r\n *\r\n * valueObject:\r\n * {\r\n *     a: 'aValue',\r\n *     b: {\r\n *         b1: 'b1Value',\r\n *         b2: 'b2Value'\r\n *     },\r\n *     c: 'aa'\r\n *     c: [\r\n *         'aValue',\r\n *         'b2Value'\r\n *     ]\r\n * }\r\n *\r\n * 系统会尝试回写\r\n * viewModel.set('query.a', 'aValue')\r\n * viewModel.set('query.b1', 'b1Value')\r\n * viewModel.set('query.b2', 'b2Value')\r\n *\r\n * @param expressObject 含表达式的对象\r\n * @param valueObject 表达式计算完成之后的结果对象\r\n * @param writeFn 写入的方法 (path, value)=>void\r\n */\r\nexport function tryWriteObject(expressObject, valueObject, writeFn) {\r\n\r\n    const trav = (pathPrefix) => {\r\n        let parent = expressObject\r\n        if (_.size(pathPrefix) > 1) {\r\n            parent = _.get(parent, pathPrefix.substring(1))\r\n        }\r\n        _.forOwn(parent, (value, key) => {\r\n            if (_.isPlainObject(value)) {\r\n                // 深度递归，对子对象进行求解\r\n                trav(pathPrefix + \".\" + key)\r\n\r\n            } else if (_.isString(value)) {\r\n                // 字符串直接用 calcExpress 表达式求解\r\n                if (SIMPLE_RE.test(value)) {\r\n                    // If we have '{foo}' alone it is a literal 简单表达式\r\n                    const targetPath = value.substring(1, value.length - 1);\r\n                    const targetValue = _.get(valueObject, (pathPrefix + \".\" + key).substr(1))\r\n                    if (!writeFn) {\r\n                        console.log(`viewModel.set('${targetPath}', '${targetValue}')`)\r\n                    } else {\r\n                        writeFn(targetPath, targetValue)\r\n                    }\r\n                }\r\n            } else if (_.isArray(value)) {\r\n                _.each(value, (v, idx) => {\r\n                    if (SIMPLE_RE.test(v)) {\r\n                        const targetPath = (pathPrefix + \".\" + key).substr(1) + \"[\" + idx + \"]\";\r\n                        const targetValue = _.get(valueObject, (pathPrefix + \".\" + key).substr(1) + \"[\" + idx + \"]\")\r\n                        if (!writeFn) {\r\n                            console.log(`viewModel.set('${targetPath}', '${targetValue}')`)\r\n                        } else {\r\n                            writeFn(targetPath, targetValue)\r\n                        }\r\n                    }\r\n                })\r\n            }\r\n        })\r\n    }\r\n\r\n    trav(\"\")\r\n}\r\n\r\n/**\r\n * 尝试去掉变量两边括号\r\n * {a} => a\r\n * a => a\r\n */\r\nexport function tryVarSimple(value) {\r\n    if (SIMPLE_RE.test(value)) {\r\n        // If we have '{foo}' alone it is a literal 简单表达式\r\n        return value.substring(1, value.length - 1);\r\n    }\r\n    return value\r\n}\r\n\r\n/**\r\n * 对个对象进行表达式求值，不用回调\r\n * @example\r\n * calcObjectFlat({query:{a:'aValue',b1:'b1Value',b2:'b2Value',d1:1,d2:2}}, { a:'{query.a}', b:{b1:'{query.b1}', b2:'{query.b2}'},c:'aa',d:['{query.d1}','{query.d2}'] })\r\n *\r\n * {\r\n *     a: '{query.a}',\r\n *     b: {\r\n *         b1: '{query.b1}',\r\n *         b2: '{query.b2}',\r\n *     },\r\n *     c: 'aa',\r\n *     d: [\r\n *         '{query.d1}',\r\n *         '{query.d2}'\r\n *     ]\r\n * }\r\n *\r\n * 计算结果为\r\n * {\r\n *     a: 'aValue',\r\n *     b: {\r\n *         b1: 'b1Value',\r\n *         b2: 'b2Value'\r\n *     },\r\n *     c: 'aa'\r\n *     d: [\r\n *         '1',\r\n *         '2'\r\n *     ]\r\n * }\r\n *\r\n * @param data\r\n * @param paramObject\r\n * @param cb 回调函数 (express, value)=>newValue\r\n */\r\nexport function calcObjectFlat(model, paramObject, cb) {\r\n    const result = _.cloneDeep(paramObject)\r\n\r\n    if (typeof paramObject === 'string') {\r\n        return calcExpress(model, paramObject)\r\n    }\r\n\r\n    const trav = (param) => {\r\n        _.forOwn(param, (value, key) => {\r\n            if (_.isPlainObject(value)) {\r\n                // 深度递归，对子对象进行求解\r\n                trav(value)\r\n\r\n            } else if (_.isString(value)) {\r\n                // 字符串直接用 calcExpress 表达式求解\r\n                let newValue = calcExpress(model, param[key])\r\n                if (cb) {\r\n                    newValue = cb(param[key], newValue)\r\n                }\r\n                param[key] = newValue\r\n\r\n            } else if (_.isArray(value)) {\r\n                // 数组求解\r\n                _.each(value, (v, idx) => {\r\n                    let newValue = calcExpress(model, v)\r\n                    if (cb) {\r\n                        newValue = cb(param[key], newValue)\r\n                    }\r\n                    value[idx] = newValue\r\n                })\r\n            }\r\n        })\r\n    }\r\n\r\n    trav(result)\r\n    return result\r\n}\r\n\r\n\r\n/**\r\n * 对某个表达式进行求值\r\n * a:{query.a},b:{query.b} -> a:aValue,b:bValue\r\n *\r\n * @example\r\n * calcExpress(cc.viewModel.data, \"WH_ID:{query.WH_ID},C:{theGrid.selection.data.WH_ID}\")\r\n * 计算出来的值是: \"WH_ID:queryWhId,C:JH000000001\"\r\n *\r\n * @param data 数据环境对象\r\n * @param express 表达式对象\r\n */\r\nexport function calcExpress(data, express) {\r\n    let result = express\r\n\r\n    if (SIMPLE_RE.test(express)) {\r\n        // '{foo}' 简单表达式\r\n        const path = express.substring(1, express.length - 1);\r\n        let ret = undefined\r\n        if (path.startsWith('global.')) {\r\n            const name = path.substring('global.'.length)\r\n            const vd = getGlobalVariableByName(name)\r\n            if (!vd) {\r\n                console.error(\"can't found global define:\" + name)\r\n                return undefined\r\n            }\r\n            ret = vd.getValue()\r\n\r\n        } else {\r\n            ret = toRaw(_.get(data, path))\r\n        }\r\n        return ret\r\n    }\r\n\r\n    while (true) {\r\n        const mlist = result.match(/{(.*?)}/)\r\n        if (!mlist) {\r\n            break\r\n        }\r\n\r\n        const pathC = mlist[0]  // {query.a}\r\n        const path = mlist[1]  // query.a\r\n\r\n        let value = _.get(data, path)\r\n        result = result.replaceAll(pathC, _.toString(value))\r\n    }\r\n\r\n    return result\r\n}\r\n\r\n\r\n/**\r\n * 动态的为 combo 或 columns.combo 设置下拉框的值\r\n * @param sender 目标对象\r\n * @param config 目标对象的配置（在构造函数之前也可以）\r\n * @param getDictFn 获取字典的方法\r\n * @param bizKey 传入字典的参数\r\n * @param multiValueSeparator 多个字典值的分割符号\r\n */\r\nexport function setComboStore(sender, config, getDictFn, bizKey, multiValueSeparator = \"\") {\r\n    // sender 和 config为空的时候获取值、\r\n    if (_.isArray(getDictFn)) {\r\n        // 如果 getDictFn 是直接给定的值，就造一个异步回调的方法\r\n        const realArray = getDictFn\r\n        getDictFn = () => {\r\n            return realArray\r\n        }\r\n    }\r\n\r\n    if (!sender) {\r\n        new Promise((resolve, reject) => {\r\n            getDictFn(bizKey, (r) => {\r\n                resolve({config, r})\r\n            })\r\n        }).finally(() => {\r\n        })\r\n    }\r\n    if (sender.xtype === 'combotree') {\r\n        getDictFn(bizKey, (r) => {\r\n            if (sender.store) {\r\n                // 异步回传\r\n                sender.setStore(new Ext.data.TreeStore({root: r}))\r\n\r\n            } else {\r\n                // 同步回传\r\n                config.store = new Ext.data.TreeStore({root: r})\r\n            }\r\n        })\r\n        return\r\n\r\n    } else if (sender.$className === 'Ext.form.field.ComboBox' || sender.$className === 'Ext.form.field.Tag') {\r\n        getDictFn(bizKey, (r) => {\r\n            if (sender.store) {\r\n                // 异步回传\r\n                sender.setStore(new Ext.data.Store(r))\r\n                // 这里有个bug, 异步回传完毕之后, 需要强制刷新一下\r\n                // 否则在 forceSelection 的模式下。displayField 不会强制做变更\r\n                const realValue = sender.bind?.value?.getValue()\r\n                if (typeof realValue !== 'undefined') {\r\n                    sender.setValue(realValue)\r\n                }\r\n\r\n            } else {\r\n                // 同步回传\r\n                config.store = new Ext.data.Store(r)\r\n            }\r\n        })\r\n        return\r\n\r\n    } else if (sender.xtype === 'gridcolumn') {\r\n        const grid = getParentGrid(config)\r\n        const {editor, renderer} = config\r\n        getDictFn(bizKey, (r) => {\r\n            if (sender.store) {\r\n                // 已经渲染出来了, 用方法进行修改\r\n                const editor = sender.getEditor()\r\n                if (editor && editor.xtype === 'combo') {\r\n                    const valueField = r.field[0]\r\n                    const displayField = r.field[1]\r\n                    editor.valueField = valueField\r\n                    editor.setDisplayField(displayField)\r\n                    editor.setStore(new Ext.data.Store(r))\r\n                }\r\n                sender.setFilter({\r\n                    type: 'list',\r\n                    options: _.map(r.data, r => ({\r\n                        id: '' + r.id,\r\n                        text: r.text,\r\n                    }))\r\n                })\r\n\r\n            } else {\r\n                // 没有渲染之前，修改 config 即可\r\n                if (editor && editor.xtype === 'combo') {\r\n                    const valueField = r.field[0]\r\n                    const displayField = r.field[1]\r\n                    editor.valueField = valueField\r\n                    editor.displayField = displayField\r\n                    editor.store = new Ext.data.Store(r)\r\n                }\r\n                config.filter = {\r\n                    type: 'list',\r\n                    options: _.map(r.data, r => ({\r\n                        id: '' + r.id,\r\n                        text: r.text,\r\n                    }))\r\n                }\r\n            }\r\n\r\n            // 当 metaData === true 表示反向取字典 （根据字典显示值获取id值）\r\n            const renderer = (value, metaData: boolean = false) => {\r\n                if (!value && value != 0) {\r\n                    return ''\r\n                }\r\n                const valueField = r.field[metaData === true ? 1 : 0]\r\n                const displayField = r.field[metaData === true ? 0 : 1]\r\n                const separator = multiValueSeparator\r\n                if (separator) {\r\n                    const arr = value.split(separator)\r\n                    let displayValue = \"\"\r\n                    for (let i = 0; i < arr.length; i++) {\r\n                        const itv = arr[i]\r\n                        if (i > 0) {\r\n                            displayValue += separator\r\n                        }\r\n                        let j = 0\r\n                        _.each(r.data, row => {\r\n                            // 从 valueField 找到要显示的 displayField\r\n                            if (row[valueField] == itv) {\r\n                                displayValue += row[displayField]\r\n                                return false\r\n                            } else {\r\n                                if (i >= r.data.length - 1) {\r\n                                    displayValue += itv\r\n                                }\r\n                            }\r\n                            j++\r\n                        })\r\n                    }\r\n                    return displayValue\r\n                }\r\n                _.each(r.data, row => {\r\n                    // 从 valueField 找到要显示的 displayField\r\n                    if (row[valueField] == value) {\r\n                        value = row[displayField]\r\n                        return false\r\n                    }\r\n                })\r\n                return value\r\n            }\r\n\r\n            const dictForExcel: any = {}\r\n            const valueField = r.field[0]\r\n            const displayField = r.field[1]\r\n            _.each(r.data, row => {\r\n                // 从 valueField 找到要显示的 displayField\r\n                const key: any = row[valueField]\r\n                if (key != '' && typeof key != \"undefined\" && key != null) {\r\n                    dictForExcel[key] = row[displayField]\r\n                }\r\n            })\r\n\r\n            if (sender.rendered) {\r\n                // 已经渲染出来了, 对列进行渲染\r\n                sender.renderer = renderer\r\n                sender.dictForExcel = dictForExcel\r\n                sender.getView().refresh()\r\n            } else {\r\n                sender.renderer = renderer\r\n                sender.dictForExcel = dictForExcel\r\n                config.renderer = renderer\r\n                config.dictForExcel = dictForExcel\r\n            }\r\n        })\r\n        return\r\n    }\r\n    throw new TypeError(\"无法识别的组件类型\")\r\n}\r\n\r\n/**\r\n * 用于任意组件 Ext.Component 构造时，获取当前组件对应的表格（如果不是 grid.columns 对象就会返回 undefined）\r\n * @param config 组件构造函数传入的 config 配置文件\r\n */\r\nexport function getParentGrid(config) {\r\n    return config.$initParent?.grid\r\n}\r\n\r\n\r\n/**\r\n * 适用于 Select / Tree 等，作筛选的通用方法.\r\n * 1.首字母模糊匹配（不区分大小写）\r\n * 2.标识的模糊匹配（不区分大小写）\r\n * 3.名称的模糊匹配，且支持以逗号（全角或半角）隔开的字词匹配，并自动去空格，如“南京， 物流 ”可以匹配出“南京九州通物流技术开发有限公司”\r\n */\r\nexport function keywordFilter(keyword: string, label: string, value?: string) {\r\n    if (!keyword) {\r\n        return true\r\n    }\r\n    const ws = _.trim(keyword).split(/\\s+|\\.|,|\\)|\\(|，|。|-|—/g)\r\n    // const labelPy = _.toLower(getPinyin(label))\r\n    //@ts-ignore\r\n    const labelPy = _.toLower(getFirstPinyin2(label))\r\n    value = _.toLower(_.trim(value))\r\n\r\n    let found = 0\r\n    _.some(ws, (word) => {\r\n        if (labelPy.indexOf(word.toLowerCase()) >= 0 || label.indexOf(word) >= 0) {\r\n            found++\r\n            return\r\n        }\r\n\r\n        if (value && value.indexOf(word.toLowerCase()) >= 0) {\r\n            found++\r\n            return\r\n        }\r\n    })\r\n\r\n    return found >= ws.length\r\n}\r\n\r\n\r\n/**\r\n * 通用 dataSource 解析，\r\n * Tree/Combo/Grid/PageList ... 都会从这里解析\r\n */\r\nexport function dataSourceReload(ctl: any, extraParam?: any, _successCb?: Function,\r\n                                 successCallback?: (data: any[]) => void,\r\n                                 failCallback?: (msg) => void): Promise<any> {\r\n    const {config} = ctl\r\n\r\n    return new Promise<any>((resolve, reject) => {\r\n        if (!config.dataSource) {\r\n            // 没有设置数据源，直接置空\r\n            return Promise.resolve()\r\n        }\r\n        const option: DataSourceParam = {\r\n            extraParam,\r\n            _successCb,\r\n            successCallback: (value) => {\r\n                if (typeof successCallback === \"function\") {\r\n                    successCallback(value)\r\n                } else {\r\n                    ctl.setData(value)\r\n                }\r\n                ctl.fireEvent('dataLoadComplete', ctl, true, value);\r\n                ctl.setLoading(false)\r\n                resolve(value)\r\n            },\r\n            failCallback: (error) => {\r\n                if (typeof failCallback === \"function\") {\r\n                    failCallback(error)\r\n                }\r\n                ctl.fireEvent('dataLoadComplete', ctl, false);\r\n                ctl.setLoading(false)\r\n                reject(error)\r\n            }\r\n        }\r\n\r\n        // 请求前要求确认一下\r\n        let isCanceled: boolean = false\r\n        ctl.fireEvent('dataBeforeLoad', ctl, {\r\n            cancel: () => {\r\n                isCanceled = true\r\n            },\r\n            ...option\r\n        });\r\n\r\n        if (!isCanceled) {\r\n            // 请求没有被取消\r\n            // 调用异步接口返回 Promise\r\n            return _innerReload(ctl, option)\r\n        }\r\n        return reject()\r\n    })\r\n}\r\n\r\nfunction _innerReload(ctl: any, option: DataSourceParam) {\r\n    const {config} = ctl\r\n    ctl.setLoading(true)\r\n\r\n    const scope = lookupScope(ctl)\r\n    let dataSource = config.dataSource\r\n    if (typeof dataSource == 'string') {\r\n        dataSource = lookupFn(scope, config.dataSource)\r\n    }\r\n\r\n    if (typeof dataSource === 'function') {\r\n        // @ts-ignore\r\n        dataSource.call(scope, ctl, option)\r\n        return\r\n\r\n    } else if (typeof dataSource?.url === 'string' || typeof dataSource?.sqlId === 'string') {\r\n\r\n        const params: any = {}\r\n        let sortModel: any = null;\r\n        let filterModel: any = null;\r\n        if (option.extraParam && option.extraParam.filterModel) {\r\n            filterModel = option.extraParam.filterModel;\r\n        }\r\n        if (option.extraParam && option.extraParam.sortModel) {\r\n            sortModel = option.extraParam.sortModel;\r\n        }\r\n\r\n        _.forOwn(option.extraParam, (v: any, key) => {\r\n            if (key != \"filterModel\" && key != \"sortModel\") {\r\n                if (typeof v === 'function') {\r\n                    params[key] = v()\r\n                } else {\r\n                    params[key] = v\r\n                }\r\n            }\r\n        })\r\n        const ds: DataSourceAjax<any> = dataSource\r\n\r\n        _.forOwn(ds.params, (v: any, key) => {\r\n            if (typeof v === 'function') {\r\n                params[key] = v()\r\n            } else {\r\n                params[key] = v\r\n            }\r\n        })\r\n\r\n        // if (typeof dataSource?.url === 'string') {\r\n        //\r\n        //     invokeServer(dataSource.url, {\r\n        //         method: dataSource.method,\r\n        //         url: ds.url,\r\n        //         data: params,\r\n        //         filterModel,\r\n        //         sortModel,\r\n        //     }).then(res => {\r\n        //         if (res.success) {\r\n        //             option.successCallback(res.data)\r\n        //\r\n        //         } else {\r\n        //             option.failCallback(res.msg)\r\n        //         }\r\n        //\r\n        //     }).catch(e => {\r\n        //         option.failCallback(e)\r\n        //\r\n        //     })\r\n        //\r\n        // } else if (typeof dataSource?.sqlId === 'string') {\r\n        //\r\n        //     const ds: DataSourceSql<any> = ctl.dataSource\r\n        //\r\n        //     // @ts-ignore\r\n        //     Extend.ajax.func({\r\n        //         url: ds.sqlId,\r\n        //         data: params,\r\n        //         db: ds.db,\r\n        //         method: 'sql',\r\n        //         filterModel,\r\n        //         sortModel,\r\n        //     }).then(res => {\r\n        //         if (res.success) {\r\n        //             option.successCallback(res.data)\r\n        //\r\n        //         } else {\r\n        //             option.failCallback(res.msg)\r\n        //         }\r\n        //\r\n        //     }).catch(e => {\r\n        //         option.failCallback(e)\r\n        //\r\n        //     }).finally(() => {\r\n        //         ctl.loading = false\r\n        //     })\r\n        //\r\n        //     return\r\n        // } else {\r\n        //     console.error(\"非法的 dataSource\", ctl.dataSource)\r\n        //     debugger\r\n        //     throw new Error(\"非法的 dataSource\")\r\n        // }\r\n    }\r\n}\r\n\r\nexport interface DataSourceParam {\r\n    /**\r\n     * 额外附加的参数\r\n     */\r\n    extraParam?: any\r\n\r\n    /**\r\n     * 成功后额外的调用\r\n     */\r\n    _successCb?: Function\r\n\r\n    /**\r\n     * 设置响应成功的数据\r\n     */\r\n    successCallback: (data: any[]) => void\r\n\r\n    /**\r\n     * 设置响应失败\r\n     * @param msg 错误消息（可以为空）\r\n     */\r\n    failCallback: (msg?: string) => void\r\n}\r\n\r\nexport interface DataSourceBefore extends DataSourceParam {\r\n\r\n    /**\r\n     * 取消下一步的请求\r\n     */\r\n    cancel: () => void\r\n}\r\n\r\n/**\r\n * 方法作为数据源\r\n */\r\nexport type DataSourceFunction<T> = (sender: T, option: DataSourceParam) => void\r\n\r\n/**\r\n * Ajax 数据源\r\n */\r\nexport interface DataSourceAjax<T> {\r\n    url: string,\r\n    method: string,\r\n    params?: {\r\n        [key: string]: (() => any) | any\r\n    }\r\n}\r\n\r\n/**\r\n * Sql 数据源\r\n */\r\nexport interface DataSourceSql<T> {\r\n    sqlId: string,\r\n    db: string,\r\n    params?: {\r\n        [key: string]: (() => any) | any\r\n    }\r\n}\r\n\r\n/**\r\n * 数据源配置\r\n */\r\nexport type DataSourceHelper<T> = DataSourceFunction<T> | DataSourceAjax<T> | DataSourceSql<T>\r\n\r\n/**\r\n * 数据抽取之前的设置\r\n */\r\nexport type OnBeforeDataLoad<T> = (sender: T, option: DataSourceBefore) => void\r\n\r\n/**\r\n * 数据加载完成之后的回调\r\n */\r\nexport type OnDataLoadComplete<T> = (sender: T) => void","<template>\r\n  <el-empty v-if=\"!!emptyText\" :style=\"calcStyleAndWidth\" :description=\"emptyText\">\r\n  </el-empty>\r\n  <div v-else-if=\"!hidden\" :class=\"[calcClass, 'yv-tree', 'yv-tree-wrapper']\" :style=\"calcStyle\">\r\n    <el-row v-show=\"enableFilter || enableRefresh || enableExpandedAll\">\r\n      <el-input v-show=\"enableFilter\" placeholder=\"筛选\" v-model=\"_filterKeyword\"/>\r\n      <el-button-group class=\"ml-4\" v-show=\"enableRefresh || enableExpandedAll\">\r\n        <el-button v-show=\"enableRefresh\" :icon=\"renderIcon('Refresh')\" @click=\"reload\"/>\r\n        <el-button v-show=\"enableExpandedAll\" :icon=\"renderIcon('fa ArrowsAltV')\" @click=\"expandedAll(true)\"/>\r\n        <el-button v-show=\"enableExpandedAll\" :icon=\"renderIcon('antd VerticalAlignMiddleOutlined')\"\r\n                   @click=\"expandedAll(false)\"/>\r\n      </el-button-group>\r\n    </el-row>\r\n    <el-scrollbar>\r\n      <el-tree\r\n          v-loading=\"loading\"\r\n          style=\"flex-grow: 1\"\r\n          ref=\"_inner\"\r\n          node-key=\"id\"\r\n          :props=\"defaultProps\"\r\n          :data=\"data\"\r\n          :filter-node-method=\"_filterNode\"\r\n          :disabled=\"disabled\"\r\n          :expand-on-click-node=\"expandOnClickNode\"\r\n          :check-on-click-node=\"checkOnClickNode\"\r\n          :auto-expand-parent=\"autoExpandParent\"\r\n          :show-checkbox=\"showCheckbox\"\r\n          :default-expand-all=\"defaultExpandAll\"\r\n          :default-expanded-keys=\"defaultExpandedKeys\"\r\n          :check-strictly=\"checkStrictly\"\r\n          @node-click=\"_onNodeClick\"\r\n          @node-contextmenu=\"_nodeContextMenu\"\r\n          @check=\"_onCheck\"\r\n          @current-change=\"_onCurrentChange\"\r\n          @node-expand=\"_onNodeExpand\"\r\n          @node-collapse=\"_onNodeCollapse\"\r\n          @node-drag-start=\"_onDragStart\"\r\n          @node-drag-enter=\"_onDragEnter\"\r\n          @node-drag-leave=\"_onDragLeave\"\r\n          @node-drag-over=\"_onDragOver\"\r\n          @node-drag-end=\"_onDragEnd\"\r\n          @node-dra=\"_onDrag\"\r\n      >\r\n        <template #default=\"{ node, data }\">\r\n          <div class=\"tree-node no-select\"\r\n               style=\"flex: 1;\"\r\n               @dblclick=\"evt=>_nodeDblClick(data,node,evt)\"\r\n               @mousedown=\"evt=>_mousedown(data,node,evt)\">\r\n            <span v-if=\"variableTypeOf(getIconName) === TypeEnum.function\">\r\n              <component :is=\"renderIcon(getIconName(node, data))\" style=\"font-size: 18px;\"/>\r\n            </span>\r\n            <span v-else-if=\"variableTypeOf(data?.icon) === TypeEnum.string\">\r\n              <component :is=\"renderIcon(data?.icon)\" style=\"font-size: 18px;\"/>\r\n            </span>\r\n            <span>{{ data.text }}</span>\r\n          </div>\r\n        </template>\r\n      </el-tree>\r\n    </el-scrollbar>\r\n    <el-alert v-show=\"checkedCount>0\" :title=\"`已勾选${checkedCount}项`\" type=\"success\" show-icon :closable=\"false\"/>\r\n    <Vue3Menus :open=\"menusOpen\" :event=\"menusEvent\" :menus=\"nodeContextMenu\" :args=\"menusArgs\">\r\n      <template #icon=\"{ menu, index, activeIndex }\">\r\n        <component :is=\"renderIcon(menu.icon)\" style=\"font-size: 18px;\"/>\r\n      </template>\r\n    </Vue3Menus>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport {nextTick, toRaw} from 'vue'\r\nimport {Vue3Menus} from 'vue3-menus'\r\nimport _ from \"lodash\"\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport {renderIcon, TypeEnum, variableTypeOf} from \"../../utils\"\r\nimport {Tree} from \"./Defaults\"\r\nimport {analyzeParamsForWatch, buildTreeData, runEvent} from \"../yv-utils\"\r\nimport {calcObjectFlat} from \"../raw/utils\";\r\n\r\nexport default {\r\n  components: {\r\n    Vue3Menus,\r\n  },\r\n  mixins: [baseVjsonMix],\r\n  emits: [\r\n    'node-click',\r\n    'current-change',\r\n  ],\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Tree)\r\n    const defaultProps = {\r\n      children: 'children',\r\n      label: 'text',\r\n      nodeKey: 'id',\r\n    }\r\n    return {\r\n      emptyText: vjson.emptyText,\r\n      loading: false,\r\n      checkedCount: 0,\r\n      TypeEnum,\r\n      menusOpen: false,\r\n      menusEvent: {},\r\n      menusArgs: {},\r\n      defaultProps,\r\n      expandOnClickNode: vjson.expandOnClickNode ?? false,\r\n      checkOnClickNode: vjson.checkOnClickNode ?? false,\r\n      autoExpandParent: vjson.autoExpandParent ?? false,\r\n      // 0: data, 1:dataSource-url, 2:dataSource-sql\r\n      dataType: vjson.dataType || \"0\",\r\n      _filterKeyword: '',\r\n      enableFilter: vjson.enableFilter,\r\n      enableRefresh: vjson.enableRefresh,\r\n      enableExpandedAll: vjson.enableExpandedAll,\r\n      showCheckbox: vjson.checkbox,\r\n      disabled: vjson.disabled,\r\n      hidden: vjson.hidden,\r\n      checkStrictly: vjson.checkStrictly,\r\n      defaultExpandAll: vjson.defaultExpandAll,\r\n      defaultExpandedKeys: [],\r\n      keepExpandKeys: vjson.keepExpandKeys ?? false,\r\n      data: vjson.data,\r\n      nodeContextMenu: vjson.nodeContextMenu || [],\r\n      getIconName: vjson.getIconName,\r\n      dataSource: vjson.dataSource,\r\n      autoLoad: vjson.autoLoad ?? false,\r\n    }\r\n  },\r\n  computed: {},\r\n  watch: {\r\n    _filterKeyword: {\r\n      handler(newVal) {\r\n        this.$refs._inner.filter(newVal);\r\n      }\r\n    },\r\n  },\r\n  mounted() {\r\n    if (this.autoLoad && this.dataSource?.reload) {\r\n      this.reload()\r\n    }\r\n    this.checkedCount = this.$refs._inner.getHalfCheckedKeys().length + this.$refs._inner.getCheckedKeys().length\r\n  },\r\n  destroyed() {\r\n    if (this.dataSourceWatchStopHandle.length > 0) {\r\n      _.forEach(this.dataSourceWatchStopHandle, (fn) => {\r\n        fn()\r\n      })\r\n      this.dataSourceWatchStopHandle = []\r\n    }\r\n  },\r\n  created() {\r\n    const dataSource = _.cloneDeep(toRaw(this.dataSource))\r\n    if (!dataSource) {\r\n      return\r\n    }\r\n    const params = {}\r\n    if (dataSource.method === 'invoke' || dataSource.sqlId) {\r\n      if (dataSource.sqlId) {\r\n        dataSource.method = 'invoke'\r\n        dataSource.url = '/com/galaxis/wms/Dev@executeSQL'\r\n        const scope = this.vcxt.scope\r\n        if (!scope._relPath) {\r\n          return null\r\n        }\r\n        if (_.startsWith(dataSource.sqlId, '@')) {\r\n          // sqlId 是 @ 开头，代表直接带中文名\r\n          // dataSource.url = relPath + dataSource.sqlId\r\n          params.path = scope._relPath.split(\".\")[0]\r\n          params.sqlId = dataSource.sqlId.substring(1)\r\n          params.pagination = this.pagination\r\n        } else {\r\n          if (_.endsWith(_.toLower(scope._relPath), '.vue')) {\r\n            params.path = scope._relPath.substring(0, scope._relPath.length - 4)\r\n          } else {\r\n            params.path = scope._relPath\r\n          }\r\n          params.sqlId = dataSource.sqlId\r\n          params.pagination = false\r\n        }\r\n      }\r\n    }\r\n    const me = this\r\n    this.dataSourceWatchStopHandle = analyzeParamsForWatch(me.vcxt.scope.$watch, this.dataSource.params, (watchResultForParam) => {\r\n      if(this.$refs._inner) {\r\n        const style = window.getComputedStyle(this.$refs._inner?.$el);\r\n        if (style && style.display !== 'none') {\r\n          // 没有隐藏，既刷新\r\n          me.dataSource.reload(watchResultForParam)\r\n        }\r\n      }\r\n    })\r\n    dataSource.reload = _.debounce(() => {\r\n      runEvent(this.vcxt.scope, this.vjson, \"onDataLoadBefore\", {})\r\n      const reParams = _.cloneDeep(params)\r\n\r\n      // 从 params 参数描述中，分析出实际请求参数\r\n      let cancel = false\r\n      let p = calcObjectFlat(this.vcxt?.scope?.$data, this.dataSource.params, (express, value) => {\r\n        // 判断参数，是否被 watch\r\n        if ((express + '').startsWith('watch:{')) {\r\n          value = '' + value\r\n          if (value.startsWith('watch:')) {\r\n            value = value.substring(6)\r\n          }\r\n        }\r\n\r\n        // 判断参数，是否要求必填\r\n        if ((express + '').endsWith('}:required')) {\r\n          if (typeof value === 'undefined' || value == null) {\r\n            console.debug('express:' + express + ' is ' + value + ', request canceled!')\r\n            cancel = true\r\n          }\r\n\r\n          value = '' + value\r\n          if (value.endsWith(':required')) {\r\n            value = value.substring(0, value.length - 9)\r\n          }\r\n\r\n          if (!value) {\r\n            console.debug('express:' + express + ' is ' + value + ', request canceled!')\r\n            cancel = true\r\n          }\r\n        }\r\n        return value\r\n      })\r\n\r\n      if (cancel) {\r\n        me.setData([])\r\n        if (this.vjson.reference) {\r\n          _.set(this.vcxt.scope, this.vjson.reference + '.selection', null)\r\n          _.set(this.vcxt.scope, this.vjson.reference + '.checkedNodes', [])\r\n          _.set(this.vcxt.scope, this.vjson.reference + '.checkedKeys', [])\r\n        }\r\n        if (this.showCheckbox) {\r\n          if(this.$refs._inner) {\r\n            this.$refs._inner.setCheckedKeys([])\r\n            this.$nextTick(() => {\r\n              this.checkedCount = this.$refs._inner.getHalfCheckedKeys().length + this.$refs._inner.getCheckedKeys().length\r\n            })\r\n          }\r\n        }\r\n        runEvent(this.vcxt.scope, this.vjson, \"onDataLoadComplete\", this, [], [])\r\n        return\r\n      }\r\n\r\n      if (typeof this.dataSource.paramsFn === 'function') {\r\n        const cp = this.dataSource.paramsFn()\r\n        _.merge(p, cp)\r\n      }\r\n      _.merge(reParams, p)\r\n      // 请求\r\n      me.setLoading(true)\r\n      const expandKeys = []\r\n      if (this.keepExpandKeys) {\r\n        const nodeDatas = this.$refs._inner.store.nodesMap\r\n        for (let key in nodeDatas) {\r\n          if (nodeDatas[key].expanded) {\r\n            expandKeys.push(key)\r\n          }\r\n        }\r\n      }\r\n      system.invokeServer(dataSource.url, reParams).then(res => {\r\n        if (res.success) {\r\n          if (dataSource.noBuildTree) {\r\n            runEvent(this.vcxt.scope, this.vjson, \"onDataLoadComplete\", this, res.data, res.data)\r\n            me.setData(res.data)\r\n            if (this.vjson.reference) {\r\n              _.set(this.vcxt.scope, this.vjson.reference + '.selection', null)\r\n              _.set(this.vcxt.scope, this.vjson.reference + '.checkedNodes', [])\r\n              _.set(this.vcxt.scope, this.vjson.reference + '.checkedKeys', [])\r\n            }\r\n            if (this.showCheckbox) {\r\n              if(this.$refs._inner) {\r\n                this.$refs._inner.setCheckedKeys([])\r\n                this.$nextTick(() => {\r\n                  this.checkedCount = this.$refs._inner.getHalfCheckedKeys().length + this.$refs._inner.getCheckedKeys().length\r\n                })\r\n              }\r\n            }\r\n\r\n          } else {\r\n            const checkedIds = []\r\n            const treeData = buildTreeData(res.data, {\r\n              idField: dataSource.idField ?? \"id\",\r\n              parentField: dataSource.parentField ?? \"parent_id\",\r\n              checkField: dataSource.checkField ?? \"check\",\r\n              textField: dataSource.textField ?? \"text\",\r\n              checkStrictly: this.checkStrictly,\r\n            }, checkedIds)\r\n            runEvent(this.vcxt.scope, this.vjson, \"onDataLoadComplete\", this, res.data, treeData)\r\n            me.setData(treeData)\r\n            if (this.showCheckbox) {\r\n              if(this.$refs._inner) {\r\n                this.$refs._inner.setCheckedKeys(checkedIds)\r\n                this.$nextTick(() => {\r\n                  this.checkedCount = this.$refs._inner.getHalfCheckedKeys().length + this.$refs._inner.getCheckedKeys().length\r\n                })\r\n              }\r\n            }\r\n            if (this.vjson.reference) {\r\n              _.set(this.vcxt.scope, this.vjson.reference + '.selection', null)\r\n              _.set(this.vcxt.scope, this.vjson.reference + '.checkedNodes', [])\r\n              _.set(this.vcxt.scope, this.vjson.reference + '.checkedKeys', checkedIds)\r\n            }\r\n            if (this.keepExpandKeys) {\r\n              if(this.$refs._inner) {\r\n                this.$nextTick(() => {\r\n                  const nodeDatas = this.$refs._inner?.store.nodesMap\r\n                  for (let key in nodeDatas) {\r\n                    if (expandKeys.includes(key)) {\r\n                      nodeDatas[key].expanded = true\r\n                    }\r\n                  }\r\n                })\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }).catch((e) => {\r\n        runEvent(this.vcxt.scope, this.vjson, \"onDataLoadComplete\", this, [], [])\r\n        console.error(e)\r\n        system.showErrorDialog(e.toString())\r\n\r\n      }).finally(() => {\r\n        me.setLoading(false)\r\n      })\r\n    }, 10)\r\n    this.dataSource = dataSource\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    variableTypeOf,\r\n    setLoading(isLoad) {\r\n      this.loading = isLoad\r\n    },\r\n    reload() {\r\n      if (typeof this.dataSource.reload === 'function') {\r\n        this.dataSource.reload()\r\n      }\r\n    },\r\n    _nodeContextMenu(evt, node, data) {\r\n      // const menuOption = toRaw(this.nodeContextMenu)\r\n      evt.preventDefault()\r\n      this.menusOpen = false;\r\n      nextTick(() => {\r\n        this.menusEvent = evt\r\n        this.menusArgs = {event: evt, node, data}\r\n        this.menusOpen = true\r\n      })\r\n    },\r\n    _nodeDblClick(data, node, evt) {\r\n      if (!node.disabled && !node.isLeaf) {\r\n        if (node.expanded) {\r\n          node.collapse()\r\n        } else {\r\n          node.expand()\r\n        }\r\n\r\n        evt.preventDefault()\r\n        evt.stopPropagation()\r\n      }\r\n    },\r\n    _mousedown(data, node, evt) {\r\n      if (evt.button === 2) {\r\n        this.$emit('contextMenu', data, node)\r\n      }\r\n    },\r\n    _onCheck(data, {checkedKeys, checkedNodes, halfCheckedKeys, halfCheckedNodes}) {\r\n      if (this.vjson.reference) {\r\n        _.set(this.vcxt.scope, this.vjson.reference + '.checkedNodes', checkedNodes)\r\n        _.set(this.vcxt.scope, this.vjson.reference + '.checkedKeys', checkedKeys)\r\n      }\r\n      runEvent(this.vcxt.scope, this.vjson, \"check\", {checkedKeys, checkedNodes, halfCheckedKeys, halfCheckedNodes})\r\n      this.checkedCount = this.$refs._inner.getHalfCheckedKeys().length + this.$refs._inner.getCheckedKeys().length\r\n    },\r\n    _onNodeClick(data, b, c, d) {\r\n      this.menusOpen = false;\r\n      this.$emit('node-click', data, b, c, d)\r\n      runEvent(this.vcxt.scope, this.vjson, \"nodeClick\", ...arguments)\r\n    },\r\n    _onCurrentChange() {\r\n      _.set(this.vcxt.scope, this.vjson.reference + '.selection', arguments[0])\r\n      runEvent(this.vcxt.scope, this.vjson, \"currentChange\", ...arguments)\r\n    },\r\n    _onNodeExpand() {\r\n      runEvent(this.vcxt.scope, this.vjson, \"nodeExpand\", ...arguments)\r\n    },\r\n    _onNodeCollapse() {\r\n      runEvent(this.vcxt.scope, this.vjson, \"nodeCollapse\", ...arguments)\r\n    },\r\n    _onDragStart() {\r\n      runEvent(this.vcxt.scope, this.vjson, \"nodeDragStart\", ...arguments)\r\n    },\r\n    _onDragEnter() {\r\n      runEvent(this.vcxt.scope, this.vjson, \"nodeDragEnter\", ...arguments)\r\n    },\r\n    _onDragLeave() {\r\n      runEvent(this.vcxt.scope, this.vjson, \"nodeDragLeave\", ...arguments)\r\n    },\r\n    _onDragOver() {\r\n      runEvent(this.vcxt.scope, this.vjson, \"nodeDragOver\", ...arguments)\r\n    },\r\n    _onDragEnd() {\r\n      runEvent(this.vcxt.scope, this.vjson, \"nodeDragEnd\", ...arguments)\r\n    },\r\n    _onDrag() {\r\n      runEvent(this.vcxt.scope, this.vjson, \"nodeDrag\", ...arguments)\r\n    },\r\n    setData(data) {\r\n      this.data = data\r\n    },\r\n    getNode(key) {\r\n      return this.$refs._inner.getNode(key)\r\n    },\r\n    getCheckedNodes() {\r\n      return this.$refs._inner.getCheckedNodes()\r\n    },\r\n    getCheckedKeys() {\r\n      return this.$refs._inner.getCheckedKeys()\r\n    },\r\n    setCheckedKeys(keys) {\r\n      return this.$refs._inner.setCheckedKeys(keys)\r\n    },\r\n    getCurrentNode() {\r\n      return this.$refs._inner.getCurrentNode();\r\n    },\r\n    getCurrentKey() {\r\n      return this.$refs._inner.getCurrentKey();\r\n    },\r\n    setCurrentKey(key) {\r\n      return this.$refs._inner.setCurrentKey(key);\r\n    },\r\n    expandedAll(expanded = true) {\r\n      const nodeDatas = this.$refs._inner.store.nodesMap\r\n      for (let key in nodeDatas) {\r\n        nodeDatas[key].expanded = expanded;\r\n      }\r\n      // const data = this.data ?? [];\r\n      // const allNode = []\r\n      // const getAllKeys = (nodes) => {\r\n      //   _.forEach(nodes, node => {\r\n      //     allNode.push(node)\r\n      //     if (node.children) getAllKeys(node.children)\r\n      //   })\r\n      // }\r\n      // getAllKeys(data);\r\n      // allNode.forEach(node => (node.expanded = expanded))\r\n    },\r\n\r\n    setExpandedKeys(keys) {\r\n      this.defaultExpandedKeys = keys;\r\n    },\r\n\r\n    _filterNode(value, data) {\r\n      if (!value) return true;\r\n\r\n      value = value.toLowerCase();\r\n      const text = data.text;\r\n      if (!text) return true;\r\n      return (\r\n          text.toLowerCase()\r\n              .indexOf(value) >= 0 || text.toLowerCase().indexOf(value) >= 0\r\n      );\r\n    },\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.el-tree{\r\n  .el-tree-node:focus>.el-tree-node__content{\r\n    background-color: #fde2e2;\r\n  }\r\n  .el-tree-node.is-current>.el-tree-node__content{\r\n    background-color: #fde2e2;\r\n  }\r\n}\r\n.yv-tree-wrapper {\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  & > .el-row {\r\n    display: flex;\r\n    flex-direction: row;\r\n\r\n    & > .el-input {\r\n      flex: 1;\r\n      /*margin-right: 5px*/\r\n    }\r\n\r\n    & > div:last-child.el-input {\r\n      margin-right: 0\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div ref=\"codeEditBox\" class=\"codeEditBox\" :class=\"'codeEditBox1'\"/>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport * as monaco from 'monaco-editor'\r\nimport Designer from \"./designer\";\r\nimport TsLanguageSupport from \"./TsLanguageSupport\";\r\n// import * as monaco from 'monaco-editor/esm/vs/editor/editor.api'\r\n\r\nexport default {\r\n  props: {\r\n    modelValue: String,\r\n    language: String,\r\n    expressMode: {\r\n      defaults: false,\r\n      required: false,\r\n      type: Boolean\r\n    },\r\n  },\r\n  emits: [\r\n    'update:modelValue',\r\n    'editor-mounted',\r\n    'change',\r\n    'editor-blur',\r\n    'editor-focus'\r\n  ],\r\n  mounted() {\r\n    this.init()\r\n  },\r\n  watch: {\r\n    'modelValue': {\r\n      handler(newVal) {\r\n        if (newVal === this.editor.getValue()) {\r\n          // 防止递归\r\n          return\r\n        }\r\n        this.editor.setValue(newVal ?? '')\r\n      }\r\n    },\r\n    'language': {\r\n      handler(newVal) {\r\n        if (this.editor) {\r\n          this.setLanguage(newVal)\r\n        }\r\n      }\r\n    },\r\n    'loadTypeAction': {\r\n      handler(newVal) {\r\n\r\n      }\r\n    }\r\n  },\r\n  unmounted() {\r\n    if (this.editor) {\r\n      this.editor.dispose()\r\n      this.editor = null\r\n    }\r\n  },\r\n  methods: {\r\n    focus() {\r\n      this.editor?.focus()\r\n    },\r\n    insertText(text) {\r\n      if (!this.editor) {\r\n        return\r\n      }\r\n      const position = this.editor.getPosition()\r\n      this.editor.executeEdits('', [{\r\n        range: new monaco.Range(position.lineNumber, position.column, position.lineNumber, position.column),\r\n        text: text,\r\n        forceMoveMarkers: true\r\n      }])\r\n    },\r\n    init() {\r\n      const option = {\r\n        value: this.modelValue,\r\n        language: this.language ?? 'javascript',\r\n        minimap: {\r\n          enabled: false\r\n        },\r\n        selectOnLineNumbers: true,\r\n        renderSideBySide: false,\r\n        automaticLayout: true,\r\n      }\r\n      if (this.$props.expressMode === true) {\r\n        _.extend(option, {\r\n          lineNumbers: 'off',\r\n          hideCursorInOverviewRuler: true,\r\n          overviewRulerBorder: false,\r\n          glyphMargin: false,\r\n          lineDecorationsWidth: 0,\r\n          fontSize: \"19px\",\r\n          roundedSelection: false,\r\n          scrollBeyondLastLine: false,\r\n          disableMonospaceOptimizations: true,\r\n        })\r\n      }\r\n\r\n      TsLanguageSupport.instance.initOneEditor()\r\n      this.editor = monaco.editor.create(this.$refs.codeEditBox, option)\r\n\r\n      // console.log('monaco editor create', this.editor)\r\n\r\n      // 监听值的变化\r\n      this.editor.onDidChangeModelContent(() => {\r\n        const value = this.editor.getValue() // 给父组件实时返回最新文本\r\n        this.$emit('update:modelValue', value)\r\n        this.$emit('change', value)\r\n      })\r\n\r\n      this.editor.onDidBlurEditorWidget((e) => {\r\n        this.$emit('editor-blur', e)\r\n      })\r\n      this.editor.onDidFocusEditorWidget((e) => {\r\n        this.$emit('editor-focus', e)\r\n      })\r\n\r\n      this.$emit('editor-mounted', this.editor)\r\n      // .monacoInitFinished()\r\n    },\r\n    updateOptions(options) {\r\n      if (this.editor && options) {\r\n        this.editor.updateOptions(options)\r\n      }\r\n    },\r\n    setLanguage(lang) {\r\n      if (this.editor && lang) {\r\n        monaco.editor.setModelLanguage(this.editor.getModel(), lang)\r\n      }\r\n    },\r\n  }\r\n}\r\n</script>\r\n\r\n<style>\r\n.codeEditBox {\r\n  width: 100%;\r\n  flex: 1;\r\n  overflow-y: auto;\r\n}\r\n</style>","<template>\r\n  <keep-alive>\r\n    <div ref=\"box\" class=\"yv-studio\">\r\n    </div>\r\n  </keep-alive>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n  data() {\r\n    return {\r\n      handle: undefined,\r\n    }\r\n  },\r\n  mounted() {\r\n    console.log(\r\n        'to', this.$refs.box\r\n    )\r\n\r\n    const handle = Ext.create({\r\n      renderTo: this.$refs.box,\r\n\r\n      width: '100%',\r\n      height: 500,\r\n      xtype: 'grid', // scrollable: true,\r\n      store: {\r\n        fields: ['item_code',\r\n          'item_name',\r\n          'package_meas',\r\n          'package_unit',\r\n          'loc_code',\r\n          'lot01',\r\n          'js',\r\n          'lss',\r\n          'qty_in',\r\n          'qty_out',\r\n          'qty_rep_in',\r\n          'qty_rep_out',\r\n          'qty_onway',\r\n          'item_specification',\r\n          'manufacturer',\r\n          'quality',\r\n          'qty',\r\n          'is_lock',\r\n          'qty_lock',\r\n          'lot02',\r\n          'lot03',\r\n          'lpn',\r\n          'loc_classify',\r\n          'area_name',\r\n          'item_classify',\r\n          'owner_code',\r\n          'owner_name',\r\n          'approval_no',\r\n          'lot12',\r\n        ],\r\n        data: [\r\n          {\r\n            item_code: '01', item_name: '名称1', package_unit: '箱'\r\n          },\r\n          {\r\n            item_code: '02', item_name: '名称2', package_unit: '箱'\r\n          },\r\n          {\r\n            item_code: '03', item_name: '名称3', package_unit: '箱'\r\n          },\r\n          {\r\n            item_code: '04', item_name: '名称4', package_unit: '个'\r\n          },\r\n        ],\r\n      },\r\n      columns: [\r\n        {width: 150, dataIndex: 'item_code', text: '商品编码',},\r\n        {width: 150, dataIndex: 'item_name', text: '中文名称',},\r\n        {width: 150, dataIndex: 'package_meas', text: '包装数量',},\r\n        {width: 150, dataIndex: 'package_unit', text: '包装单位',},\r\n        {width: 150, dataIndex: 'loc_code', text: '显示货位',},\r\n        {width: 150, dataIndex: 'lot01', text: '批号',},\r\n        {width: 150, dataIndex: 'js', text: '件数',},\r\n        {width: 150, dataIndex: 'lss', text: '零散数',},\r\n        {width: 150, dataIndex: 'qty_in', text: '入库预占数量',},\r\n        {width: 150, dataIndex: 'qty_out', text: '出库预占数量',},\r\n        {width: 150, dataIndex: 'qty_rep_in', text: '补货预占数量',},\r\n        {width: 150, dataIndex: 'qty_rep_out', text: '补货预扣数量',},\r\n        {width: 150, dataIndex: 'qty_onway', text: '在途数量',},\r\n        {width: 150, dataIndex: 'item_specification', text: '规格',},\r\n        {width: 150, dataIndex: 'manufacturer', text: '生产厂家'},\r\n        {width: 150, dataIndex: 'quality', text: '库存状态', dict: 'QUALITY',},\r\n        {width: 150, dataIndex: 'qty', text: '数量',},\r\n        {width: 150, dataIndex: 'is_lock', text: '是否锁定', xtype: 'checkcolumn', disabled: true,},\r\n        {width: 150, dataIndex: 'qty_lock', text: '锁定数量',},\r\n        {width: 150, dataIndex: 'lot02', text: '生产日期',},\r\n        {width: 150, dataIndex: 'lot03', text: '有效期至'},\r\n        {width: 150, dataIndex: 'lpn', text: '托盘条码',},\r\n        {width: 150, dataIndex: 'loc_classify', text: '库别', dict: 'AREA_CLASSIFY',},\r\n        {width: 150, dataIndex: 'area_name', text: '区域编号'},\r\n        {width: 150, dataIndex: 'item_classify', text: '商品大类', dict: 'ITEM_CLASSIFY',},\r\n        {width: 150, dataIndex: 'owner_code', text: '货主编号'},\r\n        {width: 150, dataIndex: 'owner_name', text: '货主名称',},\r\n        {width: 150, dataIndex: 'approval_no', text: '批准文号'},\r\n        {width: 150, dataIndex: 'lot12', text: '库存地点',}\r\n      ],\r\n    })\r\n\r\n    this.handle = handle\r\n  }\r\n}\r\n</script>\r\n\r\n<style>\r\n.yv-studio {\r\n  width: 100%;\r\n  height: 100%;\r\n}\r\n</style>","export default class YvStudioFileSearchWindow {\r\n\r\n    handle = undefined\r\n\r\n    constructor() {\r\n\r\n    }\r\n\r\n    showDialog() {\r\n        this.createHanle()\r\n        this.handle.show()\r\n    }\r\n\r\n    createHanle() {\r\n        this.store = Ext.create('Ext.data.Store', {\r\n            fields: ['item_code',\r\n                'item_name',\r\n                'package_meas',\r\n                'package_unit',\r\n                'loc_code',\r\n                'lot01',\r\n                'js',\r\n                'lss',\r\n                'qty_in',\r\n                'qty_out',\r\n                'qty_rep_in',\r\n                'qty_rep_out',\r\n                'qty_onway',\r\n                'item_specification',\r\n                'manufacturer',\r\n                'quality',\r\n                'qty',\r\n                'is_lock',\r\n                'qty_lock',\r\n                'lot02',\r\n                'lot03',\r\n                'lpn',\r\n                'loc_classify',\r\n                'area_name',\r\n                'item_classify',\r\n                'owner_code',\r\n                'owner_name',\r\n                'approval_no',\r\n                'lot12',\r\n            ],\r\n            data: [\r\n                {\r\n                    item_code: '01', item_name: '名称1', package_unit: '箱'\r\n                },\r\n                {\r\n                    item_code: '02', item_name: '名称2', package_unit: '箱'\r\n                },\r\n                {\r\n                    item_code: '03', item_name: '名称3', package_unit: '箱'\r\n                },\r\n                {\r\n                    item_code: '04', item_name: '名称4', package_unit: '个'\r\n                },\r\n            ],\r\n        },);\r\n\r\n        this.handle = Ext.create({\r\n            width: '300',\r\n            height: 400,\r\n            xtype: 'dialog',\r\n            title: '这个对话框内部包含表格',\r\n            maximizable: true,\r\n            closable: true,\r\n            hasResizable: true,\r\n            resizable: {\r\n                edges: 'all'\r\n            },\r\n            dismissHandler: () => {\r\n                this.handle.destroy();\r\n            },\r\n            layout: 'fit',\r\n            buttons: {\r\n                ok: () => {  // standard button (see below)\r\n                    this.handle.destroy();\r\n                }\r\n            },\r\n            // getFocusEl() {\r\n            //     debugger\r\n            // },\r\n            items: [\r\n                {\r\n                    xtype: 'grid', // scrollable: true,\r\n                    store: this.store,\r\n                    rowNumbers: true,\r\n                    columnLines: true,\r\n                    selectable: {\r\n                        cells: true,\r\n                        checkbox: true,\r\n                        drag: true,\r\n                        extensible: 'y'\r\n                    },\r\n                    plugins: {\r\n                        clipboard: true,\r\n                        selectionreplicator: true\r\n                    },\r\n                    columns: [\r\n                        {width: 150, dataIndex: 'item_code', text: '商品编码',},\r\n                        {width: 150, dataIndex: 'item_name', text: '中文名称',},\r\n                        {width: 150, dataIndex: 'package_meas', text: '包装数量',},\r\n                        {width: 150, dataIndex: 'package_unit', text: '包装单位',},\r\n                        {width: 150, dataIndex: 'loc_code', text: '显示货位',},\r\n                        {width: 150, dataIndex: 'lot01', text: '批号',},\r\n                        {width: 150, dataIndex: 'js', text: '件数',},\r\n                        {width: 150, dataIndex: 'lss', text: '零散数',},\r\n                        {width: 150, dataIndex: 'qty_in', text: '入库预占数量',},\r\n                        {width: 150, dataIndex: 'qty_out', text: '出库预占数量',},\r\n                        {width: 150, dataIndex: 'qty_rep_in', text: '补货预占数量',},\r\n                        {width: 150, dataIndex: 'qty_rep_out', text: '补货预扣数量',},\r\n                        {width: 150, dataIndex: 'qty_onway', text: '在途数量',},\r\n                        {width: 150, dataIndex: 'item_specification', text: '规格',},\r\n                        {width: 150, dataIndex: 'manufacturer', text: '生产厂家'},\r\n                        {width: 150, dataIndex: 'quality', text: '库存状态', dict: 'QUALITY',},\r\n                        {width: 150, dataIndex: 'qty', text: '数量',},\r\n                        {width: 150, dataIndex: 'is_lock', text: '是否锁定', xtype: 'checkcolumn', disabled: true,},\r\n                        {width: 150, dataIndex: 'qty_lock', text: '锁定数量',},\r\n                        {width: 150, dataIndex: 'lot02', text: '生产日期',},\r\n                        {width: 150, dataIndex: 'lot03', text: '有效期至'},\r\n                        {width: 150, dataIndex: 'lpn', text: '托盘条码',},\r\n                        {width: 150, dataIndex: 'loc_classify', text: '库别', dict: 'AREA_CLASSIFY',},\r\n                        {width: 150, dataIndex: 'area_name', text: '区域编号'},\r\n                        {width: 150, dataIndex: 'item_classify', text: '商品大类', dict: 'ITEM_CLASSIFY',},\r\n                        {width: 150, dataIndex: 'owner_code', text: '货主编号'},\r\n                        {width: 150, dataIndex: 'owner_name', text: '货主名称',},\r\n                        {width: 150, dataIndex: 'approval_no', text: '批准文号'},\r\n                        {width: 150, dataIndex: 'lot12', text: '库存地点',}\r\n                    ],\r\n                }\r\n            ],\r\n        })\r\n    }\r\n\r\n}","<template>\r\n  <el-button @click=\"click1\" type=\"primary\">按钮1</el-button>\r\n  <yv-vjson-yvgrid :vjson=\"\r\n          {\r\n            xtype: 'yvgrid',\r\n            columns: [\r\n              {\r\n                dataIndex: 'dataIndex',\r\n                header: '字段A',\r\n                width: 140\r\n              }\r\n            ]\r\n          }\"\r\n  />\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n  props: ['content'],\r\n  data() {\r\n    return {}\r\n  },\r\n  methods: {\r\n    click1() {\r\n      system.showInfoDialog('你好,' + this.content)\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <div>\r\n    废弃页面\r\n  </div>\r\n  <!--  </yv-split>-->\r\n</template>\r\n\r\n<script>\r\nimport YvStudioFileSearch from './yv-studio-file-search.vue'\r\nimport YvStudioFileSearchWindow from './yv-studio-file-search-window'\r\nimport YvCustomDialog from \"./yv-custom-dialog.vue\"\r\n\r\nexport default {\r\n  components: {\r\n    YvStudioFileSearch, YvCustomDialog\r\n  },\r\n  data() {\r\n    return {\r\n      handle: undefined,\r\n      showDraw: false,\r\n      showDraw3: false,\r\n    }\r\n  },\r\n  mounted() {\r\n  },\r\n  methods: {\r\n    showSearch() {\r\n      // this.showDraw = true\r\n      const dlg = new YvStudioFileSearchWindow()\r\n      dlg.showDialog()\r\n    },\r\n    showVueComponent() {\r\n\r\n    },\r\n    showVueComponent3() {\r\n      this.showDraw3 = true\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style>\r\n\r\n</style>","<template>\r\n  <template v-if=\"vjsonReloadMark\">\r\n    <el-skeleton class=\"yv-layout-skeleton\" :rows=\"5\" animated/>\r\n  </template>\r\n  <component v-else\r\n             :is=\"getLayout(vjson.layout)\"\r\n             :vjson=\"vjson\"\r\n             :vcxt=\"vcxt\"\r\n  />\r\n</template>\r\n\r\n<script>\r\nimport {getLayout} from '../design/yv-designer-desc'\r\nimport VJsonContext from \"./VJsonContext\";\r\n\r\nexport default {\r\n  props: {\r\n    vjson: Object,\r\n    vcxt: VJsonContext\r\n  },\r\n  created() {\r\n    this.vcxt.setSlots(this.$slots)\r\n  },\r\n  data() {\r\n    return {\r\n      vjsonReloadMark: false\r\n    }\r\n  },\r\n  watch: {\r\n    'vjson.layoutLoading': {\r\n      handler(newVal) {\r\n        this.vjsonReloadMark = newVal\r\n      }\r\n    },\r\n    'vjson': {\r\n      handler(newVal) {\r\n        this.vjsonReloadMark = true\r\n        this.$nextTick(() => {\r\n          this.vjsonReloadMark = false\r\n        })\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    getLayout\r\n  }\r\n}\r\n</script>\r\n<style>\r\n.yv-layout-skeleton {\r\n  height: 100%;\r\n  background-color: white;\r\n  border: solid 1px var(--el-menu-border-color);\r\n  padding: 15px;\r\n}\r\n</style>","import Designer from \"../design/designer\"\r\nimport VJsonContext from \"../vjson/VJsonContext\"\r\nimport {getDesignCmp} from \"../design/yv-designer-desc\"\r\nimport {renderIcon} from \"../../utils\";\r\n\r\nexport default {\r\n    props: {\r\n        designer: Designer,\r\n        vcxt: VJsonContext,\r\n    },\r\n    methods: {\r\n        renderIcon: renderIcon,\r\n        getDesignCmp,\r\n        onDragEnd(evt) {\r\n            this.designer.dragEnd(evt)\r\n        },\r\n\r\n        onDragAdd(parentList, parentComponent, evt) {\r\n            const newIndex = evt.newIndex\r\n            if (!!parentList[newIndex]) {\r\n                this.designer.setSelected(parentList[newIndex], {\r\n                    parentComponent: parentComponent,\r\n                    parentList: parentList,\r\n                    indexOfParentList: newIndex,\r\n                })\r\n            }\r\n\r\n            this.designer.emitHistoryChange()\r\n        },\r\n\r\n        onDragUpdate() {  /* 在VueDraggable内拖拽组件发生位置变化时会触发update，未发生组件位置变化不会触发！！ */\r\n            this.designer.emitHistoryChange()\r\n        },\r\n\r\n        checkMove(evt) {\r\n            return this.designer.checkWidgetMove(evt)\r\n        },\r\n    }\r\n}","import {getRuntimeCmp, getRuntimeCmpDebug} from '../design/yv-designer-desc'\r\nimport VJsonContext from \"../vjson/VJsonContext\";\r\nimport eventBus from \"../../event-bus\";\r\n\r\n/**\r\n * 公共混入方法\r\n */\r\nexport default {\r\n    props: {\r\n        vjson: Object,\r\n        vcxt: VJsonContext\r\n    },\r\n    data() {\r\n        return {\r\n            _destroyed: true\r\n        }\r\n    },\r\n    created() {\r\n        this._destroyed = false\r\n    },\r\n    mounted() {\r\n    },\r\n    destroyed() {\r\n        this._destroyed = true\r\n    },\r\n    computed: {\r\n        calcLayoutClass() {\r\n            return [\r\n                'yv-layout-rt',\r\n                this.vjson.isFlex ? 'yv-layout-flex' : '',\r\n            ]\r\n        },\r\n        calcLayoutStyle() {\r\n            const style = {}\r\n            // 高度只在预览模式下生效\r\n            if (this.vjson.height) {\r\n                style.height = this.vjson.height\r\n            }\r\n            return style\r\n        }\r\n    },\r\n    methods: {\r\n        getRuntimeCmp,\r\n        getRuntimeCmpDebug,\r\n        _scrollMe() {\r\n            eventBus.$emit('bem-refresh', {sender: this, source: 'scroll'})\r\n        },\r\n    },\r\n\r\n}","<template>\r\n  <el-dialog v-model=\"isShow\" :style=\"calcStyle\" :title=\"title\" :width=\"width\" :fullscreen=\"fullscreen\"\r\n             append-to-body\r\n             destroy-on-close\r\n             :draggable=\"draggable\"\r\n             :close-on-click-modal=\"closeOnClickModal\"\r\n             :close-on-press-escape=\"closeOnPressEscape\"\r\n             :show-close=\"showClose\"\r\n             :modal=\"modal\"\r\n             v-bind=\"modalProp\"\r\n             @close=\"_onClosed\"\r\n             @opened=\"_onOpened\">\r\n    <template v-for=\"(item,itemIdx) in bodyItems\" :key=\"itemIdx\">\r\n      <component :is=\"getRuntimeCmp(item)\"\r\n                 :vjson=\"item\"\r\n                 :vcxt=\"vcxt\"\r\n                 :dialog-scope=\"this\"\r\n                 :parent-list=\"vjson.items\"\r\n                 :index-of-parent-list=\"itemIdx\"\r\n                 :parent-component=\"vjson\"/>\r\n    </template>\r\n    <template #footer v-if=\"!!footerItem\">\r\n      <component :is=\"getRuntimeCmp(footerItem)\"\r\n                 :vjson=\"footerItem\"\r\n                 :vcxt=\"vcxt\"\r\n                 :dialog-scope=\"this\"/>\r\n    </template>\r\n    <template #header v-if=\"!!headerItem\">\r\n      <component :is=\"getRuntimeCmp(headerItem)\"\r\n                 :vjson=\"headerItem\"\r\n                 :vcxt=\"vcxt\"\r\n                 :dialog-scope=\"this\"/>\r\n    </template>\r\n  </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {Dialog} from './Defaults'\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport {renderIcon} from \"../../utils\";\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Dialog)\r\n\r\n    if (vjson.reference) {\r\n      _.set(this.vcxt.scope, vjson.reference, {\r\n        isShow: vjson.isShow,\r\n        title: vjson.title,\r\n        width: vjson.width,\r\n        fullscreen: vjson.fullscreen,\r\n      })\r\n    }\r\n\r\n    // 获取除了头部定义和尾部定义的所有组件\r\n    const bodyItems = _.filter(this.vjson.items, item => !item.reference || (item.reference !== this.vjson.footerReference && item.reference !== this.vjson.headerReference))\r\n    const footerItem = _.find(this.vjson.items, item => item.reference === this.vjson.footerReference)\r\n    const headerItem = _.find(this.vjson.items, item => item.reference === this.vjson.headerReference)\r\n\r\n    const modalProp = {}\r\n    if (vjson.zIndex) {\r\n      modalProp.zIndex = vjson.zIndex\r\n    }\r\n\r\n    return {\r\n      draggable: vjson.draggable,\r\n      closeOnClickModal: vjson.closeOnClickModal,\r\n      closeOnPressEscape: vjson.closeOnPressEscape,\r\n      showClose: vjson.showClose,\r\n      // zIndex: vjson.zIndex,\r\n      // zIndex: -1,\r\n      modalProp: modalProp,\r\n      modal: vjson.modal,\r\n      _innerIsShow: vjson.isShow,\r\n      _innerIsLoading: vjson.loading,\r\n      _innerTitle: vjson.title,\r\n      _innerWidth: vjson.width,\r\n      _innerFullscreen: vjson.fullscreen,\r\n      _isOk: false, // 是否点击了确定\r\n      _onOK: undefined, // 确定时的回调\r\n      _onCancel: undefined, // 取消时的回调\r\n      rowType: undefined, // 打开模式 add/edit/view\r\n      row: undefined, // 初始化默认值\r\n      bodyItems,\r\n      footerItem,\r\n      headerItem,\r\n    }\r\n  },\r\n  computed: {\r\n    isLoading: {\r\n      set(newVal) {\r\n        if (this.vjson.reference) {\r\n          return _.set(this.vcxt.scope, this.vjson.reference + '.loading', newVal)\r\n        }\r\n        this._innerIsLoading = newVal\r\n      },\r\n      get() {\r\n        if (this.vjson.reference) {\r\n          return _.get(this.vcxt.scope, this.vjson.reference + '.loading', false)\r\n        }\r\n        return this._innerIsLoading\r\n      }\r\n    },\r\n    isShow: {\r\n      set(newVal) {\r\n        if (this.vjson.reference) {\r\n          return _.set(this.vcxt.scope, this.vjson.reference + '.isShow', newVal)\r\n        }\r\n        this._innerIsShow = newVal\r\n      },\r\n      get() {\r\n        if (this.vjson.reference) {\r\n          return _.get(this.vcxt.scope, this.vjson.reference + '.isShow', false)\r\n        }\r\n        return this._innerIsShow\r\n      }\r\n    },\r\n    title: {\r\n      set(newVal) {\r\n        if (this.vjson.reference) {\r\n          return _.set(this.vcxt.scope, this.vjson.reference + '.title', newVal)\r\n        }\r\n        this._innerTitle = newVal\r\n      },\r\n      get() {\r\n        if (this.vjson.reference) {\r\n          return _.get(this.vcxt.scope, this.vjson.reference + '.title', false)\r\n        }\r\n        return this._innerTitle\r\n      }\r\n    },\r\n    width: {\r\n      set(newVal) {\r\n        if (this.vjson.reference) {\r\n          return _.set(this.vcxt.scope, this.vjson.reference + '.width', newVal)\r\n        }\r\n        this._innerWidth = newVal\r\n      },\r\n      get() {\r\n        if (this.vjson.reference) {\r\n          return _.get(this.vcxt.scope, this.vjson.reference + '.width', false)\r\n        }\r\n        return this._innerWidth\r\n      }\r\n    },\r\n    fullscreen: {\r\n      set(newVal) {\r\n        if (this.vjson.reference) {\r\n          return _.set(this.vcxt.scope, this.vjson.reference + '.fullscreen', newVal)\r\n        }\r\n        this._innerFullscreen = newVal\r\n      },\r\n      get() {\r\n        if (this.vjson.reference) {\r\n          return _.get(this.vcxt.scope, this.vjson.reference + '.fullscreen', false)\r\n        }\r\n        return this._innerFullscreen\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    show(param) {\r\n      this.isShow = true\r\n      this._onOK = param?._onOK\r\n      this._onCancel = param?._onCancel\r\n      this.rowType = param?.rowType\r\n      this.row = param?.row\r\n      if (typeof param?.title === 'string') {\r\n        this.title = param.title\r\n      }\r\n    },\r\n    ok(data) {\r\n      this._isOk = true\r\n      this.close()\r\n      if (typeof this._onOK === 'function') {\r\n        this.$nextTick(() => {\r\n          this._onOK({\r\n            ...this.row,\r\n            data\r\n          })\r\n        })\r\n      }\r\n    },\r\n    close() {\r\n      this.isShow = false\r\n    },\r\n    _onClosed() {\r\n      this.runEvent('closed', ...arguments)\r\n      if (!this._isOk && typeof this._onCancel === 'function') {\r\n        this.$nextTick(() => {\r\n          this._onCancel()\r\n        })\r\n      }\r\n    },\r\n    _onOpened(evt) {\r\n      this._isOk = false\r\n      window['cw'] = this\r\n\r\n      const vjson = this.vjson\r\n      if (vjson.reference) {\r\n        _.set(this.vcxt.scope, vjson.reference + '.row', this.row)\r\n      }\r\n      this.runEvent('opened', ...arguments)\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <el-drawer v-model=\"isShow\" :style=\"calcStyle\" :title=\"title\" :size=\"size\"\r\n             append-to-body\r\n             destroy-on-close\r\n             :direction=\"direction\"\r\n             :show-close=\"showClose\"\r\n             :modal=\"modal\"\r\n             v-bind=\"modalProp\"\r\n             :close-on-click-modal=\"closeOnClickModal\"\r\n             :close-on-press-escape=\"closeOnPressEscape\"\r\n             @close=\"_onClosed\"\r\n             @opened=\"_onOpened\">\r\n    <template v-for=\"(item,itemIdx) in bodyItems\" :key=\"itemIdx\">\r\n      <component :is=\"getRuntimeCmp(item)\"\r\n                 :vjson=\"item\"\r\n                 :vcxt=\"vcxt\"\r\n                 :dialog-scope=\"this\"\r\n                 :parent-list=\"vjson.items\"\r\n                 :index-of-parent-list=\"itemIdx\"\r\n                 :parent-component=\"vjson\"/>\r\n    </template>\r\n    <template #footer v-if=\"!!footerItem\">\r\n      <component :is=\"getRuntimeCmp(footerItem)\"\r\n                 :vjson=\"footerItem\"\r\n                 :vcxt=\"vcxt\"\r\n                 :dialog-scope=\"this\"/>\r\n    </template>\r\n    <!--\r\n    <template #header v-if=\"!!headerItem\">\r\n      <component :is=\"getRuntimeCmp(headerItem)\"\r\n                 :vjson=\"headerItem\"\r\n                 :vcxt=\"vcxt\"/>\r\n    </template>\r\n    -->\r\n  </el-drawer>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {Drawer} from './Defaults'\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport {renderIcon} from \"../../utils\";\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Drawer)\r\n\r\n    if (vjson.reference) {\r\n      _.set(this.vcxt.scope, vjson.reference, {\r\n        isShow: vjson.isShow,\r\n        title: vjson.title,\r\n        size: vjson.size,\r\n      })\r\n    }\r\n\r\n    // 获取除了头部定义和尾部定义的所有组件\r\n    const bodyItems = _.filter(this.vjson.items, item => !item.reference || (item.reference !== this.vjson.footerReference && item.reference !== this.vjson.headerReference))\r\n    const footerItem = _.find(this.vjson.items, item => item.reference === this.vjson.footerReference)\r\n    const headerItem = _.find(this.vjson.items, item => item.reference === this.vjson.headerReference)\r\n\r\n    const modalProp = {}\r\n    if (vjson.zIndex) {\r\n      modalProp.zIndex = vjson.zIndex\r\n    }\r\n\r\n    return {\r\n      _innerIsShow: vjson.isShow,\r\n      _innerSize: vjson.size,\r\n      title: vjson.title,\r\n      direction: vjson.direction,\r\n      showClose: vjson.showClose,\r\n      // zIndex: vjson.zIndex,\r\n      // zIndex: undefined,\r\n      // zIndex: -1,\r\n      modalProp: modalProp,\r\n      modal: vjson.modal,\r\n      closeOnClickModal: vjson.closeOnClickModal,\r\n      closeOnPressEscape: vjson.closeOnPressEscape,\r\n      _isOk: false, // 是否点击了确定\r\n      _onOK: undefined, // 确定时的回调\r\n      _onCancel: undefined, // 取消时的回调\r\n      rowType: undefined, // 打开模式 add/edit/view\r\n      row: undefined, // 初始化默认值\r\n      bodyItems,\r\n      footerItem,\r\n      headerItem,\r\n    }\r\n  },\r\n  computed: {\r\n    isShow: {\r\n      set(newVal) {\r\n        if (this.vjson.reference) {\r\n          return _.set(this.vcxt.scope, this.vjson.reference + '.isShow', newVal)\r\n        }\r\n        this._innerIsShow = newVal\r\n      },\r\n      get() {\r\n        if (this.vjson.reference) {\r\n          return _.get(this.vcxt.scope, this.vjson.reference + '.isShow', false)\r\n        }\r\n        return this._innerIsShow\r\n      }\r\n    },\r\n    size: {\r\n      set(newVal) {\r\n        if (this.vjson.reference) {\r\n          return _.set(this.vcxt.scope, this.vjson.reference + '.size', newVal)\r\n        }\r\n        this._innerSize = newVal\r\n      },\r\n      get() {\r\n        if (this.vjson.reference) {\r\n          return _.get(this.vcxt.scope, this.vjson.reference + '.size', false)\r\n        }\r\n        return this._innerSize\r\n      }\r\n    },\r\n    title: {\r\n      set(newVal) {\r\n        if (this.vjson.reference) {\r\n          return _.set(this.vcxt.scope, this.vjson.reference + '.title', newVal)\r\n        }\r\n        this._innerTitle = newVal\r\n      },\r\n      get() {\r\n        if (this.vjson.reference) {\r\n          return _.get(this.vcxt.scope, this.vjson.reference + '.title', false)\r\n        }\r\n        return this._innerTitle\r\n      }\r\n    },\r\n  },\r\n  methods: {\r\n    show(param) {\r\n      this.isShow = true\r\n      this._onOK = param?._onOK\r\n      this._onCancel = param?._onCancel\r\n      this.rowType = param?.rowType\r\n      this.row = param?.row\r\n      if (typeof param?.title === 'string') {\r\n        this.title = param.title\r\n      }\r\n    },\r\n    ok(data) {\r\n      this._isOk = true\r\n      this.close()\r\n      if (typeof this._onOK === 'function') {\r\n        this.$nextTick(() => {\r\n          this._onOK({\r\n            ...this.row,\r\n            data\r\n          })\r\n        })\r\n      }\r\n    },\r\n    close() {\r\n      this.isShow = false\r\n    },\r\n    _onClosed() {\r\n      this.runEvent('closed', ...arguments)\r\n      if (!this._isOk && typeof this._onCancel === 'function') {\r\n        this.$nextTick(() => {\r\n          this._onCancel()\r\n        })\r\n      }\r\n    },\r\n    _onOpened(evt) {\r\n      this._isOk = false\r\n      window['cw'] = this\r\n\r\n      const vjson = this.vjson\r\n      if (vjson.reference) {\r\n        _.set(this.vcxt.scope, vjson.reference + '.row', this.row)\r\n      }\r\n      this.runEvent('opened', ...arguments)\r\n    },\r\n  }\r\n}\r\n</script>","<template>\r\n  <div :class=\"[...calcLayoutClass, 'yv-layout-default']\" :style=\"calcLayoutStyle\">\r\n    <yv-vjson-object :vjson=\"vjson.items\" :vcxt=\"vcxt\"/>\r\n\r\n    <template :key=\"idx\" v-for=\"(dlg,idx) in computDialogs\">\r\n      <yv-vjson-dialog v-if=\"dlg.xtype === 'dialog'\"\r\n                       :vjson=\"dlg\"\r\n                       :vcxt=\"vcxt\"/>\r\n      <yv-vjson-drawer v-if=\"dlg.xtype === 'drawer'\"\r\n                       :vjson=\"dlg\"\r\n                       :vcxt=\"vcxt\"/>\r\n    </template>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport baseLayout from \"./baseLayout\"\r\nimport YvVjsonDialog from \"../vjson/yv-vjson-dialog.vue\"\r\nimport YvVjsonDrawer from \"../vjson/yv-vjson-drawer.vue\";\r\n\r\nexport default {\r\n  mixins: [baseLayout],\r\n  components: {YvVjsonDrawer, YvVjsonDialog},\r\n  data() {\r\n    return {}\r\n  },\r\n  mounted() {\r\n  },\r\n  computed: {\r\n    computDialogs() {\r\n      const result = this.vjson.dialogs || []\r\n      return result\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n\r\n.yv-layout-rt.yv-layout-default {\r\n  background: #fff;\r\n}\r\n\r\n.yv-layout-flex {\r\n  display: flex;\r\n  flex-direction: column;\r\n  flex-grow: 1;\r\n  height: 100%;\r\n\r\n  & > .yv-row-container {\r\n    flex-grow: 1;\r\n  }\r\n\r\n  .yv-row-container {\r\n    height: 100%;\r\n    display: flex;\r\n    flex-direction: column;\r\n\r\n    & > .fit-height {\r\n      flex: 1;\r\n      display: flex;\r\n      flex-direction: column;\r\n      overflow: hidden;\r\n\r\n      & > .el-tabs__content {\r\n        align-content: flex-start;\r\n        flex: 1;\r\n        display: flex;\r\n        flex-direction: column;\r\n\r\n        & > .yv-tabpanel {\r\n          height: 100%;\r\n        }\r\n      }\r\n\r\n      &.el-form {\r\n        overflow: auto;\r\n      }\r\n    }\r\n  }\r\n\r\n  .fit-height.el-tabs {\r\n    height: 100%;\r\n    display: flex;\r\n    flex-direction: column;\r\n\r\n    & > .el-tabs__header {\r\n      margin-bottom: 0px;\r\n      background: #fff;\r\n    }\r\n\r\n    & > .el-tabs__content {\r\n      flex: 1;\r\n\r\n      & > .el-tab-pane {\r\n        height: 100%;\r\n\r\n        & > .yv-row-container {\r\n          height: 100%;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  .fit-height.yv-split {\r\n    height: 100%;\r\n    flex: 1;\r\n    overflow: hidden;\r\n\r\n    & > .split {\r\n      & > .split-area {\r\n        display: flex;\r\n        flex-direction: column;\r\n      }\r\n    }\r\n  }\r\n\r\n  .fit-height.yv-tree {\r\n    height: 100%\r\n  }\r\n\r\n  .fit-height.yv-aggrid-wrap {\r\n    height: 100%;\r\n    display: flex;\r\n    flex-direction: column;\r\n\r\n    & > .yv-aggrid {\r\n      flex: 1\r\n    }\r\n  }\r\n}\r\n</style>","export default {\r\n    props: {\r\n        _input: {\r\n            required: false,\r\n        },\r\n    },\r\n    data: {\r\n        vjson: {\r\n            layout: 'DefaultLayout',\r\n            items: []\r\n        }\r\n    },\r\n    methods: {},\r\n    computed: {},\r\n    watch: {}\r\n}\r\n","<template>\r\n  <el-input type=\"text\" clearable :modelValue='value' placeholder=\"表达式\" @update:modelValue='value = $event'>\r\n    <template #prefix>\r\n      <el-icon style=\"cursor: pointer\" @click=\"onSearchClick\">\r\n        <Search/>\r\n      </el-icon>\r\n\r\n      <el-dialog title=\"表达式变量\" draggable v-model=\"dialogShow\" :append-to-body=\"true\">\r\n        <el-tree :data=\"treeData\" @node-click=\"handleNodeClick\"\r\n                 :style=\"{minHeight: '200px'}\"\r\n                 :default-expand-all=\"true\"/>\r\n      </el-dialog>\r\n    </template>\r\n  </el-input>\r\n</template>\r\n<script>\r\nimport {Search} from '@element-plus/icons-vue'\r\nimport Designer from \"../designer\"\r\nimport {getGlobalVariable} from '../yv-designer-desc'\r\nimport _ from \"lodash\";\r\n\r\nexport default {\r\n  components: {Search,},\r\n  props: {\r\n    modelValue: String,\r\n    designer: Designer,\r\n    extendName: {\r\n      required: false,\r\n      default: ''\r\n    },\r\n    extendItems: {\r\n      required: false,\r\n      default: []\r\n    }\r\n  },\r\n  emits: [\r\n    'update:modelValue',\r\n  ],\r\n  data() {\r\n    return {\r\n      value: this.modelValue,\r\n      dialogShow: false,\r\n      treeData: []\r\n    }\r\n  },\r\n  watch: {\r\n    modelValue: {\r\n      handler(newVal) {\r\n        this.value = newVal\r\n      }\r\n    },\r\n    value: {\r\n      handler(newVal) {\r\n        this.$emit('update:modelValue', newVal)\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    onSearchClick() {\r\n      const dataRoot = this.designer.buildVExportData('reviewOnly')\r\n\r\n      /**\r\n       * 将根级变量，变换为树形结构\r\n       */\r\n      const rootNode = {children: []}\r\n\r\n      if (this.extendItems) {\r\n        const extendNode = {\r\n          label: this.$props.extendName,\r\n          fullKey: '',\r\n          children: []\r\n        }\r\n        _.forEach(this.$props.extendItems, item => {\r\n          extendNode.children.push({label: item, fullKey: item})\r\n        })\r\n        rootNode.children.push(extendNode)\r\n      }\r\n\r\n      const globalNode = {\r\n        label: '全局',\r\n        fullKey: 'global',\r\n        children: []\r\n      }\r\n      _.forEach(getGlobalVariable(), item => {\r\n        globalNode.children.push({label: item.name, fullKey: 'global.' + item.name})\r\n      })\r\n      rootNode.children.push(globalNode)\r\n\r\n      function travVar(parentNode, obj, parentKey) {\r\n        _.forOwn(obj, (value, key) => {\r\n          const node = {\r\n            label: key,\r\n            fullKey: parentKey ? parentKey + '.' + key : key,\r\n          }\r\n          parentNode.children.push(node)\r\n\r\n          if (typeof value === 'object') {\r\n            node.children = []\r\n            travVar(node, value, parentKey ? parentKey + '.' + key : key)\r\n          }\r\n        })\r\n      }\r\n\r\n      travVar(rootNode, dataRoot)\r\n\r\n      this.treeData = rootNode.children\r\n      this.dialogShow = true\r\n    },\r\n    handleNodeClick(node) {\r\n      this.value = '{' + node.fullKey + '}'\r\n      this.dialogShow = false\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <div>\r\n    <el-divider content-position=\"left\">入口属性</el-divider>\r\n    <div class=\"design-extend-row\" v-for=\"(column, idx) in layoutVJson.extendProps\">\r\n      <div class=\"design-extend-name\">\r\n        <el-input v-model=\"column.name\" type=\"text\" clearable/>\r\n      </div>\r\n      <el-button :icon=\"renderIcon('Delete')\" link @click=\"()=>removeProp(idx, column)\"/>\r\n    </div>\r\n    <el-row>\r\n      <el-button type=\"primary\" :icon=\"renderIcon('fa Plus')\" link @click=\"()=>addNewProp()\">添加一项</el-button>\r\n    </el-row>\r\n\r\n    <el-divider content-position=\"left\">附加属性</el-divider>\r\n    <div class=\"design-extend-row\" v-for=\"(column, idx) in layoutVJson.extendDatas\">\r\n      <div class=\"design-extend-name\">\r\n        <el-input v-model=\"column.name\" type=\"text\" clearable/>\r\n      </div>\r\n      <div class=\"design-extend-value\">\r\n        <el-input v-model=\"column.value\" type=\"text\" clearable/>\r\n      </div>\r\n      <el-button :icon=\"renderIcon('Delete')\" link @click=\"()=>removeData(idx, column)\"/>\r\n    </div>\r\n    <el-row>\r\n      <el-button type=\"primary\" :icon=\"renderIcon('fa Plus')\" link @click=\"()=>addNewData()\">添加属性</el-button>\r\n    </el-row>\r\n    <el-divider/>\r\n    <el-form-item label=\"启用界面权限\" label-width=\"120\" prop=\"vjsonExchangeEnable\">\r\n      <el-switch v-model=\"layoutVJson.vjsonExchangeEnable\"></el-switch>\r\n    </el-form-item>\r\n    <el-divider>界面规则请求体</el-divider>\r\n    <div class=\"sql-param\" v-for=\"(param, idx) in layoutVJson.slotParams\">\r\n      <div class=\"sql-param-detail\">\r\n        <div class=\"sql-param-detail-row\">\r\n          <el-input v-model=\"param.name\" placeholder=\"参数名 (不填代表请求本体)\" type=\"text\" clearable/>\r\n        </div>\r\n        <div class=\"sql-param-detail-row\">\r\n          <YvDesignInputExpress style=\"flex-grow: 1\" v-model=\"param.value\" placeholder=\"表达式 ( {*} 号代表全部属性 )\"\r\n                                :designer=\"designer\"/>\r\n        </div>\r\n        <div class=\"sql-param-detail-row\">\r\n          <div class=\"sql-param-detail-col\">参数 {{ idx + 1 }}</div>\r\n          <div class=\"sql-param-detail-col\">\r\n            <el-button :icon=\"renderIcon('Delete')\" type=\"primary\" link @click=\"removeSlotParam(idx)\">删除</el-button>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <el-row>\r\n      <el-button type=\"primary\" :icon=\"renderIcon('fa Plus')\" link @click=\"()=>addSlotParam()\">添加请求参数\r\n      </el-button>\r\n    </el-row>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport {renderIcon} from \"../../../utils\"\r\nimport YvDesignInputExpress from './yv-design-input-express.vue'\r\nimport Designer from \"../designer\";\r\n\r\nexport default {\r\n  components: {YvDesignInputExpress},\r\n  props: {\r\n    modelValue: Array,\r\n    designer: Designer,\r\n    layoutVJson: Object\r\n  },\r\n  data() {\r\n    if (!this.layoutVJson.extendProps) {\r\n      this.layoutVJson.extendProps = []\r\n    }\r\n    return {};\r\n  },\r\n  computed: {},\r\n  mounted() {\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    // removeColumn(idx, column) {\r\n    //   const modelValue = this.$props.modelValue || []\r\n    //   modelValue.splice(idx, 1);\r\n    //   this.$emit('update:modelValue', modelValue);\r\n    // },\r\n    // addNewColumn() {\r\n    //   const modelValue = this.$props.modelValue || []\r\n    //   modelValue.push({name: \"\"})\r\n    //   this.$emit('update:modelValue', modelValue);\r\n    // },\r\n    removeProp(idx, column) {\r\n      this.layoutVJson.extendProps.splice(idx, 1);\r\n    },\r\n    addNewProp(idx, column) {\r\n      this.layoutVJson.extendProps.push({name: \"\", value: \"\"})\r\n    },\r\n    removeData(idx, column) {\r\n      if (!this.layoutVJson.extendDatas) {\r\n        this.layoutVJson.extendDatas = []\r\n      }\r\n      this.layoutVJson.extendDatas.splice(idx, 1);\r\n    },\r\n    addNewData() {\r\n      if (!this.layoutVJson.extendDatas) {\r\n        this.layoutVJson.extendDatas = []\r\n      }\r\n      this.layoutVJson.extendDatas.push({name: \"\", value: \"\"})\r\n    },\r\n    addSlotParam() {\r\n      if (!this.layoutVJson.slotParams) {\r\n        this.layoutVJson.slotParams = []\r\n      }\r\n      this.layoutVJson.slotParams.push({name: \"\"})\r\n    },\r\n    removeSlotParam(idx) {\r\n      if (!this.layoutVJson.slotParams) {\r\n        this.layoutVJson.slotParams = []\r\n      }\r\n      this.layoutVJson.slotParams.splice(idx, 1);\r\n    }\r\n  },\r\n}\r\n</script>\r\n<style>\r\n.design-extend-row {\r\n  display: flex;\r\n  flex-direction: row;\r\n}\r\n\r\n.design-extend-row .design-extend-name {\r\n  flex: 2;\r\n}\r\n\r\n.design-extend-row .design-extend-value {\r\n  flex: 1;\r\n}\r\n</style>","<template>\r\n  <el-form ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"90px\"\r\n           size=\"default\" @submit.native.prevent>\r\n    <el-form-item label=\"弹窗高度\" prop=\"height\">\r\n      <el-input v-model=\"formData.height\"></el-input>\r\n    </el-form-item>\r\n    <el-form-item label=\"标题\" prop=\"title\">\r\n      <el-input v-model=\"formData.title\"></el-input>\r\n    </el-form-item>\r\n    <el-form-item label=\"自适应高度\" prop=\"flex\">\r\n      <el-switch v-model=\"formData.isFlex\"></el-switch>\r\n    </el-form-item>\r\n    <el-form-item label=\"页脚元素\" prop=\"footerReference\">\r\n      <el-input v-model=\"formData.footerReference\"></el-input>\r\n    </el-form-item>\r\n    <YvDesignInputParams v-model=\"formData.layoutParams\" :layoutVJson=\"vjson\" :designer=\"designer\"/>\r\n  </el-form>\r\n</template>\r\n\r\n<script>\r\nimport VJsonContext from \"../vjson/VJsonContext\"\r\nimport Designer from \"../design/designer\"\r\nimport basePropMix from \"../design/designCompoent/basePropMix\"\r\nimport {MoreFilled} from '@element-plus/icons-vue'\r\nimport YvDesignInputParams from \"../design/designCompoent/yv-design-input-params.vue\";\r\n\r\nexport default {\r\n  components: {\r\n    MoreFilled,\r\n    YvDesignInputParams,\r\n  },\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        height: this.vjson.height ?? '',\r\n        title: this.vjson.title,\r\n        isFlex: this.vjson.isFlex,\r\n        footerReference: this.vjson.footerReference,\r\n        layoutParams: this.vjson.layoutParams ?? [],\r\n        extendProps: this.vjson.extendProps ?? [],\r\n        extendDatas: this.vjson.extendDatas ?? [],\r\n      },\r\n    }\r\n  },\r\n  methods: {},\r\n  computed: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    },\r\n  }\r\n}\r\n</script>","<template>\r\n  <div :class=\"['yv-layout-rt', vjson?.isFlex? 'yv-layout-flex':'', 'yv-layout-default']\">\r\n    <el-alert v-if=\"vjson?.xtype === 'dialog'\" type=\"info\" effect=\"dark\" show-icon :title=\"'对话框 - ' + vjson.title\"\r\n              :closable=\"false\"/>\r\n    <el-alert v-else-if=\"vjson?.xtype === 'drawer'\" type=\"info\" effect=\"dark\" show-icon :title=\"'抽屉 - ' + vjson.title\"\r\n              :closable=\"false\"/>\r\n    <draggable :list=\"vjson.items\" item-key=\"id\"\r\n               v-bind=\"{group:'rowGroup', ghostClass: 'ghost',animation: 100}\"\r\n               class=\"yv-row-container\"\r\n               @end=\"onDragEnd\" @add=\"(e)=> onDragAdd(vjson.items, vjson, e)\"\r\n               @update=\"onDragUpdate\" :move=\"checkMove\">\r\n      <template #item=\"{ element: item, index }\">\r\n        <component :is=\"getDesignCmp(item)\"\r\n                   :vjson=\"item\"\r\n                   :vcxt=\"vcxt\"\r\n                   :designer=\"designer\"\r\n                   :parent-list=\"vjson.items\"\r\n                   :index-of-parent-list=\"index\"\r\n                   :parent-component=\"vjson\"/>\r\n      </template>\r\n      <template #footer>\r\n        <div class=\"no-widget-hint\" v-if=\"(vjson.items ?? []).length === 0\">\r\n          <component :is=\"renderIcon('DragOutlined')\"/>\r\n          拖拽组件放置于此处\r\n        </div>\r\n      </template>\r\n    </draggable>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport baseLayoutDesign from \"./baseLayoutDesign\"\r\nimport DefaultLayout from './DefaultLayout.vue'\r\nimport {registeLayout} from \"../design/yv-designer-desc\"\r\nimport DefaultLayoutEmpty from \"./DefaultLayout.empty\"\r\nimport DefaultLayoutProp from \"./DefaultLayoutProp.vue\"\r\n\r\nexport default {\r\n  layoutType: 'pc',\r\n  mixins: [baseLayoutDesign],\r\n  props: {\r\n    vjson: Object\r\n  },\r\n  data() {\r\n    return {}\r\n  },\r\n  mounted() {\r\n  },\r\n  computed: {},\r\n  watch: {\r\n    'vjson.height': {\r\n      immediate: true,\r\n      handler(newVal) {\r\n        // if (newVal === '100%') {\r\n        //   this.styleIfHeightPercent = {\r\n        //     height: '100%'\r\n        //   }\r\n        // } else {\r\n        //   this.styleIfHeightPercent = {}\r\n        // }\r\n      }\r\n    }\r\n  },\r\n  methods: {},\r\n  install(Vue) {\r\n    function saveHandler(vexport, vjson) {\r\n    }\r\n\r\n    function loadHandler(vexport, vjson) {\r\n    }\r\n\r\n    registeLayout(Vue, 'DefaultLayout', '空布局', DefaultLayout, this,\r\n        {\r\n          items: {title: '内容', isList: true},\r\n          dialogs: {title: '内部对话框', isList: true},\r\n        },\r\n        DefaultLayoutProp, DefaultLayoutEmpty,\r\n        saveHandler, loadHandler\r\n    )\r\n  }\r\n}\r\n</script>","<template>\r\n  <el-form ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"90px\"\r\n           size=\"default\" @submit.native.prevent>\r\n    <el-form-item label=\"弹窗位置\" prop=\"dialogPosition\">\r\n      <el-select v-model=\"formData.dialogPosition\">\r\n        <el-option\r\n            v-for=\"item in dialogPositionList\"\r\n            :key=\"item.label\"\r\n            :label=\"item.label\"\r\n            :value=\"item.value\"\r\n        />\r\n      </el-select>\r\n    </el-form-item>\r\n    <el-form-item label=\"弹窗高度\" prop=\"height\">\r\n      <el-input v-model=\"formData.height\"></el-input>\r\n    </el-form-item>\r\n    <el-form-item label=\"标题\" prop=\"title\">\r\n      <el-input v-model=\"formData.title\"></el-input>\r\n    </el-form-item>\r\n    <YvDesignInputParams v-model=\"formData.layoutParams\" :layoutVJson=\"vjson\" :designer=\"designer\"/>\r\n  </el-form>\r\n</template>\r\n\r\n<script>\r\nimport VJsonContext from \"../vjson/VJsonContext\"\r\nimport Designer from \"../design/designer\"\r\nimport basePropMix from \"../design/designCompoent/basePropMix\"\r\nimport {MoreFilled} from '@element-plus/icons-vue'\r\nimport YvDesignInputParams from \"../design/designCompoent/yv-design-input-params.vue\";\r\n\r\nexport default {\r\n  components: {\r\n    MoreFilled,\r\n    YvDesignInputParams,\r\n  },\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    const dialogPositionList = [\r\n      {\r\n        label: \"居中\",\r\n        value: \"center\"\r\n      },\r\n      {\r\n        label: \"居顶\",\r\n        value: \"top\"\r\n      },\r\n      {\r\n        label: \"居底\",\r\n        value: \"bottom\"\r\n      },\r\n      {\r\n        label: \"居右\",\r\n        value: \"right\"\r\n      },\r\n      {\r\n        label: \"居左\",\r\n        value: \"left\"\r\n      },\r\n    ]\r\n    return {\r\n      allowSaveStep: false,\r\n      dialogPositionList,\r\n      rules: [],\r\n      formData: {\r\n        height: this.vjson.height ?? '',\r\n        dialogPosition: this.vjson.dialogPosition ?? '',\r\n        title: this.vjson.title,\r\n        isFlex: this.vjson.isFlex,\r\n        footerReference: this.vjson.footerReference,\r\n        layoutParams: this.vjson.layoutParams ?? [],\r\n        extendProps: this.vjson.extendProps ?? [],\r\n      },\r\n    }\r\n  },\r\n  methods: {},\r\n  computed: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    },\r\n  }\r\n}\r\n</script>","<template>\r\n  <div :class=\"['yv-layout-rt', designer.vjson.isFlex? 'yv-layout-flex':'', 'yv-layout-default']\">\r\n    <draggable :list=\"designer.vjson.items\" item-key=\"id\"\r\n               v-bind=\"{group:'rowGroup', ghostClass: 'ghost',animation: 100}\"\r\n               class=\"yv-row-container\"\r\n               @end=\"onDragEnd\" @add=\"(e)=> onDragAdd(designer.vjson.items, designer.vjson, e)\"\r\n               @update=\"onDragUpdate\" :move=\"checkMove\">\r\n      <template #item=\"{ element: item, index }\">\r\n        <component :is=\"getDesignCmp(item)\"\r\n                   :vjson=\"item\"\r\n                   :vcxt=\"vcxt\"\r\n                   :designer=\"designer\"\r\n                   :parent-list=\"designer.vjson.items\"\r\n                   :index-of-parent-list=\"index\"\r\n                   :parent-component=\"designer.vjson\"/>\r\n      </template>\r\n      <template #footer>\r\n        <div class=\"no-widget-hint\" v-if=\"(designer.vjson.items ?? []).length === 0\">\r\n          <component :is=\"renderIcon('DragOutlined')\"/>\r\n          拖拽组件放置于此处\r\n        </div>\r\n      </template>\r\n    </draggable>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport baseLayoutDesign from \"./baseLayoutDesign\"\r\nimport DefaultLayout from './DefaultLayout.vue'\r\nimport {registeLayout} from \"../design/yv-designer-desc\"\r\nimport DefaultLayoutEmpty from \"./DefaultLayout.empty\"\r\nimport MobileDefaultLayoutProp from \"./MobileDefaultLayoutProp.vue\"\r\n\r\nexport default {\r\n  layoutType: 'pda',\r\n  mixins: [baseLayoutDesign],\r\n  props: {\r\n    vjson: Object\r\n  },\r\n  data() {\r\n    return {}\r\n  },\r\n  mounted() {\r\n  },\r\n  computed: {},\r\n  watch: {\r\n    'vjson.height': {\r\n      immediate: true,\r\n      handler(newVal) {\r\n        // if (newVal === '100%') {\r\n        //   this.styleIfHeightPercent = {\r\n        //     height: '100%'\r\n        //   }\r\n        // } else {\r\n        //   this.styleIfHeightPercent = {}\r\n        // }\r\n      }\r\n    }\r\n  },\r\n  methods: {},\r\n  install(Vue) {\r\n    function saveHandler(vexport, vjson) {\r\n    }\r\n\r\n    function loadHandler(vexport, vjson) {\r\n    }\r\n\r\n    registeLayout(Vue, 'MobileDefaultLayout', '移动端空布局', DefaultLayout, this,\r\n        {\r\n          items: {title: '内容', isList: true},\r\n        },\r\n        MobileDefaultLayoutProp, DefaultLayoutEmpty,\r\n        saveHandler, loadHandler\r\n    )\r\n  }\r\n}\r\n</script>","<template>\r\n  <div class=\"template-one\" refs=\"templateOne\" :class=\"[...calcLayoutClass, 'yv-layout-simplegrid']\"\r\n       :style=\"calcLayoutStyle\">\r\n    <div :class=\"['header',this.fixed]\">\r\n      <div class=\"toolbar\">\r\n        <div v-show=\"!vjson.hideForm\" class=\"shrink-wrap\" @click=\"shrinkClick\" v-if=\"vjson.form\">\r\n          <div class=\"shrink-open\" v-if=\"shrink\">\r\n            <span>收起<el-icon><ArrowUp/></el-icon></span>\r\n          </div>\r\n          <div class=\"shrink-stow\" v-else=\"!shrink\">\r\n            <span>展开<el-icon><ArrowDown/></el-icon></span>\r\n          </div>\r\n        </div>\r\n        <div class=\"toolbar-wrap\" v-if=\"vjson.toolbar\">\r\n          <yv-vjson-toolbar :vjson=\"vjson.toolbar\" :vcxt=\"vcxt\"/>\r\n        </div>\r\n      </div>\r\n      <transition-group name=\"list\">\r\n        <div v-show=\"!vjson.hideForm && shrink\" class=\"form\" v-if=\"vjson.form\">\r\n          <yv-vjson-object :vjson=\"vjson.form\" :vcxt=\"vcxt\"/>\r\n        </div>\r\n      </transition-group>\r\n    </div>\r\n    <div class=\"grid\" v-if=\"vjson.items\">\r\n      <yv-vjson-object :vjson=\"vjson.items\" :vcxt=\"vcxt\"/>\r\n    </div>\r\n    <template :key=\"idx\" v-for=\"(dlg,idx) in computDialogs\">\r\n      <yv-vjson-dialog v-if=\"dlg.xtype === 'dialog'\"\r\n                       :vjson=\"dlg\"\r\n                       :vcxt=\"vcxt\"/>\r\n      <yv-vjson-drawer v-if=\"dlg.xtype === 'drawer'\"\r\n                       :vjson=\"dlg\"\r\n                       :vcxt=\"vcxt\"/>\r\n    </template>\r\n  </div>\r\n</template>\r\n<script>\r\nimport YvVjsonDialog from \"../vjson/yv-vjson-dialog.vue\"\r\nimport YvVjsonDrawer from \"../vjson/yv-vjson-drawer.vue\";\r\nimport {ArrowDown, ArrowUp, MoreFilled} from '@element-plus/icons-vue'\r\nimport baseLayout from \"./baseLayout\";\r\n\r\nexport default {\r\n  mixins: [baseLayout],\r\n  components: {\r\n    ArrowDown, ArrowUp, MoreFilled,\r\n    YvVjsonDrawer, YvVjsonDialog\r\n  },\r\n  data() {\r\n    return {\r\n      shrink: true,\r\n      fixed: ''\r\n    }\r\n  },\r\n  mounted() {\r\n    window['cp'] = this\r\n  },\r\n  methods: {\r\n    shrinkClick() {\r\n      this.shrink = !this.shrink\r\n    }\r\n  },\r\n  computed: {\r\n    computDialogs() {\r\n      const result = this.vjson.dialogs || []\r\n      return result\r\n    }\r\n  },\r\n  install(Vue) {\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.template-one {\r\n  height: 100%;\r\n  overflow: auto;\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  & > .header {\r\n    flex-shrink: 0;\r\n    background: #fff;\r\n    margin-bottom: 10px;\r\n    padding-bottom: 5px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid var(--frist-border-color);\r\n\r\n    & > .toolbar {\r\n      position: relative;\r\n      padding-top: 5px;\r\n      z-index: 1;\r\n\r\n      .shrink-wrap {\r\n        position: absolute;\r\n        right: 10px;\r\n        width: 90px;\r\n        height: 43px;\r\n        bottom: -6px;\r\n        font-size: 14px;\r\n        font-weight: 400;\r\n        text-align: center;\r\n        line-height: 40px;\r\n        cursor: pointer;\r\n        z-index: 2;\r\n\r\n        .shrink-open {\r\n          background: #f9f9f9;\r\n          border: 1px solid var(--frist-border-color);\r\n          border-bottom: 0;\r\n          height: 100%;\r\n          border-top-left-radius: 3px;\r\n          border-top-right-radius: 3px;\r\n        }\r\n      }\r\n\r\n      & > .toolbar-wrap {\r\n        padding: 5px 110px 0 10px;\r\n        height: 42px;\r\n        overflow: hidden;\r\n\r\n        & > .el-row {\r\n          & > * {\r\n            margin-bottom: 5px\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    & > .form {\r\n      margin: 5px 10px 5px 10px;\r\n      background: #f9f9f9;\r\n      border: 1px solid var(--frist-border-color);\r\n\r\n      form {\r\n        padding: 10px 10px 0 10px\r\n      }\r\n    }\r\n\r\n    &.tool-fixed {\r\n      background: #000;\r\n    }\r\n  }\r\n\r\n  & > .grid {\r\n    flex-shrink: 1;\r\n    flex-grow: 1;\r\n    overflow: hidden;\r\n    margin: 0 10px 10px 10px;\r\n    border: 1px solid var(--frist-border-color);\r\n    background-color: white;\r\n  }\r\n}\r\n</style>","<template>\r\n  <el-form ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"90px\" size=\"default\" @submit.native.prevent>\r\n    <el-form-item label=\"弹窗高度\" prop=\"height\">\r\n      <el-input v-model=\"formData.height\"></el-input>\r\n    </el-form-item>\r\n    <el-form-item label=\"标题\" prop=\"title\">\r\n      <el-input v-model=\"formData.title\"></el-input>\r\n    </el-form-item>\r\n    <el-form-item label=\"自适应高度\" prop=\"flex\">\r\n      <el-switch v-model=\"formData.isFlex\"></el-switch>\r\n    </el-form-item>\r\n    <el-form-item label=\"隐藏表单\" prop=\"height\">\r\n      <el-switch v-model=\"formData.hideForm\"/>\r\n    </el-form-item>\r\n    <YvDesignInputParams v-model=\"formData.layoutParams\" :layoutVJson=\"vjson\" :designer=\"designer\" />\r\n  </el-form>\r\n</template>\r\n\r\n<script>\r\nimport {MoreFilled} from \"@element-plus/icons-vue\";\r\nimport basePropMix from \"../design/designCompoent/basePropMix\";\r\nimport Designer from \"../design/designer\";\r\nimport VJsonContext from \"../vjson/VJsonContext\";\r\nimport YvDesignInputParams from \"../design/designCompoent/yv-design-input-params.vue\";\r\n\r\nexport default {\r\n  components: {\r\n    MoreFilled,\r\n    YvDesignInputParams,\r\n  },\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        hideForm: this.vjson.hideForm ?? false,\r\n        layoutParams: this.vjson.layoutParams ?? [],\r\n      },\r\n    }\r\n  },\r\n  methods: {},\r\n  computed: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    },\r\n  }\r\n}\r\n</script>","export default {\r\n    props: {\r\n        _input: {\r\n            required: false,\r\n        },\r\n    },\r\n    data: {\r\n        vjson: {\r\n            layout: 'SimpleGrid',\r\n\r\n            toolbar: {\r\n                xtype: 'toolbar',\r\n                items: [\r\n                    {\r\n                        xtype: 'button',\r\n                        iconCls: 'x-fa fa-save',\r\n                        text: '按钮1',\r\n                    },\r\n                    {\r\n                        xtype: 'button',\r\n                        text: '按钮2',\r\n                        iconCls: 'x-fa fa-save',\r\n                    },\r\n                    {\r\n                        xtype: 'button',\r\n                        text: '按钮3',\r\n                        iconCls: 'x-fa fa-save',\r\n                    },\r\n                    {\r\n                        xtype: 'button',\r\n                        text: '按钮4',\r\n                        iconCls: 'x-fa fa-save',\r\n                    },\r\n                    {\r\n                        xtype: 'slot',\r\n                        name: 'custom1'\r\n                    },\r\n                ],\r\n            },\r\n\r\n            form: [\r\n                {\r\n                    xtype: 'form',\r\n                    colsOfRow: '4',\r\n                    items: [\r\n                        {\r\n                            xtype: 'textfield',\r\n                            fieldLabel: '查询1',\r\n                            bind: {\r\n                                value: '',\r\n                            },\r\n                        },\r\n                        {\r\n                            xtype: 'textfield',\r\n                            fieldLabel: '查询2',\r\n                            bind: {\r\n                                value: '',\r\n                            },\r\n                        },\r\n                        {\r\n                            xtype: 'textfield',\r\n                            fieldLabel: '查询3',\r\n                            bind: {\r\n                                value: '',\r\n                            },\r\n                        },\r\n                        {\r\n                            xtype: 'combo',\r\n                            fieldLabel: '查询4',\r\n                            bind: {\r\n                                value: '',\r\n                            },\r\n                        },\r\n                        {\r\n                            xtype: 'numberfield',\r\n                            fieldLabel: '查询5',\r\n                            bind: {\r\n                                value: '',\r\n                            },\r\n                        },\r\n                        {\r\n                            xtype: 'datefield',\r\n                            type: 'date',\r\n                            fieldLabel: '查询6',\r\n                            bind: {\r\n                                value: '',\r\n                            },\r\n                        },\r\n                    ],\r\n                },\r\n            ],\r\n\r\n            items: [\r\n                {\r\n                    xtype: 'aggrid',\r\n                    reference: 'grid1',\r\n                    pagination: true,\r\n                    _mode: 'select',\r\n                    pageSize: 100,\r\n                    plugins: {\r\n                        gridcellediting: {\r\n                            selectOnEdit: true\r\n                        }\r\n                    },\r\n                    dataSource: {\r\n                        method: 'invoke',\r\n                        url: '/bas/item/Item@queryAllItem',\r\n                        params: {\r\n                            formData: {\r\n                                owner_id: \"\"\r\n                            },\r\n                        },\r\n                    },\r\n                    columns: [\r\n                        {dataIndex: 'item_id', header: '商品主键', hidden: true,},\r\n                        {\r\n                            dataIndex: 'owner_id',\r\n                            header: '货主ID', filterType: 'string',\r\n                        },\r\n                        {\r\n                            dataIndex: 'item_code',\r\n                            header: '商品编码', filterType: 'string',\r\n                            editable: true,\r\n                        },\r\n                        {\r\n                            dataIndex: 'item_name',\r\n                            header: '商品名称', filterType: 'string', editable: true,\r\n                            editor: {\r\n                                xtype: 'timefield',\r\n                            }\r\n                        },\r\n                        {\r\n                            dataIndex: 'logogram',\r\n                            header: '助记码', filterType: 'string',\r\n                        },\r\n                        {\r\n                            dataIndex: 'item_desc',\r\n                            header: '商品描述', filterType: 'string',\r\n                        },\r\n                        {\r\n                            dataIndex: 'manufacturer',\r\n                            header: '厂家', filterType: 'string',\r\n                        },\r\n                        {\r\n                            dataIndex: 'origin',\r\n                            header: '厂家地址', filterType: 'string',\r\n                        },\r\n                        {\r\n                            dataIndex: 'stock_env',\r\n                            header: '存储条件', filterType: 'string',\r\n                            dict: 'STOCK_ENV'\r\n                        },\r\n                        {\r\n                            dataIndex: 'item_classify',\r\n                            header: '药品大类', filterType: 'string',\r\n                            dict: 'ITEM_CLASSIFY'\r\n                        },\r\n                        {\r\n                            dataIndex: 'item_category',\r\n                            header: '剂型', filterType: 'string',\r\n                            dict: 'ITEM_CATEGORY'\r\n                        },\r\n                        {\r\n                            dataIndex: 'item_abc',\r\n                            header: 'ABC分类整件', filterType: 'string',\r\n                            dict: 'SKU_ABC'\r\n                        },\r\n                        {\r\n                            dataIndex: 'approval_no',\r\n                            header: '批准文号', filterType: 'string',\r\n                        },\r\n                        {\r\n                            dataIndex: 'barcode',\r\n                            header: \"69码\", filterType: 'string',\r\n                        },\r\n                        {\r\n                            dataIndex: 'item_tips',\r\n                            header: '商品提示', filterType: 'string',\r\n                        },\r\n                        {\r\n                            dataIndex: 'remark',\r\n                            header: '备注', filterType: 'string',\r\n                        },\r\n                        {\r\n                            dataIndex: 'is_enable',\r\n                            header: '是否启用',\r\n                            xtype: 'checkcolumn', filterType: 'string',\r\n                            disabled: true,\r\n                        },\r\n                        {\r\n                            dataIndex: 'create_at', filterType: 'string',\r\n                            header: '创建时间',\r\n                        },\r\n                        {\r\n                            dataIndex: 'create_by', filterType: 'string',\r\n                            header: '创建人',\r\n                        },\r\n                        {\r\n                            dataIndex: 'update_at', filterType: 'string',\r\n                            header: '更新时间',\r\n                        },\r\n                        {\r\n                            dataIndex: 'update_by', filterType: 'string',\r\n                            header: '更新人',\r\n                        },\r\n                        {\r\n                            dataIndex: 'item_abc2', filterType: 'string',\r\n                            header: 'ABC分类拆零',\r\n                            dict: 'SKU_ABC'\r\n                        },\r\n                        {\r\n                            dataIndex: 'item_mhdhb', filterType: 'string',\r\n                            header: '总货架寿命',\r\n                        },\r\n                        {\r\n                            dataIndex: 'item_specification', filterType: 'string',\r\n                            header: '商品规格',\r\n                        },\r\n                        {\r\n                            dataIndex: 'is_double_quality', filterType: 'string',\r\n                            header: '是否双人质检',\r\n                        },\r\n                        {\r\n                            dataIndex: 'is_supervise', filterType: 'string',\r\n                            header: '是否为监管商品',\r\n                        },\r\n                        {\r\n                            dataIndex: 'is_expensive', filterType: 'string',\r\n                            header: '是否贵重药品',\r\n                        },\r\n                        {\r\n                            dataIndex: 'is_abnormity', filterType: 'string',\r\n                            header: '是否异形品',\r\n                        },\r\n                        {\r\n                            dataIndex: 'item_id_erp', filterType: 'string',\r\n                            header: 'ERP商品ID',\r\n                        },\r\n                        {\r\n                            dataIndex: 'is_check', filterType: 'string',\r\n                            header: '是否需要质检',\r\n                        },\r\n                    ],\r\n                },\r\n            ],\r\n        },\r\n    },\r\n    methods: {},\r\n    computed: {},\r\n    watch: {}\r\n}\r\n","<template>\r\n  <div :class=\"['yv-layout-rt', designer.vjson.isFlex? 'yv-layout-flex':'', 'template-one']\" refs=\"templateOne\">\r\n    <div :class=\"['header',this.fixed]\">\r\n      <div class=\"toolbar\">\r\n        <div v-show=\"!designer.vjson.hideForm\" class=\"shrink-wrap\" @click=\"shrinkClick\" v-if=\"designer.vjson.form\">\r\n          <div class=\"shrink-open\" v-if=\"shrink\">\r\n            <span>收起<el-icon><ArrowUp/></el-icon></span>\r\n          </div>\r\n          <div class=\"shrink-stow\" v-else=\"!shrink\">\r\n            <span>展开<el-icon><ArrowDown/></el-icon></span>\r\n          </div>\r\n        </div>\r\n        <div class=\"toolbar-wrap\" v-if=\"designer.vjson.toolbar\">\r\n          <component :is=\"getDesignCmp(designer.vjson.toolbar)\"\r\n                     :vjson=\"designer.vjson.toolbar\"\r\n                     :vcxt=\"vcxt\"\r\n                     :designer=\"designer\"\r\n                     :parent-component=\"designer.vjson\"/>\r\n        </div>\r\n      </div>\r\n      <div v-show=\"!designer.vjson.hideForm\" class=\"form\" v-if=\"shrink && designer.vjson.form\">\r\n        <draggable :list=\"designer.vjson.form\" item-key=\"id\"\r\n                   v-bind=\"{group:'rowGroup', ghostClass: 'ghost',animation: 100}\"\r\n                   tag=\"transition-group\" :component-data=\"{name: 'fade'}\"\r\n                   @end=\"onDragEnd\" @add=\"(e)=> onDragAdd(designer.vjson.form, designer.vjson, e)\"\r\n                   @update=\"onDragUpdate\" :move=\"checkMove\">\r\n          <template #item=\"{ element: item, index }\">\r\n            <div class=\"transition-group-el\" :key=\"item.id\">\r\n              <component :is=\"getDesignCmp(item)\"\r\n                         :vjson=\"item\"\r\n                         :vcxt=\"vcxt\"\r\n                         :designer=\"designer\"\r\n                         :parent-list=\"designer.vjson.form\"\r\n                         :index-of-parent-list=\"index\"\r\n                         :parent-component=\"designer.vjson\"/>\r\n            </div>\r\n          </template>\r\n        </draggable>\r\n      </div>\r\n    </div>\r\n    <div class=\"grid\" v-if=\"designer.vjson.items\">\r\n      <draggable :list=\"designer.vjson.items\" item-key=\"id\"\r\n                 v-bind=\"{group:'rowGroup', ghostClass: 'ghost',animation: 100}\"\r\n                 class=\"yv-row-container\"\r\n                 @end=\"onDragEnd\" @add=\"(e)=> onDragAdd(designer.vjson.items, designer.vjson, e)\"\r\n                 @update=\"onDragUpdate\" :move=\"checkMove\">\r\n        <template #item=\"{ element: item, index }\">\r\n          <component :is=\"getDesignCmp(item)\"\r\n                     :vjson=\"item\"\r\n                     :vcxt=\"vcxt\"\r\n                     :designer=\"designer\"\r\n                     :parent-list=\"designer.vjson.items\"\r\n                     :index-of-parent-list=\"index\"\r\n                     :parent-component=\"designer.vjson\"/>\r\n        </template>\r\n        <template #footer>\r\n          <div class=\"no-widget-hint\" v-if=\"(designer.vjson.items ?? []).length === 0\">\r\n            拖拽组件放置于此处\r\n          </div>\r\n        </template>\r\n      </draggable>\r\n    </div>\r\n  </div>\r\n</template>\r\n<script>\r\nimport {ArrowDown, ArrowUp, MoreFilled} from '@element-plus/icons-vue'\r\nimport {registeLayout} from \"../design/yv-designer-desc\"\r\nimport baseLayoutDesign from \"./baseLayoutDesign\"\r\nimport SimpleGrid from \"./SimpleGrid.vue\"\r\nimport SimpleGridProp from \"./SimpleGridProp.vue\"\r\nimport SimpleGridEmpty from \"./SimpleGrid.empty\"\r\n\r\nexport default {\r\n  layoutType: 'pc',\r\n  mixins: [baseLayoutDesign],\r\n  components: {\r\n    ArrowDown, ArrowUp, MoreFilled\r\n  },\r\n  data() {\r\n    return {\r\n      shrink: true,\r\n      fixed: ''\r\n    }\r\n  },\r\n  mounted() {\r\n  },\r\n  methods: {\r\n    shrinkClick() {\r\n      this.shrink = !this.shrink\r\n    }\r\n  },\r\n  install(Vue) {\r\n    registeLayout(\r\n        Vue,\r\n        'SimpleGrid',\r\n        '单表格(带查询表头)',\r\n        SimpleGrid,\r\n        this,\r\n        {\r\n          toolbar: {title: '工具箱', xtype: 'toolbar'},\r\n          form: {title: '表单', isList: true},\r\n          items: {title: '内容', isList: true},\r\n          dialogs: {title: '内部对话框', isList: true},\r\n        },\r\n        SimpleGridProp, SimpleGridEmpty\r\n    )\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.yv-design-mode {\r\n  .template-one {\r\n    height: 100%;\r\n    overflow: auto;\r\n    display: flex;\r\n    flex-direction: column;\r\n\r\n    & > .header {\r\n      flex-shrink: 0;\r\n      background: #fff;\r\n      margin-bottom: 10px;\r\n      padding-bottom: 5px;\r\n      overflow: hidden;\r\n      border-bottom: 1px solid var(--frist-border-color);\r\n\r\n      & > .toolbar {\r\n        position: relative;\r\n        padding-top: 5px;\r\n        z-index: 1;\r\n        background: none;\r\n\r\n        .shrink-wrap {\r\n          position: absolute;\r\n          right: 10px;\r\n          width: 90px;\r\n          height: 43px;\r\n          bottom: -6px;\r\n          font-size: 14px;\r\n          font-weight: 400;\r\n          text-align: center;\r\n          line-height: 40px;\r\n          cursor: pointer;\r\n          z-index: 2;\r\n\r\n          .shrink-open {\r\n            background: #f9f9f9;\r\n            border: 1px solid var(--frist-border-color);\r\n            border-bottom: 0;\r\n            height: 100%;\r\n            border-top-left-radius: 3px;\r\n            border-top-right-radius: 3px;\r\n          }\r\n        }\r\n\r\n        & > .toolbar-wrap {\r\n          padding: 0 110px 0 10px;\r\n          height: 42px;\r\n          overflow: hidden;\r\n\r\n          & > .el-row {\r\n\r\n            & > * {\r\n              margin-right: 12px\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      & > .form {\r\n        margin: 5px 10px 5px 10px;\r\n        background: #f9f9f9;\r\n        border: 1px solid var(--frist-border-color);\r\n\r\n        form {\r\n          padding: 10px 10px 0 10px\r\n        }\r\n      }\r\n\r\n      &.tool-fixed {\r\n        background: #000;\r\n      }\r\n\r\n      & > .grid {\r\n        margin: 0 10px 10px 10px;\r\n        border: 1px solid var(--frist-border-color);\r\n        background-color: white;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"split\" ref=\"parent\">\r\n    <slot></slot>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport Split from \"split.js\";\r\nimport {defineComponent, onMounted, ref, SetupContext, VNode, watch,} from \"vue\";\r\n\r\ninterface IDataContainer {\r\n  instance: any;\r\n  elements: Array<any> | undefined;\r\n  sizes: Array<number> | undefined;\r\n  minSizes: Array<number> | undefined;\r\n  destroy: Function,\r\n}\r\n\r\nexport default defineComponent({\r\n  emits: [\"onDrag\", \"onDragStart\", \"onDragEnd\"],\r\n  props: {\r\n    direction: {type: String, default: \"horizontal\"},\r\n    gutterSize: {type: Number, default: 8},\r\n    firstAreaDefaultSize: Number,\r\n    lastAreaDefaultSize: Number,\r\n  },\r\n\r\n  setup(props, ctx: SetupContext) {\r\n    const parent = ref(null);\r\n    const dataVal = {\r\n      elements: new Array<any>(),\r\n      sizes: new Array<number>(),\r\n      minSizes: new Array<number>(),\r\n      instance: null,\r\n      //@ts-ignore\r\n      destory: Function\r\n    };\r\n\r\n    //@ts-ignore\r\n    const data = ref(dataVal as IDataContainer);\r\n    watch(() => props.direction, (value, oldValue) => {\r\n      init()\r\n    })\r\n    let useFirstDefaultSize = props.firstAreaDefaultSize && props.firstAreaDefaultSize > 0;\r\n    let useLastDefaultSize = props.lastAreaDefaultSize && props.lastAreaDefaultSize > 0;\r\n    let splitSumCount = 0;\r\n    const init = () => {\r\n      if (data.value.instance !== null) {\r\n        data.value.instance?.destroy();\r\n      }\r\n      let splitCount = 0;\r\n      data.value.instance = null;\r\n      const splitOptions = {\r\n        direction: props.direction || \"horizontal\",\r\n        sizes: data.value.sizes || 50,\r\n        minSize: data.value.minSizes || 100,\r\n        gutterSize: props.gutterSize || 8,\r\n        cursor: props.direction === \"horizontal\" ? \"col-resize\" : \"row-resize\",\r\n        onDrag: function () {\r\n          useFirstDefaultSize = false;\r\n          useLastDefaultSize = false;\r\n          ctx.emit(\"onDrag\", data.value.instance?.getSizes());\r\n        },\r\n        onDragStart: function () {\r\n          ctx.emit(\"onDragStart\", data.value.instance?.getSizes());\r\n        },\r\n        onDragEnd: function () {\r\n          ctx.emit(\"onDragEnd\", data.value.instance?.getSizes());\r\n        },\r\n      };\r\n      if (useFirstDefaultSize) {\r\n        splitOptions[\"elementStyle\"] = function elementStyle(dimension, size, gutterSize) {\r\n          // console.log(\"@@@@\", dimension, size, gutterSize)\r\n          splitCount++\r\n          let res\r\n          if (splitSumCount === 2 && useFirstDefaultSize && !useLastDefaultSize) {\r\n            // 2个split-area & 使用firstAreaDefaultSize & 未使用lastAreaDefaultSize\r\n            if (splitCount === 1) {\r\n              res = {[dimension]: `calc(${props.firstAreaDefaultSize}px - ${gutterSize}px)`};\r\n            } else {\r\n              res = {[dimension]: `calc(100% - ${props.firstAreaDefaultSize + gutterSize}px)`};\r\n            }\r\n          } else if (splitSumCount === 2 && !useFirstDefaultSize && useLastDefaultSize) {\r\n            // 2个split-area & 未使用firstAreaDefaultSize & 使用了lastAreaDefaultSize\r\n            if (splitCount === 2) {\r\n              res = {[dimension]: `calc(${props.lastAreaDefaultSize}px - ${gutterSize}px)`};\r\n            } else {\r\n              res = {[dimension]: `calc(100% - ${props.lastAreaDefaultSize + gutterSize}px)`};\r\n            }\r\n          } else if (splitSumCount === 3 && useFirstDefaultSize && useLastDefaultSize) {\r\n            // 3个split-area & 使用firstAreaDefaultSize & 使用了lastAreaDefaultSize\r\n            if (splitCount === 1) {\r\n              res = {[dimension]: `calc(${props.firstAreaDefaultSize}px - ${gutterSize}px)`};\r\n            } else if (splitCount === 3) {\r\n              res = {[dimension]: `calc(${props.lastAreaDefaultSize}px - ${gutterSize}px)`};\r\n            } else {\r\n              res = {[dimension]: `calc(100% - ${props.firstAreaDefaultSize + props.lastAreaDefaultSize + gutterSize}px)`};\r\n            }\r\n          } else {\r\n            res = {[dimension]: `calc(${size}% - ${gutterSize}px)`};\r\n          }\r\n          // console.log(\"@@@@###\", res)\r\n          return res\r\n        };\r\n      }\r\n      //@ts-ignore\r\n      data.value.instance = Split(data.value.elements ?? [],\r\n          splitOptions as Split.Options\r\n      )\r\n    };\r\n    onMounted(() => {\r\n      data.value.elements = [];\r\n      data.value.sizes = [];\r\n      data.value.minSizes = [];\r\n      var parentVal = parent.value as unknown as HTMLElement;\r\n\r\n      if (parentVal) {\r\n        for (var i = 0; i < parentVal.children.length; i++) {\r\n          var child = parentVal.children[i];\r\n          data.value.elements.push(child);\r\n        }\r\n      }\r\n      if (ctx.slots.default) {\r\n        ctx.slots.default()?.forEach((vnode: VNode) => {\r\n          var vodeType = vnode.type as any;\r\n          if (vodeType.name == \"SplitArea\") {\r\n            if (vnode.props) {\r\n              var a = vnode.props as {\r\n                size: number;\r\n                minSize: number;\r\n              };\r\n              data.value.sizes?.push(a.size);\r\n              data.value.minSizes?.push(a.minSize);\r\n            }\r\n          }\r\n        });\r\n        splitSumCount = ctx.slots.default().length;\r\n      }\r\n      init();\r\n    });\r\n\r\n    const reset = () => {\r\n      useFirstDefaultSize = props.firstAreaDefaultSize && props.firstAreaDefaultSize > 0;\r\n      useLastDefaultSize = props.lastAreaDefaultSize && props.lastAreaDefaultSize > 0;\r\n      init();\r\n    };\r\n    const getSizes = () => {\r\n      return data.value.instance?.getSizes() || 0;\r\n    };\r\n\r\n    return {data, init, parent, reset, getSizes};\r\n  },\r\n});\r\n</script>\r\n\r\n<style>\r\n.split {\r\n  -webkit-box-sizing: border-box;\r\n  -moz-box-sizing: border-box;\r\n  box-sizing: border-box;\r\n  overflow-y: auto;\r\n  overflow-x: hidden;\r\n  height: 100%;\r\n  width: 100%;\r\n}\r\n\r\n.gutter {\r\n  background-color: #eee;\r\n  background-repeat: no-repeat;\r\n  background-position: 50%;\r\n}\r\n\r\n.gutter.gutter-horizontal {\r\n  cursor: col-resize;\r\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==\");\r\n}\r\n\r\n.gutter.gutter-vertical {\r\n  cursor: row-resize;\r\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFAQMAAABo7865AAAABlBMVEVHcEzMzMzyAv2sAAAAAXRSTlMAQObYZgAAABBJREFUeF5jOAMEEAIEEFwAn3kMwcB6I2AAAAAASUVORK5CYII=\");\r\n}\r\n\r\n.split.split-horizontal,\r\n.gutter.gutter-horizontal {\r\n  height: 100%;\r\n  float: left;\r\n}\r\n</style>\r\n\r\n","<template>\r\n  <div class=\"split\" ref=\"parent\">\r\n    <slot></slot>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport Split from \"split.js\";\r\nimport {defineComponent, onMounted, ref, SetupContext, VNode, watch,} from \"vue\";\r\n\r\ninterface IDataContainer {\r\n  instance: any;\r\n  elements: Array<any> | undefined;\r\n  sizes: Array<number> | undefined;\r\n  minSizes: Array<number> | undefined;\r\n  destroy: Function,\r\n}\r\n\r\nexport default defineComponent({\r\n  emits: [\"onDrag\", \"onDragStart\", \"onDragEnd\"],\r\n  props: {\r\n    direction: {type: String, default: \"horizontal\"},\r\n    gutterSize: {type: Number, default: 8},\r\n    firstAreaDefaultSize: Number,\r\n    lastAreaDefaultSize: Number,\r\n  },\r\n\r\n  setup(props, ctx: SetupContext) {\r\n    const parent = ref(null);\r\n    const dataVal = {\r\n      elements: new Array<any>(),\r\n      sizes: new Array<number>(),\r\n      minSizes: new Array<number>(),\r\n      instance: null,\r\n      //@ts-ignore\r\n      destory: Function\r\n    };\r\n\r\n    //@ts-ignore\r\n    const data = ref(dataVal as IDataContainer);\r\n    watch(() => props.direction, (value, oldValue) => {\r\n      init()\r\n    })\r\n    let useFirstDefaultSize = props.firstAreaDefaultSize && props.firstAreaDefaultSize > 0;\r\n    let useLastDefaultSize = props.lastAreaDefaultSize && props.lastAreaDefaultSize > 0;\r\n    let splitSumCount = 0;\r\n    const init = () => {\r\n      if (data.value.instance !== null) {\r\n        data.value.instance?.destroy();\r\n      }\r\n      let splitCount = 0;\r\n      data.value.instance = null;\r\n      const splitOptions = {\r\n        direction: props.direction || \"horizontal\",\r\n        sizes: data.value.sizes || 50,\r\n        minSize: data.value.minSizes || 100,\r\n        gutterSize: props.gutterSize || 8,\r\n        cursor: props.direction === \"horizontal\" ? \"col-resize\" : \"row-resize\",\r\n        onDrag: function () {\r\n          useFirstDefaultSize = false;\r\n          useLastDefaultSize = false;\r\n          ctx.emit(\"onDrag\", data.value.instance?.getSizes());\r\n        },\r\n        onDragStart: function () {\r\n          ctx.emit(\"onDragStart\", data.value.instance?.getSizes());\r\n        },\r\n        onDragEnd: function () {\r\n          ctx.emit(\"onDragEnd\", data.value.instance?.getSizes());\r\n        },\r\n      };\r\n      if (useFirstDefaultSize) {\r\n        splitOptions[\"elementStyle\"] = function elementStyle(dimension, size, gutterSize) {\r\n          // console.log(\"@@@@\", dimension, size, gutterSize)\r\n          splitCount++\r\n          let res\r\n          if (splitSumCount === 2 && useFirstDefaultSize && !useLastDefaultSize) {\r\n            // 2个split-area & 使用firstAreaDefaultSize & 未使用lastAreaDefaultSize\r\n            if (splitCount === 1) {\r\n              res = {[dimension]: `calc(${props.firstAreaDefaultSize}px - ${gutterSize}px)`};\r\n            } else {\r\n              res = {[dimension]: `calc(100% - ${props.firstAreaDefaultSize + gutterSize}px)`};\r\n            }\r\n          } else if (splitSumCount === 2 && !useFirstDefaultSize && useLastDefaultSize) {\r\n            // 2个split-area & 未使用firstAreaDefaultSize & 使用了lastAreaDefaultSize\r\n            if (splitCount === 2) {\r\n              res = {[dimension]: `calc(${props.lastAreaDefaultSize}px - ${gutterSize}px)`};\r\n            } else {\r\n              res = {[dimension]: `calc(100% - ${props.lastAreaDefaultSize + gutterSize}px)`};\r\n            }\r\n          } else if (splitSumCount === 3 && useFirstDefaultSize && useLastDefaultSize) {\r\n            // 3个split-area & 使用firstAreaDefaultSize & 使用了lastAreaDefaultSize\r\n            if (splitCount === 1) {\r\n              res = {[dimension]: `calc(${props.firstAreaDefaultSize}px - ${gutterSize}px)`};\r\n            } else if (splitCount === 3) {\r\n              res = {[dimension]: `calc(${props.lastAreaDefaultSize}px - ${gutterSize}px)`};\r\n            } else {\r\n              res = {[dimension]: `calc(100% - ${props.firstAreaDefaultSize + props.lastAreaDefaultSize + gutterSize}px)`};\r\n            }\r\n          } else {\r\n            res = {[dimension]: `calc(${size}% - ${gutterSize}px)`};\r\n          }\r\n          // console.log(\"@@@@###\", res)\r\n          return res\r\n        };\r\n      }\r\n      //@ts-ignore\r\n      data.value.instance = Split(data.value.elements ?? [],\r\n          splitOptions as Split.Options\r\n      )\r\n    };\r\n    onMounted(() => {\r\n      data.value.elements = [];\r\n      data.value.sizes = [];\r\n      data.value.minSizes = [];\r\n      var parentVal = parent.value as unknown as HTMLElement;\r\n\r\n      if (parentVal) {\r\n        for (var i = 0; i < parentVal.children.length; i++) {\r\n          var child = parentVal.children[i];\r\n          data.value.elements.push(child);\r\n        }\r\n      }\r\n      if (ctx.slots.default) {\r\n        ctx.slots.default()?.forEach((vnode: VNode) => {\r\n          var vodeType = vnode.type as any;\r\n          if (vodeType.name == \"SplitArea\") {\r\n            if (vnode.props) {\r\n              var a = vnode.props as {\r\n                size: number;\r\n                minSize: number;\r\n              };\r\n              data.value.sizes?.push(a.size);\r\n              data.value.minSizes?.push(a.minSize);\r\n            }\r\n          }\r\n        });\r\n        splitSumCount = ctx.slots.default().length;\r\n      }\r\n      init();\r\n    });\r\n\r\n    const reset = () => {\r\n      useFirstDefaultSize = props.firstAreaDefaultSize && props.firstAreaDefaultSize > 0;\r\n      useLastDefaultSize = props.lastAreaDefaultSize && props.lastAreaDefaultSize > 0;\r\n      init();\r\n    };\r\n    const getSizes = () => {\r\n      return data.value.instance?.getSizes() || 0;\r\n    };\r\n\r\n    return {data, init, parent, reset, getSizes};\r\n  },\r\n});\r\n</script>\r\n\r\n<style>\r\n.split {\r\n  -webkit-box-sizing: border-box;\r\n  -moz-box-sizing: border-box;\r\n  box-sizing: border-box;\r\n  overflow-y: auto;\r\n  overflow-x: hidden;\r\n  height: 100%;\r\n  width: 100%;\r\n}\r\n\r\n.gutter {\r\n  background-color: #eee;\r\n  background-repeat: no-repeat;\r\n  background-position: 50%;\r\n}\r\n\r\n.gutter.gutter-horizontal {\r\n  cursor: col-resize;\r\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==\");\r\n}\r\n\r\n.gutter.gutter-vertical {\r\n  cursor: row-resize;\r\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFAQMAAABo7865AAAABlBMVEVHcEzMzMzyAv2sAAAAAXRSTlMAQObYZgAAABBJREFUeF5jOAMEEAIEEFwAn3kMwcB6I2AAAAAASUVORK5CYII=\");\r\n}\r\n\r\n.split.split-horizontal,\r\n.gutter.gutter-horizontal {\r\n  height: 100%;\r\n  float: left;\r\n}\r\n</style>\r\n\r\n","<template>\r\n  <div :class=\"classes\" style=\"\">\r\n    <slot></slot>\r\n  </div>\r\n</template>\r\n<script lang=\"ts\">\r\nimport {getCurrentInstance, defineComponent, SetupContext, watch} from 'vue';\r\n\r\nexport default defineComponent({\r\n  name: \"SplitArea\",\r\n  props: {\r\n    size: {\r\n      type: Number,\r\n      default: 50,\r\n    },\r\n    minSize: {\r\n      type: Number,\r\n      default: 100,\r\n    },\r\n  },\r\n  setup(props, ctx: SetupContext) {\r\n  },\r\n  computed: {\r\n    classes(): string {\r\n      const parent = getCurrentInstance()?.parent;\r\n      const a = parent?.props;\r\n      return `split split-area split-` + a?.direction;\r\n    },\r\n  }\r\n\r\n})\r\n</script>\r\n<style>\r\n</style>","<template>\r\n  <div :class=\"classes\" style=\"\">\r\n    <slot></slot>\r\n  </div>\r\n</template>\r\n<script lang=\"ts\">\r\nimport {getCurrentInstance, defineComponent, SetupContext, watch} from 'vue';\r\n\r\nexport default defineComponent({\r\n  name: \"SplitArea\",\r\n  props: {\r\n    size: {\r\n      type: Number,\r\n      default: 50,\r\n    },\r\n    minSize: {\r\n      type: Number,\r\n      default: 100,\r\n    },\r\n  },\r\n  setup(props, ctx: SetupContext) {\r\n  },\r\n  computed: {\r\n    classes(): string {\r\n      const parent = getCurrentInstance()?.parent;\r\n      const a = parent?.props;\r\n      return `split split-area split-` + a?.direction;\r\n    },\r\n  }\r\n\r\n})\r\n</script>\r\n<style>\r\n</style>","<template>\r\n  <div>Empty</div>\r\n</template>\r\n\r\n<script>\r\nimport VJsonContext from \"../../vjson/VJsonContext\";\r\nimport Designer from \"../designer\";\r\n\r\nexport default {\r\n  props: {\r\n    vjson: Object,\r\n    vcxt: VJsonContext,\r\n    designer: Designer,\r\n  }\r\n}\r\n</script>","<template>\r\n  <el-input type=\"text\" clearable :modelValue='value' @update:modelValue='value = $event'>\r\n    <template #prefix>\r\n      <el-icon style=\"cursor: pointer\" @click=\"onSearchClick\">\r\n        <Search/>\r\n      </el-icon>\r\n\r\n      <el-dialog title=\"选择图标\" v-model=\"dialogShow\" draggable :append-to-body=\"true\">\r\n        <el-row>\r\n          <el-col :span=\"12\">\r\n            <el-form-item label=\"筛选\">\r\n              <el-input v-model=\"filterText\"></el-input>\r\n            </el-form-item>\r\n          </el-col>\r\n        </el-row>\r\n        <el-tabs v-model=\"activeName\" class=\"demo-tabs\">\r\n          <el-tab-pane label=\"Element图标\" name=\"0\" lazy>\r\n            <el-scrollbar :height=\"calcHeight\" class=\"ElementPlusIconsVue\">\r\n              <div class=\"iconItem\" style=\"cursor: pointer\"\r\n                   @click=\"elementIconClick(elIcon)\"\r\n                   v-for=\"elIcon in filterList(ElementPlusIconsVue, filterText)\">\r\n                <el-icon>\r\n                  <component :is=\"elIcon\"/>\r\n                </el-icon>\r\n                <div class=\"icon-name\">\r\n                  {{ elIcon.name }}\r\n                </div>\r\n              </div>\r\n            </el-scrollbar>\r\n          </el-tab-pane>\r\n          <el-tab-pane label=\"Antd图标\" name=\"1\" lazy>\r\n            <el-scrollbar :height=\"calcHeight\" class=\"ElementPlusIconsVue\">\r\n              <div class=\"iconItem\" style=\"cursor: pointer\" @click=\"elementIconClick(elIcon)\"\r\n                   v-for=\"elIcon in filterList(AntdIcon, filterText)\">\r\n                <el-icon>\r\n                  <component :is=\"elIcon\"/>\r\n                </el-icon>\r\n                <div class=\"icon-name\">\r\n                  {{ elIcon.name }}\r\n                </div>\r\n              </div>\r\n            </el-scrollbar>\r\n          </el-tab-pane>\r\n          <el-tab-pane label=\"Fa图标\" name=\"2\" lazy>\r\n            <el-scrollbar :height=\"calcHeight\" class=\"ElementPlusIconsVue\">\r\n              <div class=\"iconItem\" style=\"cursor: pointer\" @click=\"elementIconClick(elIcon)\"\r\n                   v-for=\"elIcon in filterList(FaIcon, filterText)\">\r\n                <el-icon>\r\n                  <component :is=\"elIcon\"/>\r\n                </el-icon>\r\n                <div class=\"icon-name\">\r\n                  {{ elIcon.name }}\r\n                </div>\r\n              </div>\r\n            </el-scrollbar>\r\n          </el-tab-pane>\r\n          <el-tab-pane label=\"Icon5图标\" name=\"3\" lazy>\r\n            <el-scrollbar :height=\"calcHeight\" class=\"ElementPlusIconsVue\">\r\n              <div class=\"iconItem\" style=\"cursor: pointer\" @click=\"elementIconClick(elIcon)\"\r\n                   v-for=\"elIcon in filterList(Icon5, filterText)\">\r\n                <el-icon>\r\n                  <component :is=\"elIcon\"/>\r\n                </el-icon>\r\n                <div class=\"icon-name\">\r\n                  {{ elIcon.name }}\r\n                </div>\r\n              </div>\r\n            </el-scrollbar>\r\n          </el-tab-pane>\r\n          <el-tab-pane label=\"自定义图标\" name=\"4\" lazy>\r\n            <el-scrollbar :height=\"calcHeight\" class=\"ElementPlusIconsVue\">\r\n              <div class=\"iconItem\" style=\"cursor: pointer\" @click=\"elementIconClick(elIcon)\"\r\n                   v-for=\"elIcon in filterList(customIcon, filterText)\">\r\n                <el-icon>\r\n                  <component :is=\"elIcon\"/>\r\n                </el-icon>\r\n                <div class=\"icon-name\">\r\n                  {{ elIcon.name }}\r\n                </div>\r\n              </div>\r\n            </el-scrollbar>\r\n          </el-tab-pane>\r\n        </el-tabs>\r\n      </el-dialog>\r\n    </template>\r\n  </el-input>\r\n</template>\r\n<script>\r\nimport * as AntdIcon from '@vicons/antd';\r\nimport * as FaIcon from '@vicons/fa';\r\nimport * as Icon5 from '@vicons/ionicons5';\r\nimport * as ElementPlusIconsVue from '@element-plus/icons-vue'\r\nimport _ from 'lodash'\r\n\r\nexport default {\r\n  components: {Search: ElementPlusIconsVue.Search,},\r\n  props: {\r\n    modelValue: String,\r\n  },\r\n  emits: [\r\n    'update:modelValue',\r\n  ],\r\n  data() {\r\n    return {\r\n      filterText: '',\r\n      calcHeight: ((window.innerHeight) * 0.6) + 'px',\r\n      value: this.modelValue,\r\n      dialogShow: false,\r\n      activeName: '0',\r\n      AntdIcon,\r\n      FaIcon,\r\n      Icon5,\r\n      ElementPlusIconsVue,\r\n      customIcon: [\r\n      ]\r\n    }\r\n  },\r\n  watch: {\r\n    modelValue: {\r\n      handler(newVal) {\r\n        this.value = newVal\r\n      }\r\n    },\r\n    value: {\r\n      handler(newVal) {\r\n        this.$emit('update:modelValue', newVal)\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    filterList(list, text) {\r\n      const result = _.filter(list, (icon) => {\r\n        if (_.startsWith(_.lowerCase(icon.name), _.lowerCase(text))) {\r\n          return true\r\n        }\r\n        return false\r\n      })\r\n      return result\r\n    },\r\n    elementIconClick(elIcon) {\r\n      let prefix = \"\"\r\n      if (this.activeName === \"0\") {\r\n        prefix = \"element \";\r\n      } else if (this.activeName === \"1\") {\r\n        prefix = \"antd \";\r\n      } else if (this.activeName === \"2\") {\r\n        prefix = \"fa \";\r\n      } else if (this.activeName === \"3\") {\r\n        prefix = \"icon5 \";\r\n      }\r\n      this.value = `${prefix}${elIcon.name}`;\r\n      this.dialogShow = false\r\n    },\r\n    onSearchClick() {\r\n      this.dialogShow = true\r\n    },\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.ElementPlusIconsVue {\r\n  .el-scrollbar__view {\r\n    display: flex;\r\n    flex-direction: row;\r\n    flex-wrap: wrap;\r\n\r\n    .iconItem {\r\n      width: 25%;\r\n      display: flex;\r\n      flex-direction: row;\r\n      //margin: 8px 0;\r\n      color: #333;\r\n      padding: 10px;\r\n      transition: all .5s ease;\r\n      border-radius: 5px;\r\n\r\n      .el-icon {\r\n        font-size: 20px;\r\n        //color:#333;\r\n      }\r\n\r\n      .icon-name {\r\n        flex: 1;\r\n        margin-left: 16px;\r\n      }\r\n\r\n      &:hover {\r\n        background: var(--main-color);\r\n        color: #fff\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <el-select :filterable=\"true\" :collapse-tags=\"false\" :clearable=\"true\"\r\n             :modelValue='value' @update:modelValue='value = $event'\r\n             :multiple-limit=\"0\" :multiple=\"true\" :loading=\"loading\"\r\n             placeholder=\"权限\">\r\n    <el-option\r\n        v-for=\"item in dropdownItems\"\r\n        :key=\"item.permission_code\"\r\n        :label=\"item.component_name\"\r\n        :value=\"item.permission_code\"\r\n    />\r\n  </el-select>\r\n</template>\r\n<script>\r\nimport Designer from \"./designer\";\r\n\r\nexport default {\r\n  props: {\r\n    modelValue: Array,\r\n    designer: Designer,\r\n  },\r\n  emits: [\r\n    'update:modelValue',\r\n  ],\r\n  data() {\r\n    return {\r\n      loading: false,\r\n      value: this.modelValue,\r\n      dropdownItems: []\r\n    }\r\n  },\r\n  mounted() {\r\n    if (!window['permissions']) {\r\n      this.reload()\r\n    } else {\r\n      this.dropdownItems = window['permissions']\r\n    }\r\n  },\r\n  watch: {\r\n    modelValue: {\r\n      handler(newVal) {\r\n        this.value = newVal\r\n      }\r\n    },\r\n    value: {\r\n      handler(newVal) {\r\n        this.$emit('update:modelValue', newVal)\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    reload() {\r\n      this.loading = true\r\n      system.invokeServer('/pages/sys_manage/Resource@queryPermissionList', {})\r\n          .then(res => {\r\n            window['permissions'] = res.data\r\n            this.dropdownItems = window['permissions']\r\n          })\r\n          .finally(() => {\r\n            this.loading = false\r\n          })\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">button 属性</div>\r\n    <el-form :model=\"formData\" :rules=\"rules\" label-position=\"right\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"uiKey\" prop=\"uiKey\">\r\n        <el-input v-model=\"formData.uiKey\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"权限\" prop=\"permissions\">\r\n        <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"隐藏\" prop=\"formData.hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"禁用\" prop=\"formData.disabled\">\r\n        <el-switch v-model=\"formData.disabled\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"文本\" prop=\"formData.text\">\r\n        <el-input v-model=\"formData.text\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"朴素\" prop=\"formData.plain\">\r\n        <el-switch v-model=\"formData.plain\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"圆角\" prop=\"formData.round\">\r\n        <el-switch v-model=\"formData.round\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"圆形\" prop=\"formData.circle\">\r\n        <el-switch v-model=\"formData.circle\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"文本模式\" prop=\"formData.link\">\r\n        <el-switch v-model=\"formData.link\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"显示类型\" prop=\"formData.type\">\r\n        <el-select v-model=\"formData.type\" class=\"full-width-input\" clearable>\r\n          <el-option value=\"default\" label=\"默认\"/>\r\n          <el-option value=\"primary\" label=\"主要\"/>\r\n          <el-option value=\"success\" label=\"成功\"/>\r\n          <el-option value=\"info\" label=\"信息\"/>\r\n          <el-option value=\"warning\" label=\"警告\"/>\r\n          <el-option value=\"danger\" label=\"危险\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <el-form-item label=\"图标\" prop=\"formData.iconCls\">\r\n        <!--\r\n        <el-select v-model=\"formData.iconCls\" class=\"full-width-input\" clearable placeholder=\"无\">\r\n        </el-select>\r\n        -->\r\n        <yv-design-input-icon v-model=\"formData.iconCls\"></yv-design-input-icon>\r\n      </el-form-item>\r\n      <el-form-item label=\"尺寸\" prop=\"formData.size\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"formData.size === 'large'? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='large'\">大\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"(formData.size === 'default' || !formData.size)? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='default'\">中\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.size === 'small'? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='small'\">小\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {toRaw} from 'vue'\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignInputIcon from \"./yv-design-input-icon.vue\";\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  components: {YvDesignInputIcon, YvDesignerPermissions},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        text: this.vjson.text,\r\n        type: this.vjson.type,\r\n        plain: this.vjson.plain ?? false,\r\n        round: this.vjson.round ?? false,\r\n        circle: this.vjson.circle ?? false,\r\n        link: this.vjson.link ?? false,\r\n        iconCls: this.vjson.iconCls,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        loading: this.vjson.loading ?? false,\r\n        bind: this.vjson.bind\r\n      },\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <el-button v-if=\"!hidden\"\r\n             :type=\"type\"\r\n             :size=\"size\"\r\n             :plain=\"plain\"\r\n             :round=\"round\"\r\n             :circle=\"circle\"\r\n             :icon=\"icon\"\r\n             :disabled=\"disabled\"\r\n             :link=\"link\"\r\n             :loading=\"loading\"\r\n             :class=\"['yv-button', calcClass]\"\r\n             :style=\"calcStyle\"\r\n             @click=\"_onClick\">{{ text }}</el-button>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {Button} from './Defaults'\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport {renderIcon} from \"../../utils\";\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Button)\r\n\r\n    return {\r\n      type: vjson.type,\r\n      size: vjson.size,\r\n      plain: vjson.plain,\r\n      round: vjson.round,\r\n      circle: vjson.circle,\r\n      iconCls: vjson.iconCls,\r\n      disabled: vjson.disabled,\r\n      link: vjson.link,\r\n      loading: vjson.loading,\r\n      text: vjson.text,\r\n    }\r\n  },\r\n  computed: {\r\n    icon() {\r\n      return renderIcon(this.iconCls)\r\n    },\r\n  },\r\n  methods: {\r\n    startsWith: _.startsWith,\r\n    _onClick(evt) {\r\n      system.globalLoadingButtonInstance = this\r\n      this.runEvent('click', ...arguments)\r\n      // getListener(this.vjson, 'click', this.vcxt)(this, this.vcxt.scope)\r\n      system.globalLoadingButtonInstance = null\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <el-button :id=\"vjson.id\" :type=\"vjson.type\"\r\n             :plain=\"vjson.plain\" :round=\"vjson.round\"\r\n             :circle=\"vjson.circle\" :icon=\"icon\"\r\n             :link=\"vjson.link\"\r\n             :size=\"vjson.size\"\r\n             :class=\"['yv-class', customClass, vjson.disabled?'is-disabled':'']\"\r\n             @selectme.native=\"_selectMe\"\r\n             @click.stop=\"_selectMe\">\r\n    {{ vjson.text }}\r\n  </el-button>\r\n</template>\r\n\r\n<script>\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport YvDesignButtonProp from \"./yv-design-button-prop.vue\"\r\nimport YvVjsonButton from \"../../vjson/yv-vjson-button.vue\"\r\nimport {getDescDefaults, registeComponent} from '../yv-designer-desc'\r\nimport {renderIcon} from \"../../../utils\";\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  props: {\r\n    vjson: Object,\r\n    vcxt: VJsonContext,\r\n    designer: Designer,\r\n    parentComponent: Object,\r\n    parentList: Array,\r\n    indexOfParentList: Number,\r\n  },\r\n  computed: {\r\n    icon() {\r\n      return renderIcon(this.vjson.iconCls)\r\n    },\r\n  },\r\n  created() {\r\n  },\r\n  mounted() {\r\n  },\r\n  beforeUnmount() {\r\n  },\r\n  methods: {},\r\n  install(Vue) {\r\n    const desc = registeComponent('button')\r\n    desc.setRuntime('YvVjsonButton', YvVjsonButton)\r\n    desc.setDesign('YvDesignButton', this)\r\n    desc.setProp('YvDesignButtonProp', YvDesignButtonProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'button',\r\n        vjson.text,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'click', desc: '点击时触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'text', desc: '文本', bindable: true},\r\n      {name: 'disabled', desc: '禁用', bindable: true},\r\n      {name: 'iconCls', desc: '图标', bindable: true},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>","<template>\r\n  <el-empty v-if=\"!!emptyText\" :style=\"calcStyleAndWidth\" :description=\"emptyText\">\r\n  </el-empty>\r\n  <el-form ref=\"_inner\" v-else-if=\"!hidden\"\r\n           @submit.native.prevent=\"nativeSubmit\"\r\n           :model=\"vcxt.scope\"\r\n           :gutter=\"gutter\"\r\n           :label-position=\"labelPosition\" :size=\"size\"\r\n           :inline-message=\"inlineMessage\" :show-message=\"showMessage\"\r\n           :label-width=\"labelWidth\" :disabled=\"disabled\"\r\n           :loading=\"loading\"\r\n           :status-icon=\"false\"\r\n           :validate-on-rule-change=false\r\n           :rules=\"rules\"\r\n           :class=\"[calcClass, 'yv-form', this.scrollable?'yv-form-scroll':'']\"\r\n           :style=\"calcStyleAndWidth\">\r\n    <template v-if=\"isComputingVJson\">\r\n      正在渲染表格\r\n      <el-skeleton :rows=\"5\" animated style=\"flex:1\"/>\r\n    </template>\r\n    <template v-else-if=\"!!fieldsetTitle\">\r\n      <fieldset :align=\"vjson.fieldsetTitlePosition\" class=\"yv-fieldset\">\r\n        <legend>{{ fieldsetTitle }}</legend>\r\n        <div class=\"shrink\" @click=\"shrinkClick\" v-if=\"!!allowShrink\">\r\n          <div class=\"shrink-open\" v-if=\"shrink\">\r\n            <el-icon>\r\n              <ArrowUp/>\r\n            </el-icon>\r\n          </div>\r\n          <div class=\"shrink-stow\" v-else>\r\n            <el-icon>\r\n              <ArrowDown/>\r\n            </el-icon>\r\n          </div>\r\n        </div>\r\n        <transition-group name=\"list\">\r\n          <el-row v-if=\"shrink\">\r\n            <template v-for=\"(item,itemIdx) in items\">\r\n              <component :is=\"getRuntimeCmp(item)\"\r\n                         :vjson=\"item\"\r\n                         :vcxt=\"vcxt\"\r\n                         :dialog-scope=\"dialogScope\"\r\n                         :parent-list=\"vjson.items\"\r\n                         :index-of-parent-list=\"itemIdx\"\r\n                         :parent-component=\"vjson\"/>\r\n            </template>\r\n          </el-row>\r\n        </transition-group>\r\n      </fieldset>\r\n    </template>\r\n    <template v-else>\r\n      <div v-if=\"!!title\" class=\"title\" :style=\"{textAlign:titlePosition}\">\r\n        {{ title }}\r\n        <div class=\"shrink\" @click=\"shrinkClick\" v-if=\"!!allowShrink\">\r\n          <div class=\"shrink-open\" v-if=\"shrink\">\r\n            <el-icon>\r\n              <ArrowUp/>\r\n            </el-icon>\r\n          </div>\r\n          <div class=\"shrink-stow\" v-else>\r\n            <el-icon>\r\n              <ArrowDown/>\r\n            </el-icon>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <transition-group name=\"list\">\r\n        <el-row v-if=\"shrink\">\r\n          <template v-for=\"(item,itemIdx) in items\">\r\n            <component :is=\"getRuntimeCmp(item)\"\r\n                       :vjson=\"item\"\r\n                       :vcxt=\"vcxt\"\r\n                       :dialog-scope=\"dialogScope\"\r\n                       :parent-list=\"vjson.items\"\r\n                       :index-of-parent-list=\"itemIdx\"\r\n                       :parent-component=\"vjson\"/>\r\n          </template>\r\n        </el-row>\r\n      </transition-group>\r\n    </template>\r\n  </el-form>\r\n</template>\r\n\r\n<script>\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport _ from \"lodash\";\r\nimport {Form} from \"./Defaults\"\r\nimport {ArrowDown, ArrowUp} from '@element-plus/icons-vue'\r\nimport {calcExpress} from \"../raw/utils\";\r\nimport {markRaw} from \"vue\";\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  components: {\r\n    ArrowDown, ArrowUp\r\n  },\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Form)\r\n    let items = this.computAllItems()\r\n\r\n    return {\r\n      emptyText: vjson.emptyText,\r\n      colsOfRow: vjson.colsOfRow,\r\n      title: vjson.title,\r\n      titlePosition: vjson.titlePosition,\r\n      size: vjson.size,\r\n      gutter: vjson.gutter,\r\n      labelPosition: vjson.labelPosition,\r\n      inlineMessage: vjson.inlineMessage,\r\n      showMessage: vjson.showMessage,\r\n      disabled: vjson.disabled,\r\n      loading: vjson.loading,\r\n      scrollable: vjson.scrollable,\r\n      validateOnRuleChange: vjson.validateOnRuleChange,\r\n      isComputingVJson: false,\r\n      items,\r\n      fieldsetTitle: vjson.fieldsetTitle,\r\n      rules: [],\r\n      shrink: vjson.shrink,\r\n      allowShrink: vjson.allowShrink\r\n    }\r\n  },\r\n  created() {\r\n    if (this.$props.vcxt?.scope?._registeForm) {\r\n      this.$props.vcxt.scope._registeForm(this)\r\n    }\r\n    if (this.vjson.uiBlock) {\r\n      _.set(this.vcxt.$uiBlocks, this.vjson.uiBlock, markRaw(this))\r\n    }\r\n  },\r\n  unmounted() {\r\n    if (this.$props.vcxt?.scope?._registeForm) {\r\n      this.$props.vcxt.scope._unregForm(this)\r\n    }\r\n    if (this.vjson.uiBlock) {\r\n      delete this.vcxt.$uiBlocks[this.vjson.uiBlock]\r\n    }\r\n  },\r\n  computed: {\r\n    labelWidth() {\r\n      if (!this.vjson.labelWidth || this.vjson.labelWidth === '') {\r\n        return ''\r\n      }\r\n      return parseInt(this.vjson.labelWidth) || 'auto'\r\n    },\r\n  },\r\n  methods: {\r\n    nativeSubmit(e) {\r\n      return false\r\n    },\r\n    resetItems(items) {\r\n      this.isComputingVJson = true\r\n      this.items = items\r\n      this.$nextTick(() => {\r\n        this.isComputingVJson = false\r\n      })\r\n    },\r\n    computAllItems() {\r\n      // 处理替代列\r\n      const items = []\r\n      for (let i = 0; i < this.vjson.items.length; i++) {\r\n        const col = this.vjson.items[i]\r\n        if (col.replaceFor === 'custom') {\r\n          if (col.name) {\r\n            const customSlotContent = _.get(this.vcxt.scope, 'customVjson.' + col.name, [])\r\n            console.log('get customVjson.' + col.name, customSlotContent)\r\n            if (_.isArray(customSlotContent)) {\r\n              items.push(...customSlotContent)\r\n            } else if (_.isObject(customSlotContent)) {\r\n              items.push(customSlotContent)\r\n            }\r\n          }\r\n\r\n        } else if (col.replaceFor === 'lot') {\r\n\r\n        } else {\r\n          items.push(col)\r\n        }\r\n      }\r\n      return items\r\n    },\r\n\r\n    /**\r\n     * 根据 vjson 重新渲染表格\r\n     */\r\n    renderByVjson() {\r\n      this.isComputingVJson = true\r\n      this.$nextTick(() => {\r\n        this.items = this.computAllItems()\r\n        this.isComputingVJson = false\r\n      })\r\n    },\r\n\r\n    /**\r\n     * 对整个表单的内容进行验证。 返回 Promise\r\n     */\r\n    validate() {\r\n      return this.$refs._inner.validate()\r\n    },\r\n    /**\r\n     * 验证具体的某个字段。\r\n     */\r\n    validateField(props) {\r\n      return this.$refs._inner.validateField(props)\r\n    },\r\n    /**\r\n     * 重置该表单项，将其值重置为初始值，并移除校验结果\r\n     */\r\n    resetFields() {\r\n      return this.$refs._inner.resetFields()\r\n    },\r\n    /**\r\n     * 滚动到指定的字段\r\n     */\r\n    scrollToField(prop) {\r\n      return this.$refs._inner.scrollToField(prop)\r\n    },\r\n    /**\r\n     * 清理某个字段的表单验证信息。\r\n     */\r\n    clearValidate(prop) {\r\n      return this.$refs._inner.clearValidate(prop)\r\n    },\r\n    /**\r\n     * 表单收起和展开\r\n     */\r\n    shrinkClick() {\r\n      this.shrink = !this.shrink\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.yv-form-scroll {\r\n  overflow: scroll;\r\n}\r\n\r\nform.yv-form {\r\n  .title {\r\n    font-weight: bold;\r\n    color: var(--el-text-color-primary);\r\n    font-size: 16px;\r\n    border-bottom: 1px solid var(--el-menu-border-color);\r\n    padding: 5px 10px 10px 10px;\r\n    margin-bottom: 12px;\r\n    position: relative;\r\n\r\n    .shrink {\r\n      position: absolute;\r\n      right: 0;\r\n      top: 8px;\r\n      background: #fff;\r\n      padding: 0 8px;\r\n      cursor: pointer;\r\n      font-size: 14px;\r\n    }\r\n  }\r\n\r\n  .el-col {\r\n    padding: 0 4px\r\n  }\r\n}\r\n\r\n.yv-fieldset {\r\n  height: auto;\r\n  margin: 0;\r\n  border: 1px dashed var(--el-menu-border-color);\r\n  position: relative;\r\n  padding: 0 4px;\r\n\r\n  legend {\r\n    border: 0;\r\n    background-color: white;\r\n    font-weight: 500;\r\n    color: var(--el-text-color-primary);\r\n    font-size: 16px;\r\n    padding: 10px;\r\n  }\r\n\r\n  .shrink {\r\n    position: absolute;\r\n    right: 0;\r\n    top: -31px;\r\n    background: #fff;\r\n    padding: 0 8px;\r\n    cursor: pointer;\r\n    font-size: 14px;\r\n  }\r\n}\r\n</style>","<template>\r\n  <el-form-item label=\"高度模式\" v-if=\"!hideHeightMode\">\r\n    <el-button-group>\r\n      <el-button size=\"small\" :type=\"formData.heightMode === 'auto'? 'primary':'default'\"\r\n                 @click=\"setHeightMode('auto')\">自动\r\n      </el-button>\r\n      <el-button size=\"small\" :type=\"formData.heightMode === 'fit'? 'primary':'default'\" @click=\"setHeightMode('fit')\">\r\n        填满\r\n      </el-button>\r\n      <el-button size=\"small\" :type=\"formData.heightMode === 'fix'? 'primary':'default'\" @click=\"setHeightMode('fix')\">\r\n        固定值\r\n      </el-button>\r\n    </el-button-group>\r\n  </el-form-item>\r\n  <el-form-item v-if=\"formData.heightMode === 'fix'\" label=\"高度\" prop=\"formData.height\">\r\n    <el-input v-model=\"formData.height\"></el-input>\r\n  </el-form-item>\r\n  <el-form-item label=\"最小高度\" prop=\"formData.minHeight\">\r\n    <el-input v-model=\"formData.minHeight\"></el-input>\r\n  </el-form-item>\r\n  <el-form-item label=\"最大高度\" prop=\"formData.maxHeight\">\r\n    <el-input v-model=\"formData.maxHeight\"></el-input>\r\n  </el-form-item>\r\n  <el-form-item label=\"内边距\">\r\n    <el-col :span=\"6\" style=\"padding-right: 4px\">\r\n      <el-input v-model=\"formData.paddingTop\" :clearable=\"false\" placeholder=\"上\"/>\r\n    </el-col>\r\n    <el-col :span=\"6\" style=\"padding-right: 4px\">\r\n      <el-input v-model=\"formData.paddingRight\" :clearable=\"false\" placeholder=\"右\"/>\r\n    </el-col>\r\n    <el-col :span=\"6\" style=\"padding-right: 4px\">\r\n      <el-input v-model=\"formData.paddingBottom\" :clearable=\"false\" placeholder=\"下\"/>\r\n    </el-col>\r\n    <el-col :span=\"6\">\r\n      <el-input v-model=\"formData.paddingLeft\" :clearable=\"false\" placeholder=\"左\"/>\r\n    </el-col>\r\n  </el-form-item>\r\n  <el-form-item label=\"外边距\">\r\n    <el-col :span=\"6\" style=\"padding-right: 4px\">\r\n      <el-input v-model=\"formData.marginTop\" text-align=\"center\" :clearable=\"false\" placeholder=\"上\"/>\r\n    </el-col>\r\n    <el-col :span=\"6\" style=\"padding-right: 4px\">\r\n      <el-input v-model=\"formData.marginRight\" text-align=\"center\" :clearable=\"false\" placeholder=\"右\"/>\r\n    </el-col>\r\n    <el-col :span=\"6\" style=\"padding-right: 4px\">\r\n      <el-input v-model=\"formData.marginBottom\" text-align=\"center\" :clearable=\"false\" placeholder=\"下\"/>\r\n    </el-col>\r\n    <el-col :span=\"6\">\r\n      <el-input v-model=\"formData.marginLeft\" text-align=\"center\" :clearable=\"false\" placeholder=\"左\"/>\r\n    </el-col>\r\n  </el-form-item>\r\n  <el-form-item label=\"背景色\" class=\"colorItem\">\r\n    <el-input v-model=\"formData.cssBackgroundColor\"></el-input>\r\n    <div class=\"color-block\">\r\n      <div class=\"color-box-wrap\">\r\n        <div class=\"color-box\" :style=\"{backgroundColor:formData.cssBackgroundColor}\">\r\n          <span v-if=\"!formData.cssBackgroundColor\">暂无背景色</span>\r\n        </div>\r\n      </div>\r\n      <div class=\"color-select\" @click=\"bgColorToSelect\">\r\n        <el-icon>\r\n          <Pointer/>\r\n        </el-icon>\r\n      </div>\r\n    </div>\r\n  </el-form-item>\r\n  <el-form-item label=\"字体色\">\r\n    <el-input v-model=\"formData.cssColor\"></el-input>\r\n    <div class=\"color-block\">\r\n      <div class=\"color-box-wrap\">\r\n        <div class=\"color-box\" :style=\"{color:formData.cssColor,backgroundColor:'#fff'}\">\r\n          字体色\r\n        </div>\r\n      </div>\r\n      <div class=\"color-select\" @click=\"textColorToSelect\">\r\n        <el-icon>\r\n          <Pointer/>\r\n        </el-icon>\r\n      </div>\r\n    </div>\r\n  </el-form-item>\r\n  <el-form-item label=\"字体大小\">\r\n    <el-input v-model=\"formData.cssFontSize\"></el-input>\r\n  </el-form-item>\r\n  <el-form-item label=\"粗体\">\r\n    <el-switch v-model=\"formData.isBlod\"/>\r\n  </el-form-item>\r\n  <el-form-item label=\"字体属性\">\r\n    <el-input v-model=\"formData.cssFont\"></el-input>\r\n  </el-form-item>\r\n  <el-dialog v-model=\"dialogTableVisible\" title=\"颜色列表\" class=\"bg-color-dialog\" :append-to-body=\"true\" width=\"820px\">\r\n    <div class=\"list\">\r\n      <div class=\"item\" v-for=\"item in bgColorList\">\r\n        <div class=\"title\">{{ item.title }}</div>\r\n        <div class=\"color-box-main color-box-white\" v-if=\"item?.whiteColor\" :style=\"{background:item.color[0]}\"\r\n             @click=\"bgColorSelect(item.color[0])\">\r\n          我是白色的-#fff\r\n        </div>\r\n        <div class=\"color-box-main\" v-else :style=\"{background:item.color[0]}\" @click=\"bgColorSelect(item.color[0])\">\r\n          <span v-if=\"item?.subTitle\">{{ item.subTitle }}</span>\r\n        </div>\r\n        <div class=\"color-box\">\r\n          <template v-for=\"(el, idx) in item?.color\">\r\n            <div v-if=\"idx>=1\" class=\"color-box-1\" :style=\"{background:el}\" @click=\"bgColorSelect(el)\"></div>\r\n          </template>\r\n        </div>\r\n      </div>\r\n      <div class=\"item item-more\">\r\n        <div class=\"title\">更多</div>\r\n        <div class=\"more\">\r\n          <div class=\"more-text\">\r\n            待加入\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </el-dialog>\r\n</template>\r\n<script>\r\nimport Designer from \"../designer\";\r\nimport {Pointer} from '@element-plus/icons-vue'\r\n\r\nexport default {\r\n  components: {\r\n    Pointer\r\n  },\r\n  props: {\r\n    hideHeightMode: {\r\n      type: Boolean,\r\n      required: false,\r\n      default: false,\r\n    },\r\n    formData: Object,\r\n    designer: Designer,\r\n  },\r\n  data() {\r\n    return {\r\n      dialogTableVisible: false,\r\n      bgColorList: [{\r\n        title: '默认',\r\n        subTitle: 'Default',\r\n        color: ['#409EFF', '#337ecc', '#79bbff', '#a0cfff', '#c6e2ff', '#d9ecff', '#ecf5ff']\r\n      }, {\r\n        title: '成功',\r\n        subTitle: 'Success',\r\n        color: ['#67C23A', '#529b2e', '#95d475', '#b3e19d', '#d1edc4', '#e1f3d8', '#f0f9eb']\r\n      }, {\r\n        title: '警告',\r\n        subTitle: 'Warning',\r\n        color: ['#e6a23c', '#b88230', '#eebe77', '#f3d19e', '#f8e3c5', '#faecd8', '#fdf6ec']\r\n      }, {\r\n        title: '危险',\r\n        subTitle: 'Danger',\r\n        color: ['#f56c6c', '#c45656', '#f89898', '#fab6b6', '#fcd3d3', '#fde2e2', '#fef0f0']\r\n      }, {\r\n        title: '灰色',\r\n        subTitle: 'Success',\r\n        color: ['#909399', '#73767a', '#b1b3b8', '#c8c9cc', '#dedfe0', '#e9e9eb', '#f4f4f5']\r\n      }, {\r\n        title: '黄色',\r\n        color: ['#ffd400', '#eac306', '#fdec3e', '#fdf566', '#fefb8f', '#fefeb8', '#feffe5']\r\n      }, {\r\n        title: '色系七',\r\n        color: ['#eb2f96', '#c42080', '#f758aa', '#fa84c0', '#fbadd2', '#fdd6e6', '#fff0f7']\r\n      }, {\r\n        title: '紫色',\r\n        color: ['#722ed1', '#521cab', '#9154de', '#b37feb', '#d3adf7', '#f0dcff', '#faf0ff']\r\n      }, {\r\n        title: '蓝色',\r\n        color: ['#26979c', '#196d75', '#33c2c2', '#5cdbd3', '#87e7de', '#b6f6ec', '#e6fffb']\r\n      }, {\r\n        title: '常用色',\r\n        whiteColor: true,\r\n        color: ['#fff', '#000']\r\n      }],\r\n      typeColor: ''\r\n    }\r\n  },\r\n  methods: {\r\n    setHeightMode(newVal) {\r\n      this.formData.heightMode = newVal\r\n    },\r\n    bgColorToSelect() {//背景色列表\r\n      this.dialogTableVisible = true\r\n      this.typeColor = 'bgColor'\r\n    },\r\n    bgColorSelect(color) {//选择背景色/字体色\r\n      if (this.typeColor == 'bgColor') {\r\n        this.formData.cssBackgroundColor = color\r\n      } else if (this.typeColor == 'textColor') {\r\n        this.formData.cssColor = color\r\n      }\r\n      this.dialogTableVisible = false\r\n    },\r\n    textColorToSelect() {//字体色列表\r\n      this.dialogTableVisible = true\r\n      this.typeColor = 'textColor'\r\n    },\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.colorItem .el-form-item__content {\r\n  display: flex;\r\n  flex-direction: row;\r\n}\r\n\r\n.el-form-item__content > .el-input {\r\n  flex: 1;\r\n  width: auto;\r\n}\r\n\r\n.color-block {\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: row;\r\n  margin-top: 5px;\r\n\r\n  .color-box-wrap {\r\n    flex: 1;\r\n    border: 1px solid #dcdcdc;\r\n    padding: 3px;\r\n\r\n    .color-box {\r\n      text-align: center;\r\n      line-height: 26px;\r\n      font-size: 12px;\r\n      height: 24px;\r\n    }\r\n  }\r\n\r\n  .color-select {\r\n    width: 30px;\r\n    height: 30px;\r\n    border: 1px solid #dcdcdc;\r\n    text-align: center;\r\n    background: #fff;\r\n    margin-left: 3px;\r\n    cursor: pointer;\r\n  }\r\n}\r\n\r\n.bg-color-dialog {\r\n  .list {\r\n    display: flex;\r\n    flex-direction: row;\r\n    flex-wrap: wrap;\r\n\r\n    .item {\r\n      width: 200px;\r\n      padding: 10px;\r\n\r\n      .title {\r\n        text-align: center;\r\n        font-size: 18px;\r\n        color: #000;\r\n        margin-bottom: 10px\r\n      }\r\n\r\n      .color-box-main {\r\n        height: 75px;\r\n        border-top-left-radius: 3px;\r\n        border-top-right-radius: 3px;\r\n        cursor: pointer;\r\n        text-align: center;\r\n        line-height: 75px;\r\n        transition: all .2s ease;\r\n\r\n        span {\r\n          color: #fff\r\n        }\r\n\r\n        &:hover {\r\n          height: 80px;\r\n          margin-top: -5px\r\n        }\r\n\r\n        &.color-box-white {\r\n          border: 1px solid #ccc;\r\n          text-align: center;\r\n          line-height: 75px;\r\n        }\r\n      }\r\n\r\n      .color-box {\r\n        display: flex;\r\n        flex-direction: row;\r\n\r\n        .color-box-1 {\r\n          flex: 1;\r\n          cursor: pointer;\r\n          height: 40px;\r\n          transition: all .2s ease;\r\n\r\n          &:nth-child(1) {\r\n            border-bottom-left-radius: 3px;\r\n          }\r\n\r\n          &:nth-child(6) {\r\n            border-bottom-right-radius: 3px;\r\n          }\r\n\r\n          &:hover {\r\n            height: 45px;\r\n            margin-bottom: -5px\r\n          }\r\n        }\r\n      }\r\n\r\n      &.item-more {\r\n        .title {\r\n          height: 25px\r\n        }\r\n\r\n        .more {\r\n          width: 100%;\r\n          border: 1px solid #ccc;\r\n          padding: 5px;\r\n\r\n          .more-text {\r\n            height: 105px;\r\n            line-height: 105px;\r\n            background: #eee;\r\n            text-align: center;\r\n          }\r\n        }\r\n      }\r\n\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"property tabs-property\">\r\n    <div class=\"title\">form 属性</div>\r\n    <el-tabs>\r\n      <el-tab-pane label=\"基本\">\r\n        <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"90px\"\r\n                 size=\"default\" @submit.native.prevent>\r\n          <el-form-item label=\"reference\" prop=\"reference\" label-width=\"100\">\r\n            <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"uiBlock\" prop=\"uiBlock\" label-width=\"100\">\r\n            <el-input v-model=\"formData.uiBlock\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"权限\" prop=\"permissions\">\r\n            <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <el-form-item label=\"分组标题\" prop=\"title\" v-if=\"!isRf\">\r\n            <el-input v-model=\"formData.title\" type=\"text\"></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"fieldset标题\" prop=\"fieldsetTitle\" label-width=\"100\" v-if=\"!isRf\">\r\n            <el-input v-model=\"formData.fieldsetTitle\" type=\"text\"></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"fieldset标题位置\" prop=\"fieldsetTitlePosition\" label-width=\"140\" v-if=\"!isRf\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.fieldsetTitlePosition === 'left'? 'primary':'default'\"\r\n                         @click=\"()=>formData.fieldsetTitlePosition='left'\">左\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.fieldsetTitlePosition === 'center'? 'primary':'default'\"\r\n                         @click=\"()=>formData.fieldsetTitlePosition='center'\">中\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.fieldsetTitlePosition === 'right'? 'primary':'default'\"\r\n                         @click=\"()=>formData.fieldsetTitlePosition='right'\">右\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <el-form-item label=\"允许收起\" label-width=\"100\" prop=\"shrink\" v-if=\"!isRf\">\r\n            <el-switch v-model=\"formData.allowShrink\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"是否展开\" label-width=\"100\" prop=\"shrink\" v-if=\"!isRf\">\r\n            <el-switch v-model=\"formData.shrink\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"标签宽度\" prop=\"labelWidth\" v-if=\"!isRf\">\r\n            <el-input v-model=\"formData.labelWidth\" type=\"text\"></el-input>\r\n          </el-form-item>\r\n          <!--\r\n          <el-form-item label=\"立刻校验\" prop=\"validateOnRuleChange\" v-if=\"!isRf\">\r\n            <el-switch v-model=\"formData.validateOnRuleChange\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"显示错误\" prop=\"showMessage\" v-if=\"!isRf\">\r\n            <el-switch v-model=\"formData.showMessage\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"内联错误\" prop=\"inlineMessage\" v-if=\"!isRf\">\r\n            <el-switch v-model=\"formData.inlineMessage\"></el-switch>\r\n          </el-form-item>\r\n          -->\r\n          <el-form-item label=\"是否是卡片\" prop=\"isCard\" label-width=\"90px\" v-if=\"!isRf\">\r\n            <el-switch v-model=\"formData.isCard\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"边线\" prop=\"borderArr\" v-if=\"!isRf\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[0] === '1px'? 'primary':'default'\"\r\n                         @click=\"isBorder(0)\">上\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[1] === '1px'? 'primary':'default'\"\r\n                         @click=\"isBorder(1)\">右\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[2] === '1px'? 'primary':'default'\"\r\n                         @click=\"isBorder(2)\">下\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[3] === '1px'? 'primary':'default'\"\r\n                         @click=\"isBorder(3)\">左\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"每行字段数\" prop=\"colsOfRow\" v-if=\"!isRf\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.colsOfRow === '1'? 'primary':'default'\"\r\n                         @click=\"()=>formData.colsOfRow='1'\">1\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.colsOfRow === '2'? 'primary':'default'\"\r\n                         @click=\"()=>formData.colsOfRow='2'\">2\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.colsOfRow === '3'? 'primary':'default'\"\r\n                         @click=\"()=>formData.colsOfRow='3'\">3\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.colsOfRow === '4'? 'primary':'default'\"\r\n                         @click=\"()=>formData.colsOfRow='4'\">4\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.colsOfRow === '6'? 'primary':'default'\"\r\n                         @click=\"()=>formData.colsOfRow='6'\">6\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <!--\r\n          <el-form-item label=\"必填星号\" prop=\"requireAsteriskPosition\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.requireAsteriskPosition === 'left'? 'primary':'default'\"\r\n                         @click=\"()=>formData.requireAsteriskPosition='left'\">左侧\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.requireAsteriskPosition === 'right'? 'primary':'default'\"\r\n                         @click=\"()=>formData.requireAsteriskPosition='right'\">右侧\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          -->\r\n          <el-form-item label=\"标签位置\" prop=\"labelPosition\" v-if=\"!isRf\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.labelPosition === 'top'? 'primary':'default'\"\r\n                         @click=\"()=>formData.labelPosition='top'\">上\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.labelPosition === 'left'? 'primary':'default'\"\r\n                         @click=\"()=>formData.labelPosition='left'\">左\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.labelPosition === 'right'? 'primary':'default'\"\r\n                         @click=\"()=>formData.labelPosition='right'\">右\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"尺寸\" prop=\"size\" v-if=\"!isRf\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.size === 'large'? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='large'\">大\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"(formData.size === 'default' || !formData.size)? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='default'\">中\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.size === 'small'? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='small'\">小\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"禁用\" prop=\"disabled\">\r\n            <el-switch v-model=\"formData.disabled\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"隐藏\" prop=\"hidden\" v-if=\"!isRf\">\r\n            <el-switch v-model=\"formData.hidden\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"允许滚动\" prop=\"hidden\" v-if=\"!isRf\">\r\n            <el-switch v-model=\"formData.scrollable\"></el-switch>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <yv-design-input-height :form-data=\"formData\" :designer=\"designer\" v-if=\"!isRf\"/>\r\n        </el-form>\r\n      </el-tab-pane>\r\n      <el-tab-pane label=\"字段\">\r\n        <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"90px\"\r\n                 size=\"default\" @submit.native.prevent>\r\n\r\n          <el-form-item label=\"关联表格\" prop=\"referenceGrid\" label-width=\"100\" v-if=\"!isRf\">\r\n            <el-input v-model=\"formData.referenceGrid\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <template v-if=\"formData.referenceGrid\">\r\n            <el-button :icon=\"renderIcon('element Refresh')\" @click=\"rebuildColumns\">从表格重新计算(字段)</el-button>\r\n            <el-form-item label=\"关联表格刷新字段(自动)\" prop=\"referenceGridAutoCreate\" label-width=\"auto\">\r\n              <el-switch v-model=\"formData.referenceGridAutoCreate\"></el-switch>\r\n            </el-form-item>\r\n          </template>\r\n\r\n        </el-form>\r\n      </el-tab-pane>\r\n    </el-tabs>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignInputHeight from \"./yv-design-input-height.vue\"\r\nimport {findVjsonByReference} from '../../yv-utils'\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  components: {YvDesignInputHeight, YvDesignerPermissions},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        colsOfRow: this.vjson.colsOfRow,\r\n        isBorder: this.vjson.isBorder,\r\n        titlePosition: this.vjson.titlePosition,\r\n        fieldsetTitlePosition: this.vjson.fieldsetTitlePosition,\r\n        labelWidth: this.vjson.labelWidth,\r\n        labelPosition: this.vjson.labelPosition,\r\n        requireAsteriskPosition: this.vjson.requireAsteriskPosition,\r\n        showMessage: this.vjson.showMessage,\r\n        inlineMessage: this.vjson.inlineMessage,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled,\r\n        hidden: this.vjson.hidden,\r\n        scrollable: this.vjson.scrollable,\r\n        loading: this.vjson.loading,\r\n        validateOnRuleChange: this.vjson.validateOnRuleChange,\r\n        bind: this.vjson.bind,\r\n        title: this.vjson.title,\r\n        fieldsetTitle: this.vjson.fieldsetTitle\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    rebuildColumns() {\r\n      const {referenceGrid} = this.vjson\r\n      if (!referenceGrid) {\r\n        return\r\n      }\r\n      const aggrid = findVjsonByReference(this.designer.vjson, 'aggrid', referenceGrid)\r\n      if (!aggrid) {\r\n        return\r\n      }\r\n\r\n      const columns = aggrid.columns\r\n      // 根据表格字段，计算表单字段\r\n      // column.dataIndex => formItem.bind.value 并且两边加上 {}\r\n      // 如果 formItem.bind.value 已经存在，就忽略\r\n      // 否则\r\n      //   column.header => formItem.fieldLabel\r\n      //   column.hide => formItem.hide\r\n      //   如果没有 column.editor => formItem.xtype = staticfield\r\n      //   如果有 column.editor =>\r\n      //      column.editor.xtype => formItem.xtype\r\n      //      column.editor 其他属性扩展到 formItem\r\n      //      如果 column.editor.xtype === 'combobox' 那么 column.dict  => formItem.dict\r\n\r\n      const formItems = []\r\n      for (let i = 0; i < columns.length; i++) {\r\n        const column = columns[i]\r\n        if (!column.dataIndex) {\r\n          continue\r\n        }\r\n        const formItem = this.vjson.items.find(item => item.bind?.value === '{$row.' + column.dataIndex + '}')\r\n        if (formItem) {\r\n          continue\r\n        }\r\n\r\n        const newId = _.uniqueId()\r\n        const newFormItem = {\r\n          id: newId,\r\n          bind: {\r\n            value: '{$row.' + column.dataIndex + '}'\r\n          },\r\n          uiKey: column.dataIndex,\r\n          fieldLabel: column.header,\r\n          hide: column.hide,\r\n        }\r\n        if (typeof column.editor?.xtype === 'string') {\r\n          Object.assign(newFormItem, column.editor)\r\n          if (column.editor.xtype === 'memo') {\r\n            newFormItem.xtype = 'textfield'\r\n            newFormItem.textarea = true\r\n          }\r\n          if (column.editor.xtype === 'combobox') {\r\n            newFormItem.xtype = 'combo'\r\n            newFormItem.dataType = 2\r\n            newFormItem.dataDict = column.dict\r\n          }\r\n\r\n        } else {\r\n          newFormItem.xtype = 'staticfield'\r\n        }\r\n        formItems.push(newFormItem)\r\n      }\r\n\r\n      if (!this.formData.items) {\r\n        this.formData.items = []\r\n      }\r\n      this.formData.items.push(...formItems)\r\n      system.msg('成功添加' + formItems.length + '个字段')\r\n    },\r\n    isBorder(type) {\r\n      if (!this.formData.isBorder) {\r\n        this.formData.isBorder = []\r\n      }\r\n      if (type === 0) {\r\n        if (this.formData.isBorder[0] === '0px') {\r\n          this.formData.isBorder[0] = '1px'\r\n        } else {\r\n          this.formData.isBorder[0] = '0px'\r\n        }\r\n      } else if (type === 1) {\r\n        if (this.formData.isBorder[1] === '0px') {\r\n          this.formData.isBorder[1] = '1px'\r\n        } else {\r\n          this.formData.isBorder[1] = '0px'\r\n        }\r\n      } else if (type === 2) {\r\n        if (this.formData.isBorder[2] === '0px') {\r\n          this.formData.isBorder[2] = '1px'\r\n        } else {\r\n          this.formData.isBorder[2] = '0px'\r\n        }\r\n      } else if (type === 3) {\r\n        if (this.formData.isBorder[3] === '0px') {\r\n          this.formData.isBorder[3] = '1px'\r\n        } else {\r\n          this.formData.isBorder[3] = '0px'\r\n        }\r\n      }\r\n    }\r\n  },\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n.yv-form.yv-card {\r\n  background: #fff;\r\n  border: 1px solid var(--el-menu-border-color)\r\n}\r\n</style>","<template>\r\n  <el-form :id=\"vjson.id\" :key=\"vjson.id\" :gutter=\"vjson.gutter\"\r\n           :label-position=\"vjson.labelPosition??'left'\" :size=\"vjson.size\"\r\n           :inline-message=\"vjson.inlineMessage\" :show-message=\"vjson.showMessage\"\r\n           :label-width=\"labelWidth\" :disabled=\"vjson.disabled\"\r\n           :requireAsteriskPosition=\"vjson.requireAsteriskPosition\"\r\n           :loading=\"vjson.loading\"\r\n           :validate-on-rule-change=\"false\"\r\n           :class=\"[calcClass, 'yv-form','yv-cell-container']\"\r\n           :style=\"calcStyle\"\r\n           ref=\"_inner\"\r\n           @selectme.native=\"_selectMe\"\r\n           @click.stop=\"_selectMe\">\r\n    <template v-if=\"!!vjson.fieldsetTitle\">\r\n      <fieldset :align=\"vjson.fieldsetTitlePosition\" class=\"yv-fieldset\">\r\n        <legend>{{ vjson.fieldsetTitle }}</legend>\r\n        <div class=\"shrink\" @click=\"shrinkClick\" v-if=\"!!vjson.allowShrink\">\r\n          <div class=\"shrink-open\" v-if=\"vjson.shrink\">\r\n            <el-icon>\r\n              <ArrowUp/>\r\n            </el-icon>\r\n          </div>\r\n          <div class=\"shrink-stow\" v-else>\r\n            <el-icon>\r\n              <ArrowDown/>\r\n            </el-icon>\r\n          </div>\r\n        </div>\r\n        <template v-if=\"(vjson.shrink !== false)\">\r\n          <draggable :list=\"vjson.items\" item-key=\"id\"\r\n                     v-bind=\"{group:'fieldGroup', ghostClass: 'ghost', animation: 200}\"\r\n                     tag=\"el-row\" :component-data=\"{class: 'yv-form-row yv-field-container',gutter:8}\"\r\n                     @end=\"_onDragEnd\" @add=\"(evt)=>_onDragAdd(evt, vjson.items, vjson)\"\r\n                     @update=\"_onDragUpdate\" :move=\"_checkMove\">\r\n            <template #item=\"{ element: item, index: itemIdx }\">\r\n              <component :is=\"getDesignCmp(item)\" :key=\"item.id\"\r\n                         :vjson=\"item\"\r\n                         :vcxt=\"vcxt\"\r\n                         :designer=\"designer\"\r\n                         :parent-list=\"vjson.items\"\r\n                         :index-of-parent-list=\"itemIdx\"\r\n                         :parent-component=\"vjson\"/>\r\n            </template>\r\n            <template #header>\r\n              <div class=\"no-widget-hint\" v-if=\"(vjson.items ?? []).length === 0\">\r\n                拖拽组件放置于此处\r\n              </div>\r\n            </template>\r\n          </draggable>\r\n        </template>\r\n      </fieldset>\r\n    </template>\r\n    <template v-else>\r\n      <div v-if=\"!!vjson.title\" class=\"title\" :style=\"{textAlign:vjson.titlePosition}\">\r\n        {{ vjson.title }}\r\n        <div class=\"shrink\" @click=\"shrinkClick\" v-if=\"!!vjson.allowShrink\">\r\n          <div class=\"shrink-open\" v-if=\"vjson.shrink\">\r\n            <el-icon>\r\n              <ArrowUp/>\r\n            </el-icon>\r\n          </div>\r\n          <div class=\"shrink-stow\" v-else>\r\n            <el-icon>\r\n              <ArrowDown/>\r\n            </el-icon>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <template v-if=\"(vjson.shrink !== false)\">\r\n        <draggable :list=\"vjson.items\" item-key=\"id\"\r\n                   v-bind=\"{group:'fieldGroup', ghostClass: 'ghost', animation: 200}\"\r\n                   tag=\"el-row\" :component-data=\"{class: 'yv-form-row yv-field-container',gutter:8}\"\r\n                   @end=\"_onDragEnd\" @add=\"(evt)=>_onDragAdd(evt, vjson.items, vjson)\"\r\n                   @update=\"_onDragUpdate\" :move=\"_checkMove\">\r\n          <template #item=\"{ element: item, index: itemIdx }\">\r\n            <component :is=\"getDesignCmp(item)\" :key=\"item.id\"\r\n                       :vjson=\"item\"\r\n                       :vcxt=\"vcxt\"\r\n                       :designer=\"designer\"\r\n                       :parent-list=\"vjson.items\"\r\n                       :index-of-parent-list=\"itemIdx\"\r\n                       :parent-component=\"vjson\"/>\r\n          </template>\r\n          <template #header>\r\n            <div class=\"no-widget-hint\" v-if=\"(vjson.items ?? []).length === 0\">\r\n              拖拽组件放置于此处\r\n            </div>\r\n          </template>\r\n        </draggable>\r\n      </template>\r\n    </template>\r\n  </el-form>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonForm from \"../../vjson/yv-vjson-form.vue\"\r\nimport YvDesignFormProp from \"./yv-design-form-prop.vue\"\r\nimport eventBus from '../../../event-bus'\r\nimport {ArrowDown, ArrowUp} from '@element-plus/icons-vue'\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n    ArrowDown, ArrowUp\r\n  },\r\n  computed: {\r\n    labelWidth() {\r\n      if (!this.vjson.labelWidth || this.vjson.labelWidth === '') {\r\n        return ''\r\n      }\r\n      return parseInt(this.vjson.labelWidth) || 'auto'\r\n    },\r\n  },\r\n  watch: {\r\n    //\r\n  },\r\n  mounted() {\r\n    $(this.$refs._inner.$el).on('scroll', () => {\r\n      eventBus.$emit('bem-refresh', {sender: this, source: 'scroll'})\r\n    })\r\n  },\r\n  methods: {\r\n    _onPull() {\r\n      return false\r\n    },\r\n    /**\r\n     * 表单收起和展开\r\n     */\r\n    shrinkClick() {\r\n      this.vjson.shrink = !this.vjson.shrink\r\n      this.$nextTick(() => {\r\n        eventBus.$emit('bem-refresh', {sender: this, source: 'scroll'})\r\n      })\r\n    }\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('form')\r\n    desc.setRuntime('YvVjsonForm', YvVjsonForm)\r\n    desc.setDesign('YvDesignForm', this)\r\n    desc.setProp('YvDesignFormProp', YvDesignFormProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'form',\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'allowShrink', desc: '允许收起', bindable: true},\r\n      {name: 'shrink', desc: '是否展开', bindable: true},\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.yv-design-mode {\r\n  .yv-form:first-child {\r\n    padding-top: 8px;\r\n  }\r\n\r\n  .yv-form > .yv-field-container {\r\n    padding: 8px !important;;\r\n  }\r\n\r\n  .el-form.grid-container {\r\n    min-height: 50px;\r\n    //line-height: 48px;\r\n    //padding: 6px;\r\n    outline: 1px dashed #336699;\r\n\r\n    .form-widget-list {\r\n      min-height: 28px;\r\n    }\r\n\r\n  }\r\n}\r\n\r\n.el-form-item.is-required:not(.is-no-asterisk).asterisk-left > .el-form-item__label-wrap > .el-form-item__label:before, .el-form-item.is-required:not(.is-no-asterisk).asterisk-left > .el-form-item__label:before {\r\n  content: \"*\";\r\n  color: var(--el-color-danger);\r\n  margin-right: 4px;\r\n  display: none;\r\n}\r\n\r\n.el-form-item.is-required:not(.is-no-asterisk).asterisk-left > .el-form-item__label-wrap > .el-form-item__label, .el-form-item.is-required:not(.is-no-asterisk).asterisk-left > .el-form-item__label {\r\n  .yv-form-label:before {\r\n    content: \"*\";\r\n    color: var(--el-color-danger);\r\n    margin-right: 4px;\r\n  }\r\n}\r\n\r\n.yv-fieldset {\r\n  position: relative;\r\n  padding: 0 4px;\r\n\r\n  .shrink {\r\n    position: absolute;\r\n    right: 0;\r\n    top: -31px;\r\n    background: #fff;\r\n    padding: 0 8px;\r\n    cursor: pointer;\r\n    font-size: 14px;\r\n  }\r\n}\r\n\r\nform.yv-form {\r\n  .title {\r\n    position: relative;\r\n\r\n    .shrink {\r\n      position: absolute;\r\n      right: 0;\r\n      top: 8px;\r\n      background: #fff;\r\n      padding: 0 8px;\r\n      cursor: pointer;\r\n      font-size: 14px;\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <el-col v-if=\"parentFormColEnable\"\r\n          :span=\"getFormItemColSpan(vjson)\"\r\n          :id=\"vjson.id\" @selectme.native=\"_selectMe\" @click.stop=\"_selectMe\">\r\n    <el-form-item :label=\"vjson.fieldLabel\"\r\n                  :label-width=\"labelWidth\"\r\n                  :prop=\"bindValue\"\r\n                  :validate-on-rule-change=\"false\"\r\n                  :required=\"vjson.required\"\r\n                  :class=\"['yv-form-item', calcClass, labelAlign, vjson.required ? 'required' : '']\"\r\n                  :style=\"calcStyle\">\r\n      <slot></slot>\r\n      <template #label >\r\n\t\t<div :style=\"calcStyleLabel\" class=\"yv-form-label\">\r\n\t\t\t{{vjson.fieldLabel}}\r\n       </div>\r\n      </template>\r\n    </el-form-item>\r\n  </el-col>\r\n  <div v-else class=\"input-item-wrap\"\r\n       :id=\"vjson.id\" @selectme.native=\"_selectMe\" @click.stop=\"_selectMe\">\r\n    <el-form-item :label=\"vjson.fieldLabel\"\r\n                  :label-width=\"labelWidth\"\r\n                  :prop=\"bindValue\"\r\n                  :validate-on-rule-change=\"false\"\r\n                  :required=\"vjson.required\"\r\n                  :class=\"[labelAlign, calcClass, vjson.required ? 'required' : '']\"\r\n                  :style=\"calcStyleAndWidth\">\r\n      <slot></slot>\r\n      <template #label >\r\n\t\t<div :style=\"calcStyleLabel\">\r\n\t\t\t{{vjson.fieldLabel}}\r\n       </div>\r\n      </template>\r\n    </el-form-item>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from \"lodash\"\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getComponentName} from \"../../yv-utils\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  computed: {\r\n    parentFormColEnable() {\r\n      return this.parentComponent?.xtype === 'form' && this.parentComponent?.colsOfRow > 0\r\n    },\r\n\r\n    labelWidth() {\r\n      if (!this.vjson.labelWidth || this.vjson.labelWidth === '') {\r\n        return ''\r\n      }\r\n      return parseInt(this.vjson.labelWidth) || 'auto'\r\n    },\r\n\r\n    labelAlign() {\r\n      if (!this.vjson.labelAlign) {\r\n        return ''\r\n      }\r\n\r\n      return this.vjson.labelAlign\r\n    },\r\n\r\n    bindValue() {\r\n      let bindValue = this.vjson.bind?.value\r\n      if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n        bindValue = bindValue.substring(1, bindValue.length - 1)\r\n      }\r\n      return bindValue\r\n    },\r\n  },\r\n  created() {\r\n    //\r\n  },\r\n  methods: {\r\n    getComponentName,\r\n    // 获取 vjson 所需的 col.span 属性宽度\r\n    getFormItemColSpan(item) {\r\n      const weight = parseInt(item.weight) || 1\r\n      const colsOfRow = this.parentComponent.colsOfRow ?? 2\r\n\r\n      const simpleSpan = 24 / colsOfRow\r\n      return weight * simpleSpan\r\n    },\r\n\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.design-time-bottom-margin {\r\n  margin-bottom: 5px;\r\n}\r\n\r\n.field-wrapper {\r\n  position: relative;\r\n\r\n  .field-action {\r\n    position: absolute;\r\n    //bottom: -24px;\r\n    bottom: 0;\r\n    right: -2px;\r\n    height: 22px;\r\n    line-height: 22px;\r\n    background: var(--el-color-primary);\r\n    z-index: 9;\r\n\r\n    i {\r\n      font-size: 14px;\r\n      color: #fff;\r\n      margin: 0 3px;\r\n      cursor: pointer;\r\n    }\r\n  }\r\n\r\n  .drag-handler {\r\n    position: absolute;\r\n    top: 0;\r\n    //bottom: -22px;  /* 拖拽手柄位于组件下方，有时无法正常拖动，原因未明？？ */\r\n    left: -1px;\r\n    height: 20px;\r\n    line-height: 20px;\r\n    //background: $--color-primary;\r\n    z-index: 9;\r\n\r\n    i {\r\n      font-size: 12px;\r\n      font-style: normal;\r\n      color: #fff;\r\n      margin: 4px;\r\n      cursor: move;\r\n    }\r\n\r\n    &:hover {\r\n      //opacity: 1;\r\n      background: var(--el-color-primary);\r\n    }\r\n  }\r\n}\r\n\r\n.field-action, .drag-handler {\r\n  :deep(.svg-icon) {\r\n    margin-left: 0;\r\n    margin-right: 0;\r\n  }\r\n}\r\n\r\n.el-form-item {\r\n  //margin-bottom: 0 !important;\r\n  //margin-bottom: 6px;\r\n\r\n  //margin-top: 2px;\r\n  position: relative;\r\n\r\n  :deep(.el-form-item__label) {\r\n    white-space: nowrap;\r\n    text-overflow: ellipsis;\r\n  }\r\n\r\n  :deep(.el-form-item__content) {\r\n    //position: unset;  /* TODO: 忘了这个样式设置是为了解决什么问题？？ */\r\n  }\r\n\r\n  span.custom-label i {\r\n    margin: 0 3px;\r\n  }\r\n\r\n  /* 隐藏Chrome浏览器中el-input数字输入框右侧的上下调整小箭头 */\r\n\r\n  :deep(.hide-spin-button) input::-webkit-outer-spin-button,\r\n  :deep(.hide-spin-button) input::-webkit-inner-spin-button {\r\n    -webkit-appearance: none !important;\r\n  }\r\n\r\n  /* 隐藏Firefox浏览器中el-input数字输入框右侧的上下调整小箭头 */\r\n\r\n  :deep(.hide-spin-button) input[type=\"number\"] {\r\n    -moz-appearance: textfield;\r\n  }\r\n}\r\n\r\n.required :deep(.el-form-item__label)::before {\r\n  content: '*';\r\n  color: #F56C6C;\r\n  margin-right: 4px;\r\n}\r\n\r\n.static-content-item {\r\n  min-height: 20px;\r\n  display: flex; /* 垂直居中 */\r\n  align-items: center; /* 垂直居中 */\r\n\r\n  :deep(.el-divider--horizontal) {\r\n    margin: 0;\r\n  }\r\n}\r\n\r\n:deep(.label-left-align) .el-form-item__label {\r\n  text-align: left;\r\n  justify-content: flex-start !important;\r\n}\r\n\r\n:deep(.label-center-align) .el-form-item__label {\r\n  text-align: center;\r\n  justify-content: center !important;\r\n}\r\n\r\n:deep(.label-right-align) .el-form-item__label {\r\n  text-align: right;\r\n  justify-content: flex-end !important;\r\n}\r\n\r\n.el-form--label-left .yv-form-label{\r\n    text-align: left;\r\n    width: 100%;\r\n}\r\n.el-form--label-top .yv-form-label{\r\n    text-align: left;\r\n    width: 100%;\r\n}\r\n.el-form--label-right .yv-form-label{\r\n    text-align: right;\r\n    width: 100%;\r\n}\r\n</style>\r\n","<template>\r\n  <el-col v-if=\"parentFormColEnable\" :span=\"getFormItemColSpan(vjson)\">\r\n    <el-form-item :label=\"fieldLabel\"\r\n                  :label-width=\"labelWidth\"\r\n                  :prop=\"bindValue\"\r\n                  :rules=\"rules\"\r\n                  :class=\"[calcClass, labelAlign , required===true ? 'required' : '', 'yv-form-item']\"\r\n                  :style=\"calcStyle\">\r\n      <slot></slot>\r\n      <template #label>\r\n        <div :style=\"calcStyleLabel\" class=\"yv-form-label\">\r\n          {{ vjson.fieldLabel }}\r\n        </div>\r\n      </template>\r\n    </el-form-item>\r\n  </el-col>\r\n  <div v-else class=\"input-item-wrap\">\r\n    <el-form-item :label=\"fieldLabel\"\r\n                  :label-width=\"labelWidth\"\r\n                  :prop=\"bindValue\"\r\n                  :rules=\"rules\"\r\n                  :class=\"[calcClass, labelAlign , required===true ? 'required' : '', 'yv-form-item']\"\r\n                  :style=\"calcStyleAndWidth\">\r\n      <slot></slot>\r\n      <template #label>\r\n        <div :style=\"calcStyleLabel\" class=\"yv-form-label\">\r\n          {{ vjson.fieldLabel }}\r\n        </div>\r\n      </template>\r\n    </el-form-item>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from \"lodash\";\r\nimport {baseFormItem} from \"./Defaults\";\r\nimport VJsonContext from \"./VJsonContext\";\r\nimport {calcClass, calcStyle, calcStyleAndWidth, calcStyleLabel} from \"../yv-utils\";\r\n\r\nexport default {\r\n  props: {\r\n    vjson: Object,\r\n    vcxt: VJsonContext,\r\n    dialogScope: Object,\r\n    parentComponent: Object,\r\n    parentList: Array,\r\n    indexOfParentList: Number,\r\n    rules: Array,\r\n  },\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, baseFormItem)\r\n    if (typeof vjson.bind === \"string\") {\r\n      vjson.bind = {\r\n        value: vjson.bind\r\n      }\r\n    }\r\n\r\n    return {\r\n      fieldLabel: vjson.fieldLabel,\r\n      required: vjson.required,\r\n      bind: vjson.bind,\r\n    }\r\n  },\r\n  computed: {\r\n    parentFormColEnable() {\r\n      return this.parentComponent?.xtype === 'form' && this.parentComponent?.colsOfRow > 0\r\n    },\r\n    bindValue() {\r\n      let bindValue = this.bind?.value\r\n      if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n        bindValue = bindValue.substring(1, bindValue.length - 1)\r\n      }\r\n      if (_.startsWith(bindValue, '$row.')) {\r\n        const dialogReference = this.dialogScope?.vjson?.reference\r\n        if (dialogReference) {\r\n          bindValue = dialogReference + '.row.' + bindValue.substring(5)\r\n        }\r\n      }\r\n      return bindValue\r\n    },\r\n\r\n    labelWidth() {\r\n      if (!this.vjson.labelWidth || this.vjson.labelWidth === '') {\r\n        return ''\r\n      }\r\n      return parseInt(this.vjson.labelWidth) || 'auto'\r\n    },\r\n\r\n    labelAlign() {\r\n      if (!this.vjson.labelAlign) {\r\n        return ''\r\n      }\r\n\r\n      return this.vjson.labelAlign\r\n    },\r\n\r\n    calcStyle() {\r\n      return calcStyle(this.vjson)\r\n    },\r\n\r\n    calcStyleAndWidth() {\r\n      return calcStyleAndWidth(this.vjson)\r\n    },\r\n\r\n    calcStyleLabel() {\r\n      return calcStyleLabel(this.vjson)\r\n    },\r\n\r\n    calcClass() {\r\n      return calcClass(this.vjson)\r\n    },\r\n  },\r\n  methods: {\r\n    // 获取 vjson 所需的 col.span 属性宽度\r\n    getFormItemColSpan(item) {\r\n      const weight = parseInt(item.weight) || 1\r\n      const colsOfRow = this.parentComponent.colsOfRow ?? 2\r\n\r\n      const simpleSpan = 24 / colsOfRow\r\n      return weight * simpleSpan\r\n    },\r\n  }\r\n}\r\n</script>\r\n\r\n<style>\r\n.input-item-wrap {\r\n  display: inline-flex;\r\n}\r\n\r\n.yv-toolbar > .yv-field-container .el-form-item {\r\n  margin-bottom: 0\r\n}\r\n\r\n.el-form--label-left .yv-form-label {\r\n  text-align: left;\r\n  width: 100%;\r\n}\r\n\r\n.el-form--label-top .yv-form-label {\r\n  text-align: left;\r\n  width: 100%;\r\n}\r\n\r\n.el-form--label-right .yv-form-label {\r\n  text-align: right;\r\n  width: 100%;\r\n}\r\n\r\n.el-form-item--default .el-form-item__error {\r\n  position: absolute;\r\n  top: 100%;\r\n  left: 0;\r\n}\r\n</style>","<template>\r\n  <yv-vjson-form-item v-if=\"!hidden\"\r\n                      ref=\"_formItem\"\r\n                      :vjson=\"vjson\"\r\n                      :vcxt=\"vcxt\"\r\n                      :dialog-scope=\"dialogScope\"\r\n                      :parentComponent=\"parentComponent\"\r\n                      :parentList=\"parentList\"\r\n                      :rules=\"rules\"\r\n                      :indexOfParentList=\"indexOfParentList\"\r\n                      class=\"yv-textfield\">\r\n    <el-input\r\n        :modelValue=\"realValue\"\r\n        :disabled=\"disabled\" :readonly=\"readonly\"\r\n        :size=\"size\"\r\n        :type=\"textarea?'textarea': inputType\"\r\n        :rows=\"5\"\r\n        ref=\"_inner\"\r\n        :show-password=\"showPassword\"\r\n        :placeholder=\"placeholder\"\r\n        :clearable=\"clearable??true\"\r\n        :minlength=\"minLength\" :maxlength=\"maxLength\"\r\n        :show-word-limit=\"showWordLimit??false\"\r\n        :prefix-icon=\"prefixIcon\" :suffix-icon=\"suffixIcon\"\r\n        :class=\"['yv-textfield', vjson.clsInput]\"\r\n\r\n        @keydown=\"_onKeyDown\"\r\n        @update:modelValue=\"_onValueChange\"\r\n        @focus=\"_onFocus\" @blur=\"_onBlur\"\r\n        @input=\"_onInput\" @change=\"_onChange\" :input-style=\"calcStyleContent\"/>\r\n  </yv-vjson-form-item>\r\n</template>\r\n\r\n<script>\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport _ from \"lodash\"\r\nimport {Textfield} from \"./Defaults\"\r\nimport YvVjsonFormItem from \"./yv-vjson-form-item.vue\"\r\nimport {calcStyleContent, calcStyleLabel} from \"../yv-utils\";\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  components: {YvVjsonFormItem},\r\n\r\n  data() {\r\n    const data = _.defaults(this.vjson, Textfield)\r\n\r\n    const rules = this._getFormItemBaseRule(data)\r\n\r\n    return {\r\n      fieldLabel: data.fieldLabel,\r\n      placeholder: data.placeholder,\r\n      required: data.required,\r\n      disabled: data.disabled,\r\n      size: data.size,\r\n      bind: data.bind,\r\n      rules: rules,\r\n      readonly: data.readonly,\r\n      inputType: data.inputType,\r\n      textarea: data.textarea,\r\n      showPassword: data.showPassword,\r\n      clearable: data.clearable ?? true,\r\n      minLength: data.minLength,\r\n      maxLength: data.maxLength,\r\n      showWordLimit: data.showWordLimit ?? false,\r\n      prefixIcon: data.prefixIcon,\r\n      suffixIcon: data.suffixIcon,\r\n      labelWidth: data.labelWidth,\r\n    }\r\n  },\r\n  computed: {\r\n    calcStyleContent() {\r\n      return calcStyleContent(this.vjson)\r\n    },\r\n  },\r\n  watch: {\r\n    fieldLabel: {\r\n      handler(newVal) {\r\n        this.$refs._formItem.fieldLabel = newVal\r\n      }\r\n    },\r\n    labelWidth: {\r\n      handler(newVal) {\r\n        this.vjson.labelWidth = newVal\r\n      }\r\n    },\r\n    required: {\r\n      handler(newVal) {\r\n        this.rules = this._getFormItemBaseRule(this)\r\n        // this.$refs._formItem.required = newVal\r\n      }\r\n    },\r\n    labelAlign: {\r\n      handler(newVal) {\r\n        this.vjson.labelAlign = newVal\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    focus() {\r\n      this.$refs._inner.focus()\r\n    },\r\n    _onKeyDown(e) {\r\n      this._keyScan(this, e)\r\n    },\r\n    _keyScan: _.debounce((me, e) => {\r\n      if ([10, 13, 20, 40].includes(e.keyCode)) {\r\n        // 获取读码器读取的内容，最好不要从 viewModel 中取值，而是从 sender.rawValue 中取值\r\n        const value = _.trim(e.target.value)\r\n        const r = me.runEvent('scancode', value, e)\r\n\r\n        if (r === true) {\r\n          // 停止事件的默认处理程序，停止事件的冒泡\r\n          e.preventDefault()\r\n          e.stopPropagation()\r\n        }\r\n      }\r\n\r\n    }, 100),\r\n    _onInput(e) {\r\n      // getListener(this.vjson, 'input', this.vcxt)(this, this.vcxt.scope, e)\r\n      this.runEvent('input', ...arguments)\r\n    },\r\n    _onChange(e) {\r\n      this.runEvent('change', ...arguments)\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <el-form-item v-if=\"widthEnable\" label=\"宽度\" prop=\"formData.width\">\r\n    <el-input v-model=\"formData.width\"></el-input>\r\n  </el-form-item>\r\n  <el-form-item v-if=\"widthEnable\" label=\"最小宽度\" prop=\"formData.minWidth\">\r\n    <el-input v-model=\"formData.minWidth\"></el-input>\r\n  </el-form-item>\r\n  <el-form-item v-if=\"widthEnable\" label=\"最大宽度\" prop=\"formData.minWidth\">\r\n    <el-input v-model=\"formData.minWidth\"></el-input>\r\n  </el-form-item>\r\n  <el-form-item label=\"内边距\">\r\n    <el-col :span=\"6\" style=\"padding-right: 4px\">\r\n      <el-input v-model=\"formData.paddingTop\" :clearable=\"false\" placeholder=\"上\"/>\r\n    </el-col>\r\n    <el-col :span=\"6\" style=\"padding-right: 4px\">\r\n      <el-input v-model=\"formData.paddingRight\" :clearable=\"false\" placeholder=\"右\"/>\r\n    </el-col>\r\n    <el-col :span=\"6\" style=\"padding-right: 4px\">\r\n      <el-input v-model=\"formData.paddingBottom\" :clearable=\"false\" placeholder=\"下\"/>\r\n    </el-col>\r\n    <el-col :span=\"6\">\r\n      <el-input v-model=\"formData.paddingLeft\" :clearable=\"false\" placeholder=\"左\"/>\r\n    </el-col>\r\n  </el-form-item>\r\n  <el-form-item label=\"外边距\">\r\n    <el-col :span=\"6\" style=\"padding-right: 4px\">\r\n      <el-input v-model=\"formData.marginTop\" text-align=\"center\" :clearable=\"false\" placeholder=\"上\"/>\r\n    </el-col>\r\n    <el-col :span=\"6\" style=\"padding-right: 4px\">\r\n      <el-input v-model=\"formData.marginRight\" text-align=\"center\" :clearable=\"false\" placeholder=\"右\"/>\r\n    </el-col>\r\n    <el-col :span=\"6\" style=\"padding-right: 4px\">\r\n      <el-input v-model=\"formData.marginBottom\" text-align=\"center\" :clearable=\"false\" placeholder=\"下\"/>\r\n    </el-col>\r\n    <el-col :span=\"6\">\r\n      <el-input v-model=\"formData.marginLeft\" text-align=\"center\" :clearable=\"false\" placeholder=\"左\"/>\r\n    </el-col>\r\n  </el-form-item>\r\n  <el-form-item label=\"背景色\" class=\"colorItem\">\r\n    <el-input v-model=\"formData.cssBackgroundColor\"></el-input>\r\n    <div class=\"color-block\">\r\n      <div class=\"color-box-wrap\">\r\n        <div class=\"color-box\" :style=\"{backgroundColor:formData.cssBackgroundColor}\">\r\n          <span v-if=\"!formData.cssBackgroundColor\">暂无背景色</span>\r\n        </div>\r\n      </div>\r\n      <div class=\"color-select\" @click=\"colorToSelect('bgColor')\">\r\n        <el-icon>\r\n          <Pointer/>\r\n        </el-icon>\r\n      </div>\r\n    </div>\r\n  </el-form-item>\r\n  <el-form-item label=\"字体色\">\r\n    <el-input v-model=\"formData.cssColor\"></el-input>\r\n    <div class=\"color-block\">\r\n      <div class=\"color-box-wrap\">\r\n        <div class=\"color-box\" :style=\"{color:formData.cssColor,backgroundColor:'#fff'}\">\r\n          字体色\r\n        </div>\r\n      </div>\r\n      <div class=\"color-select\" @click=\"colorToSelect('textColor')\">\r\n        <el-icon>\r\n          <Pointer/>\r\n        </el-icon>\r\n      </div>\r\n    </div>\r\n  </el-form-item>\r\n  <el-form-item label=\"字体大小\">\r\n    <el-input v-model=\"formData.cssFontSize\"></el-input>\r\n  </el-form-item>\r\n  <el-form-item label=\"label背景色\" class=\"colorItem\" label-width=\"110px\">\r\n    <el-input v-model=\"formData.labelBackgroundColor\"></el-input>\r\n    <div class=\"color-block\">\r\n      <div class=\"color-box-wrap\">\r\n        <div class=\"color-box\" :style=\"{backgroundColor:formData.labelBackgroundColor}\">\r\n          <span v-if=\"!formData.labelBackgroundColor\">暂无背景色</span>\r\n        </div>\r\n      </div>\r\n      <div class=\"color-select\" @click=\"colorToSelect('labelBackgroundColor')\">\r\n        <el-icon>\r\n          <Pointer/>\r\n        </el-icon>\r\n      </div>\r\n    </div>\r\n  </el-form-item>\r\n  <el-form-item label=\"内容字体色\"  label-width=\"110px\">\r\n    <el-input v-model=\"formData.textCssColor\"></el-input>\r\n    <div class=\"color-block\">\r\n      <div class=\"color-box-wrap\">\r\n        <div class=\"color-box\" :style=\"{color:formData.textCssColor,backgroundColor:'#fff'}\">\r\n          字体色\r\n        </div>\r\n      </div>\r\n      <div class=\"color-select\" @click=\"colorToSelect('textCssColor')\">\r\n        <el-icon>\r\n          <Pointer/>\r\n        </el-icon>\r\n      </div>\r\n    </div>\r\n  </el-form-item>\r\n  <el-form-item label=\"内容字体大小\" label-width=\"110px\">\r\n    <el-input v-model=\"formData.textCssFont\"></el-input>\r\n  </el-form-item>\r\n  <el-form-item label=\"内容背景色\"  label-width=\"110px\">\r\n    <el-input v-model=\"formData.textCssBgColor\"></el-input>\r\n    <div class=\"color-block\">\r\n      <div class=\"color-box-wrap\">\r\n        <div class=\"color-box\" :style=\"{color:formData.textCssBgColor,backgroundColor:'#fff'}\">\r\n          字体色\r\n        </div>\r\n      </div>\r\n      <div class=\"color-select\" @click=\"colorToSelect('textCssBgColor')\">\r\n        <el-icon>\r\n          <Pointer/>\r\n        </el-icon>\r\n      </div>\r\n    </div>\r\n  </el-form-item>\r\n  <el-form-item label=\"粗体\">\r\n    <el-switch v-model=\"formData.isBlod\"/>\r\n  </el-form-item>\r\n  <el-form-item label=\"字体属性\">\r\n    <el-input v-model=\"formData.cssFont\"></el-input>\r\n  </el-form-item>\r\n  <el-dialog v-model=\"dialogTableVisible\" title=\"颜色列表\" class=\"bg-color-dialog\" :append-to-body=\"true\" width=\"820px\">\r\n    <div class=\"list\">\r\n      <div class=\"item\" v-for=\"item in bgColorList\">\r\n        <div class=\"title\">{{ item.title }}</div>\r\n        <div class=\"color-box-main color-box-white\" v-if=\"item?.whiteColor\" :style=\"{background:item.color[0]}\"\r\n             @click=\"bgColorSelect(item.color[0])\">\r\n          我是白色的-#fff\r\n        </div>\r\n        <div class=\"color-box-main\" v-else :style=\"{background:item.color[0]}\" @click=\"bgColorSelect(item.color[0])\">\r\n          <span v-if=\"item?.subTitle\">{{ item.subTitle }}</span>\r\n        </div>\r\n        <div class=\"color-box\">\r\n          <template v-for=\"(el, idx) in item?.color\">\r\n            <div v-if=\"idx>=1\" class=\"color-box-1\" :style=\"{background:el}\" @click=\"bgColorSelect(el)\"></div>\r\n          </template>\r\n        </div>\r\n      </div>\r\n      <div class=\"item item-more\">\r\n        <div class=\"title\">更多</div>\r\n        <div class=\"more\">\r\n          <div class=\"more-text\">\r\n            待加入\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </el-dialog>\r\n</template>\r\n<script>\r\nimport Designer from \"../designer\";\r\nimport {Pointer} from '@element-plus/icons-vue'\r\n\r\nexport default {\r\n  components: {\r\n    Pointer\r\n  },\r\n  props: {\r\n    formData: Object,\r\n    designer: Designer\r\n  },\r\n  data() {\r\n    return {\r\n      widthEnable: this.designer.selectedOption?.parentComponent?.xtype !== 'form',\r\n      dialogTableVisible: false,\r\n      bgColorList: [{\r\n        title: '默认',\r\n        subTitle: 'Default',\r\n        color: ['#409EFF', '#337ecc', '#79bbff', '#a0cfff', '#c6e2ff', '#d9ecff', '#ecf5ff']\r\n      }, {\r\n        title: '成功',\r\n        subTitle: 'Success',\r\n        color: ['#67C23A', '#529b2e', '#95d475', '#b3e19d', '#d1edc4', '#e1f3d8', '#f0f9eb']\r\n      }, {\r\n        title: '警告',\r\n        subTitle: 'Warning',\r\n        color: ['#e6a23c', '#b88230', '#eebe77', '#f3d19e', '#f8e3c5', '#faecd8', '#fdf6ec']\r\n      }, {\r\n        title: '危险',\r\n        subTitle: 'Danger',\r\n        color: ['#f56c6c', '#c45656', '#f89898', '#fab6b6', '#fcd3d3', '#fde2e2', '#fef0f0']\r\n      }, {\r\n        title: '灰色',\r\n        subTitle: 'Success',\r\n        color: ['#909399', '#73767a', '#b1b3b8', '#c8c9cc', '#dedfe0', '#e9e9eb', '#f4f4f5']\r\n      }, {\r\n        title: '黄色',\r\n        color: ['#ffd400', '#eac306', '#fdec3e', '#fdf566', '#fefb8f', '#fefeb8', '#feffe5']\r\n      }, {\r\n        title: '色系七',\r\n        color: ['#eb2f96', '#c42080', '#f758aa', '#fa84c0', '#fbadd2', '#fdd6e6', '#fff0f7']\r\n      }, {\r\n        title: '紫色',\r\n        color: ['#722ed1', '#521cab', '#9154de', '#b37feb', '#d3adf7', '#f0dcff', '#faf0ff']\r\n      }, {\r\n        title: '蓝色',\r\n        color: ['#26979c', '#196d75', '#33c2c2', '#5cdbd3', '#87e7de', '#b6f6ec', '#e6fffb']\r\n      }, {\r\n        title: '常用色',\r\n        whiteColor: true,\r\n        color: ['#fff', '#000']\r\n      }],\r\n      typeColor: ''\r\n    }\r\n  },\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      handler() {\r\n        this.dialogTableVisible = false\r\n      }\r\n    },\r\n    'dialogTableVisible':{\r\n      handler(v){\r\n        console.log('dialogTableVisible', v)\r\n      }\r\n    },\r\n    'designer.selectedOption.parentComponent.xtype': {\r\n      handler(newVal) {\r\n        if (newVal === 'form') {\r\n          // 窗口条件下不允许调整宽度\r\n          this.widthEnable = false\r\n        } else {\r\n          this.widthEnable = true\r\n        }\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    setHeightMode(newVal) {\r\n      this.formData.heightMode = newVal\r\n    },\r\n    colorToSelect(color){\r\n      this.typeColor=color\r\n      this.dialogTableVisible = true\r\n    },\r\n    bgColorSelect(color) {//选择背景色/字体色\r\n      if (this.typeColor === 'bgColor') {\r\n        this.formData.cssBackgroundColor = color\r\n      } else if (this.typeColor === 'textColor') {\r\n        this.formData.cssColor = color\r\n      }else if(this.typeColor==='textCssColor'){\r\n        this.formData.textCssColor = color\r\n      }else if(this.typeColor==='textCssBgColor'){//\r\n        this.formData.textCssBgColor = color\r\n      }else if(this.typeColor==='labelBackgroundColor'){\r\n        this.formData.labelBackgroundColor = color\r\n      }\r\n      this.dialogTableVisible = false\r\n    },\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.color-block {\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: row;\r\n  margin-top: 5px;\r\n\r\n  .color-box-wrap {\r\n    flex: 1;\r\n    border: 1px solid #dcdcdc;\r\n    padding: 3px;\r\n\r\n    .color-box {\r\n      text-align: center;\r\n      line-height: 26px;\r\n      font-size: 12px;\r\n      height: 24px;\r\n    }\r\n  }\r\n\r\n  .color-select {\r\n    width: 30px;\r\n    height: 30px;\r\n    border: 1px solid #dcdcdc;\r\n    text-align: center;\r\n    background: #fff;\r\n    margin-left: 3px;\r\n    cursor: pointer;\r\n  }\r\n}\r\n\r\n.bg-color-dialog {\r\n  .list {\r\n    display: flex;\r\n    flex-direction: row;\r\n    flex-wrap: wrap;\r\n\r\n    .item {\r\n      width: 200px;\r\n      padding: 10px;\r\n\r\n      .title {\r\n        text-align: center;\r\n        font-size: 18px;\r\n        color: #000;\r\n        margin-bottom: 10px\r\n      }\r\n\r\n      .color-box-main {\r\n        height: 75px;\r\n        border-top-left-radius: 3px;\r\n        border-top-right-radius: 3px;\r\n        cursor: pointer;\r\n        text-align: center;\r\n        line-height: 75px;\r\n        transition: all .2s ease;\r\n\r\n        span {\r\n          color: #fff\r\n        }\r\n\r\n        &:hover {\r\n          height: 80px;\r\n          margin-top: -5px\r\n        }\r\n\r\n        &.color-box-white {\r\n          border: 1px solid #ccc;\r\n          text-align: center;\r\n          line-height: 75px;\r\n        }\r\n      }\r\n\r\n      .color-box {\r\n        display: flex;\r\n        flex-direction: row;\r\n\r\n        .color-box-1 {\r\n          flex: 1;\r\n          cursor: pointer;\r\n          height: 40px;\r\n          transition: all .2s ease;\r\n\r\n          &:nth-child(1) {\r\n            border-bottom-left-radius: 3px;\r\n          }\r\n\r\n          &:nth-child(6) {\r\n            border-bottom-right-radius: 3px;\r\n          }\r\n\r\n          &:hover {\r\n            height: 45px;\r\n            margin-bottom: -5px\r\n          }\r\n        }\r\n      }\r\n\r\n      &.item-more {\r\n        .title {\r\n          height: 25px\r\n        }\r\n\r\n        .more {\r\n          width: 100%;\r\n          border: 1px solid #ccc;\r\n          padding: 5px;\r\n\r\n          .more-text {\r\n            height: 105px;\r\n            line-height: 105px;\r\n            background: #eee;\r\n            text-align: center;\r\n          }\r\n        }\r\n      }\r\n\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">textfield 属性</div>\r\n    <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"modal\" prop=\"bindValue\">\r\n        <el-input v-model=\"bindValue\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"uiKey\" prop=\"uiKey\">\r\n        <el-input v-model=\"formData.uiKey\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"权限\" prop=\"permissions\">\r\n        <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"隐藏\" prop=\"hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"标签名\" prop=\"fieldLabel\">\r\n        <el-input v-model=\"formData.fieldLabel\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"必填\" prop=\"required\">\r\n        <el-switch v-model=\"formData.required\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"宽度权重\" prop=\"weight\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"(formData.weight === 1 || !formData.weight)? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=1\">1\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 2? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=2\">2\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 3? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=3\">3\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 4? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=4\">4\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 5? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=5\">5\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 6? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=6\">6\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"标签宽度\" prop=\"formData.text\">\r\n        <el-input v-model=\"formData.labelWidth\" type=\"text\" placeholder=\"auto\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"立刻校验\" prop=\"validateOnRuleChange\">\r\n        <el-switch v-model=\"formData.validateOnRuleChange\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"显示错误\" prop=\"showMessage\">\r\n        <el-switch v-model=\"formData.showMessage\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"内联错误\" prop=\"inlineMessage\">\r\n        <el-switch v-model=\"formData.inlineMessage\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"尺寸\" prop=\"size\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"formData.size === 'large'? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='large'\">大\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"(formData.size === 'default' || !formData.size)? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='default'\">中\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.size === 'small'? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='small'\">小\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"多行文本\" prop=\"textarea\">\r\n        <el-switch v-model=\"formData.textarea\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"占位字符\" prop=\"placeholder\">\r\n        <el-input v-model=\"formData.placeholder\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"最大长度\" prop=\"maxlength\">\r\n        <el-input v-model=\"formData.maxlength\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"密码\" prop=\"showPassword\">\r\n        <el-switch v-model=\"formData.showPassword\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"禁用\" prop=\"disabled\">\r\n        <el-switch v-model=\"formData.disabled\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"只读\" prop=\"readonly\">\r\n        <el-switch v-model=\"formData.readonly\"></el-switch>\r\n      </el-form-item>\r\n      <yv-design-input-width :designer=\"designer\" :form-data=\"formData\"/>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport VJsonContext from \"../../vjson/VJsonContext\";\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\";\r\nimport YvDesignInputWidth from \"./yv-design-input-width.vue\"\r\nimport YvDesignerPermissions from '../yv-designer-permissions.vue'\r\n\r\nexport default {\r\n  components: {YvDesignInputWidth, YvDesignerPermissions},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        fieldLabel: this.vjson.fieldLabel,\r\n        labelWidth: this.vjson.labelWidth,\r\n        required: this.vjson.required ?? false,\r\n        showMessage: this.vjson.showMessage ?? true,\r\n        inlineMessage: this.vjson.inlineMessage ?? false,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        placeholder: this.vjson.placeholder,\r\n        maxlength: this.vjson.maxlength,\r\n        showPassword: this.vjson.showPassword,\r\n        readonly: this.vjson.readonly ?? false,\r\n        weight: this.vjson.weight,\r\n        bind: this.vjson.bind\r\n      }\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <yv-design-form-item :designer=\"designer\" :vjson=\"vjson\" :vcxt=\"vcxt\"\r\n                       :parent-component=\"parentComponent\" :parent-list=\"parentList\"\r\n                       :index-of-parent-list=\"indexOfParentList\"\r\n                       class=\"yv-textfield\">\r\n    <el-input :disabled=\"vjson.disabled\" :readonly=\"vjson.readonly\"\r\n              :size=\"vjson.size\" class=\"hide-spin-button\"\r\n              :rows=\"5\"\r\n              :type=\"vjson.textarea?'textarea': 'text'\"\r\n              :show-password=\"vjson.showPassword\"\r\n              :placeholder=\"vjson.placeholder\"\r\n              :clearable=\"vjson.clearable??true\"\r\n              :minlength=\"vjson.minLength\" :maxlength=\"vjson.maxLength\"\r\n              :show-word-limit=\"vjson.showWordLimit??false\"\r\n              :prefix-icon=\"vjson.prefixIcon\" :suffix-icon=\"vjson.suffixIcon\" :input-style=\"calcStyleContent\">\r\n    </el-input>\r\n  </yv-design-form-item>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignFormItem from './yv-design-form-item.vue'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonTextfield from \"../../vjson/yv-vjson-textfield.vue\"\r\nimport YvDesignTextfieldProp from \"./yv-design-textfield-prop.vue\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n    YvDesignFormItem,\r\n  },\r\n  data() {\r\n    return {\r\n      oldFieldValue: null, //field组件change之前的值\r\n      fieldModel: '',\r\n    }\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('textfield')\r\n    desc.setRuntime('YvVjsonTextfield', YvVjsonTextfield)\r\n    desc.setDesign('YvDesignTextfield', this)\r\n    desc.setProp('YvDesignTextfieldProp', YvDesignTextfieldProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'text',\r\n        vjson.fieldLabel,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'required', desc: '必填', bindable: true},\r\n      {name: 'fieldLabel', desc: '标签名', bindable: true},\r\n      {name: 'placeholder', desc: '占位符', bindable: true},\r\n      {name: 'disabled', desc: '禁用', bindable: true},\r\n      {name: 'readonly', desc: '只读', bindable: true},\r\n      {name: 'hidden', desc: '隐藏', bindable: true},\r\n      {name: 'size', desc: '大小', bindable: true},\r\n      {name: 'minLength', desc: '最小长度', bindable: true},\r\n      {name: 'maxLength', desc: '最大长度', bindable: true},\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'focus', desc: '获取焦点时触发', events: [{name: 'e'}]},\r\n      {name: 'blur', desc: '失去焦点触发', events: [{name: 'e'}]},\r\n      {name: 'change', desc: '更改时触发', events: [{name: 'e'}]},\r\n      {name: 'input', desc: '输入时触发', events: [{name: 'e'}]},\r\n      {name: 'scancode', desc: '扫码枪读码后触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>","<template>\r\n  <yv-vjson-form-item v-if=\"!hidden\"\r\n                      ref=\"_formItem\"\r\n                      :vjson=\"vjson\"\r\n                      :vcxt=\"vcxt\"\r\n                      :rules=\"rules\"\r\n                      :parentComponent=\"parentComponent\"\r\n                      :parentList=\"parentList\"\r\n                      :indexOfParentList=\"indexOfParentList\"\r\n                      class=\"yv-treefield\">\r\n    <el-tree-select :modelValue=\"realValue\"\r\n                    :data=\"data\"\r\n                    :placeholder=\"placeholder\"\r\n                    :disabled=\"disabled\"\r\n                    :size=\"size\"\r\n                    :clearable=\"clearable\"\r\n                    :multiple=\"multiple??false\"\r\n                    :collapse-tags=\"!!(multiple??false)\"\r\n                    :collapse-tags-tooltip=\"true\"\r\n                    :filterable=\"filterable??true\"\r\n                    :show-checkbox=\"showCheckbox??false\"\r\n                    :check-strictly=\"checkStrictly??true\"\r\n                    :loading=\"loading\"\r\n                    :suffix-icon=\"loading?renderIcon('element Loading'):undefined\"\r\n                    @update:modelValue=\"_onValueChange\"\r\n                    @focus=\"_onFocus\" @blur=\"_onBlur\"\r\n                    @remove-tag=\"_onHandleRemoveTag\"\r\n                    @visible-change=\"_onHandleVisibleChange\"\r\n                    @clear=\"_onHandleClear\"\r\n                    @input=\"_onInput\" @change=\"_onChange\">\r\n    </el-tree-select>\r\n  </yv-vjson-form-item>\r\n</template>\r\n\r\n<script>\r\nimport _ from \"lodash\"\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport {Treefield} from \"./Defaults\"\r\nimport YvVjsonFormItem from \"./yv-vjson-form-item.vue\"\r\nimport {toRaw} from \"vue\";\r\nimport {analyzeParamsForWatch, buildFieldTreeData, buildTreeData, runEvent} from \"../yv-utils\";\r\nimport {calcObjectFlat} from \"../raw/utils\";\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  components: {\r\n    YvVjsonFormItem\r\n  },\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Treefield)\r\n    const rules = this._getFormItemBaseRule(vjson)\r\n\r\n    return {\r\n      fieldLabel: vjson.fieldLabel,\r\n      rules: rules,\r\n      labelWidth: vjson.labelWidth,\r\n      placeholder: vjson.placeholder,\r\n      disabled: vjson.disabled,\r\n      size: vjson.size,\r\n      hidden: vjson.hidden,\r\n      bind: vjson.bind,\r\n      readonly: vjson.readonly,\r\n      loading: false,\r\n      clearable: vjson.clearable ?? true,\r\n      multiple: vjson.multiple ?? false,\r\n      dataSource: vjson.dataSource,\r\n      filterable: vjson.filterable ?? true,\r\n      checkStrictly: vjson.checkStrictly ?? true,\r\n      showCheckbox: vjson.showCheckbox ?? false,\r\n      data: [],\r\n    }\r\n  },\r\n  watch: {\r\n    fieldLabel: {\r\n      handler(newVal) {\r\n        this.$refs._formItem.fieldLabel = newVal\r\n      }\r\n    },\r\n    labelWidth: {\r\n      handler(newVal) {\r\n        this.vjson.labelWidth = newVal\r\n      }\r\n    },\r\n  },\r\n  methods: {\r\n    reload() {\r\n      if (typeof this.dataSource.reload === 'function') {\r\n        this.dataSource.reload()\r\n      }\r\n    },\r\n    setLoading(isLoad) {\r\n      this.loading = isLoad\r\n    },\r\n    setData(data) {\r\n      this.data = data\r\n    },\r\n    _isItemDisabled(id) {\r\n      return _.includes((this.vjson.disabledDictItems || []), id)\r\n    },\r\n    _onInput(e) {\r\n      // getListener(this.vjson, 'input', this.vcxt)(this, this.vcxt.scope, e)\r\n      this.runEvent('input', ...arguments)\r\n    },\r\n    _onHandleRemoveTag(e) {\r\n      this.runEvent('remove-tag', ...arguments)\r\n    },\r\n    _onHandleVisibleChange(e) {\r\n      this.runEvent('visible-change', ...arguments)\r\n    },\r\n    _onHandleClear(e) {\r\n      this.runEvent('clear', ...arguments)\r\n    },\r\n    _onChange(e) {\r\n      this.runEvent('change', ...arguments)\r\n    }\r\n  },\r\n  destroyed() {\r\n    if (this.dataSourceWatchStopHandle.length > 0) {\r\n      _.forEach(this.dataSourceWatchStopHandle, (fn) => {\r\n        fn()\r\n      })\r\n      this.dataSourceWatchStopHandle = []\r\n    }\r\n  },\r\n  mounted() {\r\n    if (this.dataSource?.reload) {\r\n      this.reload()\r\n    }\r\n  },\r\n  created() {\r\n    const dataSource = _.cloneDeep(toRaw(this.dataSource))\r\n    if (!dataSource) {\r\n      return\r\n    }\r\n    const params = {}\r\n    if (dataSource.method === 'invoke' || dataSource.sqlId) {\r\n      if (dataSource.sqlId) {\r\n        dataSource.method = 'invoke'\r\n        dataSource.url = '/com/galaxis/wms/Dev@executeSQL'\r\n        const scope = this.vcxt.scope\r\n        if (!scope._relPath) {\r\n          return null\r\n        }\r\n        if (_.startsWith(dataSource.sqlId, '@')) {\r\n          // sqlId 是 @ 开头，代表直接带中文名\r\n          // dataSource.url = relPath + dataSource.sqlId\r\n          params.path = scope._relPath.split(\".\")[0]\r\n          params.sqlId = dataSource.sqlId.substring(1)\r\n          params.pagination = this.pagination\r\n        } else {\r\n          if (_.endsWith(_.toLower(scope._relPath), '.vue')) {\r\n            params.path = scope._relPath.substring(0, scope._relPath.length - 4)\r\n          } else {\r\n            params.path = scope._relPath\r\n          }\r\n          params.sqlId = dataSource.sqlId\r\n          params.pagination = false\r\n        }\r\n      }\r\n    }\r\n    const me = this\r\n    this.dataSourceWatchStopHandle = analyzeParamsForWatch(me.vcxt.scope.$watch, this.dataSource.params, (watchResultForParam) => {\r\n      if (this.$refs._inner) {\r\n        const style = window.getComputedStyle(this.$refs._inner?.$el);\r\n        if (style && style.display !== 'none') {\r\n          // 没有隐藏，既刷新\r\n          me.dataSource.reload(watchResultForParam)\r\n        }\r\n      }\r\n    })\r\n    dataSource.reload = _.debounce(() => {\r\n      runEvent(this.vcxt.scope, this.vjson, \"onDataLoadBefore\", {})\r\n      const reParams = _.cloneDeep(params)\r\n\r\n      // 从 params 参数描述中，分析出实际请求参数\r\n      let cancel = false\r\n      let p = calcObjectFlat(this.vcxt?.scope?.$data, this.dataSource.params, (express, value) => {\r\n        // 判断参数，是否被 watch\r\n        if ((express + '').startsWith('watch:{')) {\r\n          value = '' + value\r\n          if (value.startsWith('watch:')) {\r\n            value = value.substring(6)\r\n          }\r\n        }\r\n\r\n        // 判断参数，是否要求必填\r\n        if ((express + '').endsWith('}:required')) {\r\n          if (typeof value === 'undefined' || value == null) {\r\n            console.debug('express:' + express + ' is ' + value + ', request canceled!')\r\n            cancel = true\r\n          }\r\n\r\n          value = '' + value\r\n          if (value.endsWith(':required')) {\r\n            value = value.substring(0, value.length - 9)\r\n          }\r\n\r\n          if (!value) {\r\n            console.debug('express:' + express + ' is ' + value + ', request canceled!')\r\n            cancel = true\r\n          }\r\n        }\r\n        return value\r\n      })\r\n\r\n      if (cancel) {\r\n        me.setData([])\r\n        if (this.vjson.reference) {\r\n          _.set(this.vcxt.scope, this.vjson.reference + '.selection', null)\r\n          _.set(this.vcxt.scope, this.vjson.reference + '.checkedNodes', [])\r\n          _.set(this.vcxt.scope, this.vjson.reference + '.checkedKeys', [])\r\n        }\r\n        if (this.showCheckbox) {\r\n          if (this.$refs._inner) {\r\n            this.$refs._inner.setCheckedKeys([])\r\n            this.$nextTick(() => {\r\n              this.checkedCount = this.$refs._inner.getHalfCheckedKeys().length + this.$refs._inner.getCheckedKeys().length\r\n            })\r\n          }\r\n        }\r\n        runEvent(this.vcxt.scope, this.vjson, \"onDataLoadComplete\", this, [], [])\r\n        return\r\n      }\r\n\r\n      if (typeof this.dataSource.paramsFn === 'function') {\r\n        const cp = this.dataSource.paramsFn()\r\n        _.merge(p, cp)\r\n      }\r\n      _.merge(reParams, p)\r\n      // 请求\r\n      me.setLoading(true)\r\n      const expandKeys = []\r\n      if (this.keepExpandKeys) {\r\n        const nodeDatas = this.$refs._inner.store.nodesMap\r\n        for (let key in nodeDatas) {\r\n          if (nodeDatas[key].expanded) {\r\n            expandKeys.push(key)\r\n          }\r\n        }\r\n      }\r\n      system.invokeServer(dataSource.url, reParams).then(res => {\r\n        if (res.success) {\r\n          const treeData = buildFieldTreeData(res.data, {\r\n            idField: dataSource.idField ?? \"id\",\r\n            parentField: dataSource.parentField ?? \"parent_id\",\r\n            checkField: dataSource.checkField ?? \"check\",\r\n            textField: dataSource.textField ?? \"text\",\r\n          })\r\n          runEvent(this.vcxt.scope, this.vjson, \"onDataLoadComplete\", this, res.data, treeData)\r\n          console.log('treeData', treeData)\r\n          me.setData(treeData)\r\n          if (this.keepExpandKeys) {\r\n            if (this.$refs._inner) {\r\n              this.$nextTick(() => {\r\n                const nodeDatas = this.$refs._inner?.store.nodesMap\r\n                for (let key in nodeDatas) {\r\n                  if (expandKeys.includes(key)) {\r\n                    nodeDatas[key].expanded = true\r\n                  }\r\n                }\r\n              })\r\n            }\r\n          }\r\n        }\r\n\r\n      }).catch((e) => {\r\n        runEvent(this.vcxt.scope, this.vjson, \"onDataLoadComplete\", this, [], [])\r\n        console.error(e)\r\n        system.showErrorDialog(e.toString())\r\n\r\n      }).finally(() => {\r\n        me.setLoading(false)\r\n      })\r\n    }, 10)\r\n    this.dataSource = dataSource\r\n  },\r\n}\r\n</script>\r\n<style>\r\n.yv-treefield {\r\n\r\n}\r\n</style>","import localforage from 'localforage'\r\nimport {ref} from 'vue'\r\nimport _ from 'lodash'\r\n\r\nconst dict = ref<{\r\n    [key: string]: {\r\n        code: string\r\n        desc: string\r\n        type: number\r\n        items: Array<{\r\n            dictCode: string\r\n            dictText: string\r\n            dictValue: number\r\n            dictSort: number\r\n            isEnable: number\r\n            varName: string\r\n            udf1: string\r\n            udf2: string\r\n            udf3: string\r\n            dictParent: string\r\n        }>\r\n    }\r\n}>({});\r\nwindow[\"DICT_CACHE2\"] = dict;\r\n\r\nasync function initDict() {\r\n    const DICT_VERSION = \"dictVersion\"\r\n    const DICT_DATA = \"dict\"\r\n    const dictVersion = await localforage.getItem(DICT_VERSION)\r\n    const res = await system.invokeServer(\"/pages/sys/dict/Dict@queryAllItems2\", {version: dictVersion})\r\n    const oldDict = await localforage.getItem(DICT_DATA);\r\n    dict.value = _.isObject(res.data?.dict) ? res.data.dict : (oldDict || [])\r\n    if (res.data?.version && res.data?.dict) {\r\n        localforage.setItem(DICT_VERSION, res.data.version).finally()\r\n        localforage.setItem(DICT_DATA, res.data.dict).finally()\r\n    }\r\n    // console.log(\"initDict\", dict.value)\r\n    let DICT_CACHE = window['DICT_CACHE']\r\n    if (!DICT_CACHE) {\r\n        DICT_CACHE = {}\r\n        window['DICT_CACHE'] = DICT_CACHE\r\n    }\r\n    _.forEach(dict.value, (value, key) => {\r\n        // console.log(key, value)\r\n        if (!_.isArray(value.items)) {\r\n            return\r\n        }\r\n        DICT_CACHE[key] = []\r\n        _.forEach(value.items, item => {\r\n            DICT_CACHE[key].push({id: item.dictValue, text: item.dictText})\r\n        });\r\n    });\r\n}\r\n\r\n// setTimeout(() => initDict().finally(), 1500)\r\n\r\nexport {\r\n    dict,\r\n    initDict,\r\n}\r\n","enum SqlOperationType {\r\n    CREATE, UPDATE, DROP, RENAME\r\n}\r\n\r\nenum OperationType {\r\n    NEW, UPDATE, REMOVE, RAW\r\n}\r\n\r\nenum TableSchemaType {\r\n    DATABASE, TABLE, COLUMN\r\n}\r\n\r\nclass DatabaseConstant {\r\n\r\n    static readonly V_ID_PREFIX = 'vid_';\r\n\r\n    static readonly NEW_TABLE_NAME_PREFIX = 'new_table_';\r\n\r\n    static readonly DATABASE_MAX_TABS_LEN = 10;\r\n\r\n    static readonly UI_TYPE_LIST = [\r\n        {'value': '', 'text': ''},\r\n        {'value': 'numberfield', 'text': '数字'},\r\n        {'value': 'textfield', 'text': '文本'},\r\n        {'value': 'datefield', 'text': '日期'},\r\n        {'value': 'combo', 'text': '下拉框'},\r\n        {'value': 'checkbox', 'text': '勾选'},\r\n        {'value': 'combogrid', 'text': '下拉表'},\r\n    ];\r\n}\r\n\r\n\r\nexport {\r\n    DatabaseConstant,\r\n    OperationType,\r\n    SqlOperationType,\r\n    TableSchemaType\r\n}","<template>\r\n  <el-tab-pane label=\"数据源\">\r\n    <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n\r\n      <el-form-item label=\"类型\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"dataType === 2? 'primary':'default'\" @click=\"setDataTypeForUrl\">URL\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"dataType === 3 ? 'primary':'default'\" @click=\"setDataTypeForSQL\">SQL\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n\r\n      <template v-if=\"dataType===2\">\r\n        <el-form-item label=\"URL\" prop=\"dataSourceOfUrl\">\r\n          <el-input v-model=\"dataSourceOfUrl\" type=\"text\" clearable></el-input>\r\n          <el-button type=\"primary\" @click=\"clickDataSourceByUrl\">编辑SQL</el-button>\r\n        </el-form-item>\r\n      </template>\r\n      <template v-if=\"dataType===3\">\r\n        <el-form-item label=\"SQL名\" prop=\"dataSourceOfSql\">\r\n          <el-input v-model=\"dataSourceOfSql\" type=\"text\" clearable></el-input>\r\n        </el-form-item>\r\n        <el-form-item label=\"\">\r\n          <el-button type=\"primary\" @click=\"clickDataSource\">编辑SQL</el-button>\r\n        </el-form-item>\r\n      </template>\r\n      <template v-if=\"dataType===2 || dataType===3\">\r\n        <el-divider style=\"margin:15px 0\">SQL参数</el-divider>\r\n        <div class=\"sql-param\" v-for=\"(param, index) in dataSourceParams\">\r\n          <div class=\"sql-param-detail\">\r\n            <div class=\"sql-param-detail-row\">\r\n              <el-input v-model=\"param.key\" type=\"text\" placeholder=\"参数名\" clearable/>\r\n            </div>\r\n            <div class=\"sql-param-detail-row\">\r\n              <YvDesignInputExpress style=\"flex-grow: 1\" v-model=\"param.targetExpress\" :designer=\"designer\"/>\r\n            </div>\r\n            <div class=\"sql-param-detail-row\">\r\n              <div class=\"sql-param-detail-col\">\r\n                <el-checkbox v-model=\"param.watch\" @change=\"changeDataSourceWatch($event, index)\"/>\r\n                自动观察\r\n              </div>\r\n              <div class=\"sql-param-detail-col\">\r\n                <el-checkbox v-model=\"param.required\" @change=\"changeDataSourceRequired($event, index)\"/>\r\n                必填\r\n              </div>\r\n              <div class=\"sql-param-detail-col\">\r\n                <el-button type=\"primary\" link @click=\"removeDataSourceParam($event, index)\">删除</el-button>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <el-button type=\"primary\" :icon=\"renderIcon('fa Plus')\" link @click=\"addNewDataSourceParam\"\r\n                   class=\"enumeration-add-btn\">\r\n          添加参数\r\n        </el-button>\r\n      </template>\r\n      <!--\r\n      <YvDesignInputJson :designer=\"designer\" v-model=\"dataSourceParams\"/>\r\n      -->\r\n      <el-divider />\r\n      <el-form-item label=\"忽略数据权限\" label-width=\"200px\" prop=\"ignoreDataPermission\">\r\n        <el-switch v-model=\"formData.ignoreDataPermission\"></el-switch>\r\n      </el-form-item>\r\n\r\n      <slot/>\r\n    </el-form>\r\n  </el-tab-pane>\r\n  <el-dialog :title=\"'SQL:'+dataSourceOfSql\" v-model=\"showModule\" width=\"70%\" class=\"yv-aggrid-prop-dialog\"\r\n             :append-to-body=\"true\">\r\n<!--    <el-input v-model=\"queryStr\"></el-input>-->\r\n<!--    <el-row :class=\"['yv-toolbar']\">-->\r\n<!--      <el-button @click=\"queryClick\">发送</el-button>-->\r\n<!--      <el-button @click=\"initAi\">重置会话</el-button>-->\r\n<!--    </el-row>-->\r\n\r\n<!--    <Markdown :source=\"markdownSource\" style=\"height: 300px; overflow: scroll;\"/>-->\r\n    <yv-src-editor v-model=\"dataSQL\" language=\"sql\" style=\"min-height:200px;\"/>\r\n    <template #footer>\r\n      <div style=\"\">\r\n        <el-button @click=\"()=>{$data.showModule=false;}\">关闭</el-button>\r\n        <el-button :icon=\"renderIcon('fa Cube')\" type=\"success\" @click=\"analyzeSql\">自动分析</el-button>\r\n        <el-button type=\"primary\" @click=\"submitDataSource\">保存</el-button>\r\n      </div>\r\n    </template>\r\n  </el-dialog>\r\n\r\n  <el-dialog title=\"数据源编辑\" v-model=\"showModuleByUrl\" width=\"70%\" class=\"yv-aggrid-prop-dialog\"\r\n             :append-to-body=\"true\">\r\n    <yv-src-editor v-model=\"dataSQLByUrl\" language=\"sql\" style=\"min-height:200px;\"/>\r\n    <template #footer>\r\n      <div style=\"\">\r\n        <el-button @click=\"()=>{$data.showModuleByUrl=false;}\">关闭</el-button>\r\n        <el-button type=\"primary\" @click=\"submitDataSourceByUrl\">保存</el-button>\r\n      </div>\r\n    </template>\r\n  </el-dialog>\r\n\r\n  <el-dialog title=\"数据源编辑\" v-model=\"showAnalyzerResults\" width=\"400px\" class=\"yv-aggrid-prop-dialog\"\r\n             style=\"height:auto\"\r\n             :append-to-body=\"true\">\r\n    <el-scrollbar height=\"400px\">\r\n      <el-tree\r\n          ref=\"analyzeTree\"\r\n          class=\"yvan-db-table-tree\"\r\n          highlight-current\r\n          check-on-click-node\r\n          expand-on-click-node\r\n          default-expand-all\r\n          :default-checked-keys=\"analyzeTree.checkedKeys\"\r\n          show-checkbox\r\n          node-key=\"id\"\r\n          v-loading=\"analyzeTree.loading\"\r\n          :data=\"analyzeTree.treeData\"\r\n          :props=\"analyzeTree.defaultProps\"\r\n          :node-key=\"analyzeTree.nodeKey\"\r\n      >\r\n        <template #default=\"{ node }\">\r\n          <span class=\"yvan-db-table-tree-node\">\r\n            <span v-if=\"isDatabaseNode(node)\">\r\n              <component :is=\"renderIcon('fa ThLarge')\"/>\r\n              {{ node.label }}\r\n            </span>\r\n            <span v-if=\"isTableNode(node)\">\r\n              <component :is=\"renderIcon('fa Table')\"/>\r\n              {{ node.label }}\r\n              <span v-if=\"hasDescription(node)\">({{ node.data.description }})</span>\r\n            </span>\r\n            <span v-if=\"isColumnNode(node)\">\r\n              <component :is=\"renderIcon('fa Key')\" v-if=\"isPrimaryKey(node)\"/>\r\n              <component :is=\"renderIcon('fa Star')\" v-else-if=\"isNotNull(node)\"/>\r\n              <component :is=\"renderIcon('fa StarRegular')\" v-else/>\r\n              {{ node.label }}\r\n              <span v-if=\"hasComment(node)\">({{ node.data.column_comment }})</span>\r\n            </span>\r\n          </span>\r\n        </template>\r\n      </el-tree>\r\n    </el-scrollbar>\r\n    <template #footer>\r\n      <div style=\"\">\r\n        <el-button @click=\"()=>{$data.showAnalyzerResults=false;}\">关闭</el-button>\r\n        <el-button type=\"primary\" @click=\"addAnalyzeResult\">添加</el-button>\r\n      </div>\r\n    </template>\r\n  </el-dialog>\r\n</template>\r\n<script>\r\nimport _ from \"lodash\"\r\nimport Designer from \"../designer\"\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport YvDesignInputExpress from \"./yv-design-input-express.vue\"\r\nimport {getTableByName, renderIcon} from \"../../../utils\";\r\nimport {TableSchemaType} from \"../../../constant\";\r\nimport {createUUID} from \"../../raw/utils\";\r\nimport Markdown from 'vue3-markdown-it'\r\n\r\nexport default {\r\n  components: {YvDesignInputExpress, Markdown},\r\n  props: {\r\n    formData: Object,\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    const uid = createUUID()\r\n    return {\r\n      rules: [],\r\n      dataType: -1,\r\n      dataSQL: \"\",\r\n      dataSQLByUrl: \"\",\r\n      showModule: false,\r\n      showModuleByUrl: false,\r\n      showAnalyzerResults: false,\r\n      dataSourceOfUrl: '',\r\n      dataSourceOfSql: '',\r\n      dataSourceParams: [],\r\n      analyzeTree: {\r\n        checkedKeys: [],\r\n        loading: false,\r\n        treeData: [],\r\n        defaultProps: {},\r\n        nodeKey: undefined\r\n      },\r\n      queryStr: '',\r\n      uid,\r\n      markdownSource: '# sql辅助',\r\n      aiMessages: ['# sql辅助']\r\n    }\r\n  },\r\n  watch: {\r\n    aiMessages: {\r\n      deep: true,\r\n      handler(newVal, oldVal) {\r\n        this.aiMessages = newVal\r\n        this.markdownSource = this.aiMessages.join(\"\\n\")\r\n      }\r\n    },\r\n    'formData': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.dataType = -1\r\n        /**\r\n         * SQL 模式\r\n         * dataType = 3\r\n         * dataSource: {\r\n         *   method: 'invoke',\r\n         *   sqlId: 'queryAllCustom',\r\n         *   params: {\r\n         *     ...\r\n         *   }\r\n         * }\r\n         *\r\n         * URL 模式\r\n         * dataType = 2\r\n         * dataSource: {\r\n         *   method: 'invoke',\r\n         *   url: '/a/b/c',\r\n         *   params: {\r\n         *     ...\r\n         *   }\r\n         * }\r\n         */\r\n        if (typeof newVal.dataSource === 'object') {\r\n          if (typeof newVal.dataSource.url === 'string') {\r\n            this.dataType = 2\r\n            this.dataSourceOfUrl = newVal.dataSource.url\r\n\r\n          } else if (typeof newVal.dataSource.sqlId === 'string') {\r\n            this.dataType = 3\r\n            this.dataSourceOfSql = newVal.dataSource.sqlId\r\n          }\r\n        }\r\n        const params = this.formData.dataSource?.params\r\n        const dataSourceParams = []\r\n\r\n        const deepTrav = (obj, key) => {\r\n          _.forOwn(obj, (targetExpress, subKey) => {\r\n            let allKey\r\n            if (key) {\r\n              allKey = key + \".\" + subKey\r\n            } else {\r\n              allKey = subKey\r\n            }\r\n            if (typeof targetExpress === 'string') {\r\n              let expr = targetExpress\r\n              let watch = false\r\n              let required = false\r\n\r\n              if (expr.startsWith('watch:')) {\r\n                expr = expr.substring(6)\r\n                watch = true\r\n              }\r\n              if (expr.endsWith(':required')) {\r\n                expr = expr.substring(0, expr.length - 9)\r\n                required = true\r\n              }\r\n\r\n              dataSourceParams.push({\r\n                key: allKey,\r\n                targetExpress: expr,\r\n                watch,\r\n                required,\r\n              })\r\n\r\n            } else if (typeof targetExpress === 'object') {\r\n              deepTrav(targetExpress, allKey)\r\n            }\r\n          })\r\n        }\r\n        deepTrav(params)\r\n        this.dataSourceParams = dataSourceParams\r\n      }\r\n    },\r\n    dataSourceParams: {\r\n      // immediate: true,\r\n      deep: true,\r\n      handler(newVal, oldVal) {\r\n        if (newVal) {\r\n          if (!this.formData.dataSource) {\r\n            this.formData.dataSource = {}\r\n          }\r\n\r\n          const a = {}\r\n          _.forEach(newVal, (item, index) => {\r\n            if (item.key) {\r\n              let expr = item.targetExpress\r\n\r\n              if (item.watch) {\r\n                expr = 'watch:' + expr\r\n              }\r\n              if (item.required) {\r\n                expr = expr + ':required'\r\n              }\r\n              _.set(a, item.key, expr)\r\n            }\r\n          })\r\n          this.formData.dataSource.params = a\r\n        }\r\n      }\r\n    },\r\n    dataSourceOfUrl: {\r\n      handler(newVal) {\r\n        /**\r\n         * dataSource: {\r\n         *   method: 'invoke',\r\n         *   url: '/a/b/c',\r\n         *   params: {\r\n         *     ...\r\n         *   }\r\n         * }\r\n         */\r\n        if (!this.formData.dataSource) {\r\n          this.formData.dataSource = {}\r\n        }\r\n        if (newVal) {\r\n          _.extend(this.formData.dataSource, {\r\n            method: 'invoke',\r\n            url: newVal\r\n          })\r\n\r\n          delete this.formData.dataSource.sqlId\r\n        }\r\n      }\r\n    },\r\n    dataSourceOfSql: {\r\n      handler(newVal) {\r\n        if (!this.formData.dataSource) {\r\n          this.formData.dataSource = {}\r\n        }\r\n        if (newVal) {\r\n          /**\r\n           * dataSource: {\r\n           *   method: 'invoke',\r\n           *   sqlId: '/a/b/c',\r\n           *   params: {\r\n           *     ...\r\n           *   }\r\n           * }\r\n           */\r\n          _.extend(this.formData.dataSource, {\r\n            method: 'invoke',\r\n            sqlId: newVal\r\n          })\r\n\r\n          delete this.formData.dataSource.url\r\n        }\r\n      }\r\n    },\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    setDataTypeForUrl() {\r\n      this.dataType = 2\r\n      if (!this.formData.dataSource) {\r\n        this.formData.dataSource = {}\r\n      }\r\n      this.formData.dataSource.url = ''\r\n      delete this.formData.dataSource.sqlId\r\n    },\r\n    setDataTypeForSQL() {\r\n      this.dataType = 3\r\n      if (!this.formData.dataSource) {\r\n        this.formData.dataSource = {}\r\n      }\r\n      this.formData.dataSource.sqlId = ''\r\n      delete this.formData.dataSource.url\r\n    },\r\n    removeDataSourceParam(button, index) {\r\n      this.dataSourceParams.splice(index, 1)\r\n    },\r\n    changeDataSourceWatch(isWatch, idx) {\r\n      this.dataSourceParams[idx].watch = isWatch\r\n    },\r\n    changeDataSourceRequired(isRequire, idx) {\r\n      this.dataSourceParams[idx].required = isRequire\r\n    },\r\n    addNewDataSourceParam() {\r\n      this.dataSourceParams.push({key: \"\", targetExpress: \"\"})\r\n    },\r\n    clickDataSource() {\r\n      if (!this.formData.dataSource?.sqlId) {\r\n        system.showErrorDialog('没有绑定 sqlID');\r\n        return\r\n      }\r\n\r\n      this.showModule = !this.showModule\r\n      if (this.showModule) {\r\n        system.invokeStudio(\"DesignModuleFile@getModuleSQL\", {absolutePath: this.designer.spaceIdList[this.designer.spaceCurrentIndex] + \".xml\"}).then((res) => {\r\n          if (!res.success) {\r\n            console.error(\"加载字段域数据错误\", res.msg);\r\n            system.showErrorDialog('加载字段域数据错误');\r\n            return;\r\n          }\r\n          let sqlId = this.formData.dataSource.sqlId\r\n          if (sqlId.startsWith(\"@\")) {\r\n            sqlId = sqlId.substring(1)\r\n          }\r\n          this.dataSQL = res.data[sqlId]\r\n        });\r\n      }\r\n    },\r\n    analyzeSql() {\r\n      this.showAnalyzerResults = true\r\n      this.analyzeTree.loading = true\r\n      system.invokeStudio(\"FileManager@parseDynamicSql\", {sql: this.dataSQL}).then((res) => {\r\n        console.log(res)\r\n\r\n        // columnName: \"convert_id\"\r\n        // tableName: \"dev_convert\"\r\n        // _.map(res.data)\r\n        // getTableByName()\r\n        const tableMapFieldList = {}\r\n        const tableMapMeta = {}\r\n\r\n        _.forEach(res.data, item => {\r\n          const tableName = item.tableName ? item.tableName : \"NULL\"\r\n          if (!tableMapFieldList[tableName]) {\r\n            tableMapFieldList[tableName] = []\r\n            if (item.tableName) {\r\n              tableMapMeta[tableName] = getTableByName(item.tableName)\r\n            }\r\n          }\r\n          tableMapFieldList[tableName].push(item.columnName)\r\n        })\r\n\r\n        const treeData = []\r\n        const checkedKeys = []\r\n        const existColumns = this.formData.columns ?? []\r\n        console.log('existColumns', existColumns)\r\n        _.forOwn(tableMapFieldList, (fieldList, tableName) => {\r\n          const tableNode = {\r\n            id: tableName,\r\n            label: tableName,\r\n            schema_type: TableSchemaType.TABLE,\r\n            children: []\r\n          }\r\n          const tableMeta = tableMapMeta[tableName]\r\n          if (tableMeta) {\r\n            tableNode.label = tableMeta.table_name + ' ' + tableMeta.description\r\n            tableNode.children = _.map(fieldList, field => {\r\n              const columnMeta = _.find(tableMeta.column_list, column => column.column_name === field)\r\n              return {\r\n                id: tableName + '_' + field,\r\n                label: field,\r\n                schema_type: TableSchemaType.COLUMN,\r\n                ...columnMeta\r\n              }\r\n            })\r\n          } else {\r\n            tableNode.children = _.map(fieldList, field => {\r\n              return {\r\n                id: tableName + '_' + field,\r\n                label: field,\r\n                schema_type: TableSchemaType.COLUMN,\r\n              }\r\n            })\r\n          }\r\n\r\n          _.forEach(tableNode.children, childNode => {\r\n            if (_.find(existColumns, column => column.dataIndex === childNode.label)) {\r\n              checkedKeys.push(childNode.id)\r\n            }\r\n          })\r\n\r\n          treeData.push(tableNode);\r\n        })\r\n\r\n        this.analyzeTree.checkedKeys = checkedKeys\r\n        this.analyzeTree.treeData = treeData\r\n        this.$nextTick(() => {\r\n          this.$refs.analyzeTree.setCheckedKeys(checkedKeys)\r\n        })\r\n\r\n      }).catch((e) => {\r\n        system.showErrorDialog(!!e.response?.data?.msg ? e.response.data.msg : '解析失败!');\r\n\r\n      }).finally(() => {\r\n        this.analyzeTree.loading = false\r\n      })\r\n    },\r\n    addAnalyzeResult() {\r\n      const nodes = this.$refs.analyzeTree.getCheckedNodes()\r\n      const existColumns = this.formData.columns ?? []\r\n      let c = 0\r\n      _.forEach(nodes, (node) => {\r\n        if (node.schema_type === TableSchemaType.COLUMN) {\r\n          if (!_.find(existColumns, column => column.dataIndex === node.label)) {\r\n            const column = {\r\n              id: _.uniqueId(),\r\n              xtype: \"aggridcolumn\",\r\n              dataIndex: node.label,\r\n              header: node.column_comment\r\n            }\r\n            this.formData.columns.push(column)\r\n            c++\r\n          }\r\n        }\r\n      })\r\n\r\n      // 关闭对话框\r\n      this.showAnalyzerResults = false\r\n      if (c > 0) {\r\n        system.msg(`成功添加 ${c} 个字段`)\r\n      } else {\r\n        system.msg(`没有需要添加的字段`)\r\n      }\r\n    },\r\n    submitDataSource() {\r\n      let sqlId = this.dataSourceOfSql\r\n      if (sqlId.startsWith(\"@\")) {\r\n        sqlId = sqlId.substring(1)\r\n      }\r\n      system.invokeStudio(\"DesignModuleFile@setModuleSQL\", {\r\n        absolutePath: this.designer.spaceIdList[this.designer.spaceCurrentIndex] + \".xml\",\r\n        sqlId,\r\n        sql: this.dataSQL\r\n      }).then((res) => {\r\n        if (!res.success) {\r\n          system.showErrorDialog('保存失败');\r\n          return;\r\n        }\r\n        system.msg('保存成功');\r\n      });\r\n    },\r\n    clickDataSourceByUrl() {\r\n      if (!this.formData.dataSource?.url) {\r\n        system.showErrorDialog('未设置URL');\r\n        return\r\n      }\r\n      const url = this.formData.dataSource?.url || \"\"\r\n      // const path = url.split(\"@\")[0]\r\n      const sqlId = url.split(\"@\")[1]\r\n      // console.log(\"--->\", sqlId, path)\r\n      // console.log(\"--->\", this.designer)\r\n      system.invokeStudio(\"DesignModuleFile@getModuleSQL\", {\r\n        absolutePath: this.designer.spaceIdList[this.designer.spaceCurrentIndex] + \".xml\",\r\n      }).then((res) => {\r\n        if (!res.success) {\r\n          console.error(\"加载字段域数据错误\", res.msg);\r\n          system.showErrorDialog('加载字段域数据错误');\r\n          return;\r\n        }\r\n        this.dataSQLByUrl = res.data[sqlId] || \"\"\r\n        this.showModuleByUrl = true;\r\n      });\r\n    },\r\n    submitDataSourceByUrl() {\r\n      const url = this.formData.dataSource?.url || \"\"\r\n      const sqlId = url.split(\"@\")[1]\r\n      system.invokeStudio(\"DesignModuleFile@setModuleSQL\", {\r\n        absolutePath: this.designer.spaceIdList[this.designer.spaceCurrentIndex] + \".xml\",\r\n        sqlId,\r\n        sql: this.dataSQLByUrl\r\n      }).then((res) => {\r\n        if (!res.success) {\r\n          system.showErrorDialog('保存失败');\r\n          return;\r\n        }\r\n        system.msg('保存成功');\r\n      });\r\n    },\r\n    isDatabaseNode(node) {\r\n      return node.data.schema_type === TableSchemaType.DATABASE;\r\n    },\r\n    isTableNode(node) {\r\n      return node.data.schema_type === TableSchemaType.TABLE;\r\n    },\r\n    isColumnNode(node) {\r\n      return node.data.schema_type === TableSchemaType.COLUMN;\r\n    },\r\n    isPrimaryKey(node) {\r\n      return node.data.is_primary_key;\r\n    },\r\n    isNotNull(node) {\r\n      return node.data.not_null;\r\n    },\r\n    hasDescription(node) {\r\n      return !!node.data.description;\r\n    },\r\n    hasComment(node) {\r\n      return !!node.data.column_comment;\r\n    },\r\n    initAi() {\r\n      this.uid = createUUID()\r\n      this.aiMessages = []\r\n    },\r\n    queryClick() {\r\n      const me = this\r\n      this.aiMessages.push(\"### \")\r\n      // let aiMessage = this.aiMessages[this.aiMessages.length - 1]\r\n\r\n      const source = new SSE('http://127.0.0.1:8084/studio/ai/sseSqlHelper',\r\n          {\r\n            headers: {\r\n              'Content-Type': 'application/json; charset=utf-8',\r\n            },\r\n            payload: `{\"uid\":\"${me.uid}\",\"msg\": \"${me.queryStr}\"}`\r\n          });\r\n\r\n      source.addEventListener('message', (e)=> {\r\n        // Assuming we receive JSON-encoded data payloads:\r\n        if (e.data === \"[DONE]\") {\r\n          source.close()\r\n        } else {\r\n          const payload = JSON.parse(e.data);\r\n          // itemRes.id = payload.r\r\n          // console.log(payload.content)\r\n          if (payload.content) {\r\n            this.aiMessages[this.aiMessages.length - 1] += payload.content\r\n          }\r\n\r\n          // itemRes.text += payload.content\r\n        }\r\n\r\n      });\r\n      source.stream();\r\n    },\r\n  }\r\n}\r\n</script>","<template>\r\n  <div class=\"property tabs-property\">\r\n    <div class=\"title\">treefield 属性</div>\r\n    <el-tabs>\r\n      <el-tab-pane label=\"基础\">\r\n        <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n                 size=\"default\" @submit.native.prevent>\r\n          <el-form-item label=\"reference\" prop=\"reference\">\r\n            <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"modal\" prop=\"bindValue\">\r\n            <el-input v-model=\"bindValue\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"uiKey\" prop=\"uiKey\">\r\n            <el-input v-model=\"formData.uiKey\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"权限\" prop=\"permissions\">\r\n            <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <el-form-item label=\"隐藏\" prop=\"hidden\">\r\n            <el-switch v-model=\"formData.hidden\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"标签名\" prop=\"fieldLabel\">\r\n            <el-input v-model=\"formData.fieldLabel\" type=\"text\"></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"必填\" prop=\"required\">\r\n            <el-switch v-model=\"formData.required\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"宽度权重\" prop=\"weight\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"(formData.weight === 1 || !formData.weight)? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=1\">1\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 2? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=2\">2\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 3? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=3\">3\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 4? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=4\">4\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 5? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=5\">5\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 6? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=6\">6\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"标签宽度\" prop=\"formData.text\">\r\n            <el-input v-model=\"formData.labelWidth\" type=\"text\" placeholder=\"auto\"></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"尺寸\" prop=\"size\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.size === 'large'? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='large'\">大\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"(formData.size === 'default' || !formData.size)? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='default'\">中\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.size === 'small'? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='small'\">小\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"占位字符\" prop=\"placeholder\">\r\n            <el-input v-model=\"formData.placeholder\" type=\"text\"></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"禁用\" prop=\"disabled\">\r\n            <el-switch v-model=\"formData.disabled\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"只读\" prop=\"readonly\">\r\n            <el-switch v-model=\"formData.readonly\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"多选\" prop=\"multiple\">\r\n            <el-switch v-model=\"formData.multiple\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"可选任意节点\" prop=\"checkStrictly\" label-width=\"100px\">\r\n            <el-switch v-model=\"formData.checkStrictly\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"勾选框\" prop=\"showCheckbox\">\r\n            <el-switch v-model=\"formData.showCheckbox\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"允许过滤\" prop=\"filterable\">\r\n            <el-switch v-model=\"formData.filterable\"></el-switch>\r\n          </el-form-item>\r\n          <yv-design-input-width :designer=\"designer\" :form-data=\"formData\"/>\r\n        </el-form>\r\n      </el-tab-pane>\r\n      <YvDesignDatasource :formData=\"formData\" :designer=\"designer\" :vjson=\"vjson\" :vcxt=\"vcxt\">\r\n        <el-divider>字段</el-divider>\r\n        <el-form-item label=\"ID字段\">\r\n          <el-input v-model=\"dataSource.idField\" type=\"text\" clearable></el-input>\r\n        </el-form-item>\r\n        <el-form-item label=\"父级字段\">\r\n          <el-input v-model=\"dataSource.parentField\" type=\"text\" clearable></el-input>\r\n        </el-form-item>\r\n        <el-form-item label=\"显示字段\">\r\n          <el-input v-model=\"dataSource.textField\" type=\"text\" clearable></el-input>\r\n        </el-form-item>\r\n      </YvDesignDatasource>\r\n    </el-tabs>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from \"lodash\"\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport {dict} from \"../../../store\"\r\nimport YvDesignInputWidth from \"./yv-design-input-width.vue\"\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\nimport YvDesignDatasource from \"./yv-design-datasource.vue\";\r\n\r\nexport default {\r\n  components: {YvDesignInputWidth, YvDesignerPermissions, YvDesignDatasource},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    const dictData = []\r\n    _.forEach(dict.value, item => {\r\n      // console.log(item)\r\n      dictData.push({code: item.code, desc: item.desc})\r\n    })\r\n    const previewDictListItems = [];\r\n    const dictObj = dict.value[this.vjson.dataDict];\r\n    if (this.vjson.dataDict && dictObj) {\r\n      _.forEach(dictObj.items, value => {\r\n        previewDictListItems.push({...value, text: value.dictText, id: value.dictCode ?? value.dictValue});\r\n      });\r\n    }\r\n    // console.log(\"##\", previewDictListItems)\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      dict: dictData,\r\n      previewDictListItems: previewDictListItems,\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        fieldLabel: this.vjson.fieldLabel,\r\n        labelWidth: this.vjson.labelWidth,\r\n        required: this.vjson.required ?? false,\r\n        showMessage: this.vjson.showMessage ?? true,\r\n        inlineMessage: this.vjson.inlineMessage ?? false,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        placeholder: this.vjson.placeholder,\r\n        readonly: this.vjson.readonly ?? false,\r\n        weight: this.vjson.weight,\r\n        bind: this.vjson.bind,\r\n        multiple: this.vjson.multiple,\r\n        collapseTags: this.vjson.collapseTags,\r\n        collapseTagsTooltip: this.vjson.collapseTagsTooltip,\r\n        filterable: this.vjson.filterable,\r\n        allowCreate: this.vjson.allowCreate,\r\n        defaultFirstOption: this.vjson.defaultFirstOption,\r\n        dataType: this.vjson.dataType,\r\n        dataEnum: this.vjson.dataEnum,\r\n        dataDict: this.vjson.dataDict,\r\n      },\r\n    }\r\n  },\r\n  methods: {\r\n    dataDictChange(code) {\r\n      this.previewDictListItems = []\r\n      const dictObj = dict.value[code];\r\n      if (!dictObj) {\r\n        return\r\n      }\r\n      _.forEach(dictObj.items, value => {\r\n        this.previewDictListItems.push({...value, text: value.dictText, id: value.dictValue});\r\n      });\r\n      // console.log(\"##@@@\",dictObj, this.previewDictListItems)\r\n    },\r\n    addNewItem() {\r\n      if (!this.formData.dataEnum) {\r\n        this.formData.dataEnum = []\r\n      }\r\n      this.formData.dataEnum.push({id: \"\", text: \"\"})\r\n    },\r\n    _dictItemDisabled(item) {\r\n      if (!this.formData.disabledDictItems) {\r\n        return false\r\n      }\r\n      return this.formData.disabledDictItems.includes(item.id)\r\n    },\r\n    _onDictItemDisabledChanged(item, isDisable) {\r\n      if (!this.formData.disabledDictItems) {\r\n        this.formData.disabledDictItems = []\r\n      }\r\n      if (isDisable) {\r\n        this.formData.disabledDictItems.push(item.id)\r\n      } else {\r\n        this.formData.disabledDictItems = this.formData.disabledDictItems.filter(id => id !== item.id);\r\n      }\r\n    },\r\n    removeItem(idx) {\r\n      this.formData.dataEnum.splice(idx, 1)\r\n    }\r\n  },\r\n  computed: {\r\n    dataSource() {\r\n      return this.formData.dataSource ?? {}\r\n    }\r\n  },\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    },\r\n\r\n    // 'formData.dataDict': {\r\n    //   immediate: true,\r\n    //   handler(newVal, oldVal) {\r\n    //     if (newVal && this.formData.dataType === 2) {\r\n    //       this.previewDictListItems = window['DICT_CACHE'][newVal]\r\n    //     } else {\r\n    //       this.previewDictListItems = []\r\n    //     }\r\n    //   }\r\n    // },\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.property.tabs-property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  .el-tabs {\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n\r\n    .el-tabs__header {\r\n      .el-tabs__item {\r\n        padding: 0 10px;\r\n      }\r\n\r\n      .el-tabs__item.is-active, .el-tabs__item:hover {\r\n        color: #000;\r\n      }\r\n\r\n      .el-tabs__active-bar {\r\n        background-color: var(--main-color)\r\n      }\r\n    }\r\n\r\n    .el-tabs__content {\r\n      flex: 1;\r\n      overflow: auto;\r\n\r\n      .enumeration-title {\r\n        color: #333;\r\n        font-size: 14px;\r\n        margin-bottom: 5px;\r\n      }\r\n\r\n      .enumeration {\r\n        margin-bottom: 5px;\r\n        display: flex;\r\n        flex-direction: row;\r\n\r\n        .enumeration-col {\r\n          &:nth-child(1), &:nth-child(2) {\r\n            flex: 1;\r\n            padding-right: 3px;\r\n          }\r\n\r\n          &:nth-child(3) {\r\n            line-height: 32px;\r\n\r\n            span:nth-child(1) {\r\n              cursor: pointer;\r\n              margin: 0 5px\r\n            }\r\n\r\n            span:nth-child(2) {\r\n              cursor: move;\r\n              margin-right: 5px;\r\n              font-size: 20px;\r\n              position: relative;\r\n              top: 1px\r\n            }\r\n          }\r\n\r\n          .el-input__wrapper {\r\n            border-radius: 0;\r\n          }\r\n        }\r\n      }\r\n\r\n      .enumeration-add-btn {\r\n        color: var(--main-color)\r\n      }\r\n    }\r\n  }\r\n\r\n  form {\r\n    overflow-x: hidden;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <yv-design-form-item :designer=\"designer\" :vjson=\"vjson\" :vcxt=\"vcxt\"\r\n                       :parent-component=\"parentComponent\" :parent-list=\"parentList\"\r\n                       :index-of-parent-list=\"indexOfParentList\"\r\n                       @selectme.native=\"_selectMe\"\r\n                       @click.stop=\"_selectMe\"\r\n                       class=\"yv-treefield\">\r\n    <el-tree-select :disabled=\"vjson.disabled\" :readOnly=\"true\"\r\n                    ref=\"_inner\"\r\n                    :size=\"vjson.size\" class=\"hide-spin-button\"\r\n                    :placeholder=\"vjson.placeholder\"\r\n                    @click.stop=\"_selectMe\">\r\n    </el-tree-select>\r\n  </yv-design-form-item>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignFormItem from './yv-design-form-item.vue'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonTreefield from \"../../vjson/yv-vjson-treefield.vue\"\r\nimport YvDesignTreefieldProp from \"./yv-design-treefield-prop.vue\"\r\nimport {Search} from '@element-plus/icons-vue'\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n    YvDesignFormItem, Search\r\n  },\r\n  data() {\r\n    return {\r\n      oldFieldValue: null, //field组件change之前的值\r\n      fieldModel: '',\r\n    }\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('treefield')\r\n    desc.setRuntime('YvVjsonTreefield', YvVjsonTreefield)\r\n    desc.setDesign('YvDesignTreefield', this)\r\n    desc.setProp('YvDesignTreefieldProp', YvDesignTreefieldProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'treefield',\r\n        vjson.fieldLabel,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'fieldLabel', desc: '标签名', bindable: true},\r\n      {name: 'placeholder', desc: '占位符', bindable: true},\r\n      {name: 'disabled', desc: '禁用', bindable: true},\r\n      {name: 'readonly', desc: '只读', bindable: true},\r\n      {name: 'hidden', desc: '隐藏', bindable: true},\r\n      {name: 'size', desc: '大小', bindable: true},\r\n      {name: 'minLength', desc: '最小长度', bindable: true},\r\n      {name: 'maxLength', desc: '最大长度', bindable: true},\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'focus', desc: '获取焦点时触发', events: [{name: 'e'}]},\r\n      {name: 'blur', desc: '失去焦点触发', events: [{name: 'e'}]},\r\n      {name: 'change', desc: '更改时触发', events: [{name: 'e'}]},\r\n      {name: 'input', desc: '输入时触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>","<template>\r\n  <el-divider v-if=\"!hidden\"\r\n              :border-style=\"borderStyle??'solid'\"\r\n              :content-position=\"contentPosition??'center'\"\r\n              :class=\"['yv-titlefield', calcClass]\"\r\n              @mousedown.stop=\"_onClick\">\r\n    {{ content }}\r\n  </el-divider>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {Divider} from './Defaults'\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Divider)\r\n\r\n    return {\r\n      hidden: vjson.hidden,\r\n      borderStyle: vjson.borderStyle,\r\n      contentPosition: vjson.contentPosition,\r\n      content: vjson.content,\r\n    }\r\n  },\r\n  computed: {},\r\n  methods: {\r\n    startsWith: _.startsWith,\r\n    _onClick(evt) {\r\n      debugger\r\n      this.runEvent('click', ...arguments)\r\n      // getListener(this.vjson, 'click', this.vcxt)(this, this.vcxt.scope)\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style>\r\n.el-row .yv-titlefield {\r\n  margin: 0 0 25px 0\r\n}\r\n</style>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">titlefield 属性</div>\r\n    <el-form :model=\"formData\" :rules=\"rules\" label-position=\"right\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"uiKey\" prop=\"uiKey\">\r\n        <el-input v-model=\"formData.uiKey\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"文本\" prop=\"formData.content\">\r\n        <el-input v-model=\"formData.content\" type=\"content\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"线条\" prop=\"formData.borderStyle\">\r\n        <el-select v-model=\"formData.borderStyle\" class=\"full-width-input\" clearable>\r\n          <el-option value=\"solid\" label=\"线条\"/>\r\n          <el-option value=\"dotted\" label=\"虚线\"/>\r\n          <el-option value=\"none\" label=\"无\"/>\r\n          <el-option value=\"info\" label=\"信息\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <el-form-item label=\"对齐\" prop=\"formData.contentPosition\">\r\n        <el-select v-model=\"formData.contentPosition\" class=\"full-width-input\" clearable>\r\n          <el-option value=\"left\" label=\"左\"/>\r\n          <el-option value=\"right\" label=\"右\"/>\r\n          <el-option value=\"center\" label=\"居中\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <el-form-item label=\"隐藏\" prop=\"formData.hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {toRaw} from 'vue'\r\nimport VJsonContext from \"../../vjson/VJsonContext\";\r\nimport Designer from \"../designer\";\r\nimport basePropMix from \"./basePropMix\";\r\n\r\nexport default {\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        text: this.vjson.text,\r\n        type: this.vjson.type,\r\n        plain: this.vjson.plain ?? false,\r\n        round: this.vjson.round ?? false,\r\n        circle: this.vjson.circle ?? false,\r\n        link: this.vjson.link ?? false,\r\n        iconCls: this.vjson.iconCls,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        loading: this.vjson.loading ?? false,\r\n        bind: this.vjson.bind\r\n      },\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.property{\r\n  height: 100%;\r\n  width:100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n  .title{\r\n    width:100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n  form{\r\n    flex:1;\r\n    overflow: auto;\r\n    .el-divider--horizontal{\r\n      margin:10px 0;\r\n    }\r\n    .el-form-item{\r\n      padding-right: 10px;\r\n    }\r\n    .el-form-item--default{\r\n      margin-bottom:5px;\r\n      .el-input__wrapper{\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <el-divider :id=\"vjson.id\"\r\n              :key=\"vjson.id\"\r\n              :direction=\"vjson.direction??'horizontal'\"\r\n              :border-style=\"vjson.borderStyle??'solid'\"\r\n              :content-position=\"vjson.contentPosition??'center'\"\r\n              :class=\"['yv-divider', customClass]\"\r\n              @selectme.native=\"_selectMe\"\r\n              @click.stop=\"_selectMe\">\r\n    {{ vjson.content }}\r\n  </el-divider>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonTitlefield from \"../../vjson/yv-vjson-titlefield.vue\"\r\nimport YvDesignTitlefieldProp from \"./yv-design-titlefield-prop.vue\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n  },\r\n  data() {\r\n    return {\r\n      oldFieldValue: null, //field组件change之前的值\r\n      fieldModel: '',\r\n    }\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('titlefield')\r\n    desc.setRuntime('YvVjsonTitlefield', YvVjsonTitlefield)\r\n    desc.setDesign('YvDesignTitlefield', this)\r\n    desc.setProp('YvDesignTitlefieldProp', YvDesignTitlefieldProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'text',\r\n        vjson.fieldLabel,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'fieldLabel', desc: '标签名', bindable: true},\r\n      {name: 'placeholder', desc: '占位符', bindable: true},\r\n      {name: 'disabled', desc: '禁用', bindable: true},\r\n      {name: 'readonly', desc: '只读', bindable: true},\r\n      {name: 'hidden', desc: '隐藏', bindable: true},\r\n      {name: 'size', desc: '大小', bindable: true},\r\n      {name: 'minLength', desc: '最小长度', bindable: true},\r\n      {name: 'maxLength', desc: '最大长度', bindable: true},\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'focus', desc: '获取焦点时触发', events: [{name: 'e'}]},\r\n      {name: 'blur', desc: '失去焦点触发', events: [{name: 'e'}]},\r\n      {name: 'change', desc: '更改时触发', events: [{name: 'e'}]},\r\n      {name: 'input', desc: '输入时触发', events: [{name: 'e'}]},\r\n      {name: 'scancode', desc: '扫码枪读码后触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>","<template>\r\n  <yv-vjson-form-item v-if=\"!hidden\"\r\n                      ref=\"_formItem\"\r\n                      :vjson=\"vjson\"\r\n                      :vcxt=\"vcxt\"\r\n                      :rules=\"rules\"\r\n                      :dialog-scope=\"dialogScope\"\r\n                      :parentComponent=\"parentComponent\"\r\n                      :parentList=\"parentList\"\r\n                      :indexOfParentList=\"indexOfParentList\"\r\n                      class=\"yv-staticfield\">\r\n    <div :style=\"calcStyleContent\" class=\"yv-form-content\">{{ computText }}</div>\r\n  </yv-vjson-form-item>\r\n</template>\r\n\r\n<script>\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport _ from \"lodash\"\r\nimport {Staticfield} from \"./Defaults\"\r\nimport YvVjsonFormItem from \"./yv-vjson-form-item.vue\"\r\nimport {calcStyleContent, evalGetBind} from \"../yv-utils\";\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  components: {YvVjsonFormItem},\r\n\r\n  data() {\r\n    const data = _.defaults(this.vjson, Staticfield)\r\n    const rules = this._getFormItemBaseRule(data)\r\n\r\n    return {\r\n      fieldLabel: data.fieldLabel,\r\n      rules: rules,\r\n      labelWidth: data.labelWidth,\r\n      text: data.text,\r\n      bind: data.bind\r\n    }\r\n  },\r\n  mounted() {\r\n  },\r\n  unmounted() {\r\n  },\r\n  computed: {\r\n    computText() {\r\n      let bindValue = this.bind?.value\r\n      const text = this.text\r\n      if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n        return evalGetBind(this, 'value')\r\n      }\r\n      return text\r\n    },\r\n    calcStyleContent() {\r\n      return calcStyleContent(this.vjson)\r\n    },\r\n  },\r\n  watch: {\r\n    fieldLabel: {\r\n      handler(newVal) {\r\n        this.$refs._formItem.fieldLabel = newVal\r\n      }\r\n    },\r\n    labelWidth: {\r\n      handler(newVal) {\r\n        this.vjson.labelWidth = newVal\r\n      }\r\n    },\r\n    labelAlign: {\r\n      handler(newVal) {\r\n        this.vjson.labelAlign = newVal\r\n      }\r\n    },\r\n  },\r\n  methods: {}\r\n}\r\n</script>\r\n<style>\r\n.yv-form-content {\r\n  width: 100%;\r\n  height: 100%;\r\n  border-radius: 3px;\r\n}\r\n</style>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">staticfield 属性</div>\r\n    <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"modal\" prop=\"bindValue\">\r\n        <el-input v-model=\"bindValue\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"uiKey\" prop=\"uiKey\">\r\n        <el-input v-model=\"formData.uiKey\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"权限\" prop=\"permissions\">\r\n        <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"隐藏\" prop=\"hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"标签名\" prop=\"fieldLabel\">\r\n        <el-input v-model=\"formData.fieldLabel\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"内容\" prop=\"text\">\r\n        <el-input v-model=\"formData.text\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"宽度权重\" prop=\"weight\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"(formData.weight === 1 || !formData.weight)? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=1\">1\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 2? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=2\">2\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 3? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=3\">3\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 4? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=4\">4\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 5? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=5\">5\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 6? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=6\">6\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"标签宽度\" prop=\"formData.text\">\r\n        <el-input v-model=\"formData.labelWidth\" type=\"text\" placeholder=\"auto\"></el-input>\r\n      </el-form-item>\r\n      <yv-design-input-width :designer=\"designer\" :form-data=\"formData\"/>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignInputWidth from \"./yv-design-input-width.vue\"\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  components: {YvDesignInputWidth, YvDesignerPermissions},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        fieldLabel: this.vjson.fieldLabel,\r\n        labelWidth: this.vjson.labelWidth,\r\n        hidden: this.vjson.hidden ?? false,\r\n        weight: this.vjson.weight,\r\n        bind: this.vjson.bind\r\n      }\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <yv-design-form-item :designer=\"designer\" :vjson=\"vjson\" :vcxt=\"vcxt\"\r\n                       :parent-component=\"parentComponent\" :parent-list=\"parentList\"\r\n                       :index-of-parent-list=\"indexOfParentList\"\r\n                       :class=\"[calcClass, 'yv-staticfield']\"\r\n                       :style=\"calcStyle\"\r\n                       @selectme.native=\"_selectMe\"\r\n                       @click.stop=\"_selectMe\">\r\n    <div :style=\"calcStyleContent\"  class=\"yv-form-content\">{{ vjson.text }}</div>\r\n  </yv-design-form-item>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignFormItem from './yv-design-form-item.vue'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonStaticfield from \"../../vjson/yv-vjson-staticfield.vue\"\r\nimport YvDesignStaticfieldProp from \"./yv-design-staticfield-prop.vue\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n    YvDesignFormItem,\r\n  },\r\n  data() {\r\n    return {}\r\n  },\r\n  beforeCreate() {\r\n    /* 这里不能访问方法和属性！！ */\r\n  },\r\n\r\n  mounted() {\r\n    // this.handleOnMounted()\r\n  },\r\n\r\n  beforeUnmount() {\r\n    // this.unregisterFromRefList()\r\n  },\r\n  methods: {},\r\n\r\n  install(Vue) {\r\n    const desc = registeComponent('staticfield')\r\n    desc.setRuntime('YvVjsonStaticfield', YvVjsonStaticfield)\r\n    desc.setDesign('YvDesignStaticfield', this)\r\n    desc.setProp('YvDesignStaticfieldProp', YvDesignStaticfieldProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'static',\r\n        vjson.fieldLabel,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'fieldLabel', desc: '标签名', bindable: true},\r\n      {name: 'hidden', desc: '隐藏', bindable: true},\r\n      {name: 'text', desc: '内容', bindable: true},\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'change', desc: '更改时触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.yv-design-mode .yv-staticfield > .yv-form-item{\r\n  min-height: 32px;\r\n}\r\n.yv-form-content{\r\n  width: 100%;\r\n  border-radius: 3px;\r\n}\r\n</style>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">alert 属性</div>\r\n    <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"uiBlock\" prop=\"uiBlock\">\r\n        <el-input v-model=\"formData.uiBlock\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"隐藏\" prop=\"hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"显示类型\" prop=\"formData.type\">\r\n        <el-select v-model=\"formData.type\" class=\"full-width-input\" clearable>\r\n          <el-option value=\"success\" label=\"成功\"/>\r\n          <el-option value=\"info\" label=\"信息\"/>\r\n          <el-option value=\"warning\" label=\"警告\"/>\r\n          <el-option value=\"error\" label=\"错误\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <el-form-item label=\"标题\" prop=\"title\">\r\n        <el-input v-model=\"formData.title\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"描述\" prop=\"description\">\r\n        <el-input v-model=\"formData.description\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"显示图标\" prop=\"showIcon\">\r\n        <el-switch v-model=\"formData.showIcon\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"是否居中\" prop=\"center\">\r\n        <el-switch v-model=\"formData.center\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"关闭文本\" prop=\"closeText\">\r\n        <el-input v-model=\"formData.closeText\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"允许关闭\" prop=\"closable\">\r\n        <el-switch v-model=\"formData.closable\"></el-switch>\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport VJsonContext from \"../../vjson/VJsonContext\";\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\";\r\n\r\nexport default {\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        hidden: this.vjson.hidden ?? false,\r\n        type: this.vjson.type,\r\n        title: this.vjson.title,\r\n        description: this.vjson.description,\r\n        showIcon: this.vjson.showIcon,\r\n        bind: this.vjson.bind\r\n      }\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <el-alert v-if=\"!hidden\"\r\n            :class=\"['yv-alert', ...calcClass]\"\r\n            :style=\"calcStyle\"\r\n            :type=\"type\"\r\n            :title=\"title\"\r\n            :description=\"description\"\r\n            :showIcon=\"showIcon\"\r\n            :closable=\"closable\"\r\n            :close-text=\"closeText\"\r\n            :center=\"center\"\r\n            @close=\"_onClose\"\r\n            @mousedown.stop=\"_onClick\"/>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {Alert} from './Defaults'\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Alert)\r\n\r\n    return {\r\n      hidden: vjson.hidden,\r\n      type: vjson.type,\r\n      title: vjson.title,\r\n      description: vjson.description,\r\n      showIcon: vjson.showIcon,\r\n      closable: vjson.closable,\r\n      closeText: vjson.closeText,\r\n      center: vjson.center,\r\n    }\r\n  },\r\n  computed: {},\r\n  methods: {\r\n    _onClose() {\r\n      this.runEvent('close', ...arguments)\r\n    },\r\n    _onClick(evt) {\r\n      this.runEvent('click', ...arguments)\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <el-alert :id=\"vjson.id\"\r\n            :key=\"vjson.id\"\r\n            :type=\"vjson.type ?  vjson.type: 'info'\"\r\n            :title=\"vjson.title ? vjson.title: '请输入标题'\"\r\n            :description=\"vjson.description\"\r\n            :showIcon=\"vjson.showIcon\"\r\n            :closable=\"vjson.closable ?? false\"\r\n            :close-text=\"vjson.closeText\"\r\n            :center=\"vjson.center\"\r\n            :class=\"['yv-alert', customClass]\"\r\n            @click.stop=\"_selectMe\"/>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport YvDesignAlertProp from \"./yv-design-alert-prop.vue\"\r\nimport YvVjsonAlert from \"../../vjson/yv-vjson-alert.vue\"\r\nimport {getDescDefaults, registeComponent} from '../yv-designer-desc'\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  computed: {},\r\n  created() {\r\n  },\r\n  mounted() {\r\n  },\r\n  beforeUnmount() {\r\n  },\r\n  methods: {},\r\n  install(Vue) {\r\n    const desc = registeComponent('alert')\r\n    desc.setRuntime('YvVjsonAlert', YvVjsonAlert)\r\n    desc.setDesign('YvDesignAlert', this)\r\n    desc.setProp('YvDesignAlertProp', YvDesignAlertProp)\r\n\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'click', desc: '点击时触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'type', desc: '类型', bindable: true},\r\n      {name: 'title', desc: '标题', bindable: true},\r\n      {name: 'description', desc: '描述', bindable: true},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.yv-design-mode {\r\n  .yv-alert {\r\n    min-height: 40px;\r\n  }\r\n}\r\n</style>\r\n\r\n","<template>\r\n  <yv-vjson-form-item v-if=\"!hidden\"\r\n                      ref=\"_formItem\"\r\n                      :vjson=\"vjson\"\r\n                      :vcxt=\"vcxt\"\r\n                      :dialog-scope=\"dialogScope\"\r\n                      :parentComponent=\"parentComponent\"\r\n                      :parentList=\"parentList\"\r\n                      :rules=\"rules\"\r\n                      :indexOfParentList=\"indexOfParentList\"\r\n                      class=\"yv-numberfield\">\r\n\r\n    <el-input\r\n        :modelValue=\"realValue\"\r\n        :disabled=\"disabled\" :readonly=\"readonly\"\r\n        :size=\"size\"\r\n        type=\"number\"\r\n        ref=\"_inner\"\r\n        class=\"hide-spin-button\"\r\n        :placeholder=\"placeholder\"\r\n        :clearable=\"clearable??true\"\r\n        :class=\"[calcClass]\"\r\n        :style=\"calcStyle\"\r\n\r\n        @keydown=\"_onKeyDown\"\r\n        @update:modelValue=\"_onValueChange\"\r\n        @focus=\"_onFocus\" @blur=\"_onBlur\"\r\n        @input=\"_onInput\" @change=\"_onChange\"/>\r\n\r\n  </yv-vjson-form-item>\r\n</template>\r\n\r\n<script>\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport _ from \"lodash\"\r\nimport {Numberfield} from \"./Defaults\"\r\nimport YvVjsonFormItem from \"./yv-vjson-form-item.vue\"\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  components: {\r\n    YvVjsonFormItem\r\n  },\r\n  data() {\r\n    const data = _.defaults(this.vjson, Numberfield)\r\n\r\n    const rules = this._getFormItemBaseRule(data)\r\n\r\n    return {\r\n      fieldLabel: data.fieldLabel,\r\n      placeholder: data.placeholder,\r\n      required: data.required,\r\n      disabled: data.disabled,\r\n      size: data.size,\r\n      hidden: data.hidden,\r\n      bind: data.bind,\r\n      readonly: data.readonly,\r\n      clearable: data.clearable ?? true,\r\n      rules: rules,\r\n      min: (typeof data.min === 'number' ? parseInt(data.min) : undefined),\r\n      max: (typeof data.max === 'number' ? parseInt(data.max) : undefined),\r\n      step: data.step,\r\n      stepStrictly: data.stepStrictly,\r\n      precision: data.precision,\r\n      controls: data.controls,\r\n      controlsPosition: data.controlsPosition,\r\n      valueOnClear: data.valueOnClear,\r\n      validateEvent: data.validateEvent,\r\n      labelWidth: data.labelWidth,\r\n    }\r\n  },\r\n  watch: {\r\n    fieldLabel: {\r\n      handler(newVal) {\r\n        this.$refs._formItem.fieldLabel = newVal\r\n      }\r\n    },\r\n    labelWidth: {\r\n      handler(newVal) {\r\n        this.vjson.labelWidth = newVal\r\n      }\r\n    },\r\n    required: {\r\n      handler() {\r\n        this.rules = this._getFormItemBaseRule(this)\r\n        // this.$refs._formItem.required = newVal\r\n      }\r\n    },\r\n  },\r\n  methods: {\r\n    focus(){\r\n      this.$refs._inner.focus()\r\n    },\r\n    _onKeyDown(e) {\r\n      this._keyScan(this, e)\r\n    },\r\n    _keyScan: _.debounce((me, e) => {\r\n      if ([10, 13, 20, 40].includes(e.keyCode)) {\r\n        // 获取读码器读取的内容，最好不要从 viewModel 中取值，而是从 sender.rawValue 中取值\r\n        const value = _.trim(e.target.value)\r\n        const r = me.runEvent('scancode', value, e)\r\n\r\n        if (r === true) {\r\n          // 停止事件的默认处理程序，停止事件的冒泡\r\n          e.preventDefault()\r\n          e.stopPropagation()\r\n        }\r\n      }\r\n\r\n    }, 100),\r\n    _onInput(e) {\r\n      // getListener(this.vjson, 'input', this.vcxt)(this, this.vcxt.scope, e)\r\n      this.runEvent('input', ...arguments)\r\n    },\r\n    _onChange(e) {\r\n      this.runEvent('change', ...arguments)\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">numberfield 属性</div>\r\n    <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"modal\" prop=\"bindValue\">\r\n        <el-input v-model=\"bindValue\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"uiKey\" prop=\"uiKey\">\r\n        <el-input v-model=\"formData.uiKey\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"权限\" prop=\"permissions\">\r\n        <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"隐藏\" prop=\"hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"标签名\" prop=\"fieldLabel\">\r\n        <el-input v-model=\"formData.fieldLabel\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"必填\" prop=\"required\">\r\n        <el-switch v-model=\"formData.required\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"宽度权重\" prop=\"weight\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"(formData.weight === 1 || !formData.weight)? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=1\">1\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 2? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=2\">2\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 3? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=3\">3\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 4? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=4\">4\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 5? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=5\">5\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 6? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=6\">6\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"标签宽度\" prop=\"formData.text\">\r\n        <el-input v-model=\"formData.labelWidth\" type=\"text\" placeholder=\"auto\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"立刻校验\" prop=\"validateOnRuleChange\">\r\n        <el-switch v-model=\"formData.validateOnRuleChange\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"显示错误\" prop=\"showMessage\">\r\n        <el-switch v-model=\"formData.showMessage\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"内联错误\" prop=\"inlineMessage\">\r\n        <el-switch v-model=\"formData.inlineMessage\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"尺寸\" prop=\"size\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"formData.size === 'large'? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='large'\">大\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"(formData.size === 'default' || !formData.size)? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='default'\">中\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.size === 'small'? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='small'\">小\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"占位字符\" prop=\"placeholder\">\r\n        <el-input v-model=\"formData.placeholder\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"禁用\" prop=\"disabled\">\r\n        <el-switch v-model=\"formData.disabled\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"只读\" prop=\"readonly\">\r\n        <el-switch v-model=\"formData.readonly\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"最小值\" prop=\"min\">\r\n        <el-input v-model=\"formData.min\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"最大值\" prop=\"max\">\r\n        <el-input v-model=\"formData.max\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"步进\" prop=\"step\">\r\n        <el-input-number v-model=\"formData.step\" min=0></el-input-number>\r\n      </el-form-item>\r\n      <el-form-item label=\"严格步进\" prop=\"stepStrictly\">\r\n        <el-switch v-model=\"formData.stepStrictly\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"精度\" prop=\"precision\">\r\n        <el-input-number v-model=\"formData.precision\" min=0 step=1 precision=0\r\n                         controls-position=\"right\"></el-input-number>\r\n      </el-form-item>\r\n      <el-form-item label=\"按钮位置\" prop=\"controlsPosition\">\r\n        <el-select v-model=\"formData.controlsPosition\" class=\"full-width-input\" clearable>\r\n          <el-option value=\"\" label=\"默认\"/>\r\n          <el-option value=\"right\" label=\"居右\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <yv-design-input-width :designer=\"designer\" :form-data=\"formData\"/>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignInputWidth from \"./yv-design-input-width.vue\"\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  components: {YvDesignInputWidth, YvDesignerPermissions},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        fieldLabel: this.vjson.fieldLabel,\r\n        labelWidth: this.vjson.labelWidth,\r\n        required: this.vjson.required ?? false,\r\n        showMessage: this.vjson.showMessage ?? true,\r\n        inlineMessage: this.vjson.inlineMessage ?? false,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        placeholder: this.vjson.placeholder,\r\n        maxlength: this.vjson.maxlength,\r\n        showPassword: this.vjson.showPassword,\r\n        readonly: this.vjson.readonly ?? false,\r\n        weight: this.vjson.weight,\r\n        bind: this.vjson.bind,\r\n        min: this.vjson.min,\r\n        max: this.vjson.max,\r\n        step: this.vjson.step,\r\n        stepStrictly: this.vjson.stepStrictly ?? false,\r\n        precision: this.vjson.precision ?? 0,\r\n        controlsPosition: this.vjson.controlsPosition,\r\n      }\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <yv-design-form-item :designer=\"designer\" :vjson=\"vjson\" :vcxt=\"vcxt\"\r\n                       :parent-component=\"parentComponent\" :parent-list=\"parentList\"\r\n                       :index-of-parent-list=\"indexOfParentList\"\r\n                       class=\"yv-numberfield\"\r\n                       @selectme.native=\"_selectMe\"\r\n                       @click.stop=\"_selectMe\">\r\n    <el-input :disabled=\"vjson.disabled\"\r\n              type=\"number\"\r\n              :readonly=\"vjson.readonly\"\r\n              :size=\"vjson.size\" class=\"hide-spin-button\"\r\n              :placeholder=\"vjson.placeholder\"\r\n              @focus=\"handleFocusCustomEvent\" @blur=\"handleBlurCustomEvent\"\r\n              @change=\"handleChangeEvent\">\r\n    </el-input>\r\n  </yv-design-form-item>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignFormItem from './yv-design-form-item.vue'\r\nimport Designer from \"../designer\"\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonNumberfield from \"../../vjson/yv-vjson-numberfield.vue\"\r\nimport YvDesignNumberfieldProp from \"./yv-design-numberfield-prop.vue\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n    YvDesignFormItem,\r\n  },\r\n  data() {\r\n    return {\r\n      oldFieldValue: null, //field组件change之前的值\r\n      fieldModel: '',\r\n    }\r\n  },\r\n\r\n  install(Vue) {\r\n    const desc = registeComponent('numberfield')\r\n    desc.setRuntime('YvVjsonNumberfield', YvVjsonNumberfield)\r\n    desc.setDesign('YvDesignNumberfield', this)\r\n    desc.setProp('YvDesignNumberfieldProp', YvDesignNumberfieldProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'number',\r\n        vjson.fieldLabel,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'required', desc: '必填', bindable: true},\r\n      {name: 'fieldLabel', desc: '标签名', bindable: true},\r\n      {name: 'placeholder', desc: '占位符', bindable: true},\r\n      {name: 'disabled', desc: '禁用', bindable: true},\r\n      {name: 'readonly', desc: '只读', bindable: true},\r\n      {name: 'hidden', desc: '隐藏', bindable: true},\r\n      {name: 'size', desc: '大小', bindable: true},\r\n      {name: 'min', desc: '最小数值', bindable: true},\r\n      {name: 'max', desc: '最大数值', bindable: true},\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'focus', desc: '获取焦点时触发', events: [{name: 'e'}]},\r\n      {name: 'blur', desc: '失去焦点触发', events: [{name: 'e'}]},\r\n      {name: 'change', desc: '更改时触发', events: [{name: 'e'}]},\r\n      {name: 'input', desc: '输入时触发', events: [{name: 'e'}]},\r\n      {name: 'scancode', desc: '扫码枪读码后触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>","<template>\r\n  <yv-vjson-form-item v-if=\"!hidden\"\r\n                      ref=\"_formItem\"\r\n                      :vjson=\"vjson\"\r\n                      :vcxt=\"vcxt\"\r\n                      :dialog-scope=\"dialogScope\"\r\n                      :parentComponent=\"parentComponent\"\r\n                      :parentList=\"parentList\"\r\n                      :rules=\"rules\"\r\n                      :indexOfParentList=\"indexOfParentList\"\r\n                      class=\"yv-filefield\">\r\n    <el-upload ref=\"_inner\"\r\n               :file-list=\"realValue || []\"\r\n               :action=\"action\"\r\n               :method=\"method\"\r\n               :auto-upload=\"autoUpload\"\r\n               :multiple=\"multiple\"\r\n               :show-file-list=\"showFileList\"\r\n               :drag=\"drag\"\r\n               :list-type=\"listType\"\r\n               :accept=\"accept\"\r\n               :disabled=\"disabled\"\r\n               :limit=\"limit\"\r\n               :on-preview=\"_onPreview\"\r\n               :on-remove=\"_onRemove\"\r\n               :on-success=\"_onSuccess\"\r\n               :on-error=\"_onError\"\r\n               :on-progress=\"_onProgress\"\r\n               :on-change=\"_onChange\"\r\n               :on-exceed=\"_onExceed\"\r\n               :before-upload=\"_beforeUpload\"\r\n               :before-remove=\"_beforeRemove\"\r\n               @update:fileList=\"_onValueChange\">\r\n      <template #trigger>\r\n        <el-button type=\"primary\">请选择上传文件</el-button>\r\n      </template>\r\n    </el-upload>\r\n  </yv-vjson-form-item>\r\n</template>\r\n\r\n<script>\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport _ from \"lodash\"\r\nimport {Filefield} from \"./Defaults\"\r\nimport YvVjsonFormItem from \"./yv-vjson-form-item.vue\"\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  components: {\r\n    YvVjsonFormItem\r\n  },\r\n  data() {\r\n    const data = _.defaults(this.vjson, Filefield)\r\n\r\n    const rules = this._getFormItemBaseRule(data)\r\n\r\n    return {\r\n      fieldLabel: data.fieldLabel,\r\n      placeholder: data.placeholder,\r\n      required: data.required,\r\n      disabled: data.disabled,\r\n      bind: data.bind,\r\n      readonly: data.readonly,\r\n      rules: rules,\r\n      valueOnClear: data.valueOnClear,\r\n      validateEvent: data.validateEvent,\r\n      labelWidth: data.labelWidth,\r\n      action: data.action,\r\n      method: data.method,\r\n      autoUpload: data.autoUpload ?? false,\r\n      multiple: data.multiple ?? false,\r\n      showFileList: data.showFileList ?? false,\r\n      drag: data.drag ?? false,\r\n      listType: data.listType,\r\n      accept: data.accept,\r\n      limit: data.limit,\r\n    }\r\n  },\r\n  watch: {\r\n    fieldLabel: {\r\n      handler(newVal) {\r\n        this.$refs._formItem.fieldLabel = newVal\r\n      }\r\n    },\r\n    labelWidth: {\r\n      handler(newVal) {\r\n        this.vjson.labelWidth = newVal\r\n      }\r\n    },\r\n    required: {\r\n      handler(newVal) {\r\n        this.$refs._formItem.required = newVal\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    /**\r\n     * 取消上传请求\r\n     */\r\n    abort(file) {\r\n      this.$refs._inner.abort(file)\r\n    },\r\n    /**\r\n     * 上传文件列表\r\n     */\r\n    submit() {\r\n      this.$refs._inner.submit()\r\n    },\r\n\r\n    /**\r\n     * 清空已上传的文件列表（该方法不支持在 before-upload 中调用）\r\n     * (status?: Array<\"ready\" | \"uploading\" | \"success\" | \"fail\">) => void\r\n     */\r\n    clearFiles(status) {\r\n      this.$refs._inner.clearFiles(status)\r\n    },\r\n\r\n    _onPreview(e) {\r\n      console.log('_onPreview')\r\n      this.runEvent('preview', ...arguments)\r\n    },\r\n\r\n    _onRemove(e) {\r\n      console.log('_onRemove')\r\n      this.runEvent('remove', ...arguments)\r\n    },\r\n\r\n    _onSuccess(e) {\r\n      console.log('_onSuccess')\r\n      this.runEvent('success', ...arguments)\r\n    },\r\n\r\n    _onError(e) {\r\n      console.log('_onError')\r\n      this.runEvent('error', ...arguments)\r\n    },\r\n\r\n    _onProgress(e) {\r\n      console.log('_onProgress')\r\n      this.runEvent('progress', ...arguments)\r\n    },\r\n\r\n    _onChange(e) {\r\n      console.log('_onChange')\r\n      this.runEvent('change', ...arguments)\r\n    },\r\n\r\n    _onExceed(e) {\r\n      console.log('_onExceed')\r\n      this.runEvent('exceed', ...arguments)\r\n    },\r\n\r\n    _beforeUpload(e) {\r\n      console.log('_beforeUpload')\r\n      this.runEvent('before-upload', ...arguments)\r\n    },\r\n\r\n    _beforeRemove(e) {\r\n      console.log('_beforeRemove')\r\n      this.runEvent('before-remove', ...arguments)\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">filefield 属性</div>\r\n    <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"modal\" prop=\"bindValue\">\r\n        <el-input v-model=\"bindValue\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"uiKey\" prop=\"uiKey\">\r\n        <el-input v-model=\"formData.uiKey\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"隐藏\" prop=\"hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"标签名\" prop=\"fieldLabel\">\r\n        <el-input v-model=\"formData.fieldLabel\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"必填\" prop=\"required\">\r\n        <el-switch v-model=\"formData.required\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"权重\" prop=\"weight\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"(formData.weight === 1 || !formData.weight)? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=1\">1\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 2? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=2\">2\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 3? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=3\">3\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 4? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=4\">4\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 5? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=5\">5\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 6? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=6\">6\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"标签宽度\" prop=\"formData.text\">\r\n        <el-input v-model=\"formData.labelWidth\" type=\"text\" placeholder=\"auto\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"立刻校验\" prop=\"validateOnRuleChange\">\r\n        <el-switch v-model=\"formData.validateOnRuleChange\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"显示错误\" prop=\"showMessage\">\r\n        <el-switch v-model=\"formData.showMessage\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"内联错误\" prop=\"inlineMessage\">\r\n        <el-switch v-model=\"formData.inlineMessage\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"尺寸\" prop=\"size\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"formData.size === 'large'? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='large'\">大\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"(formData.size === 'default' || !formData.size)? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='default'\">中\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.size === 'small'? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='small'\">小\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"请求URL\" prop=\"action\">\r\n        <el-input v-model=\"formData.action\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"请求方法\" prop=\"method\">\r\n        <el-select v-model=\"formData.method\" class=\"full-width-input\" clearable>\r\n          <el-option value=\"get\" label=\"GET\"/>\r\n          <el-option value=\"post\" label=\"POST\"/>\r\n          <el-option value=\"put\" label=\"PUT\"/>\r\n          <el-option value=\"head\" label=\"HEAD\"/>\r\n          <el-option value=\"delete\" label=\"DELETE\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <el-form-item label=\"列表类型\" prop=\"listType\">\r\n        <el-select v-model=\"formData.listType\" class=\"full-width-input\" clearable>\r\n          <el-option value=\"text\" label=\"文本\"/>\r\n          <el-option value=\"picture\" label=\"图片\"/>\r\n          <el-option value=\"picture-card\" label=\"图片卡片\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <el-form-item label=\"文件类型\" prop=\"accept\">\r\n        <el-input v-model=\"formData.accept\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"最多个数\" prop=\"limit\">\r\n        <el-input-number v-model=\"formData.limit\" :min=\"0\" :step=\"1\" :precision=\"0\" controls-position=\"right\"></el-input-number>\r\n      </el-form-item>\r\n      <el-form-item label=\"自动上传\" prop=\"autoUpload\">\r\n        <el-switch v-model=\"formData.autoUpload\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"拖拽上传\" prop=\"drag\">\r\n        <el-switch v-model=\"formData.drag\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"显示文件\" prop=\"showFileList\">\r\n        <el-switch v-model=\"formData.showFileList\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"多选文件\" prop=\"multiple\">\r\n        <el-switch v-model=\"formData.multiple\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"禁用\" prop=\"disabled\">\r\n        <el-switch v-model=\"formData.disabled\"></el-switch>\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport VJsonContext from \"../../vjson/VJsonContext\";\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\";\r\n\r\nexport default {\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        fieldLabel: this.vjson.fieldLabel,\r\n        labelWidth: this.vjson.labelWidth,\r\n        required: this.vjson.required ?? false,\r\n        showMessage: this.vjson.showMessage ?? true,\r\n        inlineMessage: this.vjson.inlineMessage ?? false,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        placeholder: this.vjson.placeholder,\r\n        readonly: this.vjson.readonly ?? false,\r\n        bind: this.vjson.bind,\r\n        listType: this.vjson.listType,\r\n        drag: this.vjson.drag ?? false,\r\n        multiple: this.vjson.multiple ?? false,\r\n        limit: this.vjson.limit,\r\n        showFileList: this.vjson.showFileList,\r\n      }\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <yv-design-form-item :designer=\"designer\" :vjson=\"vjson\" :vcxt=\"vcxt\"\r\n                       :parent-component=\"parentComponent\" :parent-list=\"parentList\"\r\n                       :index-of-parent-list=\"indexOfParentList\"\r\n                       class=\"yv-filefield\"\r\n                       @selectme.native=\"_selectMe\"\r\n                       @click.stop=\"_selectMe\">\r\n    <el-upload :action=\"vjson.action\"\r\n               :method=\"vjson.method\"\r\n               :auto-upload=\"vjson.autoUpload ?? false\"\r\n               :multiple=\"vjson.multiple ?? false\"\r\n               :show-file-list=\"vjson.showFileList ?? false\"\r\n               :drag=\"vjson.drag ?? false\"\r\n               :accept=\"vjson.accept\"\r\n               :list-type=\"vjson.listType\"\r\n               :disabled=\"vjson.disabled ?? false\"\r\n               :limit=\"vjson.limit\"\r\n               :size=\"vjson.size\">\r\n        <el-button type=\"primary\">请选择上传文件</el-button>\r\n    </el-upload>\r\n  </yv-design-form-item>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignFormItem from './yv-design-form-item.vue'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonFilefield from \"../../vjson/yv-vjson-filefield.vue\"\r\nimport YvDesignFilefieldProp from \"./yv-design-filefield-prop.vue\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n    YvDesignFormItem,\r\n  },\r\n  data() {\r\n    console.log('filefield vjson', this.vjson)\r\n    return {\r\n      oldFieldValue: null,\r\n      fieldModel: '',\r\n    }\r\n  },\r\n\r\n  install(Vue) {\r\n    const desc = registeComponent('filefield')\r\n    desc.setRuntime('YvVjsonFilefield', YvVjsonFilefield)\r\n    desc.setDesign('YvDesignFilefield', this)\r\n    desc.setProp('YvDesignFilefieldProp', YvDesignFilefieldProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'file',\r\n        vjson.fieldLabel,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'fieldLabel', desc: '标签名', bindable: true},\r\n      {name: 'placeholder', desc: '占位符', bindable: true},\r\n      {name: 'disabled', desc: '禁用', bindable: true},\r\n      {name: 'readonly', desc: '只读', bindable: true},\r\n      {name: 'hidden', desc: '隐藏', bindable: true},\r\n      {name: 'size', desc: '大小', bindable: true},\r\n      {name: 'min', desc: '最小数值', bindable: true},\r\n      {name: 'max', desc: '最大数值', bindable: true},\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'preview', desc: '点击文件列表中已上传的文件时触发', events: [{name: 'e'}]},\r\n      {name: 'remove', desc: '文件列表移除文件时触发', events: [{name: 'e'}]},\r\n      {name: 'success', desc: '文件上传成功时触发', events: [{name: 'e'}]},\r\n      {name: 'error', desc: '文件上传失败时触发', events: [{name: 'e'}]},\r\n      {name: 'progress', desc: '文件上传时触发', events: [{name: 'e'}]},\r\n      {name: 'change', desc: '文件状态改变时触发', events: [{name: 'e'}]},\r\n      {name: 'exceed', desc: '当超出限制时触发', events: [{name: 'e'}]},\r\n      {name: 'before-upload', desc: '删除文件之前时触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>\r\n","<template>\r\n  <yv-vjson-form-item v-if=\"!hidden\"\r\n                      ref=\"_formItem\"\r\n                      :vjson=\"vjson\"\r\n                      :vcxt=\"vcxt\"\r\n                      :dialog-scope=\"dialogScope\"\r\n                      :parentComponent=\"parentComponent\"\r\n                      :parentList=\"parentList\"\r\n                      :rules=\"rules\"\r\n                      :indexOfParentList=\"indexOfParentList\"\r\n                      class=\"yv-radiogroup\">\r\n\r\n    <el-radio-group :size=\"size\" :modelValue=\"realValue\" @change=\"_change\" @update:modelValue=\"_onValueChange\">\r\n      <el-radio-button\r\n          v-if=\"radioMode === 'radioButton'\"\r\n          v-for=\"item in optionData\"\r\n          :label=\"item[valueField]\"\r\n          :border=\"border\"\r\n          :style=\"{display: _isItemDisabled(item[valueField])?'none':'block'}\"\r\n      >\r\n        {{ item[displayField] }}\r\n      </el-radio-button>\r\n\r\n      <el-radio\r\n          v-else\r\n          v-for=\"item in optionData\"\r\n          :label=\"item[valueField]\"\r\n          :border=\"border\"\r\n          :style=\"{display: _isItemDisabled(item[valueField])?'none':'block'}\"\r\n      >\r\n        {{ item[displayField] }}\r\n      </el-radio>\r\n    </el-radio-group>\r\n\r\n  </yv-vjson-form-item>\r\n</template>\r\n\r\n<script>\r\nimport _ from \"lodash\"\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport {Radiogroup} from \"./Defaults\"\r\nimport YvVjsonFormItem from \"./yv-vjson-form-item.vue\"\r\nimport {dict} from \"../../store\";\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  components: {\r\n    YvVjsonFormItem\r\n  },\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Radiogroup)\r\n    const rules = this._getFormItemBaseRule(vjson)\r\n\r\n    return {\r\n      dataType: vjson.dataType,\r\n      dataEnum: vjson.dataEnum ?? [],\r\n      displayField: vjson.displayField ?? 'text',\r\n      valueField: vjson.valueField ?? 'id',\r\n      fieldLabel: vjson.fieldLabel,\r\n      placeholder: vjson.placeholder,\r\n      required: vjson.required,\r\n      hidden: vjson.hidden,\r\n      bind: vjson.bind,\r\n      readonly: vjson.readonly,\r\n      rules: rules,\r\n      valueOnClear: vjson.valueOnClear,\r\n      validateEvent: vjson.validateEvent,\r\n      labelWidth: vjson.labelWidth,\r\n      border: vjson.border,\r\n      radioMode: vjson.radioMode,\r\n      size: vjson.size,\r\n    }\r\n  },\r\n  computed: {\r\n    optionData() {\r\n      let optionData = []\r\n      switch (this.dataType) {\r\n        case 1:\r\n          optionData = this.dataEnum\r\n          break;\r\n        case 2:\r\n          const items = dict.value[this.vjson.dataDict]?.items || []\r\n          _.forEach(items, item => {\r\n            optionData.push({id: item.dictValue, text: item.dictText})\r\n          })\r\n          break;\r\n      }\r\n      return optionData\r\n    }\r\n  },\r\n  watch: {\r\n    fieldLabel: {\r\n      handler(newVal) {\r\n        this.$refs._formItem.fieldLabel = newVal\r\n      }\r\n    },\r\n    labelWidth: {\r\n      handler(newVal) {\r\n        this.vjson.labelWidth = newVal\r\n      }\r\n    },\r\n    required: {\r\n      handler(newVal) {\r\n        this.$refs._formItem.required = newVal\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    _change(value) {\r\n      this.runEvent('change', ...arguments)\r\n    },\r\n    _isItemDisabled(id) {\r\n      return _.includes((this.vjson.disabledDictItems || []), id)\r\n    },\r\n  }\r\n}\r\n</script>","<template>\r\n  <div class=\"property tabs-property\">\r\n    <div class=\"title\">radiofield 属性</div>\r\n    <el-tabs>\r\n      <el-tab-pane label=\"基础\">\r\n        <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n                 size=\"default\" @submit.native.prevent>\r\n          <el-form-item label=\"reference\" prop=\"reference\">\r\n            <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"modal\" prop=\"bindValue\">\r\n            <el-input v-model=\"bindValue\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"uiKey\" prop=\"uiKey\">\r\n            <el-input v-model=\"formData.uiKey\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"权限\" prop=\"permissions\">\r\n            <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <el-form-item label=\"隐藏\" prop=\"hidden\">\r\n            <el-switch v-model=\"formData.hidden\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"标签名\" prop=\"fieldLabel\">\r\n            <el-input v-model=\"formData.fieldLabel\" type=\"text\"></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"必填\" prop=\"required\">\r\n            <el-switch v-model=\"formData.required\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"宽度权重\" prop=\"weight\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"(formData.weight === 1 || !formData.weight)? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=1\">1\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 2? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=2\">2\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 3? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=3\">3\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 4? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=4\">4\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 5? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=5\">5\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 6? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=6\">6\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"标签宽度\" prop=\"formData.text\">\r\n            <el-input v-model=\"formData.labelWidth\" type=\"text\" placeholder=\"auto\"></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"立刻校验\" prop=\"validateOnRuleChange\">\r\n            <el-switch v-model=\"formData.validateOnRuleChange\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"显示错误\" prop=\"showMessage\">\r\n            <el-switch v-model=\"formData.showMessage\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"内联错误\" prop=\"inlineMessage\">\r\n            <el-switch v-model=\"formData.inlineMessage\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"尺寸\" prop=\"size\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.size === 'large'? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='large'\">大\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"(formData.size === 'default' || !formData.size)? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='default'\">中\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.size === 'small'? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='small'\">小\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"显示模式\" prop=\"radioMode\">\r\n            <el-button-group>\r\n              <el-button size=\"small\"\r\n                         :type=\"!formData.radioMode || formData.radioMode === 'radio'? 'primary':'default'\"\r\n                         @click=\"()=>formData.radioMode='radio'\">\r\n                RADIO\r\n              </el-button>\r\n              <el-button size=\"small\"\r\n                         :type=\"(formData.radioMode === 'radioButton')? 'primary':'default'\"\r\n                         @click=\"()=>formData.radioMode='radioButton'\">\r\n                RADIO-BUTTON\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"显示边框\" prop=\"border\">\r\n            <el-radio-group size=\"small\" v-model=\"formData.border\">\r\n              <el-switch v-model=\"formData.border\"></el-switch>\r\n            </el-radio-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"禁用\" prop=\"disabled\">\r\n            <el-switch v-model=\"formData.disabled\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"只读\" prop=\"readonly\">\r\n            <el-switch v-model=\"formData.readonly\"></el-switch>\r\n          </el-form-item>\r\n        </el-form>\r\n      </el-tab-pane>\r\n      <el-tab-pane label=\"数据\">\r\n        <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\" size=\"default\"\r\n                 @submit.native.prevent>\r\n          <el-form-item label=\"类型\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.dataType === 1? 'primary':'default'\"\r\n                         @click=\"()=>formData.dataType=1\">枚举\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.dataType === 2 ? 'primary':'default'\"\r\n                         @click=\"()=>formData.dataType=2\">字典\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <template v-if=\"formData.dataType===1\">\r\n            <div class=\"enumeration enumeration-title\">\r\n              <div class=\"enumeration-col\">枚举值</div>\r\n              <div class=\"enumeration-col\">枚举名</div>\r\n              <div class=\"enumeration-col\" style=\"width: 50px;\"></div>\r\n            </div>\r\n            <div class=\"enumeration\" v-for=\"(item, idx) in (formData.dataEnum || [])\">\r\n              <div class=\"enumeration-col\">\r\n                <el-input v-model=\"item.id\" type=\"text\" clearable/>\r\n              </div>\r\n              <div class=\"enumeration-col\">\r\n                <el-input v-model=\"item.text\" type=\"text\" clearable/>\r\n              </div>\r\n              <div class=\"enumeration-col\">\r\n                <span class=\"iconfont icon-shanchu1\" @click=\"()=>removeItem(idx)\"></span>\r\n                <span class=\"iconfont icon-tuozhuai\"></span>\r\n              </div>\r\n            </div>\r\n            <el-button type=\"primary\" :icon=\"renderIcon('fa Plus')\" link @click=\"addNewItem\" class=\"enumeration-add-btn\">\r\n              添加一项\r\n            </el-button>\r\n          </template>\r\n          <template v-if=\"formData.dataType===2\">\r\n            <el-form-item label=\"选择字典\">\r\n              <el-select filterable v-model=\"formData.dataDict\" :filterable=\"true\" :clearable=\"true\">\r\n                <el-option\r\n                    v-for=\"item in dictList\"\r\n                    :key=\"item.code\"\r\n                    :label=\"item.desc\"\r\n                    :value=\"item.code\"\r\n                />\r\n              </el-select>\r\n            </el-form-item>\r\n\r\n            <div class=\"enumeration enumeration-title\">\r\n              <div class=\"enumeration-col\" style=\"flex: none;padding-right: 5px;\">禁用</div>\r\n              <div class=\"enumeration-col\">字典项</div>\r\n            </div>\r\n            <div v-for=\"item in previewDictListItems\" class=\"enumeration\" :key=\"item.id\">\r\n              <div class=\"enumeration-col\" style=\"flex: none;padding-right: 5px;\">\r\n                <el-switch :modelValue=\"_dictItemDisabled(item)\"\r\n                           @update:modelValue=\"_onDictItemDisabledChanged(item,$event)\"></el-switch>\r\n              </div>\r\n              <div class=\"enumeration-col\">\r\n                {{ item.text }}({{ item.id }})\r\n              </div>\r\n            </div>\r\n          </template>\r\n        </el-form>\r\n      </el-tab-pane>\r\n    </el-tabs>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport {dict} from \"../../../store\"\r\nimport lodash from \"lodash\"\r\nimport {toRaw} from \"vue\"\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  mixins: [basePropMix, YvDesignerPermissions],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    const dictList = []\r\n    _.each(dict.value, item => {\r\n      dictList.push({code: item.code, desc: item.desc})\r\n    })\r\n    return {\r\n      dictList,\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      previewDictListItems: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        fieldLabel: this.vjson.fieldLabel,\r\n        labelWidth: this.vjson.labelWidth,\r\n        required: this.vjson.required ?? false,\r\n        showMessage: this.vjson.showMessage ?? true,\r\n        inlineMessage: this.vjson.inlineMessage ?? false,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        placeholder: this.vjson.placeholder,\r\n        readonly: this.vjson.readonly ?? false,\r\n        bind: this.vjson.bind,\r\n        border: this.vjson.border,\r\n        dataType: this.vjson.dataType,\r\n        dataEnum: this.vjson.dataEnum,\r\n        dataDict: this.vjson.dataDict,\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    addNewItem() {\r\n      if (!this.formData.dataEnum) {\r\n        this.formData.dataEnum = []\r\n      }\r\n      this.formData.dataEnum.push({id: \"\", text: \"\"})\r\n    },\r\n    _dictItemDisabled(item) {\r\n      if (!this.formData.disabledDictItems) {\r\n        return false\r\n      }\r\n      const ret = lodash.includes(this.formData.disabledDictItems, item.id)\r\n      // console.log(`_dictItemDisabled(${item.id})=${ret}`)\r\n      return ret\r\n    },\r\n    _onDictItemDisabledChanged(item, isDisable) {\r\n      if (!this.formData.disabledDictItems) {\r\n        this.formData.disabledDictItems = []\r\n      }\r\n\r\n      if (isDisable) {\r\n        this.formData.disabledDictItems.push(item.id)\r\n      } else {\r\n        lodash.remove(this.formData.disabledDictItems, r => r === item.id)\r\n      }\r\n      // console.log(toRaw(this.formData.disabledDictItems))\r\n    },\r\n    removeItem(idx) {\r\n      this.formData.dataEnum.splice(idx, 1)\r\n    },\r\n  },\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    },\r\n\r\n    'formData.dataDict': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        if (newVal && this.formData.dataType === 2) {\r\n          this.previewDictListItems = window['DICT_CACHE'][newVal]\r\n        } else {\r\n          this.previewDictListItems = []\r\n        }\r\n      }\r\n    },\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n\r\n.property.tabs-property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  .el-tabs {\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n\r\n    .el-tabs__header {\r\n      .el-tabs__item {\r\n        padding: 0 10px;\r\n      }\r\n\r\n      .el-tabs__item.is-active, .el-tabs__item:hover {\r\n        color: #000;\r\n      }\r\n\r\n      .el-tabs__active-bar {\r\n        background-color: var(--main-color)\r\n      }\r\n    }\r\n\r\n    .el-tabs__content {\r\n      flex: 1;\r\n      overflow: auto;\r\n\r\n      .enumeration-title {\r\n        color: #333;\r\n        font-size: 14px;\r\n        margin-bottom: 5px;\r\n      }\r\n\r\n      .enumeration {\r\n        margin-bottom: 5px;\r\n        display: flex;\r\n        flex-direction: row;\r\n\r\n        .enumeration-col {\r\n          &:nth-child(1), &:nth-child(2) {\r\n            flex: 1;\r\n            padding-right: 3px;\r\n          }\r\n\r\n          &:nth-child(3) {\r\n            line-height: 32px;\r\n\r\n            span:nth-child(1) {\r\n              cursor: pointer;\r\n              margin: 0 5px\r\n            }\r\n\r\n            span:nth-child(2) {\r\n              cursor: move;\r\n              margin-right: 5px;\r\n              font-size: 20px;\r\n              position: relative;\r\n              top: 1px\r\n            }\r\n          }\r\n\r\n          .el-input__wrapper {\r\n            border-radius: 0;\r\n          }\r\n        }\r\n      }\r\n\r\n      .enumeration-add-btn {\r\n        color: var(--main-color)\r\n      }\r\n    }\r\n  }\r\n\r\n  form {\r\n    overflow-x: hidden;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <yv-design-form-item :designer=\"designer\" :vjson=\"vjson\" :vcxt=\"vcxt\"\r\n                       :parent-component=\"parentComponent\" :parent-list=\"parentList\"\r\n                       :index-of-parent-list=\"indexOfParentList\"\r\n                       class=\"yv-filefield\"\r\n                       @selectme.native=\"_selectMe\"\r\n                       @click.stop=\"_selectMe\">\r\n    <el-radio-group :size=\"vjson.size\">\r\n      <el-radio-button\r\n          v-if=\"vjson.radioMode === 'radioButton'\"\r\n          v-for=\"item in optionData\"\r\n          :label=\"item[vjson.valueField ?? 'id']\"\r\n          :border=\"vjson.border\"\r\n          :style=\"{display: _isItemDisabled(item[vjson.valueField?? 'id'])?'none':'block'}\"\r\n      >\r\n        {{ item[vjson.displayField ?? 'text'] }}\r\n      </el-radio-button>\r\n\r\n      <el-radio\r\n          v-else\r\n          v-for=\"item in optionData\"\r\n          :label=\"item[vjson.valueField?? 'id']\"\r\n          :border=\"vjson.border\"\r\n          :style=\"{display: _isItemDisabled(item[vjson.valueField?? 'id'])?'none':'block'}\"\r\n      >\r\n        {{ item[vjson.displayField ?? 'text'] }}\r\n      </el-radio>\r\n    </el-radio-group>\r\n  </yv-design-form-item>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignFormItem from './yv-design-form-item.vue'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonRadiogroup from \"../../vjson/yv-vjson-radiogroup.vue\"\r\nimport YvDesignRadiogroupProp from \"./yv-design-radiogroup-prop.vue\"\r\nimport {dict} from \"../../../store\";\r\nimport _ from \"lodash\";\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n    YvDesignFormItem,\r\n  },\r\n  data() {\r\n    return {\r\n      oldFieldValue: null,\r\n      fieldModel: '',\r\n    }\r\n  },\r\n  methods: {\r\n    _isItemDisabled(id) {\r\n      return _.includes((this.vjson.disabledDictItems || []), id)\r\n    },\r\n  },\r\n  computed: {\r\n    optionData() {\r\n      let optionData = []\r\n      switch (this.vjson.dataType) {\r\n        case 1:\r\n          optionData = this.vjson.dataEnum\r\n          break;\r\n        case 2:\r\n          const items = dict.value[this.vjson.dataDict]?.items || []\r\n          _.forEach(items, item => {\r\n            optionData.push({id: item.dictValue, text: item.dictText})\r\n          })\r\n          break;\r\n      }\r\n      return optionData\r\n    }\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('radiogroup')\r\n    desc.setRuntime('YvVjsonRadiogroup', YvVjsonRadiogroup)\r\n    desc.setDesign('YvDesignRadiogroup', this)\r\n    desc.setProp('YvDesignRadiogroupProp', YvDesignRadiogroupProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'radio',\r\n        vjson.fieldLabel,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'fieldLabel', desc: '标签名', bindable: true},\r\n      {name: 'placeholder', desc: '占位符', bindable: true},\r\n      {name: 'disabled', desc: '禁用', bindable: true},\r\n      {name: 'readonly', desc: '只读', bindable: true},\r\n      {name: 'hidden', desc: '隐藏', bindable: true},\r\n      {name: 'size', desc: '大小', bindable: true},\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'change', desc: '绑定值变化时触发的事件', events: [{name: 'e'}]},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>","<template>\r\n  <yv-vjson-form-item v-if=\"!hidden\"\r\n                      ref=\"_formItem\"\r\n                      :vjson=\"vjson\"\r\n                      :vcxt=\"vcxt\"\r\n                      :rules=\"rules\"\r\n                      :dialog-scope=\"dialogScope\"\r\n                      :parentComponent=\"parentComponent\"\r\n                      :parentList=\"parentList\"\r\n                      :indexOfParentList=\"indexOfParentList\"\r\n                      class=\"yv-combo\">\r\n    <el-select :modelValue=\"realValue\"\r\n               :placeholder=\"placeholder\"\r\n               :disabled=\"disabled\"\r\n               :size=\"size\"\r\n               :clearable=\"clearable\"\r\n               :multiple=\"multiple??false\"\r\n               :collapse-tags=\"!!(multiple??false)\"\r\n               :collapse-tags-tooltip=\"true\"\r\n               :filterable=\"filterable??true\"\r\n               :allow-create=\"filterable === true && allowCreate === true\"\r\n               :default-first-option=\"filterable === true && defaultFirstOption === true\"\r\n               @update:modelValue=\"_onValueChange\"\r\n               @focus=\"_onFocus\" @blur=\"_onBlur\"\r\n               @remove-tag=\"_onHandleRemoveTag\"\r\n               @visible-change=\"_onHandleVisibleChange\"\r\n               @clear=\"_onHandleClear\"\r\n               @input=\"_onInput\" @change=\"_onChange\">\r\n      <template v-if=\"dataType\">\r\n        <el-option\r\n            v-for=\"item in optionData\"\r\n            :key=\"item[valueField]\"\r\n            :value=\"item[valueField]\"\r\n            :label=\"item[displayField]\"\r\n            :style=\"{display: _isItemDisabled(item[valueField])?'none':'block'}\"\r\n        />\r\n      </template>\r\n      <template v-if=\"!dataType\">\r\n        <el-option v-for=\"item in $data.data\" :label=\"item[$data.displayField]\" :value=\"item[$data.valueField]\"/>\r\n      </template>\r\n    </el-select>\r\n  </yv-vjson-form-item>\r\n</template>\r\n\r\n<script>\r\nimport _ from \"lodash\"\r\nimport lodash from \"lodash\"\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport {Combo} from \"./Defaults\"\r\nimport YvVjsonFormItem from \"./yv-vjson-form-item.vue\"\r\nimport {dict} from \"../../store\"\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  components: {\r\n    YvVjsonFormItem\r\n  },\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Combo)\r\n    const rules = this._getFormItemBaseRule(vjson)\r\n\r\n    let optionData = []\r\n    switch (vjson.dataType) {\r\n      case 1:\r\n        optionData = this.vjson.dataEnum || []\r\n        break;\r\n      case 2:\r\n        const items = dict.value[this.vjson.dataDict]?.items || []\r\n        lodash.forEach(items, item => {\r\n          optionData.push({id: item.dictValue, text: item.dictText})\r\n        })\r\n        break;\r\n    }\r\n    return {\r\n      fieldLabel: vjson.fieldLabel,\r\n      rules: rules,\r\n      labelWidth: vjson.labelWidth,\r\n      placeholder: vjson.placeholder,\r\n      disabled: vjson.disabled,\r\n      size: vjson.size,\r\n      hidden: vjson.hidden,\r\n      bind: vjson.bind,\r\n      required: vjson.required,\r\n      readonly: vjson.readonly,\r\n      clearable: vjson.clearable ?? true,\r\n      multiple: vjson.multiple ?? false,\r\n      filterable: vjson.filterable ?? true,\r\n      allowCreate: vjson.allowCreate ?? false,\r\n      defaultFirstOption: vjson.defaultFirstOption ?? false,\r\n      displayField: vjson.displayField,\r\n      valueField: vjson.valueField,\r\n      dataType: vjson.dataType,\r\n      data: vjson.data,\r\n      dataDict: vjson.dataDict,\r\n      dataEnum: vjson.dataEnum,\r\n      optionData: optionData,\r\n    }\r\n  },\r\n  watch: {\r\n    fieldLabel: {\r\n      handler(newVal) {\r\n        this.$refs._formItem.fieldLabel = newVal\r\n      }\r\n    },\r\n    labelWidth: {\r\n      handler(newVal) {\r\n        this.vjson.labelWidth = newVal\r\n      }\r\n    },\r\n    dataEnum: {\r\n      handler(newVal) {\r\n        this.vjson.dataType = 1;\r\n        this.vjson.dataEnum = newVal\r\n        this.optionData = this.vjson.dataEnum || []\r\n      }\r\n    },\r\n    required: {\r\n      handler() {\r\n        console.log('required change', this.required)\r\n        this.rules = this._getFormItemBaseRule(this)\r\n        // this.$refs._formItem.required = newVal\r\n      }\r\n    },\r\n    dataDict: {\r\n      handler(newVal) {\r\n        this.vjson.dataType = 2;\r\n        this.vjson.dataDict = newVal;\r\n        const items = dict.value[this.vjson.dataDict]?.items || []\r\n        const optionData = [];\r\n        lodash.forEach(items, item => {\r\n          optionData.push({id: item.dictValue, text: item.dictText})\r\n        })\r\n        this.optionData = optionData;\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    _isItemDisabled(id) {\r\n      return _.includes((this.vjson.disabledDictItems || []), id)\r\n    },\r\n    _onInput(e) {\r\n      // getListener(this.vjson, 'input', this.vcxt)(this, this.vcxt.scope, e)\r\n      this.runEvent('input', ...arguments)\r\n    },\r\n    _onHandleRemoveTag(e) {\r\n      this.runEvent('remove-tag', ...arguments)\r\n    },\r\n    _onHandleVisibleChange(e) {\r\n      this.runEvent('visible-change', ...arguments)\r\n    },\r\n    _onHandleClear(e) {\r\n      this.runEvent('clear', ...arguments)\r\n    },\r\n    _onChange(e) {\r\n      this.runEvent('change', ...arguments)\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <div class=\"property tabs-property\">\r\n    <div class=\"title\">combo 属性</div>\r\n    <el-tabs>\r\n      <el-tab-pane label=\"基础\">\r\n        <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n                 size=\"default\" @submit.native.prevent>\r\n          <el-form-item label=\"reference\" prop=\"reference\">\r\n            <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"modal\" prop=\"bindValue\">\r\n            <el-input v-model=\"bindValue\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"uiKey\" prop=\"uiKey\">\r\n            <el-input v-model=\"formData.uiKey\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"权限\" prop=\"permissions\">\r\n            <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <el-form-item label=\"隐藏\" prop=\"hidden\">\r\n            <el-switch v-model=\"formData.hidden\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"标签名\" prop=\"fieldLabel\">\r\n            <el-input v-model=\"formData.fieldLabel\" type=\"text\"></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"必填\" prop=\"required\">\r\n            <el-switch v-model=\"formData.required\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"宽度权重\" prop=\"weight\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"(formData.weight === 1 || !formData.weight)? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=1\">1\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 2? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=2\">2\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 3? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=3\">3\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 4? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=4\">4\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 5? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=5\">5\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 6? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=6\">6\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"标签宽度\" prop=\"formData.text\">\r\n            <el-input v-model=\"formData.labelWidth\" type=\"text\" placeholder=\"auto\"></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"立刻校验\" prop=\"validateOnRuleChange\">\r\n            <el-switch v-model=\"formData.validateOnRuleChange\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"显示错误\" prop=\"showMessage\">\r\n            <el-switch v-model=\"formData.showMessage\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"内联错误\" prop=\"inlineMessage\">\r\n            <el-switch v-model=\"formData.inlineMessage\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"尺寸\" prop=\"size\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.size === 'large'? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='large'\">大\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"(formData.size === 'default' || !formData.size)? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='default'\">中\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.size === 'small'? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='small'\">小\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"占位字符\" prop=\"placeholder\">\r\n            <el-input v-model=\"formData.placeholder\" type=\"text\"></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"禁用\" prop=\"disabled\">\r\n            <el-switch v-model=\"formData.disabled\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"只读\" prop=\"readonly\">\r\n            <el-switch v-model=\"formData.readonly\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"多选\" prop=\"multiple\">\r\n            <el-switch v-model=\"formData.multiple\"></el-switch>\r\n          </el-form-item>\r\n          <!--\r\n          <el-form-item label=\"collapse-tags\" prop=\"collapseTags\">\r\n            <el-switch v-model=\"formData.collapseTags\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"collapse-tags-tooltip\" prop=\"collapseTagsTooltip\">\r\n            <el-switch v-model=\"formData.collapseTagsTooltip\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"筛选\" prop=\"filterable\">\r\n            <el-switch v-model=\"formData.filterable\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"创建\" prop=\"allowCreate\">\r\n            <el-switch v-model=\"formData.allowCreate\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"回车匹配\" prop=\"defaultFirstOption\">\r\n            <el-switch v-model=\"formData.defaultFirstOption\"></el-switch>\r\n          </el-form-item>\r\n          -->\r\n          <yv-design-input-width :designer=\"designer\" :form-data=\"formData\"/>\r\n        </el-form>\r\n      </el-tab-pane>\r\n      <el-tab-pane label=\"数据\">\r\n        <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\" size=\"default\"\r\n                 @submit.native.prevent>\r\n          <el-form-item label=\"类型\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.dataType === 1? 'primary':'default'\"\r\n                         @click=\"()=>formData.dataType=1\">枚举\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.dataType === 2 ? 'primary':'default'\"\r\n                         @click=\"()=>formData.dataType=2\">字典\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <template v-if=\"formData.dataType===1\">\r\n\r\n            <div class=\"enumeration enumeration-title\">\r\n              <div class=\"enumeration-col\">枚举值</div>\r\n              <div class=\"enumeration-col\">枚举名</div>\r\n              <div class=\"enumeration-col\" style=\"width: 50px;\"></div>\r\n            </div>\r\n            <draggable tag=\"div\" :list=\"formData.dataEnum\" item-key=\"id\" :component-data=\"{class: 'enumeration-ul'}\"\r\n                       v-bind=\"{group:'panesGroup', ghostClass: 'ghost', handle: '.icon-tuozhuai'}\">\r\n\r\n              <template #item=\"{ element: item, index: idx }\">\r\n                <div class=\"enumeration\" :key=\"item.id\">\r\n                  <div class=\"enumeration-col\">\r\n                    <el-input v-model=\"item.id\" type=\"text\" clearable/>\r\n                  </div>\r\n                  <div class=\"enumeration-col\">\r\n                    <el-input v-model=\"item.text\" type=\"text\" clearable/>\r\n                  </div>\r\n                  <div class=\"enumeration-col\">\r\n                    <span class=\"iconfont icon-shanchu1\" @click=\"()=>removeItem(idx)\"></span>\r\n                    <span class=\"iconfont icon-tuozhuai\"></span>\r\n                  </div>\r\n                </div>\r\n              </template>\r\n            </draggable>\r\n\r\n            <el-button type=\"primary\" :icon=\"renderIcon('fa Plus')\" link @click=\"addNewItem\"\r\n                       class=\"enumeration-add-btn\">\r\n              添加一项\r\n            </el-button>\r\n          </template>\r\n          <template v-if=\"formData.dataType===2\">\r\n            <el-form-item label=\"选择字典\">\r\n              <el-select filterable v-model=\"formData.dataDict\" @change=\"dataDictChange\" :filterable=true>\r\n                <el-option\r\n                    v-for=\"item in dict\"\r\n                    :key=\"item.code\"\r\n                    :label=\"`${item.desc}(${item.code})`\"\r\n                    :value=\"item.code\"\r\n                />\r\n              </el-select>\r\n            </el-form-item>\r\n\r\n            <div class=\"enumeration enumeration-title\">\r\n              <div class=\"enumeration-col\" style=\"flex: none;padding-right: 5px;\">禁用</div>\r\n              <div class=\"enumeration-col\">字典项</div>\r\n            </div>\r\n            <div v-for=\"item in previewDictListItems\" class=\"enumeration\" :key=\"item.id\">\r\n              <div class=\"enumeration-col\" style=\"flex: none;padding-right: 5px;\">\r\n                <el-switch :modelValue=\"_dictItemDisabled(item)\"\r\n                           @update:modelValue=\"_onDictItemDisabledChanged(item,$event)\"></el-switch>\r\n              </div>\r\n              <div class=\"enumeration-col\">\r\n                {{ item.text }}({{ item.id }})\r\n              </div>\r\n            </div>\r\n          </template>\r\n        </el-form>\r\n      </el-tab-pane>\r\n    </el-tabs>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from \"lodash\"\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport {dict} from \"../../../store\"\r\nimport YvDesignInputWidth from \"./yv-design-input-width.vue\"\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  components: {YvDesignInputWidth, YvDesignerPermissions},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    const dictData = []\r\n    _.forEach(dict.value, item => {\r\n      // console.log(item)\r\n      dictData.push({code: item.code, desc: item.desc})\r\n    })\r\n    const previewDictListItems = [];\r\n    const dictObj = dict.value[this.vjson.dataDict];\r\n    if (this.vjson.dataDict && dictObj) {\r\n      _.forEach(dictObj.items, value => {\r\n        previewDictListItems.push({...value, text: value.dictText, id: value.dictCode ?? value.dictValue});\r\n      });\r\n    }\r\n    // console.log(\"##\", previewDictListItems)\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      dict: dictData,\r\n      previewDictListItems: previewDictListItems,\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        fieldLabel: this.vjson.fieldLabel,\r\n        labelWidth: this.vjson.labelWidth,\r\n        required: this.vjson.required ?? false,\r\n        showMessage: this.vjson.showMessage ?? true,\r\n        inlineMessage: this.vjson.inlineMessage ?? false,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        placeholder: this.vjson.placeholder,\r\n        readonly: this.vjson.readonly ?? false,\r\n        weight: this.vjson.weight,\r\n        bind: this.vjson.bind,\r\n        multiple: this.vjson.multiple,\r\n        collapseTags: this.vjson.collapseTags,\r\n        collapseTagsTooltip: this.vjson.collapseTagsTooltip,\r\n        filterable: this.vjson.filterable,\r\n        allowCreate: this.vjson.allowCreate,\r\n        defaultFirstOption: this.vjson.defaultFirstOption,\r\n        dataType: this.vjson.dataType,\r\n        dataEnum: this.vjson.dataEnum,\r\n        dataDict: this.vjson.dataDict,\r\n      },\r\n    }\r\n  },\r\n  methods: {\r\n    dataDictChange(code) {\r\n      this.previewDictListItems = []\r\n      const dictObj = dict.value[code];\r\n      if (!dictObj) {\r\n        return\r\n      }\r\n      _.forEach(dictObj.items, value => {\r\n        this.previewDictListItems.push({...value, text: value.dictText, id: value.dictValue});\r\n      });\r\n      // console.log(\"##@@@\",dictObj, this.previewDictListItems)\r\n    },\r\n    addNewItem() {\r\n      if (!this.formData.dataEnum) {\r\n        this.formData.dataEnum = []\r\n      }\r\n      this.formData.dataEnum.push({id: \"\", text: \"\"})\r\n    },\r\n    _dictItemDisabled(item) {\r\n      if (!this.formData.disabledDictItems) {\r\n        return false\r\n      }\r\n      return this.formData.disabledDictItems.includes(item.id)\r\n    },\r\n    _onDictItemDisabledChanged(item, isDisable) {\r\n      if (!this.formData.disabledDictItems) {\r\n        this.formData.disabledDictItems = []\r\n      }\r\n      if (isDisable) {\r\n        this.formData.disabledDictItems.push(item.id)\r\n      } else {\r\n        this.formData.disabledDictItems = this.formData.disabledDictItems.filter(id => id !== item.id);\r\n      }\r\n    },\r\n    removeItem(idx) {\r\n      this.formData.dataEnum.splice(idx, 1)\r\n    }\r\n  },\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    },\r\n\r\n    // 'formData.dataDict': {\r\n    //   immediate: true,\r\n    //   handler(newVal, oldVal) {\r\n    //     if (newVal && this.formData.dataType === 2) {\r\n    //       this.previewDictListItems = window['DICT_CACHE'][newVal]\r\n    //     } else {\r\n    //       this.previewDictListItems = []\r\n    //     }\r\n    //   }\r\n    // },\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.property.tabs-property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  .el-tabs {\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n\r\n    .el-tabs__header {\r\n      .el-tabs__item {\r\n        padding: 0 10px;\r\n      }\r\n\r\n      .el-tabs__item.is-active, .el-tabs__item:hover {\r\n        color: #000;\r\n      }\r\n\r\n      .el-tabs__active-bar {\r\n        background-color: var(--main-color)\r\n      }\r\n    }\r\n\r\n    .el-tabs__content {\r\n      flex: 1;\r\n      overflow: auto;\r\n\r\n      .enumeration-title {\r\n        color: #333;\r\n        font-size: 14px;\r\n        margin-bottom: 5px;\r\n      }\r\n\r\n      .enumeration {\r\n        margin-bottom: 5px;\r\n        display: flex;\r\n        flex-direction: row;\r\n\r\n        .enumeration-col {\r\n          &:nth-child(1), &:nth-child(2) {\r\n            flex: 1;\r\n            padding-right: 3px;\r\n          }\r\n\r\n          &:nth-child(3) {\r\n            line-height: 32px;\r\n\r\n            span:nth-child(1) {\r\n              cursor: pointer;\r\n              margin: 0 5px\r\n            }\r\n\r\n            span:nth-child(2) {\r\n              cursor: move;\r\n              margin-right: 5px;\r\n              font-size: 20px;\r\n              position: relative;\r\n              top: 1px\r\n            }\r\n          }\r\n\r\n          .el-input__wrapper {\r\n            border-radius: 0;\r\n          }\r\n        }\r\n      }\r\n\r\n      .enumeration-add-btn {\r\n        color: var(--main-color)\r\n      }\r\n    }\r\n  }\r\n\r\n  form {\r\n    overflow-x: hidden;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <yv-design-form-item :designer=\"designer\" :vjson=\"vjson\" :vcxt=\"vcxt\"\r\n                       :parent-component=\"parentComponent\" :parent-list=\"parentList\"\r\n                       :index-of-parent-list=\"indexOfParentList\"\r\n                       @selectme.native=\"_selectMe\"\r\n                       @click.stop=\"_selectMe\"\r\n                       class=\"yv-combo\">\r\n    <el-select :disabled=\"vjson.disabled\" :readOnly=\"true\"\r\n               ref=\"_inner\"\r\n               :size=\"vjson.size\" class=\"hide-spin-button\"\r\n               :automatic-dropdown=\"false\"\r\n               :placeholder=\"vjson.placeholder\"\r\n               @click.stop=\"_selectMe\">\r\n    </el-select>\r\n  </yv-design-form-item>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignFormItem from './yv-design-form-item.vue'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonCombo from \"../../vjson/yv-vjson-combo.vue\"\r\nimport YvDesignComboProp from \"./yv-design-combo-prop.vue\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n    YvDesignFormItem,\r\n  },\r\n  data() {\r\n    return {\r\n      oldFieldValue: null, //field组件change之前的值\r\n      fieldModel: '',\r\n    }\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('combo')\r\n    desc.setRuntime('YvVjsonCombo', YvVjsonCombo)\r\n    desc.setDesign('YvDesignCombo', this)\r\n    desc.setProp('YvDesignComboProp', YvDesignComboProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'combo',\r\n        vjson.fieldLabel,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'required', desc: '必填', bindable: true},\r\n      {name: 'fieldLabel', desc: '标签名', bindable: true},\r\n      {name: 'placeholder', desc: '占位符', bindable: true},\r\n      {name: 'disabled', desc: '禁用', bindable: true},\r\n      {name: 'readonly', desc: '只读', bindable: true},\r\n      {name: 'hidden', desc: '隐藏', bindable: true},\r\n      {name: 'size', desc: '大小', bindable: true},\r\n      {name: 'minLength', desc: '最小长度', bindable: true},\r\n      {name: 'maxLength', desc: '最大长度', bindable: true},\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'focus', desc: '获取焦点时触发', events: [{name: 'e'}]},\r\n      {name: 'blur', desc: '失去焦点触发', events: [{name: 'e'}]},\r\n      {name: 'change', desc: '更改时触发', events: [{name: 'e'}]},\r\n      {name: 'input', desc: '输入时触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>","import {renderIcon} from \"../../utils\";\r\nimport _ from \"lodash\";\r\nimport {toRaw} from \"vue\";\r\nimport {calcObjectFlat} from \"../raw/utils\";\r\nimport $ from \"jquery\";\r\n\r\nexport default {\r\n    data() {\r\n        return {\r\n            // 是否因为需要自动选中第一条数据而展开\r\n            expandCauseByAutoSelect: false,\r\n        }\r\n    },\r\n    methods: {\r\n        renderIcon: renderIcon,\r\n\r\n        _buildGridOption(scope, vjson) {\r\n            if (!vjson.widget) {\r\n                console.log('not found widget setting' + vjson.widget, vjson)\r\n                system.showErrorDialog('not found widget setting ' + vjson.widget)\r\n                return\r\n            }\r\n\r\n            let gridOption = _.cloneDeep(toRaw(vjson.widget))\r\n            if (typeof gridOption === 'string') {\r\n                gridOption = _.cloneDeep(window['widgets'][vjson.widget])\r\n            }\r\n            if (!gridOption) {\r\n                console.log('invalid widget:' + vjson.widget, vjson)\r\n                system.showErrorDialog('not setting widget')\r\n                return\r\n            }\r\n\r\n            delete gridOption?.title\r\n            if (gridOption?.dataSource) {\r\n                gridOption.dataSource.paramsFn = (grid) => {\r\n                    let param = {}\r\n                    if (param) {\r\n                        // combogrid 需要带入 param 条件\r\n                        param = calcObjectFlat(scope.$data, vjson.param || {})\r\n                    }\r\n\r\n                    const rawValue = this.$refs.dialogQueryField.value\r\n                    console.log('rawValue', rawValue)\r\n                    param.__queryValue = rawValue\r\n                    return param\r\n                }\r\n            }\r\n            if (gridOption) {\r\n                gridOption.hiLightSelectedRow = true\r\n                gridOption.xtype = 'aggrid'\r\n                gridOption.height = '300px'\r\n                gridOption.width = '300px'\r\n                gridOption.autoLoad = false\r\n                gridOption.pagination = true\r\n                gridOption.mode = 'select'\r\n                gridOption.isBorder = ['1px', '1px', '1px', '1px',]\r\n                gridOption.listeners = {\r\n                    onRowDblClick: this._onGridRowDblClick,\r\n                    onDataLoadComplete: this._onGridDataLoadComplete,\r\n                }\r\n            }\r\n\r\n            return gridOption\r\n        },\r\n\r\n        _onGridDataLoadComplete(grid, me, rows) {\r\n            const expandCauseByAutoSelect = this.expandCauseByAutoSelect\r\n            this.expandCauseByAutoSelect = false\r\n\r\n            if (expandCauseByAutoSelect) {\r\n                // 是因为需要自动选中第一条数据而展开, 就需要自动关闭\r\n                this.collapse()\r\n            }\r\n\r\n            if (rows && _.isArray(rows)) {\r\n                if (rows.length === 1) {\r\n                    // 只有一条数据，直接选中\r\n                    system.msg('只有一条数据，已自动选中')\r\n                    this._onGridRowDblClick(me, {data: rows[0]})\r\n\r\n                } else if (rows.length > 0) {\r\n                    // 有多条数据，选中第一条\r\n                    const grid = this.$refs.dialogQueryGrid\r\n                    _.defer(() => {\r\n                        // console.log('getDisplayedRowCount', grid.api.getDisplayedRowCount())\r\n                        const firstRow = grid.api.getFirstDisplayedRow()\r\n                        if (firstRow >= 0) {\r\n                            grid.api.getDisplayedRowAtIndex(firstRow).setSelected(true)\r\n                        }\r\n                        if (expandCauseByAutoSelect) {\r\n                            // 是因为需要自动选中第一条数据而展开\r\n                            this._onGridRowDblClick(me, {data: rows[0]})\r\n                        }\r\n                    })\r\n                }\r\n            }\r\n        },\r\n\r\n        showPicker() {\r\n            // 窗体被打开，取消“还原值”的计时器\r\n            clearTimeout(this.restoryQueryValueTimeoutHandle)\r\n            this._expanded = true\r\n        },\r\n        _onQueryValueChange(newVal) {\r\n            this.queryValue = newVal\r\n            this.dialogQueryField = this.queryValue\r\n        },\r\n        _onKeydown(e) {\r\n            if (e.keyCode === 13) {\r\n                // 回车键展开\r\n                console.log('keydown', e.keyCode)\r\n                this._onEnterPress()\r\n                // if (this._escPreventDefault !== false) {\r\n                //     // 在表格中，回车键不会触发 grid.cell 的提交，所以这里需要阻止默认行为\r\n                //     e.preventDefault()\r\n                // }\r\n                e.preventDefault()\r\n                return\r\n\r\n            } else if (e.keyCode === 27) {\r\n                // 取消键收回\r\n                this.collapse()\r\n                if (this._escPreventDefault !== false) {\r\n                    e.preventDefault()\r\n                }\r\n                return\r\n            }\r\n        },\r\n        _onTextKeyDown(evt) {\r\n            // 如果按下了回车键，就执行查询，如果按下上下键，执行 aggrid 的上下选择\r\n            if (evt.keyCode === 13) {\r\n                // 回车\r\n                // 如果更改过过滤条件，就触发查询，否则触发 aggrid 的 rowDoubleClicked 事件\r\n                const rawValue = this.$refs.dialogQueryField.value\r\n                if (this.dialogQueryFieldOrigin !== rawValue) {\r\n                    this.$nextTick(() => {\r\n                        this._onDialogQueryClick()\r\n                        this.dialogQueryFieldOrigin = rawValue\r\n                    })\r\n\r\n                } else {\r\n                    const nodes = this.$refs.dialogQueryGrid.api.getSelectedNodes()\r\n                    if (nodes.length === 1) {\r\n                        this._onGridRowDblClick(null, nodes[0])\r\n                        evt.preventDefault()\r\n                    }\r\n                }\r\n\r\n\r\n            } else if (evt.keyCode === 38) {\r\n                this.$refs.dialogQueryGrid._processArrowUp(evt)\r\n                evt.preventDefault()\r\n\r\n            } else if (evt.keyCode === 40) {\r\n                this.$refs.dialogQueryGrid._processArrowDown(evt)\r\n                evt.preventDefault()\r\n            } else if (evt.keyCode === 27) {\r\n                // 如果按下 esc 键，就关闭窗口并回收按键\r\n                this.collapse()\r\n                evt.preventDefault()\r\n            }\r\n        },\r\n        collapse() {\r\n            this._expanded = false\r\n        },\r\n        expand() {\r\n            if (!this._expanded && !this.readonly && !this.disabled) {\r\n                this.showPicker();\r\n            }\r\n        },\r\n\r\n        _onPickerOpened(dom) {\r\n            $(document).on('mousedown', this._collapseIf.bind(this))\r\n            _.defer(() => {\r\n                this.$refs.dialogQueryField.focus()\r\n            })\r\n            setTimeout(() => {\r\n                this.$refs.dialogQueryField.focus()\r\n            }, 5)\r\n            this.dialogQueryFieldOrigin = (this.queryValue === null || this.queryValue === undefined) ? '' : this.queryValue\r\n            this.$refs.dialogQueryField.value = this.dialogQueryFieldOrigin\r\n            this.$refs.dialogQueryGrid.reload()\r\n        },\r\n        _onPickerClosed() {\r\n            this._pickerDOM = null\r\n            $(document).off('mousedown', this._collapseIf.bind(this))\r\n            this.dialogQueryField = null\r\n\r\n            //窗口关闭时，用户输入的值忽略掉，还原为真实值\r\n            this.queryValue = this.realValue\r\n        },\r\n        _onEnterPress() {\r\n            this.expand()\r\n        },\r\n        _onSearchClick() {\r\n            this.expand()\r\n        },\r\n        _onDialogQueryClick(sender) {\r\n            this.$refs.dialogQueryGrid.reload()\r\n            _.defer(() => {\r\n                this.$refs.dialogQueryField?.focus()\r\n            })\r\n        },\r\n    }\r\n}","<template>\r\n  <yv-vjson-form-item v-if=\"!hidden\"\r\n                      ref=\"_formItem\"\r\n                      :vjson=\"vjson\"\r\n                      :vcxt=\"vcxt\"\r\n                      :rules=\"rules\"\r\n                      :dialog-scope=\"dialogScope\"\r\n                      :parentComponent=\"parentComponent\"\r\n                      :parentList=\"parentList\"\r\n                      :indexOfParentList=\"indexOfParentList\"\r\n                      :class=\"[calcClass, 'yv-combogrid']\"\r\n                      :style=\"calcStyle\">\r\n    <el-input :modelValue=\"queryValue\"\r\n              :readonly=\"readonly\"\r\n              :placeholder=\"placeholder\"\r\n              :disabled=\"disabled\"\r\n              :size=\"size\"\r\n              :clearable=\"false\"\r\n              @update:modelValue=\"_onQueryValueChange\"\r\n              @focus=\"_onFocus\" @blur=\"_onBlur\" @keydown=\"_onKeydown\"\r\n              ref=\"_inner\"\r\n              @clear=\"_onClearMe\">\r\n      <template #suffix>\r\n        <el-icon v-if=\"!disabled && !readonly\" style=\"cursor: pointer\" @click.prevent=\"_onClearMe\">\r\n          <CircleClose/>\r\n        </el-icon>\r\n      </template>\r\n      <template #prefix>\r\n        <el-icon ref=\"popoverRef\">\r\n          <component :is=\"renderIcon('fa Search')\" style=\"cursor: pointer\" @click.prevent=\"_onSearchClick\"/>\r\n        </el-icon>\r\n        <el-popover v-if=\"_expanded\"\r\n                    :visible=\"true\"\r\n                    :virtual-ref=\"$refs._inner\"\r\n                    virtual-triggering\r\n                    @after-enter=\"_onPickerOpened\"\r\n                    @after-leave=\"_onPickerClosed\"\r\n                    placement=\"bottom-start\"\r\n                    width=\"850\"\r\n                    popper-class=\"el-popper-combogrid\"\r\n        >\r\n          <el-row class=\"combogrid-search\">\r\n            <input ref=\"dialogQueryField\" type=\"text\" @keydown=\"_onTextKeyDown\"/>\r\n            <el-button type=\"primary\" @click=\"_onDialogQueryClick\">查询</el-button>\r\n          </el-row>\r\n          <component ref=\"dialogQueryGrid\"\r\n                     :is=\"getRuntimeCmp(gridOption)\"\r\n                     :vjson=\"gridOption\"\r\n                     :vcxt=\"vcxt\"\r\n                     :dialog-scope=\"dialogScope\"/>\r\n        </el-popover>\r\n      </template>\r\n    </el-input>\r\n  </yv-vjson-form-item>\r\n</template>\r\n\r\n<script>\r\nimport _ from \"lodash\"\r\nimport $ from 'jquery'\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport {Combogrid} from \"./Defaults\"\r\nimport {renderIcon} from \"../../utils\"\r\nimport YvVjsonFormItem from \"./yv-vjson-form-item.vue\"\r\nimport ComboGridMixin from \"./ComboGridMixin\";\r\nimport {toRaw} from \"vue\"\r\nimport {CircleClose} from '@element-plus/icons-vue'\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix, ComboGridMixin],\r\n  components: {\r\n    YvVjsonFormItem, CircleClose\r\n  },\r\n  data() {\r\n    const data = _.defaults(this.vjson, Combogrid)\r\n    const rules = this._getFormItemBaseRule(data)\r\n    let gridOption = this._buildGridOption(this.vcxt.scope, this.vjson)\r\n\r\n    return {\r\n      _isFirstMount: true,\r\n      fieldLabel: data.fieldLabel,\r\n      rules: rules,\r\n      labelWidth: data.labelWidth,\r\n      placeholder: data.placeholder,\r\n      required: data.required,\r\n      clearable: data.clearable,\r\n      disabled: data.disabled,\r\n      size: data.size,\r\n      bind: data.bind,\r\n      readonly: data.readonly,\r\n      _expanded: false,\r\n      _pickerDOM: null,\r\n      _hideEventListeners: null,\r\n      _escPreventDefault: true,\r\n      allowCustomInput: false,\r\n      gridOption,\r\n      me: this,\r\n      queryValue: undefined,  //用户用来输入的值\r\n    }\r\n  },\r\n  mounted() {\r\n    if (this.vjson.autoSelectFirst && this._isFirstMount && !this.realValue) {\r\n      this._isFirstMount = false\r\n      this.$nextTick(() => {\r\n        this.expandCauseByAutoSelect = true\r\n        this._onSearchClick()\r\n      })\r\n    }\r\n  },\r\n  watch: {\r\n    'realValue': {\r\n      immediate: true,\r\n      handler(newVal) {\r\n        // 真实值发生变化时，用户输入的临时值完全放弃\r\n        this.queryValue = newVal\r\n      }\r\n    },\r\n    'queryValue': {\r\n      handler(newVal) {\r\n        if (this.vjson.allowCustomInput) {\r\n          this._onValueChange(newVal)\r\n        }\r\n      }\r\n    },\r\n    fieldLabel: {\r\n      handler(newVal) {\r\n        this.$refs._formItem.fieldLabel = newVal\r\n      }\r\n    },\r\n    labelWidth: {\r\n      handler(newVal) {\r\n        this.vjson.labelWidth = newVal\r\n      }\r\n    },\r\n    required: {\r\n      handler() {\r\n        this.rules = this._getFormItemBaseRule(this)\r\n        // this.$refs._formItem.required = newVal\r\n      }\r\n    },\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    focus() {\r\n      this.$refs._inner.focus()\r\n    },\r\n    Search() {\r\n\r\n    },\r\n    _onClearMe(e) {\r\n      // 清空\r\n      this.runEvent('clearMe', ...arguments)\r\n\r\n      // 根据 lookup 属性，相关联的属性全部清空\r\n      const lookup = toRaw(this.vjson.lookup)\r\n      _.forOwn(lookup, (writeTarget, gridColumn) => {\r\n        if (_.startsWith(writeTarget, '{')) {\r\n          writeTarget = writeTarget.substring(1)\r\n        }\r\n        if (_.endsWith(writeTarget, '}')) {\r\n          writeTarget = writeTarget.substring(0, writeTarget.length - 1)\r\n        }\r\n        _.set(this.vcxt.scope, writeTarget, '')\r\n      })\r\n\r\n      this.$nextTick(() => {\r\n        this.runEvent('change', ...arguments)\r\n      })\r\n    },\r\n    _onGridRowDblClick(grid, event) {\r\n      // 选中数据\r\n      const record = event.data\r\n      const lookup = toRaw(this.vjson.lookup)\r\n      // 回写值\r\n      _.forOwn(lookup, (writeTarget, gridColumn) => {\r\n        if (_.startsWith(writeTarget, '{')) {\r\n          writeTarget = writeTarget.substring(1)\r\n        }\r\n        if (_.endsWith(writeTarget, '}')) {\r\n          writeTarget = writeTarget.substring(0, writeTarget.length - 1)\r\n        }\r\n        _.set(this.vcxt.scope, writeTarget, _.get(record, gridColumn))\r\n      })\r\n      this.collapse()\r\n\r\n      this.$nextTick(() => {\r\n        this.runEvent('change', ...arguments)\r\n      })\r\n    },\r\n    _collapseIf(e) {\r\n      /**\r\n       * 判断鼠标是不是点击在外头，需要关闭弹窗\r\n       */\r\n      const me = this;\r\n\r\n      if (me._destroyed) {\r\n        // 已经销毁，不管\r\n        return\r\n      }\r\n\r\n      let target = e.target\r\n      if (e.toElement) {\r\n        // focus 跳转\r\n        target = e.toElement\r\n      }\r\n\r\n      if ($(target).closest('.el-popover').length === 0 &&\r\n          $(target).closest('.el-select__popper').length === 0 &&\r\n          $(target).closest(this.$el).length === 0) {\r\n        me.collapse();\r\n      }\r\n    },\r\n\r\n    _onFocus(e) {\r\n      // getListener(this.vjson, 'focus', this.vcxt)(this, this.vcxt.scope, e)\r\n      this.runEvent('focus', ...arguments)\r\n    },\r\n    _onBlur(e) {\r\n      if (!this.vjson.allowCustomInput) {\r\n        this.restoryQueryValueTimeoutHandle = setTimeout(() => {\r\n          //离开焦点时，用户输入的置为无效\r\n          this.queryValue = this.realValue\r\n\r\n        }, 100)\r\n      }\r\n\r\n      // getListener(this.vjson, 'blur', this.vcxt)(this, this.vcxt.scope, e)\r\n      this.runEvent('blur', ...arguments)\r\n    },\r\n    _onInput(e) {\r\n      // getListener(this.vjson, 'input', this.vcxt)(this, this.vcxt.scope, e)\r\n      this.runEvent('input', ...arguments)\r\n    },\r\n    _onChange(e) {\r\n      this.runEvent('change', ...arguments)\r\n    },\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.el-popper.el-popper-combogrid {\r\n  height: 500px;\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  .combogrid-search {\r\n    display: flex;\r\n    flex-direction: row;\r\n    margin-bottom: 10px;\r\n\r\n    input {\r\n      flex: 1;\r\n      margin-right: 6px;\r\n      border-radius: 3px;\r\n      border: 1px solid var(--frist-border-color);\r\n      padding-left: 10px;\r\n      transition: border .3s ease;\r\n\r\n      &:focus, &:hover {\r\n        outline: none;\r\n      }\r\n\r\n      &:hover {\r\n        border-color: #b8bcc5\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"property tabs-property\">\r\n    <div class=\"title\">combogrid 属性</div>\r\n    <el-tabs>\r\n      <el-tab-pane label=\"基本\">\r\n        <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n                 size=\"default\" @submit.native.prevent>\r\n          <el-form-item label=\"reference\" prop=\"reference\">\r\n            <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"modal\" prop=\"bindValue\">\r\n            <el-input v-model=\"bindValue\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"uiKey\" prop=\"uiKey\">\r\n            <el-input v-model=\"formData.uiKey\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"权限\" prop=\"permissions\">\r\n            <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <el-form-item label=\"标签名\" prop=\"fieldLabel\">\r\n            <el-input v-model=\"formData.fieldLabel\" type=\"text\"></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"必填\" prop=\"required\">\r\n            <el-switch v-model=\"formData.required\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"允许随意输入(不用选择)\" prop=\"allowCustomInput\" label-width=\"auto\">\r\n            <el-switch v-model=\"formData.allowCustomInput\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"自动选中第一项\" prop=\"allowCustomInput\" label-width=\"auto\">\r\n            <el-switch v-model=\"formData.autoSelectFirst\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"权重\" prop=\"weight\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"(formData.weight === 1 || !formData.weight)? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=1\">1\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 2? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=2\">2\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 3? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=3\">3\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 4? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=4\">4\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 5? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=5\">5\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 6? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=6\">6\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"标签宽度\" prop=\"formData.text\">\r\n            <el-input v-model=\"formData.labelWidth\" type=\"text\" placeholder=\"auto\"></el-input>\r\n          </el-form-item>\r\n          <!--\r\n          <el-form-item label=\"立刻校验\" prop=\"validateOnRuleChange\">\r\n            <el-switch v-model=\"formData.validateOnRuleChange\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"显示错误\" prop=\"showMessage\">\r\n            <el-switch v-model=\"formData.showMessage\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"内联错误\" prop=\"inlineMessage\">\r\n            <el-switch v-model=\"formData.inlineMessage\"></el-switch>\r\n          </el-form-item>\r\n          -->\r\n          <el-form-item label=\"尺寸\" prop=\"size\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.size === 'large'? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='large'\">大\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"(formData.size === 'default' || !formData.size)? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='default'\">中\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.size === 'small'? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='small'\">小\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"占位字符\" prop=\"placeholder\">\r\n            <el-input v-model=\"formData.placeholder\" type=\"text\"></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"最大长度\" prop=\"maxlength\">\r\n            <el-input v-model=\"formData.maxlength\" type=\"text\"></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"禁用\" prop=\"disabled\">\r\n            <el-switch v-model=\"formData.disabled\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"只读\" prop=\"readonly\">\r\n            <el-switch v-model=\"formData.readonly\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"隐藏\" prop=\"hidden\">\r\n            <el-switch v-model=\"formData.hidden\"></el-switch>\r\n          </el-form-item>\r\n          <yv-design-input-width :designer=\"designer\" :form-data=\"formData\"/>\r\n        </el-form>\r\n      </el-tab-pane>\r\n      <el-tab-pane label=\"数据\">\r\n        <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n                 size=\"default\" @submit.native.prevent>\r\n          <el-form-item label=\"数据弹窗\" prop=\"widget\">\r\n            <el-select v-model=\"formData.widget\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"widgetItem in getWidgetList()\"\r\n                  :key=\"widgetItem.key\"\r\n                  :label=\"widgetItem.title\"\r\n                  :value=\"widgetItem.key\"\r\n                  :data=\"widgetItem.value\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-divider content-position=\"left\">搜索条件</el-divider>\r\n          <div class=\"enumeration enumeration-title\">\r\n            <div class=\"enumeration-col\">字段</div>\r\n            <div class=\"enumeration-col\">表达式</div>\r\n            <div class=\"enumeration-col\" style=\"width: 30px;\"></div>\r\n          </div>\r\n          <div class=\"enumeration\" v-for=\"(param, index) in paramArr\">\r\n            <div class=\"enumeration-col\">\r\n              <el-input v-model=\"param.key\" type=\"text\" clearable/>\r\n            </div>\r\n            <div class=\"enumeration-col\">\r\n              <YvDesignInputExpress v-model=\"param.targetExpress\" :designer=\"designer\"/>\r\n            </div>\r\n            <div class=\"enumeration-col\">\r\n              <span class=\"iconfont icon-shanchu1\" @click=\"(button)=>removeParam(button, index)\"></span>\r\n            </div>\r\n          </div>\r\n          <el-button type=\"primary\" :icon=\"renderIcon('fa Plus')\" link @click=\"addNewParam\" class=\"enumeration-add-btn\">\r\n            添加一项\r\n          </el-button>\r\n          <el-divider content-position=\"left\">回填字段</el-divider>\r\n          <el-form v-for=\"item in lookupArr\" :model=\"item\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\"\r\n                   label-width=\"80px\"\r\n                   size=\"default\" @submit.native.prevent>\r\n            <el-form-item :label=\"item.text\">\r\n              <div>{{ item.key }}</div>\r\n              <!--\r\n              <el-tree-select v-model=\"item.value\" :data=\"modelData\"\r\n                              @change=\"(bindValue)=>_lookupItemChange(item, bindValue)\"\r\n                              @keyup=\"(evt)=>_lookupEnterNew(item,evt)\"\r\n                              :filterable=\"true\"\r\n                              :allow-create=\"true\"\r\n                              default-expand-all/>\r\n               -->\r\n              <el-select v-model=\"item.value\"\r\n                         clearable\r\n                         @change=\"(bindValue)=>_lookupItemChange(item, bindValue)\"\r\n                         @keyup=\"(evt)=>_lookupEnterNew(item,evt)\"\r\n                         @clear=\"_lookupClear(item)\"\r\n                         :filterable=\"true\"\r\n                         :allow-create=\"true\">\r\n                <el-option v-for=\"binds in createModelDataWithValue(item.value)\" :label=\"binds\"\r\n                           :value=\"binds\"/>\r\n              </el-select>\r\n\r\n            </el-form-item>\r\n          </el-form>\r\n        </el-form>\r\n      </el-tab-pane>\r\n    </el-tabs>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport VJsonContext from \"../../vjson/VJsonContext\";\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignInputExpress from './yv-design-input-express.vue'\r\nimport YvDesignInputWidth from \"./yv-design-input-width.vue\"\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  components: {YvDesignInputWidth, YvDesignInputExpress, YvDesignerPermissions},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        fieldLabel: this.vjson.fieldLabel,\r\n        labelWidth: this.vjson.labelWidth,\r\n        required: this.vjson.required ?? false,\r\n        showMessage: this.vjson.showMessage ?? true,\r\n        inlineMessage: this.vjson.inlineMessage ?? false,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        placeholder: this.vjson.placeholder,\r\n        maxlength: this.vjson.maxlength,\r\n        showPassword: this.vjson.showPassword,\r\n        readonly: this.vjson.readonly ?? false,\r\n        weight: this.vjson.weight,\r\n        bind: this.vjson.bind,\r\n        widget: this.vjson.widget,\r\n        lookup: this.vjson.lookup,\r\n        param: this.vjson.param\r\n      },\r\n      modelData: this.getModelData(),\r\n      paramArr: [],\r\n    }\r\n  },\r\n  computed: {\r\n    currentWidget() {\r\n      return window['widgets'][this.formData.widget]\r\n    },\r\n    lookupArr() {\r\n      const currentWidget = this.currentWidget;\r\n      const lookup = this.formData.lookup\r\n      if (!currentWidget) {\r\n        return []\r\n\r\n      } else {\r\n        const lookupArr = []\r\n        for (let i = 0; i < currentWidget.columns.length; i++) {\r\n          const column = currentWidget.columns[i]\r\n          const lookupItem = {key: column.dataIndex, text: column.header || column.text, value: \"\"}\r\n          _.forOwn(lookup, (targetExpress, sourceGridColumn) => {\r\n            if (sourceGridColumn === column.dataIndex) {\r\n              lookupItem.value = targetExpress\r\n              return\r\n            }\r\n          })\r\n          lookupArr.push(lookupItem)\r\n        }\r\n        return lookupArr\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    _lookupItemChange(gridColumnItem, bindValue) {\r\n      this.formData.lookup[gridColumnItem.key] = bindValue\r\n    },\r\n    _lookupEnterNew(item, evt) {\r\n      if (evt.keyCode === 13) {\r\n        this.formData.lookup[item.key] = evt.target.value\r\n        evt.preventDefault()\r\n      }\r\n    },\r\n    _lookupClear(item) {\r\n      delete this.formData.lookup[item.key]\r\n    },\r\n    getWidgetList() {\r\n      const ret = []\r\n      _.forOwn(window['widgets'], (value, key) => {\r\n        ret.push({key: key, title: value.title, value})\r\n      })\r\n      return ret\r\n    },\r\n    createModelDataWithValue(value) {\r\n      if (!value) {\r\n        return this.modelData\r\n      }\r\n\r\n      const bindItem = _.find(this.modelData, value)\r\n      if (!bindItem) {\r\n        return [\r\n          value,\r\n          ...this.modelData\r\n        ]\r\n\r\n      } else {\r\n        return this.modelData\r\n      }\r\n    },\r\n    getModelData() {\r\n      // 构建根级变量\r\n      const dataRoot = this.designer.buildVExportData('reviewOnly')\r\n\r\n      /**\r\n       * 将根级变量，变换为树形结构\r\n       */\r\n      const root = {children: []}\r\n      const dropdowns = []\r\n\r\n      function travVar(parent, obj, objk) {\r\n        _.forOwn(obj, (v, key) => {\r\n          if (objk) {\r\n            key = objk + \".\" + key\r\n          }\r\n          const node = {\r\n            value: \"{\" + key + \"}\"\r\n          }\r\n          dropdowns.push(\"{\" + key + \"}\")\r\n          parent.children.push(node)\r\n\r\n          if (typeof v === 'object') {\r\n            node.children = []\r\n            travVar(node, v, key)\r\n          }\r\n        })\r\n      }\r\n\r\n      travVar(root, dataRoot)\r\n      return dropdowns //root.children\r\n    },\r\n\r\n    removeParam(button, index) {\r\n      this.paramArr.splice(index, 1)\r\n    },\r\n    addNewParam() {\r\n      this.paramArr.push({key: \"\", targetExpress: \"\"})\r\n    },\r\n  },\r\n  watch: {\r\n    'formData.widget': {\r\n      handler(newVal, oldVal) {\r\n        this.formData.lookup = {}\r\n      }\r\n    },\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        const param = this.formData.param\r\n        this.paramArr = []\r\n\r\n        const deepTrav = (obj, key) => {\r\n          _.forOwn(obj, (targetExpress, subKey) => {\r\n            let allKey\r\n            if (key) {\r\n              allKey = key + \".\" + subKey\r\n            } else {\r\n              allKey = subKey\r\n            }\r\n            if (typeof targetExpress === 'string') {\r\n              this.paramArr.push({\r\n                key: allKey,\r\n                targetExpress\r\n              })\r\n            } else if (typeof targetExpress === 'object') {\r\n              deepTrav(targetExpress, allKey)\r\n            }\r\n          })\r\n        }\r\n        deepTrav(param)\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    },\r\n    'paramArr': {\r\n      // immediate: true,\r\n      deep: true,\r\n      handler(newVal, oldVal) {\r\n        if (this.formData.xtype === 'combogrid') {\r\n          const a = {}\r\n          _.forEach(newVal, (item, index) => {\r\n            if (item.key) {\r\n              _.set(a, item.key, item.targetExpress)\r\n            }\r\n          })\r\n          if (a === {}) {\r\n            delete this.formData.param\r\n          } else {\r\n            this.formData.param = a\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.enumeration {\r\n  &.enumeration-title {\r\n    color: #333;\r\n    font-size: 14px;\r\n    margin-bottom: 5px;\r\n  }\r\n\r\n  margin-bottom: 5px;\r\n  display: flex;\r\n  flex-direction: row;\r\n\r\n  .enumeration-col {\r\n    &:nth-child(1), &:nth-child(2) {\r\n      flex: 1;\r\n      padding-right: 3px;\r\n    }\r\n\r\n    &:nth-child(3) {\r\n      line-height: 32px;\r\n\r\n      span:nth-child(1) {\r\n        cursor: pointer;\r\n        margin: 0 5px 0 0\r\n      }\r\n    }\r\n\r\n    .el-input__wrapper {\r\n      border-radius: 0;\r\n    }\r\n  }\r\n}\r\n\r\n.enumeration-add-btn {\r\n  color: var(--main-color)\r\n}\r\n\r\n.property.tabs-property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  .el-tabs {\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n\r\n    .el-tabs__header {\r\n      .el-tabs__item {\r\n        padding: 0 10px;\r\n      }\r\n\r\n      .el-tabs__item.is-active, .el-tabs__item:hover {\r\n        color: #000;\r\n      }\r\n\r\n      .el-tabs__active-bar {\r\n        background-color: var(--main-color)\r\n      }\r\n    }\r\n\r\n    .el-tabs__content {\r\n      flex: 1;\r\n      overflow: auto;\r\n    }\r\n  }\r\n\r\n  form {\r\n    overflow-x: hidden;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <yv-design-form-item :designer=\"designer\" :vjson=\"vjson\" :vcxt=\"vcxt\"\r\n                       :parent-component=\"parentComponent\" :parent-list=\"parentList\"\r\n                       :index-of-parent-list=\"indexOfParentList\"\r\n                       :class=\"[calcClass, 'yv-combogrid']\"\r\n                       :style=\"calcStyle\"\r\n                       @selectme.native=\"_selectMe\"\r\n                       @click.stop=\"_selectMe\">\r\n    <el-input :placeholder=\"this.vjson.placeholder ?? '请输入'\">\r\n      <template #suffix>\r\n        <el-icon>\r\n          <CircleClose style=\"cursor: pointer\"/>\r\n        </el-icon>\r\n      </template>\r\n      <template #prefix>\r\n        <el-icon style=\"cursor: pointer\">\r\n          <Search/>\r\n        </el-icon>\r\n      </template>\r\n    </el-input>\r\n  </yv-design-form-item>\r\n</template>\r\n\r\n<script>\r\nimport {CircleClose, Search} from '@element-plus/icons-vue'\r\nimport YvDesignFormItem from './yv-design-form-item.vue'\r\nimport Designer from \"../designer\"\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonCombogrid from \"../../vjson/yv-vjson-combogrid.vue\"\r\nimport YvDesignCombogridProp from \"./yv-design-combogrid-prop.vue\"\r\nimport _ from \"lodash\";\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n    CircleClose, Search,\r\n    YvDesignFormItem,\r\n  },\r\n  data() {\r\n    return {\r\n      oldFieldValue: null, //field组件change之前的值\r\n      fieldModel: '',\r\n    }\r\n  },\r\n  computed: {\r\n    inputType() {\r\n      if (this.vjson.type === 'number') {\r\n        return 'text'  //当input的type设置为number时，如果输入非数字字符，则v-model拿到的值为空字符串，无法实现输入校验！故屏蔽之！！\r\n      }\r\n\r\n      return this.vjson.type\r\n    },\r\n\r\n  },\r\n  beforeCreate() {\r\n    /* 这里不能访问方法和属性！！ */\r\n  },\r\n\r\n  created() {\r\n    /* 注意：子组件mounted在父组件created之后、父组件mounted之前触发，故子组件mounted需要用到的prop\r\n       需要在父组件created中初始化！！\r\n    this.initFieldModel()\r\n    this.registerToRefList()\r\n    this.initEventHandler()\r\n    this.buildFieldRules()\r\n\r\n    this.handleOnCreated()\r\n     */\r\n  },\r\n\r\n  mounted() {\r\n    // this.handleOnMounted()\r\n  },\r\n\r\n  beforeUnmount() {\r\n    // this.unregisterFromRefList()\r\n  },\r\n\r\n  methods: {\r\n    handleOnClickOutside() {\r\n    },\r\n    handleOnClear() {\r\n    },\r\n    handleClearMe() {\r\n    },\r\n    handleShowPopover() {\r\n    },\r\n  },\r\n\r\n  /**\r\n   * 为表格准备 vexport.data 属性.\r\n   * 用来在设计时，给组件安插数据属性, 为运行时的 vue 构建 data:{} 添加属性\r\n   */\r\n  buildVExportData(vjson, dataRoot, useFor) {\r\n    if (vjson.lookup) {\r\n      _.forOwn(vjson.lookup, (targetExpress, widgetColumn) => {\r\n        if (_.startsWith(targetExpress, '{') && _.endsWith(targetExpress, '}') && _.size(targetExpress) > 2) {\r\n          if (useFor === 'reviewOnly') {\r\n            _.set(dataRoot, targetExpress.substring(1, targetExpress.length - 1), vjson.id)\r\n\r\n          } else {\r\n            _.set(dataRoot, targetExpress.substring(1, targetExpress.length - 1), null)\r\n          }\r\n        }\r\n      })\r\n    }\r\n    if (vjson.bind) {\r\n      _.forOwn(vjson.bind, (targetExpress, bindProp) => {\r\n        if (_.startsWith(targetExpress, '{') && _.endsWith(targetExpress, '}') && _.size(targetExpress) > 2) {\r\n          if (useFor === 'reviewOnly') {\r\n            _.set(dataRoot, targetExpress.substring(1, targetExpress.length - 1), vjson.id)\r\n\r\n          } else {\r\n            _.set(dataRoot, targetExpress.substring(1, targetExpress.length - 1), null)\r\n          }\r\n        }\r\n      })\r\n    }\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('combogrid')\r\n    desc.setRuntime('YvVjsonCombogrid', YvVjsonCombogrid)\r\n    desc.setDesign('YvDesignCombogrid', this)\r\n    desc.setProp('YvDesignCombogridProp', YvDesignCombogridProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'combogrid',\r\n        vjson.fieldLabel,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'required', desc: '必填', bindable: true},\r\n      {name: 'fieldLabel', desc: '标签名', bindable: true},\r\n      {name: 'placeholder', desc: '占位符', bindable: true},\r\n      {name: 'disabled', desc: '禁用', bindable: true},\r\n      {name: 'readonly', desc: '只读', bindable: true},\r\n      {name: 'hidden', desc: '隐藏', bindable: true},\r\n      {name: 'size', desc: '大小', bindable: true},\r\n      {name: 'minLength', desc: '最小长度', bindable: true},\r\n      {name: 'maxLength', desc: '最大长度', bindable: true},\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'focus', desc: '获取焦点时触发', events: [{name: 'e'}]},\r\n      {name: 'blur', desc: '失去焦点触发', events: [{name: 'e'}]},\r\n      {name: 'change', desc: '更改时触发', events: [{name: 'e'}]},\r\n      {name: 'input', desc: '输入时触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>","<template>\r\n  <yv-vjson-form-item v-if=\"!hidden\"\r\n                      ref=\"_formItem\"\r\n                      :vjson=\"vjson\"\r\n                      :vcxt=\"vcxt\"\r\n                      :rules=\"rules\"\r\n                      :dialog-scope=\"dialogScope\"\r\n                      :parentComponent=\"parentComponent\"\r\n                      :parentList=\"parentList\"\r\n                      :indexOfParentList=\"indexOfParentList\"\r\n                      :class=\"[calcClass, 'yv-combosearch']\"\r\n                      :style=\"calcStyle\">\r\n    <el-input :modelValue=\"queryValue\"\r\n              :readonly=\"readonly\"\r\n              :placeholder=\"placeholder\"\r\n              :disabled=\"disabled\"\r\n              :size=\"size\"\r\n              :clearable=\"false\"\r\n              @update:modelValue=\"_onQueryValueChange\"\r\n              @focus=\"_onFocus\" @blur=\"_onBlur\" @keydown=\"_onKeydown\"\r\n              ref=\"_inner\"\r\n              @clear=\"_onClearMe\">\r\n      <template #suffix>\r\n        <el-icon v-if=\"!disabled && !readonly\" style=\"cursor: pointer\" @click.prevent=\"_onClearMe\">\r\n          <CircleClose/>\r\n        </el-icon>\r\n      </template>\r\n      <template #prefix>\r\n        <el-icon ref=\"popoverRef\">\r\n          <component :is=\"renderIcon('fa Search')\" style=\"cursor: pointer\" @click.prevent=\"_onSearchClick\"/>\r\n        </el-icon>\r\n      </template>\r\n    </el-input>\r\n  </yv-vjson-form-item>\r\n</template>\r\n\r\n<script>\r\nimport _ from \"lodash\"\r\nimport $ from 'jquery'\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport {Combosearch} from \"./Defaults\"\r\nimport {renderIcon} from \"../../utils\"\r\nimport YvVjsonFormItem from \"./yv-vjson-form-item.vue\"\r\nimport {toRaw} from \"vue\"\r\nimport {CircleClose} from '@element-plus/icons-vue'\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  components: {\r\n    YvVjsonFormItem, CircleClose\r\n  },\r\n  data() {\r\n    const data = _.defaults(this.vjson, Combosearch)\r\n    const rules = this._getFormItemBaseRule(data)\r\n\r\n    return {\r\n      _isFirstMount: true,\r\n      fieldLabel: data.fieldLabel,\r\n      rules: rules,\r\n      labelWidth: data.labelWidth,\r\n      placeholder: data.placeholder,\r\n      required: data.required,\r\n      clearable: data.clearable,\r\n      disabled: data.disabled,\r\n      size: data.size,\r\n      bind: data.bind,\r\n      readonly: data.readonly,\r\n      _expanded: false,\r\n      _pickerDOM: null,\r\n      _hideEventListeners: null,\r\n      _escPreventDefault: true,\r\n      allowCustomInput: false,\r\n      me: this,\r\n      queryValue: undefined,  //用户用来输入的值\r\n    }\r\n  },\r\n  mounted() {\r\n  },\r\n  watch: {\r\n    'realValue': {\r\n      immediate: true,\r\n      handler(newVal) {\r\n        // 真实值发生变化时，用户输入的临时值完全放弃\r\n        this.queryValue = newVal\r\n      }\r\n    },\r\n    'queryValue': {\r\n      handler(newVal) {\r\n        if (this.vjson.allowCustomInput) {\r\n          this._onValueChange(newVal)\r\n        }\r\n      }\r\n    },\r\n    fieldLabel: {\r\n      handler(newVal) {\r\n        this.$refs._formItem.fieldLabel = newVal\r\n      }\r\n    },\r\n    labelWidth: {\r\n      handler(newVal) {\r\n        this.vjson.labelWidth = newVal\r\n      }\r\n    },\r\n    required: {\r\n      handler() {\r\n        this.rules = this._getFormItemBaseRule(this)\r\n        // this.$refs._formItem.required = newVal\r\n      }\r\n    },\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    focus() {\r\n      this.$refs._inner.focus()\r\n    },\r\n    Search() {\r\n\r\n    },\r\n    _onKeydown(e) {\r\n      if (e.keyCode === 13) {\r\n        // 回车键展开\r\n        this._onEnterPress()\r\n        e.preventDefault()\r\n      }\r\n    },\r\n    _onEnterPress() {\r\n      this.expand()\r\n    },\r\n    _onQueryValueChange(newVal) {\r\n      this.queryValue = newVal\r\n    },\r\n    _onSearchClick() {\r\n      this.expand()\r\n    },\r\n    expand() {\r\n      this.runEvent('search', ...arguments)\r\n    },\r\n    _onClearMe(e) {\r\n      // 清空\r\n      this.runEvent('clearMe', ...arguments)\r\n\r\n      // 根据 lookup 属性，相关联的属性全部清空\r\n      const lookup = toRaw(this.vjson.lookup)\r\n      _.forOwn(lookup, (writeTarget, gridColumn) => {\r\n        if (_.startsWith(writeTarget, '{')) {\r\n          writeTarget = writeTarget.substring(1)\r\n        }\r\n        if (_.endsWith(writeTarget, '}')) {\r\n          writeTarget = writeTarget.substring(0, writeTarget.length - 1)\r\n        }\r\n        _.set(this.vcxt.scope, writeTarget, '')\r\n      })\r\n\r\n      this.$nextTick(() => {\r\n        this.runEvent('change', ...arguments)\r\n      })\r\n    },\r\n    _onFocus(e) {\r\n      // getListener(this.vjson, 'focus', this.vcxt)(this, this.vcxt.scope, e)\r\n      this.runEvent('focus', ...arguments)\r\n    },\r\n    _onBlur(e) {\r\n      if (!this.vjson.allowCustomInput) {\r\n        this.restoryQueryValueTimeoutHandle = setTimeout(() => {\r\n          //离开焦点时，用户输入的置为无效\r\n          this.queryValue = this.realValue\r\n\r\n        }, 100)\r\n      }\r\n\r\n      // getListener(this.vjson, 'blur', this.vcxt)(this, this.vcxt.scope, e)\r\n      this.runEvent('blur', ...arguments)\r\n    },\r\n    _onInput(e) {\r\n      // getListener(this.vjson, 'input', this.vcxt)(this, this.vcxt.scope, e)\r\n      this.runEvent('input', ...arguments)\r\n    },\r\n    _onChange(e) {\r\n      this.runEvent('change', ...arguments)\r\n    },\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.el-popper.el-popper-combogrid {\r\n  height: 500px;\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  .combogrid-search {\r\n    display: flex;\r\n    flex-direction: row;\r\n    margin-bottom: 10px;\r\n\r\n    input {\r\n      flex: 1;\r\n      margin-right: 6px;\r\n      border-radius: 3px;\r\n      border: 1px solid var(--frist-border-color);\r\n      padding-left: 10px;\r\n      transition: border .3s ease;\r\n\r\n      &:focus, &:hover {\r\n        outline: none;\r\n      }\r\n\r\n      &:hover {\r\n        border-color: #b8bcc5\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"property tabs-property\">\r\n    <div class=\"title\">search 属性</div>\r\n    <el-tabs>\r\n      <el-tab-pane label=\"基本\">\r\n        <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n                 size=\"default\" @submit.native.prevent>\r\n          <el-form-item label=\"reference\" prop=\"reference\">\r\n            <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"modal\" prop=\"bindValue\">\r\n            <el-input v-model=\"bindValue\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"uiKey\" prop=\"uiKey\">\r\n            <el-input v-model=\"formData.uiKey\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"权限\" prop=\"permissions\">\r\n            <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <el-form-item label=\"标签名\" prop=\"fieldLabel\">\r\n            <el-input v-model=\"formData.fieldLabel\" type=\"text\"></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"必填\" prop=\"required\">\r\n            <el-switch v-model=\"formData.required\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"允许随意输入(不用选择)\" prop=\"allowCustomInput\" label-width=\"auto\">\r\n            <el-switch v-model=\"formData.allowCustomInput\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"自动选中第一项\" prop=\"allowCustomInput\" label-width=\"auto\">\r\n            <el-switch v-model=\"formData.autoSelectFirst\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"权重\" prop=\"weight\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"(formData.weight === 1 || !formData.weight)? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=1\">1\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 2? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=2\">2\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 3? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=3\">3\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 4? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=4\">4\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 5? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=5\">5\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.weight === 6? 'primary':'default'\"\r\n                         @click=\"()=>formData.weight=6\">6\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"标签宽度\" prop=\"formData.text\">\r\n            <el-input v-model=\"formData.labelWidth\" type=\"text\" placeholder=\"auto\"></el-input>\r\n          </el-form-item>\r\n          <!--\r\n          <el-form-item label=\"立刻校验\" prop=\"validateOnRuleChange\">\r\n            <el-switch v-model=\"formData.validateOnRuleChange\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"显示错误\" prop=\"showMessage\">\r\n            <el-switch v-model=\"formData.showMessage\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"内联错误\" prop=\"inlineMessage\">\r\n            <el-switch v-model=\"formData.inlineMessage\"></el-switch>\r\n          </el-form-item>\r\n          -->\r\n          <el-form-item label=\"尺寸\" prop=\"size\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.size === 'large'? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='large'\">大\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"(formData.size === 'default' || !formData.size)? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='default'\">中\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.size === 'small'? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='small'\">小\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"占位字符\" prop=\"placeholder\">\r\n            <el-input v-model=\"formData.placeholder\" type=\"text\"></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"最大长度\" prop=\"maxlength\">\r\n            <el-input v-model=\"formData.maxlength\" type=\"text\"></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"禁用\" prop=\"disabled\">\r\n            <el-switch v-model=\"formData.disabled\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"只读\" prop=\"readonly\">\r\n            <el-switch v-model=\"formData.readonly\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"隐藏\" prop=\"hidden\">\r\n            <el-switch v-model=\"formData.hidden\"></el-switch>\r\n          </el-form-item>\r\n          <yv-design-input-width :designer=\"designer\" :form-data=\"formData\"/>\r\n        </el-form>\r\n      </el-tab-pane>\r\n    </el-tabs>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport VJsonContext from \"../../vjson/VJsonContext\";\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignInputExpress from './yv-design-input-express.vue'\r\nimport YvDesignInputWidth from \"./yv-design-input-width.vue\"\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  components: {YvDesignInputWidth, YvDesignInputExpress, YvDesignerPermissions},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        fieldLabel: this.vjson.fieldLabel,\r\n        labelWidth: this.vjson.labelWidth,\r\n        required: this.vjson.required ?? false,\r\n        showMessage: this.vjson.showMessage ?? true,\r\n        inlineMessage: this.vjson.inlineMessage ?? false,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        placeholder: this.vjson.placeholder,\r\n        maxlength: this.vjson.maxlength,\r\n        showPassword: this.vjson.showPassword,\r\n        readonly: this.vjson.readonly ?? false,\r\n        weight: this.vjson.weight,\r\n        bind: this.vjson.bind,\r\n        widget: this.vjson.widget,\r\n        lookup: this.vjson.lookup,\r\n        param: this.vjson.param\r\n      },\r\n      modelData: this.getModelData(),\r\n      paramArr: [],\r\n    }\r\n  },\r\n  computed: {\r\n    currentWidget() {\r\n      return window['widgets'][this.formData.widget]\r\n    },\r\n    lookupArr() {\r\n      const currentWidget = this.currentWidget;\r\n      const lookup = this.formData.lookup\r\n      if (!currentWidget) {\r\n        return []\r\n\r\n      } else {\r\n        const lookupArr = []\r\n        for (let i = 0; i < currentWidget.columns.length; i++) {\r\n          const column = currentWidget.columns[i]\r\n          const lookupItem = {key: column.dataIndex, text: column.header || column.text, value: \"\"}\r\n          _.forOwn(lookup, (targetExpress, sourceGridColumn) => {\r\n            if (sourceGridColumn === column.dataIndex) {\r\n              lookupItem.value = targetExpress\r\n              return\r\n            }\r\n          })\r\n          lookupArr.push(lookupItem)\r\n        }\r\n        return lookupArr\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    _lookupItemChange(gridColumnItem, bindValue) {\r\n      this.formData.lookup[gridColumnItem.key] = bindValue\r\n    },\r\n    _lookupEnterNew(item, evt) {\r\n      if (evt.keyCode === 13) {\r\n        this.formData.lookup[item.key] = evt.target.value\r\n        evt.preventDefault()\r\n      }\r\n    },\r\n    _lookupClear(item) {\r\n      delete this.formData.lookup[item.key]\r\n    },\r\n    getWidgetList() {\r\n      const ret = []\r\n      _.forOwn(window['widgets'], (value, key) => {\r\n        ret.push({key: key, title: value.title, value})\r\n      })\r\n      return ret\r\n    },\r\n    createModelDataWithValue(value) {\r\n      if (!value) {\r\n        return this.modelData\r\n      }\r\n\r\n      const bindItem = _.find(this.modelData, value)\r\n      if (!bindItem) {\r\n        return [\r\n          value,\r\n          ...this.modelData\r\n        ]\r\n\r\n      } else {\r\n        return this.modelData\r\n      }\r\n    },\r\n    getModelData() {\r\n      // 构建根级变量\r\n      const dataRoot = this.designer.buildVExportData('reviewOnly')\r\n\r\n      /**\r\n       * 将根级变量，变换为树形结构\r\n       */\r\n      const root = {children: []}\r\n      const dropdowns = []\r\n\r\n      function travVar(parent, obj, objk) {\r\n        _.forOwn(obj, (v, key) => {\r\n          if (objk) {\r\n            key = objk + \".\" + key\r\n          }\r\n          const node = {\r\n            value: \"{\" + key + \"}\"\r\n          }\r\n          dropdowns.push(\"{\" + key + \"}\")\r\n          parent.children.push(node)\r\n\r\n          if (typeof v === 'object') {\r\n            node.children = []\r\n            travVar(node, v, key)\r\n          }\r\n        })\r\n      }\r\n\r\n      travVar(root, dataRoot)\r\n      return dropdowns //root.children\r\n    },\r\n\r\n    removeParam(button, index) {\r\n      this.paramArr.splice(index, 1)\r\n    },\r\n    addNewParam() {\r\n      this.paramArr.push({key: \"\", targetExpress: \"\"})\r\n    },\r\n  },\r\n  watch: {\r\n    'formData.widget': {\r\n      handler(newVal, oldVal) {\r\n        this.formData.lookup = {}\r\n      }\r\n    },\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        const param = this.formData.param\r\n        this.paramArr = []\r\n\r\n        const deepTrav = (obj, key) => {\r\n          _.forOwn(obj, (targetExpress, subKey) => {\r\n            let allKey\r\n            if (key) {\r\n              allKey = key + \".\" + subKey\r\n            } else {\r\n              allKey = subKey\r\n            }\r\n            if (typeof targetExpress === 'string') {\r\n              this.paramArr.push({\r\n                key: allKey,\r\n                targetExpress\r\n              })\r\n            } else if (typeof targetExpress === 'object') {\r\n              deepTrav(targetExpress, allKey)\r\n            }\r\n          })\r\n        }\r\n        deepTrav(param)\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    },\r\n    'paramArr': {\r\n      // immediate: true,\r\n      deep: true,\r\n      handler(newVal, oldVal) {\r\n        if (this.formData.xtype === 'combogrid') {\r\n          const a = {}\r\n          _.forEach(newVal, (item, index) => {\r\n            if (item.key) {\r\n              _.set(a, item.key, item.targetExpress)\r\n            }\r\n          })\r\n          if (a === {}) {\r\n            delete this.formData.param\r\n          } else {\r\n            this.formData.param = a\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.enumeration {\r\n  &.enumeration-title {\r\n    color: #333;\r\n    font-size: 14px;\r\n    margin-bottom: 5px;\r\n  }\r\n\r\n  margin-bottom: 5px;\r\n  display: flex;\r\n  flex-direction: row;\r\n\r\n  .enumeration-col {\r\n    &:nth-child(1), &:nth-child(2) {\r\n      flex: 1;\r\n      padding-right: 3px;\r\n    }\r\n\r\n    &:nth-child(3) {\r\n      line-height: 32px;\r\n\r\n      span:nth-child(1) {\r\n        cursor: pointer;\r\n        margin: 0 5px 0 0\r\n      }\r\n    }\r\n\r\n    .el-input__wrapper {\r\n      border-radius: 0;\r\n    }\r\n  }\r\n}\r\n\r\n.enumeration-add-btn {\r\n  color: var(--main-color)\r\n}\r\n\r\n.property.tabs-property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  .el-tabs {\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n\r\n    .el-tabs__header {\r\n      .el-tabs__item {\r\n        padding: 0 10px;\r\n      }\r\n\r\n      .el-tabs__item.is-active, .el-tabs__item:hover {\r\n        color: #000;\r\n      }\r\n\r\n      .el-tabs__active-bar {\r\n        background-color: var(--main-color)\r\n      }\r\n    }\r\n\r\n    .el-tabs__content {\r\n      flex: 1;\r\n      overflow: auto;\r\n    }\r\n  }\r\n\r\n  form {\r\n    overflow-x: hidden;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <yv-design-form-item :designer=\"designer\" :vjson=\"vjson\" :vcxt=\"vcxt\"\r\n                       :parent-component=\"parentComponent\" :parent-list=\"parentList\"\r\n                       :index-of-parent-list=\"indexOfParentList\"\r\n                       :class=\"[calcClass, 'yv-combogrid']\"\r\n                       :style=\"calcStyle\"\r\n                       @selectme.native=\"_selectMe\"\r\n                       @click.stop=\"_selectMe\">\r\n    <el-input :placeholder=\"this.vjson.placeholder ?? '请输入'\">\r\n      <template #suffix>\r\n        <el-icon>\r\n          <CircleClose style=\"cursor: pointer\"/>\r\n        </el-icon>\r\n      </template>\r\n      <template #prefix>\r\n        <el-icon style=\"cursor: pointer\">\r\n          <Search/>\r\n        </el-icon>\r\n      </template>\r\n    </el-input>\r\n  </yv-design-form-item>\r\n</template>\r\n\r\n<script>\r\nimport {CircleClose, Search} from '@element-plus/icons-vue'\r\nimport YvDesignFormItem from './yv-design-form-item.vue'\r\nimport Designer from \"../designer\"\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonCombosearch from \"../../vjson/yv-vjson-combosearch.vue\"\r\nimport YvDesignCombosearchProp from \"./yv-design-combosearch-prop.vue\"\r\nimport _ from \"lodash\";\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n    CircleClose, Search,\r\n    YvDesignFormItem,\r\n  },\r\n  data() {\r\n    return {\r\n      oldFieldValue: null, //field组件change之前的值\r\n      fieldModel: '',\r\n    }\r\n  },\r\n  computed: {\r\n    inputType() {\r\n      if (this.vjson.type === 'number') {\r\n        return 'text'  //当input的type设置为number时，如果输入非数字字符，则v-model拿到的值为空字符串，无法实现输入校验！故屏蔽之！！\r\n      }\r\n\r\n      return this.vjson.type\r\n    },\r\n\r\n  },\r\n  beforeCreate() {\r\n    /* 这里不能访问方法和属性！！ */\r\n  },\r\n\r\n  created() {\r\n    /* 注意：子组件mounted在父组件created之后、父组件mounted之前触发，故子组件mounted需要用到的prop\r\n       需要在父组件created中初始化！！\r\n    this.initFieldModel()\r\n    this.registerToRefList()\r\n    this.initEventHandler()\r\n    this.buildFieldRules()\r\n\r\n    this.handleOnCreated()\r\n     */\r\n  },\r\n\r\n  mounted() {\r\n    // this.handleOnMounted()\r\n  },\r\n\r\n  beforeUnmount() {\r\n    // this.unregisterFromRefList()\r\n  },\r\n\r\n  methods: {\r\n    handleOnClickOutside() {\r\n    },\r\n    handleOnClear() {\r\n    },\r\n    handleClearMe() {\r\n    },\r\n    handleShowPopover() {\r\n    },\r\n  },\r\n\r\n  /**\r\n   * 为表格准备 vexport.data 属性.\r\n   * 用来在设计时，给组件安插数据属性, 为运行时的 vue 构建 data:{} 添加属性\r\n   */\r\n  buildVExportData(vjson, dataRoot, useFor) {\r\n    if (vjson.lookup) {\r\n      _.forOwn(vjson.lookup, (targetExpress, widgetColumn) => {\r\n        if (_.startsWith(targetExpress, '{') && _.endsWith(targetExpress, '}') && _.size(targetExpress) > 2) {\r\n          if (useFor === 'reviewOnly') {\r\n            _.set(dataRoot, targetExpress.substring(1, targetExpress.length - 1), vjson.id)\r\n\r\n          } else {\r\n            _.set(dataRoot, targetExpress.substring(1, targetExpress.length - 1), null)\r\n          }\r\n        }\r\n      })\r\n    }\r\n    if (vjson.bind) {\r\n      _.forOwn(vjson.bind, (targetExpress, bindProp) => {\r\n        if (_.startsWith(targetExpress, '{') && _.endsWith(targetExpress, '}') && _.size(targetExpress) > 2) {\r\n          if (useFor === 'reviewOnly') {\r\n            _.set(dataRoot, targetExpress.substring(1, targetExpress.length - 1), vjson.id)\r\n\r\n          } else {\r\n            _.set(dataRoot, targetExpress.substring(1, targetExpress.length - 1), null)\r\n          }\r\n        }\r\n      })\r\n    }\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('combosearch')\r\n    desc.setRuntime('YvVjsonCombosearch', YvVjsonCombosearch)\r\n    desc.setDesign('YvDesignCombosearch', this)\r\n    desc.setProp('YvDesignCombosearchProp', YvDesignCombosearchProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'combosearch',\r\n        vjson.fieldLabel,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'required', desc: '必填', bindable: true},\r\n      {name: 'fieldLabel', desc: '标签名', bindable: true},\r\n      {name: 'placeholder', desc: '占位符', bindable: true},\r\n      {name: 'disabled', desc: '禁用', bindable: true},\r\n      {name: 'readonly', desc: '只读', bindable: true},\r\n      {name: 'hidden', desc: '隐藏', bindable: true},\r\n      {name: 'size', desc: '大小', bindable: true},\r\n      {name: 'minLength', desc: '最小长度', bindable: true},\r\n      {name: 'maxLength', desc: '最大长度', bindable: true},\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'focus', desc: '获取焦点时触发', events: [{name: 'e'}]},\r\n      {name: 'blur', desc: '失去焦点触发', events: [{name: 'e'}]},\r\n      {name: 'change', desc: '更改时触发', events: [{name: 'e'}]},\r\n      {name: 'input', desc: '输入时触发', events: [{name: 'e'}]},\r\n      {name: 'search', desc: '按下查询时触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>","<template>\r\n  <yv-vjson-form-item v-if=\"!hidden\"\r\n                      ref=\"_formItem\"\r\n                      :vjson=\"vjson\"\r\n                      :vcxt=\"vcxt\"\r\n                      :rules=\"rules\"\r\n                      :dialog-scope=\"dialogScope\"\r\n                      :parentComponent=\"parentComponent\"\r\n                      :parentList=\"parentList\"\r\n                      :indexOfParentList=\"indexOfParentList\"\r\n                      class=\"yv-datefield\">\r\n    <el-date-picker\r\n        :modelValue=\"realValue\"\r\n        :placeholder=\"placeholder\"\r\n        :disabled=\"disabled\"\r\n        :size=\"size\"\r\n        :clearable=\"clearable\"\r\n        :type=\"type\"\r\n        ref=\"_inner\"\r\n        :readonly=\"readonly\"\r\n        :value-format=\"valueFormat\"\r\n        @update:modelValue=\"_onValueChange\"\r\n        @focus=\"_onFocus\" @blur=\"_onBlur\"\r\n        @input=\"_onInput\" @change=\"_onChange\"/>\r\n  </yv-vjson-form-item>\r\n</template>\r\n\r\n<script>\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport _ from \"lodash\"\r\nimport {Datefield, Datetimefield} from \"./Defaults\"\r\nimport YvVjsonFormItem from \"./yv-vjson-form-item.vue\";\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  components: {\r\n    YvVjsonFormItem\r\n  },\r\n  data() {\r\n    const data = _.defaults(this.vjson, this.vjson.xtype === 'datefield' ? Datefield : Datetimefield)\r\n    const rules = this._getFormItemBaseRule(data)\r\n    if (typeof data.bind === \"string\") {\r\n      data.bind = {\r\n        value: data.bind\r\n      }\r\n    }\r\n\r\n    return {\r\n      fieldLabel: data.fieldLabel,\r\n      valueFormat: _.trim(data.valueFormat).length>0 ? data.valueFormat: (this.vjson.xtype === 'datefield'? \"YYYY-MM-DD\" :\"YYYY-MM-DD HH:mm:ss\"),\r\n      rules: rules,\r\n      required: data.required,\r\n      placeholder: data.placeholder,\r\n      disabled: data.disabled,\r\n      size: data.size,\r\n      bind: data.bind,\r\n      readonly: data.readonly,\r\n      clearable: data.clearable ?? true,\r\n      type: data.xtype === 'datefield' ? (data.type) ?? \"date\" : (data.type) ?? \"datetime\",\r\n      labelWidth: data.labelWidth\r\n    }\r\n  },\r\n  watch: {\r\n    fieldLabel: {\r\n      handler(newVal) {\r\n        this.$refs._formItem.fieldLabel = newVal\r\n      }\r\n    },\r\n    labelWidth: {\r\n      handler(newVal) {\r\n        this.vjson.labelWidth = newVal\r\n      }\r\n    },\r\n    required: {\r\n      handler() {\r\n        this.rules = this._getFormItemBaseRule(this)\r\n        // this.$refs._formItem.required = newVal\r\n      }\r\n    },\r\n  },\r\n  methods: {\r\n    focus(){\r\n      this.$refs._inner.focus()\r\n    },\r\n    _onInput(e) {\r\n      // getListener(this.vjson, 'input', this.vcxt)(this, this.vcxt.scope, e)\r\n      this.runEvent('input', ...arguments)\r\n    },\r\n    _onChange(e) {\r\n      this.runEvent('change', ...arguments)\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">datefield 属性</div>\r\n    <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"modal\" prop=\"bindValue\">\r\n        <el-input v-model=\"bindValue\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"uiKey\" prop=\"uiKey\">\r\n        <el-input v-model=\"formData.uiKey\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"权限\" prop=\"permissions\">\r\n        <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"隐藏\" prop=\"hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"标签名\" prop=\"fieldLabel\">\r\n        <el-input v-model=\"formData.fieldLabel\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"必填\" prop=\"required\">\r\n        <el-switch v-model=\"formData.required\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"宽度权重\" prop=\"weight\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"(formData.weight === 1 || !formData.weight)? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=1\">1\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 2? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=2\">2\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 3? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=3\">3\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 4? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=4\">4\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 5? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=5\">5\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 6? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=6\">6\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"标签宽度\" prop=\"formData.text\">\r\n        <el-input v-model=\"formData.labelWidth\" type=\"text\" placeholder=\"auto\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"立刻校验\" prop=\"validateOnRuleChange\">\r\n        <el-switch v-model=\"formData.validateOnRuleChange\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"显示错误\" prop=\"showMessage\">\r\n        <el-switch v-model=\"formData.showMessage\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"内联错误\" prop=\"inlineMessage\">\r\n        <el-switch v-model=\"formData.inlineMessage\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"尺寸\" prop=\"size\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"formData.size === 'large'? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='large'\">大\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"(formData.size === 'default' || !formData.size)? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='default'\">中\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.size === 'small'? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='small'\">小\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"占位字符\" prop=\"placeholder\">\r\n        <el-input v-model=\"formData.placeholder\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"最大长度\" prop=\"maxlength\">\r\n        <el-input v-model=\"formData.maxlength\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"格式\" prop=\"valueFormat\">\r\n        <el-input v-model=\"formData.valueFormat\" type=\"text\" placeholder=\"默认: YYYY-MM-DD\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"密码\" prop=\"showPassword\">\r\n        <el-switch v-model=\"formData.showPassword\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"禁用\" prop=\"disabled\">\r\n        <el-switch v-model=\"formData.disabled\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"只读\" prop=\"readonly\">\r\n        <el-switch v-model=\"formData.readonly\"></el-switch>\r\n      </el-form-item>\r\n      <yv-design-input-width :designer=\"designer\" :form-data=\"formData\"/>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignInputWidth from \"./yv-design-input-width.vue\"\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  components: {YvDesignInputWidth, YvDesignerPermissions},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        fieldLabel: this.vjson.fieldLabel,\r\n        labelWidth: this.vjson.labelWidth,\r\n        required: this.vjson.required ?? false,\r\n        showMessage: this.vjson.showMessage ?? true,\r\n        inlineMessage: this.vjson.inlineMessage ?? false,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        placeholder: this.vjson.placeholder,\r\n        maxlength: this.vjson.maxlength,\r\n        showPassword: this.vjson.showPassword,\r\n        readonly: this.vjson.readonly ?? false,\r\n        weight: this.vjson.weight,\r\n        bind: this.vjson.bind\r\n      }\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <yv-design-form-item :designer=\"designer\" :vjson=\"vjson\" :vcxt=\"vcxt\"\r\n                       :parent-component=\"parentComponent\" :parent-list=\"parentList\"\r\n                       :index-of-parent-list=\"indexOfParentList\"\r\n                       class=\"yv-datefield\"\r\n                       @selectme.native=\"_selectMe\"\r\n                       @click.stop=\"_selectMe\">\r\n    <el-date-picker :type=\"vjson.type\"\r\n                    :disabled=\"vjson.disabled\" :readonly=\"vjson.readonly\"\r\n                    :placeholder=\"vjson.placeholder\"\r\n    />\r\n  </yv-design-form-item>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignFormItem from './yv-design-form-item.vue'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonDatefield from \"../../vjson/yv-vjson-datefield.vue\"\r\nimport YvDesignDatefieldProp from \"./yv-design-datefield-prop.vue\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n    YvDesignFormItem,\r\n  },\r\n  data() {\r\n    return {\r\n      oldFieldValue: null, //field组件change之前的值\r\n      fieldModel: '',\r\n    }\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('datefield')\r\n    desc.setRuntime('YvVjsonDatefield', YvVjsonDatefield)\r\n    desc.setDesign('YvDesignDatefield', this)\r\n    desc.setProp('YvDesignDatefieldProp', YvDesignDatefieldProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'date',\r\n        vjson.fieldLabel,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'required', desc: '必填', bindable: true},\r\n      {name: 'fieldLabel', desc: '标签名', bindable: true},\r\n      {name: 'placeholder', desc: '占位符', bindable: true},\r\n      {name: 'disabled', desc: '禁用', bindable: true},\r\n      {name: 'readonly', desc: '只读', bindable: true},\r\n      {name: 'hidden', desc: '隐藏', bindable: true},\r\n      {name: 'size', desc: '大小', bindable: true},\r\n      {name: 'minLength', desc: '最小长度', bindable: true},\r\n      {name: 'maxLength', desc: '最大长度', bindable: true},\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'focus', desc: '获取焦点时触发', events: [{name: 'e'}]},\r\n      {name: 'blur', desc: '失去焦点触发', events: [{name: 'e'}]},\r\n      {name: 'change', desc: '更改时触发', events: [{name: 'e'}]},\r\n      {name: 'input', desc: '输入时触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">datetimefield 属性</div>\r\n    <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"modal\" prop=\"bindValue\">\r\n        <el-input v-model=\"bindValue\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"uiKey\" prop=\"uiKey\">\r\n        <el-input v-model=\"formData.uiKey\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"权限\" prop=\"permissions\">\r\n        <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"隐藏\" prop=\"hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"标签名\" prop=\"fieldLabel\">\r\n        <el-input v-model=\"formData.fieldLabel\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"必填\" prop=\"required\">\r\n        <el-switch v-model=\"formData.required\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"宽度权重\" prop=\"weight\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"(formData.weight === 1 || !formData.weight)? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=1\">1\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 2? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=2\">2\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 3? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=3\">3\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 4? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=4\">4\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 5? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=5\">5\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 6? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=6\">6\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"标签宽度\" prop=\"formData.text\">\r\n        <el-input v-model=\"formData.labelWidth\" type=\"text\" placeholder=\"auto\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"立刻校验\" prop=\"validateOnRuleChange\">\r\n        <el-switch v-model=\"formData.validateOnRuleChange\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"显示错误\" prop=\"showMessage\">\r\n        <el-switch v-model=\"formData.showMessage\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"内联错误\" prop=\"inlineMessage\">\r\n        <el-switch v-model=\"formData.inlineMessage\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"尺寸\" prop=\"size\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"formData.size === 'large'? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='large'\">大\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"(formData.size === 'default' || !formData.size)? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='default'\">中\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.size === 'small'? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='small'\">小\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"占位字符\" prop=\"placeholder\">\r\n        <el-input v-model=\"formData.placeholder\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"最大长度\" prop=\"maxlength\">\r\n        <el-input v-model=\"formData.maxlength\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"格式\" prop=\"valueFormat\">\r\n        <el-input v-model=\"formData.valueFormat\" type=\"text\" placeholder=\"默认: YYYY-MM-DD HH:mm:ss\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"密码\" prop=\"showPassword\">\r\n        <el-switch v-model=\"formData.showPassword\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"禁用\" prop=\"disabled\">\r\n        <el-switch v-model=\"formData.disabled\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"只读\" prop=\"readonly\">\r\n        <el-switch v-model=\"formData.readonly\"></el-switch>\r\n      </el-form-item>\r\n      <yv-design-input-width :designer=\"designer\" :form-data=\"formData\"/>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignInputWidth from \"./yv-design-input-width.vue\"\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  components: {YvDesignInputWidth, YvDesignerPermissions},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        fieldLabel: this.vjson.fieldLabel,\r\n        labelWidth: this.vjson.labelWidth,\r\n        required: this.vjson.required ?? false,\r\n        showMessage: this.vjson.showMessage ?? true,\r\n        inlineMessage: this.vjson.inlineMessage ?? false,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        placeholder: this.vjson.placeholder,\r\n        maxlength: this.vjson.maxlength,\r\n        showPassword: this.vjson.showPassword,\r\n        readonly: this.vjson.readonly ?? false,\r\n        weight: this.vjson.weight,\r\n        bind: this.vjson.bind\r\n      }\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <yv-design-form-item :designer=\"designer\" :vjson=\"vjson\" :vcxt=\"vcxt\"\r\n                       :parent-component=\"parentComponent\" :parent-list=\"parentList\"\r\n                       :index-of-parent-list=\"indexOfParentList\"\r\n                       class=\"yv-datetimefield\"\r\n                       @selectme.native=\"_selectMe\"\r\n                       @click.stop=\"_selectMe\">\r\n    <el-date-picker\r\n        :type=\"vjson.type\"\r\n        :disabled=\"vjson.disabled\" :readonly=\"vjson.readonly\"\r\n        :placeholder=\"vjson.placeholder\"\r\n    />\r\n  </yv-design-form-item>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignFormItem from './yv-design-form-item.vue'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonDatetimefield from \"../../vjson/yv-vjson-datefield.vue\"\r\nimport YvDesignDatetimefieldProp from \"./yv-design-datetimefield-prop.vue\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n    YvDesignFormItem,\r\n  },\r\n  data() {\r\n    return {\r\n      oldFieldValue: null, //field组件change之前的值\r\n      fieldModel: '',\r\n    }\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('datetimefield')\r\n    desc.setRuntime('YvVjsonDatetimefield', YvVjsonDatetimefield)\r\n    desc.setDesign('YvDesignDatetimefield', this)\r\n    desc.setProp('YvDesignDatetimefieldProp', YvDesignDatetimefieldProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      if (vjson.fieldLabel) {\r\n        return vjson.fieldLabel\r\n      }\r\n      return [\r\n        'datetime',\r\n        vjson.fieldLabel,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'fieldLabel', desc: '标签名', bindable: true},\r\n      {name: 'placeholder', desc: '占位符', bindable: true},\r\n      {name: 'disabled', desc: '禁用', bindable: true},\r\n      {name: 'readonly', desc: '只读', bindable: true},\r\n      {name: 'hidden', desc: '隐藏', bindable: true},\r\n      {name: 'size', desc: '大小', bindable: true},\r\n      {name: 'minLength', desc: '最小长度', bindable: true},\r\n      {name: 'maxLength', desc: '最大长度', bindable: true},\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'focus', desc: '获取焦点时触发', events: [{name: 'e'}]},\r\n      {name: 'blur', desc: '失去焦点触发', events: [{name: 'e'}]},\r\n      {name: 'change', desc: '更改时触发', events: [{name: 'e'}]},\r\n      {name: 'input', desc: '输入时触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>\r\n","<template>\r\n  <div class=\"property tabs-property\">\r\n    <div class=\"title\">aggridColumn 属性</div>\r\n    <!-- 字段用途 如果是动态 -->\r\n    <el-tabs>\r\n      <el-tab-pane v-if=\"formData.replaceFor\" label=\"字段插槽\">\r\n        <el-form-item label=\"替代模式\" prop=\"formData.replaceFor\">\r\n          <el-button-group>\r\n            <el-button size=\"small\" :type=\"formData.replaceFor === 'server'? 'primary':'default'\"\r\n                       @click=\"()=>formData.replaceFor='server'\">服务端\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"formData.replaceFor === 'custom'? 'primary':'default'\"\r\n                       @click=\"()=>formData.replaceFor='custom'\">自定义\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"'default'\"\r\n                       @click=\"()=>formData.replaceFor=''\">不替代\r\n            </el-button>\r\n          </el-button-group>\r\n        </el-form-item>\r\n        <el-form-item label=\"属性名\" prop=\"formData.name\">\r\n          <el-input v-model=\"formData.name\"/>\r\n        </el-form-item>\r\n        <template v-if=\"formData.replaceFor==='server'\">\r\n          <el-form-item label=\"强制不可编辑\" prop=\"forceReadonly\" label-width=\"120px\">\r\n            <el-switch v-model=\"formData.forceReadonly\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"强制非必填\" prop=\"forceAllowBlank\" label-width=\"120px\">\r\n            <el-switch v-model=\"formData.forceAllowBlank\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"强制隐藏\" prop=\"forceAllowBlank\" label-width=\"120px\">\r\n            <el-switch v-model=\"formData.forceHidden\"/>\r\n          </el-form-item>\r\n        </template>\r\n        <template v-if=\"formData.replaceFor==='custom'\">\r\n          <el-card>\r\n            <template #header>\r\n              <div class=\"card-header\">Vue中定义字段内容, 示例</div>\r\n            </template>\r\n            <pre>\r\ndata() {\r\n    return {\r\n        // 固定名称 \"customVjson\"\r\n        customVjson: {\r\n\r\n            // 替代名: slot1\r\n            slot1: [\r\n                {\r\n                    xtype: 'aggridcolumn',\r\n                    dataIndex: 'field1',\r\n                    header: '字段1',\r\n                },\r\n                {\r\n                    xtype: 'aggridcolumn',\r\n                    dataIndex: 'field1',\r\n                    header: '字段2',\r\n                },\r\n            ]\r\n\r\n        }\r\n    }\r\n},\r\n      </pre>\r\n          </el-card>\r\n        </template>\r\n      </el-tab-pane>\r\n      <el-tab-pane v-if=\"!formData.replaceFor\" label=\"基本\">\r\n        <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n                 size=\"default\" @submit.native.prevent>\r\n\r\n          <el-form-item label=\"dataIndex\" prop=\"dataIndex\">\r\n            <el-input v-model=\"formData.dataIndex\" type=\"text\" clearable/>\r\n          </el-form-item>\r\n          <el-form-item label=\"列名\" prop=\"header\">\r\n            <el-input v-model=\"formData.header\" type=\"text\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"权限\" prop=\"permissions\">\r\n            <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <el-form-item label=\"字段替代\" prop=\"formData.replaceFor\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"'default'\"\r\n                         @click=\"()=>formData.replaceFor='server'\">服务端\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"'default'\"\r\n                         @click=\"()=>formData.replaceFor='custom'\">自定义\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"'primary'\"\r\n                         @click=\"()=>formData.replaceFor=''\">不替代\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"隐藏\" prop=\"hidden\" label-width=\"90\">\r\n            <el-switch v-model=\"formData.hidden\"/>\r\n          </el-form-item>\r\n\r\n          <el-form-item label=\"计算值\" prop=\"allowValueGetter\" label-width=\"90\">\r\n            <el-switch v-model=\"formData.allowValueGetter\"/>\r\n          </el-form-item>\r\n          <el-form-item v-if=\"formData.allowValueGetter\" label=\"计算公式\" prop=\"valueGetter\" label-width=\"90\">\r\n            <el-input v-model=\"formData.valueGetter\" type=\"text\"/>\r\n          </el-form-item>\r\n          <el-tag style=\"width:100%;\" v-if=\"formData.allowValueGetter\" type=\"warning\">例: data.a + data.b</el-tag>\r\n\r\n          <el-form-item label=\"格式字典\">\r\n            <el-select v-model=\"formData.dict\" filterable clearable @clear=\"_dictClear()\">\r\n              <el-option v-for=\"item in dict\" :key=\"item.code\" :label=\"item.desc\" :value=\"item.code\"/>\r\n            </el-select>\r\n          </el-form-item>\r\n\r\n          <el-form-item label=\"自定显示\" prop=\"allowValueFormatter\" label-width=\"90\">\r\n            <el-switch v-model=\"formData.allowValueFormatter\"/>\r\n          </el-form-item>\r\n          <el-form-item v-if=\"formData.allowValueFormatter\" label=\"显示公式\" prop=\"valueGetter\" label-width=\"90\">\r\n            <el-input v-model=\"formData.valueFormatter\" type=\"text\"/>\r\n          </el-form-item>\r\n          <el-tag style=\"width:100%;\" v-if=\"formData.allowValueFormatter\" type=\"warning\">例: data.a + data.b</el-tag>\r\n\r\n          <el-form-item label=\"禁用菜单\" prop=\"suppressMenu\" label-width=\"90\">\r\n            <el-switch v-model=\"formData.suppressMenu\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"JSON模式\" prop=\"jsonMode\" label-width=\"90\">\r\n            <el-switch v-model=\"formData.jsonMode\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"锁定\" prop=\"pinned\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.pinned === 'left'? 'primary':'default'\"\r\n                         @click=\"()=>formData.pinned='left'\">左侧\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.pinned === 'right'? 'primary':'default'\"\r\n                         @click=\"()=>formData.size='right'\">右侧\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"(!formData.pinned) ? 'primary':'default'\"\r\n                         @click=\"()=>formData.pinned=undefined\">不锁\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"列宽度\" prop=\"width\">\r\n            <el-input v-model=\"formData.width\" type=\"text\" clearable/>\r\n          </el-form-item>\r\n          <el-form-item label=\"flex\" prop=\"flex\">\r\n            <el-input v-model=\"formData.flex\" type=\"text\" clearable/>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <el-form-item label=\"是否分组标题\" prop=\"showRowGroup\" label-width=\"130\">\r\n            <el-switch v-model=\"formData.showRowGroup\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"参与分组\" prop=\"rowGroup\" label-width=\"130\">\r\n            <el-switch v-model=\"formData.rowGroup\"/>\r\n          </el-form-item>\r\n          <el-form-item v-if=\"formData.rowGroup\" label=\"禁用行数统计\" prop=\"cellRendererParams_suppressCount\"\r\n                        label-width=\"130\">\r\n            <el-switch v-model=\"formData.cellRendererParams_suppressCount\"/>\r\n          </el-form-item>\r\n          <el-form-item v-if=\"formData.rowGroup\" label=\"禁用双击展开\"\r\n                        prop=\"cellRendererParams_suppressDoubleClickExpand\" label-width=\"130\">\r\n            <el-switch v-model=\"formData.cellRendererParams_suppressDoubleClickExpand\"/>\r\n          </el-form-item>\r\n          <el-form-item v-if=\"formData.rowGroup\" label=\"禁用回车展开\" prop=\"cellRendererParams_suppressEnterExpand\"\r\n                        label-width=\"130\">\r\n            <el-switch v-model=\"formData.cellRendererParams_suppressEnterExpand\"/>\r\n          </el-form-item>\r\n          <el-form-item v-if=\"formData.rowGroup\" label=\"树节点勾选框\" prop=\"cellRendererParams_checkbox\"\r\n                        label-width=\"130\">\r\n            <el-switch v-model=\"formData.cellRendererParams_checkbox\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"XYZ\" prop=\"rowGroup_xyz\" label-width=\"130\">\r\n            <el-switch v-model=\"formData.rowGroup_xyz\"/>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <el-form-item label=\"最小宽度\" prop=\"minWidth\">\r\n            <el-input v-model=\"formData.minWidth\" type=\"text\" clearable/>\r\n          </el-form-item>\r\n          <el-form-item label=\"最大宽度\" prop=\"maxWidth\">\r\n            <el-input v-model=\"formData.maxWidth\" type=\"text\" clearable/>\r\n          </el-form-item>\r\n          <el-form-item label=\"文本换行\" prop=\"wrapText\">\r\n            <el-switch v-model=\"formData.wrapText\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"允许排序\" prop=\"sortable\">\r\n            <el-switch v-model=\"formData.sortable\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"拖拽宽度\" prop=\"resizable\">\r\n            <el-switch v-model=\"formData.resizable\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"库表字段\" prop=\"数据库字段\">\r\n            <el-input v-model=\"formData.field\" type=\"text\" clearable/>\r\n          </el-form-item>\r\n          <el-form-item label=\"值表达式\" prop=\"数据库字段\">\r\n            <el-input v-model=\"formData.serverCreateValue\" type=\"text\" clearable/>\r\n          </el-form-item>\r\n          <el-form-item label=\"删除条件\" prop=\"wrapText\">\r\n            <el-switch v-model=\"formData.dbIsDeleteKey\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"更新条件\" prop=\"wrapText\">\r\n            <el-switch v-model=\"formData.dbIsUpdateKey\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"禁止新增\" prop=\"wrapText\">\r\n            <el-switch v-model=\"formData.dbInsertDisable\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"禁止更新\" prop=\"wrapText\">\r\n            <el-switch v-model=\"formData.dbUpdateDisable\"/>\r\n          </el-form-item>\r\n        </el-form>\r\n      </el-tab-pane>\r\n      <el-tab-pane v-if=\"!formData.replaceFor\" label=\"编辑\">\r\n        <el-form-item label=\"允许编辑\" prop=\"editable\">\r\n          <el-switch v-model=\"formData.editable\"></el-switch>\r\n        </el-form-item>\r\n        <el-form-item v-if=\"formData.editable\" label=\"编辑类型\" prop=\"editorXtype\">\r\n          <el-select v-model=\"editorXtype\" clearable :filterable=\"true\">\r\n            <el-option v-for=\"xtype in editors\" :label=\"xtype\" :value=\"xtype\"/>\r\n          </el-select>\r\n        </el-form-item>\r\n        <el-form-item v-if=\"formData.editable\" label=\"可以为空\" prop=\"allowBlank\">\r\n          <el-switch v-model=\"editorAllowBlank\"></el-switch>\r\n        </el-form-item>\r\n\r\n        <!---------------------------- checkbox ---------------------------->\r\n        <el-form-item label=\"勾选值类型\" v-if=\"formData.editable && editorXtype === 'checkbox'\"\r\n                      prop=\"formData.editor.convType\">\r\n          <el-button-group>\r\n            <el-button size=\"small\" :type=\"formData.editor?.convType === 'bool'? 'primary':'default'\"\r\n                       @click=\"()=>formData.editor.convType='bool'\">布尔\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"(formData.editor?.convType === 'num')? 'primary':'default'\"\r\n                       @click=\"()=>formData.editor.convType='num'\">数字\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"formData.editor?.convType === 'str'? 'primary':'default'\"\r\n                       @click=\"()=>formData.editor.convType='str'\">字符串\r\n            </el-button>\r\n          </el-button-group>\r\n        </el-form-item>\r\n        <el-form-item label=\"勾选后值\"\r\n                      v-if=\"formData.editable && editorXtype === 'checkbox' && (formData.editor?.convType === 'str' || formData.editor?.convType === 'num')\"\r\n                      prop=\"formData.editor.activeValue\">\r\n          <el-input v-model=\"formData.editor.activeValue\" type=\"text\" clearable></el-input>\r\n        </el-form-item>\r\n        <el-form-item label=\"未勾选值\"\r\n                      v-if=\"formData.editable && editorXtype === 'checkbox' && (formData.editor?.convType === 'str' || formData.editor?.convType === 'num')\"\r\n                      prop=\"formData.editor.inactiveValue\">\r\n          <el-input v-model=\"formData.editor.inactiveValue\" type=\"text\" clearable></el-input>\r\n        </el-form-item>\r\n\r\n        <!---------------------------- combo ---------------------------->\r\n        <el-form-item label=\"允许多选\" v-if=\"formData.editable && editorXtype === 'combobox'\">\r\n          <el-switch v-model=\"formData.editor.multiple\"></el-switch>\r\n        </el-form-item>\r\n        <el-form-item label=\"下拉数据\" v-if=\"formData.editable && editorXtype === 'combobox'\">\r\n          <el-button-group>\r\n            <el-button size=\"small\" :type=\"formData.editor.dataType === 1? 'primary':'default'\"\r\n                       @click=\"()=>formData.editor.dataType=1\">固定值\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"formData.editor.dataType === 2 ? 'primary':'default'\"\r\n                       @click=\"()=>formData.editor.dataType=2\">枚举字典\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"formData.editor.dataType === 3 ? 'primary':'default'\"\r\n                       @click=\"()=>formData.editor.dataType=3\">其他引用\r\n            </el-button>\r\n          </el-button-group>\r\n        </el-form-item>\r\n\r\n        <el-form-item v-if=\"formData.editable && editorXtype === 'combobox' && formData.editor.dataType === 3\"\r\n                      label=\"其他引用\" prop=\"isActions\">\r\n          <YvDesignInputExpress v-model=\"formData.editor.enumExpr\" :designer=\"designer\"/>\r\n        </el-form-item>\r\n\r\n        <template v-if=\"formData.editable && editorXtype === 'combobox' && formData.editor.dataType === 1\">\r\n\r\n          <div class=\"enumeration enumeration-title\">\r\n            <div class=\"enumeration-col\">选项值</div>\r\n            <div class=\"enumeration-col\">选项文本</div>\r\n            <div class=\"enumeration-col\" style=\"width: 50px;\"></div>\r\n          </div>\r\n          <draggable tag=\"div\" :list=\"formData.editor.dataEnum\" item-key=\"id\"\r\n                     :component-data=\"{class: 'enumeration-ul'}\"\r\n                     v-bind=\"{group:'panesGroup', ghostClass: 'ghost', handle: '.icon-tuozhuai'}\">\r\n\r\n            <template #item=\"{ element: item, index: idx }\">\r\n              <div class=\"enumeration\" :key=\"item.dictValue\">\r\n                <div class=\"enumeration-col\">\r\n                  <el-input v-model=\"item.dictValue\" type=\"text\" clearable/>\r\n                </div>\r\n                <div class=\"enumeration-col\">\r\n                  <el-input v-model=\"item.dictText\" type=\"text\" clearable/>\r\n                </div>\r\n                <div class=\"enumeration-col\">\r\n                  <span class=\"iconfont icon-shanchu1\" @click=\"()=>removeDataEnumItem(idx)\"></span>\r\n                  <span class=\"iconfont icon-tuozhuai\"></span>\r\n                </div>\r\n              </div>\r\n            </template>\r\n          </draggable>\r\n\r\n          <el-button type=\"primary\" :icon=\"renderIcon('fa Plus')\" link @click=\"addDataEnumItem\"\r\n                     class=\"enumeration-add-btn\">\r\n            添加一项\r\n          </el-button>\r\n        </template>\r\n\r\n        <!---------------------------- combogrid ---------------------------->\r\n        <el-form-item v-if=\"formData.editable && editorXtype === 'combogrid'\" label=\"允许随意输入(不用选择)\"\r\n                      prop=\"allowCustomInput\" label-width=\"auto\">\r\n          <el-switch v-model=\"formData.allowCustomInput\"></el-switch>\r\n        </el-form-item>\r\n        <el-divider/>\r\n        <template v-if=\"formData.editable && editorXtype === 'combogrid'\">\r\n          <el-form-item label=\"数据弹窗\" prop=\"editorWidget\" v-if=\"editorXtype === 'combogrid'\">\r\n            <el-select v-model=\"editorWidget\">\r\n              <el-option\r\n                  v-for=\"widgetItem in getWidgetList()\"\r\n                  :key=\"widgetItem.key\"\r\n                  :label=\"widgetItem.title\"\r\n                  :value=\"widgetItem.key\"\r\n                  :data=\"widgetItem.value\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-divider content-position=\"left\">搜索条件</el-divider>\r\n          <el-row>\r\n            <el-col :span=\"10\">\r\n              <div class=\"grid-content ep-bg-purple-light\"/>\r\n              字段\r\n            </el-col>\r\n            <el-col :span=\"10\">\r\n              <div class=\"grid-content ep-bg-purple\"/>\r\n              表达式\r\n            </el-col>\r\n            <el-col :span=\"4\"></el-col>\r\n          </el-row>\r\n          <el-row v-for=\"(param, index) in paramArr\">\r\n            <el-col :span=\"10\">\r\n              <el-input v-model=\"param.key\" type=\"text\" clearable/>\r\n            </el-col>\r\n            <el-col :span=\"10\">\r\n              <YvDesignInputExpress v-model=\"param.targetExpress\" :designer=\"designer\"\r\n                                    extend-name=\"当前编辑行\"\r\n                                    :extend-items=\"getGridColumns().map(r=>r.dataIndex)\"/>\r\n            </el-col>\r\n            <el-col :span=\"4\">\r\n              <el-button :icon=\"renderIcon('fa Delete')\" circle @click=\"(button)=>removeParam(button, index)\"/>\r\n            </el-col>\r\n          </el-row>\r\n          <el-row>\r\n            <el-button type=\"primary\" :icon=\"renderIcon('fa Plus')\" link @click=\"addNewParam\">添加一项</el-button>\r\n          </el-row>\r\n          <el-divider content-position=\"left\">回填字段</el-divider>\r\n          <el-form v-for=\"item in lookupArr\" :model=\"item\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\"\r\n                   label-width=\"80px\"\r\n                   size=\"default\" @submit.native.prevent>\r\n            <el-form-item :label=\"item.text\">\r\n              <div>{{ item.key }}</div>\r\n\r\n              <el-select v-model=\"item.value\"\r\n                         clearable\r\n                         @change=\"(bindValue)=>_lookupItemChange(item, bindValue)\"\r\n                         @clear=\"_lookupClear(item)\"\r\n                         :filterable=\"true\"\r\n                         :allow-create=\"true\">\r\n                <el-option v-for=\"column in getGridColumns()\" :label=\"'{' + column.dataIndex + '}'\"\r\n                           :value=\"'{' + column.dataIndex + '}'\"/>\r\n              </el-select>\r\n\r\n            </el-form-item>\r\n          </el-form>\r\n        </template>\r\n      </el-tab-pane>\r\n      <el-tab-pane v-if=\"!formData.replaceFor\" label=\"操作\">\r\n        <el-form-item label=\"操作列\" prop=\"isActions\">\r\n          <el-switch v-model=\"formData.isActions\"></el-switch>\r\n        </el-form-item>\r\n\r\n        <div v-show=\"formData.isActions\" class=\"enumeration enumeration-title\">\r\n          <div class=\"enumeration-col\">名称</div>\r\n          <div class=\"enumeration-col\">是否显示</div>\r\n          <div class=\"enumeration-col\">点击事件</div>\r\n          <div class=\"enumeration-col\" style=\"width: 26px;\"></div>\r\n        </div>\r\n        <div v-show=\"formData.isActions\" class=\"enumeration\" v-for=\"(action, idx) in formData.actions\">\r\n          <div class=\"enumeration-col\">\r\n            <el-input v-model=\"action.text\" type=\"text\" clearable/>\r\n          </div>\r\n          <div class=\"enumeration-col\">\r\n            <el-input v-model=\"action.show\" type=\"text\" clearable/>\r\n          </div>\r\n          <div class=\"enumeration-col\">\r\n            <el-input v-model=\"action.click\" type=\"text\" clearable/>\r\n          </div>\r\n          <div class=\"enumeration-col\">\r\n            <span class=\"iconfont icon-shanchu1\" @click=\"()=>removeColumn(action)\"></span>\r\n          </div>\r\n        </div>\r\n        <el-button v-show=\"formData.isActions\" type=\"primary\" :icon=\"renderIcon('fa Plus')\" link @click=\"addNewColumn\"\r\n                   class=\"enumeration-add-btn\">\r\n          添加一项\r\n        </el-button>\r\n      </el-tab-pane>\r\n    </el-tabs>\r\n\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport lodash from 'lodash'\r\nimport VJsonContext from \"../../vjson/VJsonContext\";\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\";\r\nimport {dict} from \"../../../store\"\r\nimport YvDesignInputExpress from './yv-design-input-express.vue'\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  components: {YvDesignInputExpress, YvDesignerPermissions},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    const dictData = []\r\n    lodash.each(dict.value, item => {\r\n      // console.log(item)\r\n      dictData.push({code: item.code, desc: item.desc})\r\n    })\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        dataIndex: this.vjson.dataIndex,\r\n        header: this.vjson.header,\r\n        width: this.vjson.width,\r\n        editor: this.vjson.editor,\r\n        actions: this.vjson.actions,\r\n      },\r\n      editorXtype: '',\r\n      editorAllowBlank: '',\r\n      editorWidget: '',\r\n      editors: [\"textfield\", \"numberfield\", \"combobox\", \"checkbox\", \"combogrid\", \"datefield\", \"datetimefield\", \"memo\"],\r\n      dict: dictData,\r\n      paramArr: [],\r\n    }\r\n  },\r\n  computed: {\r\n    currentWidget() {\r\n      return window['widgets'][this.formData.editor?.widget]\r\n    },\r\n    lookupArr() {\r\n      const currentWidget = this.currentWidget;\r\n      const lookup = this.formData.editor?.lookup\r\n      if (!currentWidget) {\r\n        return []\r\n\r\n      } else {\r\n        const lookupArr = []\r\n        for (let i = 0; i < currentWidget.columns.length; i++) {\r\n          const column = currentWidget.columns[i]\r\n          const lookupItem = {key: column.dataIndex, text: column.header || column.text, value: \"\"}\r\n          _.forOwn(lookup, (targetExpress, sourceGridColumn) => {\r\n            if (sourceGridColumn === column.dataIndex) {\r\n              lookupItem.value = targetExpress\r\n              return\r\n            }\r\n          })\r\n          lookupArr.push(lookupItem)\r\n        }\r\n        return lookupArr\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    addDataEnumItem() {\r\n      if (!this.formData.editor.dataEnum) {\r\n        this.formData.editor.dataEnum = []\r\n      }\r\n      this.formData.editor.dataEnum.push({dictValue: \"\", dictText: \"\"})\r\n    },\r\n    removeDataEnumItem(idx) {\r\n      this.formData.editor.dataEnum.splice(idx, 1)\r\n    },\r\n    _editorClear() {\r\n      delete this.formData.editor\r\n    },\r\n    _lookupItemChange(gridColumnItem, bindValue) {\r\n      if (!this.formData.editor?.lookup) {\r\n        _.set(this.formData, 'editor.lookup', {})\r\n      }\r\n      this.formData.editor.lookup[gridColumnItem.key] = bindValue\r\n    },\r\n    _lookupClear(item) {\r\n      if (!this.formData.editor?.lookup) {\r\n        return\r\n      }\r\n      delete this.formData.editor.lookup[item.key]\r\n    },\r\n    getWidgetList() {\r\n      const ret = []\r\n      _.forOwn(window['widgets'], (value, key) => {\r\n        ret.push({key: key, title: value.title, value})\r\n      })\r\n      return ret\r\n    },\r\n    getGridColumns() {\r\n      // 判断 parentComponent 组件是不是自己这个表格\r\n      const containsMe = _.find(designer.selectedOption?.parentList, i => i.id === this.vjson.id)\r\n      if (!containsMe) {\r\n        return {columns: []}\r\n      }\r\n      return designer.selectedOption.parentComponent.columns\r\n    },\r\n    _dictClear() {\r\n      delete this.formData.dict\r\n    },\r\n    removeParam(button, index) {\r\n      this.paramArr.splice(index, 1)\r\n    },\r\n    addNewParam() {\r\n      this.paramArr.push({key: \"\", targetExpress: \"\"})\r\n    },\r\n    removeColumn(action) {\r\n      _.remove(this.formData.actions, action)\r\n    },\r\n    addNewColumn() {\r\n      if (!_.isArray(this.formData.actions)) {\r\n        this.formData.actions = []\r\n      }\r\n      this.formData.actions.push({\r\n        text: \"操作\", show: true, click: () => {\r\n        }\r\n      })\r\n    },\r\n  },\r\n  watch: {\r\n    'editorAllowBlank': {\r\n      handler(newVal) {\r\n        _.set(this.formData, 'editor.allowBlank', newVal)\r\n      }\r\n    },\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n\r\n        this.editorXtype = this.formData.editor?.xtype ?? ''\r\n        this.editorAllowBlank = this.formData.editor?.allowBlank ?? ''\r\n        this.editorWidget = this.formData.editor?.widget ?? ''\r\n        const param = this.formData.editor?.param\r\n        this.paramArr = []\r\n\r\n        const deepTrav = (obj, key) => {\r\n          _.forOwn(obj, (targetExpress, subKey) => {\r\n            let allKey\r\n            if (key) {\r\n              allKey = key + \".\" + subKey\r\n            } else {\r\n              allKey = subKey\r\n            }\r\n            if (typeof targetExpress === 'string') {\r\n              this.paramArr.push({\r\n                key: allKey,\r\n                targetExpress\r\n              })\r\n            } else if (typeof targetExpress === 'object') {\r\n              deepTrav(targetExpress, allKey)\r\n            }\r\n          })\r\n        }\r\n        deepTrav(param)\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    },\r\n    'paramArr': {\r\n      // immediate: true,\r\n      deep: true,\r\n      handler(newVal, oldVal) {\r\n        if (this.formData.editor?.xtype === 'combogrid') {\r\n          const a = {}\r\n          _.forEach(newVal, (item, index) => {\r\n            if (item.key) {\r\n              _.set(a, item.key, item.targetExpress)\r\n            }\r\n          })\r\n          if (a === {}) {\r\n            delete this.formData.editor.param\r\n          } else {\r\n            this.formData.editor.param = a\r\n          }\r\n        }\r\n      }\r\n    },\r\n    'editorWidget': {\r\n      handler(newVal) {\r\n        if (newVal) {\r\n          if (!this.formData.editor) {\r\n            this.formData.editor = {}\r\n          }\r\n          this.formData.editor.widget = newVal\r\n        }\r\n      }\r\n    },\r\n    'editorXtype': {\r\n      handler(newVal) {\r\n        if (newVal) {\r\n          if (!this.formData.editor) {\r\n            this.formData.editor = {}\r\n          }\r\n          this.formData.editor.xtype = newVal\r\n        }\r\n      }\r\n    },\r\n    'formData.editable': {\r\n      handler(newVal) {\r\n        if (!newVal) {\r\n          if (this.formData.editor) {\r\n            delete this.formData.editor\r\n          }\r\n\r\n        } else {\r\n          if (!this.formData.editor) {\r\n            this.formData.editor = {}\r\n          }\r\n        }\r\n      }\r\n    },\r\n    'formData.isActions': {\r\n      handler(newVal) {\r\n        if (!newVal) {\r\n          if (this.formData.isActions) {\r\n            delete this.formData.isActions\r\n          }\r\n        } else {\r\n          if (!this.formData.isActions) {\r\n            this.formData.actions = []\r\n          }\r\n          this.formData.dataIndex = \"__actions\"\r\n          if (!this.formData.header || this.formData.header === \"字段\") {\r\n            this.formData.header = \"操作\"\r\n          }\r\n        }\r\n      }\r\n    },\r\n  },\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div :id=\"vjson.id\" :key=\"vjson.id\"\r\n       :class=\"[customClass,'yv-aggrid-column', vjson.replaceFor?'prime':'']\"\r\n       @selectme.native=\"_selectMe\"\r\n       @click.stop=\"_selectMe\">\r\n    <template v-if=\"vjson.replaceFor\">\r\n      <div class=\"icon-box\">\r\n        <el-icon class=\"icon-edit\">\r\n          <component :is=\"renderIcon('element Key')\"/>\r\n        </el-icon>\r\n      </div>\r\n      <div class=\"icon-pre\">\r\n        <div class=\"code-name\">字段插槽</div>\r\n        <div class=\"code-id\">{{  parentComponent?.uiBlock + '.' + vjson.name }}</div>\r\n      </div>\r\n    </template>\r\n    <template v-else>\r\n      <div class=\"icon-box\">\r\n        <el-icon class=\"icon-edit\">\r\n          <component :is=\"calcIcon\"/>\r\n        </el-icon>\r\n      </div>\r\n      <div class=\"icon-pre\">\r\n        <div class=\"code-name\">{{ calcHeader }}</div>\r\n        <div class=\"code-id\">{{ calcField }}</div>\r\n      </div>\r\n    </template>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport {EditPen, Hide, Coin} from '@element-plus/icons-vue'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport YvDesignAggridColumnProp from \"./yv-design-aggrid-column-prop.vue\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport {markRaw} from \"vue\";\r\nimport _ from \"lodash\";\r\nimport {renderIcon} from \"../../../utils\";\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {},\r\n  computed: {\r\n    calcIcon() {\r\n      if (this.vjson.hidden) {\r\n        return markRaw(Hide)\r\n      }\r\n      if (this.vjson.editable && this.vjson.editor) {\r\n        const editor = this.vjson.editor\r\n        if (editor.xtype === 'numberfield') {\r\n          return renderIcon('antd FieldNumberOutlined')\r\n\r\n        } else if (editor.xtype === 'combobox') {\r\n          return renderIcon('antd DownSquareOutlined')\r\n\r\n        } else if (editor.xtype === 'memo') {\r\n          return renderIcon('element Memo')\r\n\r\n        } else if (editor.xtype === 'checkbox') {\r\n          return renderIcon('antd CheckSquareOutlined')\r\n\r\n        } else if (editor.xtype === 'combogrid') {\r\n          return renderIcon('antd SearchOutlined')\r\n\r\n        } else if (editor.xtype === 'datefield') {\r\n          return renderIcon('antd FieldTimeOutlined')\r\n\r\n        } else if (editor.xtype === 'datetimefield') {\r\n          return renderIcon('antd FieldTimeOutlined')\r\n\r\n        } else {\r\n          // 文本编辑器\r\n          return markRaw(EditPen)\r\n        }\r\n\r\n      }\r\n      if (this.vjson.dataType === 'number') {\r\n\r\n      } else if (this.vjson.dataType === 'date') {\r\n\r\n      } else if (this.vjson.dataType === 'datetime') {\r\n\r\n      }\r\n      return renderIcon('antd FieldStringOutlined')\r\n    },\r\n    calcHeader() {\r\n      const {header} = this.vjson\r\n      return header\r\n    },\r\n    calcField() {\r\n      const {dataIndex} = this.vjson\r\n      return dataIndex\r\n    },\r\n  },\r\n  watch: {\r\n    //\r\n  },\r\n  created() {\r\n  },\r\n  mounted() {\r\n    //\r\n  },\r\n  install(Vue) {\r\n    let desc = registeComponent('aggridcolumn')\r\n    desc.setDesign('YvDesignAggridColumn', this)\r\n    desc.setProp('YvDesignAggridColumnProp', YvDesignAggridColumnProp)\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'allowEdit', desc: '是否允许编辑', events: [{name: 'e'}]},\r\n      {name: 'input', desc: '输入内容时触发', events: [{name: 'e'}]},\r\n      {name: 'change', desc: '改变时触发', events: [{name: 'e'}]},\r\n      {name: 'click', desc: '点击时触发', events: [{name: 'e'}]},\r\n      {name: 'dbClick', desc: '双击时触发', events: [{name: 'e'}]},\r\n      {name: 'beginEdit', desc: '开始编辑时触发', events: [{name: 'e'}]},\r\n      {name: 'finishEdit', desc: '结束编辑时触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n\r\n    // desc = registeComponent('checkcolumn')\r\n    // desc.setDesign('YvDesignYvgridColumn', this)\r\n    // desc.setProp('YvDesignYvgridColumnProp', YvDesignYvgridColumnProp)\r\n    //\r\n    // desc.props = [\r\n    //   ...getDescDefaults('props'),\r\n    // ]\r\n    // desc.events = [\r\n    //   ...getDescDefaults('events'),\r\n    // ]\r\n    // desc.methods = [\r\n    //   ...getDescDefaults('methods')\r\n    // ]\r\n    //\r\n    // desc.install(Vue)\r\n  },\r\n  methods: {\r\n    onColumnDragAdd(evt) {\r\n      const newIndex = evt.newIndex\r\n      if (!!this.vjson.columns[newIndex]) {\r\n        this.designer.setSelected(this.vjson.columns[newIndex])\r\n      }\r\n\r\n      this.designer.emitHistoryChange()\r\n    },\r\n    onColumnDragUpdate() {\r\n      this.designer.emitHistoryChange()\r\n    },\r\n    checkColumnMove(evt) {\r\n      return this.designer.checkWidgetMove(evt)\r\n    },\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.yv-design-mode .yv-aggrid .yv-aggrid-column {\r\n  width: 100%;\r\n  height: 100%;\r\n  display: flex;\r\n  flex-direction: row;\r\n\r\n  &.prime {\r\n    color: var(--el-color-primary);\r\n    background-color: var(--el-color-primary-light-9);\r\n  }\r\n\r\n  .icon-box {\r\n    width: 50px;\r\n    text-align: center;\r\n    position: relative;\r\n    line-height: 66px;\r\n\r\n    &:after {\r\n      content: '';\r\n      position: absolute;\r\n      right: 0;\r\n      top: 10px;\r\n      width: 1px;\r\n      height: 40px;\r\n      background: #eeeeee;\r\n    }\r\n\r\n    .icon-edit {\r\n      font-size: 24px;\r\n      //color: #409eff;\r\n    }\r\n  }\r\n\r\n  .icon-pre {\r\n    padding: 10px;\r\n    flex: 1;\r\n\r\n    .code-name {\r\n      font-size: 16px;\r\n      margin-bottom: 5px;\r\n      font-weight: bold;\r\n      line-height: 17px;\r\n    }\r\n\r\n    .code-id {\r\n      font-size: 14px;\r\n      margin-bottom: 3px;\r\n    }\r\n\r\n    .code-type {\r\n      color: #333;\r\n      font-size: 13px;\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <json-editor-vue v-model=\"jsonStr\"\r\n                 :modeList=\"couldView\"\r\n                 currentMode=\"tree\"\r\n                 lang=\"zh\"\r\n                 @update:modelValue=\"updateModelValue\">\r\n  </json-editor-vue>\r\n</template>\r\n<script>\r\nimport Designer from \"../designer\";\r\n\r\nexport default {\r\n  props: {\r\n    modelValue: Object,\r\n    designer: Designer\r\n  },\r\n  emits: [\r\n    'update:modelValue',\r\n  ],\r\n  data() {\r\n    return {\r\n      couldView: [\"tree\", \"code\", \"form\"],\r\n      jsonStr: {\r\n        a: '{query.f1}',\r\n        b: '{query.f2}',\r\n        c: 'watch{query.f3}',\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    updateModelValue(newVal) {\r\n      console.log(newVal)\r\n    },\r\n  }\r\n}\r\n</script>","<template>\r\n  <div class=\"property aggrid-property\">\r\n    <div class=\"title\">aggrid 属性</div>\r\n    <el-tabs>\r\n      <el-tab-pane label=\"基本\">\r\n        <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n                 size=\"default\" @submit.native.prevent>\r\n          <el-form-item label=\"reference\" prop=\"reference\">\r\n            <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"uiBlock\" prop=\"uiBlock\">\r\n            <el-input v-model=\"formData.uiBlock\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"权限\" prop=\"permissions\">\r\n            <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <el-form-item label=\"标题\" prop=\"title\">\r\n            <el-input v-model=\"formData.title\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"模式\" prop=\"formData.mode\">\r\n            <el-select v-model=\"formData.mode\" class=\"full-width-input\" clearable>\r\n              <el-option value=\"select\" label=\"单行选择\"/>\r\n              <el-option value=\"checkbox\" label=\"多行勾选\"/>\r\n              <el-option value=\"checkonly\" label=\"只能打勾进行选择\"/>\r\n              <el-option value=\"checkboxSingleEdit\" label=\"多行勾选单击编辑\"/>\r\n              <el-option value=\"edit1\" label=\"单击编辑\"/>\r\n              <el-option value=\"edit2\" label=\"双击编辑\"/>\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"高亮选中行\" label-width=\"110px\" prop=\"hiLightSelectedRow\">\r\n            <el-switch v-model=\"formData.hiLightSelectedRow\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"自动载入数据\" label-width=\"110px\" prop=\"hidden\">\r\n            <el-switch v-model=\"formData.autoLoad\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"自动选中首行\" label-width=\"110px\" prop=\"hidden\">\r\n            <el-switch v-model=\"formData.autoSelectFirst\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"显示序号列\" label-width=\"110px\" prop=\"hidden\">\r\n            <el-switch v-model=\"formData.rowNumber\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"分页\" label-width=\"110px\" prop=\"hidden\">\r\n            <el-switch v-model=\"formData.pagination\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"隐藏\" label-width=\"110px\" prop=\"hidden\">\r\n            <el-switch v-model=\"formData.hidden\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"是否是卡片\" label-width=\"110px\" prop=\"isCard\">\r\n            <el-switch v-model=\"formData.isCard\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"边线\" prop=\"isBorder\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[0] === '1px'? 'primary':'default'\"\r\n                         @click=\"isBorder(0)\">上\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[1] === '1px'? 'primary':'default'\"\r\n                         @click=\"isBorder(1)\">右\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[2] === '1px'? 'primary':'default'\"\r\n                         @click=\"isBorder(2)\">下\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[3] === '1px'? 'primary':'default'\"\r\n                         @click=\"isBorder(3)\">左\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"显示垂直线\" label-width=\"110px\" prop=\"allowVerticalLine\">\r\n            <el-switch v-model=\"formData.allowVerticalLine\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"双向绑定数据\" label-width=\"110px\" prop=\"isBindMode\">\r\n            <el-switch v-model=\"formData.isBindMode\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"允许行拖拽\" label-width=\"110px\" prop=\"rowDragable\">\r\n            <el-switch v-model=\"formData.rowDragable\"></el-switch>\r\n          </el-form-item>\r\n          <template v-if=\"formData.rowDragable\">\r\n            <el-form-item label=\"排序字段\" label-width=\"80px\">\r\n              <el-input v-model=\"formData.rowDragField\" type=\"text\" clearable></el-input>\r\n            </el-form-item>\r\n          </template>\r\n          <el-divider/>\r\n\r\n          <el-form-item label=\"隐藏底部\" label-width=\"120px\">\r\n            <el-switch v-model=\"formData.hideFooterToolbar\" type=\"text\" clearable></el-switch>\r\n          </el-form-item>\r\n          <template v-if=\"!formData.hideFooterToolbar\">\r\n            <el-form-item label=\"隐藏刷新\" label-width=\"120px\">\r\n              <el-switch v-model=\"formData.hideFooterToolbarRefresh\" type=\"text\" clearable></el-switch>\r\n            </el-form-item>\r\n            <el-form-item label=\"隐藏统计\" label-width=\"120px\">\r\n              <el-switch v-model=\"formData.hideFooterToolbarRowCount\" type=\"text\" clearable></el-switch>\r\n            </el-form-item>\r\n            <el-form-item label=\"隐藏导出\" label-width=\"120px\">\r\n              <el-switch v-model=\"formData.hideFooterToolbarExcelExport\" type=\"text\" clearable></el-switch>\r\n            </el-form-item>\r\n            <el-form-item label=\"隐藏导入\" label-width=\"120px\">\r\n              <el-switch v-model=\"formData.hideFooterToolbarExcelImport\" type=\"text\" clearable></el-switch>\r\n            </el-form-item>\r\n            <el-form-item label=\"隐藏筛选\" label-width=\"120px\">\r\n              <el-switch v-model=\"formData.hideFooterToolbarFilter\" type=\"text\" clearable></el-switch>\r\n            </el-form-item>\r\n          </template>\r\n\r\n          <el-divider/>\r\n          <el-form-item label=\"树形分组\" label-width=\"110px\" prop=\"isCustomGroup\">\r\n            <el-switch v-model=\"formData.isCustomGroup\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item v-if=\"formData.isCustomGroup\" label=\"默认展开层\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.groupDefaultExpanded === 0? 'primary':'default'\"\r\n                         @click=\"()=>formData.groupDefaultExpanded='0'\">0\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.groupDefaultExpanded === 1? 'primary':'default'\"\r\n                         @click=\"()=>formData.groupDefaultExpanded=1\">1\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.groupDefaultExpanded === 2? 'primary':'default'\"\r\n                         @click=\"()=>formData.groupDefaultExpanded=2\">2\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.groupDefaultExpanded === 3? 'primary':'default'\"\r\n                         @click=\"()=>formData.groupDefaultExpanded=3\">3\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.groupDefaultExpanded === -1? 'primary':'default'\"\r\n                         @click=\"()=>formData.groupDefaultExpanded=-1\">全部\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <el-form-item label=\"快速过滤\" label-width=\"110px\" prop=\"allowQuickFilter\">\r\n            <el-switch v-model=\"formData.allowQuickFilter\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item v-if=\"formData.allowQuickFilter\" label=\"过滤属性\" label-width=\"80px\">\r\n            <YvDesignInputExpress v-model=\"formData.quickFilterText\" :designer=\"designer\"/>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <yv-design-input-height :form-data=\"formData\" :designer=\"designer\"/>\r\n          <el-divider/>\r\n          <el-form-item label=\"库表名称\" label-width=\"110px\">\r\n            <el-input v-model=\"formData.dbTableName\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"操作日志分组\" label-width=\"110px\">\r\n            <el-input v-model=\"formData.operLogCategory\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n        </el-form>\r\n      </el-tab-pane>\r\n      <el-tab-pane label=\"字段\">\r\n        <div class=\"enumeration enumeration-title\">\r\n          <div class=\"enumeration-col\">表头</div>\r\n          <div class=\"enumeration-col\">属性</div>\r\n          <div class=\"enumeration-col\" style=\"width: 26px;\"></div>\r\n        </div>\r\n        <div class=\"enumeration\" v-for=\"(column,indx) in formData.columns\">\r\n          <div class=\"enumeration-col\">\r\n            <el-input v-model=\"column.header\" type=\"text\" clearable/>\r\n          </div>\r\n          <div class=\"enumeration-col\">\r\n            <el-input v-model=\"column.dataIndex\" type=\"text\" clearable/>\r\n          </div>\r\n          <div class=\"enumeration-col\">\r\n            <span class=\"iconfont icon-shanchu1\" @click=\"(button)=>removeColumn(button, column)\"></span>\r\n          </div>\r\n        </div>\r\n        <el-button type=\"primary\" :icon=\"renderIcon('fa Plus')\" link @click=\"addNewColumn\" class=\"enumeration-add-btn\">\r\n          添加一项\r\n        </el-button>\r\n        <el-button type=\"primary\" :icon=\"renderIcon('fa Cube')\" link @click=\"addNewColumnAuto\"\r\n                   class=\"enumeration-add-btn\">\r\n          自动分析(表头+字典)\r\n        </el-button>\r\n      </el-tab-pane>\r\n      <YvDesignDatasource :formData=\"formData\" :designer=\"designer\" :vjson=\"vjson\" :vcxt=\"vcxt\">\r\n        <el-divider content-position=\"left\">树形数据</el-divider>\r\n        <el-form-item label=\"树模型\" label-width=\"110px\" prop=\"isCard\">\r\n          <el-switch v-model=\"formData.isTreeModel\"></el-switch>\r\n        </el-form-item>\r\n        <el-form-item label=\"ID字段\" v-if=\"formData.isTreeModel\">\r\n          <el-select v-model=\"formData.dataSource.idField\" class=\"full-width-input\" clearable>\r\n            <el-option v-for=\"column in formData.columns\" :value=\"column.dataIndex\"\r\n                       :label=\"column.header+' ('+column.dataIndex+')'\"/>\r\n          </el-select>\r\n        </el-form-item>\r\n        <el-form-item label=\"父级字段\" v-if=\"formData.isTreeModel\">\r\n          <el-select v-model=\"formData.dataSource.parentField\" class=\"full-width-input\" clearable>\r\n            <el-option v-for=\"column in formData.columns\" :value=\"column.dataIndex\"\r\n                       :label=\"column.header+' ('+column.dataIndex+')'\"/>\r\n          </el-select>\r\n        </el-form-item>\r\n        <el-form-item label=\"折叠字段\" v-if=\"formData.isTreeModel\">\r\n          <el-select v-model=\"formData.dataSource.textField\" class=\"full-width-input\" clearable>\r\n            <el-option v-for=\"column in formData.columns\" :value=\"column.dataIndex\"\r\n                       :label=\"column.header+' ('+column.dataIndex+')'\"/>\r\n          </el-select>\r\n        </el-form-item>\r\n        <el-form-item v-if=\"formData.isTreeModel\" label=\"默认展开层级\" label-width=\"110px\">\r\n          <el-button-group>\r\n            <el-button size=\"small\" :type=\"formData.groupDefaultExpanded === 0? 'primary':'default'\"\r\n                       @click=\"()=>formData.groupDefaultExpanded=0\">0\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"formData.groupDefaultExpanded === 1? 'primary':'default'\"\r\n                       @click=\"()=>formData.groupDefaultExpanded=1\">1\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"formData.groupDefaultExpanded === 2? 'primary':'default'\"\r\n                       @click=\"()=>formData.groupDefaultExpanded=2\">2\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"formData.groupDefaultExpanded === 3? 'primary':'default'\"\r\n                       @click=\"()=>formData.groupDefaultExpanded=3\">3\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"formData.groupDefaultExpanded === -1? 'primary':'default'\"\r\n                       @click=\"()=>formData.groupDefaultExpanded=-1\">全部\r\n            </el-button>\r\n          </el-button-group>\r\n        </el-form-item>\r\n      </YvDesignDatasource>\r\n      <el-tab-pane label=\"详情对话框\">\r\n        <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n                 size=\"default\" @submit.native.prevent>\r\n          <el-button v-if=\"!computDialogReference\" @click=\"createDetailDialog\">\r\n            创建详情对话框\r\n          </el-button>\r\n          <el-button v-else @click=\"unlinkDetailDialog\">\r\n            删除关联 - {{ computDialogReference }}\r\n          </el-button>\r\n        </el-form>\r\n      </el-tab-pane>\r\n    </el-tabs>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport VJsonContext from \"../../vjson/VJsonContext\";\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\";\r\nimport YvDesignInputJson from './yv-design-input-json.vue'\r\nimport YvDesignInputHeight from \"./yv-design-input-height.vue\"\r\nimport YvDesignDatasource from \"./yv-design-datasource.vue\";\r\nimport {getTableByName, getTableColumnByName} from \"../../../utils\";\r\nimport YvDesignInputExpress from './yv-design-input-express.vue'\r\nimport {Drawer as DrawerDefaultProps} from \"../../vjson/Defaults\";\r\nimport {addVJsonId, deepTrav} from \"../../yv-utils\";\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\";\r\n\r\nexport default {\r\n  mixins: [basePropMix],\r\n  components: {YvDesignerPermissions, YvDesignDatasource, YvDesignInputJson, YvDesignInputHeight, YvDesignInputExpress},\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        isBorder: this.vjson.isBorder ?? []\r\n      },\r\n    }\r\n  },\r\n  computed: {\r\n    /**\r\n     * 从 design.vjson.dialogs 中找到引用此表格的对话框\r\n     */\r\n    computDialogReference() {\r\n      const dialog = _.find(this.designer.vjson.dialogs, d => d.referenceGrid === this.vjson.reference)\r\n      return dialog?.reference\r\n      // deepTrav(dialog.items, (target) => {\r\n      //   if (target.xtype === 'form' && target.referenceGrid === this.vjson.reference) {\r\n      //     return true\r\n      //   }\r\n      // })\r\n    },\r\n  },\r\n  methods: {\r\n    createDetailDialog() {\r\n      if (!this.vjson.reference) {\r\n        system.msg('请先设置引用名')\r\n        return\r\n      }\r\n      if (!this.designer.vjson.dialogs) {\r\n        this.designer.vjson.dialogs = []\r\n      }\r\n\r\n      const title = '新增/编辑' + this.vjson.reference\r\n      const footReference = 'footer_' + this.vjson.reference\r\n      const dialogReference = 'dialog_' + this.vjson.reference\r\n\r\n      const newVJson = {\r\n        xtype: 'drawer',\r\n        ...DrawerDefaultProps,\r\n        title: title,\r\n        referenceGrid: this.vjson.reference,\r\n        footerReference: footReference,\r\n        reference: dialogReference,\r\n        items: [\r\n          {\r\n            xtype: 'form',\r\n            colsOfRow: 2,\r\n            items: [\r\n              {\r\n                xtype: 'textfield',\r\n                fieldLabel: '字段1',\r\n                bind: {\r\n                  value: '',\r\n                },\r\n              },\r\n              {\r\n                xtype: 'textfield',\r\n                fieldLabel: '字段2',\r\n                bind: {\r\n                  value: '',\r\n                },\r\n              },\r\n              {\r\n                xtype: 'textfield',\r\n                fieldLabel: '字段3',\r\n                bind: {\r\n                  value: '',\r\n                },\r\n              },\r\n            ],\r\n            scrollable: true,\r\n            referenceGrid: this.vjson.reference,\r\n          },\r\n          {\r\n            xtype: 'toolbar',\r\n            reference: footReference,\r\n            items: [\r\n              {\r\n                xtype: 'button',\r\n                text: '保存',\r\n                iconCls: 'fa Save',\r\n                type: 'primary',\r\n                listeners: {\r\n                  click: \"\"\r\n                }\r\n              },\r\n              {\r\n                xtype: 'button',\r\n                text: '取消',\r\n                iconCls: 'element Close',\r\n                listeners: {\r\n                  click: \"this.refs.\" + dialogReference + \".close()\"\r\n                }\r\n              },\r\n            ],\r\n            alignRight: true,\r\n            isFlat: false,\r\n            isBorder: ['0px', '0px', '0px', '0px',],\r\n            isFooterToolbar: true,\r\n          },\r\n        ],\r\n      }\r\n      addVJsonId(newVJson)\r\n\r\n      const dialogs = this.designer.vjson.dialogs\r\n      dialogs.push(newVJson)\r\n      this.$nextTick(() => {\r\n        system.msg('创建关联表格成功')\r\n        this.designer.saveCurrentHistoryStep()\r\n      })\r\n      _.defer(() => {\r\n        this.designer.selectedDialogId = newVJson.id\r\n      })\r\n    },\r\n    unlinkDetailDialog() {\r\n      // 删除详情对话框的关联\r\n      const dialog = _.find(this.designer.vjson.dialogs, d => d.referenceGrid === this.vjson.reference)\r\n      deepTrav(dialog, (target) => {\r\n        if (target.referenceGrid === this.vjson.reference) {\r\n          target.referenceGrid = ''\r\n          return false\r\n        }\r\n      })\r\n\r\n      if (dialog) {\r\n        delete dialog.referenceGrid\r\n      }\r\n    },\r\n    addNewColumnAuto() {\r\n      // 自动填写\r\n      let cnt = 0, dicCnt = 0\r\n      _.forEach(this.formData.columns, (column) => {\r\n        if (column.dataIndex) {\r\n          const columns = getTableColumnByName(column.dataIndex)\r\n          const c = _.find(columns, (i) => column.dataIndex === i.column_name)\r\n          if (c?.column_comment && !column.header) {\r\n            column.header = c.column_comment\r\n            cnt++\r\n          }\r\n          if (c?.column_dict && !column.dict) {\r\n            column.dict = c.column_dict\r\n            dicCnt++\r\n          }\r\n        }\r\n        if (cnt > 0 || dicCnt > 0) {\r\n          system.msg(`补充了 ${cnt}个表头, ${dicCnt}个字典`)\r\n        } else {\r\n          system.msg(`没有补充任何属性`)\r\n        }\r\n      })\r\n    },\r\n    addNewColumn() {//添加字段\r\n      if (!_.isArray(this.formData.columns)) {\r\n        this.formData.columns = []\r\n      }\r\n      this.formData.columns.push({id: _.uniqueId('_id')})\r\n    },\r\n    removeColumn(button, column) {\r\n      _.remove(this.formData.columns, column)\r\n    },\r\n    isBorder(type) {\r\n      if (!this.formData.isBorder) {\r\n        this.formData.isBorder = []\r\n      }\r\n      if (type === 0) {\r\n        if (this.formData.isBorder[0] === '0px') {\r\n          this.formData.isBorder[0] = '1px'\r\n        } else {\r\n          this.formData.isBorder[0] = '0px'\r\n        }\r\n      } else if (type === 1) {\r\n        if (this.formData.isBorder[1] === '0px') {\r\n          this.formData.isBorder[1] = '1px'\r\n        } else {\r\n          this.formData.isBorder[1] = '0px'\r\n        }\r\n      } else if (type === 2) {\r\n        if (this.formData.isBorder[2] === '0px') {\r\n          this.formData.isBorder[2] = '1px'\r\n        } else {\r\n          this.formData.isBorder[2] = '0px'\r\n        }\r\n      } else if (type === 3) {\r\n        if (this.formData.isBorder[3] === '0px') {\r\n          this.formData.isBorder[3] = '1px'\r\n        } else {\r\n          this.formData.isBorder[3] = '0px'\r\n        }\r\n      }\r\n    }\r\n  },\r\n\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    },\r\n    'formData.isTreeModel': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        if (newVal) {\r\n          this.formData.pagination = false\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.yv-aggrid-prop-dialog {\r\n  height: 70%;\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  .el-dialog__body {\r\n    flex-grow: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n}\r\n</style>\r\n<style lang=\"less\">\r\n.property.aggrid-property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  .el-tabs {\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n\r\n    .el-tabs__header {\r\n      .el-tabs__item {\r\n        padding: 0 10px;\r\n      }\r\n\r\n      .el-tabs__item.is-active, .el-tabs__item:hover {\r\n        color: #000;\r\n      }\r\n\r\n      .el-tabs__active-bar {\r\n        background-color: var(--main-color)\r\n      }\r\n    }\r\n\r\n    .el-tabs__content {\r\n      flex: 1;\r\n      overflow: auto;\r\n\r\n      .enumeration-title {\r\n        color: #333;\r\n        font-size: 14px;\r\n        margin-bottom: 5px;\r\n      }\r\n\r\n      .enumeration {\r\n        margin-bottom: 5px;\r\n        display: flex;\r\n        flex-direction: row;\r\n\r\n        .enumeration-col {\r\n          &:nth-child(1), &:nth-child(2) {\r\n            flex: 1;\r\n            padding-right: 3px;\r\n          }\r\n\r\n          &:nth-child(3) {\r\n            line-height: 32px;\r\n\r\n            span:nth-child(1) {\r\n              margin: 0 5px\r\n            }\r\n\r\n            span:nth-child(2) {\r\n              cursor: move;\r\n              margin-right: 5px;\r\n              font-size: 20px;\r\n              position: relative;\r\n              top: 1px\r\n            }\r\n          }\r\n\r\n          .el-input__wrapper {\r\n            border-radius: 0;\r\n          }\r\n        }\r\n\r\n        &.aggrid-sql {\r\n          .enumeration-col {\r\n            &:nth-child(3), &:nth-child(4) {\r\n              span:nth-child(1) {\r\n                margin: 0\r\n              }\r\n\r\n              span:nth-child(2) {\r\n                cursor: pointer;\r\n                margin-right: 2px;\r\n                top: 1px\r\n              }\r\n            }\r\n\r\n            &:nth-child(5) {\r\n              line-height: 32px;\r\n\r\n              span {\r\n                cursor: pointer;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      .enumeration-add-btn {\r\n        color: var(--main-color)\r\n      }\r\n\r\n      .sql-param {\r\n        display: flex;\r\n        flex-direction: row;\r\n        margin: 3px 0;\r\n\r\n        .sql-param-num {\r\n          font-size: 14px;\r\n          min-width: 50px;\r\n          text-align: right;\r\n          margin-right: 6px;\r\n          line-height: 30px;\r\n        }\r\n\r\n        .sql-param-detail {\r\n          flex: 1;\r\n          margin-right: 10px;\r\n\r\n          .sql-param-detail-row {\r\n            margin-bottom: 5px;\r\n\r\n            &:nth-child(3) {\r\n              display: flex;\r\n              flex-direction: row;\r\n              justify-content: space-between;\r\n\r\n              .sql-param-detail-col {\r\n                font-size: 13px;\r\n                line-height: 20px;\r\n\r\n                .el-checkbox {\r\n                  height: 16px;\r\n                  position: relative;\r\n                  top: 2px;\r\n                }\r\n\r\n                .el-button > span {\r\n                  font-size: 13px;\r\n                }\r\n\r\n                .el-button--primary.is-link {\r\n                  padding: 0;\r\n                  position: relative;\r\n                  top: -1px\r\n                }\r\n              }\r\n            }\r\n          }\r\n\r\n          .el-input__wrapper {\r\n            border-radius: 0;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  form {\r\n    overflow-x: hidden;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n.yv-aggrid-wrap.yv-card {\r\n  margin: 10px;\r\n  background: #fff;\r\n  border: 1px solid var(--el-menu-border-color);\r\n}\r\n</style>","<template>\r\n  <component ref=\"gridEditor\"\r\n             :is=\"getRuntimeCmp(vjson)\"\r\n             :vjson=\"vjson\"\r\n             :vcxt=\"vcxt\"\r\n             :dialog-scope=\"dialogScope\"/>\r\n</template>\r\n<script>\r\nimport baseVjsonMix from \"./baseVjsonMix\";\r\nimport _ from \"lodash\"\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  data() {\r\n    const editorOption = {\r\n      \"__inGridEditor\": true,\r\n      bind: {\r\n        value: \"{\" + this.params.colDef.field +\"}\"\r\n      }\r\n    }\r\n    if (!this.params.colDef.editor?.xtype) {\r\n      editorOption.xtype = \"textfield\"\r\n    }\r\n    const vjson = _.merge(this.params.colDef.editor, editorOption)\r\n    return {\r\n      value: null,\r\n      vjson: vjson,\r\n      vcxt: {\r\n        scope: {\r\n          $data: this.params.data,\r\n          rowNode: this.params.node\r\n        }\r\n      },\r\n    };\r\n  },\r\n  methods: {\r\n    getValue() {\r\n      return this.$refs.gridEditor.realValue;\r\n    },\r\n    isCancelBeforeStart() {\r\n      return false;\r\n    },\r\n\r\n    isCancelAfterEnd() {\r\n      return false;\r\n    }\r\n  },\r\n  mounted() {\r\n    this.value = this.params.value;\r\n    // Vue.nextTick(() => this.$refs.input.focus());\r\n  }\r\n}\r\n\r\n</script>","<template>\r\n  <el-select ref=\"_inner\" v-model=\"value\"\r\n             :multiple=\"multiple\"\r\n             filterable\r\n             clearable\r\n             class=\"yv-aggrid-combo yv-aggrid-editor\"\r\n             @change=\"onChange\">\r\n    <template v-for=\"dict in dictList\">\r\n      <el-option v-if=\"!dict.dictComment\"\r\n                 :key=\"dict.dictValue\"\r\n                 :label=\"dict.dictText\"\r\n                 :value=\"dict.dictValue\"\r\n      />\r\n      <el-option v-if=\"dict.dictComment\"\r\n                 :key=\"dict.dictValue\"\r\n                 :label=\"dict.dictText\"\r\n                 :value=\"dict.dictValue\"\r\n      >\r\n        <span style=\"float: left\">{{ dict.dictText }}</span>\r\n        <span style=\" float: right; color: var(--el-text-color-secondary); font-size: 13px; \">{{\r\n            dict.dictComment\r\n          }}</span>\r\n      </el-option>\r\n    </template>\r\n\r\n\r\n  </el-select>\r\n</template>\r\n<script>\r\nimport {nextTick} from \"vue\";\r\nimport {runEvent} from \"../yv-utils\";\r\nimport {dict} from \"../../store\"\r\nimport _ from 'lodash'\r\n\r\nexport default {\r\n  mixins: [],\r\n  data() {\r\n    return {\r\n      value: null,\r\n    };\r\n  },\r\n  computed: {\r\n    multiple() {\r\n      return (this.params.editor.multiple === true)\r\n    },\r\n    dictList() {\r\n      if (this.params.editor?.dataType === 1) {\r\n        // 固定值\r\n        return this.params.editor.dataEnum ?? []\r\n      }\r\n      if (this.params.editor?.dataType === 3) {\r\n        const enumExpr = this.params.editor.enumExpr\r\n\r\n        let expr = enumExpr\r\n        if (_.startsWith(enumExpr, '{') && _.endsWith(enumExpr, '}')) {\r\n          expr = enumExpr.substring(1, enumExpr.length - 1)\r\n        }\r\n        const rt = _.get(this.params.scope, expr)\r\n        console.log('enumExpr', enumExpr, rt)\r\n        return rt\r\n      }\r\n      return dict.value[this.params.dict]?.items\r\n    }\r\n  },\r\n  methods: {\r\n    hasComment() {\r\n      // 判断 dictList 所有元素中是否包含有 dict_comment 字段\r\n      return _.some(this.dictList, r => r.dictComment)\r\n    },\r\n\r\n    getValue() {\r\n      return this.value;\r\n    },\r\n\r\n    onChange(newValue) {\r\n      // const data = this.params.data\r\n      // data[this.params.column.colId] = newValue\r\n      //\r\n      // this.params.api.applyTransaction({\r\n      //   update: [data]\r\n      // })\r\n\r\n      // runEvent(this.params.scope, this.params.scope, this.params.editor, 'onChange', newValue, this.params.data, this.params, (data) => {\r\n      //   this.params.api.applyTransaction({\r\n      //     update: [data]\r\n      //   })\r\n      // })\r\n\r\n      runEvent(this.params.scope, this.params.column.colDef, 'change', newValue, this.params.data, this.params, (data) => {\r\n        this.params.api.applyTransaction({\r\n          update: [data]\r\n        })\r\n      })\r\n    }\r\n  },\r\n  mounted() {\r\n    this.value = this.params.value;\r\n    nextTick(() => {\r\n      this.$refs._inner.focus()\r\n    })\r\n  }\r\n}\r\n\r\n</script>\r\n<style>\r\n.yv-aggrid-combo {\r\n  width: 100%;\r\n}\r\n\r\n.yv-aggrid-combo.el-select .el-input.is-focus .el-input__wrapper {\r\n  box-shadow: none !important;\r\n}\r\n</style>","<template>\r\n  <el-date-picker ref=\"_inner\" class=\"yv-aggrid-date yv-aggrid-editor\"\r\n                  v-model=\"value\"\r\n                  :type=\"type\"\r\n                  :value-format=\"valueFormat\"\r\n                  :clearable=\"false\"\r\n                  @change=\"onChange\"/>\r\n</template>\r\n<script>\r\nimport {nextTick} from \"vue\";\r\nimport {runEvent} from \"../yv-utils\";\r\n\r\nexport default {\r\n  mixins: [],\r\n  data() {\r\n    return {\r\n      value: null,\r\n      valueFormat: this.params.type === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD',\r\n      type: this.params.type ?? 'date',\r\n    };\r\n  },\r\n  methods: {\r\n    getValue() {\r\n      return this.value;\r\n    },\r\n    focus() {\r\n      this.$refs._inner.focus()\r\n    },\r\n    onChange(newValue) {\r\n      // const data = this.params.data\r\n      // data[this.params.column.colId] = newValue\r\n      //\r\n      // this.params.api.applyTransaction({\r\n      //   update: [data]\r\n      // })\r\n      runEvent(this.params.scope, this.params.editor, 'onChange', newValue, this.params.data, this.params, (data) => {\r\n        this.params.api.applyTransaction({\r\n          update: [data]\r\n        })\r\n      })\r\n\r\n      runEvent(this.params.scope, this.params.column.colDef, 'change', newValue, this.params.data, this.params, (data) => {\r\n        this.params.api.applyTransaction({\r\n          update: [data]\r\n        })\r\n      })\r\n    }\r\n  },\r\n  mounted() {\r\n    this.value = this.params.value;\r\n    nextTick(() => {\r\n      this.$refs._inner.focus()\r\n      if (typeof this.$refs._inner.show === 'function') {\r\n        this.$refs._inner?.show()\r\n      }\r\n    })\r\n  }\r\n}\r\n\r\n</script>\r\n<style>\r\n.yv-aggrid-date {\r\n  width: 100%;\r\n}\r\n\r\n.yv-aggrid-date .el-input__wrapper .el-input__prefix {\r\n  display: none;\r\n}\r\n</style>","<template>\r\n  <el-input ref=\"_inner\" class=\"yv-aggrid-editor\"\r\n            v-model=\"value\"\r\n            :type=\"type\"\r\n            :clearable=\"false\"\r\n            @input=\"onInput\"\r\n            @change=\"onChange\"/>\r\n</template>\r\n<script>\r\nimport {nextTick} from \"vue\";\r\nimport {runEvent} from \"../yv-utils\";\r\n\r\nexport default {\r\n  mixins: [],\r\n  data() {\r\n    return {\r\n      value: null,\r\n      type: this.params.type ?? 'text',\r\n    };\r\n  },\r\n  methods: {\r\n    getValue() {\r\n      return this.value;\r\n    },\r\n\r\n    onInput(newValue) {\r\n      runEvent(this.params.scope, this.params.column.colDef, 'input', newValue, this.params.data, this.params, (data) => {\r\n        this.params.api.applyTransaction({\r\n          update: [data]\r\n        })\r\n      })\r\n    },\r\n\r\n    onChange(newValue) {\r\n      // const data = this.params.data\r\n      // data[this.params.column.colId] = newValue\r\n      //\r\n      // this.params.api.applyTransaction({\r\n      //   update: [data]\r\n      // })\r\n\r\n      runEvent(this.params.scope, this.params.editor, 'onChange', newValue, this.params.data, this.params, (data) => {\r\n        this.params.api.applyTransaction({\r\n          update: [data]\r\n        })\r\n      })\r\n\r\n      runEvent(this.params.scope, this.params.column.colDef, 'change', newValue, this.params.data, this.params, (data) => {\r\n        this.params.api.applyTransaction({\r\n          update: [data]\r\n        })\r\n      })\r\n    }\r\n  },\r\n  mounted() {\r\n    this.value = this.params.value;\r\n    nextTick(() => {\r\n      this.$refs._inner.focus()\r\n    })\r\n  }\r\n}\r\n\r\n</script>\r\n<style>\r\n.ag-cell-inline-editing {\r\n  border-radius: 0;\r\n}\r\n\r\n.yv-aggrid-editor {\r\n  border: 0;\r\n  outline: none;\r\n  box-shadow: none;\r\n}\r\n\r\n.yv-aggrid-editor .el-input__wrapper {\r\n  border-radius: 0;\r\n  outline: none;\r\n  box-shadow: none;\r\n}\r\n</style>","<template>\r\n  <el-input ref=\"_inner\" class=\"yv-aggrid-editor\"\r\n            v-model=\"queryValue\"\r\n            :clearable=\"false\"\r\n            @blur=\"_onBlur\"\r\n            @keydown=\"_onKeydown\"\r\n            @clear=\"_onClearMe\"\r\n            @change=\"onChange\">\r\n    <template #suffix>\r\n      <el-icon style=\"cursor: pointer\" @click.prevent=\"_onClearMe\">\r\n        <CircleClose/>\r\n      </el-icon>\r\n    </template>\r\n    <template #prefix>\r\n      <el-icon ref=\"popoverRef\" style=\"cursor: pointer\" @click=\"_onSearchClick\">\r\n        <Search/>\r\n      </el-icon>\r\n      <el-popover v-if=\"_expanded\"\r\n                  :visible=\"true\"\r\n                  :virtual-ref=\"$refs._inner\"\r\n                  virtual-triggering\r\n                  @after-enter=\"_onPickerOpened\"\r\n                  @after-leave=\"_onPickerClosed\"\r\n                  placement=\"bottom-start\"\r\n                  width=\"850\"\r\n                  popper-class=\"el-popper-combogrid\"\r\n      >\r\n        <el-row class=\"combogrid-search\">\r\n          <input ref=\"dialogQueryField\" type=\"text\" @keydown=\"_onTextKeyDown\"/>\r\n          <el-button type=\"primary\" @click=\"_onDialogQueryClick\">查询</el-button>\r\n        </el-row>\r\n        <component ref=\"dialogQueryGrid\"\r\n                   :is=\"getRuntimeCmp(gridOption)\"\r\n                   :vjson=\"gridOption\"\r\n                   :vcxt=\"vcxt\"/>\r\n      </el-popover>\r\n    </template>\r\n\r\n  </el-input>\r\n</template>\r\n<script>\r\nimport {Search, CircleClose} from '@element-plus/icons-vue'\r\nimport {nextTick, toRaw} from \"vue\";\r\nimport {runEvent} from \"../yv-utils\"\r\nimport {renderIcon} from \"../../utils\"\r\nimport ComboGridMixin from \"./ComboGridMixin\";\r\nimport {getRuntimeCmp} from \"../design/yv-designer-desc\";\r\nimport _ from \"lodash\";\r\nimport $ from \"jquery\";\r\nimport {calcObjectFlat} from \"../raw/utils\";\r\n\r\nexport default {\r\n  components: {Search, CircleClose},\r\n  mixins: [ComboGridMixin],\r\n  data() {\r\n    let gridOption = this._buildGridOption(this.params.scope, this.params.editor)\r\n    gridOption.dataSource.paramsFn = (grid) => {\r\n      let param = {}\r\n      if (param) {\r\n        // combogrid 需要带入 param 条件, 是 模块数据+字段列数据的组合\r\n        const paramForCalc = _.extend({}, this.params.scope.$data, this.params.data)\r\n        param = calcObjectFlat(paramForCalc, this.params.editor.param) ?? {}\r\n      }\r\n\r\n      const queryValue = this.$refs.dialogQueryField.value\r\n      param.__queryValue = queryValue\r\n      return param\r\n    }\r\n\r\n    return {\r\n      value: null,\r\n      _expanded: false,\r\n      _escPreventDefault: false,\r\n      vcxt: this.params.vcxt,\r\n      gridOption,\r\n      queryValue: undefined,  //用户用来输入的值\r\n    };\r\n  },\r\n  watch: {\r\n    'value': {\r\n      handler(newVal) {\r\n        // 真实值发生变化时，用户输入的临时值完全放弃\r\n        this.queryValue = newVal\r\n      }\r\n    },\r\n    'queryValue': {\r\n      handler(newVal) {\r\n        if (this.params.allowCustomInput) {\r\n          this.value = newVal\r\n        }\r\n      }\r\n    },\r\n  },\r\n  methods: {\r\n    renderIcon: renderIcon,\r\n    getRuntimeCmp: getRuntimeCmp,\r\n    focus() {\r\n      this.$refs._inner.focus()\r\n    },\r\n    getValue() {\r\n      return this.value;\r\n    },\r\n    _onClearMe() {\r\n      // 根据 lookup 属性，相关联的属性全部清空\r\n      const data = this.params.data\r\n      const lookup = toRaw(this.params.editor.lookup)\r\n\r\n      _.forOwn(lookup, (writeTarget, gridColumn) => {\r\n        if (_.startsWith(writeTarget, '{')) {\r\n          writeTarget = writeTarget.substring(1)\r\n        }\r\n        if (_.endsWith(writeTarget, '}')) {\r\n          writeTarget = writeTarget.substring(0, writeTarget.length - 1)\r\n        }\r\n\r\n        _.set(data, writeTarget, '')\r\n      })\r\n\r\n      this.params.setEditRow(data)\r\n      runEvent(this.params.scope, this.params.editor, 'onChange', '', data, this.params, (data) => {\r\n        this.params.api.applyTransaction({\r\n          update: [data]\r\n        })\r\n      })\r\n\r\n      runEvent(this.params.scope, this.params.column.colDef, 'change', '', this.params.data, this.params, (data) => {\r\n        this.params.api.applyTransaction({\r\n          update: [data]\r\n        })\r\n      })\r\n    },\r\n    _onGridRowDblClick(grid, event) {\r\n      // 选中数据\r\n      const data = this.params.data\r\n      const record = event.data\r\n      const lookup = toRaw(this.params.editor.lookup)\r\n      // 回写值\r\n      _.forOwn(lookup, (writeTarget, gridColumn) => {\r\n        if (_.startsWith(writeTarget, '{')) {\r\n          writeTarget = writeTarget.substring(1)\r\n        }\r\n        if (_.endsWith(writeTarget, '}')) {\r\n          writeTarget = writeTarget.substring(0, writeTarget.length - 1)\r\n        }\r\n\r\n        _.set(data, writeTarget, _.get(record, gridColumn))\r\n      })\r\n      this.params.setEditRow(data)\r\n\r\n      const newValue = data[this.params.column.colId]\r\n      runEvent(this.params.scope, this.params.editor, 'onChange', newValue, data, this.params, (data) => {\r\n        this.params.api.applyTransaction({\r\n          update: [data]\r\n        })\r\n      })\r\n\r\n      runEvent(this.params.scope, this.params.column.colDef, 'change', newValue, this.params.data, this.params, (data) => {\r\n        this.params.api.applyTransaction({\r\n          update: [data]\r\n        })\r\n      })\r\n      this.collapse()\r\n    },\r\n    _onBlur(e) {\r\n    },\r\n    _collapseIf(e) {\r\n      /**\r\n       * 判断鼠标是不是点击在外头，需要关闭弹窗\r\n       */\r\n      const me = this;\r\n\r\n      let target = e.target\r\n      if (e.toElement) {\r\n        // focus 跳转\r\n        target = e.toElement\r\n      }\r\n\r\n      if ($(target).closest('.el-popover').length === 0 &&\r\n          $(target).closest('.el-select__popper').length === 0 &&\r\n          $(target).closest(this.$el).length === 0) {\r\n        me.collapse();\r\n      }\r\n    },\r\n    onChange(newValue) {\r\n    }\r\n  },\r\n  mounted() {\r\n    this.value = this.params.value;\r\n    nextTick(() => {\r\n      this.$refs._inner.focus()\r\n    })\r\n  }\r\n}\r\n\r\n</script>\r\n<style>\r\n.ag-cell-inline-editing {\r\n  border-radius: 0;\r\n}\r\n\r\n.yv-aggrid-editor {\r\n  border: 0;\r\n  outline: none;\r\n  box-shadow: none;\r\n}\r\n\r\n.yv-aggrid-editor .el-input__wrapper {\r\n  border-radius: 0;\r\n  outline: none;\r\n  box-shadow: none;\r\n}\r\n</style>","<template>\r\n  <div>\r\n    <template v-for=\"(action, idx) in actions\">\r\n      <a v-show=\"isShow(action)\" style=\"cursor: pointer;color: blue;\" @click=\"clickHandler(action)\">{{ action.text || '操作' }}</a>\r\n      <span v-show=\"isShow(action) && (idx+1) < actions.length\" style=\"display: inline-block;width: 8px;\"/>\r\n    </template>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport {TypeEnum, variableTypeOf} from '../../utils'\r\n\r\nexport default {\r\n  components: {},\r\n  data() {\r\n    return {\r\n      actions: this.params.actions || [],\r\n    }\r\n  },\r\n  methods: {\r\n    clickHandler(action) {\r\n      if (!action.click) return\r\n      action.click.call(this.params.scope, this.params.data, this.params)\r\n    },\r\n    isShow(action) {\r\n      const type = variableTypeOf(action.show)\r\n      if (TypeEnum.boolean === type) {\r\n        return action.show\r\n      }\r\n      if (TypeEnum.function === type) {\r\n        return action.show.call(this.params.scope, this.params.data, this.params)\r\n      }\r\n      return false;\r\n    },\r\n  },\r\n}\r\n</script>\r\n","<template>\r\n  <el-switch v-if=\"containsData\" v-model=\"boolValue\" label=\"\" :before-change=\"_onBeforeChange\" @change=\"_onChange\"\r\n             size=\"small\"/>\r\n</template>\r\n<script>\r\nimport {runEvent} from \"../yv-utils\";\r\nimport _ from \"lodash\";\r\n\r\nexport default {\r\n  mixins: [],\r\n  data() {\r\n    return {\r\n      containsData: typeof this.$props.params.data === 'object',\r\n      isTreeNode: typeof this.$props.params.eParentOfValue === 'object',\r\n      boolValue: null,\r\n      isActive: false,\r\n      allowEdit: this.$props.params.allowEdit\r\n    };\r\n  },\r\n  methods: {\r\n    getValue() {\r\n      return this.value;\r\n    },\r\n\r\n    _onBeforeChange() {\r\n      if (this.isActive === false) {\r\n        return true\r\n      }\r\n\r\n      const allowEdit = this.allowEdit\r\n      if (allowEdit) {\r\n        const f = new Function('param', 'scope', allowEdit)\r\n        const r = f.call(this.$props.params.scope, this.$props.params, this.$props.params.scope)\r\n        if (r === false) {\r\n          // 不允许修改\r\n          return false\r\n        }\r\n      }\r\n\r\n      // 其他情况都允许修改\r\n      return true\r\n    },\r\n\r\n    _onChange(boolValue) {\r\n      const params = this.params\r\n      if (!this.isActive) {\r\n        return\r\n      }\r\n\r\n      let newValue = boolValue\r\n      this.boolValue = boolValue\r\n      if (params.editor.convType === 'bool') {\r\n        if (boolValue) {\r\n          newValue = true\r\n        } else {\r\n          newValue = false\r\n        }\r\n\r\n      } else if (params.editor.convType === 'num') {\r\n        if (boolValue) {\r\n          newValue = parseInt(params.editor.activeValue ?? '1')\r\n        } else {\r\n          newValue = parseInt(params.editor.inactiveValue ?? '0')\r\n        }\r\n\r\n      } else if (params.editor.convType === 'str') {\r\n        if (boolValue) {\r\n          newValue = params.editor.activeValue\r\n        } else {\r\n          newValue = params.editor.inactiveValue\r\n        }\r\n      }\r\n      params.node.data[params.colDef.field] = newValue\r\n\r\n      this.params.top._onCellValueChanged(params)\r\n      runEvent(this.params.scope, this.params.editor, 'onChange', newValue, this.params.data, this.params, (data) => {\r\n        this.params.api.applyTransaction({\r\n          update: [data]\r\n        })\r\n      })\r\n\r\n      runEvent(this.params.scope, this.params.column.colDef, 'change', newValue, this.params.data, this.params, (data) => {\r\n        this.params.api.applyTransaction({\r\n          update: [data]\r\n        })\r\n      })\r\n    }\r\n  },\r\n  mounted() {\r\n    this.$nextTick(() => {\r\n      this.isActive = true\r\n    })\r\n    let value = this.params.value\r\n    this.boolValue = false\r\n    if (this.params.editor.convType === 'bool') {\r\n      if (`${value}` === 'true') {\r\n        this.boolValue = true\r\n      }\r\n\r\n    } else {\r\n      if (this.params.editor.activeValue) {\r\n        if (`${value}` === this.params.editor.activeValue) {\r\n          this.boolValue = true\r\n        }\r\n      } else {\r\n        // 没有激活值\r\n        if (`${value}` === '1' || `${value}` === 'true' || `${value}` === 'Y') {\r\n          this.boolValue = true\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.el-checkbox.el-checkbox--large {\r\n  height: 0;\r\n}\r\n</style>","<template>\r\n  <el-tag v-if=\"!!params.data\" :closable=\"closableMe\" :disable-transitions=\"true\" :color=\"bgColor\" @click=\"clickHandler\"\r\n          @close=\"clearMe\"\r\n          class=\"yv-aggrid-etag\">\r\n    {{ bgColorText }}\r\n    <el-dialog v-model=\"dialogTableVisible\" title=\"颜色列表\" class=\"bg-color-dialog\" :append-to-body=\"true\"\r\n               width=\"820px\">\r\n      <div class=\"list\">\r\n        <div class=\"item\" v-for=\"item in bgColorList\">\r\n          <div class=\"title\">{{ item.title }}</div>\r\n          <div class=\"color-box-main color-box-white\" v-if=\"item?.whiteColor\" :style=\"{background:item.color[0]}\"\r\n               @click=\"bgColorSelect(item.color[0])\">\r\n            我是白色的-#fff\r\n          </div>\r\n          <div class=\"color-box-main\" v-else :style=\"{background:item.color[0]}\" @click=\"bgColorSelect(item.color[0])\">\r\n            <span v-if=\"item?.subTitle\">{{ item.subTitle }}</span>\r\n          </div>\r\n          <div class=\"color-box\">\r\n            <template v-for=\"(el, idx) in item?.color\">\r\n              <div v-if=\"idx>=1\" class=\"color-box-1\" :style=\"{background:el}\" @click=\"bgColorSelect(el)\"></div>\r\n            </template>\r\n          </div>\r\n        </div>\r\n        <div class=\"item item-more\">\r\n          <div class=\"title\">更多</div>\r\n          <div class=\"more\">\r\n            <div class=\"more-text\">\r\n              待加入\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </el-dialog>\r\n  </el-tag>\r\n</template>\r\n\r\n<script>\r\nimport {TypeEnum, variableTypeOf} from '../../utils'\r\n\r\nexport default {\r\n  components: {},\r\n  data() {\r\n    return {\r\n      dialogTableVisible: false,\r\n      bgColorList: [{\r\n        title: '默认',\r\n        subTitle: 'Default',\r\n        color: ['#409EFF', '#337ecc', '#79bbff', '#a0cfff', '#c6e2ff', '#d9ecff', '#ecf5ff']\r\n      }, {\r\n        title: '成功',\r\n        subTitle: 'Success',\r\n        color: ['#67C23A', '#529b2e', '#95d475', '#b3e19d', '#d1edc4', '#e1f3d8', '#f0f9eb']\r\n      }, {\r\n        title: '警告',\r\n        subTitle: 'Warning',\r\n        color: ['#e6a23c', '#b88230', '#eebe77', '#f3d19e', '#f8e3c5', '#faecd8', '#fdf6ec']\r\n      }, {\r\n        title: '危险',\r\n        subTitle: 'Danger',\r\n        color: ['#f56c6c', '#c45656', '#f89898', '#fab6b6', '#fcd3d3', '#fde2e2', '#fef0f0']\r\n      }, {\r\n        title: '灰色',\r\n        subTitle: 'Success',\r\n        color: ['#909399', '#73767a', '#b1b3b8', '#c8c9cc', '#dedfe0', '#e9e9eb', '#f4f4f5']\r\n      }, {\r\n        title: '黄色',\r\n        color: ['#ffd400', '#eac306', '#fdec3e', '#fdf566', '#fefb8f', '#fefeb8', '#feffe5']\r\n      }, {\r\n        title: '色系七',\r\n        color: ['#eb2f96', '#c42080', '#f758aa', '#fa84c0', '#fbadd2', '#fdd6e6', '#fff0f7']\r\n      }, {\r\n        title: '紫色',\r\n        color: ['#722ed1', '#521cab', '#9154de', '#b37feb', '#d3adf7', '#f0dcff', '#faf0ff']\r\n      }, {\r\n        title: '蓝色',\r\n        color: ['#26979c', '#196d75', '#33c2c2', '#5cdbd3', '#87e7de', '#b6f6ec', '#e6fffb']\r\n      }, {\r\n        title: '常用色',\r\n        whiteColor: true,\r\n        color: ['#fff', '#000']\r\n      }],\r\n    }\r\n  },\r\n  methods: {\r\n    clearMe() {\r\n      this.bgColorSelect('')\r\n    },\r\n    clickHandler(action) {\r\n      if (!this.params.column.colId) {\r\n        return\r\n      }\r\n      if (!this.params.data) {\r\n        return\r\n      }\r\n      this.dialogTableVisible = true\r\n    },\r\n    bgColorSelect(val) {\r\n      if (!this.params.column.colId) {\r\n        return\r\n      }\r\n      this.dialogTableVisible = false\r\n\r\n      const data = this.params.node.data\r\n      data[this.params.column.colId] = val\r\n      this.params.node.updateData(data)\r\n\r\n      if (typeof this.params.onChange === 'function') {\r\n        this.params.onChange(this.params)\r\n      }\r\n    }\r\n  },\r\n  computed: {\r\n    closableMe() {\r\n      const value = this.params.value\r\n      if (!value || value === 'N/A') {\r\n        return false\r\n      }\r\n      return true\r\n    },\r\n    bgColor() {\r\n      const value = this.params.value\r\n      if (!value || value === 'N/A') {\r\n        return 'transparent'\r\n      }\r\n      return value\r\n    },\r\n    bgColorText() {\r\n      const value = this.params.value\r\n      if (!value || value === 'N/A') {\r\n        return '无'\r\n      }\r\n      return value\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style>\r\n.yv-aggrid-etag {\r\n  cursor: pointer;\r\n  width: 100%;\r\n  background: transparent;\r\n}\r\n</style>","<template>\r\n  <el-empty v-if=\"!!emptyText\" :style=\"calcStyleAndWidth\" :description=\"emptyText\">\r\n  </el-empty>\r\n  <div v-else-if=\"!hidden\" :class=\"[calcClass, 'yv-aggrid-wrap',\r\n          vjson.hiLightSelectedRow?'hi-light-selected-row':'',\r\n          vjson.allowVerticalLine?'allow-vertical-line':''\r\n        ]\" :style=\"calcStyle\">\r\n    <div v-if=\"!!title\" class=\"title\">{{ title }}</div>\r\n    <template v-if=\"isComputingVJson\">\r\n      正在渲染表格\r\n      <el-skeleton :rows=\"5\" animated style=\"flex:1\"/>\r\n    </template>\r\n    <ag-grid-vue v-else\r\n                 :class=\"['ag-theme-alpine', 'yv-aggrid']\"\r\n                 ref=\"_inner\"\r\n                 v-bind=\"_gridOption\"\r\n                 :columnDefs=\"_columnDefs\"\r\n                 @gridReady=\"_onReady\"\r\n                 @firstDataRendered=\"_onDataRendered\"\r\n                 :rowClass=\"rowClass\"\r\n                 :getRowClass=\"_onRowClass\"\r\n                 @cell-clicked=\"_onCellClicked\"\r\n                 @cellEditingStarted=\"_onCellEditingStarted\"\r\n                 @cellEditingStopped=\"_onCellEditingStopped\"\r\n                 @cellDoubleClicked=\"_onCellDoubleClicked\"\r\n                 @rowClicked=\"_onRowClick\"\r\n                 @selectionChanged=\"_onSelectionChange\"\r\n                 @rowDoubleClicked=\"_onRowDblClick\"\r\n                 @rowDataUpdated=\"_onRowDataUpdated\"\r\n                 @rowDragEnd=\"_onRowDragEnd\"\r\n                 @paste-start=\"_onPasteStart\"\r\n                 @paste-end=\"_onPasteEnd\"\r\n                 @cellValueChanged=\"_onCellValueChanged\">\r\n    </ag-grid-vue>\r\n\r\n    <div v-if=\"!vjson.hideFooterToolbar\" class=\"ag-grid-pagination\">\r\n      <div class=\"btns\">\r\n        <!--\r\n        <el-button size=\"small\" @click=\"_firstPage\" :disabled=\"paginationOptions.current <= 1\"><span\r\n            class=\"iconfont icon-jiantou_shangyiye\"></span></el-button>\r\n        -->\r\n        <el-button size=\"small\" @click=\"_previousPage\"\r\n                   v-if=\"vjson.pagination\"\r\n                   :disabled=\"paginationOptions.current <= 1\"><span\r\n            class=\"iconfont icon-shangyiyehoutuifanhui\"></span></el-button>\r\n        <div class=\"page\" v-if=\"vjson.pagination\">\r\n          第 {{ paginationOptions.current }}/{{ paginationOptions.totalPage }} <span>页</span>\r\n        </div>\r\n        <!--        <div class=\"page\">-->\r\n        <!--          第 <input @keyup=\"_onPageKeyUp\" v-model=\"paginationOptions.current\"-->\r\n        <!--                   type=\"text\">/{{ paginationOptions.totalPage }} <span>页</span>-->\r\n        <!--        </div>-->\r\n        <el-button size=\"small\" @click=\"_nextPage\"\r\n                   v-if=\"vjson.pagination\"\r\n                   :disabled=\"paginationOptions.current >= paginationOptions.totalPage\"\r\n                   class=\"no-margin\"><span class=\"iconfont icon-xiayiyeqianjinchakangengduo\"></span></el-button>\r\n        <!--\r\n        <el-button size=\"small\" @click=\"_lastPage\" :disabled=\"paginationOptions.current >= paginationOptions.totalPage\"><span\r\n            class=\"iconfont icon-jiantou_xiayiye\"></span></el-button>\r\n        -->\r\n        <el-button size=\"small\"\r\n                   v-if=\"!vjson.hideFooterToolbarRefresh\"\r\n                   :icon=\"renderIcon('antd ReloadOutlined')\" @click=\"reload\"/>\r\n        <el-select size=\"small\" @change=\"_changePageSize\"\r\n                   v-if=\"vjson.pagination\"\r\n                   v-model=\"paginationOptions.size\" class=\"m-2\" style=\"width: 70px;\">\r\n          <el-option\r\n              v-for=\"item in pageSizeOption\"\r\n              :key=\"item.value\"\r\n              :label=\"item.value\"\r\n              :value=\"item.value\"\r\n          />\r\n        </el-select>\r\n        <el-button size=\"small\" v-if=\"isPreviewMode()\" @click=\"_preivewModeSaveColumnWidth\" title=\"保存宽度\">\r\n          <span class=\"iconfont icon-gearmore\"/>\r\n        </el-button>\r\n        <!--        <el-button size=\"small\" v-if=\"!vjson.hideFooterToolbarExcelExport\" title=\"导出Excel\"><span-->\r\n        <!--            class=\"iconfont icon-xiazai-wenjianxiazai-03\" @click=\"exportExcel\"/></el-button>-->\r\n        <el-button v-if=\"!vjson.hideFooterToolbarExcelImport\" size=\"small\" :icon=\"renderIcon('antd UploadOutlined')\"\r\n                   title=\"导入Excel\" @click=\"showExcelImport=true\"/>\r\n        <el-button size=\"small\" v-if=\"!vjson.hideFooterToolbarFilter\"><span class=\"iconfont icon-shaixuan\"/></el-button>\r\n        <!--\r\n                <el-button size=\"small\"><span class=\"iconfont icon-xiazai-wenjianxiazai-03\"></span></el-button>\r\n                <el-button size=\"small\"><span class=\"iconfont icon-shihekuandu\"></span></el-button>\r\n                <el-button size=\"small\"><span class=\"iconfont icon-shaixuan\"></span></el-button>\r\n                <el-button><span class=\"iconfont icon-gearmore\"></span></el-button>\r\n                <el-button><span class=\"iconfont icon-fanhui\"></span></el-button>\r\n        -->\r\n      </div>\r\n      <div class=\"total\" v-if=\"!vjson.hideFooterToolbarRowCount\">共<span>{{\r\n          paginationOptions?.total ?? rowCount\r\n        }}</span>行\r\n      </div>\r\n    </div>\r\n    <!--    <el-row v-if=\"pagination\">-->\r\n    <el-dialog\r\n        v-model=\"showExcelImport\"\r\n        title=\"导入Excel\"\r\n        :width=\"460\"\r\n    >\r\n      <div style=\"margin: 8px 0 16px 0;\">\r\n        <el-upload\r\n            ref=\"upload\"\r\n            :limit=\"0\"\r\n            :auto-upload=\"false\"\r\n            accept=\".xls,.xlsx\"\r\n            :on-exceed=\"handleExceed\"\r\n            :on-change=\"onChangeFile\"\r\n            :on-remove=\"onRemoveFile\"\r\n        >\r\n          <template #trigger>\r\n            <el-button type=\"primary\">选择Excel文件</el-button>\r\n          </template>\r\n        </el-upload>\r\n        <div><a style=\"color: #0086b3;cursor: pointer;\" @click=\"downloadExcel\">下载</a>Excel模版</div>\r\n      </div>\r\n      <template #footer>\r\n        <span class=\"dialog-footer\">\r\n          <el-button @click=\"showExcelImport = false\">取消</el-button>\r\n          <el-button type=\"primary\" @click=\"importExcel\">导入</el-button>\r\n        </span>\r\n      </template>\r\n    </el-dialog>\r\n  </div>\r\n</template>\r\n<script>\r\nimport _ from \"lodash\"\r\nimport {genFileId} from 'element-plus'\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport {Aggrid} from \"./Defaults\"\r\nimport {localeText} from \"./yv-vjson-aggrid.locale\";\r\nimport {calcObjectFlat} from \"../raw/utils\";\r\nimport {markRaw, toRaw} from \"vue\";\r\nimport GridEditor from \"./yv-vjson-aggrid-editor.vue\"\r\nimport {analyzeParamsForWatch, isPreviewMode, runEvent, tryGetDesignVjsonByRuntime} from \"../yv-utils\"\r\nimport {renderIcon, TypeEnum, variableTypeOf} from \"../../utils\"\r\nimport YvVjsonAggridCombo from \"./yv-vjson-aggrid-combo.vue\"\r\nimport YvVjsonAggridDate from \"./yv-vjson-aggrid-date.vue\"\r\nimport YvVjsonAggridInput from \"./yv-vjson-aggrid-input.vue\"\r\nimport YvVjsonAggridCombogrid from \"./yv-vjson-aggrid-combogrid.vue\"\r\nimport YvVjsonAggridAction from \"./yv-vjson-aggrid-action.vue\"\r\nimport YvVjsonAggridCheckbox from \"./yv-vjson-aggrid-checkbox.vue\"\r\nimport YvVjsonAggridColor from \"./yv-vjson-aggrid-color.vue\"\r\nimport {dict} from \"../../store\"\r\nimport {createExcel, readExcel} from \"./excel\";\r\n\r\nconst GridRowHeight = 35\r\n\r\nwindow['exportExcel'] = function (grid, option) {\r\n  if (grid.exportExcel) {\r\n    grid.exportExcel(option);\r\n  }\r\n}\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  components: {\r\n    gridEditor: GridEditor,\r\n    YvVjsonAggridCombo,\r\n    YvVjsonAggridDate,\r\n    YvVjsonAggridInput,\r\n    YvVjsonAggridCombogrid,\r\n    YvVjsonAggridAction,\r\n    YvVjsonAggridCheckbox,\r\n    YvVjsonAggridColor,\r\n  },\r\n  data() {\r\n    const vjson = _.defaults(toRaw(this.vjson), Aggrid)\r\n\r\n    let _gridOption = this._buildGridOption(vjson)\r\n    let _columnDefs = _gridOption.columnDefs\r\n\r\n    return {\r\n      showExcelImport: false,\r\n      // vjson: toRaw(vjson),\r\n      emptyText: vjson.emptyText,\r\n      isComputingVJson: false,\r\n      title: vjson.title,\r\n      pagination: vjson.pagination,\r\n      _gridOption,\r\n      _columnDefs,\r\n      rowData: [],\r\n      rowCount: 0,\r\n      pageSizeOption: Aggrid.pageSizeOption,\r\n      autoLoad: vjson.autoLoad,\r\n      dataSource: vjson.dataSource,\r\n      dataSourceWatchStopHandle: [],\r\n      lotColumnDefines: [],\r\n      paginationOptions: vjson.pagination ? {\r\n        current: 1,\r\n        firstRowNum: 0,\r\n        lastRowNum: 0,\r\n        size: vjson.pageSize,\r\n        totalPage: 0,\r\n        total: 0,\r\n      } : null,\r\n      newRowIds: [],\r\n      modifyRowIds: [],\r\n      removeRecords: [],\r\n      _isPasteMode: false,\r\n      rowClass: ''\r\n    }\r\n  },\r\n  computed: {},\r\n  created() {\r\n    if (this.$props.vcxt?.scope?._registeForm) {\r\n      this.$props.vcxt.scope._registeForm(this)\r\n    }\r\n    if (this.vjson.uiBlock) {\r\n      _.set(this.vcxt.$uiBlocks, this.vjson.uiBlock, markRaw(this))\r\n    }\r\n  },\r\n  methods: {\r\n    renderIcon: renderIcon,\r\n\r\n    _findDialog() {\r\n      const reference = this.vjson.reference\r\n      if (!reference) {\r\n        system.showErrorDialog('没有找到对应的dialog.reference')\r\n        return []\r\n      }\r\n\r\n      const dlg = _.find(this.vcxt.scope.vjson.dialogs, d => d.referenceGrid = reference)\r\n      if (!dlg?.reference) {\r\n        system.showErrorDialog('没有找到对应的dialog')\r\n        return []\r\n      }\r\n\r\n      const dlgHandle = this.vcxt.scope.refs[dlg.reference]\r\n      if (!dlgHandle) {\r\n        system.showErrorDialog('没有找到对应的dialog.handle')\r\n        return []\r\n      }\r\n\r\n      return dlgHandle\r\n    },\r\n\r\n    validate() {\r\n      this.applySort()\r\n      this.api.stopEditing()\r\n\r\n      return new Promise((resolve, reject) => {\r\n        // 进行校验\r\n        const columns = this.columnApi.getColumns();\r\n        /**\r\n         * 异常错误信息，结构为\r\n         * [\r\n         *   {\r\n         *     \"message\": \"第 ${node.rowIndex + 1} 行 \\\"${headerName}\\\" 属性必填\",\r\n         *     \"row\": ${rowIdx}\r\n         *     \"col\": ${columnId}\r\n         *   }\r\n         * ]\r\n         */\r\n        let errorKey = this.vjson.uiBlock ?? this.vjson.reference ?? '表格' + _.uniqueId('_aggrid')\r\n        const validErrorList = []\r\n\r\n        this.api.forEachNode((node) => {\r\n          if (!node.data) {\r\n            // 不包含数据的行(group行等)不校验\r\n            return\r\n          }\r\n          const data = node.data\r\n\r\n          _.forEach(columns, (c) => {\r\n            const allowBlank = _.get(c, 'colDef.cellEditorParams.editor.allowBlank')\r\n            const field = c.colDef.field\r\n            const headerName = c.colDef.headerName ? c.colDef.headerName : c.field\r\n            // console.log('allowBlank', allowBlank, c.colDef.headerName, c.field, data)\r\n            if (allowBlank === false && field) {\r\n              const value = _.get(data, field)\r\n              if (!value) {\r\n\r\n                validErrorList.push({\r\n                  message: `${errorKey} 第 ${node.rowIndex + 1} 行 \\\"${headerName}\\\" 必填`,\r\n                  row: node.rowIndex,\r\n                  col: c.colId,\r\n                  showError: () => {\r\n                    node.setSelected(true);\r\n                    this.api.ensureIndexVisible(node.rowIndex, c)\r\n                    this.api.startEditingCell({\r\n                      rowIndex: node.rowIndex,\r\n                      colKey: c.colId\r\n                    });\r\n                  }\r\n                })\r\n\r\n              }\r\n            }\r\n          })\r\n        })\r\n\r\n        if (_.size(validErrorList) > 0) {\r\n          reject(validErrorList)\r\n\r\n        } else {\r\n          resolve()\r\n        }\r\n      })\r\n    },\r\n\r\n    handleExceed(files) {\r\n      const upload = this.$refs.upload\r\n      upload.clearFiles()\r\n      const file = files[0]\r\n      file.uid = genFileId()\r\n      upload.handleStart(file)\r\n    },\r\n\r\n    onRemoveFile() {\r\n      this.file = null\r\n    },\r\n\r\n    onChangeFile(uploadFile, uploadFiles) {\r\n      this.file = uploadFile.raw\r\n      console.log(uploadFile, uploadFiles)\r\n    },\r\n\r\n    downloadExcel() {\r\n      const heads = this.vjson.columns.filter(c => !c.hidden && c.header).map(c => c.header);\r\n      createExcel({\r\n        fileName: 'Excel导入模版.xlsx',\r\n        heads: heads,\r\n        data: [],\r\n      })\r\n      // console.log(this.vjson)\r\n    },\r\n\r\n    importExcel() {\r\n      if (!this.file) {\r\n        system.msg(\"还未选择上传文件！\")\r\n        return\r\n      }\r\n      const heads = this.vjson.columns.filter(c => !c.hidden && c.header).map(c => ({\r\n        header: c.header,\r\n        dataIndex: c.dataIndex\r\n      }));\r\n      console.log(this.file)\r\n      readExcel(heads, this.file).then(excelRows => {\r\n        console.log(\"excelRows\", excelRows);\r\n      });\r\n    },\r\n\r\n    /** =================================== 公开方法 =================================== **/\r\n    /**\r\n     * 重新定义字段\r\n     * @param columns\r\n     */\r\n    redefineColumns(columns) {\r\n      const columnDefs = this._processColumns(columns)\r\n      this.api.setColumnDefs(columnDefs)\r\n    },\r\n    /**\r\n     * 展开所有树节点\r\n     */\r\n    expandAll() {\r\n      this.api?.expandAll();\r\n    },\r\n    showAddDialog(title, row) {\r\n      const dlgHandle = this._findDialog()\r\n      if (!dlgHandle) {\r\n        return Promise.reject('没有找到对应的dialog.reference')\r\n      }\r\n\r\n      return new Promise((resolve, reject) => {\r\n        dlgHandle.show({\r\n          title,\r\n          rowType: 'add',\r\n          row: row,\r\n          _onOK: (row) => {\r\n            this.appendEditRow(row)\r\n            resolve(row)\r\n          },\r\n          _onCancel: () => {\r\n            reject()\r\n          }\r\n        })\r\n      })\r\n    },\r\n\r\n    /**\r\n     * 显示编辑对话框\r\n     */\r\n    showEditDialog(title) {\r\n      const row = this.api.getSelectedRows()[0]\r\n      if (!row) {\r\n        return Promise.reject('请选择一行数据')\r\n      }\r\n      const dlgHandle = this._findDialog()\r\n      if (!dlgHandle) {\r\n        return Promise.reject('没有找到对应的dialog.reference')\r\n      }\r\n\r\n      return new Promise((resolve, reject) => {\r\n        dlgHandle.show({\r\n          title,\r\n          rowType: 'edit',\r\n          row: row,\r\n          _onOK: (row) => {\r\n            this.setSelectionRow(row)\r\n            resolve(row)\r\n          },\r\n          _onCancel: () => {\r\n            reject()\r\n          }\r\n        })\r\n      })\r\n    },\r\n\r\n    /**\r\n     * 根据 vjson 重新渲染表格\r\n     */\r\n    renderByVjson() {\r\n      this.isComputingVJson = true\r\n      this.$nextTick(() => {\r\n        const vjson = _.defaults(toRaw(this.vjson), Aggrid)\r\n        const _gridOption = this._buildGridOption(vjson)\r\n        this._gridOption = _gridOption\r\n        this._columnDefs = _gridOption.columnDefs\r\n        this.isComputingVJson = false\r\n      })\r\n    },\r\n\r\n    /**\r\n     * 根据当前拖拽的排序，应用顺序到排序字段\r\n     */\r\n    applySort() {\r\n      if (this.vjson.rowDragable && this.vjson.rowDragField) {\r\n        let sort = 1\r\n        this.api.forEachNode((node) => {\r\n          if (!node.data) return\r\n          const data = _.cloneDeep(node.data)\r\n          data[this.vjson.rowDragField] = sort\r\n          node.setData(data)\r\n          sort++\r\n        })\r\n\r\n        if (this.vjson.reference) {\r\n          _.set(this.vcxt.scope, this.vjson.reference + '.isChanged', true)\r\n        }\r\n      }\r\n    },\r\n    saveToServer(custUrl, custParams) {\r\n      this.api.stopEditing();\r\n      const reqData = {\r\n        custParams: custParams,\r\n        newRows: [],\r\n        modifyRows: [],\r\n        removeRecords: [],\r\n        config: {\r\n          columns: [],\r\n          dbTableName: '',\r\n          path: '',\r\n          saveRowValues: {},\r\n          dbSave: {\r\n            beforeSave: '',\r\n            save: '',\r\n            afterSave: '',\r\n          },\r\n        },\r\n      };\r\n      // 进行校验\r\n      const columns = this.columnApi.getColumns();\r\n      let valid = true\r\n      let errorRowIdx = null\r\n      let errorColumn = null\r\n\r\n      this.api.forEachNode((node) => {\r\n        if (!node.data) {\r\n          return\r\n        }\r\n        if (!valid) {\r\n          return false\r\n        }\r\n        const data = node.data\r\n        valid = true\r\n        errorColumn = null\r\n        errorRowIdx = null\r\n\r\n        _.forEach(columns, (c) => {\r\n          const allowBlank = _.get(c, 'colDef.cellEditorParams.editor.allowBlank')\r\n          const field = c.colDef.field\r\n          const headerName = c.colDef.headerName ? c.colDef.headerName : c.field\r\n          // console.log('allowBlank', allowBlank, c.colDef.headerName, c.field, data)\r\n          if (allowBlank === false && field) {\r\n            const value = _.get(data, field)\r\n            if (!value) {\r\n              // system.showErrorDialog(`第 ${node.rowIndex+1} 行 \\\"${headerName}\\\" 属性必填`)\r\n              system.confirm(`第 ${node.rowIndex + 1} 行 \\\"${headerName}\\\" 属性必填, 是否自动跳转?`).then(() => {\r\n                node.setSelected(true);\r\n                this.api.ensureIndexVisible(node.rowIndex, c)\r\n                this.api.startEditingCell({\r\n                  rowIndex: node.rowIndex,\r\n                  colKey: c.colId\r\n                });\r\n              })\r\n              valid = false\r\n              errorColumn = c\r\n              errorRowIdx = node.rowIndex\r\n              return false\r\n            }\r\n          }\r\n        })\r\n\r\n        if (!valid) {\r\n          node.setSelected(true);\r\n          this.api.ensureIndexVisible(node.rowIndex, errorColumn);\r\n          return false\r\n        }\r\n      })\r\n\r\n      if (!valid) {\r\n        //校验不通过，不再提交\r\n        return Promise.reject({msg: '校验不通过', errorColumn, errorRowIdx})\r\n      }\r\n\r\n      // 根据当前拖拽的排序，重写入排序字段\r\n      this.applySort()\r\n\r\n      reqData.newRows = this.newRowIds.map(id => {\r\n        return {...this.api.getRowNode(id)?.data, __rowIndex__: null}\r\n      }).filter(row => !!row);\r\n      reqData.modifyRows = this.modifyRowIds.map(id => {\r\n        return {...this.api.getRowNode(id)?.data, __rowIndex__: null}\r\n      });\r\n      this.api.forEachNode((node) => {\r\n        if (!node.data) return\r\n        const nid = node.id;\r\n        if (this.newRowIds.includes(nid) || this.modifyRowIds.includes(nid)) {\r\n          return\r\n        }\r\n        const {_origin, ...newData} = node.data\r\n        let isChange = false\r\n        _.forEach(newData, (v, k) => {\r\n          if (isChange) return\r\n          isChange = JSON.stringify(v) !== JSON.stringify(_origin[k])\r\n        })\r\n        if (isChange) {\r\n          reqData.modifyRows.push(node.data)\r\n        }\r\n      })\r\n      reqData.removeRecords = this.removeRecords;\r\n      reqData.config.dbTableName = this.vjson.dbTableName;\r\n      reqData.config.operLogCategory = this.vjson.operLogCategory;\r\n      reqData.config.columns = this.vjson.columns.map(col => {\r\n        return {\r\n          dataIndex: col.dataIndex,\r\n          header: col.header,\r\n          dbColumn: col.field,\r\n          jsonMode: col.jsonMode, // JSON模式, 提交时要将值转换为字符串模式\r\n          serverCreateValue: col.serverCreateValue,\r\n          dbIsDeleteKey: col.dbIsDeleteKey ?? false,\r\n          dbIsUpdateKey: col.dbIsUpdateKey ?? false,\r\n          dbUpdateDisable: col.dbUpdateDisable ?? false,\r\n          dbInsertDisable: col.dbInsertDisable ?? false,\r\n        };\r\n      })\r\n      if (_.trim(reqData.config.dbTableName).length <= 0) {\r\n        system.showErrorDialog(\"配置错误\", \"未配置 dbTableName\");\r\n        return Promise.reject({msg: '配置错误, 未配置 dbTableName'})\r\n      }\r\n      if ((reqData.newRows.length + reqData.modifyRows.length + reqData.removeRecords.length) <= 0) {\r\n        system.msg(\"表格数据未变化\");\r\n        return Promise.resolve()\r\n      }\r\n      if (custUrl) {\r\n        // 自定义的提交 URL\r\n        // _.defaults((custParams || {}), reqData);\r\n        return system.invokeServer(custUrl, reqData).then(res => {\r\n          if (res.success) {\r\n            system.msg(res.msg)\r\n            this.reload();\r\n          }\r\n        })\r\n      } else {\r\n        // 调用通用的提交 URL\r\n        return system.invokeServer(\"/com/galaxis/wms/Dev@batchSave\", reqData).then(res => {\r\n          if (res.success) {\r\n            system.msg(res.msg)\r\n            this.reload();\r\n          }\r\n        })\r\n      }\r\n      // console.log(\"### reqData\", reqData)\r\n    },\r\n\r\n    appendRow(row) {\r\n      const trans = {\r\n        add: [row]\r\n      }\r\n      this.api.applyTransaction(trans)\r\n\r\n      if (this.vjson.reference) {\r\n        _.set(this.vcxt.scope, this.vjson.reference + '.isChanged', true)\r\n      }\r\n\r\n      this._refreshRowCount()\r\n    },\r\n\r\n    appendEditRow(row, editCols) {\r\n      const trans = {\r\n        add: [row]\r\n      }\r\n      this.api.applyTransaction(trans)\r\n\r\n      // 找到最后一行\r\n      let lastNode = undefined\r\n      this.api.forEachNode((node) => {\r\n        if (!node.data) return\r\n        lastNode = node\r\n      });\r\n\r\n      if (lastNode) {\r\n        this.newRowIds.push(lastNode.id);\r\n        // 强制定位到这一行\r\n        lastNode.setSelected(true);\r\n        this.api.ensureIndexVisible(lastNode.rowIndex, editCols);\r\n      }\r\n\r\n      if (this.vjson.reference) {\r\n        _.set(this.vcxt.scope, this.vjson.reference + '.isChanged', true)\r\n      }\r\n\r\n      this._refreshRowCount()\r\n    },\r\n\r\n    /**\r\n     * 删除当前编辑的行\r\n     */\r\n    removeEditRow() {\r\n      const [cell] = this.api.getEditingCells()\r\n      if (!cell) {\r\n        return\r\n      }\r\n\r\n      // 找到这一行所属的 node\r\n      let node\r\n      this.api.forEachNode((item) => {\r\n        if (!item.data) return\r\n        if (item.rowIndex === cell.rowIndex) {\r\n          node = item\r\n          return false\r\n        }\r\n      })\r\n\r\n      if (!node) {\r\n        return\r\n      }\r\n\r\n      this.api.applyTransaction({\r\n        remove: [node.data],\r\n      })\r\n\r\n      if (this.vjson.reference) {\r\n        _.set(this.vcxt.scope, this.vjson.reference + '.isChanged', true)\r\n      }\r\n\r\n      this._refreshRowCount()\r\n    },\r\n\r\n    /**\r\n     * 删除单元格模式下选中的行\r\n     */\r\n    removeRowByRange() {\r\n      const rowIndexRange = []\r\n      _.forEach(this.api.getCellRanges(), range => {\r\n        for (let i = range.startRow.rowIndex; i <= range.endRow.rowIndex; i++) {\r\n          rowIndexRange.push(i)\r\n        }\r\n      })\r\n\r\n      const nodeRange = []\r\n      this.api.forEachNode((node) => {\r\n        if (!node.data) return\r\n        if (rowIndexRange.includes(node.rowIndex)) {\r\n          nodeRange.push(node.data)\r\n          this.pushRemoveRecords(node)\r\n        }\r\n      })\r\n\r\n      this.api.applyTransaction({\r\n        remove: nodeRange,\r\n      })\r\n      this.api.clearRangeSelection()\r\n\r\n      if (this.vjson.reference) {\r\n        _.set(this.vcxt.scope, this.vjson.reference + '.isChanged', true)\r\n      }\r\n\r\n      this._refreshRowCount()\r\n    },\r\n\r\n    /**\r\n     * 删除选中的行\r\n     */\r\n    removeSelectedRow() {\r\n      const selectedNodes = this.api.getSelectedNodes();\r\n      const selRows = [];\r\n      for (const node of selectedNodes) {\r\n        selRows.push(node.data);\r\n        this.pushRemoveRecords(node);\r\n      }\r\n      this.api.applyTransaction({\r\n        remove: selRows,\r\n      })\r\n\r\n      if (this.vjson.reference) {\r\n        _.set(this.vcxt.scope, this.vjson.reference + '.isChanged', true)\r\n      }\r\n\r\n      this._refreshRowCount()\r\n    },\r\n\r\n    /**\r\n     * 记录删除的数据行\r\n     */\r\n    pushRemoveRecords(node) {\r\n      const rowIdx = node.rowIndex;\r\n      const nid = node.id;\r\n      if (this.newRowIds.includes(nid)) {\r\n        this.newRowIds.splice(this.newRowIds.indexOf(nid), 1);\r\n        return;\r\n      }\r\n      if (this.modifyRowIds.includes(nid)) {\r\n        this.modifyRowIds.splice(this.modifyRowIds.indexOf(nid), 1);\r\n      }\r\n      this.removeRecords.push(node.data);\r\n      console.log(\"pushRemoveRecords--> {}\", this.removeRecords);\r\n    },\r\n\r\n    /**\r\n     * 停止编辑\r\n     */\r\n    stopEditing() {\r\n      this.api.stopEditing()\r\n    },\r\n\r\n    /**\r\n     * 为表格设置数据\r\n     * @param data 数据行的数组\r\n     */\r\n    setData(data) {\r\n      if (data?.length > 0) {\r\n        _.forEach(data, item => {\r\n          item._origin = _.cloneDeep(item);\r\n        })\r\n      }\r\n\r\n      if (this.vjson.isTreeModel) {\r\n        data = this._convertTreeData(data);\r\n      }\r\n\r\n      this.api?.setRowData(data)\r\n      this.rowData = data\r\n\r\n      if (this.vjson.reference) {\r\n        _.set(this.vcxt.scope, this.vjson.reference + '.isChanged', false)\r\n      }\r\n      if (this.vjson.autoSelectFirst) {\r\n        // 自动选中第一行\r\n        try {\r\n          this.api?.forEachNode((node) => {\r\n            if (!node.data) return\r\n            node.setSelected(true)\r\n            throw new Error('break')\r\n          })\r\n        } catch (e) {\r\n          if (e.message !== 'break') {\r\n            throw e\r\n          }\r\n        }\r\n      }\r\n      this._refreshRowCount()\r\n    },\r\n\r\n    _convertTreeData(data) {\r\n      const idField = this.vjson.dataSource.idField\r\n      const parentField = this.vjson.dataSource.parentField\r\n      const textField = this.vjson.dataSource.textField\r\n\r\n      // 转换数据，吧 idField/parentField 结构转换为 tree 结构, tree结构的结构形式为\r\n      // filePath: ['textFieldLevel1', 'textFieldLevel2', 'textFieldLevel3']\r\n      const treeData = []\r\n      const idMap = {}\r\n      _.forEach(data, item => {\r\n        idMap[item[idField]] = item\r\n      })\r\n      _.forEach(data, item => {\r\n        const parent = idMap[item[parentField]]\r\n        if (parent) {\r\n          if (!parent.children) {\r\n            parent.children = []\r\n          }\r\n          parent.children.push(item)\r\n        } else {\r\n          treeData.push(item)\r\n        }\r\n      })\r\n      // 递归设置每个节点的路径\r\n      const treeDataRow = []\r\n      const setPath = (node, path) => {\r\n        node.__path = path\r\n        treeDataRow.push(node)\r\n        if (node.children) {\r\n          _.forEach(node.children, child => {\r\n            setPath(child, path.concat(child[textField]))\r\n          })\r\n          delete node.children\r\n        }\r\n      }\r\n      _.forEach(treeData, item => {\r\n        setPath(item, [item[textField]])\r\n      })\r\n      return treeDataRow\r\n    },\r\n\r\n    /**\r\n     * 为表格设置数据\r\n     * @param data 新数据行的数组\r\n     */\r\n    setDataTransaction(data) {\r\n      if (!data || !this.api) {\r\n        return\r\n      }\r\n\r\n      const sel = {\r\n        add: [],\r\n        update: [],\r\n        remove: [],\r\n      }\r\n\r\n\r\n      // 循环当前所有数据, 对比不一样的部分\r\n      let i = 0\r\n      this.api.forEachNode((node) => {\r\n        if (!node.data) {\r\n          return\r\n        }\r\n        if (i >= data.length) {\r\n          sel.remove(node.data)\r\n        } else if (!_.isEqual(node.data, data[i])) {\r\n          sel.update.push(_.extend(node.data, data))\r\n        }\r\n        i++\r\n      });\r\n      for (; i < data.length; i++) {\r\n        sel.add(data[i])\r\n      }\r\n\r\n      this.api.applyTransaction(sel)\r\n    },\r\n\r\n    /**\r\n     * 获取全部数据行, 每个行都会附带 _rid 属性, 用于标识这一行的数据\r\n     * @returns {Array} 数据行的数组\r\n     */\r\n    getDataRows() {\r\n      this.stopEditing()\r\n\r\n      const rows = []\r\n      this.api.forEachNode((node) => {\r\n        if (!node.data) {\r\n          return\r\n        }\r\n        rows.push({\r\n          ...node.data,\r\n          _rid: node.id,\r\n        })\r\n      })\r\n      return rows\r\n    },\r\n\r\n    /**\r\n     * 设置当前选中行的数据\r\n     */\r\n    setSelectionRow(rowData) {\r\n      // 找到这一行所属的 node\r\n      let node\r\n      this.api.forEachNode((item) => {\r\n        if (!item.data) {\r\n          return\r\n        }\r\n        if (item.selected) {\r\n          node = item\r\n          return false\r\n        }\r\n      })\r\n\r\n      if (!node) {\r\n        return\r\n      }\r\n\r\n      // 将 rowData 中除 _ 开头的所有数据设置给 nodeData\r\n      const nodeData = _.cloneDeep(node.data)\r\n      _.forOwn(rowData, (value, key) => {\r\n        if (key.startsWith('_')) {\r\n          return\r\n        }\r\n        nodeData[key] = value\r\n      })\r\n      nodeData['_rid'] = node.id\r\n      // console.log(\"setSelectionRow\", nodeData)\r\n      node.setData(nodeData)\r\n\r\n      if (this.vjson.reference) {\r\n        _.set(this.vcxt.scope, this.vjson.reference + '.selection', nodeData)\r\n        _.set(this.vcxt.scope, this.vjson.reference + '.isChanged', true)\r\n      }\r\n\r\n      // 进行数据变更\r\n      // _.extend(node.data, rowData)\r\n      // this.api.applyTransaction({\r\n      //   update: [node.data]\r\n      // })\r\n      // console.log(\"modifyRowIds\", node.rowIndex)\r\n      this.modifyRowIds.push(node.id);\r\n    },\r\n\r\n    /**\r\n     * 设置当前编辑状态\r\n     */\r\n    setChanged(value) {\r\n      if (this.vjson.reference) {\r\n        _.set(this.vcxt.scope, this.vjson.reference + '.isChanged', value)\r\n      }\r\n    },\r\n\r\n    /**\r\n     * 设置过滤属性\r\n     * 类似\r\n     * ```js\r\n     * {name: {filterType: 'text', type: 'contains', filter: 'a'}},\r\n     * {\r\n     *     athlete: {\r\n     *         filterType: 'text',\r\n     *         type: 'startsWith',\r\n     *         filter: 'mich'\r\n     *     },\r\n     *     age: {\r\n     *         filterType: 'number',\r\n     *         type: 'lessThan',\r\n     *         filter: 30\r\n     *     },\r\n     *     ui_block: {\r\n     *         filterType: 'text',\r\n     *         type: 'equals',\r\n     *         filter: newValue\r\n     *     }\r\n     * }\r\n     * ```\r\n     * @param model 过滤属性\r\n     */\r\n    setFilterModel(model) {\r\n      if (!model) {\r\n        this.api.setFilterModel(null)\r\n      } else {\r\n        this.api.setFilterModel(model)\r\n      }\r\n    },\r\n\r\n    /**\r\n     * 设置当前编辑行的数据\r\n     */\r\n    setEditRow(rowData) {\r\n      // 找到正在编辑的单元格\r\n      const [cell] = this.api.getEditingCells()\r\n      if (!cell) {\r\n        return\r\n      }\r\n\r\n      // 找到这一行所属的 node\r\n      let node\r\n      this.api.forEachNode((item) => {\r\n        if (!item.data) {\r\n          return\r\n        }\r\n        if (item.rowIndex === cell.rowIndex) {\r\n          node = item\r\n          return false\r\n        }\r\n      })\r\n\r\n      // 将 rowData 中除 _ 开头的所有数据设置给 nodeData\r\n      const nodeData = _.cloneDeep(node.data)\r\n      _.forOwn(rowData, (value, key) => {\r\n        if (key.startsWith('_')) {\r\n          return\r\n        }\r\n        nodeData[key] = value\r\n      })\r\n      nodeData['_rid'] = node.id\r\n      // console.log(\"setSelectionRow\", nodeData)\r\n      node.setData(nodeData)\r\n\r\n      if (this.vjson.reference) {\r\n        _.set(this.vcxt.scope, this.vjson.reference + '.selection', nodeData)\r\n        _.set(this.vcxt.scope, this.vjson.reference + '.isChanged', true)\r\n      }\r\n\r\n      // 进行数据变更\r\n      // _.extend(node.data, rowData)\r\n      // this.api.applyTransaction({\r\n      //   update: [node.data]\r\n      // })\r\n      // console.log(\"modifyRowIds\", node.rowIndex)\r\n      if (!this.newRowIds.includes(node.id)) {\r\n        this.modifyRowIds.push(node.id);\r\n      }\r\n\r\n      // 拿到正在编辑的编辑器, 变更编辑器里面的值\r\n      const colId = cell.column.colId\r\n      if (colId && Object.hasOwn(rowData, colId)) {\r\n        const [editor] = this.api.getCellEditorInstances()\r\n        editor.value = rowData[colId]\r\n      }\r\n    },\r\n\r\n    /**\r\n     * 获取编辑过的数据行\r\n     */\r\n    getGridEditRows() {\r\n      const editingCells = this.api.getEditingCells();\r\n      this.stopEditing();\r\n      // 处理编辑中的单元格, 没有触发cellValueChange事件, 导致modifyRowIds数据丢失问题\r\n      if (editingCells) {\r\n        _.forEach(editingCells, (cell) => {\r\n          const rowIdx = cell.rowIndex;\r\n          // TODO node.id\r\n          const nid = cell.node.id;\r\n          if (!this.newRowIds.includes(nid) && !this.modifyRowIds.includes(nid)) {\r\n            this.modifyRowIds.push(nid);\r\n          }\r\n        })\r\n      }\r\n      const result = {\r\n        newRows: [],\r\n        modifyRows: [],\r\n        removeRecords: toRaw(this.removeRecords)\r\n      }\r\n      this.api.forEachNode((node) => {\r\n        if (!node.data) {\r\n          return\r\n        }\r\n        const rowIdx = node.rowIndex;\r\n        const nid = node.id;\r\n        if (this.newRowIds.includes(nid)) {\r\n          result.newRows.push({...node.data, __rowIndex__: rowIdx});\r\n        }\r\n        if (this.modifyRowIds.includes(nid)) {\r\n          result.modifyRows.push({...node.data, __rowIndex__: rowIdx});\r\n        }\r\n      });\r\n      return result;\r\n    },\r\n\r\n    /**\r\n     * 清空记录的编辑行\r\n     */\r\n    clearEditRow() {\r\n      this.newRowIds = [];\r\n      this.modifyRowIds = [];\r\n      this.removeRecords = [];\r\n      console.log(\"clearEditRow\")\r\n    },\r\n\r\n    /**\r\n     * 重新载入表格数据\r\n     */\r\n    reload() {\r\n      this.clearEditRow();\r\n      this.dataSource.reload();\r\n      this._isDeplayReloadMark = false\r\n    },\r\n\r\n    /**\r\n     * 自动根据内容适配全部列的宽度\r\n     */\r\n    sizeColumnsToFit() {\r\n      this.api.sizeColumnsToFit()\r\n    },\r\n\r\n    /**\r\n     * 设置表格的 loading 读取状态\r\n     * @param isLoad 是否\"载入中\"\r\n     */\r\n    setLoading(isLoad) {\r\n      if (this.api) {\r\n        if (isLoad === true) {\r\n          this.api.showLoadingOverlay()\r\n        } else {\r\n          this.api.hideOverlay()\r\n        }\r\n      }\r\n    },\r\n\r\n    /**\r\n     * 设置数据行被选中\r\n     * @param predicate\r\n     */\r\n    setSelected(predicate) {\r\n      let lastNode = {}\r\n      this.api.forEachNode(node => {\r\n        if (!node.data) {\r\n          return\r\n        }\r\n        if (typeof predicate === 'function') {\r\n          const result = predicate(node.data, node.rowIndex);\r\n          if (typeof result === 'boolean' && result) {\r\n            lastNode = node\r\n            node.setSelected(true);\r\n          }\r\n        }\r\n      })\r\n      if (lastNode && lastNode.rowIndex) {\r\n        this.api.ensureIndexVisible(lastNode.rowIndex, -1);\r\n      }\r\n    },\r\n\r\n    /**\r\n     * 对象 key/value 条件中，任何一个字段 field == value 的行都被选中\r\n     */\r\n    selectByOrCondition(obj) {\r\n      this.setSelected((data) => {\r\n        let r = false\r\n        _.forOwn(obj, (value, field) => {\r\n          if (data[field] === value) {\r\n            r = true\r\n            return true\r\n          }\r\n        })\r\n        return r\r\n      })\r\n    },\r\n\r\n    /**\r\n     * 获取所有选中行，返回的数据中包含 _rid 字段.\r\n     * _rid 字段可以作为 setRowDataByRowid / removeRowByRowid 的参数\r\n     */\r\n    getSelectedRows() {\r\n      // const rows = this.api.getSelectedRows();\r\n      // 获取 aggrid 所有选中行\r\n      return this.api.getSelectedNodes().map(node => {\r\n        return {\r\n          ...node.data,\r\n          _rid: node.id\r\n        }\r\n      })\r\n    },\r\n\r\n    /**\r\n     * 根据行 id 设置行数据\r\n     * @param rid 行 id, 通常是 getSelectedRows 返回的数据中的 _rid 字段\r\n     * @param rowData 行数据\r\n     */\r\n    setRowDataByRowid(rid, rowData) {\r\n      // 找到这一行所属的 node\r\n      const node = this.api.getRowNode(rid)\r\n      if (!node) {\r\n        system.msg('未找到行数据 ' + rid)\r\n        return\r\n      }\r\n\r\n      // 将 rowData 中除 _ 开头的所有数据设置给 nodeData\r\n      const nodeData = _.cloneDeep(node.data)\r\n      _.forOwn(rowData, (value, key) => {\r\n        if (key.startsWith('_')) {\r\n          return\r\n        }\r\n        nodeData[key] = value\r\n      })\r\n      nodeData['_rid'] = node.id\r\n      // console.log(\"setSelectionRow\", nodeData)\r\n      node.setData(nodeData)\r\n\r\n      if (this.vjson.reference && _.get(this.vcxt.scope, this.vjson.reference + '.selection._rid') === node.id) {\r\n        _.set(this.vcxt.scope, this.vjson.reference + '.selection', nodeData)\r\n        _.set(this.vcxt.scope, this.vjson.reference + '.isChanged', true)\r\n      }\r\n\r\n      // 进行数据变更\r\n      this.modifyRowIds.push(node.id);\r\n    },\r\n\r\n    /**\r\n     * 根据行 id 删除行\r\n     * @param rid 行 id, 通常是 getSelectedRows 返回的数据中的 _rid 字段\r\n     */\r\n    removeRowByRowid(rid) {\r\n      const node = this.api.getRowNode(rid)\r\n      if (!node) {\r\n        system.msg('未找到行数据 ' + rid)\r\n        return\r\n      }\r\n\r\n      this.pushRemoveRecords(node)\r\n      this.api.applyTransaction({\r\n        remove: [node.data]\r\n      })\r\n\r\n      if (this.vjson.reference) {\r\n        _.set(this.vcxt.scope, this.vjson.reference + '.isChanged', true)\r\n\r\n        if (_.get(this.vcxt.scope, this.vjson.reference + '.selection._rid') === rid) {\r\n          // 如果删除的是当前选中行，则清空选中行\r\n          _.set(this.vcxt.scope, this.vjson.reference + '.selection', undefined)\r\n        }\r\n      }\r\n\r\n      this._refreshRowCount()\r\n    },\r\n\r\n    /** =================================== 私有方法 =================================== **/\r\n    isPreviewMode,\r\n    _buildDataSource() {\r\n      const dataSource = _.cloneDeep(toRaw(this.dataSource))\r\n      if (!dataSource) {\r\n        return\r\n      }\r\n      const params = {}\r\n      if (dataSource.method === 'invoke' || dataSource.sqlId) {\r\n        if (dataSource.sqlId) {\r\n          dataSource.method = 'invoke'\r\n          dataSource.url = '/com/galaxis/wms/Dev@executeSQL'\r\n\r\n          const scope = this.vcxt.scope\r\n          if (!scope._relPath) {\r\n            return null\r\n          }\r\n\r\n          if (_.startsWith(dataSource.sqlId, '@')) {\r\n            // sqlId 是 @ 开头，代表直接带中文名\r\n            // dataSource.url = relPath + dataSource.sqlId\r\n            const relPath = scope._relPath.split(\".\")[0]\r\n\r\n            // TODO 取消 sql 调法\r\n            params.path = relPath\r\n            params.sqlId = dataSource.sqlId.substring(1)\r\n            params.pagination = this.pagination\r\n\r\n          } else {\r\n            if (_.endsWith(_.toLower(scope._relPath), '.vue')) {\r\n              params.path = scope._relPath.substring(0, scope._relPath.length - 4)\r\n            } else {\r\n              params.path = scope._relPath\r\n            }\r\n            params.sqlId = dataSource.sqlId\r\n            params.pagination = this.pagination\r\n          }\r\n        }\r\n      }\r\n      if (!dataSource.url) {\r\n        return\r\n      }\r\n      const me = this\r\n\r\n      this.dataSourceWatchStopHandle = analyzeParamsForWatch(me.vcxt.scope.$watch, this.dataSource.params, (prop, watchResultForParam) => {\r\n        console.debug('hasWatch:' + prop)\r\n        me.dataSource.reload()\r\n      })\r\n\r\n      dataSource.reload = _.debounce(() => {\r\n        runEvent(this.vcxt.scope, this.vjson, \"onDataLoadBefore\", this)\r\n        const reParams = _.cloneDeep(params)\r\n        reParams.ignoreDataPermission = this.vjson.ignoreDataPermission\r\n\r\n        // 加载分页参数\r\n        const pageInfo = this._getRequestPageInfo()\r\n        if (pageInfo) {\r\n          _.merge(reParams, pageInfo)\r\n        }\r\n        // 从 params 参数描述中，分析出实际请求参数\r\n        let cancel = false\r\n        let p = calcObjectFlat(this.vcxt?.scope, this.dataSource.params, (express, valueRaw) => {\r\n          // console.debug('express', express, valueRaw, toRaw(this.vcxt?.scope))\r\n          let value = valueRaw\r\n\r\n          // 判断参数，是否被 watch\r\n          if ((express + '').startsWith('watch:{')) {\r\n            value = '' + value\r\n            if (value.startsWith('watch:')) {\r\n              value = value.substring(6)\r\n            }\r\n          }\r\n\r\n          // 判断参数，是否要求必填\r\n          if ((express + '').endsWith('}:required')) {\r\n            if (typeof value === 'undefined' || value == null) {\r\n              console.debug('express:' + express + ' is ' + value + ', request canceled!')\r\n              cancel = true\r\n            }\r\n\r\n            value = '' + value\r\n            if (value.endsWith(':required')) {\r\n              value = value.substring(0, value.length - 9)\r\n            }\r\n\r\n            if (!value) {\r\n              console.debug('express:' + express + ' is ' + value + ', request canceled!')\r\n              cancel = true\r\n            }\r\n          }\r\n          return value\r\n        })\r\n\r\n        if (cancel) {\r\n          me.setData([])\r\n          if (this.vjson.reference) {\r\n            // delete this.vcxt.scope.$data[this.vjson.reference]?.selection\r\n            _.set(this.vcxt.scope, this.vjson.reference + '.selection', null)\r\n            _.set(this.vcxt.scope, this.vjson.reference + '.selections', [])\r\n          }\r\n          this.runEvent('onDataLoadComplete', this, [])\r\n          return\r\n        }\r\n\r\n        if (typeof this.dataSource.paramsFn === 'function') {\r\n          const cp = this.dataSource.paramsFn()\r\n          _.merge(p, cp)\r\n        }\r\n        _.merge(reParams, p)\r\n        // 请求\r\n        me.setLoading(true)\r\n        return system.invokeServer(dataSource.url, reParams).then(res => {\r\n          if (res.success) {\r\n            this.tryPraseServerData(res.data)\r\n            me.setData(res.data)\r\n            if (this.vjson.reference) {\r\n              // delete this.vcxt.scope.$data[this.vjson.reference]?.selection\r\n              _.set(this.vcxt.scope, this.vjson.reference + '.selection', null)\r\n              _.set(this.vcxt.scope, this.vjson.reference + '.selections', [])\r\n            }\r\n\r\n            if (res.pagination && pageInfo) {\r\n              me.paginationOptions.size = parseInt(res.pagination.size)\r\n              me.paginationOptions.current = parseInt(res.pagination.current)\r\n              me.paginationOptions.total = parseInt(res.pagination.total)\r\n              me.paginationOptions.firstRowNum = parseInt(res.pagination.firstRowNum)\r\n              me.paginationOptions.lastRowNum = parseInt(res.pagination.lastRowNum)\r\n              me.paginationOptions.totalPage = Math.ceil(me.paginationOptions?.total / me.paginationOptions?.size)\r\n            }\r\n          }\r\n        }).catch((e) => {\r\n          this.runEvent('onDataLoadComplete', this, [])\r\n          console.error(\"dataSource.reload \", e)\r\n          // system.showErrorDialog(e.toString())\r\n\r\n        }).finally(() => {\r\n          me.setLoading(false)\r\n        })\r\n      }, 10)\r\n      this.dataSource = dataSource\r\n    },\r\n    _preivewModeSaveColumnWidth() {\r\n      const columnDefs = this.api?.getColumnDefs()\r\n      let setCount = 0\r\n      const designVjson = tryGetDesignVjsonByRuntime(this.vjson, window['designer'])\r\n      if (designVjson) {\r\n        _.filter(columnDefs, col => !col.hide).forEach(col => {\r\n          const width = col.width\r\n          const designColumnVjson = _.find(designVjson.columns, r => r.dataIndex === col.field)\r\n          if (designColumnVjson) {\r\n            designColumnVjson.width = width\r\n            setCount++\r\n          }\r\n        })\r\n        system.msg(`保存了${setCount}个列宽设定`)\r\n      }\r\n    },\r\n\r\n    /**\r\n     * 重新计算 aggrid 数据量\r\n     */\r\n    _refreshRowCount() {\r\n      if (!this.api) {\r\n        this.rowCount = 0\r\n        return\r\n      }\r\n\r\n      let rowCount = 0\r\n      this.api?.forEachNode((node) => {\r\n        if (node.data) {\r\n          rowCount++\r\n        }\r\n      })\r\n\r\n      this.rowCount = rowCount\r\n    },\r\n\r\n    _buildGridOption(vjsonRaw) {\r\n      const vjson = _.cloneDeep(vjsonRaw)\r\n      const gridOption = {\r\n        suppressPropertyNamesCheck: true,\r\n        suppressMaxRenderedRowRestriction: true,\r\n        animateRows: false,\r\n        suppressContextMenu: true,\r\n        suppressAggFuncInHeader: true,\r\n        enableCellTextSelection: true,\r\n        ensureDomOrder: true,\r\n        tooltipInteraction: true,\r\n        // suppressColumnMoveAnimation: true,\r\n        // rowSelection: 'single', // multiple\r\n        rowSelection: 'single',\r\n        // enableRangeSelection: true,\r\n        treeData: vjson.isTreeModel ?? false,\r\n        rowData: [],\r\n        headerHeight: 38,\r\n        rowHeight: GridRowHeight,\r\n        localeText: localeText,\r\n        maxHeight: this.vjson.maxHeight,\r\n        minHeight: this.vjson.minHeight,\r\n        groupDefaultExpanded: this.vjson.groupDefaultExpanded ?? -1,\r\n        popupParent: document.querySelector(\"body\"),\r\n        defaultColDef: {\r\n          editable: false,\r\n          singleClickEdit: false,\r\n          sortable: true,\r\n          resizable: true,\r\n          enableRowGroup: true,\r\n          enablePivot: true,\r\n          enableValue: true,\r\n          filter: true,\r\n        },\r\n        showOpenedGroup: true,\r\n        aggFuncs: {\r\n          xyz(params) {\r\n            // 在分组行中，取第一个叶子节点的值\r\n            const allLeafChildren = params.rowNode.allLeafChildren\r\n            if (allLeafChildren.length === 0) {\r\n              return ''\r\n            }\r\n            return params.rowNode.allLeafChildren[0].data[params.colDef.field]\r\n          },\r\n        }\r\n      }\r\n\r\n      if (this.vjson.rowDragable) {\r\n        gridOption.animateRows = true\r\n        gridOption.rowDragManaged = true\r\n      }\r\n\r\n      // 处理替代列\r\n      const columns = []\r\n      for (let i = 0; i < vjson.columns.length; i++) {\r\n        const col = vjson.columns[i]\r\n        if (col.replaceFor === 'custom') {\r\n          if (col.slotName) {\r\n            const customSlotContent = _.get(this.vcxt.scope, 'customVjson.' + col.slotName, [])\r\n            console.log('get customVjson.' + col.slotName, customSlotContent)\r\n            if (_.isArray(customSlotContent)) {\r\n              columns.push(...customSlotContent)\r\n            } else if (_.isObject(customSlotContent)) {\r\n              columns.push(customSlotContent)\r\n            }\r\n          }\r\n\r\n        } else if (col.replaceFor === 'lot') {\r\n          // 忽略，等待 bizMixin.applyRuleUi 处理\r\n\r\n        } else {\r\n          columns.push(col)\r\n        }\r\n      }\r\n\r\n      gridOption.columnDefs = this._processColumns(columns)\r\n\r\n      // 处理分组列\r\n      if (this.vjson.isCustomGroup) {\r\n        gridOption.groupDisplayType = 'custom';\r\n      }\r\n\r\n      if (vjson.mode === 'select') {\r\n        // 单行选择\r\n        _.extend(gridOption, {\r\n          rowSelection: 'single',\r\n          checkboxSelection: false,\r\n          enableRangeSelection: false,\r\n          suppressCellFocus: true,\r\n          enableCellTextSelection: true,\r\n          ensureDomOrder: true,\r\n        })\r\n        gridOption.defaultColDef.singleClickEdit = false\r\n        gridOption.defaultColDef.editable = false\r\n\r\n      } else if (vjson.mode === 'checkbox' || vjson.mode === 'checkonly' || vjson.mode === 'checkboxSingleEdit') {\r\n        // 勾选\r\n        _.extend(gridOption, {\r\n          rowSelection: 'multiple',\r\n          checkboxSelection: true,\r\n          enableCellTextSelection: true,\r\n          ensureDomOrder: true,\r\n        })\r\n\r\n        if (vjson.mode === 'checkonly') {\r\n          gridOption.suppressRowClickSelection = true\r\n        }\r\n\r\n        if (vjson.mode === 'checkboxSingleEdit') {\r\n          // 单击编辑\r\n          _.extend(gridOption, {\r\n            // rowSelection: 'single',\r\n            suppressRowClickSelection: true,\r\n            enableCellTextSelection: false,\r\n            ensureDomOrder: false,\r\n            enableRangeSelection: true,\r\n            suppressContextMenu: false,\r\n          })\r\n          gridOption.defaultColDef.singleClickEdit = true\r\n        }\r\n      } else if (vjson.mode === 'edit1') {\r\n        // 单击编辑\r\n        _.extend(gridOption, {\r\n          // rowSelection: 'single',\r\n          enableCellTextSelection: false,\r\n          ensureDomOrder: false,\r\n          enableRangeSelection: true,\r\n          suppressContextMenu: false,\r\n        })\r\n        gridOption.defaultColDef.singleClickEdit = true\r\n\r\n      } else if (vjson.mode === 'edit2') {\r\n        // 双击编辑\r\n        _.extend(gridOption, {\r\n          // rowSelection: 'multiple',\r\n          enableCellTextSelection: false,\r\n          ensureDomOrder: false,\r\n          enableRangeSelection: true,\r\n          suppressContextMenu: false,\r\n        })\r\n        gridOption.defaultColDef.singleClickEdit = false\r\n      }\r\n\r\n      if (this.vjson.isTreeModel) {\r\n        gridOption.getDataPath = (data) => {\r\n          return data.__path;\r\n        }\r\n      }\r\n\r\n      return gridOption\r\n    },\r\n    _processColumns(columns) {\r\n      const list = []\r\n      _.forEach(columns, column => {\r\n        if (column.replaceFor) {\r\n          return\r\n        }\r\n        if (column.xtype) {\r\n          delete column.xtype\r\n        }\r\n        if (column.id) {\r\n          delete column.id\r\n        }\r\n        if (column.dataIndex) {\r\n          column.field = column.dataIndex\r\n          column.tooltipField = column.dataIndex\r\n          delete column.dataIndex\r\n        }\r\n        if (column.header) {\r\n          column.headerName = column.header\r\n          delete column.header\r\n        }\r\n        if (typeof column.width === 'string') {\r\n          column.width = parseInt(column.width)\r\n        }\r\n        if (typeof column.hidden !== 'undefined') {\r\n          column.hide = column.hidden\r\n          delete column.hidden\r\n        }\r\n        column.resizable = true\r\n        if (column.showRowGroup === true || column.rowGroup === true) {\r\n          column.cellRenderer = 'agGroupCellRenderer'\r\n          column.showRowGroup = true\r\n          if (column.cellRendererParams_suppressCount) {\r\n            _.set(column, 'cellRendererParams.suppressCount', true)\r\n          }\r\n          if (column.cellRendererParams_suppressDoubleClickExpand) {\r\n            _.set(column, 'cellRendererParams.suppressDoubleClickExpand', true)\r\n          }\r\n          if (column.cellRendererParams_suppressEnterExpand) {\r\n            _.set(column, 'cellRendererParams.suppressEnterExpand', true)\r\n          }\r\n          if (column.cellRendererParams_checkbox) {\r\n            _.set(column, 'cellRendererParams.checkbox', true)\r\n          }\r\n          delete column.cellRendererParams_suppressCount\r\n          delete column.cellRendererParams_suppressDoubleClickExpand\r\n          delete column.cellRendererParams_suppressEnterExpand\r\n          delete column.cellRendererParams_checkbox\r\n        }\r\n        if (column.rowGroup_xyz) {\r\n          // _.set(column, 'cellRendererParams.innerRenderer', 'SimpleCellRenderer')\r\n          // delete column.cellRenderer\r\n          column.aggFunc = 'xyz'\r\n          column.enableValue = true\r\n          delete column.rowGroup_xyz\r\n        }\r\n        if (column.allowValueGetter !== true) {\r\n          // 不允许使用 valueGetter (计算值)\r\n          delete column.valueGetter\r\n        } else {\r\n          const valueGetterStr = column.valueGetter\r\n          if (!valueGetterStr) {\r\n            // 如果没有 valueGetter，使用默认的，并打印日志允许调试\r\n            column.valueGetter = (params) => {\r\n              const data = params.data\r\n              const value = data[column.field]\r\n              console.log('valueGetter', params, value)\r\n              return value\r\n            }\r\n          }\r\n          delete column.allowValueGetter\r\n        }\r\n\r\n        if (column.allowValueFormatter !== true) {\r\n          // 不允许使用 valueFormatter (计算格式)\r\n          delete column.valueFormatter\r\n        } else {\r\n          const valueFormatterStr = column.valueFormatter\r\n          if (column.rowGroup === true && valueFormatterStr) {\r\n            // 如果是分组列，需要特殊处理\r\n            const fn = new Function('data', 'return ' + valueFormatterStr)\r\n\r\n            column.valueFormatter = (params) => {\r\n              const allLeafChildren = params.node.allLeafChildren\r\n              if (allLeafChildren.length === 0) {\r\n                return ''\r\n              }\r\n              const data = allLeafChildren[0].data\r\n              const value = fn(data)\r\n              return value\r\n            }\r\n          }\r\n        }\r\n\r\n        if (typeof column.dataType === 'number') {\r\n          column.type = 'numericColumn'\r\n        }\r\n        if (!column.dataType) {\r\n          column.type = 'text'\r\n          column.cellDataType = 'text'\r\n        }\r\n\r\n        const {minWidth, maxWidth} = column\r\n        delete column.minWidth\r\n        delete column.maxWidth\r\n        if (minWidth) {\r\n          column.minWidth = parseInt(minWidth)\r\n        }\r\n        if (maxWidth) {\r\n          column.maxWidth = parseInt(maxWidth)\r\n        }\r\n        if (column.isActions && column.actions) {\r\n          delete column.dict\r\n          delete column.editor\r\n          delete column.filterType\r\n        }\r\n\r\n        this._processColumnActions(column)\r\n        this._processColumnDict(column)\r\n        this._processColumnEditor(column)\r\n        this._processColumnFilterType(column)\r\n        this._processPermission(column)\r\n\r\n        delete column.dict\r\n        delete column.type\r\n        list.push(column)\r\n      })\r\n\r\n      const vjson = this.vjson\r\n      if (vjson.mode === 'checkbox' || vjson.mode === 'checkonly' || vjson.mode === 'checkboxSingleEdit') {\r\n        list.splice(0, 0, {\r\n          width: 37,\r\n          resizable: false,\r\n          suppressMenu: true,\r\n          headerCheckboxSelection: true,\r\n          enableCellTextSelection: true,\r\n          checkboxSelection: true,\r\n          suppressMovable: true,\r\n          suppressSizeToFit: true,\r\n          suppressAutoSize: true,\r\n          sortable: false,\r\n          pinned: 'left',\r\n        })\r\n      }\r\n\r\n      if (this.vjson.rowDragable) {\r\n        list.splice(0, 0, {\r\n          width: 25,\r\n          resizable: false,\r\n          suppressMenu: true,\r\n          rowDrag: true\r\n        })\r\n      }\r\n\r\n      if (vjson.rowNumber) {\r\n        const hashValueGetter = (params) => {\r\n          const v = params.node ? (params.node.rowIndex + 1) : null\r\n          if (typeof v === 'number' && typeof this.paginationOptions?.current !== 'undefined' && typeof this.paginationOptions?.size !== 'undefined') {\r\n            const start = ((this.paginationOptions?.current ?? 1) - 1) * (this.paginationOptions?.size ?? 0)\r\n            return start + v\r\n          }\r\n          return v\r\n        }\r\n        list.splice(0, 0, {\r\n          headerName: '#',\r\n          width: 30,\r\n          maxWidth: 100,\r\n          filter: false,\r\n          editable: false,\r\n          pinned: 'left',\r\n          resizable: true,\r\n          sortable: false,\r\n          enableRowGroup: false,\r\n          enablePivot: false,\r\n          suppressMenu: true,\r\n          suppressColumnsToolPanel: true,\r\n          valueGetter: hashValueGetter\r\n        })\r\n      }\r\n\r\n      return list\r\n    },\r\n    _processColumnEditor(column) {\r\n      if (column.editor) {\r\n        const editor = column.editor\r\n        delete column.dataSource\r\n        delete column.editor\r\n\r\n        const allowEdit = _.get(column, 'listeners.allowEdit')\r\n        if (allowEdit) {\r\n          column.editable = (param) => {\r\n            const f = new Function('param', 'scope', allowEdit)\r\n            return f.call(this.vcxt.scope, param, this.vcxt.scope)\r\n          }\r\n        }\r\n\r\n        if (editor.xtype === 'numberfield') {\r\n          _.extend(column, {\r\n            cellEditor: 'YvVjsonAggridInput',\r\n            cellEditorParams: {editor: editor, scope: this.vcxt.scope, type: 'number'},\r\n          })\r\n\r\n        } else if (editor.xtype === 'combobox') {\r\n          // const dict = window['DICT_CACHE'][column.dict]\r\n          // const values = []\r\n          // _.forEach(dict, ({id, text}) => {\r\n          //   values.push(text)\r\n          // })\r\n          // _.extend(column, {\r\n          //   cellEditor: \"agSelectCellEditor\",\r\n          //   cellEditorParams: {values: values},\r\n          // })\r\n\r\n          const dictObj = dict.value[column.dict]?.items//window['DICT_CACHE'][column.dict]\r\n          const values = []\r\n          _.forEach(dictObj, ({dictValue, dictText}) => {\r\n            values.push(dictText)\r\n          })\r\n          _.extend(column, {\r\n            cellEditor: \"YvVjsonAggridCombo\",\r\n            cellEditorParams: {dict: column.dict, scope: this.vcxt.scope, editor: editor},\r\n          })\r\n\r\n        } else if (editor.xtype === 'checkbox') {\r\n          _.extend(column, {\r\n            // editable: true,\r\n            // cellEditor: 'YvVjsonAggridCheckbox',\r\n            editable: false,\r\n            cellRenderer: 'YvVjsonAggridCheckbox',\r\n            cellRendererParams: {\r\n              editor: editor,\r\n              scope: this.vcxt.scope,\r\n              vcxt: this.vcxt,\r\n              setEditRow: this.setEditRow,\r\n              allowEdit: _.get(column, 'listeners.allowEdit'),\r\n              top: this,\r\n            },\r\n          })\r\n\r\n        } else if (editor.xtype === 'combogrid') {\r\n          _.extend(column, {\r\n            cellEditor: 'YvVjsonAggridCombogrid',\r\n            cellEditorParams: {\r\n              editor: editor,\r\n              scope: this.vcxt.scope,\r\n              vcxt: this.vcxt,\r\n              setEditRow: this.setEditRow,\r\n              allowCustomInput: column.allowCustomInput\r\n            },\r\n          })\r\n          delete column.allowCustomInput\r\n\r\n        } else if (editor.xtype === 'datefield') {\r\n          _.extend(column, {\r\n            cellEditor: 'YvVjsonAggridDate',\r\n            cellEditorParams: {editor: editor, scope: this.vcxt.scope, type: 'date'},\r\n          })\r\n\r\n        } else if (editor.xtype === 'datetimefield') {\r\n          _.extend(column, {\r\n            cellEditor: 'YvVjsonAggridDate',\r\n            cellEditorParams: {editor: editor, scope: this.vcxt.scope, type: 'datetime'},\r\n          })\r\n\r\n        } else if (editor.xtype === 'memo') {\r\n          _.extend(column, {\r\n            cellEditor: 'agLargeTextCellEditor'\r\n          })\r\n\r\n        } else {\r\n          // 文本编辑器\r\n          _.extend(column, {\r\n            cellEditor: 'YvVjsonAggridInput',\r\n            cellEditorParams: {editor: editor, scope: this.vcxt.scope, type: 'input'},\r\n          })\r\n        }\r\n        /*\r\n        _.forEach(gridOption.columnDefs, (v, k) => {\r\n          if (v.editable === true) {\r\n            v.cellEditor = 'gridEditor'\r\n          } else {\r\n            v.editable = false\r\n          }\r\n        })\r\n        */\r\n      }\r\n    },\r\n    _processColumnFilterType(column) {\r\n      if (column.filterType) {\r\n        /**\r\n         * filterType: text\r\n         * type: startsWith / equals / contains,\r\n         * filter: \"abc\"\r\n         *\r\n         * filterType: number\r\n         * type: equals / notEqual / lessThan / lessThanOrEqual / greaterThan / greaterThanOrEqual / inRange\r\n         * filter: 1\r\n         * filterTo: null (inRange 情况下有值)\r\n         *\r\n         * filterType: date\r\n         * type: inRange\r\n         * dateFrom: 2019-10-08\r\n         * dateTo: 2019-10-27\r\n         *\r\n         * filterType: set\r\n         * filter: [{id: \"M\", text: \"男\"}]\r\n         */\r\n        const filterType = column.filterType\r\n        delete column.filterType\r\n      }\r\n\r\n\r\n      if (column.dict || column.editor?.dataType === 1) {\r\n        // 字典翻译\r\n        const dictStr = column.dict\r\n        const editor = column.editor\r\n        column.filterParams = {\r\n          valueFormatter: (param) => {\r\n            if (typeof param.value === 'undefined') {\r\n              return ''\r\n            }\r\n\r\n            if (editor?.dataType === 1) {\r\n              if (!editor?.dataEnum) {\r\n                console.error(\"can't found dataEnum:\")\r\n                return param.value\r\n              }\r\n              // 固定值\r\n              const dictItem = _.find(editor.dataEnum, (dictItem) => (('' + dictItem.dictValue) === ('' + param.value)))\r\n              if (!dictItem) {\r\n                return param.value\r\n              }\r\n              return dictItem.dictText\r\n            }\r\n\r\n            const dictArray = dict.value[dictStr]?.items\r\n            if (!dictArray) {\r\n              console.error(\"can't found dict:\" + dictStr)\r\n              return param.value\r\n            }\r\n\r\n            const dictItem = _.find(dictArray, (dictItem) => (('' + dictItem.dictValue) === ('' + param.value)))\r\n            if (!dictItem) {\r\n              return param.value\r\n            }\r\n\r\n            return dictItem.dictText\r\n          }\r\n        }\r\n      }\r\n\r\n    },\r\n\r\n    /**\r\n     * 字段的字典翻译\r\n     */\r\n    _processColumnDict(column) {\r\n      if (column.dict || column.editor?.dataType === 1) {\r\n        // 字典翻译\r\n        const dictStr = column.dict\r\n        const editor = column.editor\r\n        column.valueFormatter = (param) => {\r\n          if (typeof param.value === 'undefined') {\r\n            return ''\r\n          }\r\n\r\n          if (editor?.dataType === 1) {\r\n            if (!editor?.dataEnum) {\r\n              console.error(\"can't found dataEnum:\")\r\n              return param.value\r\n            }\r\n            // 固定值\r\n            const dictItem = _.find(editor.dataEnum, (dictItem) => (('' + dictItem.dictValue) === ('' + param.value)))\r\n            if (!dictItem) {\r\n              return param.value\r\n            }\r\n            return dictItem.dictText\r\n          }\r\n\r\n          const dictArray = dict.value[dictStr]?.items\r\n          if (!dictArray) {\r\n            console.error(\"can't found dict:\" + dictStr)\r\n            return param.value\r\n          }\r\n\r\n          const dictItem = _.find(dictArray, (dictItem) => (('' + dictItem.dictValue) === ('' + param.value)))\r\n          if (!dictItem) {\r\n            return param.value\r\n          }\r\n\r\n          return dictItem.dictText\r\n        }\r\n      }\r\n    },\r\n    _processPermission(column) {\r\n      if (typeof window['$security']?.hasAnyPermissions === 'function' &&\r\n          _.isArray(column.permissions) &&\r\n          _.size(column.permissions) > 0) {\r\n\r\n        console.log('column.permissions', column.permissions, window['$security']?.permissions, column)\r\n\r\n        if (!window['$security']?.hasAnyPermissions(...column.permissions)) {\r\n          column.hide = true\r\n          column.lockVisible = true\r\n          console.log('column.permissions disable', column)\r\n        }\r\n      }\r\n    },\r\n    _processColumnActions(column) {\r\n      if (column.actions && variableTypeOf(column.actions) === TypeEnum.array && column.actions.length) {\r\n        column.cellRenderer = YvVjsonAggridAction\r\n        column.cellRendererParams = {\r\n          actions: [],\r\n          scope: this.vcxt.scope,\r\n        }\r\n        _.forEach(column.actions, action => {\r\n          if (variableTypeOf(action.show) === TypeEnum.string) {\r\n            action.showFucName = action.show\r\n            if (action.showFucName.startsWith(\"{\")) action.showFucName = action.showFucName.substring(1)\r\n            if (action.showFucName.endsWith(\"}\")) action.showFucName = action.showFucName.substring(0, action.showFucName.length - 1)\r\n            action.show = () => {\r\n              const scope = this.vcxt.scope\r\n              if (scope && variableTypeOf(scope[action.showFucName]) === TypeEnum.function) {\r\n                return scope[action.showFucName].call(scope, ...arguments)\r\n              }\r\n              return true\r\n            }\r\n          }\r\n          if (variableTypeOf(action.click) === TypeEnum.string) {\r\n            action.clickFucName = action.click\r\n            if (action.clickFucName.startsWith(\"{\")) action.clickFucName = action.clickFucName.substring(1)\r\n            if (action.clickFucName.endsWith(\"}\")) action.clickFucName = action.clickFucName.substring(0, action.clickFucName.length - 1)\r\n            action.click = () => {\r\n              const scope = this.vcxt.scope\r\n              if (scope && variableTypeOf(scope[action.clickFucName]) === TypeEnum.function) {\r\n                scope[action.clickFucName].call(scope, ...arguments)\r\n              }\r\n\r\n            }\r\n          }\r\n          column.cellRendererParams.actions.push(action)\r\n        })\r\n        delete column.actions\r\n      }\r\n    },\r\n    _processArrowUp() {\r\n      // 获取当前选定行的上一行，并选中\r\n      const [selectedNode] = this.api.getSelectedNodes()\r\n      if (selectedNode) {\r\n        const rowIndex = selectedNode.rowIndex\r\n        if (rowIndex > 0) {\r\n          const targetNode = this.api.getDisplayedRowAtIndex(rowIndex - 1)\r\n          if (targetNode) {\r\n            this.api.ensureNodeVisible(targetNode)\r\n            targetNode.setSelected(true)\r\n          }\r\n        }\r\n      }\r\n    },\r\n    _processArrowDown() {\r\n      const [selectedNode] = this.api.getSelectedNodes()\r\n      if (selectedNode) {\r\n        const rowIndex = selectedNode.rowIndex\r\n        const targetNode = this.api.getDisplayedRowAtIndex(rowIndex + 1)\r\n        if (targetNode) {\r\n          this.api.ensureNodeVisible(targetNode)\r\n          targetNode.setSelected(true)\r\n        }\r\n      }\r\n    },\r\n    _onReady(evt) {\r\n      this.api = evt.api\r\n      this.columnApi = evt.columnApi\r\n      this.gridCxt = evt.context\r\n      this.runEvent('onReady')\r\n      this.api.vcxt = this.vcxt\r\n    },\r\n    _onDataRendered(evt) {\r\n\r\n    },\r\n    _onRowClass(params) {\r\n      if (this.vjson.listeners &&\r\n          typeof this.vjson.listeners?.onRowClass === 'string' &&\r\n          _.startsWith(this.vjson.listeners.onRowClass, '{') &&\r\n          _.endsWith(this.vjson.listeners.onRowClass, '}')) {\r\n        // 获取 {method} 中的方法名\r\n        const methodName = this.vjson.listeners.onRowClass.substring(1, this.vjson.listeners.onRowClass.length - 1)\r\n        const func = this.vcxt.scope[methodName]\r\n        return func(params)\r\n      }\r\n      return false\r\n    },\r\n    _onCellClicked(params) {\r\n      this.runEvent('onCellClick', params)\r\n      runEvent(params.api.vcxt.scope, params.column.colDef, 'click', params)\r\n    },\r\n    _onCellEditingStarted(params) {\r\n      this.runEvent('onCellEditingStart', params)\r\n      runEvent(params.api.vcxt.scope, params.column.colDef, 'beginEdit', params)\r\n    },\r\n    _onCellEditingStopped(params) {\r\n      this.runEvent('onCellEditingStop', params)\r\n      runEvent(params.api.vcxt.scope, params.column.colDef, 'finishEdit', params)\r\n    },\r\n    _onCellDoubleClicked(params) {\r\n      this.runEvent('onCellDoubleClick', params)\r\n      runEvent(params.api.vcxt.scope, params.column.colDef, 'dbClick', params)\r\n    },\r\n    _onRowClick(event) {\r\n      this.runEvent('onRowClick', ...arguments)\r\n    },\r\n    _onSelectionChange({api}) {\r\n      // const rows = api.getSelectedRows()\r\n      const rows = this.api.getSelectedNodes()\r\n\r\n      if (this.vjson.reference) {\r\n        const row = rows[0]\r\n        if (!row) {\r\n          _.set(this.vcxt.scope, this.vjson.reference + '.selection', row)\r\n\r\n        } else if (row.groupData) {\r\n          // 如果是分组行，触发分组行事件, 并且不设置 _rid\r\n          const dt = {...row.groupData, ...row.data, level: row.level}\r\n          _.set(this.vcxt.scope, this.vjson.reference + '.selection', dt)\r\n\r\n        } else {\r\n          // 如果是普通行，触发普通行事件，并且设置 _rid\r\n          const data = row.data\r\n          const newRow = {...data, _rid: row.id}\r\n\r\n          // 如果有上级，要带上 level属性\r\n          if (newRow && row.parent) {\r\n            newRow.level = row.level\r\n          }\r\n\r\n          _.set(this.vcxt.scope, this.vjson.reference + '.selection', newRow)\r\n        }\r\n        _.set(this.vcxt.scope, this.vjson.reference + '.selections', _.map(rows, r => {\r\n          return {\r\n            ...r.data, _rid: r.id\r\n          }\r\n        }))\r\n      }\r\n\r\n      const args = arguments\r\n      this.$nextTick(() => {\r\n        this.runEvent('onSelectionChange', ...args)\r\n      })\r\n    },\r\n    _onRowDblClick(event) {\r\n      this.runEvent('onRowDblClick', ...arguments)\r\n    },\r\n    _onRowDragEnd() {\r\n      _.defer(() => {\r\n        this.applySort()\r\n      })\r\n    },\r\n    _onPasteStart(params) {\r\n      this._isPasteMode = true\r\n    },\r\n    _onPasteEnd(params) {\r\n      this._isPasteMode = false\r\n    },\r\n    _onCellValueChanged(param) {\r\n      const me = this\r\n      const colDef = param.column.colDef\r\n      const colId = param.column.colId\r\n      const value = param.value\r\n      const nid = param.node.id;\r\n      if (!this.newRowIds.includes(nid) && !this.modifyRowIds.includes(nid)) {\r\n        this.modifyRowIds.push(nid);\r\n      }\r\n\r\n      // 没有数据时, 清空 lookupColumns 关联的字段\r\n      if (!value && colDef?.cellEditor === \"YvVjsonAggridCombogrid\") {\r\n        // 从 lookup 中找到所有要回写数据的列\r\n        const lookupColumns = []\r\n        _.forOwn(colDef.cellEditorParams?.editor?.lookup, (targetColumn, widgetColumn) => {\r\n          // targetColumn 如果是 {f1} 格式,提取 f1 字段条件出来\r\n          if (targetColumn.startsWith('{') && targetColumn.endsWith('}') && !targetColumn.includes('.')) {\r\n            const targetField = targetColumn.substring(1, targetColumn.length - 1)\r\n            lookupColumns.push(targetField)\r\n          }\r\n        })\r\n\r\n        const currentRow = _.cloneDeep(param.node.data)\r\n        _.forEach(lookupColumns, (targetColumn) => {\r\n          currentRow[targetColumn] = ''\r\n        })\r\n        param.node.setData(currentRow)\r\n        console.log('paste combogrid column, with clearData', currentRow)\r\n      }\r\n\r\n      if (param.source === \"paste\" && value) {\r\n        // 如果是复制粘贴模式，要找出当前列的编辑器是不是 combogrid 类型\r\n        // 如果是 combogrid 类型，要考虑吧 combogrid 设置中的 lookup 字段一并复制粘贴过来\r\n        if (colDef?.cellEditor === \"YvVjsonAggridCombogrid\") {\r\n          // 从 lookup 中找到所有要回写数据的列\r\n          const lookupColumns = []\r\n          _.forOwn(colDef.cellEditorParams?.editor?.lookup, (targetColumn, widgetColumn) => {\r\n            // targetColumn 如果是 {f1} 格式,提取 f1 字段条件出来\r\n            if (targetColumn.startsWith('{') && targetColumn.endsWith('}') && !targetColumn.includes('.')) {\r\n              const targetField = targetColumn.substring(1, targetColumn.length - 1)\r\n              lookupColumns.push(targetField)\r\n            }\r\n          })\r\n\r\n          if (lookupColumns.length > 0) {\r\n            let targetRow = null\r\n            const cellRanges = this.api.getCellRanges();\r\n\r\n            if (value) {\r\n              // 从当前所有数据行中，找到与当前列字段相等的行\r\n              this.api.forEachNode((node) => {\r\n                const data = node.data\r\n                if (!data) {\r\n                  return\r\n                }\r\n                // 目标数据行不能是 cellRanges 选中的行\r\n                for (let i = 0; i < cellRanges.length; i++) {\r\n                  if (node.rowIndex >= cellRanges[i].startRow.rowIndex &&\r\n                      node.rowIndex <= cellRanges[i].endRow.rowIndex) {\r\n                    return\r\n                  }\r\n                }\r\n\r\n                if (node.rowIndex === rowIdx) {\r\n                  // 目标行数据不能是自己\r\n                  return\r\n                }\r\n\r\n                if (data[colId] === value) {\r\n                  targetRow = data\r\n                  return false\r\n                }\r\n              })\r\n\r\n              if (!targetRow) {\r\n                system.showErrorDialog('数据粘贴有问题', '数据窗口字段粘贴时，请至少保证有一行数据是通过数据窗口选择而来，这样才能保证回写的字段能一并被粘贴过来')\r\n                return\r\n              }\r\n\r\n              // 参照目标行，吧他的 targetColumn 所有字段都复制粘贴过来\r\n              const currentRow = _.cloneDeep(param.node.data)\r\n              _.forEach(lookupColumns, (targetColumn) => {\r\n                currentRow[targetColumn] = targetRow[targetColumn]\r\n              })\r\n              param.node.setData(currentRow)\r\n              console.log('paste combogrid column, with data', currentRow)\r\n\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      if (!me.api) {\r\n        return\r\n      }\r\n      if (me.vjson.reference) {\r\n        const selection = _.get(me.vcxt.scope, me.vjson.reference + '.selection')\r\n        const nodes = this.api.getSelectedNodes()\r\n        // console.log('cellChange', toRaw(selection), nodes)\r\n        if (selection && nodes[0] && nodes[0].id === selection._rid) {\r\n          _.set(me.vcxt.scope, me.vjson.reference + '.selection', {...nodes[0].data, _rid: nodes[0].id})\r\n        }\r\n\r\n        if (this.vjson.reference) {\r\n          _.set(this.vcxt.scope, this.vjson.reference + '.isChanged', true)\r\n        }\r\n\r\n        if (me.vjson.isBindMode) {\r\n          // 双向绑定模式\r\n          // console.log('change allData', '_onCellValueChanged', node)\r\n          // me.vjson._isStopWatchAllData = true\r\n          const datas = _.get(me.vcxt.scope, me.vjson.reference + '.allData')\r\n          datas[param.rowIndex] = {...param.data}\r\n          // me.vjson._isStopWatchAllData = false\r\n        }\r\n      }\r\n\r\n    },\r\n    _onRowDataUpdated() {\r\n      // this._allDataChange(this)\r\n      const me = this\r\n      if (!me.api) {\r\n        return\r\n      }\r\n      if (me.vjson.isBindMode && me.vjson.reference) {\r\n        // 双向绑定模式\r\n        // console.log('change allData', '_allDataChange')\r\n        const rows = []\r\n        me.api.forEachNode((node) => {\r\n          if (!node.data) {\r\n            return\r\n          }\r\n          rows.push(node.data)\r\n        })\r\n\r\n        // me.vjson._isStopWatchAllData = true\r\n        _.set(me.vcxt.scope, me.vjson.reference + '.allData', rows)\r\n        // me.vjson._isStopWatchAllData = false\r\n      }\r\n    },\r\n    _getRequestPageInfo() {\r\n      if (this.pagination) {\r\n        if (parseInt(this.paginationOptions.current) >= 1) {\r\n\r\n        } else {\r\n          this.paginationOptions.current = 1\r\n        }\r\n        const reqPage = {\r\n          limit: this.paginationOptions.size,\r\n          page: this.paginationOptions.current,\r\n          start: (this.paginationOptions.current - 1) * this.paginationOptions.size\r\n        }\r\n        return reqPage\r\n      }\r\n      return null\r\n    },\r\n    // 分页事件\r\n    _firstPage() {\r\n      if (this.paginationOptions.current <= 1) {\r\n        return\r\n      }\r\n      this.paginationOptions.current = 1\r\n      this.dataSource.reload()\r\n    },\r\n    _previousPage() {\r\n      if (this.paginationOptions.current <= 1) {\r\n        return\r\n      }\r\n      this.paginationOptions.current = this.paginationOptions.current - 1\r\n      this.dataSource.reload()\r\n    },\r\n    _nextPage() {\r\n      if (this.paginationOptions.current >= this.paginationOptions.totalPage) {\r\n        return\r\n      }\r\n      this.paginationOptions.current = this.paginationOptions.current + 1\r\n      this.dataSource.reload()\r\n    },\r\n    _lastPage() {\r\n      if (this.paginationOptions.current >= this.paginationOptions.totalPage) {\r\n        return\r\n      }\r\n      this.paginationOptions.current = this.paginationOptions.totalPage\r\n      this.dataSource.reload()\r\n    },\r\n    _onPageKeyUp(event) {\r\n      if (event.altKey || event.shiftKey || event.ctrlKey) {\r\n        return\r\n      } else if (event.keyCode == 13) {\r\n        this.dataSource.reload()\r\n      }\r\n    },\r\n    _changePageSize() {\r\n      this.dataSource.reload()\r\n    },\r\n    tryPraseServerData(rows) {\r\n      // JSON模式, 提交时要将值转换为字符串模式\r\n      const jsonModeColumns = _.map(_.filter(this.vjson.columns, col => col?.dataIndex && col.jsonMode), col => col.dataIndex)\r\n\r\n      // 尝试拿到每一行数据，如果字段的 jsonMode == true 就要按照 JSON 去序列号成对象\r\n      _.forEach(rows, (row) => {\r\n        _.forEach(jsonModeColumns, (fieldName) => {\r\n          if ((_.startsWith(row[fieldName], '{') && _.endsWith(row[fieldName], '}')) ||\r\n              (_.startsWith(row[fieldName], '[') && _.endsWith(row[fieldName], ']'))) {\r\n            try {\r\n              row[fieldName] = JSON.parse(row[fieldName])\r\n            } catch (e) {\r\n            }\r\n          }\r\n        })\r\n      })\r\n\r\n      this.runEvent('onDataLoadComplete', this, rows)\r\n    },\r\n    exportExcel(option) {\r\n      const columns = this?.vjson?.columns ?? []\r\n\r\n      function getDict(field) {\r\n        let column = columns.find(value => value?.dataIndex === field);\r\n        if (!column) {\r\n          column = columns.find(value => value?.field === field);\r\n        }\r\n        if (column?.dict && window['DICT_CACHE2']?.value) {\r\n          const dict = window['DICT_CACHE2'].value[column?.dict];\r\n          if (dict) {\r\n            return dict;\r\n          }\r\n        }\r\n        return {items: []};\r\n      }\r\n\r\n      this?.api?.exportDataAsExcel({\r\n        sheetName: \"导出数据\",\r\n        fileName: \"导出数据.xlsx\",\r\n        processCellCallback: (params) => {\r\n          const field = params?.column?.getDefinition()?.field ?? \"\"\r\n          if (field) {\r\n            const dict = getDict(field);\r\n            if (dict?.items.length > 0) {\r\n              // console.log(\"dict\", dict)\r\n              const item = dict.items.find(value => `${value?.dictValue ?? \"\"}` === `${params?.value ?? \"\"}`)\r\n              if (item) {\r\n                return item.dictText\r\n              }\r\n            }\r\n          }\r\n          return params?.value ?? \"\";\r\n        },\r\n        ...(option ?? {}),\r\n      });\r\n    }\r\n  },\r\n  mounted() {\r\n    const me = this\r\n    // if (me.vjson.isBindMode && me.vjson.reference) {\r\n    //   this.dataSourceWatchStopHandle.push(\r\n    //       me.vcxt.scope.$watch(me.vjson.reference + '.allData', (newVal) => {\r\n    //         if (!me.vjson._isStopWatchAllData) {\r\n    //           console.log('has change allData', 'setTransaction')\r\n    //\r\n    //           me.vjson._isStopWatchAllData = true\r\n    //           me.setDataTransaction(toRaw(newVal))\r\n    //           me.vjson._isStopWatchAllData = false\r\n    //         }\r\n    //       })\r\n    //   )\r\n    // }\r\n    if (me.vjson.reference) {\r\n\r\n      // 用来观测外部 有没有改掉 .selection 中的某个属性内容，要把他及时写入到 node\r\n      const stopHandle = me.vcxt.scope.$watch(me.vjson.reference + '.selection', (newVal, oldVal) => {\r\n        if (!me.api) {\r\n          return\r\n        }\r\n\r\n        const n = toRaw(newVal)\r\n        const o = toRaw(oldVal)\r\n        if (n && n?._rid === o?._rid) {\r\n          // 同一行, 没有变化过\r\n          const node = me.api.getRowNode(n._rid)\r\n          if (!node) {\r\n            return\r\n          }\r\n          const {_rid, ...newRowData} = n\r\n          if (!_.isEqual(newRowData, node.data)) {\r\n            // console.log('rowNew', newRowData)\r\n            // 数据不一样，就要变更\r\n            node.setData(newRowData)\r\n          }\r\n\r\n          // 因为深层次对象没办法用 _.isEqual 做对比, 因此无论数据新旧是否一致，都要标记为 isChanged\r\n          if (this.vjson.reference) {\r\n            _.set(this.vcxt.scope, this.vjson.reference + '.isChanged', true)\r\n          }\r\n        }\r\n\r\n      }, {deep: true})\r\n      this.dataSourceWatchStopHandle.push(stopHandle)\r\n    }\r\n\r\n    if (this.vjson.reference) {\r\n      _.set(this.vcxt.scope, this.vjson.reference + '.isChanged', false)\r\n    }\r\n\r\n    this._buildDataSource()\r\n\r\n    if (this.autoLoad && typeof this.dataSource.reload === 'function') {\r\n      this.dataSource?.reload()\r\n    }\r\n\r\n    if (this.vjson.allowQuickFilter) {\r\n\r\n      let quickFilterText = this.vjson.quickFilterText\r\n      if (!quickFilterText) {\r\n        return\r\n      }\r\n      // 如果 quickFilterText 有前后缀 {  }, 则去掉\r\n      if (quickFilterText.startsWith('{') && quickFilterText.endsWith('}')) {\r\n        quickFilterText = quickFilterText.substring(1, quickFilterText.length - 1)\r\n      }\r\n      const stopHandle = me.vcxt.scope.$watch(quickFilterText, (newVal, oldVal) => {\r\n        console.log('filter', newVal, oldVal, 'setQuickFilter')\r\n        me.api?.setQuickFilter(newVal);\r\n      })\r\n      this.dataSourceWatchStopHandle.push(stopHandle)\r\n    }\r\n  },\r\n  unmounted() {\r\n    if (this.dataSourceWatchStopHandle.length > 0) {\r\n      _.forEach(this.dataSourceWatchStopHandle, (fn) => {\r\n        fn()\r\n      })\r\n      this.dataSourceWatchStopHandle = []\r\n    }\r\n\r\n    if (this.$props.vcxt?.scope?._registeForm) {\r\n      this.$props.vcxt.scope._unregForm(this)\r\n    }\r\n    if (this.vjson.uiBlock) {\r\n      delete this.vcxt.$uiBlocks[this.vjson.uiBlock]\r\n    }\r\n  },\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n:root {\r\n  --grid-row-height: 34px;\r\n}\r\n\r\n.yv-aggrid-wrap {\r\n  display: flex;\r\n  flex-direction: column;\r\n  height: 100%;\r\n\r\n  .title {\r\n    padding: 10px;\r\n    font-size: 15px;\r\n    font-weight: 500;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n  }\r\n\r\n  .yv-aggrid.ag-theme-alpine {\r\n    flex-grow: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n\r\n    & > .ag-root-wrapper {\r\n      flex-grow: 1;\r\n      border: none\r\n    }\r\n\r\n    .ag-header-cell {\r\n      background: var(--aggrid-header-bg-color);\r\n      border-bottom-color: #f0f0f0;\r\n\r\n      .ag-header-cell-text {\r\n        font-weight: 600;\r\n        font-size: 14px;\r\n        color: #000000e0\r\n      }\r\n\r\n      .ag-header-cell-menu-button:not(.ag-header-menu-always-show) {\r\n        opacity: 1\r\n      }\r\n    }\r\n\r\n    .ag-root-wrapper {\r\n      /*border:0;*/\r\n    }\r\n\r\n    .ag-row {\r\n      font-weight: 600;\r\n      font-size: 14px;\r\n      transition: all .3s ease;\r\n      border-color: #ebeef5;\r\n\r\n      .ag-cell-last-left-pinned {\r\n        padding: 0;\r\n\r\n        .ag-cell-wrapper {\r\n          width: 100%;\r\n          height: 100%;\r\n          display: flex;\r\n          flex-direction: column;\r\n          justify-content: center;\r\n\r\n          .ag-selection-checkbox {\r\n            margin-right: 3px\r\n          }\r\n        }\r\n      }\r\n\r\n      &.bg-red {\r\n        background: #fdeaea;\r\n      }\r\n\r\n      &.bg-blue {\r\n        background: #ecf4ff;\r\n      }\r\n\r\n      &.bg-green {\r\n        background: #e3fff1;\r\n      }\r\n\r\n      &.bg-yellow {\r\n        background: #fffae3;\r\n      }\r\n\r\n      &.bg-orange {\r\n        background: #fff3e8;\r\n      }\r\n    }\r\n\r\n    .ag-row-odd {\r\n      background: none;\r\n    }\r\n\r\n    .ag-pinned-left-header {\r\n      border-right-color: #ebeef5;\r\n    }\r\n\r\n    .ag-cell.ag-cell-last-left-pinned:not(.ag-cell-range-right):not(.ag-cell-range-single-cell) {\r\n      border-right-color: #ebeef5;\r\n    }\r\n\r\n    .ag-row.ag-row-hover {\r\n      background: #fafafa;\r\n    }\r\n\r\n    .ag-row-selected::before {\r\n      background: #fafafa;\r\n    }\r\n\r\n    .ag-row-hover:not(.ag-full-width-row)::before {\r\n      background: #fafafa;\r\n    }\r\n\r\n    .ag-header-icon {\r\n      color: #b8b8b8\r\n    }\r\n\r\n    .ag-icon.ag-icon-menu {\r\n      font-size: 15px;\r\n      font-family: FontAwesome;\r\n\r\n      &:before {\r\n        content: '\\f0b0';\r\n      }\r\n    }\r\n\r\n    .ag-header {\r\n      border-bottom-color: #ebeef5;\r\n    }\r\n  }\r\n\r\n  &.allow-vertical-line .ag-cell-value {\r\n    border-right: 1px solid #ebeef5;\r\n\r\n    &.ag-cell-focus.ag-cell-range-selected {\r\n      border-right: 1px solid #2c96f2;\r\n    }\r\n  }\r\n\r\n  .yv-aggrid-wrap .yv-aggrid .ag-cell-inline-editing {\r\n    height: var(--grid-row-height);\r\n  }\r\n\r\n  .yv-aggrid .ag-header-cell, .yv-aggrid .ag-header-group-cell, .yv-aggrid .ag-ltr .ag-cell {\r\n    font-size: 14px;\r\n    font-weight: 300;\r\n    color: #000000e0\r\n  }\r\n\r\n  .yv-aggrid .ag-cell, .yv-aggrid .ag-full-width-row .ag-cell-wrapper.ag-row-group {\r\n    line-height: var(--grid-row-height);\r\n  }\r\n\r\n  .yv-aggrid .ag-cell-wrapper > *:not(.ag-cell-value):not(.ag-group-value) {\r\n    /*height: 30px;*/\r\n  }\r\n\r\n  .yv-aggrid .ag-cell-inline-editing {\r\n    height: var(--grid-row-height);\r\n  }\r\n\r\n  .yv-aggrid .ag-header-cell, .yv-aggrid .ag-header-group-cell {\r\n    padding-left: 9px;\r\n    padding-right: 9px;\r\n  }\r\n\r\n  .yv-aggrid .ag-cell, .yv-aggrid .ag-full-width-row .ag-cell-wrapper.ag-row-group {\r\n    padding-left: 5px;\r\n    padding-right: 5px;\r\n\r\n    &.ag-cell-inline-editing {\r\n      padding-left: 0;\r\n      padding-right: 0;\r\n    }\r\n  }\r\n\r\n  .ag-grid-pagination {\r\n    height: 35px;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    padding: 5px 0 5px 0;\r\n    background: var(--secondary-menu-bg-color);\r\n    /*border-top: 1px solid var(--frist-border-color);*/\r\n    overflow: hidden;\r\n    margin-top: 3px;\r\n    box-shadow: 0px -1px 3px rgba(0, 0, 0, .2);\r\n\r\n    .btns {\r\n      display: flex;\r\n      flex-direction: row;\r\n      white-space: nowrap;\r\n\r\n      .el-button {\r\n        padding: 5px;\r\n        background: #f5f4f5;\r\n        border: 1px solid #dcdcdc;\r\n        margin-left: 6px;\r\n        border-radius: 0;\r\n\r\n        &:not(.is-disabled):hover, &:not(.is-disabled):focus {\r\n          background: #e9e9e9;\r\n          color: #000\r\n        }\r\n\r\n        span {\r\n          font-size: 18px;\r\n        }\r\n      }\r\n\r\n      .el-button.is-disabled, .el-button.is-disabled:focus, .el-button.is-disabled:hover {\r\n        background: #f5f4f5;\r\n        color: #d5d5d5\r\n      }\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n\r\n      .line {\r\n        width: 1px;\r\n        background: #d0d0d0;\r\n        margin: 0 8px;\r\n        height: 20px;\r\n        position: relative;\r\n        top: 6px\r\n      }\r\n\r\n      .page {\r\n        color: var(--el-text-color-primary);\r\n        font-size: 14px;\r\n        margin: 0 5px;\r\n\r\n        input {\r\n          width: 40px;\r\n          height: 24px;\r\n          margin: 0 5px;\r\n          border: 1px solid var(--el-border-color);\r\n          text-align: center;\r\n\r\n          &:hover, &:focus {\r\n            outline: none;\r\n          }\r\n        }\r\n      }\r\n\r\n      .no-margin {\r\n        margin: 0;\r\n      }\r\n\r\n      .el-select {\r\n        width: 65px;\r\n        margin-left: 5px\r\n      }\r\n    }\r\n\r\n    .total {\r\n      font-size: 14px;\r\n      color: #4b4c4c;\r\n      line-height: 24px;\r\n      margin-right: 5px;\r\n      white-space: nowrap;\r\n\r\n      span {\r\n        margin-left: 5px\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n.yv-aggrid-wrap.hi-light-selected-row .yv-aggrid.ag-theme-alpine .ag-row-selected::before {\r\n  background: var(--el-color-primary-light-8); // #dde6f8;\r\n}\r\n\r\n.ag-popup .ag-popup-child {\r\n  z-index: 23150;\r\n}\r\n</style>","/**\r\n * Make a map and return a function for checking if a key\r\n * is in that map.\r\n * IMPORTANT: all calls of this function must be prefixed with\r\n * \\/\\*#\\_\\_PURE\\_\\_\\*\\/\r\n * So that rollup can tree-shake them if necessary.\r\n */\r\nfunction makeMap(str, expectsLowerCase) {\r\n    const map = Object.create(null);\r\n    const list = str.split(',');\r\n    for (let i = 0; i < list.length; i++) {\r\n        map[list[i]] = true;\r\n    }\r\n    return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val];\r\n}\n\n/**\r\n * dev only flag -> name mapping\r\n */\r\nconst PatchFlagNames = {\r\n    [1 /* TEXT */]: `TEXT`,\r\n    [2 /* CLASS */]: `CLASS`,\r\n    [4 /* STYLE */]: `STYLE`,\r\n    [8 /* PROPS */]: `PROPS`,\r\n    [16 /* FULL_PROPS */]: `FULL_PROPS`,\r\n    [32 /* HYDRATE_EVENTS */]: `HYDRATE_EVENTS`,\r\n    [64 /* STABLE_FRAGMENT */]: `STABLE_FRAGMENT`,\r\n    [128 /* KEYED_FRAGMENT */]: `KEYED_FRAGMENT`,\r\n    [256 /* UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`,\r\n    [512 /* NEED_PATCH */]: `NEED_PATCH`,\r\n    [1024 /* DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`,\r\n    [2048 /* DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`,\r\n    [-1 /* HOISTED */]: `HOISTED`,\r\n    [-2 /* BAIL */]: `BAIL`\r\n};\n\n/**\r\n * Dev only\r\n */\r\nconst slotFlagsText = {\r\n    [1 /* STABLE */]: 'STABLE',\r\n    [2 /* DYNAMIC */]: 'DYNAMIC',\r\n    [3 /* FORWARDED */]: 'FORWARDED'\r\n};\n\nconst GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' +\r\n    'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' +\r\n    'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt';\r\nconst isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED);\n\nconst range = 2;\r\nfunction generateCodeFrame(source, start = 0, end = source.length) {\r\n    // Split the content into individual lines but capture the newline sequence\r\n    // that separated each line. This is important because the actual sequence is\r\n    // needed to properly take into account the full line length for offset\r\n    // comparison\r\n    let lines = source.split(/(\\r?\\n)/);\r\n    // Separate the lines and newline sequences into separate arrays for easier referencing\r\n    const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\r\n    lines = lines.filter((_, idx) => idx % 2 === 0);\r\n    let count = 0;\r\n    const res = [];\r\n    for (let i = 0; i < lines.length; i++) {\r\n        count +=\r\n            lines[i].length +\r\n                ((newlineSequences[i] && newlineSequences[i].length) || 0);\r\n        if (count >= start) {\r\n            for (let j = i - range; j <= i + range || end > count; j++) {\r\n                if (j < 0 || j >= lines.length)\r\n                    continue;\r\n                const line = j + 1;\r\n                res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}|  ${lines[j]}`);\r\n                const lineLength = lines[j].length;\r\n                const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0;\r\n                if (j === i) {\r\n                    // push underline\r\n                    const pad = start - (count - (lineLength + newLineSeqLength));\r\n                    const length = Math.max(1, end > count ? lineLength - pad : end - start);\r\n                    res.push(`   |  ` + ' '.repeat(pad) + '^'.repeat(length));\r\n                }\r\n                else if (j > i) {\r\n                    if (end > count) {\r\n                        const length = Math.max(Math.min(end - count, lineLength), 1);\r\n                        res.push(`   |  ` + '^'.repeat(length));\r\n                    }\r\n                    count += lineLength + newLineSeqLength;\r\n                }\r\n            }\r\n            break;\r\n        }\r\n    }\r\n    return res.join('\\n');\r\n}\n\n/**\r\n * On the client we only need to offer special cases for boolean attributes that\r\n * have different names from their corresponding dom properties:\r\n * - itemscope -> N/A\r\n * - allowfullscreen -> allowFullscreen\r\n * - formnovalidate -> formNoValidate\r\n * - ismap -> isMap\r\n * - nomodule -> noModule\r\n * - novalidate -> noValidate\r\n * - readonly -> readOnly\r\n */\r\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\r\nconst isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs);\r\n/**\r\n * The full list is needed during SSR to produce the correct initial markup.\r\n */\r\nconst isBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs +\r\n    `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,` +\r\n    `loop,open,required,reversed,scoped,seamless,` +\r\n    `checked,muted,multiple,selected`);\r\n/**\r\n * Boolean attributes should be included if the value is truthy or ''.\r\n * e.g. `<select multiple>` compiles to `{ multiple: '' }`\r\n */\r\nfunction includeBooleanAttr(value) {\r\n    return !!value || value === '';\r\n}\r\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\r\nconst attrValidationCache = {};\r\nfunction isSSRSafeAttrName(name) {\r\n    if (attrValidationCache.hasOwnProperty(name)) {\r\n        return attrValidationCache[name];\r\n    }\r\n    const isUnsafe = unsafeAttrCharRE.test(name);\r\n    if (isUnsafe) {\r\n        console.error(`unsafe attribute name: ${name}`);\r\n    }\r\n    return (attrValidationCache[name] = !isUnsafe);\r\n}\r\nconst propsToAttrMap = {\r\n    acceptCharset: 'accept-charset',\r\n    className: 'class',\r\n    htmlFor: 'for',\r\n    httpEquiv: 'http-equiv'\r\n};\r\n/**\r\n * CSS properties that accept plain numbers\r\n */\r\nconst isNoUnitNumericStyleProp = /*#__PURE__*/ makeMap(`animation-iteration-count,border-image-outset,border-image-slice,` +\r\n    `border-image-width,box-flex,box-flex-group,box-ordinal-group,column-count,` +\r\n    `columns,flex,flex-grow,flex-positive,flex-shrink,flex-negative,flex-order,` +\r\n    `grid-row,grid-row-end,grid-row-span,grid-row-start,grid-column,` +\r\n    `grid-column-end,grid-column-span,grid-column-start,font-weight,line-clamp,` +\r\n    `line-height,opacity,order,orphans,tab-size,widows,z-index,zoom,` +\r\n    // SVG\r\n    `fill-opacity,flood-opacity,stop-opacity,stroke-dasharray,stroke-dashoffset,` +\r\n    `stroke-miterlimit,stroke-opacity,stroke-width`);\r\n/**\r\n * Known attributes, this is used for stringification of runtime static nodes\r\n * so that we don't stringify bindings that cannot be set from HTML.\r\n * Don't also forget to allow `data-*` and `aria-*`!\r\n * Generated from https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes\r\n */\r\nconst isKnownHtmlAttr = /*#__PURE__*/ makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,` +\r\n    `autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,` +\r\n    `border,buffered,capture,challenge,charset,checked,cite,class,code,` +\r\n    `codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,` +\r\n    `coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,` +\r\n    `disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,` +\r\n    `formaction,formenctype,formmethod,formnovalidate,formtarget,headers,` +\r\n    `height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,` +\r\n    `ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,` +\r\n    `manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,` +\r\n    `open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,` +\r\n    `referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,` +\r\n    `selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,` +\r\n    `start,step,style,summary,tabindex,target,title,translate,type,usemap,` +\r\n    `value,width,wrap`);\r\n/**\r\n * Generated from https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute\r\n */\r\nconst isKnownSvgAttr = /*#__PURE__*/ makeMap(`xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,` +\r\n    `arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,` +\r\n    `baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,` +\r\n    `clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,` +\r\n    `color-interpolation-filters,color-profile,color-rendering,` +\r\n    `contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,` +\r\n    `descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,` +\r\n    `dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,` +\r\n    `fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,` +\r\n    `font-family,font-size,font-size-adjust,font-stretch,font-style,` +\r\n    `font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,` +\r\n    `glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,` +\r\n    `gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,` +\r\n    `horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,` +\r\n    `k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,` +\r\n    `lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,` +\r\n    `marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,` +\r\n    `mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,` +\r\n    `name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,` +\r\n    `overflow,overline-position,overline-thickness,panose-1,paint-order,path,` +\r\n    `pathLength,patternContentUnits,patternTransform,patternUnits,ping,` +\r\n    `pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,` +\r\n    `preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,` +\r\n    `rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,` +\r\n    `restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,` +\r\n    `specularConstant,specularExponent,speed,spreadMethod,startOffset,` +\r\n    `stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,` +\r\n    `strikethrough-position,strikethrough-thickness,string,stroke,` +\r\n    `stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,` +\r\n    `stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,` +\r\n    `systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,` +\r\n    `text-decoration,text-rendering,textLength,to,transform,transform-origin,` +\r\n    `type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,` +\r\n    `unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,` +\r\n    `v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,` +\r\n    `vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,` +\r\n    `writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,` +\r\n    `xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,` +\r\n    `xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`);\n\nfunction normalizeStyle(value) {\r\n    if (isArray(value)) {\r\n        const res = {};\r\n        for (let i = 0; i < value.length; i++) {\r\n            const item = value[i];\r\n            const normalized = isString(item)\r\n                ? parseStringStyle(item)\r\n                : normalizeStyle(item);\r\n            if (normalized) {\r\n                for (const key in normalized) {\r\n                    res[key] = normalized[key];\r\n                }\r\n            }\r\n        }\r\n        return res;\r\n    }\r\n    else if (isString(value)) {\r\n        return value;\r\n    }\r\n    else if (isObject(value)) {\r\n        return value;\r\n    }\r\n}\r\nconst listDelimiterRE = /;(?![^(]*\\))/g;\r\nconst propertyDelimiterRE = /:(.+)/;\r\nfunction parseStringStyle(cssText) {\r\n    const ret = {};\r\n    cssText.split(listDelimiterRE).forEach(item => {\r\n        if (item) {\r\n            const tmp = item.split(propertyDelimiterRE);\r\n            tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\r\n        }\r\n    });\r\n    return ret;\r\n}\r\nfunction stringifyStyle(styles) {\r\n    let ret = '';\r\n    if (!styles || isString(styles)) {\r\n        return ret;\r\n    }\r\n    for (const key in styles) {\r\n        const value = styles[key];\r\n        const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\r\n        if (isString(value) ||\r\n            (typeof value === 'number' && isNoUnitNumericStyleProp(normalizedKey))) {\r\n            // only render valid values\r\n            ret += `${normalizedKey}:${value};`;\r\n        }\r\n    }\r\n    return ret;\r\n}\r\nfunction normalizeClass(value) {\r\n    let res = '';\r\n    if (isString(value)) {\r\n        res = value;\r\n    }\r\n    else if (isArray(value)) {\r\n        for (let i = 0; i < value.length; i++) {\r\n            const normalized = normalizeClass(value[i]);\r\n            if (normalized) {\r\n                res += normalized + ' ';\r\n            }\r\n        }\r\n    }\r\n    else if (isObject(value)) {\r\n        for (const name in value) {\r\n            if (value[name]) {\r\n                res += name + ' ';\r\n            }\r\n        }\r\n    }\r\n    return res.trim();\r\n}\r\nfunction normalizeProps(props) {\r\n    if (!props)\r\n        return null;\r\n    let { class: klass, style } = props;\r\n    if (klass && !isString(klass)) {\r\n        props.class = normalizeClass(klass);\r\n    }\r\n    if (style) {\r\n        props.style = normalizeStyle(style);\r\n    }\r\n    return props;\r\n}\n\n// These tag configs are shared between compiler-dom and runtime-dom, so they\r\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Element\r\nconst HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' +\r\n    'header,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' +\r\n    'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' +\r\n    'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' +\r\n    'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' +\r\n    'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' +\r\n    'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' +\r\n    'option,output,progress,select,textarea,details,dialog,menu,' +\r\n    'summary,template,blockquote,iframe,tfoot';\r\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Element\r\nconst SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' +\r\n    'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' +\r\n    'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' +\r\n    'feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' +\r\n    'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' +\r\n    'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' +\r\n    'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' +\r\n    'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' +\r\n    'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' +\r\n    'text,textPath,title,tspan,unknown,use,view';\r\nconst VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';\r\n/**\r\n * Compiler only.\r\n * Do NOT use in runtime code paths unless behind `(process.env.NODE_ENV !== 'production')` flag.\r\n */\r\nconst isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS);\r\n/**\r\n * Compiler only.\r\n * Do NOT use in runtime code paths unless behind `(process.env.NODE_ENV !== 'production')` flag.\r\n */\r\nconst isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS);\r\n/**\r\n * Compiler only.\r\n * Do NOT use in runtime code paths unless behind `(process.env.NODE_ENV !== 'production')` flag.\r\n */\r\nconst isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS);\n\nconst escapeRE = /[\"'&<>]/;\r\nfunction escapeHtml(string) {\r\n    const str = '' + string;\r\n    const match = escapeRE.exec(str);\r\n    if (!match) {\r\n        return str;\r\n    }\r\n    let html = '';\r\n    let escaped;\r\n    let index;\r\n    let lastIndex = 0;\r\n    for (index = match.index; index < str.length; index++) {\r\n        switch (str.charCodeAt(index)) {\r\n            case 34: // \"\r\n                escaped = '&quot;';\r\n                break;\r\n            case 38: // &\r\n                escaped = '&amp;';\r\n                break;\r\n            case 39: // '\r\n                escaped = '&#39;';\r\n                break;\r\n            case 60: // <\r\n                escaped = '&lt;';\r\n                break;\r\n            case 62: // >\r\n                escaped = '&gt;';\r\n                break;\r\n            default:\r\n                continue;\r\n        }\r\n        if (lastIndex !== index) {\r\n            html += str.slice(lastIndex, index);\r\n        }\r\n        lastIndex = index + 1;\r\n        html += escaped;\r\n    }\r\n    return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\r\n}\r\n// https://www.w3.org/TR/html52/syntax.html#comments\r\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\r\nfunction escapeHtmlComment(src) {\r\n    return src.replace(commentStripRE, '');\r\n}\n\nfunction looseCompareArrays(a, b) {\r\n    if (a.length !== b.length)\r\n        return false;\r\n    let equal = true;\r\n    for (let i = 0; equal && i < a.length; i++) {\r\n        equal = looseEqual(a[i], b[i]);\r\n    }\r\n    return equal;\r\n}\r\nfunction looseEqual(a, b) {\r\n    if (a === b)\r\n        return true;\r\n    let aValidType = isDate(a);\r\n    let bValidType = isDate(b);\r\n    if (aValidType || bValidType) {\r\n        return aValidType && bValidType ? a.getTime() === b.getTime() : false;\r\n    }\r\n    aValidType = isSymbol(a);\r\n    bValidType = isSymbol(b);\r\n    if (aValidType || bValidType) {\r\n        return a === b;\r\n    }\r\n    aValidType = isArray(a);\r\n    bValidType = isArray(b);\r\n    if (aValidType || bValidType) {\r\n        return aValidType && bValidType ? looseCompareArrays(a, b) : false;\r\n    }\r\n    aValidType = isObject(a);\r\n    bValidType = isObject(b);\r\n    if (aValidType || bValidType) {\r\n        /* istanbul ignore if: this if will probably never be called */\r\n        if (!aValidType || !bValidType) {\r\n            return false;\r\n        }\r\n        const aKeysCount = Object.keys(a).length;\r\n        const bKeysCount = Object.keys(b).length;\r\n        if (aKeysCount !== bKeysCount) {\r\n            return false;\r\n        }\r\n        for (const key in a) {\r\n            const aHasKey = a.hasOwnProperty(key);\r\n            const bHasKey = b.hasOwnProperty(key);\r\n            if ((aHasKey && !bHasKey) ||\r\n                (!aHasKey && bHasKey) ||\r\n                !looseEqual(a[key], b[key])) {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n    return String(a) === String(b);\r\n}\r\nfunction looseIndexOf(arr, val) {\r\n    return arr.findIndex(item => looseEqual(item, val));\r\n}\n\n/**\r\n * For converting {{ interpolation }} values to displayed strings.\r\n * @private\r\n */\r\nconst toDisplayString = (val) => {\r\n    return isString(val)\r\n        ? val\r\n        : val == null\r\n            ? ''\r\n            : isArray(val) ||\r\n                (isObject(val) &&\r\n                    (val.toString === objectToString || !isFunction(val.toString)))\r\n                ? JSON.stringify(val, replacer, 2)\r\n                : String(val);\r\n};\r\nconst replacer = (_key, val) => {\r\n    // can't use isRef here since @vue/shared has no deps\r\n    if (val && val.__v_isRef) {\r\n        return replacer(_key, val.value);\r\n    }\r\n    else if (isMap(val)) {\r\n        return {\r\n            [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val]) => {\r\n                entries[`${key} =>`] = val;\r\n                return entries;\r\n            }, {})\r\n        };\r\n    }\r\n    else if (isSet(val)) {\r\n        return {\r\n            [`Set(${val.size})`]: [...val.values()]\r\n        };\r\n    }\r\n    else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\r\n        return String(val);\r\n    }\r\n    return val;\r\n};\n\nconst EMPTY_OBJ = (process.env.NODE_ENV !== 'production')\r\n    ? Object.freeze({})\r\n    : {};\r\nconst EMPTY_ARR = (process.env.NODE_ENV !== 'production') ? Object.freeze([]) : [];\r\nconst NOOP = () => { };\r\n/**\r\n * Always return false.\r\n */\r\nconst NO = () => false;\r\nconst onRE = /^on[^a-z]/;\r\nconst isOn = (key) => onRE.test(key);\r\nconst isModelListener = (key) => key.startsWith('onUpdate:');\r\nconst extend = Object.assign;\r\nconst remove = (arr, el) => {\r\n    const i = arr.indexOf(el);\r\n    if (i > -1) {\r\n        arr.splice(i, 1);\r\n    }\r\n};\r\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\r\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\r\nconst isArray = Array.isArray;\r\nconst isMap = (val) => toTypeString(val) === '[object Map]';\r\nconst isSet = (val) => toTypeString(val) === '[object Set]';\r\nconst isDate = (val) => toTypeString(val) === '[object Date]';\r\nconst isFunction = (val) => typeof val === 'function';\r\nconst isString = (val) => typeof val === 'string';\r\nconst isSymbol = (val) => typeof val === 'symbol';\r\nconst isObject = (val) => val !== null && typeof val === 'object';\r\nconst isPromise = (val) => {\r\n    return isObject(val) && isFunction(val.then) && isFunction(val.catch);\r\n};\r\nconst objectToString = Object.prototype.toString;\r\nconst toTypeString = (value) => objectToString.call(value);\r\nconst toRawType = (value) => {\r\n    // extract \"RawType\" from strings like \"[object RawType]\"\r\n    return toTypeString(value).slice(8, -1);\r\n};\r\nconst isPlainObject = (val) => toTypeString(val) === '[object Object]';\r\nconst isIntegerKey = (key) => isString(key) &&\r\n    key !== 'NaN' &&\r\n    key[0] !== '-' &&\r\n    '' + parseInt(key, 10) === key;\r\nconst isReservedProp = /*#__PURE__*/ makeMap(\r\n// the leading comma is intentional so empty string \"\" is also included\r\n',key,ref,ref_for,ref_key,' +\r\n    'onVnodeBeforeMount,onVnodeMounted,' +\r\n    'onVnodeBeforeUpdate,onVnodeUpdated,' +\r\n    'onVnodeBeforeUnmount,onVnodeUnmounted');\r\nconst isBuiltInDirective = /*#__PURE__*/ makeMap('bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo');\r\nconst cacheStringFunction = (fn) => {\r\n    const cache = Object.create(null);\r\n    return ((str) => {\r\n        const hit = cache[str];\r\n        return hit || (cache[str] = fn(str));\r\n    });\r\n};\r\nconst camelizeRE = /-(\\w)/g;\r\n/**\r\n * @private\r\n */\r\nconst camelize = cacheStringFunction((str) => {\r\n    return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\r\n});\r\nconst hyphenateRE = /\\B([A-Z])/g;\r\n/**\r\n * @private\r\n */\r\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, '-$1').toLowerCase());\r\n/**\r\n * @private\r\n */\r\nconst capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));\r\n/**\r\n * @private\r\n */\r\nconst toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);\r\n// compare whether a value has changed, accounting for NaN.\r\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\r\nconst invokeArrayFns = (fns, arg) => {\r\n    for (let i = 0; i < fns.length; i++) {\r\n        fns[i](arg);\r\n    }\r\n};\r\nconst def = (obj, key, value) => {\r\n    Object.defineProperty(obj, key, {\r\n        configurable: true,\r\n        enumerable: false,\r\n        value\r\n    });\r\n};\r\nconst toNumber = (val) => {\r\n    const n = parseFloat(val);\r\n    return isNaN(n) ? val : n;\r\n};\r\nlet _globalThis;\r\nconst getGlobalThis = () => {\r\n    return (_globalThis ||\r\n        (_globalThis =\r\n            typeof globalThis !== 'undefined'\r\n                ? globalThis\r\n                : typeof self !== 'undefined'\r\n                    ? self\r\n                    : typeof window !== 'undefined'\r\n                        ? window\r\n                        : typeof global !== 'undefined'\r\n                            ? global\r\n                            : {}));\r\n};\r\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\r\nfunction genPropsAccessExp(name) {\r\n    return identRE.test(name)\r\n        ? `__props.${name}`\r\n        : `__props[${JSON.stringify(name)}]`;\r\n}\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, camelize, capitalize, def, escapeHtml, escapeHtmlComment, extend, genPropsAccessExp, generateCodeFrame, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownSvgAttr, isMap, isModelListener, isNoUnitNumericStyleProp, isObject, isOn, isPlainObject, isPromise, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, makeMap, normalizeClass, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","import { extend, isArray, isMap, isIntegerKey, hasOwn, isSymbol, isObject, hasChanged, makeMap, capitalize, toRawType, def, isFunction, NOOP } from '@vue/shared';\n\nfunction warn(msg, ...args) {\r\n    console.warn(`[Vue warn] ${msg}`, ...args);\r\n}\n\nlet activeEffectScope;\r\nclass EffectScope {\r\n    constructor(detached = false) {\r\n        /**\r\n         * @internal\r\n         */\r\n        this.active = true;\r\n        /**\r\n         * @internal\r\n         */\r\n        this.effects = [];\r\n        /**\r\n         * @internal\r\n         */\r\n        this.cleanups = [];\r\n        if (!detached && activeEffectScope) {\r\n            this.parent = activeEffectScope;\r\n            this.index =\r\n                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;\r\n        }\r\n    }\r\n    run(fn) {\r\n        if (this.active) {\r\n            const currentEffectScope = activeEffectScope;\r\n            try {\r\n                activeEffectScope = this;\r\n                return fn();\r\n            }\r\n            finally {\r\n                activeEffectScope = currentEffectScope;\r\n            }\r\n        }\r\n        else if ((process.env.NODE_ENV !== 'production')) {\r\n            warn(`cannot run an inactive effect scope.`);\r\n        }\r\n    }\r\n    /**\r\n     * This should only be called on non-detached scopes\r\n     * @internal\r\n     */\r\n    on() {\r\n        activeEffectScope = this;\r\n    }\r\n    /**\r\n     * This should only be called on non-detached scopes\r\n     * @internal\r\n     */\r\n    off() {\r\n        activeEffectScope = this.parent;\r\n    }\r\n    stop(fromParent) {\r\n        if (this.active) {\r\n            let i, l;\r\n            for (i = 0, l = this.effects.length; i < l; i++) {\r\n                this.effects[i].stop();\r\n            }\r\n            for (i = 0, l = this.cleanups.length; i < l; i++) {\r\n                this.cleanups[i]();\r\n            }\r\n            if (this.scopes) {\r\n                for (i = 0, l = this.scopes.length; i < l; i++) {\r\n                    this.scopes[i].stop(true);\r\n                }\r\n            }\r\n            // nested scope, dereference from parent to avoid memory leaks\r\n            if (this.parent && !fromParent) {\r\n                // optimized O(1) removal\r\n                const last = this.parent.scopes.pop();\r\n                if (last && last !== this) {\r\n                    this.parent.scopes[this.index] = last;\r\n                    last.index = this.index;\r\n                }\r\n            }\r\n            this.active = false;\r\n        }\r\n    }\r\n}\r\nfunction effectScope(detached) {\r\n    return new EffectScope(detached);\r\n}\r\nfunction recordEffectScope(effect, scope = activeEffectScope) {\r\n    if (scope && scope.active) {\r\n        scope.effects.push(effect);\r\n    }\r\n}\r\nfunction getCurrentScope() {\r\n    return activeEffectScope;\r\n}\r\nfunction onScopeDispose(fn) {\r\n    if (activeEffectScope) {\r\n        activeEffectScope.cleanups.push(fn);\r\n    }\r\n    else if ((process.env.NODE_ENV !== 'production')) {\r\n        warn(`onScopeDispose() is called when there is no active effect scope` +\r\n            ` to be associated with.`);\r\n    }\r\n}\n\nconst createDep = (effects) => {\r\n    const dep = new Set(effects);\r\n    dep.w = 0;\r\n    dep.n = 0;\r\n    return dep;\r\n};\r\nconst wasTracked = (dep) => (dep.w & trackOpBit) > 0;\r\nconst newTracked = (dep) => (dep.n & trackOpBit) > 0;\r\nconst initDepMarkers = ({ deps }) => {\r\n    if (deps.length) {\r\n        for (let i = 0; i < deps.length; i++) {\r\n            deps[i].w |= trackOpBit; // set was tracked\r\n        }\r\n    }\r\n};\r\nconst finalizeDepMarkers = (effect) => {\r\n    const { deps } = effect;\r\n    if (deps.length) {\r\n        let ptr = 0;\r\n        for (let i = 0; i < deps.length; i++) {\r\n            const dep = deps[i];\r\n            if (wasTracked(dep) && !newTracked(dep)) {\r\n                dep.delete(effect);\r\n            }\r\n            else {\r\n                deps[ptr++] = dep;\r\n            }\r\n            // clear bits\r\n            dep.w &= ~trackOpBit;\r\n            dep.n &= ~trackOpBit;\r\n        }\r\n        deps.length = ptr;\r\n    }\r\n};\n\nconst targetMap = new WeakMap();\r\n// The number of effects currently being tracked recursively.\r\nlet effectTrackDepth = 0;\r\nlet trackOpBit = 1;\r\n/**\r\n * The bitwise track markers support at most 30 levels of recursion.\r\n * This value is chosen to enable modern JS engines to use a SMI on all platforms.\r\n * When recursion depth is greater, fall back to using a full cleanup.\r\n */\r\nconst maxMarkerBits = 30;\r\nlet activeEffect;\r\nconst ITERATE_KEY = Symbol((process.env.NODE_ENV !== 'production') ? 'iterate' : '');\r\nconst MAP_KEY_ITERATE_KEY = Symbol((process.env.NODE_ENV !== 'production') ? 'Map key iterate' : '');\r\nclass ReactiveEffect {\r\n    constructor(fn, scheduler = null, scope) {\r\n        this.fn = fn;\r\n        this.scheduler = scheduler;\r\n        this.active = true;\r\n        this.deps = [];\r\n        this.parent = undefined;\r\n        recordEffectScope(this, scope);\r\n    }\r\n    run() {\r\n        if (!this.active) {\r\n            return this.fn();\r\n        }\r\n        let parent = activeEffect;\r\n        let lastShouldTrack = shouldTrack;\r\n        while (parent) {\r\n            if (parent === this) {\r\n                return;\r\n            }\r\n            parent = parent.parent;\r\n        }\r\n        try {\r\n            this.parent = activeEffect;\r\n            activeEffect = this;\r\n            shouldTrack = true;\r\n            trackOpBit = 1 << ++effectTrackDepth;\r\n            if (effectTrackDepth <= maxMarkerBits) {\r\n                initDepMarkers(this);\r\n            }\r\n            else {\r\n                cleanupEffect(this);\r\n            }\r\n            return this.fn();\r\n        }\r\n        finally {\r\n            if (effectTrackDepth <= maxMarkerBits) {\r\n                finalizeDepMarkers(this);\r\n            }\r\n            trackOpBit = 1 << --effectTrackDepth;\r\n            activeEffect = this.parent;\r\n            shouldTrack = lastShouldTrack;\r\n            this.parent = undefined;\r\n            if (this.deferStop) {\r\n                this.stop();\r\n            }\r\n        }\r\n    }\r\n    stop() {\r\n        // stopped while running itself - defer the cleanup\r\n        if (activeEffect === this) {\r\n            this.deferStop = true;\r\n        }\r\n        else if (this.active) {\r\n            cleanupEffect(this);\r\n            if (this.onStop) {\r\n                this.onStop();\r\n            }\r\n            this.active = false;\r\n        }\r\n    }\r\n}\r\nfunction cleanupEffect(effect) {\r\n    const { deps } = effect;\r\n    if (deps.length) {\r\n        for (let i = 0; i < deps.length; i++) {\r\n            deps[i].delete(effect);\r\n        }\r\n        deps.length = 0;\r\n    }\r\n}\r\nfunction effect(fn, options) {\r\n    if (fn.effect) {\r\n        fn = fn.effect.fn;\r\n    }\r\n    const _effect = new ReactiveEffect(fn);\r\n    if (options) {\r\n        extend(_effect, options);\r\n        if (options.scope)\r\n            recordEffectScope(_effect, options.scope);\r\n    }\r\n    if (!options || !options.lazy) {\r\n        _effect.run();\r\n    }\r\n    const runner = _effect.run.bind(_effect);\r\n    runner.effect = _effect;\r\n    return runner;\r\n}\r\nfunction stop(runner) {\r\n    runner.effect.stop();\r\n}\r\nlet shouldTrack = true;\r\nconst trackStack = [];\r\nfunction pauseTracking() {\r\n    trackStack.push(shouldTrack);\r\n    shouldTrack = false;\r\n}\r\nfunction enableTracking() {\r\n    trackStack.push(shouldTrack);\r\n    shouldTrack = true;\r\n}\r\nfunction resetTracking() {\r\n    const last = trackStack.pop();\r\n    shouldTrack = last === undefined ? true : last;\r\n}\r\nfunction track(target, type, key) {\r\n    if (shouldTrack && activeEffect) {\r\n        let depsMap = targetMap.get(target);\r\n        if (!depsMap) {\r\n            targetMap.set(target, (depsMap = new Map()));\r\n        }\r\n        let dep = depsMap.get(key);\r\n        if (!dep) {\r\n            depsMap.set(key, (dep = createDep()));\r\n        }\r\n        const eventInfo = (process.env.NODE_ENV !== 'production')\r\n            ? { effect: activeEffect, target, type, key }\r\n            : undefined;\r\n        trackEffects(dep, eventInfo);\r\n    }\r\n}\r\nfunction trackEffects(dep, debuggerEventExtraInfo) {\r\n    let shouldTrack = false;\r\n    if (effectTrackDepth <= maxMarkerBits) {\r\n        if (!newTracked(dep)) {\r\n            dep.n |= trackOpBit; // set newly tracked\r\n            shouldTrack = !wasTracked(dep);\r\n        }\r\n    }\r\n    else {\r\n        // Full cleanup mode.\r\n        shouldTrack = !dep.has(activeEffect);\r\n    }\r\n    if (shouldTrack) {\r\n        dep.add(activeEffect);\r\n        activeEffect.deps.push(dep);\r\n        if ((process.env.NODE_ENV !== 'production') && activeEffect.onTrack) {\r\n            activeEffect.onTrack(Object.assign({ effect: activeEffect }, debuggerEventExtraInfo));\r\n        }\r\n    }\r\n}\r\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\r\n    const depsMap = targetMap.get(target);\r\n    if (!depsMap) {\r\n        // never been tracked\r\n        return;\r\n    }\r\n    let deps = [];\r\n    if (type === \"clear\" /* CLEAR */) {\r\n        // collection being cleared\r\n        // trigger all effects for target\r\n        deps = [...depsMap.values()];\r\n    }\r\n    else if (key === 'length' && isArray(target)) {\r\n        depsMap.forEach((dep, key) => {\r\n            if (key === 'length' || key >= newValue) {\r\n                deps.push(dep);\r\n            }\r\n        });\r\n    }\r\n    else {\r\n        // schedule runs for SET | ADD | DELETE\r\n        if (key !== void 0) {\r\n            deps.push(depsMap.get(key));\r\n        }\r\n        // also run for iteration key on ADD | DELETE | Map.SET\r\n        switch (type) {\r\n            case \"add\" /* ADD */:\r\n                if (!isArray(target)) {\r\n                    deps.push(depsMap.get(ITERATE_KEY));\r\n                    if (isMap(target)) {\r\n                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\r\n                    }\r\n                }\r\n                else if (isIntegerKey(key)) {\r\n                    // new index added to array -> length changes\r\n                    deps.push(depsMap.get('length'));\r\n                }\r\n                break;\r\n            case \"delete\" /* DELETE */:\r\n                if (!isArray(target)) {\r\n                    deps.push(depsMap.get(ITERATE_KEY));\r\n                    if (isMap(target)) {\r\n                        deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\r\n                    }\r\n                }\r\n                break;\r\n            case \"set\" /* SET */:\r\n                if (isMap(target)) {\r\n                    deps.push(depsMap.get(ITERATE_KEY));\r\n                }\r\n                break;\r\n        }\r\n    }\r\n    const eventInfo = (process.env.NODE_ENV !== 'production')\r\n        ? { target, type, key, newValue, oldValue, oldTarget }\r\n        : undefined;\r\n    if (deps.length === 1) {\r\n        if (deps[0]) {\r\n            if ((process.env.NODE_ENV !== 'production')) {\r\n                triggerEffects(deps[0], eventInfo);\r\n            }\r\n            else {\r\n                triggerEffects(deps[0]);\r\n            }\r\n        }\r\n    }\r\n    else {\r\n        const effects = [];\r\n        for (const dep of deps) {\r\n            if (dep) {\r\n                effects.push(...dep);\r\n            }\r\n        }\r\n        if ((process.env.NODE_ENV !== 'production')) {\r\n            triggerEffects(createDep(effects), eventInfo);\r\n        }\r\n        else {\r\n            triggerEffects(createDep(effects));\r\n        }\r\n    }\r\n}\r\nfunction triggerEffects(dep, debuggerEventExtraInfo) {\r\n    // spread into array for stabilization\r\n    const effects = isArray(dep) ? dep : [...dep];\r\n    for (const effect of effects) {\r\n        if (effect.computed) {\r\n            triggerEffect(effect, debuggerEventExtraInfo);\r\n        }\r\n    }\r\n    for (const effect of effects) {\r\n        if (!effect.computed) {\r\n            triggerEffect(effect, debuggerEventExtraInfo);\r\n        }\r\n    }\r\n}\r\nfunction triggerEffect(effect, debuggerEventExtraInfo) {\r\n    if (effect !== activeEffect || effect.allowRecurse) {\r\n        if ((process.env.NODE_ENV !== 'production') && effect.onTrigger) {\r\n            effect.onTrigger(extend({ effect }, debuggerEventExtraInfo));\r\n        }\r\n        if (effect.scheduler) {\r\n            effect.scheduler();\r\n        }\r\n        else {\r\n            effect.run();\r\n        }\r\n    }\r\n}\n\nconst isNonTrackableKeys = /*#__PURE__*/ makeMap(`__proto__,__v_isRef,__isVue`);\r\nconst builtInSymbols = new Set(\r\n/*#__PURE__*/\r\nObject.getOwnPropertyNames(Symbol)\r\n    // ios10.x Object.getOwnPropertyNames(Symbol) can enumerate 'arguments' and 'caller'\r\n    // but accessing them on Symbol leads to TypeError because Symbol is a strict mode\r\n    // function\r\n    .filter(key => key !== 'arguments' && key !== 'caller')\r\n    .map(key => Symbol[key])\r\n    .filter(isSymbol));\r\nconst get = /*#__PURE__*/ createGetter();\r\nconst shallowGet = /*#__PURE__*/ createGetter(false, true);\r\nconst readonlyGet = /*#__PURE__*/ createGetter(true);\r\nconst shallowReadonlyGet = /*#__PURE__*/ createGetter(true, true);\r\nconst arrayInstrumentations = /*#__PURE__*/ createArrayInstrumentations();\r\nfunction createArrayInstrumentations() {\r\n    const instrumentations = {};\r\n    ['includes', 'indexOf', 'lastIndexOf'].forEach(key => {\r\n        instrumentations[key] = function (...args) {\r\n            const arr = toRaw(this);\r\n            for (let i = 0, l = this.length; i < l; i++) {\r\n                track(arr, \"get\" /* GET */, i + '');\r\n            }\r\n            // we run the method using the original args first (which may be reactive)\r\n            const res = arr[key](...args);\r\n            if (res === -1 || res === false) {\r\n                // if that didn't work, run it again using raw values.\r\n                return arr[key](...args.map(toRaw));\r\n            }\r\n            else {\r\n                return res;\r\n            }\r\n        };\r\n    });\r\n    ['push', 'pop', 'shift', 'unshift', 'splice'].forEach(key => {\r\n        instrumentations[key] = function (...args) {\r\n            pauseTracking();\r\n            const res = toRaw(this)[key].apply(this, args);\r\n            resetTracking();\r\n            return res;\r\n        };\r\n    });\r\n    return instrumentations;\r\n}\r\nfunction createGetter(isReadonly = false, shallow = false) {\r\n    return function get(target, key, receiver) {\r\n        if (key === \"__v_isReactive\" /* IS_REACTIVE */) {\r\n            return !isReadonly;\r\n        }\r\n        else if (key === \"__v_isReadonly\" /* IS_READONLY */) {\r\n            return isReadonly;\r\n        }\r\n        else if (key === \"__v_isShallow\" /* IS_SHALLOW */) {\r\n            return shallow;\r\n        }\r\n        else if (key === \"__v_raw\" /* RAW */ &&\r\n            receiver ===\r\n                (isReadonly\r\n                    ? shallow\r\n                        ? shallowReadonlyMap\r\n                        : readonlyMap\r\n                    : shallow\r\n                        ? shallowReactiveMap\r\n                        : reactiveMap).get(target)) {\r\n            return target;\r\n        }\r\n        const targetIsArray = isArray(target);\r\n        if (!isReadonly && targetIsArray && hasOwn(arrayInstrumentations, key)) {\r\n            return Reflect.get(arrayInstrumentations, key, receiver);\r\n        }\r\n        const res = Reflect.get(target, key, receiver);\r\n        if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\r\n            return res;\r\n        }\r\n        if (!isReadonly) {\r\n            track(target, \"get\" /* GET */, key);\r\n        }\r\n        if (shallow) {\r\n            return res;\r\n        }\r\n        if (isRef(res)) {\r\n            // ref unwrapping - skip unwrap for Array + integer key.\r\n            return targetIsArray && isIntegerKey(key) ? res : res.value;\r\n        }\r\n        if (isObject(res)) {\r\n            // Convert returned value into a proxy as well. we do the isObject check\r\n            // here to avoid invalid value warning. Also need to lazy access readonly\r\n            // and reactive here to avoid circular dependency.\r\n            return isReadonly ? readonly(res) : reactive(res);\r\n        }\r\n        return res;\r\n    };\r\n}\r\nconst set = /*#__PURE__*/ createSetter();\r\nconst shallowSet = /*#__PURE__*/ createSetter(true);\r\nfunction createSetter(shallow = false) {\r\n    return function set(target, key, value, receiver) {\r\n        let oldValue = target[key];\r\n        if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {\r\n            return false;\r\n        }\r\n        if (!shallow && !isReadonly(value)) {\r\n            if (!isShallow(value)) {\r\n                value = toRaw(value);\r\n                oldValue = toRaw(oldValue);\r\n            }\r\n            if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\r\n                oldValue.value = value;\r\n                return true;\r\n            }\r\n        }\r\n        const hadKey = isArray(target) && isIntegerKey(key)\r\n            ? Number(key) < target.length\r\n            : hasOwn(target, key);\r\n        const result = Reflect.set(target, key, value, receiver);\r\n        // don't trigger if target is something up in the prototype chain of original\r\n        if (target === toRaw(receiver)) {\r\n            if (!hadKey) {\r\n                trigger(target, \"add\" /* ADD */, key, value);\r\n            }\r\n            else if (hasChanged(value, oldValue)) {\r\n                trigger(target, \"set\" /* SET */, key, value, oldValue);\r\n            }\r\n        }\r\n        return result;\r\n    };\r\n}\r\nfunction deleteProperty(target, key) {\r\n    const hadKey = hasOwn(target, key);\r\n    const oldValue = target[key];\r\n    const result = Reflect.deleteProperty(target, key);\r\n    if (result && hadKey) {\r\n        trigger(target, \"delete\" /* DELETE */, key, undefined, oldValue);\r\n    }\r\n    return result;\r\n}\r\nfunction has(target, key) {\r\n    const result = Reflect.has(target, key);\r\n    if (!isSymbol(key) || !builtInSymbols.has(key)) {\r\n        track(target, \"has\" /* HAS */, key);\r\n    }\r\n    return result;\r\n}\r\nfunction ownKeys(target) {\r\n    track(target, \"iterate\" /* ITERATE */, isArray(target) ? 'length' : ITERATE_KEY);\r\n    return Reflect.ownKeys(target);\r\n}\r\nconst mutableHandlers = {\r\n    get,\r\n    set,\r\n    deleteProperty,\r\n    has,\r\n    ownKeys\r\n};\r\nconst readonlyHandlers = {\r\n    get: readonlyGet,\r\n    set(target, key) {\r\n        if ((process.env.NODE_ENV !== 'production')) {\r\n            warn(`Set operation on key \"${String(key)}\" failed: target is readonly.`, target);\r\n        }\r\n        return true;\r\n    },\r\n    deleteProperty(target, key) {\r\n        if ((process.env.NODE_ENV !== 'production')) {\r\n            warn(`Delete operation on key \"${String(key)}\" failed: target is readonly.`, target);\r\n        }\r\n        return true;\r\n    }\r\n};\r\nconst shallowReactiveHandlers = /*#__PURE__*/ extend({}, mutableHandlers, {\r\n    get: shallowGet,\r\n    set: shallowSet\r\n});\r\n// Props handlers are special in the sense that it should not unwrap top-level\r\n// refs (in order to allow refs to be explicitly passed down), but should\r\n// retain the reactivity of the normal readonly object.\r\nconst shallowReadonlyHandlers = /*#__PURE__*/ extend({}, readonlyHandlers, {\r\n    get: shallowReadonlyGet\r\n});\n\nconst toShallow = (value) => value;\r\nconst getProto = (v) => Reflect.getPrototypeOf(v);\r\nfunction get$1(target, key, isReadonly = false, isShallow = false) {\r\n    // #1772: readonly(reactive(Map)) should return readonly + reactive version\r\n    // of the value\r\n    target = target[\"__v_raw\" /* RAW */];\r\n    const rawTarget = toRaw(target);\r\n    const rawKey = toRaw(key);\r\n    if (!isReadonly) {\r\n        if (key !== rawKey) {\r\n            track(rawTarget, \"get\" /* GET */, key);\r\n        }\r\n        track(rawTarget, \"get\" /* GET */, rawKey);\r\n    }\r\n    const { has } = getProto(rawTarget);\r\n    const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\r\n    if (has.call(rawTarget, key)) {\r\n        return wrap(target.get(key));\r\n    }\r\n    else if (has.call(rawTarget, rawKey)) {\r\n        return wrap(target.get(rawKey));\r\n    }\r\n    else if (target !== rawTarget) {\r\n        // #3602 readonly(reactive(Map))\r\n        // ensure that the nested reactive `Map` can do tracking for itself\r\n        target.get(key);\r\n    }\r\n}\r\nfunction has$1(key, isReadonly = false) {\r\n    const target = this[\"__v_raw\" /* RAW */];\r\n    const rawTarget = toRaw(target);\r\n    const rawKey = toRaw(key);\r\n    if (!isReadonly) {\r\n        if (key !== rawKey) {\r\n            track(rawTarget, \"has\" /* HAS */, key);\r\n        }\r\n        track(rawTarget, \"has\" /* HAS */, rawKey);\r\n    }\r\n    return key === rawKey\r\n        ? target.has(key)\r\n        : target.has(key) || target.has(rawKey);\r\n}\r\nfunction size(target, isReadonly = false) {\r\n    target = target[\"__v_raw\" /* RAW */];\r\n    !isReadonly && track(toRaw(target), \"iterate\" /* ITERATE */, ITERATE_KEY);\r\n    return Reflect.get(target, 'size', target);\r\n}\r\nfunction add(value) {\r\n    value = toRaw(value);\r\n    const target = toRaw(this);\r\n    const proto = getProto(target);\r\n    const hadKey = proto.has.call(target, value);\r\n    if (!hadKey) {\r\n        target.add(value);\r\n        trigger(target, \"add\" /* ADD */, value, value);\r\n    }\r\n    return this;\r\n}\r\nfunction set$1(key, value) {\r\n    value = toRaw(value);\r\n    const target = toRaw(this);\r\n    const { has, get } = getProto(target);\r\n    let hadKey = has.call(target, key);\r\n    if (!hadKey) {\r\n        key = toRaw(key);\r\n        hadKey = has.call(target, key);\r\n    }\r\n    else if ((process.env.NODE_ENV !== 'production')) {\r\n        checkIdentityKeys(target, has, key);\r\n    }\r\n    const oldValue = get.call(target, key);\r\n    target.set(key, value);\r\n    if (!hadKey) {\r\n        trigger(target, \"add\" /* ADD */, key, value);\r\n    }\r\n    else if (hasChanged(value, oldValue)) {\r\n        trigger(target, \"set\" /* SET */, key, value, oldValue);\r\n    }\r\n    return this;\r\n}\r\nfunction deleteEntry(key) {\r\n    const target = toRaw(this);\r\n    const { has, get } = getProto(target);\r\n    let hadKey = has.call(target, key);\r\n    if (!hadKey) {\r\n        key = toRaw(key);\r\n        hadKey = has.call(target, key);\r\n    }\r\n    else if ((process.env.NODE_ENV !== 'production')) {\r\n        checkIdentityKeys(target, has, key);\r\n    }\r\n    const oldValue = get ? get.call(target, key) : undefined;\r\n    // forward the operation before queueing reactions\r\n    const result = target.delete(key);\r\n    if (hadKey) {\r\n        trigger(target, \"delete\" /* DELETE */, key, undefined, oldValue);\r\n    }\r\n    return result;\r\n}\r\nfunction clear() {\r\n    const target = toRaw(this);\r\n    const hadItems = target.size !== 0;\r\n    const oldTarget = (process.env.NODE_ENV !== 'production')\r\n        ? isMap(target)\r\n            ? new Map(target)\r\n            : new Set(target)\r\n        : undefined;\r\n    // forward the operation before queueing reactions\r\n    const result = target.clear();\r\n    if (hadItems) {\r\n        trigger(target, \"clear\" /* CLEAR */, undefined, undefined, oldTarget);\r\n    }\r\n    return result;\r\n}\r\nfunction createForEach(isReadonly, isShallow) {\r\n    return function forEach(callback, thisArg) {\r\n        const observed = this;\r\n        const target = observed[\"__v_raw\" /* RAW */];\r\n        const rawTarget = toRaw(target);\r\n        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\r\n        !isReadonly && track(rawTarget, \"iterate\" /* ITERATE */, ITERATE_KEY);\r\n        return target.forEach((value, key) => {\r\n            // important: make sure the callback is\r\n            // 1. invoked with the reactive map as `this` and 3rd arg\r\n            // 2. the value received should be a corresponding reactive/readonly.\r\n            return callback.call(thisArg, wrap(value), wrap(key), observed);\r\n        });\r\n    };\r\n}\r\nfunction createIterableMethod(method, isReadonly, isShallow) {\r\n    return function (...args) {\r\n        const target = this[\"__v_raw\" /* RAW */];\r\n        const rawTarget = toRaw(target);\r\n        const targetIsMap = isMap(rawTarget);\r\n        const isPair = method === 'entries' || (method === Symbol.iterator && targetIsMap);\r\n        const isKeyOnly = method === 'keys' && targetIsMap;\r\n        const innerIterator = target[method](...args);\r\n        const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\r\n        !isReadonly &&\r\n            track(rawTarget, \"iterate\" /* ITERATE */, isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);\r\n        // return a wrapped iterator which returns observed versions of the\r\n        // values emitted from the real iterator\r\n        return {\r\n            // iterator protocol\r\n            next() {\r\n                const { value, done } = innerIterator.next();\r\n                return done\r\n                    ? { value, done }\r\n                    : {\r\n                        value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\r\n                        done\r\n                    };\r\n            },\r\n            // iterable protocol\r\n            [Symbol.iterator]() {\r\n                return this;\r\n            }\r\n        };\r\n    };\r\n}\r\nfunction createReadonlyMethod(type) {\r\n    return function (...args) {\r\n        if ((process.env.NODE_ENV !== 'production')) {\r\n            const key = args[0] ? `on key \"${args[0]}\" ` : ``;\r\n            console.warn(`${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this));\r\n        }\r\n        return type === \"delete\" /* DELETE */ ? false : this;\r\n    };\r\n}\r\nfunction createInstrumentations() {\r\n    const mutableInstrumentations = {\r\n        get(key) {\r\n            return get$1(this, key);\r\n        },\r\n        get size() {\r\n            return size(this);\r\n        },\r\n        has: has$1,\r\n        add,\r\n        set: set$1,\r\n        delete: deleteEntry,\r\n        clear,\r\n        forEach: createForEach(false, false)\r\n    };\r\n    const shallowInstrumentations = {\r\n        get(key) {\r\n            return get$1(this, key, false, true);\r\n        },\r\n        get size() {\r\n            return size(this);\r\n        },\r\n        has: has$1,\r\n        add,\r\n        set: set$1,\r\n        delete: deleteEntry,\r\n        clear,\r\n        forEach: createForEach(false, true)\r\n    };\r\n    const readonlyInstrumentations = {\r\n        get(key) {\r\n            return get$1(this, key, true);\r\n        },\r\n        get size() {\r\n            return size(this, true);\r\n        },\r\n        has(key) {\r\n            return has$1.call(this, key, true);\r\n        },\r\n        add: createReadonlyMethod(\"add\" /* ADD */),\r\n        set: createReadonlyMethod(\"set\" /* SET */),\r\n        delete: createReadonlyMethod(\"delete\" /* DELETE */),\r\n        clear: createReadonlyMethod(\"clear\" /* CLEAR */),\r\n        forEach: createForEach(true, false)\r\n    };\r\n    const shallowReadonlyInstrumentations = {\r\n        get(key) {\r\n            return get$1(this, key, true, true);\r\n        },\r\n        get size() {\r\n            return size(this, true);\r\n        },\r\n        has(key) {\r\n            return has$1.call(this, key, true);\r\n        },\r\n        add: createReadonlyMethod(\"add\" /* ADD */),\r\n        set: createReadonlyMethod(\"set\" /* SET */),\r\n        delete: createReadonlyMethod(\"delete\" /* DELETE */),\r\n        clear: createReadonlyMethod(\"clear\" /* CLEAR */),\r\n        forEach: createForEach(true, true)\r\n    };\r\n    const iteratorMethods = ['keys', 'values', 'entries', Symbol.iterator];\r\n    iteratorMethods.forEach(method => {\r\n        mutableInstrumentations[method] = createIterableMethod(method, false, false);\r\n        readonlyInstrumentations[method] = createIterableMethod(method, true, false);\r\n        shallowInstrumentations[method] = createIterableMethod(method, false, true);\r\n        shallowReadonlyInstrumentations[method] = createIterableMethod(method, true, true);\r\n    });\r\n    return [\r\n        mutableInstrumentations,\r\n        readonlyInstrumentations,\r\n        shallowInstrumentations,\r\n        shallowReadonlyInstrumentations\r\n    ];\r\n}\r\nconst [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* #__PURE__*/ createInstrumentations();\r\nfunction createInstrumentationGetter(isReadonly, shallow) {\r\n    const instrumentations = shallow\r\n        ? isReadonly\r\n            ? shallowReadonlyInstrumentations\r\n            : shallowInstrumentations\r\n        : isReadonly\r\n            ? readonlyInstrumentations\r\n            : mutableInstrumentations;\r\n    return (target, key, receiver) => {\r\n        if (key === \"__v_isReactive\" /* IS_REACTIVE */) {\r\n            return !isReadonly;\r\n        }\r\n        else if (key === \"__v_isReadonly\" /* IS_READONLY */) {\r\n            return isReadonly;\r\n        }\r\n        else if (key === \"__v_raw\" /* RAW */) {\r\n            return target;\r\n        }\r\n        return Reflect.get(hasOwn(instrumentations, key) && key in target\r\n            ? instrumentations\r\n            : target, key, receiver);\r\n    };\r\n}\r\nconst mutableCollectionHandlers = {\r\n    get: /*#__PURE__*/ createInstrumentationGetter(false, false)\r\n};\r\nconst shallowCollectionHandlers = {\r\n    get: /*#__PURE__*/ createInstrumentationGetter(false, true)\r\n};\r\nconst readonlyCollectionHandlers = {\r\n    get: /*#__PURE__*/ createInstrumentationGetter(true, false)\r\n};\r\nconst shallowReadonlyCollectionHandlers = {\r\n    get: /*#__PURE__*/ createInstrumentationGetter(true, true)\r\n};\r\nfunction checkIdentityKeys(target, has, key) {\r\n    const rawKey = toRaw(key);\r\n    if (rawKey !== key && has.call(target, rawKey)) {\r\n        const type = toRawType(target);\r\n        console.warn(`Reactive ${type} contains both the raw and reactive ` +\r\n            `versions of the same object${type === `Map` ? ` as keys` : ``}, ` +\r\n            `which can lead to inconsistencies. ` +\r\n            `Avoid differentiating between the raw and reactive versions ` +\r\n            `of an object and only use the reactive version if possible.`);\r\n    }\r\n}\n\nconst reactiveMap = new WeakMap();\r\nconst shallowReactiveMap = new WeakMap();\r\nconst readonlyMap = new WeakMap();\r\nconst shallowReadonlyMap = new WeakMap();\r\nfunction targetTypeMap(rawType) {\r\n    switch (rawType) {\r\n        case 'Object':\r\n        case 'Array':\r\n            return 1 /* COMMON */;\r\n        case 'Map':\r\n        case 'Set':\r\n        case 'WeakMap':\r\n        case 'WeakSet':\r\n            return 2 /* COLLECTION */;\r\n        default:\r\n            return 0 /* INVALID */;\r\n    }\r\n}\r\nfunction getTargetType(value) {\r\n    return value[\"__v_skip\" /* SKIP */] || !Object.isExtensible(value)\r\n        ? 0 /* INVALID */\r\n        : targetTypeMap(toRawType(value));\r\n}\r\nfunction reactive(target) {\r\n    // if trying to observe a readonly proxy, return the readonly version.\r\n    if (isReadonly(target)) {\r\n        return target;\r\n    }\r\n    return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);\r\n}\r\n/**\r\n * Return a shallowly-reactive copy of the original object, where only the root\r\n * level properties are reactive. It also does not auto-unwrap refs (even at the\r\n * root level).\r\n */\r\nfunction shallowReactive(target) {\r\n    return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);\r\n}\r\n/**\r\n * Creates a readonly copy of the original object. Note the returned copy is not\r\n * made reactive, but `readonly` can be called on an already reactive object.\r\n */\r\nfunction readonly(target) {\r\n    return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);\r\n}\r\n/**\r\n * Returns a reactive-copy of the original object, where only the root level\r\n * properties are readonly, and does NOT unwrap refs nor recursively convert\r\n * returned properties.\r\n * This is used for creating the props proxy object for stateful components.\r\n */\r\nfunction shallowReadonly(target) {\r\n    return createReactiveObject(target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap);\r\n}\r\nfunction createReactiveObject(target, isReadonly, baseHandlers, collectionHandlers, proxyMap) {\r\n    if (!isObject(target)) {\r\n        if ((process.env.NODE_ENV !== 'production')) {\r\n            console.warn(`value cannot be made reactive: ${String(target)}`);\r\n        }\r\n        return target;\r\n    }\r\n    // target is already a Proxy, return it.\r\n    // exception: calling readonly() on a reactive object\r\n    if (target[\"__v_raw\" /* RAW */] &&\r\n        !(isReadonly && target[\"__v_isReactive\" /* IS_REACTIVE */])) {\r\n        return target;\r\n    }\r\n    // target already has corresponding Proxy\r\n    const existingProxy = proxyMap.get(target);\r\n    if (existingProxy) {\r\n        return existingProxy;\r\n    }\r\n    // only specific value types can be observed.\r\n    const targetType = getTargetType(target);\r\n    if (targetType === 0 /* INVALID */) {\r\n        return target;\r\n    }\r\n    const proxy = new Proxy(target, targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers);\r\n    proxyMap.set(target, proxy);\r\n    return proxy;\r\n}\r\nfunction isReactive(value) {\r\n    if (isReadonly(value)) {\r\n        return isReactive(value[\"__v_raw\" /* RAW */]);\r\n    }\r\n    return !!(value && value[\"__v_isReactive\" /* IS_REACTIVE */]);\r\n}\r\nfunction isReadonly(value) {\r\n    return !!(value && value[\"__v_isReadonly\" /* IS_READONLY */]);\r\n}\r\nfunction isShallow(value) {\r\n    return !!(value && value[\"__v_isShallow\" /* IS_SHALLOW */]);\r\n}\r\nfunction isProxy(value) {\r\n    return isReactive(value) || isReadonly(value);\r\n}\r\nfunction toRaw(observed) {\r\n    const raw = observed && observed[\"__v_raw\" /* RAW */];\r\n    return raw ? toRaw(raw) : observed;\r\n}\r\nfunction markRaw(value) {\r\n    def(value, \"__v_skip\" /* SKIP */, true);\r\n    return value;\r\n}\r\nconst toReactive = (value) => isObject(value) ? reactive(value) : value;\r\nconst toReadonly = (value) => isObject(value) ? readonly(value) : value;\n\nfunction trackRefValue(ref) {\r\n    if (shouldTrack && activeEffect) {\r\n        ref = toRaw(ref);\r\n        if ((process.env.NODE_ENV !== 'production')) {\r\n            trackEffects(ref.dep || (ref.dep = createDep()), {\r\n                target: ref,\r\n                type: \"get\" /* GET */,\r\n                key: 'value'\r\n            });\r\n        }\r\n        else {\r\n            trackEffects(ref.dep || (ref.dep = createDep()));\r\n        }\r\n    }\r\n}\r\nfunction triggerRefValue(ref, newVal) {\r\n    ref = toRaw(ref);\r\n    if (ref.dep) {\r\n        if ((process.env.NODE_ENV !== 'production')) {\r\n            triggerEffects(ref.dep, {\r\n                target: ref,\r\n                type: \"set\" /* SET */,\r\n                key: 'value',\r\n                newValue: newVal\r\n            });\r\n        }\r\n        else {\r\n            triggerEffects(ref.dep);\r\n        }\r\n    }\r\n}\r\nfunction isRef(r) {\r\n    return !!(r && r.__v_isRef === true);\r\n}\r\nfunction ref(value) {\r\n    return createRef(value, false);\r\n}\r\nfunction shallowRef(value) {\r\n    return createRef(value, true);\r\n}\r\nfunction createRef(rawValue, shallow) {\r\n    if (isRef(rawValue)) {\r\n        return rawValue;\r\n    }\r\n    return new RefImpl(rawValue, shallow);\r\n}\r\nclass RefImpl {\r\n    constructor(value, __v_isShallow) {\r\n        this.__v_isShallow = __v_isShallow;\r\n        this.dep = undefined;\r\n        this.__v_isRef = true;\r\n        this._rawValue = __v_isShallow ? value : toRaw(value);\r\n        this._value = __v_isShallow ? value : toReactive(value);\r\n    }\r\n    get value() {\r\n        trackRefValue(this);\r\n        return this._value;\r\n    }\r\n    set value(newVal) {\r\n        newVal = this.__v_isShallow ? newVal : toRaw(newVal);\r\n        if (hasChanged(newVal, this._rawValue)) {\r\n            this._rawValue = newVal;\r\n            this._value = this.__v_isShallow ? newVal : toReactive(newVal);\r\n            triggerRefValue(this, newVal);\r\n        }\r\n    }\r\n}\r\nfunction triggerRef(ref) {\r\n    triggerRefValue(ref, (process.env.NODE_ENV !== 'production') ? ref.value : void 0);\r\n}\r\nfunction unref(ref) {\r\n    return isRef(ref) ? ref.value : ref;\r\n}\r\nconst shallowUnwrapHandlers = {\r\n    get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\r\n    set: (target, key, value, receiver) => {\r\n        const oldValue = target[key];\r\n        if (isRef(oldValue) && !isRef(value)) {\r\n            oldValue.value = value;\r\n            return true;\r\n        }\r\n        else {\r\n            return Reflect.set(target, key, value, receiver);\r\n        }\r\n    }\r\n};\r\nfunction proxyRefs(objectWithRefs) {\r\n    return isReactive(objectWithRefs)\r\n        ? objectWithRefs\r\n        : new Proxy(objectWithRefs, shallowUnwrapHandlers);\r\n}\r\nclass CustomRefImpl {\r\n    constructor(factory) {\r\n        this.dep = undefined;\r\n        this.__v_isRef = true;\r\n        const { get, set } = factory(() => trackRefValue(this), () => triggerRefValue(this));\r\n        this._get = get;\r\n        this._set = set;\r\n    }\r\n    get value() {\r\n        return this._get();\r\n    }\r\n    set value(newVal) {\r\n        this._set(newVal);\r\n    }\r\n}\r\nfunction customRef(factory) {\r\n    return new CustomRefImpl(factory);\r\n}\r\nfunction toRefs(object) {\r\n    if ((process.env.NODE_ENV !== 'production') && !isProxy(object)) {\r\n        console.warn(`toRefs() expects a reactive object but received a plain one.`);\r\n    }\r\n    const ret = isArray(object) ? new Array(object.length) : {};\r\n    for (const key in object) {\r\n        ret[key] = toRef(object, key);\r\n    }\r\n    return ret;\r\n}\r\nclass ObjectRefImpl {\r\n    constructor(_object, _key, _defaultValue) {\r\n        this._object = _object;\r\n        this._key = _key;\r\n        this._defaultValue = _defaultValue;\r\n        this.__v_isRef = true;\r\n    }\r\n    get value() {\r\n        const val = this._object[this._key];\r\n        return val === undefined ? this._defaultValue : val;\r\n    }\r\n    set value(newVal) {\r\n        this._object[this._key] = newVal;\r\n    }\r\n}\r\nfunction toRef(object, key, defaultValue) {\r\n    const val = object[key];\r\n    return isRef(val)\r\n        ? val\r\n        : new ObjectRefImpl(object, key, defaultValue);\r\n}\n\nclass ComputedRefImpl {\r\n    constructor(getter, _setter, isReadonly, isSSR) {\r\n        this._setter = _setter;\r\n        this.dep = undefined;\r\n        this.__v_isRef = true;\r\n        this._dirty = true;\r\n        this.effect = new ReactiveEffect(getter, () => {\r\n            if (!this._dirty) {\r\n                this._dirty = true;\r\n                triggerRefValue(this);\r\n            }\r\n        });\r\n        this.effect.computed = this;\r\n        this.effect.active = this._cacheable = !isSSR;\r\n        this[\"__v_isReadonly\" /* IS_READONLY */] = isReadonly;\r\n    }\r\n    get value() {\r\n        // the computed ref may get wrapped by other proxies e.g. readonly() #3376\r\n        const self = toRaw(this);\r\n        trackRefValue(self);\r\n        if (self._dirty || !self._cacheable) {\r\n            self._dirty = false;\r\n            self._value = self.effect.run();\r\n        }\r\n        return self._value;\r\n    }\r\n    set value(newValue) {\r\n        this._setter(newValue);\r\n    }\r\n}\r\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\r\n    let getter;\r\n    let setter;\r\n    const onlyGetter = isFunction(getterOrOptions);\r\n    if (onlyGetter) {\r\n        getter = getterOrOptions;\r\n        setter = (process.env.NODE_ENV !== 'production')\r\n            ? () => {\r\n                console.warn('Write operation failed: computed value is readonly');\r\n            }\r\n            : NOOP;\r\n    }\r\n    else {\r\n        getter = getterOrOptions.get;\r\n        setter = getterOrOptions.set;\r\n    }\r\n    const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);\r\n    if ((process.env.NODE_ENV !== 'production') && debugOptions && !isSSR) {\r\n        cRef.effect.onTrack = debugOptions.onTrack;\r\n        cRef.effect.onTrigger = debugOptions.onTrigger;\r\n    }\r\n    return cRef;\r\n}\n\nvar _a;\r\nconst tick = /*#__PURE__*/ Promise.resolve();\r\nconst queue = [];\r\nlet queued = false;\r\nconst scheduler = (fn) => {\r\n    queue.push(fn);\r\n    if (!queued) {\r\n        queued = true;\r\n        tick.then(flush);\r\n    }\r\n};\r\nconst flush = () => {\r\n    for (let i = 0; i < queue.length; i++) {\r\n        queue[i]();\r\n    }\r\n    queue.length = 0;\r\n    queued = false;\r\n};\r\nclass DeferredComputedRefImpl {\r\n    constructor(getter) {\r\n        this.dep = undefined;\r\n        this._dirty = true;\r\n        this.__v_isRef = true;\r\n        this[_a] = true;\r\n        let compareTarget;\r\n        let hasCompareTarget = false;\r\n        let scheduled = false;\r\n        this.effect = new ReactiveEffect(getter, (computedTrigger) => {\r\n            if (this.dep) {\r\n                if (computedTrigger) {\r\n                    compareTarget = this._value;\r\n                    hasCompareTarget = true;\r\n                }\r\n                else if (!scheduled) {\r\n                    const valueToCompare = hasCompareTarget ? compareTarget : this._value;\r\n                    scheduled = true;\r\n                    hasCompareTarget = false;\r\n                    scheduler(() => {\r\n                        if (this.effect.active && this._get() !== valueToCompare) {\r\n                            triggerRefValue(this);\r\n                        }\r\n                        scheduled = false;\r\n                    });\r\n                }\r\n                // chained upstream computeds are notified synchronously to ensure\r\n                // value invalidation in case of sync access; normal effects are\r\n                // deferred to be triggered in scheduler.\r\n                for (const e of this.dep) {\r\n                    if (e.computed instanceof DeferredComputedRefImpl) {\r\n                        e.scheduler(true /* computedTrigger */);\r\n                    }\r\n                }\r\n            }\r\n            this._dirty = true;\r\n        });\r\n        this.effect.computed = this;\r\n    }\r\n    _get() {\r\n        if (this._dirty) {\r\n            this._dirty = false;\r\n            return (this._value = this.effect.run());\r\n        }\r\n        return this._value;\r\n    }\r\n    get value() {\r\n        trackRefValue(this);\r\n        // the computed ref may get wrapped by other proxies e.g. readonly() #3376\r\n        return toRaw(this)._get();\r\n    }\r\n}\r\n_a = \"__v_isReadonly\" /* IS_READONLY */;\r\nfunction deferredComputed(getter) {\r\n    return new DeferredComputedRefImpl(getter);\r\n}\n\nexport { EffectScope, ITERATE_KEY, ReactiveEffect, computed, customRef, deferredComputed, effect, effectScope, enableTracking, getCurrentScope, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, pauseTracking, proxyRefs, reactive, readonly, ref, resetTracking, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, track, trigger, triggerRef, unref };\n","/**\n          * @ag-grid-community/all-modules - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue * @version v30.0.3\n          * @link https://www.ag-grid.com/\n          * @license MIT\n          */\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n/**\n * If value is undefined, null or blank, returns null, otherwise returns the value\n * @param {T} value\n * @returns {T | null}\n */\nfunction makeNull(value) {\n    if (value == null || value === '') {\n        return null;\n    }\n    return value;\n}\nfunction exists(value, allowEmptyString = false) {\n    return value != null && (value !== '' || allowEmptyString);\n}\nfunction missing(value) {\n    return !exists(value);\n}\nfunction missingOrEmpty(value) {\n    return value == null || value.length === 0;\n}\nfunction toStringOrNull(value) {\n    return value != null && typeof value.toString === 'function' ? value.toString() : null;\n}\n// for parsing html attributes, where we want empty strings and missing attributes to be undefined\nfunction attrToNumber(value) {\n    if (value === undefined) {\n        // undefined or empty means ignore the value\n        return;\n    }\n    if (value === null || value === '') {\n        // null or blank means clear\n        return null;\n    }\n    if (typeof value === 'number') {\n        return isNaN(value) ? undefined : value;\n    }\n    const valueParsed = parseInt(value, 10);\n    return isNaN(valueParsed) ? undefined : valueParsed;\n}\n// for parsing html attributes, where we want empty strings and missing attributes to be undefined\nfunction attrToBoolean(value) {\n    if (value === undefined) {\n        // undefined or empty means ignore the value\n        return;\n    }\n    if (value === null || value === '') {\n        // null means clear\n        return false;\n    }\n    if (typeof value === 'boolean') {\n        // if simple boolean, return the boolean\n        return value;\n    }\n    // if equal to the string 'true' (ignoring case) then return true\n    return (/true/i).test(value);\n}\n// for parsing html attributes, where we want empty strings and missing attributes to be undefined\nfunction attrToString(value) {\n    if (value == null || value === '') {\n        return;\n    }\n    return value;\n}\n/** @deprecated */\nfunction referenceCompare(left, right) {\n    if (left == null && right == null) {\n        return true;\n    }\n    if (left == null && right != null) {\n        return false;\n    }\n    if (left != null && right == null) {\n        return false;\n    }\n    return left === right;\n}\nfunction jsonEquals(val1, val2) {\n    const val1Json = val1 ? JSON.stringify(val1) : null;\n    const val2Json = val2 ? JSON.stringify(val2) : null;\n    return val1Json === val2Json;\n}\nfunction defaultComparator(valueA, valueB, accentedCompare = false) {\n    const valueAMissing = valueA == null;\n    const valueBMissing = valueB == null;\n    // this is for aggregations sum and avg, where the result can be a number that is wrapped.\n    // if we didn't do this, then the toString() value would be used, which would result in\n    // the strings getting used instead of the numbers.\n    if (valueA && valueA.toNumber) {\n        valueA = valueA.toNumber();\n    }\n    if (valueB && valueB.toNumber) {\n        valueB = valueB.toNumber();\n    }\n    if (valueAMissing && valueBMissing) {\n        return 0;\n    }\n    if (valueAMissing) {\n        return -1;\n    }\n    if (valueBMissing) {\n        return 1;\n    }\n    function doQuickCompare(a, b) {\n        return (a > b ? 1 : (a < b ? -1 : 0));\n    }\n    if (typeof valueA !== 'string') {\n        return doQuickCompare(valueA, valueB);\n    }\n    if (!accentedCompare) {\n        return doQuickCompare(valueA, valueB);\n    }\n    try {\n        // using local compare also allows chinese comparisons\n        return valueA.localeCompare(valueB);\n    }\n    catch (e) {\n        // if something wrong with localeCompare, eg not supported\n        // by browser, then just continue with the quick one\n        return doQuickCompare(valueA, valueB);\n    }\n}\nfunction values(object) {\n    if (object instanceof Set || object instanceof Map) {\n        const arr = [];\n        object.forEach((value) => arr.push(value));\n        return arr;\n    }\n    return Object.values(object);\n}\n\nvar GenericUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    makeNull: makeNull,\n    exists: exists,\n    missing: missing,\n    missingOrEmpty: missingOrEmpty,\n    toStringOrNull: toStringOrNull,\n    attrToNumber: attrToNumber,\n    attrToBoolean: attrToBoolean,\n    attrToString: attrToString,\n    referenceCompare: referenceCompare,\n    jsonEquals: jsonEquals,\n    defaultComparator: defaultComparator,\n    values: values\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass ColumnKeyCreator {\n    constructor() {\n        this.existingKeys = {};\n    }\n    addExistingKeys(keys) {\n        for (let i = 0; i < keys.length; i++) {\n            this.existingKeys[keys[i]] = true;\n        }\n    }\n    getUniqueKey(colId, colField) {\n        // in case user passed in number for colId, convert to string\n        colId = toStringOrNull(colId);\n        let count = 0;\n        while (true) {\n            let idToTry;\n            if (colId) {\n                idToTry = colId;\n                if (count !== 0) {\n                    idToTry += '_' + count;\n                }\n            }\n            else if (colField) {\n                idToTry = colField;\n                if (count !== 0) {\n                    idToTry += '_' + count;\n                }\n            }\n            else {\n                idToTry = '' + count;\n            }\n            if (!this.existingKeys[idToTry]) {\n                this.existingKeys[idToTry] = true;\n                return idToTry;\n            }\n            count++;\n        }\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nfunction iterateObject(object, callback) {\n    if (object == null) {\n        return;\n    }\n    if (Array.isArray(object)) {\n        object.forEach((value, index) => callback(`${index}`, value));\n    }\n    else {\n        Object.keys(object).forEach(key => callback(key, object[key]));\n    }\n}\nfunction cloneObject(object) {\n    const copy = {};\n    const keys = Object.keys(object);\n    for (let i = 0; i < keys.length; i++) {\n        const key = keys[i];\n        const value = object[key];\n        copy[key] = value;\n    }\n    return copy;\n}\nfunction deepCloneObject(object) {\n    return JSON.parse(JSON.stringify(object));\n}\n// returns copy of an object, doing a deep clone of any objects with that object.\n// this is used for eg creating copies of Column Definitions, where we want to\n// deep copy all objects, but do not want to deep copy functions (eg when user provides\n// a function or class for colDef.cellRenderer)\nfunction deepCloneDefinition(object, keysToSkip) {\n    if (!object) {\n        return;\n    }\n    const obj = object;\n    const res = {};\n    Object.keys(obj).forEach(key => {\n        if (keysToSkip && keysToSkip.indexOf(key) >= 0) {\n            return;\n        }\n        const value = obj[key];\n        // 'simple object' means a bunch of key/value pairs, eg {filter: 'myFilter'}. it does\n        // NOT include the following:\n        // 1) arrays\n        // 2) functions or classes (eg ColumnAPI instance)\n        const sourceIsSimpleObject = isNonNullObject(value) && value.constructor === Object;\n        if (sourceIsSimpleObject) {\n            res[key] = deepCloneDefinition(value);\n        }\n        else {\n            res[key] = value;\n        }\n    });\n    return res;\n}\nfunction getProperty(object, key) {\n    return object[key];\n}\nfunction setProperty(object, key, value) {\n    object[key] = value;\n}\n/**\n * Will copy the specified properties from `source` into the equivalent properties on `target`, ignoring properties with\n * a value of `undefined`.\n */\nfunction copyPropertiesIfPresent(source, target, ...properties) {\n    properties.forEach(p => copyPropertyIfPresent(source, target, p));\n}\n/**\n * Will copy the specified property from `source` into the equivalent property on `target`, unless the property has a\n * value of `undefined`. If a transformation is provided, it will be applied to the value before being set on `target`.\n */\nfunction copyPropertyIfPresent(source, target, property, transform) {\n    const value = getProperty(source, property);\n    if (value !== undefined) {\n        setProperty(target, property, transform ? transform(value) : value);\n    }\n}\nfunction getAllKeysInObjects(objects) {\n    const allValues = {};\n    objects.filter(obj => obj != null).forEach(obj => {\n        Object.keys(obj).forEach(key => allValues[key] = null);\n    });\n    return Object.keys(allValues);\n}\nfunction getAllValuesInObject(obj) {\n    if (!obj) {\n        return [];\n    }\n    const anyObject = Object;\n    if (typeof anyObject.values === 'function') {\n        return anyObject.values(obj);\n    }\n    const ret = [];\n    for (const key in obj) {\n        if (obj.hasOwnProperty(key) && obj.propertyIsEnumerable(key)) {\n            ret.push(obj[key]);\n        }\n    }\n    return ret;\n}\nfunction mergeDeep(dest, source, copyUndefined = true, makeCopyOfSimpleObjects = false) {\n    if (!exists(source)) {\n        return;\n    }\n    iterateObject(source, (key, sourceValue) => {\n        let destValue = dest[key];\n        if (destValue === sourceValue) {\n            return;\n        }\n        // when creating params, we don't want to just copy objects over. otherwise merging ColDefs (eg DefaultColDef\n        // and Column Types) would result in params getting shared between objects.\n        // by putting an empty value into destValue first, it means we end up copying over values from\n        // the source object, rather than just copying in the source object in it's entirety.\n        if (makeCopyOfSimpleObjects) {\n            const objectIsDueToBeCopied = destValue == null && sourceValue != null;\n            if (objectIsDueToBeCopied) {\n                // 'simple object' means a bunch of key/value pairs, eg {filter: 'myFilter'}, as opposed\n                // to a Class instance (such as ColumnAPI instance).\n                const sourceIsSimpleObject = typeof sourceValue === 'object' && sourceValue.constructor === Object;\n                const dontCopy = sourceIsSimpleObject;\n                if (dontCopy) {\n                    destValue = {};\n                    dest[key] = destValue;\n                }\n            }\n        }\n        if (isNonNullObject(sourceValue) && isNonNullObject(destValue) && !Array.isArray(destValue)) {\n            mergeDeep(destValue, sourceValue, copyUndefined, makeCopyOfSimpleObjects);\n        }\n        else if (copyUndefined || sourceValue !== undefined) {\n            dest[key] = sourceValue;\n        }\n    });\n}\nfunction missingOrEmptyObject(value) {\n    return missing(value) || Object.keys(value).length === 0;\n}\nfunction get(source, expression, defaultValue) {\n    if (source == null) {\n        return defaultValue;\n    }\n    const keys = expression.split('.');\n    let objectToRead = source;\n    while (keys.length > 1) {\n        objectToRead = objectToRead[keys.shift()];\n        if (objectToRead == null) {\n            return defaultValue;\n        }\n    }\n    const value = objectToRead[keys[0]];\n    return value != null ? value : defaultValue;\n}\nfunction set(target, expression, value) {\n    if (target == null) {\n        return;\n    }\n    const keys = expression.split('.');\n    let objectToUpdate = target;\n    // Create empty objects\n    keys.forEach((key, i) => {\n        if (!objectToUpdate[key]) {\n            objectToUpdate[key] = {};\n        }\n        if (i < keys.length - 1) {\n            objectToUpdate = objectToUpdate[key];\n        }\n    });\n    objectToUpdate[keys[keys.length - 1]] = value;\n}\nfunction getValueUsingField(data, field, fieldContainsDots) {\n    if (!field || !data) {\n        return;\n    }\n    // if no '.', then it's not a deep value\n    if (!fieldContainsDots) {\n        return data[field];\n    }\n    // otherwise it is a deep value, so need to dig for it\n    const fields = field.split('.');\n    let currentObject = data;\n    for (let i = 0; i < fields.length; i++) {\n        if (currentObject == null) {\n            return undefined;\n        }\n        currentObject = currentObject[fields[i]];\n    }\n    return currentObject;\n}\n// used by ColumnAPI and GridAPI to remove all references, so keeping grid in memory resulting in a\n// memory leak if user is not disposing of the GridAPI or ColumnApi references\nfunction removeAllReferences(obj, objectName) {\n    Object.keys(obj).forEach(key => {\n        const value = obj[key];\n        // we want to replace all the @autowired services, which are objects. any simple types (boolean, string etc)\n        // we don't care about\n        if (typeof value === 'object') {\n            obj[key] = undefined;\n        }\n    });\n    const proto = Object.getPrototypeOf(obj);\n    const properties = {};\n    Object.keys(proto).forEach(key => {\n        const value = proto[key];\n        // leave all basic types - this is needed for GridAPI to leave the \"destroyed: boolean\" attribute alone\n        if (typeof value === 'function') {\n            const func = () => {\n                console.warn(`AG Grid: ${objectName} function ${key}() cannot be called as the grid has been destroyed.\n                     Please don't call grid API functions on destroyed grids - as a matter of fact you shouldn't\n                     be keeping the API reference, your application has a memory leak! Remove the API reference\n                     when the grid is destroyed.`);\n            };\n            properties[key] = { value: func, writable: true };\n        }\n    });\n    Object.defineProperties(obj, properties);\n}\nfunction isNonNullObject(value) {\n    return typeof value === 'object' && value !== null;\n}\n\nvar ObjectUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    iterateObject: iterateObject,\n    cloneObject: cloneObject,\n    deepCloneObject: deepCloneObject,\n    deepCloneDefinition: deepCloneDefinition,\n    getProperty: getProperty,\n    setProperty: setProperty,\n    copyPropertiesIfPresent: copyPropertiesIfPresent,\n    copyPropertyIfPresent: copyPropertyIfPresent,\n    getAllKeysInObjects: getAllKeysInObjects,\n    getAllValuesInObject: getAllValuesInObject,\n    mergeDeep: mergeDeep,\n    missingOrEmptyObject: missingOrEmptyObject,\n    get: get,\n    set: set,\n    getValueUsingField: getValueUsingField,\n    removeAllReferences: removeAllReferences,\n    isNonNullObject: isNonNullObject\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nconst doOnceFlags = {};\n/**\n * If the key was passed before, then doesn't execute the func\n * @param {Function} func\n * @param {string} key\n */\nfunction doOnce(func, key) {\n    if (doOnceFlags[key]) {\n        return;\n    }\n    func();\n    doOnceFlags[key] = true;\n}\nfunction getFunctionName(funcConstructor) {\n    // for every other browser in the world\n    if (funcConstructor.name) {\n        return funcConstructor.name;\n    }\n    // for the pestilence that is ie11\n    const matches = /function\\s+([^\\(]+)/.exec(funcConstructor.toString());\n    return matches && matches.length === 2 ? matches[1].trim() : null;\n}\nfunction isFunction(val) {\n    return !!(val && val.constructor && val.call && val.apply);\n}\nfunction executeInAWhile(funcs) {\n    executeAfter(funcs, 400);\n}\nconst executeNextVMTurnFuncs = [];\nlet executeNextVMTurnPending = false;\nfunction executeNextVMTurn(func) {\n    executeNextVMTurnFuncs.push(func);\n    if (executeNextVMTurnPending) {\n        return;\n    }\n    executeNextVMTurnPending = true;\n    window.setTimeout(() => {\n        const funcsCopy = executeNextVMTurnFuncs.slice();\n        executeNextVMTurnFuncs.length = 0;\n        executeNextVMTurnPending = false;\n        funcsCopy.forEach(func => func());\n    }, 0);\n}\nfunction executeAfter(funcs, milliseconds = 0) {\n    if (funcs.length > 0) {\n        window.setTimeout(() => funcs.forEach(func => func()), milliseconds);\n    }\n}\n/**\n * @param {Function} func The function to be debounced\n * @param {number} delay The time in ms to debounce\n * @return {Function} The debounced function\n */\nfunction debounce(func, delay) {\n    let timeout;\n    // Calling debounce returns a new anonymous function\n    return function (...args) {\n        const context = this;\n        window.clearTimeout(timeout);\n        // Set the new timeout\n        timeout = window.setTimeout(function () {\n            func.apply(context, args);\n        }, delay);\n    };\n}\n/**\n * @param {Function} func The function to be throttled\n * @param {number} wait The time in ms to throttle\n * @return {Function} The throttled function\n */\nfunction throttle(func, wait) {\n    let previousCall = 0;\n    return function (...args) {\n        const context = this;\n        const currentCall = new Date().getTime();\n        if (currentCall - previousCall < wait) {\n            return;\n        }\n        previousCall = currentCall;\n        func.apply(context, args);\n    };\n}\nfunction waitUntil(condition, callback, timeout = 100, timeoutMessage) {\n    const timeStamp = new Date().getTime();\n    let interval = null;\n    let executed = false;\n    const internalCallback = () => {\n        const reachedTimeout = ((new Date().getTime()) - timeStamp) > timeout;\n        if (condition() || reachedTimeout) {\n            callback();\n            executed = true;\n            if (interval != null) {\n                window.clearInterval(interval);\n                interval = null;\n            }\n            if (reachedTimeout && timeoutMessage) {\n                console.warn(timeoutMessage);\n            }\n        }\n    };\n    internalCallback();\n    if (!executed) {\n        interval = window.setInterval(internalCallback, 10);\n    }\n}\nfunction compose(...fns) {\n    return (arg) => fns.reduce((composed, f) => f(composed), arg);\n}\nfunction callIfPresent(func) {\n    if (func) {\n        func();\n    }\n}\nconst noop = () => { return; };\n\nvar FunctionUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    doOnce: doOnce,\n    getFunctionName: getFunctionName,\n    isFunction: isFunction,\n    executeInAWhile: executeInAWhile,\n    executeNextVMTurn: executeNextVMTurn,\n    executeAfter: executeAfter,\n    debounce: debounce,\n    throttle: throttle,\n    waitUntil: waitUntil,\n    compose: compose,\n    callIfPresent: callIfPresent,\n    noop: noop\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar ModuleNames;\n(function (ModuleNames) {\n    ModuleNames[\"CommunityCoreModule\"] = \"@ag-grid-community/core\";\n    // community modules\n    ModuleNames[\"InfiniteRowModelModule\"] = \"@ag-grid-community/infinite-row-model\";\n    ModuleNames[\"ClientSideRowModelModule\"] = \"@ag-grid-community/client-side-row-model\";\n    ModuleNames[\"CsvExportModule\"] = \"@ag-grid-community/csv-export\";\n    // enterprise core - users don't need to import on this, but other enterprise modules do\n    ModuleNames[\"EnterpriseCoreModule\"] = \"@ag-grid-enterprise/core\";\n    // enterprise modules\n    ModuleNames[\"RowGroupingModule\"] = \"@ag-grid-enterprise/row-grouping\";\n    ModuleNames[\"ColumnsToolPanelModule\"] = \"@ag-grid-enterprise/column-tool-panel\";\n    ModuleNames[\"FiltersToolPanelModule\"] = \"@ag-grid-enterprise/filter-tool-panel\";\n    ModuleNames[\"MenuModule\"] = \"@ag-grid-enterprise/menu\";\n    ModuleNames[\"SetFilterModule\"] = \"@ag-grid-enterprise/set-filter\";\n    ModuleNames[\"MultiFilterModule\"] = \"@ag-grid-enterprise/multi-filter\";\n    ModuleNames[\"StatusBarModule\"] = \"@ag-grid-enterprise/status-bar\";\n    ModuleNames[\"SideBarModule\"] = \"@ag-grid-enterprise/side-bar\";\n    ModuleNames[\"RangeSelectionModule\"] = \"@ag-grid-enterprise/range-selection\";\n    ModuleNames[\"MasterDetailModule\"] = \"@ag-grid-enterprise/master-detail\";\n    ModuleNames[\"RichSelectModule\"] = \"@ag-grid-enterprise/rich-select\";\n    ModuleNames[\"GridChartsModule\"] = \"@ag-grid-enterprise/charts\";\n    ModuleNames[\"ViewportRowModelModule\"] = \"@ag-grid-enterprise/viewport-row-model\";\n    ModuleNames[\"ServerSideRowModelModule\"] = \"@ag-grid-enterprise/server-side-row-model\";\n    ModuleNames[\"ExcelExportModule\"] = \"@ag-grid-enterprise/excel-export\";\n    ModuleNames[\"ClipboardModule\"] = \"@ag-grid-enterprise/clipboard\";\n    ModuleNames[\"SparklinesModule\"] = \"@ag-grid-enterprise/sparklines\";\n    // framework wrappers currently don't provide beans, comps etc, so no need to be modules,\n    // however i argue they should be as in theory they 'could' provide beans etc\n    ModuleNames[\"AngularModule\"] = \"@ag-grid-community/angular\";\n    ModuleNames[\"ReactModule\"] = \"@ag-grid-community/react\";\n    ModuleNames[\"VueModule\"] = \"@ag-grid-community/vue\";\n    // and then this, which is definitely not a grid module, as it should not have any dependency\n    // on the grid (ie shouldn't even reference the Module interface)\n    // ChartsModule = \"@ag-grid-community/charts-core\",\n})(ModuleNames || (ModuleNames = {}));\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass ModuleRegistry {\n    static register(module, moduleBased = true, gridId = undefined) {\n        ModuleRegistry.runVersionChecks(module);\n        if (gridId !== undefined) {\n            ModuleRegistry.areGridScopedModules = true;\n            if (ModuleRegistry.gridModulesMap[gridId] === undefined) {\n                ModuleRegistry.gridModulesMap[gridId] = {};\n            }\n            ModuleRegistry.gridModulesMap[gridId][module.moduleName] = module;\n        }\n        else {\n            ModuleRegistry.globalModulesMap[module.moduleName] = module;\n        }\n        ModuleRegistry.setModuleBased(moduleBased);\n    }\n    static unRegisterGridModules(gridId) {\n        delete ModuleRegistry.gridModulesMap[gridId];\n    }\n    static registerModules(modules, moduleBased = true, gridId = undefined) {\n        ModuleRegistry.setModuleBased(moduleBased);\n        if (!modules) {\n            return;\n        }\n        modules.forEach(module => ModuleRegistry.register(module, moduleBased, gridId));\n    }\n    static isValidModuleVersion(module) {\n        const [moduleMajor, moduleMinor] = module.version.split('.') || [];\n        const [currentModuleMajor, currentModuleMinor] = ModuleRegistry.currentModuleVersion.split('.') || [];\n        return moduleMajor === currentModuleMajor && moduleMinor === currentModuleMinor;\n    }\n    static runVersionChecks(module) {\n        if (!ModuleRegistry.currentModuleVersion) {\n            ModuleRegistry.currentModuleVersion = module.version;\n        }\n        if (!module.version) {\n            console.error(`AG Grid: You are using incompatible versions of AG Grid modules. Major and minor versions should always match across modules. '${module.moduleName}' is incompatible. Please update all modules to the same version.`);\n        }\n        else if (!ModuleRegistry.isValidModuleVersion(module)) {\n            console.error(`AG Grid: You are using incompatible versions of AG Grid modules. Major and minor versions should always match across modules. '${module.moduleName}' is version ${module.version} but the other modules are version ${this.currentModuleVersion}. Please update all modules to the same version.`);\n        }\n        if (module.validate) {\n            const result = module.validate();\n            if (!result.isValid) {\n                const errorResult = result;\n                console.error(`AG Grid: ${errorResult.message}`);\n            }\n        }\n    }\n    static setModuleBased(moduleBased) {\n        if (ModuleRegistry.moduleBased === undefined) {\n            ModuleRegistry.moduleBased = moduleBased;\n        }\n        else {\n            if (ModuleRegistry.moduleBased !== moduleBased) {\n                doOnce(() => {\n                    console.warn(`AG Grid: You are mixing modules (i.e. @ag-grid-community/core) and packages (ag-grid-community) - you can only use one or the other of these mechanisms.`);\n                    console.warn('Please see https://www.ag-grid.com/javascript-grid/packages-modules/ for more information.');\n                }, 'ModulePackageCheck');\n            }\n        }\n    }\n    /**\n     * INTERNAL - Set if files are being served from a single UMD bundle to provide accurate enterprise upgrade steps.\n     */\n    static setIsBundled() {\n        ModuleRegistry.isBundled = true;\n    }\n    static assertRegistered(moduleName, reason, gridId) {\n        var _a;\n        if (this.isRegistered(moduleName, gridId)) {\n            return true;\n        }\n        const warningKey = reason + moduleName;\n        let warningMessage;\n        if (ModuleRegistry.isBundled) {\n            {\n                warningMessage =\n                    `AG Grid: unable to use ${reason} as 'ag-grid-enterprise' has not been loaded. Check you are using the Enterprise bundle:\n        \n        <script src=\"https://cdn.jsdelivr.net/npm/ag-grid-enterprise@AG_GRID_VERSION/dist/ag-grid-enterprise.min.js\"></script>\n        \nFor more info see: https://ag-grid.com/javascript-data-grid/getting-started/#getting-started-with-ag-grid-enterprise`;\n            }\n        }\n        else if (ModuleRegistry.moduleBased || ModuleRegistry.moduleBased === undefined) {\n            let modName = (_a = Object.entries(ModuleNames).find(([k, v]) => v === moduleName)) === null || _a === void 0 ? void 0 : _a[0];\n            warningMessage =\n                `AG Grid: unable to use ${reason} as the ${modName} is not registered${ModuleRegistry.areGridScopedModules ? ` for gridId: ${gridId}` : ''}. Check if you have registered the module:\n           \n    import { ModuleRegistry } from '@ag-grid-community/core';\n    import { ${modName} } from '${moduleName}';\n    \n    ModuleRegistry.registerModules([ ${modName} ]);\n\nFor more info see: https://www.ag-grid.com/javascript-grid/modules/`;\n        }\n        else {\n            warningMessage =\n                `AG Grid: unable to use ${reason} as package 'ag-grid-enterprise' has not been imported. Check that you have imported the package:\n            \n    import 'ag-grid-enterprise';\n            \nFor more info see: https://www.ag-grid.com/javascript-grid/packages/`;\n        }\n        doOnce(() => {\n            console.warn(warningMessage);\n        }, warningKey);\n        return false;\n    }\n    static isRegistered(moduleName, gridId) {\n        var _a;\n        return !!ModuleRegistry.globalModulesMap[moduleName] || !!((_a = ModuleRegistry.gridModulesMap[gridId]) === null || _a === void 0 ? void 0 : _a[moduleName]);\n    }\n    static getRegisteredModules(gridId) {\n        return [...values(ModuleRegistry.globalModulesMap), ...values(ModuleRegistry.gridModulesMap[gridId] || {})];\n    }\n    static isPackageBased() {\n        return !ModuleRegistry.moduleBased;\n    }\n}\n// having in a map a) removes duplicates and b) allows fast lookup\nModuleRegistry.globalModulesMap = {};\nModuleRegistry.gridModulesMap = {};\nModuleRegistry.areGridScopedModules = false;\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass Context {\n    constructor(params, logger) {\n        this.beanWrappers = {};\n        this.destroyed = false;\n        if (!params || !params.beanClasses) {\n            return;\n        }\n        this.contextParams = params;\n        this.logger = logger;\n        this.logger.log(\">> creating ag-Application Context\");\n        this.createBeans();\n        const beanInstances = this.getBeanInstances();\n        this.wireBeans(beanInstances);\n        this.logger.log(\">> ag-Application Context ready - component is alive\");\n    }\n    getBeanInstances() {\n        return values(this.beanWrappers).map(beanEntry => beanEntry.beanInstance);\n    }\n    createBean(bean, afterPreCreateCallback) {\n        if (!bean) {\n            throw Error(`Can't wire to bean since it is null`);\n        }\n        this.wireBeans([bean], afterPreCreateCallback);\n        return bean;\n    }\n    wireBeans(beanInstances, afterPreCreateCallback) {\n        this.autoWireBeans(beanInstances);\n        this.methodWireBeans(beanInstances);\n        this.callLifeCycleMethods(beanInstances, 'preConstructMethods');\n        // the callback sets the attributes, so the component has access to attributes\n        // before postConstruct methods in the component are executed\n        if (exists(afterPreCreateCallback)) {\n            beanInstances.forEach(afterPreCreateCallback);\n        }\n        this.callLifeCycleMethods(beanInstances, 'postConstructMethods');\n    }\n    createBeans() {\n        // register all normal beans\n        this.contextParams.beanClasses.forEach(this.createBeanWrapper.bind(this));\n        // register override beans, these will overwrite beans above of same name\n        // instantiate all beans - overridden beans will be left out\n        iterateObject(this.beanWrappers, (key, beanEntry) => {\n            let constructorParamsMeta;\n            if (beanEntry.bean.__agBeanMetaData && beanEntry.bean.__agBeanMetaData.autowireMethods && beanEntry.bean.__agBeanMetaData.autowireMethods.agConstructor) {\n                constructorParamsMeta = beanEntry.bean.__agBeanMetaData.autowireMethods.agConstructor;\n            }\n            const constructorParams = this.getBeansForParameters(constructorParamsMeta, beanEntry.bean.name);\n            const newInstance = new (beanEntry.bean.bind.apply(beanEntry.bean, [null, ...constructorParams]));\n            beanEntry.beanInstance = newInstance;\n        });\n        const createdBeanNames = Object.keys(this.beanWrappers).join(', ');\n        this.logger.log(`created beans: ${createdBeanNames}`);\n    }\n    // tslint:disable-next-line\n    createBeanWrapper(BeanClass) {\n        const metaData = BeanClass.__agBeanMetaData;\n        if (!metaData) {\n            let beanName;\n            if (BeanClass.prototype.constructor) {\n                beanName = getFunctionName(BeanClass.prototype.constructor);\n            }\n            else {\n                beanName = \"\" + BeanClass;\n            }\n            console.error(`Context item ${beanName} is not a bean`);\n            return;\n        }\n        const beanEntry = {\n            bean: BeanClass,\n            beanInstance: null,\n            beanName: metaData.beanName\n        };\n        this.beanWrappers[metaData.beanName] = beanEntry;\n    }\n    autoWireBeans(beanInstances) {\n        beanInstances.forEach(beanInstance => {\n            this.forEachMetaDataInHierarchy(beanInstance, (metaData, beanName) => {\n                const attributes = metaData.agClassAttributes;\n                if (!attributes) {\n                    return;\n                }\n                attributes.forEach((attribute) => {\n                    const otherBean = this.lookupBeanInstance(beanName, attribute.beanName, attribute.optional);\n                    beanInstance[attribute.attributeName] = otherBean;\n                });\n            });\n        });\n    }\n    methodWireBeans(beanInstances) {\n        beanInstances.forEach(beanInstance => {\n            this.forEachMetaDataInHierarchy(beanInstance, (metaData, beanName) => {\n                iterateObject(metaData.autowireMethods, (methodName, wireParams) => {\n                    // skip constructor, as this is dealt with elsewhere\n                    if (methodName === \"agConstructor\") {\n                        return;\n                    }\n                    const initParams = this.getBeansForParameters(wireParams, beanName);\n                    beanInstance[methodName].apply(beanInstance, initParams);\n                });\n            });\n        });\n    }\n    forEachMetaDataInHierarchy(beanInstance, callback) {\n        let prototype = Object.getPrototypeOf(beanInstance);\n        while (prototype != null) {\n            const constructor = prototype.constructor;\n            if (constructor.hasOwnProperty('__agBeanMetaData')) {\n                const metaData = constructor.__agBeanMetaData;\n                const beanName = this.getBeanName(constructor);\n                callback(metaData, beanName);\n            }\n            prototype = Object.getPrototypeOf(prototype);\n        }\n    }\n    getBeanName(constructor) {\n        if (constructor.__agBeanMetaData && constructor.__agBeanMetaData.beanName) {\n            return constructor.__agBeanMetaData.beanName;\n        }\n        const constructorString = constructor.toString();\n        const beanName = constructorString.substring(9, constructorString.indexOf(\"(\"));\n        return beanName;\n    }\n    getBeansForParameters(parameters, beanName) {\n        const beansList = [];\n        if (parameters) {\n            iterateObject(parameters, (paramIndex, otherBeanName) => {\n                const otherBean = this.lookupBeanInstance(beanName, otherBeanName);\n                beansList[Number(paramIndex)] = otherBean;\n            });\n        }\n        return beansList;\n    }\n    lookupBeanInstance(wiringBean, beanName, optional = false) {\n        if (this.destroyed) {\n            this.logger.log(`AG Grid: bean reference ${beanName} is used after the grid is destroyed!`);\n            return null;\n        }\n        if (beanName === \"context\") {\n            return this;\n        }\n        if (this.contextParams.providedBeanInstances && this.contextParams.providedBeanInstances.hasOwnProperty(beanName)) {\n            return this.contextParams.providedBeanInstances[beanName];\n        }\n        const beanEntry = this.beanWrappers[beanName];\n        if (beanEntry) {\n            return beanEntry.beanInstance;\n        }\n        if (!optional) {\n            console.error(`AG Grid: unable to find bean reference ${beanName} while initialising ${wiringBean}`);\n        }\n        return null;\n    }\n    callLifeCycleMethods(beanInstances, lifeCycleMethod) {\n        beanInstances.forEach(beanInstance => this.callLifeCycleMethodsOnBean(beanInstance, lifeCycleMethod));\n    }\n    callLifeCycleMethodsOnBean(beanInstance, lifeCycleMethod, methodToIgnore) {\n        // putting all methods into a map removes duplicates\n        const allMethods = {};\n        // dump methods from each level of the metadata hierarchy\n        this.forEachMetaDataInHierarchy(beanInstance, (metaData) => {\n            const methods = metaData[lifeCycleMethod];\n            if (methods) {\n                methods.forEach(methodName => {\n                    if (methodName != methodToIgnore) {\n                        allMethods[methodName] = true;\n                    }\n                });\n            }\n        });\n        const allMethodsList = Object.keys(allMethods);\n        allMethodsList.forEach(methodName => beanInstance[methodName]());\n    }\n    getBean(name) {\n        return this.lookupBeanInstance(\"getBean\", name, true);\n    }\n    destroy() {\n        if (this.destroyed) {\n            return;\n        }\n        this.logger.log(\">> Shutting down ag-Application Context\");\n        const beanInstances = this.getBeanInstances();\n        this.destroyBeans(beanInstances);\n        this.contextParams.providedBeanInstances = null;\n        ModuleRegistry.unRegisterGridModules(this.contextParams.gridId);\n        this.destroyed = true;\n        this.logger.log(\">> ag-Application Context shut down - component is dead\");\n    }\n    destroyBean(bean) {\n        if (!bean) {\n            return;\n        }\n        this.destroyBeans([bean]);\n    }\n    destroyBeans(beans) {\n        if (!beans) {\n            return [];\n        }\n        beans.forEach(bean => {\n            this.callLifeCycleMethodsOnBean(bean, 'preDestroyMethods', 'destroy');\n            // call destroy() explicitly if it exists\n            const beanAny = bean;\n            if (typeof beanAny.destroy === 'function') {\n                beanAny.destroy();\n            }\n        });\n        return [];\n    }\n    isDestroyed() {\n        return this.destroyed;\n    }\n    getGridId() {\n        return this.contextParams.gridId;\n    }\n}\nfunction PreConstruct(target, methodName, descriptor) {\n    const props = getOrCreateProps$1(target.constructor);\n    if (!props.preConstructMethods) {\n        props.preConstructMethods = [];\n    }\n    props.preConstructMethods.push(methodName);\n}\nfunction PostConstruct(target, methodName, descriptor) {\n    const props = getOrCreateProps$1(target.constructor);\n    if (!props.postConstructMethods) {\n        props.postConstructMethods = [];\n    }\n    props.postConstructMethods.push(methodName);\n}\nfunction PreDestroy(target, methodName, descriptor) {\n    const props = getOrCreateProps$1(target.constructor);\n    if (!props.preDestroyMethods) {\n        props.preDestroyMethods = [];\n    }\n    props.preDestroyMethods.push(methodName);\n}\nfunction Bean(beanName) {\n    return (classConstructor) => {\n        const props = getOrCreateProps$1(classConstructor);\n        props.beanName = beanName;\n    };\n}\nfunction Autowired(name) {\n    return (target, propertyKey, descriptor) => {\n        autowiredFunc(target, name, false, target, propertyKey, null);\n    };\n}\nfunction Optional(name) {\n    return (target, propertyKey, descriptor) => {\n        autowiredFunc(target, name, true, target, propertyKey, null);\n    };\n}\nfunction autowiredFunc(target, name, optional, classPrototype, methodOrAttributeName, index) {\n    if (name === null) {\n        console.error(\"AG Grid: Autowired name should not be null\");\n        return;\n    }\n    if (typeof index === \"number\") {\n        console.error(\"AG Grid: Autowired should be on an attribute\");\n        return;\n    }\n    // it's an attribute on the class\n    const props = getOrCreateProps$1(target.constructor);\n    if (!props.agClassAttributes) {\n        props.agClassAttributes = [];\n    }\n    props.agClassAttributes.push({\n        attributeName: methodOrAttributeName,\n        beanName: name,\n        optional: optional\n    });\n}\nfunction Qualifier(name) {\n    return (classPrototype, methodOrAttributeName, index) => {\n        const constructor = typeof classPrototype == \"function\" ? classPrototype : classPrototype.constructor;\n        let props;\n        if (typeof index === \"number\") {\n            // it's a parameter on a method\n            let methodName;\n            if (methodOrAttributeName) {\n                props = getOrCreateProps$1(constructor);\n                methodName = methodOrAttributeName;\n            }\n            else {\n                props = getOrCreateProps$1(constructor);\n                methodName = \"agConstructor\";\n            }\n            if (!props.autowireMethods) {\n                props.autowireMethods = {};\n            }\n            if (!props.autowireMethods[methodName]) {\n                props.autowireMethods[methodName] = {};\n            }\n            props.autowireMethods[methodName][index] = name;\n        }\n    };\n}\nfunction getOrCreateProps$1(target) {\n    if (!target.hasOwnProperty(\"__agBeanMetaData\")) {\n        target.__agBeanMetaData = {};\n    }\n    return target.__agBeanMetaData;\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2E = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param$a = (undefined && undefined.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nlet EventService = class EventService {\n    constructor() {\n        this.allSyncListeners = new Map();\n        this.allAsyncListeners = new Map();\n        this.globalSyncListeners = new Set();\n        this.globalAsyncListeners = new Set();\n        this.asyncFunctionsQueue = [];\n        this.scheduled = false;\n        // using an object performs better than a Set for the number of different events we have\n        this.firedEvents = {};\n    }\n    // because this class is used both inside the context and outside the context, we do not\n    // use autowired attributes, as that would be confusing, as sometimes the attributes\n    // would be wired, and sometimes not.\n    //\n    // the global event servers used by AG Grid is autowired by the context once, and this\n    // setBeans method gets called once.\n    //\n    // the times when this class is used outside of the context (eg RowNode has an instance of this\n    // class) then it is not a bean, and this setBeans method is not called.\n    setBeans(loggerFactory, gridOptionsService, frameworkOverrides, globalEventListener = null) {\n        this.frameworkOverrides = frameworkOverrides;\n        this.gridOptionsService = gridOptionsService;\n        if (globalEventListener) {\n            const async = gridOptionsService.useAsyncEvents();\n            this.addGlobalListener(globalEventListener, async);\n        }\n    }\n    getListeners(eventType, async, autoCreateListenerCollection) {\n        const listenerMap = async ? this.allAsyncListeners : this.allSyncListeners;\n        let listeners = listenerMap.get(eventType);\n        // Note: 'autoCreateListenerCollection' should only be 'true' if a listener is about to be added. For instance\n        // getListeners() is also called during event dispatch even though no listeners are added. This measure protects\n        // against 'memory bloat' as empty collections will prevent the RowNode's event service from being removed after\n        // the RowComp is destroyed, see noRegisteredListenersExist() below.\n        if (!listeners && autoCreateListenerCollection) {\n            listeners = new Set();\n            listenerMap.set(eventType, listeners);\n        }\n        return listeners;\n    }\n    noRegisteredListenersExist() {\n        return this.allSyncListeners.size === 0 && this.allAsyncListeners.size === 0 &&\n            this.globalSyncListeners.size === 0 && this.globalAsyncListeners.size === 0;\n    }\n    addEventListener(eventType, listener, async = false) {\n        this.getListeners(eventType, async, true).add(listener);\n    }\n    removeEventListener(eventType, listener, async = false) {\n        const listeners = this.getListeners(eventType, async, false);\n        if (!listeners) {\n            return;\n        }\n        listeners.delete(listener);\n        if (listeners.size === 0) {\n            const listenerMap = async ? this.allAsyncListeners : this.allSyncListeners;\n            listenerMap.delete(eventType);\n        }\n    }\n    addGlobalListener(listener, async = false) {\n        (async ? this.globalAsyncListeners : this.globalSyncListeners).add(listener);\n    }\n    removeGlobalListener(listener, async = false) {\n        (async ? this.globalAsyncListeners : this.globalSyncListeners).delete(listener);\n    }\n    dispatchEvent(event) {\n        let agEvent = event;\n        if (this.gridOptionsService) {\n            // Apply common properties to all dispatched events if this event service has had its beans set with gridOptionsService.\n            // Note there are multiple instances of EventService that are used local to components which do not set gridOptionsService.\n            const { api, columnApi, context } = this.gridOptionsService;\n            agEvent.api = api;\n            agEvent.columnApi = columnApi;\n            agEvent.context = context;\n        }\n        this.dispatchToListeners(agEvent, true);\n        this.dispatchToListeners(agEvent, false);\n        this.firedEvents[agEvent.type] = true;\n    }\n    dispatchEventOnce(event) {\n        if (!this.firedEvents[event.type]) {\n            this.dispatchEvent(event);\n        }\n    }\n    dispatchToListeners(event, async) {\n        const eventType = event.type;\n        if (async && 'event' in event) {\n            const browserEvent = event.event;\n            if (browserEvent instanceof Event) {\n                // AG-7893 - Persist composedPath() so that its result can still be accessed by the user asynchronously.\n                // Within an async event handler if they call composedPath() on the event it will always return an empty [].\n                event.eventPath = browserEvent.composedPath();\n            }\n        }\n        const processEventListeners = (listeners) => listeners.forEach(listener => {\n            if (async) {\n                this.dispatchAsync(() => listener(event));\n            }\n            else {\n                listener(event);\n            }\n        });\n        // create a shallow copy to prevent listeners cyclically adding more listeners to capture this event\n        const listeners = new Set(this.getListeners(eventType, async, false));\n        if (listeners) {\n            processEventListeners(listeners);\n        }\n        const globalListeners = new Set(async ? this.globalAsyncListeners : this.globalSyncListeners);\n        globalListeners.forEach(listener => {\n            if (async) {\n                this.dispatchAsync(() => this.frameworkOverrides.dispatchEvent(eventType, () => listener(eventType, event), true));\n            }\n            else {\n                this.frameworkOverrides.dispatchEvent(eventType, () => listener(eventType, event), true);\n            }\n        });\n    }\n    // this gets called inside the grid's thread, for each event that it\n    // wants to set async. the grid then batches the events into one setTimeout()\n    // because setTimeout() is an expensive operation. ideally we would have\n    // each event in it's own setTimeout(), but we batch for performance.\n    dispatchAsync(func) {\n        // add to the queue for executing later in the next VM turn\n        this.asyncFunctionsQueue.push(func);\n        // check if timeout is already scheduled. the first time the grid calls\n        // this within it's thread turn, this should be false, so it will schedule\n        // the 'flush queue' method the first time it comes here. then the flag is\n        // set to 'true' so it will know it's already scheduled for subsequent calls.\n        if (!this.scheduled) {\n            // if not scheduled, schedule one\n            window.setTimeout(this.flushAsyncQueue.bind(this), 0);\n            // mark that it is scheduled\n            this.scheduled = true;\n        }\n    }\n    // this happens in the next VM turn only, and empties the queue of events\n    flushAsyncQueue() {\n        this.scheduled = false;\n        // we take a copy, because the event listener could be using\n        // the grid, which would cause more events, which would be potentially\n        // added to the queue, so safe to take a copy, the new events will\n        // get executed in a later VM turn rather than risk updating the\n        // queue as we are flushing it.\n        const queueCopy = this.asyncFunctionsQueue.slice();\n        this.asyncFunctionsQueue = [];\n        // execute the queue\n        queueCopy.forEach(func => func());\n    }\n};\n__decorate$2E([\n    __param$a(0, Qualifier('loggerFactory')),\n    __param$a(1, Qualifier('gridOptionsService')),\n    __param$a(2, Qualifier('frameworkOverrides')),\n    __param$a(3, Qualifier('globalEventListener'))\n], EventService.prototype, \"setBeans\", null);\nEventService = __decorate$2E([\n    Bean('eventService')\n], EventService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2D = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet instanceIdSequence$4 = 0;\nfunction getNextColInstanceId() {\n    return instanceIdSequence$4++;\n}\n// Wrapper around a user provide column definition. The grid treats the column definition as ready only.\n// This class contains all the runtime information about a column, plus some logic (the definition has no logic).\n// This class implements both interfaces ColumnGroupChild and ProvidedColumnGroupChild as the class can\n// appear as a child of either the original tree or the displayed tree. However the relevant group classes\n// for each type only implements one, as each group can only appear in it's associated tree (eg ProvidedColumnGroup\n// can only appear in OriginalColumn tree).\nclass Column {\n    constructor(colDef, userProvidedColDef, colId, primary) {\n        // used by React (and possibly other frameworks) as key for rendering. also used to\n        // identify old vs new columns for destroying cols when no longer used.\n        this.instanceId = getNextColInstanceId();\n        // The measured height of this column's header when autoHeaderHeight is enabled\n        this.autoHeaderHeight = null;\n        this.moving = false;\n        this.menuVisible = false;\n        this.filterActive = false;\n        this.eventService = new EventService();\n        this.tooltipEnabled = false;\n        this.rowGroupActive = false;\n        this.pivotActive = false;\n        this.aggregationActive = false;\n        this.colDef = colDef;\n        this.userProvidedColDef = userProvidedColDef;\n        this.colId = colId;\n        this.primary = primary;\n        this.setState(colDef);\n    }\n    getInstanceId() {\n        return this.instanceId;\n    }\n    setState(colDef) {\n        // sort\n        if (colDef.sort !== undefined) {\n            if (colDef.sort === 'asc' || colDef.sort === 'desc') {\n                this.sort = colDef.sort;\n            }\n        }\n        else {\n            if (colDef.initialSort === 'asc' || colDef.initialSort === 'desc') {\n                this.sort = colDef.initialSort;\n            }\n        }\n        // sortIndex\n        const sortIndex = attrToNumber(colDef.sortIndex);\n        const initialSortIndex = attrToNumber(colDef.initialSortIndex);\n        if (sortIndex !== undefined) {\n            if (sortIndex !== null) {\n                this.sortIndex = sortIndex;\n            }\n        }\n        else {\n            if (initialSortIndex !== null) {\n                this.sortIndex = initialSortIndex;\n            }\n        }\n        // hide\n        const hide = attrToBoolean(colDef.hide);\n        const initialHide = attrToBoolean(colDef.initialHide);\n        if (hide !== undefined) {\n            this.visible = !hide;\n        }\n        else {\n            this.visible = !initialHide;\n        }\n        // pinned\n        if (colDef.pinned !== undefined) {\n            this.setPinned(colDef.pinned);\n        }\n        else {\n            this.setPinned(colDef.initialPinned);\n        }\n        // flex\n        const flex = attrToNumber(colDef.flex);\n        const initialFlex = attrToNumber(colDef.initialFlex);\n        if (flex !== undefined) {\n            this.flex = flex;\n        }\n        else if (initialFlex !== undefined) {\n            this.flex = initialFlex;\n        }\n    }\n    // gets called when user provides an alternative colDef, eg\n    setColDef(colDef, userProvidedColDef) {\n        this.colDef = colDef;\n        this.userProvidedColDef = userProvidedColDef;\n        this.initMinAndMaxWidths();\n        this.initDotNotation();\n        this.eventService.dispatchEvent(this.createColumnEvent('colDefChanged', \"api\"));\n    }\n    /**\n     * Returns the column definition provided by the application.\n     * This may not be correct, as items can be superseded by default column options.\n     * However it's useful for comparison, eg to know which application column definition matches that column.\n     */\n    getUserProvidedColDef() {\n        return this.userProvidedColDef;\n    }\n    setParent(parent) {\n        this.parent = parent;\n    }\n    /** Returns the parent column group, if column grouping is active. */\n    getParent() {\n        return this.parent;\n    }\n    setOriginalParent(originalParent) {\n        this.originalParent = originalParent;\n    }\n    getOriginalParent() {\n        return this.originalParent;\n    }\n    // this is done after constructor as it uses gridOptionsService\n    initialise() {\n        this.initMinAndMaxWidths();\n        this.resetActualWidth('gridInitializing');\n        this.initDotNotation();\n        this.initTooltip();\n        this.validate();\n    }\n    initDotNotation() {\n        const suppressDotNotation = this.gridOptionsService.is('suppressFieldDotNotation');\n        this.fieldContainsDots = exists(this.colDef.field) && this.colDef.field.indexOf('.') >= 0 && !suppressDotNotation;\n        this.tooltipFieldContainsDots = exists(this.colDef.tooltipField) && this.colDef.tooltipField.indexOf('.') >= 0 && !suppressDotNotation;\n    }\n    initMinAndMaxWidths() {\n        const colDef = this.colDef;\n        this.minWidth = this.columnUtils.calculateColMinWidth(colDef);\n        this.maxWidth = this.columnUtils.calculateColMaxWidth(colDef);\n    }\n    initTooltip() {\n        this.tooltipEnabled = exists(this.colDef.tooltipField) ||\n            exists(this.colDef.tooltipValueGetter) ||\n            exists(this.colDef.tooltipComponent);\n    }\n    resetActualWidth(source = 'api') {\n        const initialWidth = this.columnUtils.calculateColInitialWidth(this.colDef);\n        this.setActualWidth(initialWidth, source, true);\n    }\n    isEmptyGroup() {\n        return false;\n    }\n    isRowGroupDisplayed(colId) {\n        if (missing(this.colDef) || missing(this.colDef.showRowGroup)) {\n            return false;\n        }\n        const showingAllGroups = this.colDef.showRowGroup === true;\n        const showingThisGroup = this.colDef.showRowGroup === colId;\n        return showingAllGroups || showingThisGroup;\n    }\n    /** Returns `true` if column is a primary column, `false` if secondary. Secondary columns are used for pivoting. */\n    isPrimary() {\n        return this.primary;\n    }\n    /** Returns `true` if column filtering is allowed. */\n    isFilterAllowed() {\n        // filter defined means it's a string, class or true.\n        // if its false, null or undefined then it's false.\n        const filterDefined = !!this.colDef.filter;\n        return filterDefined;\n    }\n    isFieldContainsDots() {\n        return this.fieldContainsDots;\n    }\n    isTooltipEnabled() {\n        return this.tooltipEnabled;\n    }\n    isTooltipFieldContainsDots() {\n        return this.tooltipFieldContainsDots;\n    }\n    validate() {\n        const colDefAny = this.colDef;\n        function warnOnce(msg, key, obj) {\n            doOnce(() => {\n                if (obj) {\n                    console.warn(msg, obj);\n                }\n                else {\n                    doOnce(() => console.warn(msg), key);\n                }\n            }, key);\n        }\n        const usingCSRM = this.gridOptionsService.isRowModelType('clientSide');\n        if (usingCSRM && !ModuleRegistry.isRegistered(ModuleNames.RowGroupingModule, this.gridOptionsService.getGridId())) {\n            const rowGroupingItems = ['enableRowGroup', 'rowGroup', 'rowGroupIndex', 'enablePivot', 'enableValue', 'pivot', 'pivotIndex', 'aggFunc'];\n            const itemsUsed = rowGroupingItems.filter(x => exists(colDefAny[x]));\n            if (itemsUsed.length > 0) {\n                ModuleRegistry.assertRegistered(ModuleNames.RowGroupingModule, itemsUsed.map(i => 'colDef.' + i).join(', '), this.gridOptionsService.getGridId());\n            }\n        }\n        if (this.colDef.cellEditor === 'agRichSelect' || this.colDef.cellEditor === 'agRichSelectCellEditor') {\n            ModuleRegistry.assertRegistered(ModuleNames.RichSelectModule, this.colDef.cellEditor, this.gridOptionsService.getGridId());\n        }\n        if (this.gridOptionsService.isTreeData()) {\n            const itemsNotAllowedWithTreeData = ['rowGroup', 'rowGroupIndex', 'pivot', 'pivotIndex'];\n            const itemsUsed = itemsNotAllowedWithTreeData.filter(x => exists(colDefAny[x]));\n            if (itemsUsed.length > 0) {\n                warnOnce(`AG Grid: ${itemsUsed.join()} is not possible when doing tree data, your column definition should not have ${itemsUsed.join()}`, 'TreeDataCannotRowGroup');\n            }\n        }\n        if (exists(colDefAny.menuTabs)) {\n            if (Array.isArray(colDefAny.menuTabs)) {\n                const communityMenuTabs = ['filterMenuTab'];\n                const enterpriseMenuTabs = ['columnsMenuTab', 'generalMenuTab'];\n                const itemsUsed = enterpriseMenuTabs.filter(x => colDefAny.menuTabs.includes(x));\n                if (itemsUsed.length > 0) {\n                    ModuleRegistry.assertRegistered(ModuleNames.MenuModule, `menuTab(s): ${itemsUsed.map(t => `'${t}'`).join()}`, this.gridOptionsService.getGridId());\n                }\n                colDefAny.menuTabs.forEach((tab) => {\n                    if (!enterpriseMenuTabs.includes(tab) && !communityMenuTabs.includes(tab)) {\n                        warnOnce(`AG Grid: '${tab}' is not valid for 'colDef.menuTabs'. Valid values are: ${[...communityMenuTabs, ...enterpriseMenuTabs].map(t => `'${t}'`).join()}.`, 'wrongValue_menuTabs_' + tab);\n                    }\n                });\n            }\n            else {\n                warnOnce(`AG Grid: The typeof 'colDef.menuTabs' should be an array not:` + typeof colDefAny.menuTabs, 'wrongType_menuTabs');\n            }\n        }\n        if (exists(colDefAny.columnsMenuParams)) {\n            ModuleRegistry.assertRegistered(ModuleNames.MenuModule, 'columnsMenuParams', this.gridOptionsService.getGridId());\n        }\n        if (exists(colDefAny.columnsMenuParams)) {\n            ModuleRegistry.assertRegistered(ModuleNames.ColumnsToolPanelModule, 'columnsMenuParams', this.gridOptionsService.getGridId());\n        }\n        if (exists(this.colDef.width) && typeof this.colDef.width !== 'number') {\n            warnOnce('AG Grid: colDef.width should be a number, not ' + typeof this.colDef.width, 'ColumnCheck');\n        }\n        if (exists(colDefAny.columnGroupShow) && colDefAny.columnGroupShow !== 'closed' && colDefAny.columnGroupShow !== 'open') {\n            warnOnce(`AG Grid: '${colDefAny.columnGroupShow}' is not valid for columnGroupShow. Valid values are 'open', 'closed', undefined, null`, 'columnGroupShow_invalid');\n        }\n    }\n    /** Add an event listener to the column. */\n    addEventListener(eventType, listener) {\n        this.eventService.addEventListener(eventType, listener);\n    }\n    /** Remove event listener from the column. */\n    removeEventListener(eventType, listener) {\n        this.eventService.removeEventListener(eventType, listener);\n    }\n    createColumnFunctionCallbackParams(rowNode) {\n        return {\n            node: rowNode,\n            data: rowNode.data,\n            column: this,\n            colDef: this.colDef,\n            context: this.gridOptionsService.context,\n            api: this.gridOptionsService.api,\n            columnApi: this.gridOptionsService.columnApi\n        };\n    }\n    isSuppressNavigable(rowNode) {\n        // if boolean set, then just use it\n        if (typeof this.colDef.suppressNavigable === 'boolean') {\n            return this.colDef.suppressNavigable;\n        }\n        // if function, then call the function to find out\n        if (typeof this.colDef.suppressNavigable === 'function') {\n            const params = this.createColumnFunctionCallbackParams(rowNode);\n            const userFunc = this.colDef.suppressNavigable;\n            return userFunc(params);\n        }\n        return false;\n    }\n    /**\n     * Returns `true` if the cell for this column is editable for the given `rowNode`, otherwise `false`.\n     */\n    isCellEditable(rowNode) {\n        // only allow editing of groups if the user has this option enabled\n        if (rowNode.group && !this.gridOptionsService.is('enableGroupEdit')) {\n            return false;\n        }\n        return this.isColumnFunc(rowNode, this.colDef.editable);\n    }\n    isSuppressFillHandle() {\n        return !!attrToBoolean(this.colDef.suppressFillHandle);\n    }\n    isAutoHeight() {\n        return !!attrToBoolean(this.colDef.autoHeight);\n    }\n    isAutoHeaderHeight() {\n        return !!attrToBoolean(this.colDef.autoHeaderHeight);\n    }\n    isRowDrag(rowNode) {\n        return this.isColumnFunc(rowNode, this.colDef.rowDrag);\n    }\n    isDndSource(rowNode) {\n        return this.isColumnFunc(rowNode, this.colDef.dndSource);\n    }\n    isCellCheckboxSelection(rowNode) {\n        return this.isColumnFunc(rowNode, this.colDef.checkboxSelection);\n    }\n    isSuppressPaste(rowNode) {\n        return this.isColumnFunc(rowNode, this.colDef ? this.colDef.suppressPaste : null);\n    }\n    isResizable() {\n        return !!attrToBoolean(this.colDef.resizable);\n    }\n    isColumnFunc(rowNode, value) {\n        // if boolean set, then just use it\n        if (typeof value === 'boolean') {\n            return value;\n        }\n        // if function, then call the function to find out\n        if (typeof value === 'function') {\n            const params = this.createColumnFunctionCallbackParams(rowNode);\n            const editableFunc = value;\n            return editableFunc(params);\n        }\n        return false;\n    }\n    setMoving(moving, source = \"api\") {\n        this.moving = moving;\n        this.eventService.dispatchEvent(this.createColumnEvent('movingChanged', source));\n    }\n    createColumnEvent(type, source) {\n        return {\n            type: type,\n            column: this,\n            columns: [this],\n            source: source,\n            api: this.gridOptionsService.api,\n            columnApi: this.gridOptionsService.columnApi,\n            context: this.gridOptionsService.context\n        };\n    }\n    isMoving() {\n        return this.moving;\n    }\n    /** If sorting is active, returns the sort direction e.g. `'asc'` or `'desc'`. */\n    getSort() {\n        return this.sort;\n    }\n    setSort(sort, source = \"api\") {\n        if (this.sort !== sort) {\n            this.sort = sort;\n            this.eventService.dispatchEvent(this.createColumnEvent('sortChanged', source));\n        }\n    }\n    setMenuVisible(visible, source = \"api\") {\n        if (this.menuVisible !== visible) {\n            this.menuVisible = visible;\n            this.eventService.dispatchEvent(this.createColumnEvent('menuVisibleChanged', source));\n        }\n    }\n    isMenuVisible() {\n        return this.menuVisible;\n    }\n    isSortAscending() {\n        return this.sort === 'asc';\n    }\n    isSortDescending() {\n        return this.sort === 'desc';\n    }\n    isSortNone() {\n        return missing(this.sort);\n    }\n    isSorting() {\n        return exists(this.sort);\n    }\n    getSortIndex() {\n        return this.sortIndex;\n    }\n    setSortIndex(sortOrder) {\n        this.sortIndex = sortOrder;\n    }\n    setAggFunc(aggFunc) {\n        this.aggFunc = aggFunc;\n    }\n    /** If aggregation is set for the column, returns the aggregation function. */\n    getAggFunc() {\n        return this.aggFunc;\n    }\n    getLeft() {\n        return this.left;\n    }\n    getOldLeft() {\n        return this.oldLeft;\n    }\n    getRight() {\n        return this.left + this.actualWidth;\n    }\n    setLeft(left, source = \"api\") {\n        this.oldLeft = this.left;\n        if (this.left !== left) {\n            this.left = left;\n            this.eventService.dispatchEvent(this.createColumnEvent('leftChanged', source));\n        }\n    }\n    /** Returns `true` if filter is active on the column. */\n    isFilterActive() {\n        return this.filterActive;\n    }\n    // additionalEventAttributes is used by provided simple floating filter, so it can add 'floatingFilter=true' to the event\n    setFilterActive(active, source = \"api\", additionalEventAttributes) {\n        if (this.filterActive !== active) {\n            this.filterActive = active;\n            this.eventService.dispatchEvent(this.createColumnEvent('filterActiveChanged', source));\n        }\n        const filterChangedEvent = this.createColumnEvent('filterChanged', source);\n        if (additionalEventAttributes) {\n            mergeDeep(filterChangedEvent, additionalEventAttributes);\n        }\n        this.eventService.dispatchEvent(filterChangedEvent);\n    }\n    /** Returns `true` when this `Column` is hovered, otherwise `false` */\n    isHovered() {\n        return this.columnHoverService.isHovered(this);\n    }\n    setPinned(pinned) {\n        if (pinned === true || pinned === 'left') {\n            this.pinned = 'left';\n        }\n        else if (pinned === 'right') {\n            this.pinned = 'right';\n        }\n        else {\n            this.pinned = null;\n        }\n    }\n    setFirstRightPinned(firstRightPinned, source = \"api\") {\n        if (this.firstRightPinned !== firstRightPinned) {\n            this.firstRightPinned = firstRightPinned;\n            this.eventService.dispatchEvent(this.createColumnEvent('firstRightPinnedChanged', source));\n        }\n    }\n    setLastLeftPinned(lastLeftPinned, source = \"api\") {\n        if (this.lastLeftPinned !== lastLeftPinned) {\n            this.lastLeftPinned = lastLeftPinned;\n            this.eventService.dispatchEvent(this.createColumnEvent('lastLeftPinnedChanged', source));\n        }\n    }\n    isFirstRightPinned() {\n        return this.firstRightPinned;\n    }\n    isLastLeftPinned() {\n        return this.lastLeftPinned;\n    }\n    isPinned() {\n        return this.pinned === 'left' || this.pinned === 'right';\n    }\n    isPinnedLeft() {\n        return this.pinned === 'left';\n    }\n    isPinnedRight() {\n        return this.pinned === 'right';\n    }\n    getPinned() {\n        return this.pinned;\n    }\n    setVisible(visible, source = \"api\") {\n        const newValue = visible === true;\n        if (this.visible !== newValue) {\n            this.visible = newValue;\n            this.eventService.dispatchEvent(this.createColumnEvent('visibleChanged', source));\n        }\n    }\n    isVisible() {\n        return this.visible;\n    }\n    isSpanHeaderHeight() {\n        const colDef = this.getColDef();\n        return !colDef.suppressSpanHeaderHeight && !colDef.autoHeaderHeight;\n    }\n    /** Returns the column definition for this column.\n     * The column definition will be the result of merging the application provided column definition with any provided defaults\n     * (e.g. `defaultColDef` grid option, or column types.\n     *\n     * Equivalent: `getDefinition` */\n    getColDef() {\n        return this.colDef;\n    }\n    getColumnGroupShow() {\n        return this.colDef.columnGroupShow;\n    }\n    /**\n     * Returns the unique ID for the column.\n     *\n     * Equivalent: `getId`, `getUniqueId` */\n    getColId() {\n        return this.colId;\n    }\n    /**\n     * Returns the unique ID for the column.\n     *\n     * Equivalent: `getColId`, `getUniqueId` */\n    getId() {\n        return this.colId;\n    }\n    /**\n     * Returns the unique ID for the column.\n     *\n     * Equivalent: `getColId`, `getId` */\n    getUniqueId() {\n        return this.colId;\n    }\n    getDefinition() {\n        return this.colDef;\n    }\n    /** Returns the current width of the column. If the column is resized, the actual width is the new size. */\n    getActualWidth() {\n        return this.actualWidth;\n    }\n    getAutoHeaderHeight() {\n        return this.autoHeaderHeight;\n    }\n    /** Returns true if the header height has changed */\n    setAutoHeaderHeight(height) {\n        const changed = height !== this.autoHeaderHeight;\n        this.autoHeaderHeight = height;\n        return changed;\n    }\n    createBaseColDefParams(rowNode) {\n        const params = {\n            node: rowNode,\n            data: rowNode.data,\n            colDef: this.colDef,\n            column: this,\n            api: this.gridOptionsService.api,\n            columnApi: this.gridOptionsService.columnApi,\n            context: this.gridOptionsService.context\n        };\n        return params;\n    }\n    getColSpan(rowNode) {\n        if (missing(this.colDef.colSpan)) {\n            return 1;\n        }\n        const params = this.createBaseColDefParams(rowNode);\n        const colSpan = this.colDef.colSpan(params);\n        // colSpan must be number equal to or greater than 1\n        return Math.max(colSpan, 1);\n    }\n    getRowSpan(rowNode) {\n        if (missing(this.colDef.rowSpan)) {\n            return 1;\n        }\n        const params = this.createBaseColDefParams(rowNode);\n        const rowSpan = this.colDef.rowSpan(params);\n        // rowSpan must be number equal to or greater than 1\n        return Math.max(rowSpan, 1);\n    }\n    setActualWidth(actualWidth, source = \"api\", silent = false) {\n        if (this.minWidth != null) {\n            actualWidth = Math.max(actualWidth, this.minWidth);\n        }\n        if (this.maxWidth != null) {\n            actualWidth = Math.min(actualWidth, this.maxWidth);\n        }\n        if (this.actualWidth !== actualWidth) {\n            // disable flex for this column if it was manually resized.\n            this.actualWidth = actualWidth;\n            if (this.flex && source !== 'flex' && source !== 'gridInitializing') {\n                this.flex = null;\n            }\n            if (!silent) {\n                this.fireColumnWidthChangedEvent(source);\n            }\n        }\n    }\n    fireColumnWidthChangedEvent(source) {\n        this.eventService.dispatchEvent(this.createColumnEvent('widthChanged', source));\n    }\n    isGreaterThanMax(width) {\n        if (this.maxWidth != null) {\n            return width > this.maxWidth;\n        }\n        return false;\n    }\n    getMinWidth() {\n        return this.minWidth;\n    }\n    getMaxWidth() {\n        return this.maxWidth;\n    }\n    getFlex() {\n        return this.flex || 0;\n    }\n    // this method should only be used by the columnModel to\n    // change flex when required by the applyColumnState method.\n    setFlex(flex) {\n        if (this.flex !== flex) {\n            this.flex = flex;\n        }\n    }\n    setMinimum(source = \"api\") {\n        if (exists(this.minWidth)) {\n            this.setActualWidth(this.minWidth, source);\n        }\n    }\n    setRowGroupActive(rowGroup, source = \"api\") {\n        if (this.rowGroupActive !== rowGroup) {\n            this.rowGroupActive = rowGroup;\n            this.eventService.dispatchEvent(this.createColumnEvent('columnRowGroupChanged', source));\n        }\n    }\n    /** Returns `true` if row group is currently active for this column. */\n    isRowGroupActive() {\n        return this.rowGroupActive;\n    }\n    setPivotActive(pivot, source = \"api\") {\n        if (this.pivotActive !== pivot) {\n            this.pivotActive = pivot;\n            this.eventService.dispatchEvent(this.createColumnEvent('columnPivotChanged', source));\n        }\n    }\n    /** Returns `true` if pivot is currently active for this column. */\n    isPivotActive() {\n        return this.pivotActive;\n    }\n    isAnyFunctionActive() {\n        return this.isPivotActive() || this.isRowGroupActive() || this.isValueActive();\n    }\n    isAnyFunctionAllowed() {\n        return this.isAllowPivot() || this.isAllowRowGroup() || this.isAllowValue();\n    }\n    setValueActive(value, source = \"api\") {\n        if (this.aggregationActive !== value) {\n            this.aggregationActive = value;\n            this.eventService.dispatchEvent(this.createColumnEvent('columnValueChanged', source));\n        }\n    }\n    /** Returns `true` if value (aggregation) is currently active for this column. */\n    isValueActive() {\n        return this.aggregationActive;\n    }\n    isAllowPivot() {\n        return this.colDef.enablePivot === true;\n    }\n    isAllowValue() {\n        return this.colDef.enableValue === true;\n    }\n    isAllowRowGroup() {\n        return this.colDef.enableRowGroup === true;\n    }\n    getMenuTabs(defaultValues) {\n        let menuTabs = this.getColDef().menuTabs;\n        if (menuTabs == null) {\n            menuTabs = defaultValues;\n        }\n        return menuTabs;\n    }\n}\n// + renderedHeaderCell - for making header cell transparent when moving\nColumn.EVENT_MOVING_CHANGED = 'movingChanged';\n// + renderedCell - changing left position\nColumn.EVENT_LEFT_CHANGED = 'leftChanged';\n// + renderedCell - changing width\nColumn.EVENT_WIDTH_CHANGED = 'widthChanged';\n// + renderedCell - for changing pinned classes\nColumn.EVENT_LAST_LEFT_PINNED_CHANGED = 'lastLeftPinnedChanged';\nColumn.EVENT_FIRST_RIGHT_PINNED_CHANGED = 'firstRightPinnedChanged';\n// + renderedColumn - for changing visibility icon\nColumn.EVENT_VISIBLE_CHANGED = 'visibleChanged';\n// + every time the filter changes, used in the floating filters\nColumn.EVENT_FILTER_CHANGED = 'filterChanged';\n// + renderedHeaderCell - marks the header with filter icon\nColumn.EVENT_FILTER_ACTIVE_CHANGED = 'filterActiveChanged';\n// + renderedHeaderCell - marks the header with sort icon\nColumn.EVENT_SORT_CHANGED = 'sortChanged';\n// + renderedHeaderCell - marks the header with sort icon\nColumn.EVENT_COL_DEF_CHANGED = 'colDefChanged';\nColumn.EVENT_MENU_VISIBLE_CHANGED = 'menuVisibleChanged';\n// + toolpanel, for gui updates\nColumn.EVENT_ROW_GROUP_CHANGED = 'columnRowGroupChanged';\n// + toolpanel, for gui updates\nColumn.EVENT_PIVOT_CHANGED = 'columnPivotChanged';\n// + toolpanel, for gui updates\nColumn.EVENT_VALUE_CHANGED = 'columnValueChanged';\n__decorate$2D([\n    Autowired('gridOptionsService')\n], Column.prototype, \"gridOptionsService\", void 0);\n__decorate$2D([\n    Autowired('columnUtils')\n], Column.prototype, \"columnUtils\", void 0);\n__decorate$2D([\n    Autowired('columnHoverService')\n], Column.prototype, \"columnHoverService\", void 0);\n__decorate$2D([\n    PostConstruct\n], Column.prototype, \"initialise\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2C = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ProvidedColumnGroup {\n    constructor(colGroupDef, groupId, padding, level) {\n        this.localEventService = new EventService();\n        this.expandable = false;\n        // used by React (and possibly other frameworks) as key for rendering. also used to\n        // identify old vs new columns for destroying cols when no longer used.\n        this.instanceId = getNextColInstanceId();\n        this.expandableListenerRemoveCallback = null;\n        this.colGroupDef = colGroupDef;\n        this.groupId = groupId;\n        this.expanded = !!colGroupDef && !!colGroupDef.openByDefault;\n        this.padding = padding;\n        this.level = level;\n    }\n    destroy() {\n        if (this.expandableListenerRemoveCallback) {\n            this.reset(null, undefined);\n        }\n    }\n    reset(colGroupDef, level) {\n        this.colGroupDef = colGroupDef;\n        this.level = level;\n        this.originalParent = null;\n        if (this.expandableListenerRemoveCallback) {\n            this.expandableListenerRemoveCallback();\n        }\n        // we use ! below, as we want to set the object back to the\n        // way it was when it was first created\n        this.children = undefined;\n        this.expandable = undefined;\n    }\n    getInstanceId() {\n        return this.instanceId;\n    }\n    setOriginalParent(originalParent) {\n        this.originalParent = originalParent;\n    }\n    getOriginalParent() {\n        return this.originalParent;\n    }\n    getLevel() {\n        return this.level;\n    }\n    isVisible() {\n        // return true if at least one child is visible\n        if (this.children) {\n            return this.children.some(child => child.isVisible());\n        }\n        return false;\n    }\n    isPadding() {\n        return this.padding;\n    }\n    setExpanded(expanded) {\n        this.expanded = expanded === undefined ? false : expanded;\n        const event = {\n            type: ProvidedColumnGroup.EVENT_EXPANDED_CHANGED\n        };\n        this.localEventService.dispatchEvent(event);\n    }\n    isExpandable() {\n        return this.expandable;\n    }\n    isExpanded() {\n        return this.expanded;\n    }\n    getGroupId() {\n        return this.groupId;\n    }\n    getId() {\n        return this.getGroupId();\n    }\n    setChildren(children) {\n        this.children = children;\n    }\n    getChildren() {\n        return this.children;\n    }\n    getColGroupDef() {\n        return this.colGroupDef;\n    }\n    getLeafColumns() {\n        const result = [];\n        this.addLeafColumns(result);\n        return result;\n    }\n    addLeafColumns(leafColumns) {\n        if (!this.children) {\n            return;\n        }\n        this.children.forEach((child) => {\n            if (child instanceof Column) {\n                leafColumns.push(child);\n            }\n            else if (child instanceof ProvidedColumnGroup) {\n                child.addLeafColumns(leafColumns);\n            }\n        });\n    }\n    getColumnGroupShow() {\n        const colGroupDef = this.colGroupDef;\n        if (!colGroupDef) {\n            return;\n        }\n        return colGroupDef.columnGroupShow;\n    }\n    // need to check that this group has at least one col showing when both expanded and contracted.\n    // if not, then we don't allow expanding and contracting on this group\n    setupExpandable() {\n        this.setExpandable();\n        if (this.expandableListenerRemoveCallback) {\n            this.expandableListenerRemoveCallback();\n        }\n        const listener = this.onColumnVisibilityChanged.bind(this);\n        this.getLeafColumns().forEach(col => col.addEventListener('visibleChanged', listener));\n        this.expandableListenerRemoveCallback = () => {\n            this.getLeafColumns().forEach(col => col.removeEventListener('visibleChanged', listener));\n            this.expandableListenerRemoveCallback = null;\n        };\n    }\n    setExpandable() {\n        if (this.isPadding()) {\n            return;\n        }\n        // want to make sure the group doesn't disappear when it's open\n        let atLeastOneShowingWhenOpen = false;\n        // want to make sure the group doesn't disappear when it's closed\n        let atLeastOneShowingWhenClosed = false;\n        // want to make sure the group has something to show / hide\n        let atLeastOneChangeable = false;\n        const children = this.findChildrenRemovingPadding();\n        for (let i = 0, j = children.length; i < j; i++) {\n            const abstractColumn = children[i];\n            if (!abstractColumn.isVisible()) {\n                continue;\n            }\n            // if the abstractColumn is a grid generated group, there will be no colDef\n            const headerGroupShow = abstractColumn.getColumnGroupShow();\n            if (headerGroupShow === 'open') {\n                atLeastOneShowingWhenOpen = true;\n                atLeastOneChangeable = true;\n            }\n            else if (headerGroupShow === 'closed') {\n                atLeastOneShowingWhenClosed = true;\n                atLeastOneChangeable = true;\n            }\n            else {\n                atLeastOneShowingWhenOpen = true;\n                atLeastOneShowingWhenClosed = true;\n            }\n        }\n        const expandable = atLeastOneShowingWhenOpen && atLeastOneShowingWhenClosed && atLeastOneChangeable;\n        if (this.expandable !== expandable) {\n            this.expandable = expandable;\n            const event = {\n                type: ProvidedColumnGroup.EVENT_EXPANDABLE_CHANGED\n            };\n            this.localEventService.dispatchEvent(event);\n        }\n    }\n    findChildrenRemovingPadding() {\n        const res = [];\n        const process = (items) => {\n            items.forEach(item => {\n                // if padding, we add this children instead of the padding\n                const skipBecausePadding = item instanceof ProvidedColumnGroup && item.isPadding();\n                if (skipBecausePadding) {\n                    process(item.children);\n                }\n                else {\n                    res.push(item);\n                }\n            });\n        };\n        process(this.children);\n        return res;\n    }\n    onColumnVisibilityChanged() {\n        this.setExpandable();\n    }\n    addEventListener(eventType, listener) {\n        this.localEventService.addEventListener(eventType, listener);\n    }\n    removeEventListener(eventType, listener) {\n        this.localEventService.removeEventListener(eventType, listener);\n    }\n}\nProvidedColumnGroup.EVENT_EXPANDED_CHANGED = 'expandedChanged';\nProvidedColumnGroup.EVENT_EXPANDABLE_CHANGED = 'expandableChanged';\n__decorate$2C([\n    PreDestroy\n], ProvidedColumnGroup.prototype, \"destroy\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nconst DefaultColumnTypes = {\n    numericColumn: {\n        headerClass: 'ag-right-aligned-header',\n        cellClass: 'ag-right-aligned-cell'\n    },\n    rightAligned: {\n        headerClass: 'ag-right-aligned-header',\n        cellClass: 'ag-right-aligned-cell'\n    }\n};\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nfunction firstExistingValue(...values) {\n    for (let i = 0; i < values.length; i++) {\n        const value = values[i];\n        if (exists(value)) {\n            return value;\n        }\n    }\n    return null;\n}\nfunction existsAndNotEmpty(value) {\n    return value != null && value.length > 0;\n}\nfunction last(arr) {\n    if (!arr || !arr.length) {\n        return;\n    }\n    return arr[arr.length - 1];\n}\nfunction areEqual(a, b, comparator) {\n    if (a == null && b == null) {\n        return true;\n    }\n    return a != null &&\n        b != null &&\n        a.length === b.length &&\n        a.every((value, index) => comparator ? comparator(value, b[index]) : b[index] === value);\n}\n/** @deprecated */\nfunction shallowCompare(arr1, arr2) {\n    return areEqual(arr1, arr2);\n}\nfunction sortNumerically(array) {\n    return array.sort((a, b) => a - b);\n}\nfunction removeRepeatsFromArray(array, object) {\n    if (!array) {\n        return;\n    }\n    for (let index = array.length - 2; index >= 0; index--) {\n        const thisOneMatches = array[index] === object;\n        const nextOneMatches = array[index + 1] === object;\n        if (thisOneMatches && nextOneMatches) {\n            array.splice(index + 1, 1);\n        }\n    }\n}\nfunction removeFromArray(array, object) {\n    const index = array.indexOf(object);\n    if (index >= 0) {\n        array.splice(index, 1);\n    }\n}\nfunction removeAllFromArray(array, toRemove) {\n    toRemove.forEach(item => removeFromArray(array, item));\n}\nfunction insertIntoArray(array, object, toIndex) {\n    array.splice(toIndex, 0, object);\n}\nfunction insertArrayIntoArray(dest, src, toIndex) {\n    if (dest == null || src == null) {\n        return;\n    }\n    // put items in backwards, otherwise inserted items end up in reverse order\n    for (let i = src.length - 1; i >= 0; i--) {\n        const item = src[i];\n        insertIntoArray(dest, item, toIndex);\n    }\n}\nfunction moveInArray(array, objectsToMove, toIndex) {\n    // first take out items from the array\n    removeAllFromArray(array, objectsToMove);\n    // now add the objects, in same order as provided to us, that means we start at the end\n    // as the objects will be pushed to the right as they are inserted\n    objectsToMove.slice().reverse().forEach(obj => insertIntoArray(array, obj, toIndex));\n}\nfunction includes(array, value) {\n    return array.indexOf(value) > -1;\n}\nfunction flatten(arrayOfArrays) {\n    return [].concat.apply([], arrayOfArrays);\n}\nfunction pushAll(target, source) {\n    if (source == null || target == null) {\n        return;\n    }\n    source.forEach(value => target.push(value));\n}\nfunction toStrings(array) {\n    return array.map(toStringOrNull);\n}\nfunction forEachReverse(list, action) {\n    if (list == null) {\n        return;\n    }\n    for (let i = list.length - 1; i >= 0; i--) {\n        action(list[i], i);\n    }\n}\n\nvar ArrayUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    firstExistingValue: firstExistingValue,\n    existsAndNotEmpty: existsAndNotEmpty,\n    last: last,\n    areEqual: areEqual,\n    shallowCompare: shallowCompare,\n    sortNumerically: sortNumerically,\n    removeRepeatsFromArray: removeRepeatsFromArray,\n    removeFromArray: removeFromArray,\n    removeAllFromArray: removeAllFromArray,\n    insertIntoArray: insertIntoArray,\n    insertArrayIntoArray: insertArrayIntoArray,\n    moveInArray: moveInArray,\n    includes: includes,\n    flatten: flatten,\n    pushAll: pushAll,\n    toStrings: toStrings,\n    forEachReverse: forEachReverse\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nconst AG_GRID_STOP_PROPAGATION = '__ag_Grid_Stop_Propagation';\nconst PASSIVE_EVENTS$1 = ['touchstart', 'touchend', 'touchmove', 'touchcancel', 'scroll'];\nconst supports = {};\n/**\n * a user once raised an issue - they said that when you opened a popup (eg context menu)\n * and then clicked on a selection checkbox, the popup wasn't closed. this is because the\n * popup listens for clicks on the body, however ag-grid WAS stopping propagation on the\n * checkbox clicks (so the rows didn't pick them up as row selection selection clicks).\n * to get around this, we have a pattern to stop propagation for the purposes of AG Grid,\n * but we still let the event pass back to the body.\n * @param {Event} event\n */\nfunction stopPropagationForAgGrid(event) {\n    event[AG_GRID_STOP_PROPAGATION] = true;\n}\nfunction isStopPropagationForAgGrid(event) {\n    return event[AG_GRID_STOP_PROPAGATION] === true;\n}\nconst isEventSupported = (() => {\n    const tags = {\n        select: 'input',\n        change: 'input',\n        submit: 'form',\n        reset: 'form',\n        error: 'img',\n        load: 'img',\n        abort: 'img'\n    };\n    const eventChecker = (eventName) => {\n        if (typeof supports[eventName] === 'boolean') {\n            return supports[eventName];\n        }\n        const el = document.createElement(tags[eventName] || 'div');\n        eventName = 'on' + eventName;\n        return supports[eventName] = (eventName in el);\n    };\n    return eventChecker;\n})();\nfunction getCtrlForEventTarget(gridOptionsService, eventTarget, type) {\n    let sourceElement = eventTarget;\n    while (sourceElement) {\n        const renderedComp = gridOptionsService.getDomData(sourceElement, type);\n        if (renderedComp) {\n            return renderedComp;\n        }\n        sourceElement = sourceElement.parentElement;\n    }\n    return null;\n}\nfunction isElementInEventPath(element, event) {\n    if (!event || !element) {\n        return false;\n    }\n    return getEventPath(event).indexOf(element) >= 0;\n}\nfunction createEventPath(event) {\n    const res = [];\n    let pointer = event.target;\n    while (pointer) {\n        res.push(pointer);\n        pointer = pointer.parentElement;\n    }\n    return res;\n}\n/**\n * Gets the path for a browser Event or from the target on an AG Grid Event\n * https://developer.mozilla.org/en-US/docs/Web/API/Event\n * @param {Event| { target: EventTarget }} event\n * @returns {EventTarget[]}\n */\nfunction getEventPath(event) {\n    // This can be called with either a browser event or an AG Grid Event that has a target property.\n    const eventNoType = event;\n    if (eventNoType.path) {\n        return eventNoType.path;\n    }\n    if (eventNoType.composedPath) {\n        return eventNoType.composedPath();\n    }\n    // If this is an AG Grid event build the path ourselves\n    return createEventPath(eventNoType);\n}\nfunction addSafePassiveEventListener(frameworkOverrides, eElement, event, listener) {\n    const isPassive = includes(PASSIVE_EVENTS$1, event);\n    const options = isPassive ? { passive: true } : undefined;\n    // this check is here for certain scenarios where I believe the user must be destroying\n    // the grid somehow but continuing for it to be used\n    if (frameworkOverrides && frameworkOverrides.addEventListener) {\n        frameworkOverrides.addEventListener(eElement, event, listener, options);\n    }\n}\n\nvar EventUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    stopPropagationForAgGrid: stopPropagationForAgGrid,\n    isStopPropagationForAgGrid: isStopPropagationForAgGrid,\n    isEventSupported: isEventSupported,\n    getCtrlForEventTarget: getCtrlForEventTarget,\n    isElementInEventPath: isElementInEventPath,\n    createEventPath: createEventPath,\n    getEventPath: getEventPath,\n    addSafePassiveEventListener: addSafePassiveEventListener\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2B = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass BeanStub {\n    constructor() {\n        this.destroyFunctions = [];\n        this.destroyed = false;\n        // for vue 3 - prevents Vue from trying to make this (and obviously any sub classes) from being reactive\n        // prevents vue from creating proxies for created objects and prevents identity related issues\n        this.__v_skip = true;\n        this.isAlive = () => !this.destroyed;\n    }\n    // this was a test constructor niall built, when active, it prints after 5 seconds all beans/components that are\n    // not destroyed. to use, create a new grid, then api.destroy() before 5 seconds. then anything that gets printed\n    // points to a bean or component that was not properly disposed of.\n    // constructor() {\n    //     setTimeout(()=> {\n    //         if (this.isAlive()) {\n    //             let prototype: any = Object.getPrototypeOf(this);\n    //             const constructor: any = prototype.constructor;\n    //             const constructorString = constructor.toString();\n    //             const beanName = constructorString.substring(9, constructorString.indexOf(\"(\"));\n    //             console.log('is alive ' + beanName);\n    //         }\n    //     }, 5000);\n    // }\n    // CellComp and GridComp and override this because they get the FrameworkOverrides from the Beans bean\n    getFrameworkOverrides() {\n        return this.frameworkOverrides;\n    }\n    getContext() {\n        return this.context;\n    }\n    destroy() {\n        // let prototype: any = Object.getPrototypeOf(this);\n        // const constructor: any = prototype.constructor;\n        // const constructorString = constructor.toString();\n        // const beanName = constructorString.substring(9, constructorString.indexOf(\"(\"));\n        this.destroyFunctions.forEach(func => func());\n        this.destroyFunctions.length = 0;\n        this.destroyed = true;\n        this.dispatchEvent({ type: BeanStub.EVENT_DESTROYED });\n    }\n    addEventListener(eventType, listener) {\n        if (!this.localEventService) {\n            this.localEventService = new EventService();\n        }\n        this.localEventService.addEventListener(eventType, listener);\n    }\n    removeEventListener(eventType, listener) {\n        if (this.localEventService) {\n            this.localEventService.removeEventListener(eventType, listener);\n        }\n    }\n    dispatchEventAsync(event) {\n        window.setTimeout(() => this.dispatchEvent(event), 0);\n    }\n    dispatchEvent(event) {\n        if (this.localEventService) {\n            this.localEventService.dispatchEvent(event);\n        }\n    }\n    addManagedListener(object, event, listener) {\n        if (this.destroyed) {\n            return;\n        }\n        if (object instanceof HTMLElement) {\n            addSafePassiveEventListener(this.getFrameworkOverrides(), object, event, listener);\n        }\n        else {\n            object.addEventListener(event, listener);\n        }\n        const destroyFunc = () => {\n            object.removeEventListener(event, listener);\n            this.destroyFunctions = this.destroyFunctions.filter(fn => fn !== destroyFunc);\n            return null;\n        };\n        this.destroyFunctions.push(destroyFunc);\n        return destroyFunc;\n    }\n    addManagedPropertyListener(event, listener) {\n        if (this.destroyed) {\n            return;\n        }\n        this.gridOptionsService.addEventListener(event, listener);\n        const destroyFunc = () => {\n            this.gridOptionsService.removeEventListener(event, listener);\n            this.destroyFunctions = this.destroyFunctions.filter(fn => fn !== destroyFunc);\n            return null;\n        };\n        this.destroyFunctions.push(destroyFunc);\n        return destroyFunc;\n    }\n    addDestroyFunc(func) {\n        // if we are already destroyed, we execute the func now\n        if (this.isAlive()) {\n            this.destroyFunctions.push(func);\n        }\n        else {\n            func();\n        }\n    }\n    createManagedBean(bean, context) {\n        const res = this.createBean(bean, context);\n        this.addDestroyFunc(this.destroyBean.bind(this, bean, context));\n        return res;\n    }\n    createBean(bean, context, afterPreCreateCallback) {\n        return (context || this.getContext()).createBean(bean, afterPreCreateCallback);\n    }\n    destroyBean(bean, context) {\n        return (context || this.getContext()).destroyBean(bean);\n    }\n    destroyBeans(beans, context) {\n        if (beans) {\n            beans.forEach(bean => this.destroyBean(bean, context));\n        }\n        return [];\n    }\n}\nBeanStub.EVENT_DESTROYED = 'destroyed';\n__decorate$2B([\n    Autowired('frameworkOverrides')\n], BeanStub.prototype, \"frameworkOverrides\", void 0);\n__decorate$2B([\n    Autowired('context')\n], BeanStub.prototype, \"context\", void 0);\n__decorate$2B([\n    Autowired('eventService')\n], BeanStub.prototype, \"eventService\", void 0);\n__decorate$2B([\n    Autowired('gridOptionsService')\n], BeanStub.prototype, \"gridOptionsService\", void 0);\n__decorate$2B([\n    Autowired('localeService')\n], BeanStub.prototype, \"localeService\", void 0);\n__decorate$2B([\n    Autowired('environment')\n], BeanStub.prototype, \"environment\", void 0);\n__decorate$2B([\n    PreDestroy\n], BeanStub.prototype, \"destroy\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2A = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param$9 = (undefined && undefined.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\n// takes ColDefs and ColGroupDefs and turns them into Columns and OriginalGroups\nlet ColumnFactory = class ColumnFactory extends BeanStub {\n    setBeans(loggerFactory) {\n        this.logger = loggerFactory.create('ColumnFactory');\n    }\n    createColumnTree(defs, primaryColumns, existingTree) {\n        // column key creator dishes out unique column id's in a deterministic way,\n        // so if we have two grids (that could be master/slave) with same column definitions,\n        // then this ensures the two grids use identical id's.\n        const columnKeyCreator = new ColumnKeyCreator();\n        const { existingCols, existingGroups, existingColKeys } = this.extractExistingTreeData(existingTree);\n        columnKeyCreator.addExistingKeys(existingColKeys);\n        // create am unbalanced tree that maps the provided definitions\n        const unbalancedTree = this.recursivelyCreateColumns(defs, 0, primaryColumns, existingCols, columnKeyCreator, existingGroups);\n        const treeDept = this.findMaxDept(unbalancedTree, 0);\n        this.logger.log('Number of levels for grouped columns is ' + treeDept);\n        const columnTree = this.balanceColumnTree(unbalancedTree, 0, treeDept, columnKeyCreator);\n        const deptFirstCallback = (child, parent) => {\n            if (child instanceof ProvidedColumnGroup) {\n                child.setupExpandable();\n            }\n            // we set the original parents at the end, rather than when we go along, as balancing the tree\n            // adds extra levels into the tree. so we can only set parents when balancing is done.\n            child.setOriginalParent(parent);\n        };\n        this.columnUtils.depthFirstOriginalTreeSearch(null, columnTree, deptFirstCallback);\n        return {\n            columnTree,\n            treeDept\n        };\n    }\n    extractExistingTreeData(existingTree) {\n        const existingCols = [];\n        const existingGroups = [];\n        const existingColKeys = [];\n        if (existingTree) {\n            this.columnUtils.depthFirstOriginalTreeSearch(null, existingTree, (item) => {\n                if (item instanceof ProvidedColumnGroup) {\n                    const group = item;\n                    existingGroups.push(group);\n                }\n                else {\n                    const col = item;\n                    existingColKeys.push(col.getId());\n                    existingCols.push(col);\n                }\n            });\n        }\n        return { existingCols, existingGroups, existingColKeys };\n    }\n    createForAutoGroups(autoGroupCols, gridBalancedTree) {\n        return autoGroupCols.map((col) => this.createAutoGroupTreeItem(gridBalancedTree, col));\n    }\n    createAutoGroupTreeItem(balancedColumnTree, column) {\n        const dept = this.findDepth(balancedColumnTree);\n        // at the end, this will be the top of the tree item.\n        let nextChild = column;\n        for (let i = dept - 1; i >= 0; i--) {\n            const autoGroup = new ProvidedColumnGroup(null, `FAKE_PATH_${column.getId()}}_${i}`, true, i);\n            this.createBean(autoGroup);\n            autoGroup.setChildren([nextChild]);\n            nextChild.setOriginalParent(autoGroup);\n            nextChild = autoGroup;\n        }\n        // at this point, the nextChild is the top most item in the tree\n        return nextChild;\n    }\n    findDepth(balancedColumnTree) {\n        let dept = 0;\n        let pointer = balancedColumnTree;\n        while (pointer && pointer[0] && pointer[0] instanceof ProvidedColumnGroup) {\n            dept++;\n            pointer = pointer[0].getChildren();\n        }\n        return dept;\n    }\n    balanceColumnTree(unbalancedTree, currentDept, columnDept, columnKeyCreator) {\n        const result = [];\n        // go through each child, for groups, recurse a level deeper,\n        // for columns we need to pad\n        for (let i = 0; i < unbalancedTree.length; i++) {\n            const child = unbalancedTree[i];\n            if (child instanceof ProvidedColumnGroup) {\n                // child is a group, all we do is go to the next level of recursion\n                const originalGroup = child;\n                const newChildren = this.balanceColumnTree(originalGroup.getChildren(), currentDept + 1, columnDept, columnKeyCreator);\n                originalGroup.setChildren(newChildren);\n                result.push(originalGroup);\n            }\n            else {\n                // child is a column - so here we add in the padded column groups if needed\n                let firstPaddedGroup;\n                let currentPaddedGroup;\n                // this for loop will NOT run any loops if no padded column groups are needed\n                for (let j = columnDept - 1; j >= currentDept; j--) {\n                    const newColId = columnKeyCreator.getUniqueKey(null, null);\n                    const colGroupDefMerged = this.createMergedColGroupDef(null);\n                    const paddedGroup = new ProvidedColumnGroup(colGroupDefMerged, newColId, true, currentDept);\n                    this.createBean(paddedGroup);\n                    if (currentPaddedGroup) {\n                        currentPaddedGroup.setChildren([paddedGroup]);\n                    }\n                    currentPaddedGroup = paddedGroup;\n                    if (!firstPaddedGroup) {\n                        firstPaddedGroup = currentPaddedGroup;\n                    }\n                }\n                // likewise this if statement will not run if no padded groups\n                if (firstPaddedGroup && currentPaddedGroup) {\n                    result.push(firstPaddedGroup);\n                    const hasGroups = unbalancedTree.some(leaf => leaf instanceof ProvidedColumnGroup);\n                    if (hasGroups) {\n                        currentPaddedGroup.setChildren([child]);\n                        continue;\n                    }\n                    else {\n                        currentPaddedGroup.setChildren(unbalancedTree);\n                        break;\n                    }\n                }\n                result.push(child);\n            }\n        }\n        return result;\n    }\n    findMaxDept(treeChildren, dept) {\n        let maxDeptThisLevel = dept;\n        for (let i = 0; i < treeChildren.length; i++) {\n            const abstractColumn = treeChildren[i];\n            if (abstractColumn instanceof ProvidedColumnGroup) {\n                const originalGroup = abstractColumn;\n                const newDept = this.findMaxDept(originalGroup.getChildren(), dept + 1);\n                if (maxDeptThisLevel < newDept) {\n                    maxDeptThisLevel = newDept;\n                }\n            }\n        }\n        return maxDeptThisLevel;\n    }\n    recursivelyCreateColumns(defs, level, primaryColumns, existingColsCopy, columnKeyCreator, existingGroups) {\n        return (defs || []).map((def) => {\n            if (this.isColumnGroup(def)) {\n                return this.createColumnGroup(primaryColumns, def, level, existingColsCopy, columnKeyCreator, existingGroups);\n            }\n            else {\n                return this.createColumn(primaryColumns, def, existingColsCopy, columnKeyCreator);\n            }\n        });\n    }\n    createColumnGroup(primaryColumns, colGroupDef, level, existingColumns, columnKeyCreator, existingGroups) {\n        const colGroupDefMerged = this.createMergedColGroupDef(colGroupDef);\n        const groupId = columnKeyCreator.getUniqueKey(colGroupDefMerged.groupId || null, null);\n        const providedGroup = new ProvidedColumnGroup(colGroupDefMerged, groupId, false, level);\n        this.createBean(providedGroup);\n        const existingGroup = this.findExistingGroup(colGroupDef, existingGroups);\n        // make sure we remove, so if user provided duplicate id, then we don't have more than\n        // one column instance for colDef with common id\n        if (existingGroup) {\n            removeFromArray(existingGroups, existingGroup);\n        }\n        if (existingGroup && existingGroup.isExpanded()) {\n            providedGroup.setExpanded(true);\n        }\n        const children = this.recursivelyCreateColumns(colGroupDefMerged.children, level + 1, primaryColumns, existingColumns, columnKeyCreator, existingGroups);\n        providedGroup.setChildren(children);\n        return providedGroup;\n    }\n    createMergedColGroupDef(colGroupDef) {\n        const colGroupDefMerged = {};\n        Object.assign(colGroupDefMerged, this.gridOptionsService.get('defaultColGroupDef'));\n        Object.assign(colGroupDefMerged, colGroupDef);\n        return colGroupDefMerged;\n    }\n    createColumn(primaryColumns, colDef, existingColsCopy, columnKeyCreator) {\n        // see if column already exists\n        let column = this.findExistingColumn(colDef, existingColsCopy);\n        // make sure we remove, so if user provided duplicate id, then we don't have more than\n        // one column instance for colDef with common id\n        if (existingColsCopy && column) {\n            removeFromArray(existingColsCopy, column);\n        }\n        if (!column) {\n            // no existing column, need to create one\n            const colId = columnKeyCreator.getUniqueKey(colDef.colId, colDef.field);\n            const colDefMerged = this.mergeColDefs(colDef, colId);\n            column = new Column(colDefMerged, colDef, colId, primaryColumns);\n            this.context.createBean(column);\n        }\n        else {\n            const colDefMerged = this.mergeColDefs(colDef, column.getColId());\n            column.setColDef(colDefMerged, colDef);\n            this.applyColumnState(column, colDefMerged);\n        }\n        return column;\n    }\n    applyColumnState(column, colDef) {\n        // flex\n        const flex = attrToNumber(colDef.flex);\n        if (flex !== undefined) {\n            column.setFlex(flex);\n        }\n        // width - we only set width if column is not flexing\n        const noFlexThisCol = column.getFlex() <= 0;\n        if (noFlexThisCol) {\n            // both null and undefined means we skip, as it's not possible to 'clear' width (a column must have a width)\n            const width = attrToNumber(colDef.width);\n            if (width != null) {\n                column.setActualWidth(width);\n            }\n            else {\n                // otherwise set the width again, in case min or max width has changed,\n                // and width needs to be adjusted.\n                const widthBeforeUpdate = column.getActualWidth();\n                column.setActualWidth(widthBeforeUpdate);\n            }\n        }\n        // sort - anything but undefined will set sort, thus null or empty string will clear the sort\n        if (colDef.sort !== undefined) {\n            if (colDef.sort == 'asc' || colDef.sort == 'desc') {\n                column.setSort(colDef.sort);\n            }\n            else {\n                column.setSort(undefined);\n            }\n        }\n        // sorted at - anything but undefined, thus null will clear the sortIndex\n        const sortIndex = attrToNumber(colDef.sortIndex);\n        if (sortIndex !== undefined) {\n            column.setSortIndex(sortIndex);\n        }\n        // hide - anything but undefined, thus null will clear the hide\n        const hide = attrToBoolean(colDef.hide);\n        if (hide !== undefined) {\n            column.setVisible(!hide);\n        }\n        // pinned - anything but undefined, thus null or empty string will remove pinned\n        if (colDef.pinned !== undefined) {\n            column.setPinned(colDef.pinned);\n        }\n    }\n    findExistingColumn(newColDef, existingColsCopy) {\n        return (existingColsCopy || []).find(existingCol => {\n            const existingColDef = existingCol.getUserProvidedColDef();\n            if (!existingColDef) {\n                return false;\n            }\n            const newHasId = newColDef.colId != null;\n            const newHasField = newColDef.field != null;\n            if (newHasId) {\n                return existingCol.getId() === newColDef.colId;\n            }\n            if (newHasField) {\n                return existingColDef.field === newColDef.field;\n            }\n            // if no id or field present, then try object equivalence.\n            if (existingColDef === newColDef) {\n                return true;\n            }\n            return false;\n        });\n    }\n    findExistingGroup(newGroupDef, existingGroups) {\n        return existingGroups.find(existingGroup => {\n            const existingDef = existingGroup.getColGroupDef();\n            if (!existingDef) {\n                return false;\n            }\n            const newHasId = newGroupDef.groupId != null;\n            if (newHasId) {\n                return existingGroup.getId() === newGroupDef.groupId;\n            }\n            return false;\n        });\n    }\n    mergeColDefs(colDef, colId) {\n        // start with empty merged definition\n        const colDefMerged = {};\n        // merge properties from default column definitions\n        const defaultColDef = this.gridOptionsService.get('defaultColDef');\n        mergeDeep(colDefMerged, defaultColDef, false, true);\n        const columnType = this.dataTypeService.updateColDefAndGetColumnType(colDefMerged, colDef, colId);\n        if (columnType) {\n            this.assignColumnTypes(columnType, colDefMerged);\n        }\n        // merge properties from column definitions\n        mergeDeep(colDefMerged, colDef, false, true);\n        const autoGroupColDef = this.gridOptionsService.get('autoGroupColumnDef');\n        const isSortingCoupled = this.gridOptionsService.isColumnsSortingCoupledToGroup();\n        if (colDef.rowGroup && autoGroupColDef && isSortingCoupled) {\n            // override the sort for row group columns where the autoGroupColDef defines these values.\n            mergeDeep(colDefMerged, { sort: autoGroupColDef.sort, initialSort: autoGroupColDef.initialSort }, false, true);\n        }\n        this.dataTypeService.validateColDef(colDefMerged);\n        return colDefMerged;\n    }\n    assignColumnTypes(typeKeys, colDefMerged) {\n        if (!typeKeys.length) {\n            return;\n        }\n        // merge user defined with default column types\n        const allColumnTypes = Object.assign({}, DefaultColumnTypes);\n        const userTypes = this.gridOptionsService.get('columnTypes') || {};\n        iterateObject(userTypes, (key, value) => {\n            if (key in allColumnTypes) {\n                console.warn(`AG Grid: the column type '${key}' is a default column type and cannot be overridden.`);\n            }\n            else {\n                allColumnTypes[key] = value;\n            }\n        });\n        typeKeys.forEach((t) => {\n            const typeColDef = allColumnTypes[t.trim()];\n            if (typeColDef) {\n                mergeDeep(colDefMerged, typeColDef, false, true);\n            }\n            else {\n                console.warn(\"AG Grid: colDef.type '\" + t + \"' does not correspond to defined gridOptions.columnTypes\");\n            }\n        });\n    }\n    // if object has children, we assume it's a group\n    isColumnGroup(abstractColDef) {\n        return abstractColDef.children !== undefined;\n    }\n};\n__decorate$2A([\n    Autowired('columnUtils')\n], ColumnFactory.prototype, \"columnUtils\", void 0);\n__decorate$2A([\n    Autowired('dataTypeService')\n], ColumnFactory.prototype, \"dataTypeService\", void 0);\n__decorate$2A([\n    __param$9(0, Qualifier('loggerFactory'))\n], ColumnFactory.prototype, \"setBeans\", null);\nColumnFactory = __decorate$2A([\n    Bean('columnFactory')\n], ColumnFactory);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2z = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ColumnGroup {\n    constructor(providedColumnGroup, groupId, partId, pinned) {\n        // depends on the open/closed state of the group, only displaying columns are stored here\n        this.displayedChildren = [];\n        this.localEventService = new EventService();\n        this.groupId = groupId;\n        this.partId = partId;\n        this.providedColumnGroup = providedColumnGroup;\n        this.pinned = pinned;\n    }\n    // this is static, a it is used outside of this class\n    static createUniqueId(groupId, instanceId) {\n        return groupId + '_' + instanceId;\n    }\n    // as the user is adding and removing columns, the groups are recalculated.\n    // this reset clears out all children, ready for children to be added again\n    reset() {\n        this.parent = null;\n        this.children = null;\n        this.displayedChildren = null;\n    }\n    getParent() {\n        return this.parent;\n    }\n    setParent(parent) {\n        this.parent = parent;\n    }\n    getUniqueId() {\n        return ColumnGroup.createUniqueId(this.groupId, this.partId);\n    }\n    isEmptyGroup() {\n        return this.displayedChildren.length === 0;\n    }\n    isMoving() {\n        const allLeafColumns = this.getProvidedColumnGroup().getLeafColumns();\n        if (!allLeafColumns || allLeafColumns.length === 0) {\n            return false;\n        }\n        return allLeafColumns.every(col => col.isMoving());\n    }\n    checkLeft() {\n        // first get all children to setLeft, as it impacts our decision below\n        this.displayedChildren.forEach((child) => {\n            if (child instanceof ColumnGroup) {\n                child.checkLeft();\n            }\n        });\n        // set our left based on first displayed column\n        if (this.displayedChildren.length > 0) {\n            if (this.gridOptionsService.is('enableRtl')) {\n                const lastChild = last(this.displayedChildren);\n                const lastChildLeft = lastChild.getLeft();\n                this.setLeft(lastChildLeft);\n            }\n            else {\n                const firstChildLeft = this.displayedChildren[0].getLeft();\n                this.setLeft(firstChildLeft);\n            }\n        }\n        else {\n            // this should never happen, as if we have no displayed columns, then\n            // this groups should not even exist.\n            this.setLeft(null);\n        }\n    }\n    getLeft() {\n        return this.left;\n    }\n    getOldLeft() {\n        return this.oldLeft;\n    }\n    setLeft(left) {\n        this.oldLeft = left;\n        if (this.left !== left) {\n            this.left = left;\n            this.localEventService.dispatchEvent(this.createAgEvent(ColumnGroup.EVENT_LEFT_CHANGED));\n        }\n    }\n    getPinned() {\n        return this.pinned;\n    }\n    createAgEvent(type) {\n        return { type };\n    }\n    addEventListener(eventType, listener) {\n        this.localEventService.addEventListener(eventType, listener);\n    }\n    removeEventListener(eventType, listener) {\n        this.localEventService.removeEventListener(eventType, listener);\n    }\n    getGroupId() {\n        return this.groupId;\n    }\n    getPartId() {\n        return this.partId;\n    }\n    isChildInThisGroupDeepSearch(wantedChild) {\n        let result = false;\n        this.children.forEach((foundChild) => {\n            if (wantedChild === foundChild) {\n                result = true;\n            }\n            if (foundChild instanceof ColumnGroup) {\n                if (foundChild.isChildInThisGroupDeepSearch(wantedChild)) {\n                    result = true;\n                }\n            }\n        });\n        return result;\n    }\n    getActualWidth() {\n        let groupActualWidth = 0;\n        if (this.displayedChildren) {\n            this.displayedChildren.forEach((child) => {\n                groupActualWidth += child.getActualWidth();\n            });\n        }\n        return groupActualWidth;\n    }\n    isResizable() {\n        if (!this.displayedChildren) {\n            return false;\n        }\n        // if at least one child is resizable, then the group is resizable\n        let result = false;\n        this.displayedChildren.forEach((child) => {\n            if (child.isResizable()) {\n                result = true;\n            }\n        });\n        return result;\n    }\n    getMinWidth() {\n        let result = 0;\n        this.displayedChildren.forEach((groupChild) => {\n            result += groupChild.getMinWidth() || 0;\n        });\n        return result;\n    }\n    addChild(child) {\n        if (!this.children) {\n            this.children = [];\n        }\n        this.children.push(child);\n    }\n    getDisplayedChildren() {\n        return this.displayedChildren;\n    }\n    getLeafColumns() {\n        const result = [];\n        this.addLeafColumns(result);\n        return result;\n    }\n    getDisplayedLeafColumns() {\n        const result = [];\n        this.addDisplayedLeafColumns(result);\n        return result;\n    }\n    getDefinition() {\n        return this.providedColumnGroup.getColGroupDef();\n    }\n    getColGroupDef() {\n        return this.providedColumnGroup.getColGroupDef();\n    }\n    isPadding() {\n        return this.providedColumnGroup.isPadding();\n    }\n    isExpandable() {\n        return this.providedColumnGroup.isExpandable();\n    }\n    isExpanded() {\n        return this.providedColumnGroup.isExpanded();\n    }\n    setExpanded(expanded) {\n        this.providedColumnGroup.setExpanded(expanded);\n    }\n    addDisplayedLeafColumns(leafColumns) {\n        this.displayedChildren.forEach((child) => {\n            if (child instanceof Column) {\n                leafColumns.push(child);\n            }\n            else if (child instanceof ColumnGroup) {\n                child.addDisplayedLeafColumns(leafColumns);\n            }\n        });\n    }\n    addLeafColumns(leafColumns) {\n        this.children.forEach((child) => {\n            if (child instanceof Column) {\n                leafColumns.push(child);\n            }\n            else if (child instanceof ColumnGroup) {\n                child.addLeafColumns(leafColumns);\n            }\n        });\n    }\n    getChildren() {\n        return this.children;\n    }\n    getColumnGroupShow() {\n        return this.providedColumnGroup.getColumnGroupShow();\n    }\n    getProvidedColumnGroup() {\n        return this.providedColumnGroup;\n    }\n    getPaddingLevel() {\n        const parent = this.getParent();\n        if (!this.isPadding() || !parent || !parent.isPadding()) {\n            return 0;\n        }\n        return 1 + parent.getPaddingLevel();\n    }\n    calculateDisplayedColumns() {\n        // clear out last time we calculated\n        this.displayedChildren = [];\n        // find the column group that is controlling expandable. this is relevant when we have padding (empty)\n        // groups, where the expandable is actually the first parent that is not a padding group.\n        let parentWithExpansion = this;\n        while (parentWithExpansion != null && parentWithExpansion.isPadding()) {\n            parentWithExpansion = parentWithExpansion.getParent();\n        }\n        const isExpandable = parentWithExpansion ? parentWithExpansion.providedColumnGroup.isExpandable() : false;\n        // it not expandable, everything is visible\n        if (!isExpandable) {\n            this.displayedChildren = this.children;\n            this.localEventService.dispatchEvent(this.createAgEvent(ColumnGroup.EVENT_DISPLAYED_CHILDREN_CHANGED));\n            return;\n        }\n        // Add cols based on columnGroupShow\n        // Note - the below also adds padding groups, these are always added because they never have\n        // colDef.columnGroupShow set.\n        this.children.forEach(child => {\n            // never add empty groups\n            const emptyGroup = child instanceof ColumnGroup && (!child.displayedChildren || !child.displayedChildren.length);\n            if (emptyGroup) {\n                return;\n            }\n            const headerGroupShow = child.getColumnGroupShow();\n            switch (headerGroupShow) {\n                case 'open':\n                    // when set to open, only show col if group is open\n                    if (parentWithExpansion.providedColumnGroup.isExpanded()) {\n                        this.displayedChildren.push(child);\n                    }\n                    break;\n                case 'closed':\n                    // when set to open, only show col if group is open\n                    if (!parentWithExpansion.providedColumnGroup.isExpanded()) {\n                        this.displayedChildren.push(child);\n                    }\n                    break;\n                default:\n                    this.displayedChildren.push(child);\n                    break;\n            }\n        });\n        this.localEventService.dispatchEvent(this.createAgEvent(ColumnGroup.EVENT_DISPLAYED_CHILDREN_CHANGED));\n    }\n}\nColumnGroup.EVENT_LEFT_CHANGED = 'leftChanged';\nColumnGroup.EVENT_DISPLAYED_CHILDREN_CHANGED = 'displayedChildrenChanged';\n__decorate$2z([\n    Autowired('gridOptionsService')\n], ColumnGroup.prototype, \"gridOptionsService\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass Events {\n}\n/** Everything has changed with the columns. Either complete new set of columns set, or user called applyColumnState() */\n/** @deprecated - grid no longer uses this, and setSate() also fires individual events */\nEvents.EVENT_COLUMN_EVERYTHING_CHANGED = 'columnEverythingChanged';\n/** User has set in new columns. */\nEvents.EVENT_NEW_COLUMNS_LOADED = 'newColumnsLoaded';\n/** The pivot mode flag was changed */\nEvents.EVENT_COLUMN_PIVOT_MODE_CHANGED = 'columnPivotModeChanged';\n/** A row group column was added, removed or order changed. */\nEvents.EVENT_COLUMN_ROW_GROUP_CHANGED = 'columnRowGroupChanged';\n/** expandAll / collapseAll was called from the api. */\nEvents.EVENT_EXPAND_COLLAPSE_ALL = 'expandOrCollapseAll';\n/** A pivot column was added, removed or order changed. */\nEvents.EVENT_COLUMN_PIVOT_CHANGED = 'columnPivotChanged';\n/** The list of grid columns has changed. */\nEvents.EVENT_GRID_COLUMNS_CHANGED = 'gridColumnsChanged';\n/** A value column was added, removed or agg function was changed. */\nEvents.EVENT_COLUMN_VALUE_CHANGED = 'columnValueChanged';\n/** A column was moved */\nEvents.EVENT_COLUMN_MOVED = 'columnMoved';\n/** One or more columns was shown / hidden */\nEvents.EVENT_COLUMN_VISIBLE = 'columnVisible';\n/** One or more columns was pinned / unpinned*/\nEvents.EVENT_COLUMN_PINNED = 'columnPinned';\n/** A column group was opened / closed */\nEvents.EVENT_COLUMN_GROUP_OPENED = 'columnGroupOpened';\n/** One or more columns was resized. If just one, the column in the event is set. */\nEvents.EVENT_COLUMN_RESIZED = 'columnResized';\n/** The list of displayed columns has changed, can result from columns open / close, column move, pivot, group, etc */\nEvents.EVENT_DISPLAYED_COLUMNS_CHANGED = 'displayedColumnsChanged';\n/** The list of virtual columns has changed, results from viewport changing */\nEvents.EVENT_VIRTUAL_COLUMNS_CHANGED = 'virtualColumnsChanged';\n/** Async Transactions Executed */\nEvents.EVENT_ASYNC_TRANSACTIONS_FLUSHED = 'asyncTransactionsFlushed';\n/** A row group was opened / closed */\nEvents.EVENT_ROW_GROUP_OPENED = 'rowGroupOpened';\n/** @deprecated v28 use EVENT_ROW_DATA_UPDATED instead */\nEvents.EVENT_ROW_DATA_CHANGED = 'rowDataChanged';\n/** The client has updated data for the grid */\nEvents.EVENT_ROW_DATA_UPDATED = 'rowDataUpdated';\n/** The client has set new floating data into the grid */\nEvents.EVENT_PINNED_ROW_DATA_CHANGED = 'pinnedRowDataChanged';\n/** Range selection has changed */\nEvents.EVENT_RANGE_SELECTION_CHANGED = 'rangeSelectionChanged';\n/** Chart was created */\nEvents.EVENT_CHART_CREATED = 'chartCreated';\n/** Chart Range selection has changed */\nEvents.EVENT_CHART_RANGE_SELECTION_CHANGED = 'chartRangeSelectionChanged';\n/** Chart Options have changed */\nEvents.EVENT_CHART_OPTIONS_CHANGED = 'chartOptionsChanged';\n/** Chart was destroyed */\nEvents.EVENT_CHART_DESTROYED = 'chartDestroyed';\n/** For when the tool panel is shown / hidden */\nEvents.EVENT_TOOL_PANEL_VISIBLE_CHANGED = 'toolPanelVisibleChanged';\nEvents.EVENT_TOOL_PANEL_SIZE_CHANGED = 'toolPanelSizeChanged';\nEvents.EVENT_COLUMN_PANEL_ITEM_DRAG_START = 'columnPanelItemDragStart';\nEvents.EVENT_COLUMN_PANEL_ITEM_DRAG_END = 'columnPanelItemDragEnd';\n/** Model was updated - grid updates the drawn rows when this happens */\nEvents.EVENT_MODEL_UPDATED = 'modelUpdated';\nEvents.EVENT_CUT_START = 'cutStart';\nEvents.EVENT_CUT_END = 'cutEnd';\nEvents.EVENT_PASTE_START = 'pasteStart';\nEvents.EVENT_PASTE_END = 'pasteEnd';\nEvents.EVENT_FILL_START = 'fillStart';\nEvents.EVENT_FILL_END = 'fillEnd';\nEvents.EVENT_RANGE_DELETE_START = 'rangeDeleteStart';\nEvents.EVENT_RANGE_DELETE_END = 'rangeDeleteEnd';\n/** Undo operation has started. */\nEvents.EVENT_UNDO_STARTED = 'undoStarted';\n/** Undo operation has ended. */\nEvents.EVENT_UNDO_ENDED = 'undoEnded';\n/** Redo operation has started. */\nEvents.EVENT_REDO_STARTED = 'redoStarted';\n/** Redo operation has ended. */\nEvents.EVENT_REDO_ENDED = 'redoEnded';\nEvents.EVENT_KEY_SHORTCUT_CHANGED_CELL_START = 'keyShortcutChangedCellStart';\nEvents.EVENT_KEY_SHORTCUT_CHANGED_CELL_END = 'keyShortcutChangedCellEnd';\nEvents.EVENT_CELL_CLICKED = 'cellClicked';\nEvents.EVENT_CELL_DOUBLE_CLICKED = 'cellDoubleClicked';\nEvents.EVENT_CELL_MOUSE_DOWN = 'cellMouseDown';\nEvents.EVENT_CELL_CONTEXT_MENU = 'cellContextMenu';\nEvents.EVENT_CELL_VALUE_CHANGED = 'cellValueChanged';\nEvents.EVENT_CELL_EDIT_REQUEST = 'cellEditRequest';\nEvents.EVENT_ROW_VALUE_CHANGED = 'rowValueChanged';\nEvents.EVENT_CELL_FOCUSED = 'cellFocused';\nEvents.EVENT_CELL_FOCUS_CLEARED = 'cellFocusCleared';\nEvents.EVENT_FULL_WIDTH_ROW_FOCUSED = 'fullWidthRowFocused';\nEvents.EVENT_ROW_SELECTED = 'rowSelected';\nEvents.EVENT_SELECTION_CHANGED = 'selectionChanged';\nEvents.EVENT_CELL_KEY_DOWN = 'cellKeyDown';\nEvents.EVENT_CELL_MOUSE_OVER = 'cellMouseOver';\nEvents.EVENT_CELL_MOUSE_OUT = 'cellMouseOut';\n/** 2 events for filtering. The grid LISTENS for filterChanged and afterFilterChanged */\nEvents.EVENT_FILTER_CHANGED = 'filterChanged';\n/** Filter was change but not applied. Only useful if apply buttons are used in filters. */\nEvents.EVENT_FILTER_MODIFIED = 'filterModified';\nEvents.EVENT_FILTER_OPENED = 'filterOpened';\nEvents.EVENT_SORT_CHANGED = 'sortChanged';\n/** A row was removed from the dom, for any reason. Use to clean up resources (if any) used by the row. */\nEvents.EVENT_VIRTUAL_ROW_REMOVED = 'virtualRowRemoved';\nEvents.EVENT_ROW_CLICKED = 'rowClicked';\nEvents.EVENT_ROW_DOUBLE_CLICKED = 'rowDoubleClicked';\n/** Gets called once after the grid has finished initialising. */\nEvents.EVENT_GRID_READY = 'gridReady';\n/** Width of height of the main grid div has changed. Grid listens for this and does layout of grid if it's\n * changed, so always filling the space it was given. */\nEvents.EVENT_GRID_SIZE_CHANGED = 'gridSizeChanged';\n/** The indexes of the rows rendered has changed, eg user has scrolled to a new vertical position. */\nEvents.EVENT_VIEWPORT_CHANGED = 'viewportChanged';\n/* The width of the scrollbar has been calculated */\nEvents.EVENT_SCROLLBAR_WIDTH_CHANGED = 'scrollbarWidthChanged';\n/** Rows were rendered for the first time (ie on async data load). */\nEvents.EVENT_FIRST_DATA_RENDERED = 'firstDataRendered';\n/** A column drag has started, either resizing a column or moving a column. */\nEvents.EVENT_DRAG_STARTED = 'dragStarted';\n/** A column drag has stopped */\nEvents.EVENT_DRAG_STOPPED = 'dragStopped';\nEvents.EVENT_CHECKBOX_CHANGED = 'checkboxChanged';\nEvents.EVENT_ROW_EDITING_STARTED = 'rowEditingStarted';\nEvents.EVENT_ROW_EDITING_STOPPED = 'rowEditingStopped';\nEvents.EVENT_CELL_EDITING_STARTED = 'cellEditingStarted';\nEvents.EVENT_CELL_EDITING_STOPPED = 'cellEditingStopped';\n/** Main body of grid has scrolled, either horizontally or vertically */\nEvents.EVENT_BODY_SCROLL = 'bodyScroll';\n/** Main body of the grid has stopped scrolling, either horizontally or vertically */\nEvents.EVENT_BODY_SCROLL_END = 'bodyScrollEnd';\nEvents.EVENT_HEIGHT_SCALE_CHANGED = 'heightScaleChanged';\n/** The displayed page for pagination has changed. For example the data was filtered or sorted,\n * or the user has moved to a different page. */\nEvents.EVENT_PAGINATION_CHANGED = 'paginationChanged';\n/** Only used by React, Angular, Web Components and VueJS AG Grid components\n * (not used if doing plain JavaScript). If the grid receives changes due\n * to bound properties, this event fires after the grid has finished processing the change. */\nEvents.EVENT_COMPONENT_STATE_CHANGED = 'componentStateChanged';\n/** Only used by the SSRM, called when the grid has no more rows to refresh */\nEvents.EVENT_STORE_REFRESHED = 'storeRefreshed';\n/*****************************  INTERNAL EVENTS: START ******************************************* */\n/** Please remember to add to ComponentUtil.EXCLUDED_INTERNAL_EVENTS to not have these events exposed to framework components. */\n/** All items from here down are used internally by the grid, not intended for external use. */\n// not documented, either experimental, or we just don't want users using an depending on them\nEvents.EVENT_BODY_HEIGHT_CHANGED = 'bodyHeightChanged';\nEvents.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED = 'displayedColumnsWidthChanged';\nEvents.EVENT_SCROLL_VISIBILITY_CHANGED = 'scrollVisibilityChanged';\nEvents.EVENT_COLUMN_HOVER_CHANGED = 'columnHoverChanged';\nEvents.EVENT_FLASH_CELLS = 'flashCells';\nEvents.EVENT_PAGINATION_PIXEL_OFFSET_CHANGED = 'paginationPixelOffsetChanged';\nEvents.EVENT_DISPLAYED_ROWS_CHANGED = 'displayedRowsChanged';\nEvents.EVENT_LEFT_PINNED_WIDTH_CHANGED = 'leftPinnedWidthChanged';\nEvents.EVENT_RIGHT_PINNED_WIDTH_CHANGED = 'rightPinnedWidthChanged';\nEvents.EVENT_ROW_CONTAINER_HEIGHT_CHANGED = 'rowContainerHeightChanged';\nEvents.EVENT_HEADER_HEIGHT_CHANGED = 'headerHeightChanged';\nEvents.EVENT_COLUMN_HEADER_HEIGHT_CHANGED = 'columnHeaderHeightChanged';\nEvents.EVENT_ROW_DRAG_ENTER = 'rowDragEnter';\nEvents.EVENT_ROW_DRAG_MOVE = 'rowDragMove';\nEvents.EVENT_ROW_DRAG_LEAVE = 'rowDragLeave';\nEvents.EVENT_ROW_DRAG_END = 'rowDragEnd';\n// environment\nEvents.EVENT_GRID_STYLES_CHANGED = 'gridStylesChanged';\n// primarily for charts\nEvents.EVENT_POPUP_TO_FRONT = 'popupToFront';\n// these are used for server side group and agg - only used by CS with Viewport Row Model - intention is\n// to design these better around server side functions and then release to general public when fully working with\n// all the row models.\nEvents.EVENT_COLUMN_ROW_GROUP_CHANGE_REQUEST = 'columnRowGroupChangeRequest';\nEvents.EVENT_COLUMN_PIVOT_CHANGE_REQUEST = 'columnPivotChangeRequest';\nEvents.EVENT_COLUMN_VALUE_CHANGE_REQUEST = 'columnValueChangeRequest';\nEvents.EVENT_COLUMN_AGG_FUNC_CHANGE_REQUEST = 'columnAggFuncChangeRequest';\nEvents.EVENT_KEYBOARD_FOCUS = 'keyboardFocus';\nEvents.EVENT_MOUSE_FOCUS = 'mouseFocus';\nEvents.EVENT_STORE_UPDATED = 'storeUpdated';\nEvents.EVENT_FILTER_DESTROYED = 'filterDestroyed';\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n// class returns unique instance id's for columns.\n// eg, the following calls (in this order) will result in:\n//\n// getInstanceIdForKey('country') => 0\n// getInstanceIdForKey('country') => 1\n// getInstanceIdForKey('country') => 2\n// getInstanceIdForKey('country') => 3\n// getInstanceIdForKey('age') => 0\n// getInstanceIdForKey('age') => 1\n// getInstanceIdForKey('country') => 4\nclass GroupInstanceIdCreator {\n    constructor() {\n        // this map contains keys to numbers, so we remember what the last call was\n        this.existingIds = {};\n    }\n    getInstanceIdForKey(key) {\n        const lastResult = this.existingIds[key];\n        let result;\n        if (typeof lastResult !== 'number') {\n            // first time this key\n            result = 0;\n        }\n        else {\n            result = lastResult + 1;\n        }\n        this.existingIds[key] = result;\n        return result;\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2y = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst GROUP_AUTO_COLUMN_ID = 'ag-Grid-AutoColumn';\nlet AutoGroupColService = class AutoGroupColService extends BeanStub {\n    createAutoGroupColumns(existingCols, rowGroupColumns) {\n        const groupAutoColumns = [];\n        const doingTreeData = this.gridOptionsService.isTreeData();\n        let doingMultiAutoColumn = this.gridOptionsService.isGroupMultiAutoColumn();\n        if (doingTreeData && doingMultiAutoColumn) {\n            console.warn('AG Grid: you cannot mix groupDisplayType = \"multipleColumns\" with treeData, only one column can be used to display groups when doing tree data');\n            doingMultiAutoColumn = false;\n        }\n        // if doing groupDisplayType = \"multipleColumns\", then we call the method multiple times, once\n        // for each column we are grouping by\n        if (doingMultiAutoColumn) {\n            rowGroupColumns.forEach((rowGroupCol, index) => {\n                groupAutoColumns.push(this.createOneAutoGroupColumn(existingCols, rowGroupCol, index));\n            });\n        }\n        else {\n            groupAutoColumns.push(this.createOneAutoGroupColumn(existingCols));\n        }\n        return groupAutoColumns;\n    }\n    // rowGroupCol and index are missing if groupDisplayType != \"multipleColumns\"\n    createOneAutoGroupColumn(existingCols, rowGroupCol, index) {\n        // if one provided by user, use it, otherwise create one\n        let defaultAutoColDef = this.generateDefaultColDef(rowGroupCol);\n        // if doing multi, set the field\n        let colId;\n        if (rowGroupCol) {\n            colId = `${GROUP_AUTO_COLUMN_ID}-${rowGroupCol.getId()}`;\n        }\n        else {\n            colId = GROUP_AUTO_COLUMN_ID;\n        }\n        const userAutoColDef = this.gridOptionsService.get('autoGroupColumnDef');\n        mergeDeep(defaultAutoColDef, userAutoColDef);\n        defaultAutoColDef = this.columnFactory.mergeColDefs(defaultAutoColDef, colId);\n        defaultAutoColDef.colId = colId;\n        // For tree data the filter is always allowed\n        if (!this.gridOptionsService.isTreeData()) {\n            // we would only allow filter if the user has provided field or value getter. otherwise the filter\n            // would not be able to work.\n            const noFieldOrValueGetter = missing(defaultAutoColDef.field) &&\n                missing(defaultAutoColDef.valueGetter) &&\n                missing(defaultAutoColDef.filterValueGetter) &&\n                defaultAutoColDef.filter !== 'agGroupColumnFilter';\n            if (noFieldOrValueGetter) {\n                defaultAutoColDef.filter = false;\n            }\n        }\n        // if showing many cols, we don't want to show more than one with a checkbox for selection\n        if (index && index > 0) {\n            defaultAutoColDef.headerCheckboxSelection = false;\n        }\n        const existingCol = existingCols.find(col => col.getId() == colId);\n        const isSortingCoupled = this.gridOptionsService.isColumnsSortingCoupledToGroup();\n        if (existingCol) {\n            if (isSortingCoupled) {\n                // if col is coupled sorting, and has sort attribute, we want to ignore this\n                // because we only accept the sort on creation of the col\n                defaultAutoColDef.sort = undefined;\n                defaultAutoColDef.sortIndex = undefined;\n            }\n            existingCol.setColDef(defaultAutoColDef, null);\n            this.columnFactory.applyColumnState(existingCol, defaultAutoColDef);\n            return existingCol;\n        }\n        if (isSortingCoupled && (defaultAutoColDef.sort || defaultAutoColDef.initialSort || 'sortIndex' in defaultAutoColDef) && !defaultAutoColDef.field) {\n            // if no field, then this column cannot hold its own sort state\n            defaultAutoColDef.sort = null;\n            defaultAutoColDef.sortIndex = null;\n            defaultAutoColDef.initialSort = null;\n        }\n        const newCol = new Column(defaultAutoColDef, null, colId, true);\n        this.context.createBean(newCol);\n        return newCol;\n    }\n    generateDefaultColDef(rowGroupCol) {\n        const userDef = this.gridOptionsService.get('autoGroupColumnDef');\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        const res = {\n            headerName: localeTextFunc('group', 'Group')\n        };\n        const userHasProvidedGroupCellRenderer = userDef &&\n            (userDef.cellRenderer || userDef.cellRendererSelector);\n        // only add the default group cell renderer if user hasn't provided one\n        if (!userHasProvidedGroupCellRenderer) {\n            res.cellRenderer = 'agGroupCellRenderer';\n        }\n        // we never allow moving the group column\n        // defaultAutoColDef.suppressMovable = true;\n        if (rowGroupCol) {\n            const colDef = rowGroupCol.getColDef();\n            Object.assign(res, {\n                // cellRendererParams.groupKey: colDefToCopy.field;\n                headerName: this.columnModel.getDisplayNameForColumn(rowGroupCol, 'header'),\n                headerValueGetter: colDef.headerValueGetter\n            });\n            if (colDef.cellRenderer) {\n                Object.assign(res, {\n                    cellRendererParams: {\n                        innerRenderer: colDef.cellRenderer,\n                        innerRendererParams: colDef.cellRendererParams\n                    }\n                });\n            }\n            res.showRowGroup = rowGroupCol.getColId();\n        }\n        else {\n            res.showRowGroup = true;\n        }\n        return res;\n    }\n};\n__decorate$2y([\n    Autowired('columnModel')\n], AutoGroupColService.prototype, \"columnModel\", void 0);\n__decorate$2y([\n    Autowired('columnFactory')\n], AutoGroupColService.prototype, \"columnFactory\", void 0);\nAutoGroupColService = __decorate$2y([\n    Bean('autoGroupColService')\n], AutoGroupColService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nconst reUnescapedHtml = /[&<>\"']/g;\n/**\n * HTML Escapes.\n */\nconst HTML_ESCAPES = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n};\n/**\n * It encodes any string in UTF-8 format\n * taken from https://github.com/mathiasbynens/utf8.js\n * @param {string} s\n * @returns {string}\n */\nfunction utf8_encode(s) {\n    const stringFromCharCode = String.fromCharCode;\n    function ucs2decode(string) {\n        const output = [];\n        if (!string) {\n            return [];\n        }\n        const len = string.length;\n        let counter = 0;\n        let value;\n        let extra;\n        while (counter < len) {\n            value = string.charCodeAt(counter++);\n            if (value >= 0xD800 && value <= 0xDBFF && counter < len) {\n                // high surrogate, and there is a next character\n                extra = string.charCodeAt(counter++);\n                if ((extra & 0xFC00) == 0xDC00) { // low surrogate\n                    output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n                }\n                else {\n                    // unmatched surrogate; only append this code unit, in case the next\n                    // code unit is the high surrogate of a surrogate pair\n                    output.push(value);\n                    counter--;\n                }\n            }\n            else {\n                output.push(value);\n            }\n        }\n        return output;\n    }\n    function checkScalarValue(point) {\n        if (point >= 0xD800 && point <= 0xDFFF) {\n            throw Error('Lone surrogate U+' + point.toString(16).toUpperCase() +\n                ' is not a scalar value');\n        }\n    }\n    function createByte(point, shift) {\n        return stringFromCharCode(((point >> shift) & 0x3F) | 0x80);\n    }\n    function encodeCodePoint(point) {\n        if ((point >= 0 && point <= 31 && point !== 10)) {\n            const convertedCode = point.toString(16).toUpperCase();\n            const paddedCode = convertedCode.padStart(4, '0');\n            return `_x${paddedCode}_`;\n        }\n        if ((point & 0xFFFFFF80) == 0) { // 1-byte sequence\n            return stringFromCharCode(point);\n        }\n        let symbol = '';\n        if ((point & 0xFFFFF800) == 0) { // 2-byte sequence\n            symbol = stringFromCharCode(((point >> 6) & 0x1F) | 0xC0);\n        }\n        else if ((point & 0xFFFF0000) == 0) { // 3-byte sequence\n            checkScalarValue(point);\n            symbol = stringFromCharCode(((point >> 12) & 0x0F) | 0xE0);\n            symbol += createByte(point, 6);\n        }\n        else if ((point & 0xFFE00000) == 0) { // 4-byte sequence\n            symbol = stringFromCharCode(((point >> 18) & 0x07) | 0xF0);\n            symbol += createByte(point, 12);\n            symbol += createByte(point, 6);\n        }\n        symbol += stringFromCharCode((point & 0x3F) | 0x80);\n        return symbol;\n    }\n    const codePoints = ucs2decode(s);\n    const length = codePoints.length;\n    let index = -1;\n    let codePoint;\n    let byteString = '';\n    while (++index < length) {\n        codePoint = codePoints[index];\n        byteString += encodeCodePoint(codePoint);\n    }\n    return byteString;\n}\nfunction capitalise(str) {\n    return str[0].toUpperCase() + str.substr(1).toLowerCase();\n}\nfunction escapeString(toEscape, skipEscapingHtmlChars) {\n    if (toEscape == null) {\n        return null;\n    }\n    // we call toString() twice, in case value is an object, where user provides\n    // a toString() method, and first call to toString() returns back something other\n    // than a string (eg a number to render)\n    const stringResult = toEscape.toString().toString();\n    if (skipEscapingHtmlChars) {\n        return stringResult;\n    }\n    // in react we don't need to escape html characters, as it's done by the framework\n    return stringResult.replace(reUnescapedHtml, chr => HTML_ESCAPES[chr]);\n}\n/**\n * Converts a camelCase string into startCase\n * @param {string} camelCase\n * @return {string}\n */\nfunction camelCaseToHumanText(camelCase) {\n    if (!camelCase || camelCase == null) {\n        return null;\n    }\n    // either split on a lowercase followed by uppercase ie  asHereTo -> as Here To\n    const rex = /([a-z])([A-Z])/g;\n    // or starts with uppercase and we take all expect the last which is assumed to be part of next word if followed by lowercase HEREToThere -> HERE To There\n    const rexCaps = /([A-Z]+)([A-Z])([a-z])/g;\n    const words = camelCase\n        .replace(rex, '$1 $2')\n        .replace(rexCaps, '$1 $2$3')\n        .replace(/\\./g, ' ')\n        .split(' ');\n    return words.map(word => word.substring(0, 1).toUpperCase() + ((word.length > 1) ? word.substring(1, word.length) : '')).join(' ');\n}\n/**\n * Converts a camelCase string into hyphenated string\n * @param {string} camelCase\n * @return {string}\n */\nfunction camelCaseToHyphenated(camelCase) {\n    return camelCase.replace(/[A-Z]/g, s => `-${s.toLocaleLowerCase()}`);\n}\n\nvar StringUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    utf8_encode: utf8_encode,\n    capitalise: capitalise,\n    escapeString: escapeString,\n    camelCaseToHumanText: camelCaseToHumanText,\n    camelCaseToHyphenated: camelCaseToHyphenated\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nfunction convertToMap(arr) {\n    const map = new Map();\n    arr.forEach(pair => map.set(pair[0], pair[1]));\n    return map;\n}\n// handy for organising a list into a map, where each item is mapped by an attribute, eg mapping Columns by ID\nfunction mapById(arr, callback) {\n    const map = new Map();\n    arr.forEach(item => map.set(callback(item), item));\n    return map;\n}\nfunction keys(map) {\n    const arr = [];\n    map.forEach((_, key) => arr.push(key));\n    return arr;\n}\n\nvar MapUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    convertToMap: convertToMap,\n    mapById: mapById,\n    keys: keys\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass ColDefUtil {\n}\nColDefUtil.ColDefPropertyMap = {\n    headerName: undefined,\n    columnGroupShow: undefined,\n    headerClass: undefined,\n    toolPanelClass: undefined,\n    headerValueGetter: undefined,\n    pivotKeys: undefined,\n    groupId: undefined,\n    colId: undefined,\n    sort: undefined,\n    initialSort: undefined,\n    field: undefined,\n    type: undefined,\n    cellDataType: undefined,\n    tooltipComponent: undefined,\n    tooltipField: undefined,\n    headerTooltip: undefined,\n    cellClass: undefined,\n    showRowGroup: undefined,\n    filter: undefined,\n    initialAggFunc: undefined,\n    defaultAggFunc: undefined,\n    aggFunc: undefined,\n    pinned: undefined,\n    initialPinned: undefined,\n    chartDataType: undefined,\n    cellEditorPopupPosition: undefined,\n    headerGroupComponent: undefined,\n    headerGroupComponentParams: undefined,\n    cellStyle: undefined,\n    cellRenderer: undefined,\n    cellRendererParams: undefined,\n    cellEditor: undefined,\n    cellEditorParams: undefined,\n    filterParams: undefined,\n    pivotValueColumn: undefined,\n    headerComponent: undefined,\n    headerComponentParams: undefined,\n    floatingFilterComponent: undefined,\n    floatingFilterComponentParams: undefined,\n    tooltipComponentParams: undefined,\n    refData: undefined,\n    columnsMenuParams: undefined,\n    children: undefined,\n    sortingOrder: undefined,\n    allowedAggFuncs: undefined,\n    menuTabs: undefined,\n    pivotTotalColumnIds: undefined,\n    cellClassRules: undefined,\n    icons: undefined,\n    sortIndex: undefined,\n    initialSortIndex: undefined,\n    flex: undefined,\n    initialFlex: undefined,\n    width: undefined,\n    initialWidth: undefined,\n    minWidth: undefined,\n    maxWidth: undefined,\n    rowGroupIndex: undefined,\n    initialRowGroupIndex: undefined,\n    pivotIndex: undefined,\n    initialPivotIndex: undefined,\n    suppressCellFlash: undefined,\n    suppressColumnsToolPanel: undefined,\n    suppressFiltersToolPanel: undefined,\n    openByDefault: undefined,\n    marryChildren: undefined,\n    suppressStickyLabel: undefined,\n    hide: undefined,\n    initialHide: undefined,\n    rowGroup: undefined,\n    initialRowGroup: undefined,\n    pivot: undefined,\n    initialPivot: undefined,\n    checkboxSelection: undefined,\n    showDisabledCheckboxes: undefined,\n    headerCheckboxSelection: undefined,\n    headerCheckboxSelectionFilteredOnly: undefined,\n    headerCheckboxSelectionCurrentPageOnly: undefined,\n    suppressMenu: undefined,\n    suppressMovable: undefined,\n    lockPosition: undefined,\n    lockVisible: undefined,\n    lockPinned: undefined,\n    unSortIcon: undefined,\n    suppressSizeToFit: undefined,\n    suppressAutoSize: undefined,\n    enableRowGroup: undefined,\n    enablePivot: undefined,\n    enableValue: undefined,\n    editable: undefined,\n    suppressPaste: undefined,\n    suppressNavigable: undefined,\n    enableCellChangeFlash: undefined,\n    rowDrag: undefined,\n    dndSource: undefined,\n    autoHeight: undefined,\n    wrapText: undefined,\n    sortable: undefined,\n    resizable: undefined,\n    singleClickEdit: undefined,\n    floatingFilter: undefined,\n    cellEditorPopup: undefined,\n    suppressFillHandle: undefined,\n    wrapHeaderText: undefined,\n    autoHeaderHeight: undefined,\n    dndSourceOnRowDrag: undefined,\n    valueGetter: undefined,\n    valueSetter: undefined,\n    filterValueGetter: undefined,\n    keyCreator: undefined,\n    valueFormatter: undefined,\n    valueParser: undefined,\n    comparator: undefined,\n    equals: undefined,\n    pivotComparator: undefined,\n    suppressKeyboardEvent: undefined,\n    suppressHeaderKeyboardEvent: undefined,\n    colSpan: undefined,\n    rowSpan: undefined,\n    getQuickFilterText: undefined,\n    onCellValueChanged: undefined,\n    onCellClicked: undefined,\n    onCellDoubleClicked: undefined,\n    onCellContextMenu: undefined,\n    rowDragText: undefined,\n    tooltipValueGetter: undefined,\n    cellRendererSelector: undefined,\n    cellEditorSelector: undefined,\n    suppressSpanHeaderHeight: undefined,\n    useValueFormatterForExport: undefined,\n    useValueParserForImport: undefined,\n};\nColDefUtil.ALL_PROPERTIES = Object.keys(ColDefUtil.ColDefPropertyMap);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n/**\n * These keys are used for validating properties supplied on a gridOptions object, and for code generation.\n * If you change the properties on the gridOptions interface, you *must* update this file as well to be consistent.\n */\nclass PropertyKeys {\n}\nPropertyKeys.STRING_PROPERTIES = [\n    'rowSelection', 'overlayLoadingTemplate', 'overlayNoRowsTemplate', 'gridId',\n    'quickFilterText', 'rowModelType', 'editType', 'domLayout', 'clipboardDelimiter', 'rowGroupPanelShow',\n    'multiSortKey', 'pivotColumnGroupTotals', 'pivotRowTotals', 'pivotPanelShow', 'fillHandleDirection',\n    'serverSideStoreType', 'groupDisplayType', 'treeDataDisplayType', 'colResizeDefault'\n];\nPropertyKeys.OBJECT_PROPERTIES = [\n    'components', 'rowStyle', 'context', 'autoGroupColumnDef', 'localeText', 'icons',\n    'datasource', 'serverSideDatasource', 'viewportDatasource', 'groupRowRendererParams', 'aggFuncs', 'fullWidthCellRendererParams',\n    'defaultColGroupDef', 'defaultColDef', 'defaultCsvExportParams', 'defaultExcelExportParams', 'columnTypes',\n    'rowClassRules', 'detailCellRendererParams', 'loadingCellRendererParams', 'loadingOverlayComponentParams',\n    'noRowsOverlayComponentParams', 'popupParent', 'statusBar', 'sideBar', 'chartThemeOverrides',\n    'customChartThemes', 'chartToolPanelsDef', 'dataTypeDefinitions'\n];\nPropertyKeys.ARRAY_PROPERTIES = [\n    'sortingOrder', 'alignedGrids', 'rowData', 'columnDefs', 'excelStyles', 'pinnedTopRowData', 'pinnedBottomRowData', 'chartThemes', 'rowClass'\n];\nPropertyKeys.NUMBER_PROPERTIES = [\n    'rowHeight', 'detailRowHeight', 'rowBuffer', 'headerHeight', 'groupHeaderHeight', 'floatingFiltersHeight',\n    'pivotHeaderHeight', 'pivotGroupHeaderHeight', 'groupDefaultExpanded', 'viewportRowModelPageSize',\n    'viewportRowModelBufferSize', 'autoSizePadding', 'maxBlocksInCache', 'maxConcurrentDatasourceRequests', 'tooltipShowDelay',\n    'tooltipHideDelay', 'cacheOverflowSize', 'paginationPageSize', 'cacheBlockSize', 'infiniteInitialRowCount', 'serverSideInitialRowCount', 'scrollbarWidth',\n    'asyncTransactionWaitMillis', 'blockLoadDebounceMillis', 'keepDetailRowsCount',\n    'undoRedoCellEditingLimit', 'cellFlashDelay', 'cellFadeDelay', 'tabIndex'\n];\nPropertyKeys.BOOLEAN_PROPERTIES = [\n    'suppressMakeColumnVisibleAfterUnGroup', 'suppressRowClickSelection', 'suppressCellFocus', 'suppressHorizontalScroll',\n    'alwaysShowHorizontalScroll', 'alwaysShowVerticalScroll', 'debug', 'enableBrowserTooltips', 'enableCellExpressions', 'groupSelectsChildren',\n    'groupIncludeFooter', 'groupIncludeTotalFooter', 'groupSuppressBlankHeader', 'suppressMenuHide', 'suppressRowDeselection', 'unSortIcon',\n    'suppressMultiSort', 'alwaysMultiSort', 'singleClickEdit', 'suppressLoadingOverlay', 'suppressNoRowsOverlay', 'suppressAutoSize',\n    'skipHeaderOnAutoSize', 'suppressParentsInRowNodes', 'suppressColumnMoveAnimation', 'suppressMovableColumns', 'suppressFieldDotNotation',\n    'enableRangeSelection', 'enableRangeHandle', 'enableFillHandle', 'suppressClearOnFillReduction', 'deltaSort', 'suppressTouch', 'suppressAsyncEvents',\n    'allowContextMenuWithControlKey', 'suppressContextMenu', 'rememberGroupStateWhenNewData', 'enableCellChangeFlash', 'suppressDragLeaveHidesColumns',\n    'suppressRowGroupHidesColumns', 'suppressMiddleClickScrolls', 'suppressPreventDefaultOnMouseWheel', 'suppressCopyRowsToClipboard', 'copyHeadersToClipboard',\n    'copyGroupHeadersToClipboard', 'pivotMode', 'suppressAggFuncInHeader', 'suppressColumnVirtualisation', 'alwaysAggregateAtRootLevel', 'suppressAggAtRootLevel', 'suppressFocusAfterRefresh',\n    'functionsPassive', 'functionsReadOnly', 'animateRows', 'groupSelectsFiltered', 'groupRemoveSingleChildren', 'groupRemoveLowestSingleChildren', 'enableRtl',\n    'suppressClickEdit', 'rowDragEntireRow', 'rowDragManaged', 'suppressRowDrag', 'suppressMoveWhenRowDragging', 'rowDragMultiRow', 'enableGroupEdit',\n    'embedFullWidthRows', 'suppressPaginationPanel', 'groupHideOpenParents', 'groupAllowUnbalanced', 'pagination', 'paginationAutoPageSize', 'suppressScrollOnNewData',\n    'suppressScrollWhenPopupsAreOpen', 'purgeClosedRowNodes', 'cacheQuickFilter', 'includeHiddenColumnsInQuickFilter', 'excludeHiddenColumnsFromQuickFilter', 'ensureDomOrder', 'accentedSort', 'suppressChangeDetection',\n    'valueCache', 'valueCacheNeverExpires', 'aggregateOnlyChangedColumns', 'suppressAnimationFrame', 'suppressExcelExport', 'suppressCsvExport', 'treeData', 'masterDetail',\n    'suppressMultiRangeSelection', 'enterMovesDown', 'enterMovesDownAfterEdit', 'enterNavigatesVerticallyAfterEdit', 'enterNavigatesVertically', 'suppressPropertyNamesCheck', 'rowMultiSelectWithClick', 'suppressRowHoverHighlight',\n    'suppressRowTransform', 'suppressClipboardPaste', 'suppressLastEmptyLineOnPaste', 'enableCharts', 'enableChartToolPanelsButton', 'suppressChartToolPanelsButton',\n    'suppressMaintainUnsortedOrder', 'enableCellTextSelection', 'suppressBrowserResizeObserver', 'suppressMaxRenderedRowRestriction', 'excludeChildrenWhenTreeDataFiltering',\n    'tooltipMouseTrack', 'keepDetailRows', 'paginateChildRows', 'preventDefaultOnContextMenu', 'undoRedoCellEditing', 'allowDragFromColumnsToolPanel',\n    'pivotSuppressAutoColumn', 'suppressExpandablePivotGroups', 'debounceVerticalScrollbar', 'detailRowAutoHeight', 'serverSideFilteringAlwaysResets', 'serverSideFilterAllLevels',\n    'serverSideSortingAlwaysResets', 'serverSideSortAllLevels', 'serverSideOnlyRefreshFilteredGroups', 'serverSideSortOnServer', 'serverSideFilterOnServer', 'suppressAggFilteredOnly',\n    'showOpenedGroup', 'suppressClipboardApi', 'suppressModelUpdateAfterUpdateTransaction', 'stopEditingWhenCellsLoseFocus', 'maintainColumnOrder', 'groupMaintainOrder',\n    'columnHoverHighlight', 'suppressReactUi', 'readOnlyEdit', 'suppressRowVirtualisation', 'enableCellEditingOnBackspace', 'resetRowDataOnUpdate',\n    'removePivotHeaderRowWhenSingleValueColumn', 'suppressCopySingleCellRanges', 'suppressGroupRowsSticky', 'suppressServerSideInfiniteScroll', 'rowGroupPanelSuppressSort',\n    'allowShowChangeAfterFilter', 'suppressCutToClipboard'\n];\n/** You do not need to include event callbacks in this list, as they are generated automatically. */\nPropertyKeys.FUNCTIONAL_PROPERTIES = [\n    'doesExternalFilterPass', 'processSecondaryColDef', 'processSecondaryColGroupDef', 'processPivotResultColDef',\n    'processPivotResultColGroupDef', 'getBusinessKeyForNode', 'isRowSelectable', 'rowDragText',\n    'groupRowRenderer', 'fullWidthCellRenderer',\n    'loadingCellRenderer', 'loadingOverlayComponent', 'noRowsOverlayComponent',\n    'detailCellRenderer'\n];\nPropertyKeys.CALLBACK_PROPERTIES = [\n    'getLocaleText', 'isExternalFilterPresent', 'getRowHeight', 'getRowClass', 'getRowStyle', 'getContextMenuItems', 'getMainMenuItems',\n    'processRowPostCreate', 'processCellForClipboard', 'getGroupRowAgg', 'isFullWidthRow',\n    'sendToClipboard', 'navigateToNextHeader', 'tabToNextHeader', 'navigateToNextCell',\n    'tabToNextCell', 'processCellFromClipboard', 'getDocument', 'postProcessPopup', 'getChildCount', 'getDataPath', 'isRowMaster', 'postSortRows', 'processHeaderForClipboard',\n    'processGroupHeaderForClipboard', 'paginationNumberFormatter', 'processDataFromClipboard', 'getServerSideGroupKey', 'isServerSideGroup',\n    'createChartContainer', 'getChartToolbarItems', 'fillOperation', 'isApplyServerSideTransaction', 'getServerSideStoreParams', 'getServerSideGroupLevelParams',\n    'isServerSideGroupOpenByDefault', 'isGroupOpenByDefault', 'initialGroupOrderComparator',\n    'loadingCellRendererSelector', 'getRowId', 'groupAggFiltering'\n];\nPropertyKeys.FUNCTION_PROPERTIES = [\n    ...PropertyKeys.FUNCTIONAL_PROPERTIES,\n    ...PropertyKeys.CALLBACK_PROPERTIES\n];\nPropertyKeys.ALL_PROPERTIES = [\n    ...PropertyKeys.ARRAY_PROPERTIES,\n    ...PropertyKeys.OBJECT_PROPERTIES,\n    ...PropertyKeys.STRING_PROPERTIES,\n    ...PropertyKeys.NUMBER_PROPERTIES,\n    ...PropertyKeys.FUNCTION_PROPERTIES,\n    ...PropertyKeys.BOOLEAN_PROPERTIES\n];\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass ComponentUtil {\n    static getCallbackForEvent(eventName) {\n        if (!eventName || eventName.length < 2) {\n            return eventName;\n        }\n        return 'on' + eventName[0].toUpperCase() + eventName.substr(1);\n    }\n    static getCoercionLookup() {\n        let coercionLookup = {};\n        [\n            ...ComponentUtil.ARRAY_PROPERTIES,\n            ...ComponentUtil.OBJECT_PROPERTIES,\n            ...ComponentUtil.STRING_PROPERTIES,\n            ...ComponentUtil.FUNCTION_PROPERTIES,\n            ...ComponentUtil.EVENT_CALLBACKS,\n        ]\n            .forEach((key) => coercionLookup[key] = 'none');\n        ComponentUtil.BOOLEAN_PROPERTIES\n            .forEach(key => coercionLookup[key] = 'boolean');\n        ComponentUtil.NUMBER_PROPERTIES\n            .forEach(key => coercionLookup[key] = 'number');\n        return coercionLookup;\n    }\n    static getValue(key, rawValue) {\n        const coercionStep = ComponentUtil.coercionLookup[key];\n        if (coercionStep) {\n            let newValue = rawValue;\n            switch (coercionStep) {\n                case 'number': {\n                    newValue = ComponentUtil.toNumber(rawValue);\n                    break;\n                }\n                case 'boolean': {\n                    newValue = ComponentUtil.toBoolean(rawValue);\n                    break;\n                }\n                case 'none': {\n                    // if groupAggFiltering exists and isn't a function, handle as a boolean.\n                    if (key === 'groupAggFiltering' && typeof rawValue !== 'function') {\n                        newValue = ComponentUtil.toBoolean(rawValue);\n                    }\n                    break;\n                }\n            }\n            return newValue;\n        }\n        return undefined;\n    }\n    static getGridOptionKeys(component, isVue) {\n        // Vue does not have keys in prod so instead need to run through all the \n        // gridOptions checking for presence of a gridOption key.\n        return isVue\n            ? Object.keys(ComponentUtil.coercionLookup)\n            : Object.keys(component);\n    }\n    static copyAttributesToGridOptions(gridOptions, component, isVue = false) {\n        // create empty grid options if none were passed\n        if (typeof gridOptions !== 'object') {\n            gridOptions = {};\n        }\n        // to allow array style lookup in TypeScript, take type away from 'this' and 'gridOptions'\n        const pGridOptions = gridOptions;\n        const keys = ComponentUtil.getGridOptionKeys(component, isVue);\n        // Loop through component props, if they are not undefined and a valid gridOption copy to gridOptions\n        keys.forEach(key => {\n            const value = component[key];\n            if (typeof value !== 'undefined') {\n                const coercedValue = ComponentUtil.getValue(key, value);\n                if (coercedValue !== undefined) {\n                    pGridOptions[key] = coercedValue;\n                }\n            }\n        });\n        return gridOptions;\n    }\n    static processOnChange(changes, api) {\n        if (!changes || Object.keys(changes).length === 0) {\n            return;\n        }\n        const changesToApply = Object.assign({}, changes);\n        // We manually call these updates so that we can provide a different source of gridOptionsChanged\n        // We do not call setProperty as this will be called by the grid api methods\n        if (changesToApply.columnTypes) {\n            api.setColumnTypes(changesToApply.columnTypes.currentValue, \"gridOptionsChanged\");\n            delete changesToApply.columnTypes;\n        }\n        if (changesToApply.autoGroupColumnDef) {\n            api.setAutoGroupColumnDef(changesToApply.autoGroupColumnDef.currentValue, \"gridOptionsChanged\");\n            delete changesToApply.autoGroupColumnDef;\n        }\n        if (changesToApply.defaultColDef) {\n            api.setDefaultColDef(changesToApply.defaultColDef.currentValue, \"gridOptionsChanged\");\n            delete changesToApply.defaultColDef;\n        }\n        if (changesToApply.columnDefs) {\n            api.setColumnDefs(changesToApply.columnDefs.currentValue, \"gridOptionsChanged\");\n            delete changesToApply.columnDefs;\n        }\n        Object.keys(changesToApply).forEach(key => {\n            const gridKey = key;\n            const coercedValue = ComponentUtil.getValue(gridKey, changesToApply[gridKey].currentValue);\n            api.__setProperty(gridKey, coercedValue);\n        });\n        // copy changes into an event for dispatch\n        const event = {\n            type: Events.EVENT_COMPONENT_STATE_CHANGED\n        };\n        iterateObject(changes, (key, value) => {\n            event[key] = value;\n        });\n        api.dispatchEvent(event);\n    }\n    static toBoolean(value) {\n        if (typeof value === 'boolean') {\n            return value;\n        }\n        if (typeof value === 'string') {\n            // for boolean, compare to empty String to allow attributes appearing with\n            // no value to be treated as 'true'\n            return value.toUpperCase() === 'TRUE' || value == '';\n        }\n        return false;\n    }\n    static toNumber(value) {\n        if (typeof value === 'number') {\n            return value;\n        }\n        if (typeof value === 'string') {\n            return Number(value);\n        }\n    }\n}\n// all events\nComponentUtil.EVENTS = values(Events);\n// events that are internal to AG Grid and should not be exposed to users via documentation or generated framework components\n/** Exclude the following internal events from code generation to prevent exposing these events via framework components */\nComponentUtil.EXCLUDED_INTERNAL_EVENTS = [\n    Events.EVENT_SCROLLBAR_WIDTH_CHANGED,\n    Events.EVENT_CHECKBOX_CHANGED,\n    Events.EVENT_HEIGHT_SCALE_CHANGED,\n    Events.EVENT_BODY_HEIGHT_CHANGED,\n    Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED,\n    Events.EVENT_SCROLL_VISIBILITY_CHANGED,\n    Events.EVENT_COLUMN_HOVER_CHANGED,\n    Events.EVENT_FLASH_CELLS,\n    Events.EVENT_PAGINATION_PIXEL_OFFSET_CHANGED,\n    Events.EVENT_DISPLAYED_ROWS_CHANGED,\n    Events.EVENT_LEFT_PINNED_WIDTH_CHANGED,\n    Events.EVENT_RIGHT_PINNED_WIDTH_CHANGED,\n    Events.EVENT_ROW_CONTAINER_HEIGHT_CHANGED,\n    Events.EVENT_POPUP_TO_FRONT,\n    Events.EVENT_KEYBOARD_FOCUS,\n    Events.EVENT_MOUSE_FOCUS,\n    Events.EVENT_STORE_UPDATED,\n    Events.EVENT_COLUMN_PANEL_ITEM_DRAG_START,\n    Events.EVENT_COLUMN_PANEL_ITEM_DRAG_END,\n    Events.EVENT_FILL_START,\n    Events.EVENT_FILL_END,\n    Events.EVENT_KEY_SHORTCUT_CHANGED_CELL_START,\n    Events.EVENT_KEY_SHORTCUT_CHANGED_CELL_END,\n    Events.EVENT_FULL_WIDTH_ROW_FOCUSED,\n    Events.EVENT_HEADER_HEIGHT_CHANGED,\n    Events.EVENT_COLUMN_HEADER_HEIGHT_CHANGED,\n    Events.EVENT_CELL_FOCUS_CLEARED,\n    Events.EVENT_GRID_STYLES_CHANGED,\n    Events.EVENT_FILTER_DESTROYED\n];\n// events that are available for use by users of AG Grid and so should be documented\n/** EVENTS that should be exposed via code generation for the framework components.  */\nComponentUtil.PUBLIC_EVENTS = ComponentUtil.EVENTS.filter(e => !includes(ComponentUtil.EXCLUDED_INTERNAL_EVENTS, e));\n// onXXX methods, based on the above events\nComponentUtil.EVENT_CALLBACKS = ComponentUtil.EVENTS.map(event => ComponentUtil.getCallbackForEvent(event));\nComponentUtil.STRING_PROPERTIES = PropertyKeys.STRING_PROPERTIES;\nComponentUtil.OBJECT_PROPERTIES = PropertyKeys.OBJECT_PROPERTIES;\nComponentUtil.ARRAY_PROPERTIES = PropertyKeys.ARRAY_PROPERTIES;\nComponentUtil.NUMBER_PROPERTIES = PropertyKeys.NUMBER_PROPERTIES;\nComponentUtil.BOOLEAN_PROPERTIES = PropertyKeys.BOOLEAN_PROPERTIES;\nComponentUtil.FUNCTION_PROPERTIES = PropertyKeys.FUNCTION_PROPERTIES;\nComponentUtil.ALL_PROPERTIES = PropertyKeys.ALL_PROPERTIES;\nComponentUtil.ALL_PROPERTIES_SET = new Set(PropertyKeys.ALL_PROPERTIES);\nComponentUtil.coercionLookup = ComponentUtil.getCoercionLookup();\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nfunction fuzzyCheckStrings(inputValues, validValues, allSuggestions) {\n    const fuzzyMatches = {};\n    const invalidInputs = inputValues.filter(inputValue => !validValues.some((validValue) => validValue === inputValue));\n    if (invalidInputs.length > 0) {\n        invalidInputs.forEach(invalidInput => fuzzyMatches[invalidInput] = fuzzySuggestions(invalidInput, allSuggestions));\n    }\n    return fuzzyMatches;\n}\n/**\n *\n * @param {String} inputValue The value to be compared against a list of strings\n * @param allSuggestions The list of strings to be compared against\n */\nfunction fuzzySuggestions(inputValue, allSuggestions, hideIrrelevant, filterByPercentageOfBestMatch) {\n    let thisSuggestions = allSuggestions.map((text) => ({\n        value: text,\n        relevance: stringWeightedDistances(inputValue.toLowerCase(), text.toLocaleLowerCase())\n    }));\n    thisSuggestions.sort((a, b) => b.relevance - a.relevance);\n    if (hideIrrelevant) {\n        thisSuggestions = thisSuggestions.filter(suggestion => suggestion.relevance !== 0);\n    }\n    if (filterByPercentageOfBestMatch && filterByPercentageOfBestMatch > 0) {\n        const bestMatch = thisSuggestions[0].relevance;\n        const limit = bestMatch * filterByPercentageOfBestMatch;\n        thisSuggestions = thisSuggestions.filter(suggestion => limit - suggestion.relevance < 0);\n    }\n    return thisSuggestions.map(suggestion => suggestion.value);\n}\nfunction stringWeightedDistances(str1, str2) {\n    const a = str1.replace(/\\s/g, '');\n    const b = str2.replace(/\\s/g, '');\n    let weight = 0;\n    let lastIndex = -1;\n    for (let i = 0; i < a.length; i++) {\n        const idx = b.indexOf(a[i], lastIndex + 1);\n        if (idx === -1) {\n            continue;\n        }\n        lastIndex = idx;\n        weight += (100 - (lastIndex * 100 / 10000) * 100);\n    }\n    return weight;\n}\n\nvar FuzzyMatchUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    fuzzyCheckStrings: fuzzyCheckStrings,\n    fuzzySuggestions: fuzzySuggestions\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2x = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nfunction logDeprecation(version, oldProp, newProp, message) {\n    const newPropMsg = newProp ? `Please use '${newProp}' instead. ` : '';\n    doOnce(() => console.warn(`AG Grid: since v${version}, '${oldProp}' is deprecated. ${newPropMsg}${message !== null && message !== void 0 ? message : ''}`), `Deprecated_${oldProp}`);\n}\n// Vue adds these properties to all objects, so we ignore them when checking for invalid properties\nconst VUE_FRAMEWORK_PROPS = ['__ob__', '__v_skip', '__metadata__'];\nlet GridOptionsValidator = class GridOptionsValidator {\n    constructor() {\n        this.deprecatedProperties = {\n            rememberGroupStateWhenNewData: { version: '24', message: 'Now that transaction updates are possible and they keep group state, this feature is no longer needed.' },\n            serverSideFilteringAlwaysResets: { version: '28.0', newProp: 'serverSideOnlyRefreshFilteredGroups', copyToNewProp: true, },\n            serverSideSortingAlwaysResets: { version: '28.0', newProp: 'serverSideSortAllLevels', copyToNewProp: true, },\n            suppressReactUi: { version: '28', message: 'The legacy React rendering engine is deprecated and will be removed in the next major version of the grid.' },\n            processSecondaryColDef: { version: '28', newProp: 'processPivotResultColDef', copyToNewProp: true },\n            processSecondaryColGroupDef: { version: '28', newProp: 'processPivotResultColGroupDef', copyToNewProp: true },\n            getServerSideStoreParams: { version: '28', newProp: 'getServerSideGroupLevelParams', copyToNewProp: true },\n            serverSideInfiniteScroll: { version: '29', message: 'Infinite Scrolling is now the default behaviour. This can be suppressed with `suppressServerSideInfiniteScroll`.' },\n            enableChartToolPanelsButton: { version: '29', message: 'The Chart Tool Panels button is now enabled by default. To hide the Chart Tool Panels button and display the hamburger button instead, set suppressChartToolPanelsButton=true.' },\n            functionsPassive: { version: '29.2' },\n            onColumnRowGroupChangeRequest: { version: '29.2' },\n            onColumnPivotChangeRequest: { version: '29.2' },\n            onColumnValueChangeRequest: { version: '29.2' },\n            onColumnAggFuncChangeRequest: { version: '29.2' },\n            serverSideFilterAllLevels: { version: '30', message: 'All server-side group levels are now filtered by default. This can be toggled using `serverSideOnlyRefreshFilteredGroups`.' },\n            suppressAggAtRootLevel: { version: '30', message: 'The root level aggregation is now suppressed by default. This can be toggled using  `alwaysAggregateAtRootLevel`.' },\n            excludeHiddenColumnsFromQuickFilter: { version: '30', message: 'Hidden columns are now excluded from the Quick Filter by default. This can be toggled using `includeHiddenColumnsInQuickFilter`.' },\n            enterMovesDown: { version: '30', newProp: 'enterNavigatesVertically', copyToNewProp: true },\n            enterMovesDownAfterEdit: { version: '30', newProp: 'enterNavigatesVerticallyAfterEdit', copyToNewProp: true },\n        };\n    }\n    pickOneWarning(prop1, prop2) {\n        console.warn(`AG Grid: ${prop1} and ${prop2} do not work with each other, you need to pick one.`);\n    }\n    init() {\n        this.checkForDeprecated();\n        this.checkForViolations();\n        if (this.gridOptions.suppressPropertyNamesCheck !== true) {\n            this.checkGridOptionsProperties();\n            this.checkColumnDefProperties();\n        }\n        this.checkColumnDefViolations();\n        if (this.gridOptionsService.is('groupSelectsChildren') && this.gridOptionsService.is('suppressParentsInRowNodes')) {\n            console.warn(\"AG Grid: 'groupSelectsChildren' does not work with 'suppressParentsInRowNodes', this selection method needs the part in rowNode to work\");\n        }\n        if (this.gridOptionsService.is('groupSelectsChildren')) {\n            if (this.gridOptionsService.get('rowSelection') !== 'multiple') {\n                console.warn(\"AG Grid: rowSelection must be 'multiple' for groupSelectsChildren to make sense\");\n            }\n        }\n        if (this.gridOptionsService.is('groupRemoveSingleChildren') && this.gridOptionsService.is('groupHideOpenParents')) {\n            this.pickOneWarning('groupRemoveSingleChildren', 'groupHideOpenParents');\n        }\n        if (this.gridOptionsService.get('domLayout') === 'autoHeight' && !this.gridOptionsService.isRowModelType('clientSide')) {\n            if (!this.gridOptionsService.is('pagination')) {\n                console.warn(`AG Grid: domLayout='autoHeight' was ignored as it is only supported by the Client-Side row model, unless using pagination.`);\n                this.gridOptions.domLayout = 'normal';\n            }\n        }\n        if (this.gridOptionsService.isRowModelType('serverSide')) {\n            const msg = (prop, alt) => (`AG Grid: '${prop}' is not supported on the Server-Side Row Model.` + (alt ? ` Please use ${alt} instead.` : ''));\n            if (this.gridOptionsService.exists('groupDefaultExpanded')) {\n                console.warn(msg('groupDefaultExpanded', 'isServerSideGroupOpenByDefault callback'));\n            }\n            if (this.gridOptionsService.exists('groupIncludeFooter') && this.gridOptionsService.is('suppressServerSideInfiniteScroll')) {\n                console.warn(msg('groupIncludeFooter'));\n            }\n            if (this.gridOptionsService.exists('groupIncludeTotalFooter')) {\n                console.warn(msg('groupIncludeTotalFooter'));\n            }\n        }\n        if (this.gridOptionsService.is('enableRangeSelection')) {\n            ModuleRegistry.assertRegistered(ModuleNames.RangeSelectionModule, 'enableRangeSelection', this.gridOptionsService.getGridId());\n        }\n        else if (this.gridOptionsService.is('enableRangeHandle') || this.gridOptionsService.is('enableFillHandle')) {\n            console.warn(\"AG Grid: 'enableRangeHandle' or 'enableFillHandle' will not work unless 'enableRangeSelection' is set to true\");\n        }\n        const validateRegistered = (prop, module) => this.gridOptionsService.exists(prop) && ModuleRegistry.assertRegistered(module, prop, this.gridOptionsService.getGridId());\n        // Ensure the SideBar is registered which will then lead them to register Column / Filter Tool panels as required by their config.\n        // It is possible to use the SideBar only with your own custom tool panels.\n        validateRegistered('sideBar', ModuleNames.SideBarModule);\n        validateRegistered('statusBar', ModuleNames.StatusBarModule);\n        validateRegistered('enableCharts', ModuleNames.GridChartsModule);\n        validateRegistered('getMainMenuItems', ModuleNames.MenuModule);\n        validateRegistered('getContextMenuItems', ModuleNames.MenuModule);\n        validateRegistered('allowContextMenuWithControlKey', ModuleNames.MenuModule);\n    }\n    checkColumnDefProperties() {\n        if (this.gridOptions.columnDefs == null) {\n            return;\n        }\n        const validProperties = ColDefUtil.ALL_PROPERTIES;\n        const validateColDef = (colDef, propertyName) => {\n            const userProperties = Object.getOwnPropertyNames(colDef);\n            this.checkProperties(userProperties, [...validProperties, ...VUE_FRAMEWORK_PROPS], validProperties, propertyName, 'https://www.ag-grid.com/javascript-data-grid/column-properties/');\n            if (colDef.children) {\n                colDef.children.forEach(child => validateColDef(child, 'columnDefs.children'));\n            }\n        };\n        this.gridOptions.columnDefs.forEach(colDef => validateColDef(colDef, 'columnDefs'));\n        if (this.gridOptions.defaultColDef) {\n            validateColDef(this.gridOptions.defaultColDef, 'defaultColDef');\n        }\n    }\n    checkColumnDefViolations() {\n        var _a;\n        const rowModel = (_a = this.gridOptionsService.get('rowModelType')) !== null && _a !== void 0 ? _a : 'clientSide';\n        const unsupportedPropertiesMap = {\n            infinite: ['headerCheckboxSelection', 'headerCheckboxSelectionFilteredOnly', 'headerCheckboxSelectionCurrentPageOnly'],\n            viewport: ['headerCheckboxSelection', 'headerCheckboxSelectionFilteredOnly', 'headerCheckboxSelectionCurrentPageOnly'],\n            serverSide: ['headerCheckboxSelectionFilteredOnly', 'headerCheckboxSelectionCurrentPageOnly'],\n            clientSide: [],\n        };\n        const unsupportedProperties = unsupportedPropertiesMap[rowModel];\n        if (!(unsupportedProperties === null || unsupportedProperties === void 0 ? void 0 : unsupportedProperties.length)) {\n            return;\n        }\n        const validateColDef = (colDef) => {\n            unsupportedProperties.forEach(property => {\n                if (property in colDef && !!colDef[property]) {\n                    console.warn(`AG Grid: Column property ${property} is not supported with the row model type ${rowModel}.`);\n                }\n            });\n        };\n        if (this.gridOptions.columnDefs != null) {\n            this.gridOptions.columnDefs.forEach(colDef => validateColDef(colDef));\n        }\n        if (this.gridOptions.autoGroupColumnDef != null) {\n            validateColDef(this.gridOptions.autoGroupColumnDef);\n        }\n        if (this.gridOptions.defaultColDef != null) {\n            validateColDef(this.gridOptions.defaultColDef);\n        }\n    }\n    checkGridOptionsProperties() {\n        const userProperties = Object.getOwnPropertyNames(this.gridOptions);\n        const validProperties = [\n            ...PropertyKeys.ALL_PROPERTIES,\n            ...ComponentUtil.EVENT_CALLBACKS\n        ];\n        const validPropertiesAndExceptions = [...validProperties, 'api', 'columnApi', ...VUE_FRAMEWORK_PROPS, ...Object.keys(this.deprecatedProperties)];\n        this.checkProperties(userProperties, validPropertiesAndExceptions, validProperties, 'gridOptions', 'https://www.ag-grid.com/javascript-data-grid/grid-options/');\n    }\n    checkProperties(userProperties, validPropertiesAndExceptions, validProperties, containerName, docsUrl) {\n        const invalidProperties = fuzzyCheckStrings(userProperties, validPropertiesAndExceptions, validProperties);\n        iterateObject(invalidProperties, (key, value) => {\n            doOnce(() => console.warn(`AG Grid: invalid ${containerName} property '${key}' did you mean any of these: ${value.slice(0, 8).join(\", \")}`), 'invalidProperty' + containerName + key);\n        });\n        if (Object.keys(invalidProperties).length > 0) {\n            doOnce(() => console.warn(`AG Grid: to see all the valid ${containerName} properties please check: ${docsUrl}`), 'invalidProperties' + containerName + docsUrl);\n        }\n    }\n    checkForDeprecated() {\n        // casting to generic object, so typescript compiles even though\n        // we are looking for attributes that don't exist\n        const options = this.gridOptions;\n        Object.entries(this.deprecatedProperties).forEach(([oldProp, details]) => {\n            var _a;\n            const oldPropValue = options[oldProp];\n            if (oldPropValue) {\n                logDeprecation(details.version, oldProp, details.newProp, details.message);\n                if (details.copyToNewProp && details.newProp && options[details.newProp] == null) {\n                    options[details.newProp] = (_a = details.newPropValue) !== null && _a !== void 0 ? _a : oldPropValue;\n                }\n            }\n        });\n        // Manual messages and deprecation behaviour that don't fit our standard approach above.\n        if (options.serverSideStoreType) {\n            console.warn('AG Grid: since v29.0, `serverSideStoreType` has been replaced by `suppressServerSideInfiniteScroll`. Set to false to use Partial Store, and true to use Full Store.');\n            options.suppressServerSideInfiniteScroll = options.serverSideStoreType !== 'partial';\n        }\n    }\n    checkForViolations() {\n        if (this.gridOptionsService.is('treeData')) {\n            this.treeDataViolations();\n        }\n    }\n    treeDataViolations() {\n        if (this.gridOptionsService.isRowModelType('clientSide')) {\n            if (!this.gridOptionsService.exists('getDataPath')) {\n                console.warn('AG Grid: property usingTreeData=true with rowModel=clientSide, but you did not ' +\n                    'provide getDataPath function, please provide getDataPath function if using tree data.');\n            }\n        }\n        if (this.gridOptionsService.isRowModelType('serverSide')) {\n            if (!this.gridOptionsService.exists('isServerSideGroup')) {\n                console.warn('AG Grid: property usingTreeData=true with rowModel=serverSide, but you did not ' +\n                    'provide isServerSideGroup function, please provide isServerSideGroup function if using tree data.');\n            }\n            if (!this.gridOptionsService.exists('getServerSideGroupKey')) {\n                console.warn('AG Grid: property usingTreeData=true with rowModel=serverSide, but you did not ' +\n                    'provide getServerSideGroupKey function, please provide getServerSideGroupKey function if using tree data.');\n            }\n        }\n    }\n};\n__decorate$2x([\n    Autowired('gridOptions')\n], GridOptionsValidator.prototype, \"gridOptions\", void 0);\n__decorate$2x([\n    Autowired('gridOptionsService')\n], GridOptionsValidator.prototype, \"gridOptionsService\", void 0);\n__decorate$2x([\n    PostConstruct\n], GridOptionsValidator.prototype, \"init\", null);\nGridOptionsValidator = __decorate$2x([\n    Bean('gridOptionsValidator')\n], GridOptionsValidator);\nfunction matchesGroupDisplayType(toMatch, supplied) {\n    const groupDisplayTypeValues = ['groupRows', 'multipleColumns', 'custom', 'singleColumn'];\n    if (groupDisplayTypeValues.indexOf(supplied) < 0) {\n        console.warn(`AG Grid: '${supplied}' is not a valid groupDisplayType value - possible values are: '${groupDisplayTypeValues.join(\"', '\")}'`);\n        return false;\n    }\n    return supplied === toMatch;\n}\nfunction matchesTreeDataDisplayType(toMatch, supplied) {\n    const treeDataDisplayTypeValues = ['auto', 'custom'];\n    if (treeDataDisplayTypeValues.indexOf(supplied) < 0) {\n        console.warn(`AG Grid: '${supplied}' is not a valid treeDataDisplayType value - possible values are: '${treeDataDisplayTypeValues.join(\"', '\")}'`);\n        return false;\n    }\n    return supplied === toMatch;\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2w = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param$8 = (undefined && undefined.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nlet ColumnModel = class ColumnModel extends BeanStub {\n    constructor() {\n        super(...arguments);\n        // header row count, based on user provided columns\n        this.primaryHeaderRowCount = 0;\n        this.secondaryHeaderRowCount = 0;\n        // header row count, either above, or based on pivoting if we are pivoting\n        this.gridHeaderRowCount = 0;\n        // leave level columns of the displayed trees\n        this.displayedColumnsLeft = [];\n        this.displayedColumnsRight = [];\n        this.displayedColumnsCenter = [];\n        // all three lists above combined\n        this.displayedColumns = [];\n        // for fast lookup, to see if a column or group is still displayed\n        this.displayedColumnsAndGroupsMap = {};\n        // all columns to be rendered\n        this.viewportColumns = [];\n        // A hash key to keep track of changes in viewport columns\n        this.viewportColumnsHash = '';\n        // same as viewportColumns, except we always include columns with headerAutoHeight\n        this.headerViewportColumns = [];\n        // all columns to be rendered in the centre\n        this.viewportColumnsCenter = [];\n        // same as viewportColumnsCenter, except we always include columns with headerAutoHeight\n        this.headerViewportColumnsCenter = [];\n        this.autoHeightActiveAtLeastOnce = false;\n        this.rowGroupColumns = [];\n        this.valueColumns = [];\n        this.pivotColumns = [];\n        this.ready = false;\n        this.autoGroupsNeedBuilding = false;\n        this.forceRecreateAutoGroups = false;\n        this.pivotMode = false;\n        this.bodyWidth = 0;\n        this.leftWidth = 0;\n        this.rightWidth = 0;\n        this.bodyWidthDirty = true;\n    }\n    init() {\n        this.suppressColumnVirtualisation = this.gridOptionsService.is('suppressColumnVirtualisation');\n        const pivotMode = this.gridOptionsService.is('pivotMode');\n        if (this.isPivotSettingAllowed(pivotMode)) {\n            this.pivotMode = pivotMode;\n        }\n        this.usingTreeData = this.gridOptionsService.isTreeData();\n        this.addManagedPropertyListener('groupDisplayType', () => this.onAutoGroupColumnDefChanged());\n        this.addManagedPropertyListener('autoGroupColumnDef', () => this.onAutoGroupColumnDefChanged());\n        this.addManagedPropertyListener('defaultColDef', (params) => this.onSharedColDefChanged(params.source));\n        this.addManagedPropertyListener('columnTypes', (params) => this.onSharedColDefChanged(params.source));\n    }\n    onAutoGroupColumnDefChanged() {\n        this.autoGroupsNeedBuilding = true;\n        this.forceRecreateAutoGroups = true;\n        this.updateGridColumns();\n        this.updateDisplayedColumns('gridOptionsChanged');\n    }\n    onSharedColDefChanged(source = 'api') {\n        // likewise for autoGroupCol, the default col def impacts this\n        this.forceRecreateAutoGroups = true;\n        this.createColumnsFromColumnDefs(true, source);\n    }\n    setColumnDefs(columnDefs, source = 'api') {\n        const colsPreviouslyExisted = !!this.columnDefs;\n        this.columnDefs = columnDefs;\n        this.createColumnsFromColumnDefs(colsPreviouslyExisted, source);\n    }\n    recreateColumnDefs(source = 'api') {\n        this.onSharedColDefChanged(source);\n    }\n    destroyOldColumns(oldTree, newTree) {\n        const oldObjectsById = {};\n        if (!oldTree) {\n            return;\n        }\n        // add in all old columns to be destroyed\n        this.columnUtils.depthFirstOriginalTreeSearch(null, oldTree, child => {\n            oldObjectsById[child.getInstanceId()] = child;\n        });\n        // however we don't destroy anything in the new tree. if destroying the grid, there is no new tree\n        if (newTree) {\n            this.columnUtils.depthFirstOriginalTreeSearch(null, newTree, child => {\n                oldObjectsById[child.getInstanceId()] = null;\n            });\n        }\n        // what's left can be destroyed\n        const colsToDestroy = Object.values(oldObjectsById).filter(item => item != null);\n        this.destroyBeans(colsToDestroy);\n    }\n    destroyColumns() {\n        this.destroyOldColumns(this.primaryColumnTree);\n        this.destroyOldColumns(this.secondaryBalancedTree);\n        this.destroyOldColumns(this.groupAutoColsBalancedTree);\n    }\n    createColumnsFromColumnDefs(colsPreviouslyExisted, source = 'api') {\n        // only need to dispatch before/after events if updating columns, never if setting columns for first time\n        const dispatchEventsFunc = colsPreviouslyExisted ? this.compareColumnStatesAndDispatchEvents(source) : undefined;\n        // always invalidate cache on changing columns, as the column id's for the new columns\n        // could overlap with the old id's, so the cache would return old values for new columns.\n        this.valueCache.expire();\n        // NOTE ==================\n        // we should be destroying the existing columns and groups if they exist, for example, the original column\n        // group adds a listener to the columns, it should be also removing the listeners\n        this.autoGroupsNeedBuilding = true;\n        const oldPrimaryColumns = this.primaryColumns;\n        const oldPrimaryTree = this.primaryColumnTree;\n        const balancedTreeResult = this.columnFactory.createColumnTree(this.columnDefs, true, oldPrimaryTree);\n        this.destroyOldColumns(this.primaryColumnTree, balancedTreeResult.columnTree);\n        this.primaryColumnTree = balancedTreeResult.columnTree;\n        this.primaryHeaderRowCount = balancedTreeResult.treeDept + 1;\n        this.primaryColumns = this.getColumnsFromTree(this.primaryColumnTree);\n        this.primaryColumnsMap = {};\n        this.primaryColumns.forEach(col => this.primaryColumnsMap[col.getId()] = col);\n        this.extractRowGroupColumns(source, oldPrimaryColumns);\n        this.extractPivotColumns(source, oldPrimaryColumns);\n        this.extractValueColumns(source, oldPrimaryColumns);\n        this.ready = true;\n        // if we are showing secondary columns, then no need to update grid columns\n        // at this point, as it's the pivot service responsibility to change these\n        // if we are no longer pivoting (ie and need to revert back to primary, otherwise\n        // we shouldn't be touching the primary).\n        const gridColsNotProcessed = this.gridColsArePrimary === undefined;\n        const processGridCols = this.gridColsArePrimary || gridColsNotProcessed;\n        if (processGridCols) {\n            this.updateGridColumns();\n            if (colsPreviouslyExisted && !this.gridOptionsService.is('maintainColumnOrder')) {\n                this.orderGridColumnsLikePrimary();\n            }\n            this.updateDisplayedColumns(source);\n            this.checkViewportColumns();\n        }\n        // this event is not used by AG Grid, but left here for backwards compatibility,\n        // in case applications use it\n        this.dispatchEverythingChanged(source);\n        if (dispatchEventsFunc) {\n            dispatchEventsFunc();\n        }\n        this.dispatchNewColumnsLoaded();\n    }\n    dispatchNewColumnsLoaded() {\n        const newColumnsLoadedEvent = {\n            type: Events.EVENT_NEW_COLUMNS_LOADED\n        };\n        this.eventService.dispatchEvent(newColumnsLoadedEvent);\n    }\n    // this event is legacy, no grid code listens to it. instead the grid listens to New Columns Loaded\n    dispatchEverythingChanged(source = 'api') {\n        const eventEverythingChanged = {\n            type: Events.EVENT_COLUMN_EVERYTHING_CHANGED,\n            source\n        };\n        this.eventService.dispatchEvent(eventEverythingChanged);\n    }\n    orderGridColumnsLikePrimary() {\n        const primaryColumns = this.primaryColumns;\n        if (!primaryColumns) {\n            return;\n        }\n        this.gridColumns.sort((colA, colB) => {\n            const primaryIndexA = primaryColumns.indexOf(colA);\n            const primaryIndexB = primaryColumns.indexOf(colB);\n            // if both cols are present in primary, then we just return the position,\n            // so position is maintained.\n            const indexAPresent = primaryIndexA >= 0;\n            const indexBPresent = primaryIndexB >= 0;\n            if (indexAPresent && indexBPresent) {\n                return primaryIndexA - primaryIndexB;\n            }\n            if (indexAPresent) {\n                // B is auto group column, so put B first\n                return 1;\n            }\n            if (indexBPresent) {\n                // A is auto group column, so put A first\n                return -1;\n            }\n            // otherwise both A and B are auto-group columns. so we just keep the order\n            // as they were already in.\n            const gridIndexA = this.gridColumns.indexOf(colA);\n            const gridIndexB = this.gridColumns.indexOf(colB);\n            return gridIndexA - gridIndexB;\n        });\n        this.gridColumns = this.placeLockedColumns(this.gridColumns);\n    }\n    getAllDisplayedAutoHeightCols() {\n        return this.displayedAutoHeightCols;\n    }\n    setViewport() {\n        if (this.gridOptionsService.is('enableRtl')) {\n            this.viewportLeft = this.bodyWidth - this.scrollPosition - this.scrollWidth;\n            this.viewportRight = this.bodyWidth - this.scrollPosition;\n        }\n        else {\n            this.viewportLeft = this.scrollPosition;\n            this.viewportRight = this.scrollWidth + this.scrollPosition;\n        }\n    }\n    // used by clipboard service, to know what columns to paste into\n    getDisplayedColumnsStartingAt(column) {\n        let currentColumn = column;\n        const columns = [];\n        while (currentColumn != null) {\n            columns.push(currentColumn);\n            currentColumn = this.getDisplayedColAfter(currentColumn);\n        }\n        return columns;\n    }\n    // checks what columns are currently displayed due to column virtualisation. dispatches an event\n    // if the list of columns has changed.\n    // + setColumnWidth(), setViewportPosition(), setColumnDefs(), sizeColumnsToFit()\n    checkViewportColumns() {\n        // check displayCenterColumnTree exists first, as it won't exist when grid is initialising\n        if (this.displayedColumnsCenter == null) {\n            return;\n        }\n        const viewportColumnsChanged = this.extractViewport();\n        if (!viewportColumnsChanged) {\n            return;\n        }\n        const event = {\n            type: Events.EVENT_VIRTUAL_COLUMNS_CHANGED\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    setViewportPosition(scrollWidth, scrollPosition) {\n        if (scrollWidth !== this.scrollWidth || scrollPosition !== this.scrollPosition || this.bodyWidthDirty) {\n            this.scrollWidth = scrollWidth;\n            this.scrollPosition = scrollPosition;\n            // we need to call setVirtualViewportLeftAndRight() at least once after the body width changes,\n            // as the viewport can stay the same, but in RTL, if body width changes, we need to work out the\n            // virtual columns again\n            this.bodyWidthDirty = true;\n            this.setViewport();\n            if (this.ready) {\n                this.checkViewportColumns();\n            }\n        }\n    }\n    isPivotMode() {\n        return this.pivotMode;\n    }\n    isPivotSettingAllowed(pivot) {\n        if (pivot && this.gridOptionsService.isTreeData()) {\n            console.warn(\"AG Grid: Pivot mode not available in conjunction Tree Data i.e. 'gridOptions.treeData: true'\");\n            return false;\n        }\n        return true;\n    }\n    setPivotMode(pivotMode, source = 'api') {\n        if (pivotMode === this.pivotMode || !this.isPivotSettingAllowed(this.pivotMode)) {\n            return;\n        }\n        this.pivotMode = pivotMode;\n        // we need to update grid columns to cover the scenario where user has groupDisplayType = 'custom', as\n        // this means we don't use auto group column UNLESS we are in pivot mode (it's mandatory in pivot mode),\n        // so need to updateGridColumn() to check it autoGroupCol needs to be added / removed\n        this.autoGroupsNeedBuilding = true;\n        this.updateGridColumns();\n        this.updateDisplayedColumns(source);\n        const event = {\n            type: Events.EVENT_COLUMN_PIVOT_MODE_CHANGED\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    getSecondaryPivotColumn(pivotKeys, valueColKey) {\n        if (missing(this.secondaryColumns)) {\n            return null;\n        }\n        const valueColumnToFind = this.getPrimaryColumn(valueColKey);\n        let foundColumn = null;\n        this.secondaryColumns.forEach(column => {\n            const thisPivotKeys = column.getColDef().pivotKeys;\n            const pivotValueColumn = column.getColDef().pivotValueColumn;\n            const pivotKeyMatches = areEqual(thisPivotKeys, pivotKeys);\n            const pivotValueMatches = pivotValueColumn === valueColumnToFind;\n            if (pivotKeyMatches && pivotValueMatches) {\n                foundColumn = column;\n            }\n        });\n        return foundColumn;\n    }\n    setBeans(loggerFactory) {\n        this.logger = loggerFactory.create('columnModel');\n    }\n    setFirstRightAndLastLeftPinned(source) {\n        let lastLeft;\n        let firstRight;\n        if (this.gridOptionsService.is('enableRtl')) {\n            lastLeft = this.displayedColumnsLeft ? this.displayedColumnsLeft[0] : null;\n            firstRight = this.displayedColumnsRight ? last(this.displayedColumnsRight) : null;\n        }\n        else {\n            lastLeft = this.displayedColumnsLeft ? last(this.displayedColumnsLeft) : null;\n            firstRight = this.displayedColumnsRight ? this.displayedColumnsRight[0] : null;\n        }\n        this.gridColumns.forEach((column) => {\n            column.setLastLeftPinned(column === lastLeft, source);\n            column.setFirstRightPinned(column === firstRight, source);\n        });\n    }\n    autoSizeColumns(params) {\n        const { columns, skipHeader, skipHeaderGroups, stopAtGroup, source = 'api' } = params;\n        // because of column virtualisation, we can only do this function on columns that are\n        // actually rendered, as non-rendered columns (outside the viewport and not rendered\n        // due to column virtualisation) are not present. this can result in all rendered columns\n        // getting narrowed, which in turn introduces more rendered columns on the RHS which\n        // did not get autosized in the original run, leaving the visible grid with columns on\n        // the LHS sized, but RHS no. so we keep looping through the visible columns until\n        // no more cols are available (rendered) to be resized\n        // we autosize after animation frames finish in case any cell renderers need to complete first. this can\n        // happen eg if client code is calling api.autoSizeAllColumns() straight after grid is initialised, but grid\n        // hasn't fully drawn out all the cells yet (due to cell renderers in animation frames).\n        this.animationFrameService.flushAllFrames();\n        // keep track of which cols we have resized in here\n        const columnsAutosized = [];\n        // initialise with anything except 0 so that while loop executes at least once\n        let changesThisTimeAround = -1;\n        const shouldSkipHeader = skipHeader != null ? skipHeader : this.gridOptionsService.is('skipHeaderOnAutoSize');\n        const shouldSkipHeaderGroups = skipHeaderGroups != null ? skipHeaderGroups : shouldSkipHeader;\n        while (changesThisTimeAround !== 0) {\n            changesThisTimeAround = 0;\n            this.actionOnGridColumns(columns, (column) => {\n                // if already autosized, skip it\n                if (columnsAutosized.indexOf(column) >= 0) {\n                    return false;\n                }\n                // get how wide this col should be\n                const preferredWidth = this.autoWidthCalculator.getPreferredWidthForColumn(column, shouldSkipHeader);\n                // preferredWidth = -1 if this col is not on the screen\n                if (preferredWidth > 0) {\n                    const newWidth = this.normaliseColumnWidth(column, preferredWidth);\n                    column.setActualWidth(newWidth, source);\n                    columnsAutosized.push(column);\n                    changesThisTimeAround++;\n                }\n                return true;\n            }, source);\n        }\n        if (!shouldSkipHeaderGroups) {\n            this.autoSizeColumnGroupsByColumns(columns, source, stopAtGroup);\n        }\n        this.dispatchColumnResizedEvent(columnsAutosized, true, 'autosizeColumns');\n    }\n    dispatchColumnResizedEvent(columns, finished, source, flexColumns = null) {\n        if (columns && columns.length) {\n            const event = {\n                type: Events.EVENT_COLUMN_RESIZED,\n                columns: columns,\n                column: columns.length === 1 ? columns[0] : null,\n                flexColumns: flexColumns,\n                finished: finished,\n                source: source\n            };\n            this.eventService.dispatchEvent(event);\n        }\n    }\n    dispatchColumnChangedEvent(type, columns, source) {\n        const event = {\n            type: type,\n            columns: columns,\n            column: (columns && columns.length == 1) ? columns[0] : null,\n            source: source\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    dispatchColumnMovedEvent(params) {\n        const { movedColumns, source, toIndex, finished } = params;\n        const event = {\n            type: Events.EVENT_COLUMN_MOVED,\n            columns: movedColumns,\n            column: movedColumns && movedColumns.length === 1 ? movedColumns[0] : null,\n            toIndex,\n            finished,\n            source\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    dispatchColumnPinnedEvent(changedColumns, source) {\n        if (!changedColumns.length) {\n            return;\n        }\n        // if just one column, we use this, otherwise we don't include the col\n        const column = changedColumns.length === 1 ? changedColumns[0] : null;\n        // only include visible if it's common in all columns\n        const pinned = this.getCommonValue(changedColumns, col => col.getPinned());\n        const event = {\n            type: Events.EVENT_COLUMN_PINNED,\n            // mistake in typing, 'undefined' should be allowed, as 'null' means 'not pinned'\n            pinned: pinned != null ? pinned : null,\n            columns: changedColumns,\n            column,\n            source: source\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    dispatchColumnVisibleEvent(changedColumns, source) {\n        if (!changedColumns.length) {\n            return;\n        }\n        // if just one column, we use this, otherwise we don't include the col\n        const column = changedColumns.length === 1 ? changedColumns[0] : null;\n        // only include visible if it's common in all columns\n        const visible = this.getCommonValue(changedColumns, col => col.isVisible());\n        const event = {\n            type: Events.EVENT_COLUMN_VISIBLE,\n            visible,\n            columns: changedColumns,\n            column,\n            source: source\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    autoSizeColumn(key, skipHeader, source = \"api\") {\n        if (key) {\n            this.autoSizeColumns({ columns: [key], skipHeader, skipHeaderGroups: true, source });\n        }\n    }\n    autoSizeColumnGroupsByColumns(keys, source, stopAtGroup) {\n        const columnGroups = new Set();\n        const columns = this.getGridColumns(keys);\n        columns.forEach(col => {\n            let parent = col.getParent();\n            while (parent && parent != stopAtGroup) {\n                if (!parent.isPadding()) {\n                    columnGroups.add(parent);\n                }\n                parent = parent.getParent();\n            }\n        });\n        let headerGroupCtrl;\n        const resizedColumns = [];\n        for (const columnGroup of columnGroups) {\n            for (const headerContainerCtrl of this.ctrlsService.getHeaderRowContainerCtrls()) {\n                headerGroupCtrl = headerContainerCtrl.getHeaderCtrlForColumn(columnGroup);\n                if (headerGroupCtrl) {\n                    break;\n                }\n            }\n            if (headerGroupCtrl) {\n                headerGroupCtrl.resizeLeafColumnsToFit(source);\n            }\n        }\n        return resizedColumns;\n    }\n    autoSizeAllColumns(skipHeader, source = \"api\") {\n        const allDisplayedColumns = this.getAllDisplayedColumns();\n        this.autoSizeColumns({ columns: allDisplayedColumns, skipHeader, source });\n    }\n    // Possible candidate for reuse (alot of recursive traversal duplication)\n    getColumnsFromTree(rootColumns) {\n        const result = [];\n        const recursiveFindColumns = (childColumns) => {\n            for (let i = 0; i < childColumns.length; i++) {\n                const child = childColumns[i];\n                if (child instanceof Column) {\n                    result.push(child);\n                }\n                else if (child instanceof ProvidedColumnGroup) {\n                    recursiveFindColumns(child.getChildren());\n                }\n            }\n        };\n        recursiveFindColumns(rootColumns);\n        return result;\n    }\n    getAllDisplayedTrees() {\n        if (this.displayedTreeLeft && this.displayedTreeRight && this.displayedTreeCentre) {\n            return this.displayedTreeLeft\n                .concat(this.displayedTreeCentre)\n                .concat(this.displayedTreeRight);\n        }\n        return null;\n    }\n    // + columnSelectPanel\n    getPrimaryColumnTree() {\n        return this.primaryColumnTree;\n    }\n    // + gridPanel -> for resizing the body and setting top margin\n    getHeaderRowCount() {\n        return this.gridHeaderRowCount;\n    }\n    // + headerRenderer -> setting pinned body width\n    getDisplayedTreeLeft() {\n        return this.displayedTreeLeft;\n    }\n    // + headerRenderer -> setting pinned body width\n    getDisplayedTreeRight() {\n        return this.displayedTreeRight;\n    }\n    // + headerRenderer -> setting pinned body width\n    getDisplayedTreeCentre() {\n        return this.displayedTreeCentre;\n    }\n    // gridPanel -> ensureColumnVisible\n    isColumnDisplayed(column) {\n        return this.getAllDisplayedColumns().indexOf(column) >= 0;\n    }\n    // + csvCreator\n    getAllDisplayedColumns() {\n        return this.displayedColumns;\n    }\n    getViewportColumns() {\n        return this.viewportColumns;\n    }\n    getDisplayedLeftColumnsForRow(rowNode) {\n        if (!this.colSpanActive) {\n            return this.displayedColumnsLeft;\n        }\n        return this.getDisplayedColumnsForRow(rowNode, this.displayedColumnsLeft);\n    }\n    getDisplayedRightColumnsForRow(rowNode) {\n        if (!this.colSpanActive) {\n            return this.displayedColumnsRight;\n        }\n        return this.getDisplayedColumnsForRow(rowNode, this.displayedColumnsRight);\n    }\n    isColSpanActive() {\n        return this.colSpanActive;\n    }\n    getDisplayedColumnsForRow(rowNode, displayedColumns, filterCallback, emptySpaceBeforeColumn) {\n        const result = [];\n        let lastConsideredCol = null;\n        for (let i = 0; i < displayedColumns.length; i++) {\n            const col = displayedColumns[i];\n            const maxAllowedColSpan = displayedColumns.length - i;\n            const colSpan = Math.min(col.getColSpan(rowNode), maxAllowedColSpan);\n            const columnsToCheckFilter = [col];\n            if (colSpan > 1) {\n                const colsToRemove = colSpan - 1;\n                for (let j = 1; j <= colsToRemove; j++) {\n                    columnsToCheckFilter.push(displayedColumns[i + j]);\n                }\n                i += colsToRemove;\n            }\n            // see which cols we should take out for column virtualisation\n            let filterPasses;\n            if (filterCallback) {\n                // if user provided a callback, means some columns may not be in the viewport.\n                // the user will NOT provide a callback if we are talking about pinned areas,\n                // as pinned areas have no horizontal scroll and do not virtualise the columns.\n                // if lots of columns, that means column spanning, and we set filterPasses = true\n                // if one or more of the columns spanned pass the filter.\n                filterPasses = false;\n                columnsToCheckFilter.forEach(colForFilter => {\n                    if (filterCallback(colForFilter)) {\n                        filterPasses = true;\n                    }\n                });\n            }\n            else {\n                filterPasses = true;\n            }\n            if (filterPasses) {\n                if (result.length === 0 && lastConsideredCol) {\n                    const gapBeforeColumn = emptySpaceBeforeColumn ? emptySpaceBeforeColumn(col) : false;\n                    if (gapBeforeColumn) {\n                        result.push(lastConsideredCol);\n                    }\n                }\n                result.push(col);\n            }\n            lastConsideredCol = col;\n        }\n        return result;\n    }\n    // + rowRenderer\n    // if we are not column spanning, this just returns back the virtual centre columns,\n    // however if we are column spanning, then different rows can have different virtual\n    // columns, so we have to work out the list for each individual row.\n    getViewportCenterColumnsForRow(rowNode) {\n        if (!this.colSpanActive) {\n            return this.viewportColumnsCenter;\n        }\n        const emptySpaceBeforeColumn = (col) => {\n            const left = col.getLeft();\n            return exists(left) && left > this.viewportLeft;\n        };\n        // if doing column virtualisation, then we filter based on the viewport.\n        const filterCallback = this.suppressColumnVirtualisation ? null : this.isColumnInRowViewport.bind(this);\n        return this.getDisplayedColumnsForRow(rowNode, this.displayedColumnsCenter, filterCallback, emptySpaceBeforeColumn);\n    }\n    getAriaColumnIndex(col) {\n        return this.getAllGridColumns().indexOf(col) + 1;\n    }\n    isColumnInHeaderViewport(col) {\n        // for headers, we never filter out autoHeaderHeight columns, if calculating\n        if (col.isAutoHeaderHeight()) {\n            return true;\n        }\n        return this.isColumnInRowViewport(col);\n    }\n    isColumnInRowViewport(col) {\n        // we never filter out autoHeight columns, as we need them in the DOM for calculating Auto Height\n        if (col.isAutoHeight()) {\n            return true;\n        }\n        const columnLeft = col.getLeft() || 0;\n        const columnRight = columnLeft + col.getActualWidth();\n        // adding 200 for buffer size, so some cols off viewport are rendered.\n        // this helps horizontal scrolling so user rarely sees white space (unless\n        // they scroll horizontally fast). however we are conservative, as the more\n        // buffer the slower the vertical redraw speed\n        const leftBounds = this.viewportLeft - 200;\n        const rightBounds = this.viewportRight + 200;\n        const columnToMuchLeft = columnLeft < leftBounds && columnRight < leftBounds;\n        const columnToMuchRight = columnLeft > rightBounds && columnRight > rightBounds;\n        return !columnToMuchLeft && !columnToMuchRight;\n    }\n    // used by:\n    // + angularGrid -> setting pinned body width\n    // note: this should be cached\n    getDisplayedColumnsLeftWidth() {\n        return this.getWidthOfColsInList(this.displayedColumnsLeft);\n    }\n    // note: this should be cached\n    getDisplayedColumnsRightWidth() {\n        return this.getWidthOfColsInList(this.displayedColumnsRight);\n    }\n    updatePrimaryColumnList(keys, masterList, actionIsAdd, columnCallback, eventType, source = \"api\") {\n        if (!keys || missingOrEmpty(keys)) {\n            return;\n        }\n        let atLeastOne = false;\n        keys.forEach(key => {\n            const columnToAdd = this.getPrimaryColumn(key);\n            if (!columnToAdd) {\n                return;\n            }\n            if (actionIsAdd) {\n                if (masterList.indexOf(columnToAdd) >= 0) {\n                    return;\n                }\n                masterList.push(columnToAdd);\n            }\n            else {\n                if (masterList.indexOf(columnToAdd) < 0) {\n                    return;\n                }\n                removeFromArray(masterList, columnToAdd);\n            }\n            columnCallback(columnToAdd);\n            atLeastOne = true;\n        });\n        if (!atLeastOne) {\n            return;\n        }\n        if (this.autoGroupsNeedBuilding) {\n            this.updateGridColumns();\n        }\n        this.updateDisplayedColumns(source);\n        const event = {\n            type: eventType,\n            columns: masterList,\n            column: masterList.length === 1 ? masterList[0] : null,\n            source: source\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    setRowGroupColumns(colKeys, source = \"api\") {\n        this.autoGroupsNeedBuilding = true;\n        this.setPrimaryColumnList(colKeys, this.rowGroupColumns, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, this.setRowGroupActive.bind(this), source);\n    }\n    setRowGroupActive(active, column, source) {\n        if (active === column.isRowGroupActive()) {\n            return;\n        }\n        column.setRowGroupActive(active, source);\n        if (active && !this.gridOptionsService.is('suppressRowGroupHidesColumns')) {\n            this.setColumnVisible(column, false, source);\n        }\n        if (!active && !this.gridOptionsService.is('suppressMakeColumnVisibleAfterUnGroup')) {\n            this.setColumnVisible(column, true, source);\n        }\n    }\n    addRowGroupColumn(key, source = \"api\") {\n        if (key) {\n            this.addRowGroupColumns([key], source);\n        }\n    }\n    addRowGroupColumns(keys, source = \"api\") {\n        this.autoGroupsNeedBuilding = true;\n        this.updatePrimaryColumnList(keys, this.rowGroupColumns, true, this.setRowGroupActive.bind(this, true), Events.EVENT_COLUMN_ROW_GROUP_CHANGED, source);\n    }\n    removeRowGroupColumns(keys, source = \"api\") {\n        this.autoGroupsNeedBuilding = true;\n        this.updatePrimaryColumnList(keys, this.rowGroupColumns, false, this.setRowGroupActive.bind(this, false), Events.EVENT_COLUMN_ROW_GROUP_CHANGED, source);\n    }\n    removeRowGroupColumn(key, source = \"api\") {\n        if (key) {\n            this.removeRowGroupColumns([key], source);\n        }\n    }\n    addPivotColumns(keys, source = \"api\") {\n        this.updatePrimaryColumnList(keys, this.pivotColumns, true, column => column.setPivotActive(true, source), Events.EVENT_COLUMN_PIVOT_CHANGED, source);\n    }\n    setPivotColumns(colKeys, source = \"api\") {\n        this.setPrimaryColumnList(colKeys, this.pivotColumns, Events.EVENT_COLUMN_PIVOT_CHANGED, (added, column) => {\n            column.setPivotActive(added, source);\n        }, source);\n    }\n    addPivotColumn(key, source = \"api\") {\n        this.addPivotColumns([key], source);\n    }\n    removePivotColumns(keys, source = \"api\") {\n        this.updatePrimaryColumnList(keys, this.pivotColumns, false, column => column.setPivotActive(false, source), Events.EVENT_COLUMN_PIVOT_CHANGED, source);\n    }\n    removePivotColumn(key, source = \"api\") {\n        this.removePivotColumns([key], source);\n    }\n    setPrimaryColumnList(colKeys, masterList, eventName, columnCallback, source) {\n        masterList.length = 0;\n        if (exists(colKeys)) {\n            colKeys.forEach(key => {\n                const column = this.getPrimaryColumn(key);\n                if (column) {\n                    masterList.push(column);\n                }\n            });\n        }\n        (this.primaryColumns || []).forEach(column => {\n            const added = masterList.indexOf(column) >= 0;\n            columnCallback(added, column);\n        });\n        if (this.autoGroupsNeedBuilding) {\n            this.updateGridColumns();\n        }\n        this.updateDisplayedColumns(source);\n        this.dispatchColumnChangedEvent(eventName, masterList, source);\n    }\n    setValueColumns(colKeys, source = \"api\") {\n        this.setPrimaryColumnList(colKeys, this.valueColumns, Events.EVENT_COLUMN_VALUE_CHANGED, this.setValueActive.bind(this), source);\n    }\n    setValueActive(active, column, source) {\n        if (active === column.isValueActive()) {\n            return;\n        }\n        column.setValueActive(active, source);\n        if (active && !column.getAggFunc()) {\n            const initialAggFunc = this.aggFuncService.getDefaultAggFunc(column);\n            column.setAggFunc(initialAggFunc);\n        }\n    }\n    addValueColumns(keys, source = \"api\") {\n        this.updatePrimaryColumnList(keys, this.valueColumns, true, this.setValueActive.bind(this, true), Events.EVENT_COLUMN_VALUE_CHANGED, source);\n    }\n    addValueColumn(colKey, source = \"api\") {\n        if (colKey) {\n            this.addValueColumns([colKey], source);\n        }\n    }\n    removeValueColumn(colKey, source = \"api\") {\n        this.removeValueColumns([colKey], source);\n    }\n    removeValueColumns(keys, source = \"api\") {\n        this.updatePrimaryColumnList(keys, this.valueColumns, false, this.setValueActive.bind(this, false), Events.EVENT_COLUMN_VALUE_CHANGED, source);\n    }\n    // returns the width we can set to this col, taking into consideration min and max widths\n    normaliseColumnWidth(column, newWidth) {\n        const minWidth = column.getMinWidth();\n        if (exists(minWidth) && newWidth < minWidth) {\n            newWidth = minWidth;\n        }\n        const maxWidth = column.getMaxWidth();\n        if (exists(maxWidth) && column.isGreaterThanMax(newWidth)) {\n            newWidth = maxWidth;\n        }\n        return newWidth;\n    }\n    getPrimaryOrGridColumn(key) {\n        const column = this.getPrimaryColumn(key);\n        return column || this.getGridColumn(key);\n    }\n    setColumnWidths(columnWidths, shiftKey, // @takeFromAdjacent - if user has 'shift' pressed, then pixels are taken from adjacent column\n    finished, // @finished - ends up in the event, tells the user if more events are to come\n    source = \"api\") {\n        const sets = [];\n        columnWidths.forEach(columnWidth => {\n            const col = this.getPrimaryOrGridColumn(columnWidth.key);\n            if (!col) {\n                return;\n            }\n            sets.push({\n                width: columnWidth.newWidth,\n                ratios: [1],\n                columns: [col]\n            });\n            // if user wants to do shift resize by default, then we invert the shift operation\n            const defaultIsShift = this.gridOptionsService.get('colResizeDefault') === 'shift';\n            if (defaultIsShift) {\n                shiftKey = !shiftKey;\n            }\n            if (shiftKey) {\n                const otherCol = this.getDisplayedColAfter(col);\n                if (!otherCol) {\n                    return;\n                }\n                const widthDiff = col.getActualWidth() - columnWidth.newWidth;\n                const otherColWidth = otherCol.getActualWidth() + widthDiff;\n                sets.push({\n                    width: otherColWidth,\n                    ratios: [1],\n                    columns: [otherCol]\n                });\n            }\n        });\n        if (sets.length === 0) {\n            return;\n        }\n        this.resizeColumnSets({\n            resizeSets: sets,\n            finished,\n            source\n        });\n    }\n    checkMinAndMaxWidthsForSet(columnResizeSet) {\n        const { columns, width } = columnResizeSet;\n        // every col has a min width, so sum them all up and see if we have enough room\n        // for all the min widths\n        let minWidthAccumulated = 0;\n        let maxWidthAccumulated = 0;\n        let maxWidthActive = true;\n        columns.forEach(col => {\n            const minWidth = col.getMinWidth();\n            minWidthAccumulated += minWidth || 0;\n            const maxWidth = col.getMaxWidth();\n            if (exists(maxWidth) && maxWidth > 0) {\n                maxWidthAccumulated += maxWidth;\n            }\n            else {\n                // if at least one columns has no max width, it means the group of columns\n                // then has no max width, as at least one column can take as much width as possible\n                maxWidthActive = false;\n            }\n        });\n        const minWidthPasses = width >= minWidthAccumulated;\n        const maxWidthPasses = !maxWidthActive || (width <= maxWidthAccumulated);\n        return minWidthPasses && maxWidthPasses;\n    }\n    // method takes sets of columns and resizes them. either all sets will be resized, or nothing\n    // be resized. this is used for example when user tries to resize a group and holds shift key,\n    // then both the current group (grows), and the adjacent group (shrinks), will get resized,\n    // so that's two sets for this method.\n    resizeColumnSets(params) {\n        const { resizeSets, finished, source } = params;\n        const passMinMaxCheck = !resizeSets || resizeSets.every(columnResizeSet => this.checkMinAndMaxWidthsForSet(columnResizeSet));\n        if (!passMinMaxCheck) {\n            // even though we are not going to resize beyond min/max size, we still need to dispatch event when finished\n            if (finished) {\n                const columns = resizeSets && resizeSets.length > 0 ? resizeSets[0].columns : null;\n                this.dispatchColumnResizedEvent(columns, finished, source);\n            }\n            return; // don't resize!\n        }\n        const changedCols = [];\n        const allResizedCols = [];\n        resizeSets.forEach(set => {\n            const { width, columns, ratios } = set;\n            // keep track of pixels used, and last column gets the remaining,\n            // to cater for rounding errors, and min width adjustments\n            const newWidths = {};\n            const finishedCols = {};\n            columns.forEach(col => allResizedCols.push(col));\n            // the loop below goes through each col. if a col exceeds it's min/max width,\n            // it then gets set to its min/max width and the column is removed marked as 'finished'\n            // and the calculation is done again leaving this column out. take for example columns\n            // {A, width: 50, maxWidth: 100}\n            // {B, width: 50}\n            // {C, width: 50}\n            // and then the set is set to width 600 - on the first pass the grid tries to set each column\n            // to 200. it checks A and sees 200 > 100 and so sets the width to 100. col A is then marked\n            // as 'finished' and the calculation is done again with the remaining cols B and C, which end up\n            // splitting the remaining 500 pixels.\n            let finishedColsGrew = true;\n            let loopCount = 0;\n            while (finishedColsGrew) {\n                loopCount++;\n                if (loopCount > 1000) {\n                    // this should never happen, but in the future, someone might introduce a bug here,\n                    // so we stop the browser from hanging and report bug properly\n                    console.error('AG Grid: infinite loop in resizeColumnSets');\n                    break;\n                }\n                finishedColsGrew = false;\n                const subsetCols = [];\n                let subsetRatioTotal = 0;\n                let pixelsToDistribute = width;\n                columns.forEach((col, index) => {\n                    const thisColFinished = finishedCols[col.getId()];\n                    if (thisColFinished) {\n                        pixelsToDistribute -= newWidths[col.getId()];\n                    }\n                    else {\n                        subsetCols.push(col);\n                        const ratioThisCol = ratios[index];\n                        subsetRatioTotal += ratioThisCol;\n                    }\n                });\n                // because we are not using all of the ratios (cols can be missing),\n                // we scale the ratio. if all columns are included, then subsetRatioTotal=1,\n                // and so the ratioScale will be 1.\n                const ratioScale = 1 / subsetRatioTotal;\n                subsetCols.forEach((col, index) => {\n                    const lastCol = index === (subsetCols.length - 1);\n                    let colNewWidth;\n                    if (lastCol) {\n                        colNewWidth = pixelsToDistribute;\n                    }\n                    else {\n                        colNewWidth = Math.round(ratios[index] * width * ratioScale);\n                        pixelsToDistribute -= colNewWidth;\n                    }\n                    const minWidth = col.getMinWidth();\n                    const maxWidth = col.getMaxWidth();\n                    if (exists(minWidth) && colNewWidth < minWidth) {\n                        colNewWidth = minWidth;\n                        finishedCols[col.getId()] = true;\n                        finishedColsGrew = true;\n                    }\n                    else if (exists(maxWidth) && maxWidth > 0 && colNewWidth > maxWidth) {\n                        colNewWidth = maxWidth;\n                        finishedCols[col.getId()] = true;\n                        finishedColsGrew = true;\n                    }\n                    newWidths[col.getId()] = colNewWidth;\n                });\n            }\n            columns.forEach(col => {\n                const newWidth = newWidths[col.getId()];\n                const actualWidth = col.getActualWidth();\n                if (actualWidth !== newWidth) {\n                    col.setActualWidth(newWidth, source);\n                    changedCols.push(col);\n                }\n            });\n        });\n        // if no cols changed, then no need to update more or send event.\n        const atLeastOneColChanged = changedCols.length > 0;\n        let flexedCols = [];\n        if (atLeastOneColChanged) {\n            flexedCols = this.refreshFlexedColumns({ resizingCols: allResizedCols, skipSetLeft: true });\n            this.setLeftValues(source);\n            this.updateBodyWidths();\n            this.checkViewportColumns();\n        }\n        // check for change first, to avoid unnecessary firing of events\n        // however we always dispatch 'finished' events. this is important\n        // when groups are resized, as if the group is changing slowly,\n        // eg 1 pixel at a time, then each change will dispatch change events\n        // in all the columns in the group, but only one with get the pixel.\n        const colsForEvent = allResizedCols.concat(flexedCols);\n        if (atLeastOneColChanged || finished) {\n            this.dispatchColumnResizedEvent(colsForEvent, finished, source, flexedCols);\n        }\n    }\n    setColumnAggFunc(key, aggFunc, source = \"api\") {\n        if (!key) {\n            return;\n        }\n        const column = this.getPrimaryColumn(key);\n        if (!column) {\n            return;\n        }\n        column.setAggFunc(aggFunc);\n        this.dispatchColumnChangedEvent(Events.EVENT_COLUMN_VALUE_CHANGED, [column], source);\n    }\n    moveRowGroupColumn(fromIndex, toIndex, source = \"api\") {\n        const column = this.rowGroupColumns[fromIndex];\n        this.rowGroupColumns.splice(fromIndex, 1);\n        this.rowGroupColumns.splice(toIndex, 0, column);\n        const event = {\n            type: Events.EVENT_COLUMN_ROW_GROUP_CHANGED,\n            columns: this.rowGroupColumns,\n            column: this.rowGroupColumns.length === 1 ? this.rowGroupColumns[0] : null,\n            source: source\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    moveColumns(columnsToMoveKeys, toIndex, source = \"api\", finished = true) {\n        this.columnAnimationService.start();\n        if (toIndex > this.gridColumns.length - columnsToMoveKeys.length) {\n            console.warn('AG Grid: tried to insert columns in invalid location, toIndex = ' + toIndex);\n            console.warn('AG Grid: remember that you should not count the moving columns when calculating the new index');\n            return;\n        }\n        // we want to pull all the columns out first and put them into an ordered list\n        const movedColumns = this.getGridColumns(columnsToMoveKeys);\n        const failedRules = !this.doesMovePassRules(movedColumns, toIndex);\n        if (failedRules) {\n            return;\n        }\n        moveInArray(this.gridColumns, movedColumns, toIndex);\n        this.updateDisplayedColumns(source);\n        this.dispatchColumnMovedEvent({ movedColumns, source, toIndex, finished });\n        this.columnAnimationService.finish();\n    }\n    doesMovePassRules(columnsToMove, toIndex) {\n        // make a copy of what the grid columns would look like after the move\n        const proposedColumnOrder = this.getProposedColumnOrder(columnsToMove, toIndex);\n        return this.doesOrderPassRules(proposedColumnOrder);\n    }\n    doesOrderPassRules(gridOrder) {\n        if (!this.doesMovePassMarryChildren(gridOrder)) {\n            return false;\n        }\n        if (!this.doesMovePassLockedPositions(gridOrder)) {\n            return false;\n        }\n        return true;\n    }\n    getProposedColumnOrder(columnsToMove, toIndex) {\n        const proposedColumnOrder = this.gridColumns.slice();\n        moveInArray(proposedColumnOrder, columnsToMove, toIndex);\n        return proposedColumnOrder;\n    }\n    // returns the provided cols sorted in same order as they appear in grid columns. eg if grid columns\n    // contains [a,b,c,d,e] and col passed is [e,a] then the passed cols are sorted into [a,e]\n    sortColumnsLikeGridColumns(cols) {\n        if (!cols || cols.length <= 1) {\n            return;\n        }\n        const notAllColsInGridColumns = cols.filter(c => this.gridColumns.indexOf(c) < 0).length > 0;\n        if (notAllColsInGridColumns) {\n            return;\n        }\n        cols.sort((a, b) => {\n            const indexA = this.gridColumns.indexOf(a);\n            const indexB = this.gridColumns.indexOf(b);\n            return indexA - indexB;\n        });\n    }\n    doesMovePassLockedPositions(proposedColumnOrder) {\n        // Placement is a number indicating 'left' 'center' or 'right' as 0 1 2\n        let lastPlacement = 0;\n        let rulePassed = true;\n        const lockPositionToPlacement = (position) => {\n            if (!position) { // false or undefined\n                return 1;\n            }\n            if (position === true) {\n                return 0;\n            }\n            return position === 'left' ? 0 : 2; // Otherwise 'right'\n        };\n        proposedColumnOrder.forEach(col => {\n            const placement = lockPositionToPlacement(col.getColDef().lockPosition);\n            if (placement < lastPlacement) { // If placement goes down, we're not in the correct order\n                rulePassed = false;\n            }\n            lastPlacement = placement;\n        });\n        return rulePassed;\n    }\n    doesMovePassMarryChildren(allColumnsCopy) {\n        let rulePassed = true;\n        this.columnUtils.depthFirstOriginalTreeSearch(null, this.gridBalancedTree, child => {\n            if (!(child instanceof ProvidedColumnGroup)) {\n                return;\n            }\n            const columnGroup = child;\n            const colGroupDef = columnGroup.getColGroupDef();\n            const marryChildren = colGroupDef && colGroupDef.marryChildren;\n            if (!marryChildren) {\n                return;\n            }\n            const newIndexes = [];\n            columnGroup.getLeafColumns().forEach(col => {\n                const newColIndex = allColumnsCopy.indexOf(col);\n                newIndexes.push(newColIndex);\n            });\n            const maxIndex = Math.max.apply(Math, newIndexes);\n            const minIndex = Math.min.apply(Math, newIndexes);\n            // spread is how far the first column in this group is away from the last column\n            const spread = maxIndex - minIndex;\n            const maxSpread = columnGroup.getLeafColumns().length - 1;\n            // if the columns\n            if (spread > maxSpread) {\n                rulePassed = false;\n            }\n            // console.log(`maxIndex = ${maxIndex}, minIndex = ${minIndex}, spread = ${spread}, maxSpread = ${maxSpread}, fail = ${spread > (count-1)}`)\n            // console.log(allColumnsCopy.map( col => col.getColDef().field).join(','));\n        });\n        return rulePassed;\n    }\n    moveColumn(key, toIndex, source = \"api\") {\n        this.moveColumns([key], toIndex, source);\n    }\n    moveColumnByIndex(fromIndex, toIndex, source = \"api\") {\n        const column = this.gridColumns[fromIndex];\n        this.moveColumn(column, toIndex, source);\n    }\n    getColumnDefs() {\n        if (!this.primaryColumns) {\n            return;\n        }\n        const cols = this.primaryColumns.slice();\n        if (this.gridColsArePrimary) {\n            cols.sort((a, b) => this.gridColumns.indexOf(a) - this.gridColumns.indexOf(b));\n        }\n        else if (this.lastPrimaryOrder) {\n            cols.sort((a, b) => this.lastPrimaryOrder.indexOf(a) - this.lastPrimaryOrder.indexOf(b));\n        }\n        return this.columnDefFactory.buildColumnDefs(cols, this.rowGroupColumns, this.pivotColumns);\n    }\n    // used by:\n    // + angularGrid -> for setting body width\n    // + rowController -> setting main row widths (when inserting and resizing)\n    // need to cache this\n    getBodyContainerWidth() {\n        return this.bodyWidth;\n    }\n    getContainerWidth(pinned) {\n        switch (pinned) {\n            case 'left':\n                return this.leftWidth;\n            case 'right':\n                return this.rightWidth;\n            default:\n                return this.bodyWidth;\n        }\n    }\n    // after setColumnWidth or updateGroupsAndDisplayedColumns\n    updateBodyWidths() {\n        const newBodyWidth = this.getWidthOfColsInList(this.displayedColumnsCenter);\n        const newLeftWidth = this.getWidthOfColsInList(this.displayedColumnsLeft);\n        const newRightWidth = this.getWidthOfColsInList(this.displayedColumnsRight);\n        // this is used by virtual col calculation, for RTL only, as a change to body width can impact displayed\n        // columns, due to RTL inverting the y coordinates\n        this.bodyWidthDirty = this.bodyWidth !== newBodyWidth;\n        const atLeastOneChanged = this.bodyWidth !== newBodyWidth || this.leftWidth !== newLeftWidth || this.rightWidth !== newRightWidth;\n        if (atLeastOneChanged) {\n            this.bodyWidth = newBodyWidth;\n            this.leftWidth = newLeftWidth;\n            this.rightWidth = newRightWidth;\n            // when this fires, it is picked up by the gridPanel, which ends up in\n            // gridPanel calling setWidthAndScrollPosition(), which in turn calls setViewportPosition()\n            const event = {\n                type: Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED,\n            };\n            this.eventService.dispatchEvent(event);\n        }\n    }\n    // + rowController\n    getValueColumns() {\n        return this.valueColumns ? this.valueColumns : [];\n    }\n    // + rowController\n    getPivotColumns() {\n        return this.pivotColumns ? this.pivotColumns : [];\n    }\n    // + clientSideRowModel\n    isPivotActive() {\n        return this.pivotColumns && this.pivotColumns.length > 0 && this.pivotMode;\n    }\n    // + toolPanel\n    getRowGroupColumns() {\n        return this.rowGroupColumns ? this.rowGroupColumns : [];\n    }\n    // + rowController -> while inserting rows\n    getDisplayedCenterColumns() {\n        return this.displayedColumnsCenter;\n    }\n    // + rowController -> while inserting rows\n    getDisplayedLeftColumns() {\n        return this.displayedColumnsLeft;\n    }\n    getDisplayedRightColumns() {\n        return this.displayedColumnsRight;\n    }\n    getDisplayedColumns(type) {\n        switch (type) {\n            case 'left':\n                return this.getDisplayedLeftColumns();\n            case 'right':\n                return this.getDisplayedRightColumns();\n            default:\n                return this.getDisplayedCenterColumns();\n        }\n    }\n    // used by:\n    // + clientSideRowController -> sorting, building quick filter text\n    // + headerRenderer -> sorting (clearing icon)\n    getAllPrimaryColumns() {\n        return this.primaryColumns ? this.primaryColumns.slice() : null;\n    }\n    getSecondaryColumns() {\n        return this.secondaryColumns ? this.secondaryColumns.slice() : null;\n    }\n    getAllColumnsForQuickFilter() {\n        return this.columnsForQuickFilter;\n    }\n    // + moveColumnController\n    getAllGridColumns() {\n        return this.gridColumns;\n    }\n    isEmpty() {\n        return missingOrEmpty(this.gridColumns);\n    }\n    isRowGroupEmpty() {\n        return missingOrEmpty(this.rowGroupColumns);\n    }\n    setColumnVisible(key, visible, source = \"api\") {\n        this.setColumnsVisible([key], visible, source);\n    }\n    setColumnsVisible(keys, visible = false, source = \"api\") {\n        this.applyColumnState({\n            state: keys.map(key => ({\n                colId: typeof key === 'string' ? key : key.getColId(),\n                hide: !visible,\n            })),\n        }, source);\n    }\n    setColumnPinned(key, pinned, source = \"api\") {\n        if (key) {\n            this.setColumnsPinned([key], pinned, source);\n        }\n    }\n    setColumnsPinned(keys, pinned, source = \"api\") {\n        if (this.gridOptionsService.isDomLayout('print')) {\n            console.warn(`AG Grid: Changing the column pinning status is not allowed with domLayout='print'`);\n            return;\n        }\n        this.columnAnimationService.start();\n        let actualPinned;\n        if (pinned === true || pinned === 'left') {\n            actualPinned = 'left';\n        }\n        else if (pinned === 'right') {\n            actualPinned = 'right';\n        }\n        else {\n            actualPinned = null;\n        }\n        this.actionOnGridColumns(keys, (col) => {\n            if (col.getPinned() !== actualPinned) {\n                col.setPinned(actualPinned);\n                return true;\n            }\n            return false;\n        }, source, () => {\n            const event = {\n                type: Events.EVENT_COLUMN_PINNED,\n                pinned: actualPinned,\n                column: null,\n                columns: null,\n                source: source\n            };\n            return event;\n        });\n        this.columnAnimationService.finish();\n    }\n    // does an action on a set of columns. provides common functionality for looking up the\n    // columns based on key, getting a list of effected columns, and then updated the event\n    // with either one column (if it was just one col) or a list of columns\n    // used by: autoResize, setVisible, setPinned\n    actionOnGridColumns(// the column keys this action will be on\n    keys, \n    // the action to do - if this returns false, the column was skipped\n    // and won't be included in the event\n    action, \n    // should return back a column event of the right type\n    source, createEvent) {\n        if (missingOrEmpty(keys)) {\n            return;\n        }\n        const updatedColumns = [];\n        keys.forEach((key) => {\n            const column = this.getGridColumn(key);\n            if (!column) {\n                return;\n            }\n            // need to check for false with type (ie !== instead of !=)\n            // as not returning anything (undefined) would also be false\n            const resultOfAction = action(column);\n            if (resultOfAction !== false) {\n                updatedColumns.push(column);\n            }\n        });\n        if (!updatedColumns.length) {\n            return;\n        }\n        this.updateDisplayedColumns(source);\n        if (exists(createEvent) && createEvent) {\n            const event = createEvent();\n            event.columns = updatedColumns;\n            event.column = updatedColumns.length === 1 ? updatedColumns[0] : null;\n            this.eventService.dispatchEvent(event);\n        }\n    }\n    getDisplayedColBefore(col) {\n        const allDisplayedColumns = this.getAllDisplayedColumns();\n        const oldIndex = allDisplayedColumns.indexOf(col);\n        if (oldIndex > 0) {\n            return allDisplayedColumns[oldIndex - 1];\n        }\n        return null;\n    }\n    // used by:\n    // + rowRenderer -> for navigation\n    getDisplayedColAfter(col) {\n        const allDisplayedColumns = this.getAllDisplayedColumns();\n        const oldIndex = allDisplayedColumns.indexOf(col);\n        if (oldIndex < (allDisplayedColumns.length - 1)) {\n            return allDisplayedColumns[oldIndex + 1];\n        }\n        return null;\n    }\n    getDisplayedGroupAfter(columnGroup) {\n        return this.getDisplayedGroupAtDirection(columnGroup, 'After');\n    }\n    getDisplayedGroupBefore(columnGroup) {\n        return this.getDisplayedGroupAtDirection(columnGroup, 'Before');\n    }\n    getDisplayedGroupAtDirection(columnGroup, direction) {\n        // pick the last displayed column in this group\n        const requiredLevel = columnGroup.getProvidedColumnGroup().getLevel() + columnGroup.getPaddingLevel();\n        const colGroupLeafColumns = columnGroup.getDisplayedLeafColumns();\n        const col = direction === 'After' ? last(colGroupLeafColumns) : colGroupLeafColumns[0];\n        const getDisplayColMethod = `getDisplayedCol${direction}`;\n        while (true) {\n            // keep moving to the next col, until we get to another group\n            const column = this[getDisplayColMethod](col);\n            if (!column) {\n                return null;\n            }\n            const groupPointer = this.getColumnGroupAtLevel(column, requiredLevel);\n            if (groupPointer !== columnGroup) {\n                return groupPointer;\n            }\n        }\n    }\n    getColumnGroupAtLevel(column, level) {\n        // get group at same level as the one we are looking for\n        let groupPointer = column.getParent();\n        let originalGroupLevel;\n        let groupPointerLevel;\n        while (true) {\n            const groupPointerProvidedColumnGroup = groupPointer.getProvidedColumnGroup();\n            originalGroupLevel = groupPointerProvidedColumnGroup.getLevel();\n            groupPointerLevel = groupPointer.getPaddingLevel();\n            if (originalGroupLevel + groupPointerLevel <= level) {\n                break;\n            }\n            groupPointer = groupPointer.getParent();\n        }\n        return groupPointer;\n    }\n    isPinningLeft() {\n        return this.displayedColumnsLeft.length > 0;\n    }\n    isPinningRight() {\n        return this.displayedColumnsRight.length > 0;\n    }\n    getPrimaryAndSecondaryAndAutoColumns() {\n        return [].concat(...[\n            this.primaryColumns || [],\n            this.groupAutoColumns || [],\n            this.secondaryColumns || [],\n        ]);\n    }\n    createStateItemFromColumn(column) {\n        const rowGroupIndex = column.isRowGroupActive() ? this.rowGroupColumns.indexOf(column) : null;\n        const pivotIndex = column.isPivotActive() ? this.pivotColumns.indexOf(column) : null;\n        const aggFunc = column.isValueActive() ? column.getAggFunc() : null;\n        const sort = column.getSort() != null ? column.getSort() : null;\n        const sortIndex = column.getSortIndex() != null ? column.getSortIndex() : null;\n        const flex = column.getFlex() != null && column.getFlex() > 0 ? column.getFlex() : null;\n        const res = {\n            colId: column.getColId(),\n            width: column.getActualWidth(),\n            hide: !column.isVisible(),\n            pinned: column.getPinned(),\n            sort,\n            sortIndex,\n            aggFunc,\n            rowGroup: column.isRowGroupActive(),\n            rowGroupIndex,\n            pivot: column.isPivotActive(),\n            pivotIndex: pivotIndex,\n            flex\n        };\n        return res;\n    }\n    getColumnState() {\n        if (missing(this.primaryColumns) || !this.isAlive()) {\n            return [];\n        }\n        const colsForState = this.getPrimaryAndSecondaryAndAutoColumns();\n        const res = colsForState.map(this.createStateItemFromColumn.bind(this));\n        this.orderColumnStateList(res);\n        return res;\n    }\n    orderColumnStateList(columnStateList) {\n        // for fast looking, store the index of each column\n        const colIdToGridIndexMap = convertToMap(this.gridColumns.map((col, index) => [col.getColId(), index]));\n        columnStateList.sort((itemA, itemB) => {\n            const posA = colIdToGridIndexMap.has(itemA.colId) ? colIdToGridIndexMap.get(itemA.colId) : -1;\n            const posB = colIdToGridIndexMap.has(itemB.colId) ? colIdToGridIndexMap.get(itemB.colId) : -1;\n            return posA - posB;\n        });\n    }\n    resetColumnState(source = \"api\") {\n        // NOTE = there is one bug here that no customer has noticed - if a column has colDef.lockPosition,\n        // this is ignored  below when ordering the cols. to work, we should always put lockPosition cols first.\n        // As a work around, developers should just put lockPosition columns first in their colDef list.\n        // we can't use 'allColumns' as the order might of messed up, so get the primary ordered list\n        const primaryColumns = this.getColumnsFromTree(this.primaryColumnTree);\n        const columnStates = [];\n        // we start at 1000, so if user has mix of rowGroup and group specified, it will work with both.\n        // eg IF user has ColA.rowGroupIndex=0, ColB.rowGroupIndex=1, ColC.rowGroup=true,\n        // THEN result will be ColA.rowGroupIndex=0, ColB.rowGroupIndex=1, ColC.rowGroup=1000\n        let letRowGroupIndex = 1000;\n        let letPivotIndex = 1000;\n        let colsToProcess = [];\n        if (this.groupAutoColumns) {\n            colsToProcess = colsToProcess.concat(this.groupAutoColumns);\n        }\n        if (primaryColumns) {\n            colsToProcess = colsToProcess.concat(primaryColumns);\n        }\n        colsToProcess.forEach(column => {\n            const getValueOrNull = (a, b) => a != null ? a : b != null ? b : null;\n            const colDef = column.getColDef();\n            const sort = getValueOrNull(colDef.sort, colDef.initialSort);\n            const sortIndex = getValueOrNull(colDef.sortIndex, colDef.initialSortIndex);\n            const hide = getValueOrNull(colDef.hide, colDef.initialHide);\n            const pinned = getValueOrNull(colDef.pinned, colDef.initialPinned);\n            const width = getValueOrNull(colDef.width, colDef.initialWidth);\n            const flex = getValueOrNull(colDef.flex, colDef.initialFlex);\n            let rowGroupIndex = getValueOrNull(colDef.rowGroupIndex, colDef.initialRowGroupIndex);\n            let rowGroup = getValueOrNull(colDef.rowGroup, colDef.initialRowGroup);\n            if (rowGroupIndex == null && (rowGroup == null || rowGroup == false)) {\n                rowGroupIndex = null;\n                rowGroup = null;\n            }\n            let pivotIndex = getValueOrNull(colDef.pivotIndex, colDef.initialPivotIndex);\n            let pivot = getValueOrNull(colDef.pivot, colDef.initialPivot);\n            if (pivotIndex == null && (pivot == null || pivot == false)) {\n                pivotIndex = null;\n                pivot = null;\n            }\n            const aggFunc = getValueOrNull(colDef.aggFunc, colDef.initialAggFunc);\n            const stateItem = {\n                colId: column.getColId(),\n                sort,\n                sortIndex,\n                hide,\n                pinned,\n                width,\n                flex,\n                rowGroup,\n                rowGroupIndex,\n                pivot,\n                pivotIndex,\n                aggFunc,\n            };\n            if (missing(rowGroupIndex) && rowGroup) {\n                stateItem.rowGroupIndex = letRowGroupIndex++;\n            }\n            if (missing(pivotIndex) && pivot) {\n                stateItem.pivotIndex = letPivotIndex++;\n            }\n            columnStates.push(stateItem);\n        });\n        this.applyColumnState({ state: columnStates, applyOrder: true }, source);\n    }\n    applyColumnState(params, source) {\n        if (missingOrEmpty(this.primaryColumns)) {\n            return false;\n        }\n        if (params && params.state && !params.state.forEach) {\n            console.warn('AG Grid: applyColumnState() - the state attribute should be an array, however an array was not found. Please provide an array of items (one for each col you want to change) for state.');\n            return false;\n        }\n        const applyStates = (states, existingColumns, getById) => {\n            const dispatchEventsFunc = this.compareColumnStatesAndDispatchEvents(source);\n            this.autoGroupsNeedBuilding = true;\n            // at the end below, this list will have all columns we got no state for\n            const columnsWithNoState = existingColumns.slice();\n            const rowGroupIndexes = {};\n            const pivotIndexes = {};\n            const autoGroupColumnStates = [];\n            // If pivoting is modified, these are the states we try to reapply after\n            // the secondary columns are re-generated\n            const unmatchedAndAutoStates = [];\n            let unmatchedCount = 0;\n            const previousRowGroupCols = this.rowGroupColumns.slice();\n            const previousPivotCols = this.pivotColumns.slice();\n            states.forEach((state) => {\n                const colId = state.colId || '';\n                // auto group columns are re-created so deferring syncing with ColumnState\n                const isAutoGroupColumn = colId.startsWith(GROUP_AUTO_COLUMN_ID);\n                if (isAutoGroupColumn) {\n                    autoGroupColumnStates.push(state);\n                    unmatchedAndAutoStates.push(state);\n                    return;\n                }\n                const column = getById(colId);\n                if (!column) {\n                    unmatchedAndAutoStates.push(state);\n                    unmatchedCount += 1;\n                }\n                else {\n                    this.syncColumnWithStateItem(column, state, params.defaultState, rowGroupIndexes, pivotIndexes, false, source);\n                    removeFromArray(columnsWithNoState, column);\n                }\n            });\n            // anything left over, we got no data for, so add in the column as non-value, non-rowGroup and hidden\n            const applyDefaultsFunc = (col) => this.syncColumnWithStateItem(col, null, params.defaultState, rowGroupIndexes, pivotIndexes, false, source);\n            columnsWithNoState.forEach(applyDefaultsFunc);\n            // sort the lists according to the indexes that were provided\n            const comparator = (indexes, oldList, colA, colB) => {\n                const indexA = indexes[colA.getId()];\n                const indexB = indexes[colB.getId()];\n                const aHasIndex = indexA != null;\n                const bHasIndex = indexB != null;\n                if (aHasIndex && bHasIndex) {\n                    // both a and b are new cols with index, so sort on index\n                    return indexA - indexB;\n                }\n                if (aHasIndex) {\n                    // a has an index, so it should be before a\n                    return -1;\n                }\n                if (bHasIndex) {\n                    // b has an index, so it should be before a\n                    return 1;\n                }\n                const oldIndexA = oldList.indexOf(colA);\n                const oldIndexB = oldList.indexOf(colB);\n                const aHasOldIndex = oldIndexA >= 0;\n                const bHasOldIndex = oldIndexB >= 0;\n                if (aHasOldIndex && bHasOldIndex) {\n                    // both a and b are old cols, so sort based on last order\n                    return oldIndexA - oldIndexB;\n                }\n                if (aHasOldIndex) {\n                    // a is old, b is new, so b is first\n                    return -1;\n                }\n                // this bit does matter, means both are new cols\n                // but without index or that b is old and a is new\n                return 1;\n            };\n            this.rowGroupColumns.sort(comparator.bind(this, rowGroupIndexes, previousRowGroupCols));\n            this.pivotColumns.sort(comparator.bind(this, pivotIndexes, previousPivotCols));\n            this.updateGridColumns();\n            // sync newly created auto group columns with ColumnState\n            const autoGroupColsCopy = this.groupAutoColumns ? this.groupAutoColumns.slice() : [];\n            autoGroupColumnStates.forEach(stateItem => {\n                const autoCol = this.getAutoColumn(stateItem.colId);\n                removeFromArray(autoGroupColsCopy, autoCol);\n                this.syncColumnWithStateItem(autoCol, stateItem, params.defaultState, null, null, true, source);\n            });\n            // autogroup cols with nothing else, apply the default\n            autoGroupColsCopy.forEach(applyDefaultsFunc);\n            this.applyOrderAfterApplyState(params);\n            this.updateDisplayedColumns(source);\n            this.dispatchEverythingChanged(source);\n            dispatchEventsFunc(); // Will trigger secondary column changes if pivoting modified\n            return { unmatchedAndAutoStates, unmatchedCount };\n        };\n        this.columnAnimationService.start();\n        let { unmatchedAndAutoStates, unmatchedCount, } = applyStates(params.state || [], this.primaryColumns || [], (id) => this.getPrimaryColumn(id));\n        // If there are still states left over, see if we can apply them to newly generated\n        // secondary or auto columns. Also if defaults exist, ensure they are applied to secondary cols\n        if (unmatchedAndAutoStates.length > 0 || exists(params.defaultState)) {\n            unmatchedCount = applyStates(unmatchedAndAutoStates, this.secondaryColumns || [], (id) => this.getSecondaryColumn(id)).unmatchedCount;\n        }\n        this.columnAnimationService.finish();\n        return unmatchedCount === 0; // Successful if no states unaccounted for\n    }\n    applyOrderAfterApplyState(params) {\n        if (!params.applyOrder || !params.state) {\n            return;\n        }\n        let newOrder = [];\n        const processedColIds = {};\n        params.state.forEach(item => {\n            if (!item.colId || processedColIds[item.colId]) {\n                return;\n            }\n            const col = this.gridColumnsMap[item.colId];\n            if (col) {\n                newOrder.push(col);\n                processedColIds[item.colId] = true;\n            }\n        });\n        // add in all other columns\n        let autoGroupInsertIndex = 0;\n        this.gridColumns.forEach(col => {\n            const colId = col.getColId();\n            const alreadyProcessed = processedColIds[colId] != null;\n            if (alreadyProcessed) {\n                return;\n            }\n            const isAutoGroupCol = colId.startsWith(GROUP_AUTO_COLUMN_ID);\n            if (isAutoGroupCol) {\n                // auto group columns, if missing from state list, are added to the start.\n                // it's common to have autoGroup missing, as grouping could be on by default\n                // on a column, but the user could of since removed the grouping via the UI.\n                // if we don't inc the insert index, autoGroups will be inserted in reverse order\n                insertIntoArray(newOrder, col, autoGroupInsertIndex++);\n            }\n            else {\n                // normal columns, if missing from state list, are added at the end\n                newOrder.push(col);\n            }\n        });\n        // this is already done in updateGridColumns, however we changed the order above (to match the order of the state\n        // columns) so we need to do it again. we could of put logic into the order above to take into account fixed\n        // columns, however if we did then we would have logic for updating fixed columns twice. reusing the logic here\n        // is less sexy for the code here, but it keeps consistency.\n        newOrder = this.placeLockedColumns(newOrder);\n        if (!this.doesMovePassMarryChildren(newOrder)) {\n            console.warn('AG Grid: Applying column order broke a group where columns should be married together. Applying new order has been discarded.');\n            return;\n        }\n        this.gridColumns = newOrder;\n    }\n    compareColumnStatesAndDispatchEvents(source) {\n        const startState = {\n            rowGroupColumns: this.rowGroupColumns.slice(),\n            pivotColumns: this.pivotColumns.slice(),\n            valueColumns: this.valueColumns.slice()\n        };\n        const columnStateBefore = this.getColumnState();\n        const columnStateBeforeMap = {};\n        columnStateBefore.forEach(col => {\n            columnStateBeforeMap[col.colId] = col;\n        });\n        return () => {\n            const colsForState = this.getPrimaryAndSecondaryAndAutoColumns();\n            // dispatches generic ColumnEvents where all columns are returned rather than what has changed\n            const dispatchWhenListsDifferent = (eventType, colsBefore, colsAfter, idMapper) => {\n                const beforeList = colsBefore.map(idMapper);\n                const afterList = colsAfter.map(idMapper);\n                const unchanged = areEqual(beforeList, afterList);\n                if (unchanged) {\n                    return;\n                }\n                // returning all columns rather than what has changed!\n                const event = {\n                    type: eventType,\n                    columns: colsAfter,\n                    column: colsAfter.length === 1 ? colsAfter[0] : null,\n                    source: source\n                };\n                this.eventService.dispatchEvent(event);\n            };\n            // determines which columns have changed according to supplied predicate\n            const getChangedColumns = (changedPredicate) => {\n                const changedColumns = [];\n                colsForState.forEach(column => {\n                    const colStateBefore = columnStateBeforeMap[column.getColId()];\n                    if (colStateBefore && changedPredicate(colStateBefore, column)) {\n                        changedColumns.push(column);\n                    }\n                });\n                return changedColumns;\n            };\n            const columnIdMapper = (c) => c.getColId();\n            dispatchWhenListsDifferent(Events.EVENT_COLUMN_ROW_GROUP_CHANGED, startState.rowGroupColumns, this.rowGroupColumns, columnIdMapper);\n            dispatchWhenListsDifferent(Events.EVENT_COLUMN_PIVOT_CHANGED, startState.pivotColumns, this.pivotColumns, columnIdMapper);\n            const valueChangePredicate = (cs, c) => {\n                const oldActive = cs.aggFunc != null;\n                const activeChanged = oldActive != c.isValueActive();\n                // we only check aggFunc if the agg is active\n                const aggFuncChanged = oldActive && cs.aggFunc != c.getAggFunc();\n                return activeChanged || aggFuncChanged;\n            };\n            const changedValues = getChangedColumns(valueChangePredicate);\n            if (changedValues.length > 0) {\n                // we pass all value columns, now the ones that changed. this is the same\n                // as pivot and rowGroup cols, but different to all other properties below.\n                // this is more for backwards compatibility, as it's always been this way.\n                // really it should be the other way, as the order of the cols makes no difference\n                // for valueColumns (apart from displaying them in the tool panel).\n                this.dispatchColumnChangedEvent(Events.EVENT_COLUMN_VALUE_CHANGED, this.valueColumns, source);\n            }\n            const resizeChangePredicate = (cs, c) => cs.width != c.getActualWidth();\n            this.dispatchColumnResizedEvent(getChangedColumns(resizeChangePredicate), true, source);\n            const pinnedChangePredicate = (cs, c) => cs.pinned != c.getPinned();\n            this.dispatchColumnPinnedEvent(getChangedColumns(pinnedChangePredicate), source);\n            const visibilityChangePredicate = (cs, c) => cs.hide == c.isVisible();\n            this.dispatchColumnVisibleEvent(getChangedColumns(visibilityChangePredicate), source);\n            const sortChangePredicate = (cs, c) => cs.sort != c.getSort() || cs.sortIndex != c.getSortIndex();\n            if (getChangedColumns(sortChangePredicate).length > 0) {\n                this.sortController.dispatchSortChangedEvents(source);\n            }\n            // special handling for moved column events\n            this.normaliseColumnMovedEventForColumnState(columnStateBefore, source);\n        };\n    }\n    getCommonValue(cols, valueGetter) {\n        if (!cols || cols.length == 0) {\n            return undefined;\n        }\n        // compare each value to the first value. if nothing differs, then value is common so return it.\n        const firstValue = valueGetter(cols[0]);\n        for (let i = 1; i < cols.length; i++) {\n            if (firstValue !== valueGetter(cols[i])) {\n                // values differ, no common value\n                return undefined;\n            }\n        }\n        return firstValue;\n    }\n    normaliseColumnMovedEventForColumnState(colStateBefore, source) {\n        // we are only interested in columns that were both present and visible before and after\n        const colStateAfter = this.getColumnState();\n        const colStateAfterMapped = {};\n        colStateAfter.forEach(s => colStateAfterMapped[s.colId] = s);\n        // get id's of cols in both before and after lists\n        const colsIntersectIds = {};\n        colStateBefore.forEach(s => {\n            if (colStateAfterMapped[s.colId]) {\n                colsIntersectIds[s.colId] = true;\n            }\n        });\n        // filter state lists, so we only have cols that were present before and after\n        const beforeFiltered = colStateBefore.filter(c => colsIntersectIds[c.colId]);\n        const afterFiltered = colStateAfter.filter(c => colsIntersectIds[c.colId]);\n        // see if any cols are in a different location\n        const movedColumns = [];\n        afterFiltered.forEach((csAfter, index) => {\n            const csBefore = beforeFiltered && beforeFiltered[index];\n            if (csBefore && csBefore.colId !== csAfter.colId) {\n                const gridCol = this.getGridColumn(csBefore.colId);\n                if (gridCol) {\n                    movedColumns.push(gridCol);\n                }\n            }\n        });\n        if (!movedColumns.length) {\n            return;\n        }\n        this.dispatchColumnMovedEvent({ movedColumns, source, finished: true });\n    }\n    syncColumnWithStateItem(column, stateItem, defaultState, rowGroupIndexes, pivotIndexes, autoCol, source) {\n        if (!column) {\n            return;\n        }\n        const getValue = (key1, key2) => {\n            const obj = { value1: undefined, value2: undefined };\n            let calculated = false;\n            if (stateItem) {\n                if (stateItem[key1] !== undefined) {\n                    obj.value1 = stateItem[key1];\n                    calculated = true;\n                }\n                if (exists(key2) && stateItem[key2] !== undefined) {\n                    obj.value2 = stateItem[key2];\n                    calculated = true;\n                }\n            }\n            if (!calculated && defaultState) {\n                if (defaultState[key1] !== undefined) {\n                    obj.value1 = defaultState[key1];\n                }\n                if (exists(key2) && defaultState[key2] !== undefined) {\n                    obj.value2 = defaultState[key2];\n                }\n            }\n            return obj;\n        };\n        // following ensures we are left with boolean true or false, eg converts (null, undefined, 0) all to true\n        const hide = getValue('hide').value1;\n        if (hide !== undefined) {\n            column.setVisible(!hide, source);\n        }\n        // sets pinned to 'left' or 'right'\n        const pinned = getValue('pinned').value1;\n        if (pinned !== undefined) {\n            column.setPinned(pinned);\n        }\n        // if width provided and valid, use it, otherwise stick with the old width\n        const minColWidth = this.columnUtils.calculateColMinWidth(column.getColDef());\n        // flex\n        const flex = getValue('flex').value1;\n        if (flex !== undefined) {\n            column.setFlex(flex);\n        }\n        // width - we only set width if column is not flexing\n        const noFlexThisCol = column.getFlex() <= 0;\n        if (noFlexThisCol) {\n            // both null and undefined means we skip, as it's not possible to 'clear' width (a column must have a width)\n            const width = getValue('width').value1;\n            if (width != null) {\n                if (minColWidth != null && width >= minColWidth) {\n                    column.setActualWidth(width, source);\n                }\n            }\n        }\n        const sort = getValue('sort').value1;\n        if (sort !== undefined) {\n            if (sort === 'desc' || sort === 'asc') {\n                column.setSort(sort, source);\n            }\n            else {\n                column.setSort(undefined, source);\n            }\n        }\n        const sortIndex = getValue('sortIndex').value1;\n        if (sortIndex !== undefined) {\n            column.setSortIndex(sortIndex);\n        }\n        // we do not do aggFunc, rowGroup or pivot for auto cols or secondary cols\n        if (autoCol || !column.isPrimary()) {\n            return;\n        }\n        const aggFunc = getValue('aggFunc').value1;\n        if (aggFunc !== undefined) {\n            if (typeof aggFunc === 'string') {\n                column.setAggFunc(aggFunc);\n                if (!column.isValueActive()) {\n                    column.setValueActive(true, source);\n                    this.valueColumns.push(column);\n                }\n            }\n            else {\n                if (exists(aggFunc)) {\n                    console.warn('AG Grid: stateItem.aggFunc must be a string. if using your own aggregation ' +\n                        'functions, register the functions first before using them in get/set state. This is because it is ' +\n                        'intended for the column state to be stored and retrieved as simple JSON.');\n                }\n                // Note: we do not call column.setAggFunc(null), so that next time we aggregate\n                // by this column (eg drag the column to the agg section int he toolpanel) it will\n                // default to the last aggregation function.\n                if (column.isValueActive()) {\n                    column.setValueActive(false, source);\n                    removeFromArray(this.valueColumns, column);\n                }\n            }\n        }\n        const { value1: rowGroup, value2: rowGroupIndex } = getValue('rowGroup', 'rowGroupIndex');\n        if (rowGroup !== undefined || rowGroupIndex !== undefined) {\n            if (typeof rowGroupIndex === 'number' || rowGroup) {\n                if (!column.isRowGroupActive()) {\n                    column.setRowGroupActive(true, source);\n                    this.rowGroupColumns.push(column);\n                }\n                if (rowGroupIndexes && typeof rowGroupIndex === 'number') {\n                    rowGroupIndexes[column.getId()] = rowGroupIndex;\n                }\n            }\n            else {\n                if (column.isRowGroupActive()) {\n                    column.setRowGroupActive(false, source);\n                    removeFromArray(this.rowGroupColumns, column);\n                }\n            }\n        }\n        const { value1: pivot, value2: pivotIndex } = getValue('pivot', 'pivotIndex');\n        if (pivot !== undefined || pivotIndex !== undefined) {\n            if (typeof pivotIndex === 'number' || pivot) {\n                if (!column.isPivotActive()) {\n                    column.setPivotActive(true, source);\n                    this.pivotColumns.push(column);\n                }\n                if (pivotIndexes && typeof pivotIndex === 'number') {\n                    pivotIndexes[column.getId()] = pivotIndex;\n                }\n            }\n            else {\n                if (column.isPivotActive()) {\n                    column.setPivotActive(false, source);\n                    removeFromArray(this.pivotColumns, column);\n                }\n            }\n        }\n    }\n    getGridColumns(keys) {\n        return this.getColumns(keys, this.getGridColumn.bind(this));\n    }\n    getColumns(keys, columnLookupCallback) {\n        const foundColumns = [];\n        if (keys) {\n            keys.forEach((key) => {\n                const column = columnLookupCallback(key);\n                if (column) {\n                    foundColumns.push(column);\n                }\n            });\n        }\n        return foundColumns;\n    }\n    // used by growGroupPanel\n    getColumnWithValidation(key) {\n        if (key == null) {\n            return null;\n        }\n        const column = this.getGridColumn(key);\n        if (!column) {\n            console.warn('AG Grid: could not find column ' + key);\n        }\n        return column;\n    }\n    getPrimaryColumn(key) {\n        if (!this.primaryColumns) {\n            return null;\n        }\n        return this.getColumn(key, this.primaryColumns, this.primaryColumnsMap);\n    }\n    getGridColumn(key) {\n        return this.getColumn(key, this.gridColumns, this.gridColumnsMap);\n    }\n    getSecondaryColumn(key) {\n        if (!this.secondaryColumns) {\n            return null;\n        }\n        return this.getColumn(key, this.secondaryColumns, this.secondaryColumnsMap);\n    }\n    getColumn(key, columnList, columnMap) {\n        if (!key) {\n            return null;\n        }\n        // most of the time this method gets called the key is a string, so we put this shortcut in\n        // for performance reasons, to see if we can match for ID (it doesn't do auto columns, that's done below)\n        if (typeof key == 'string' && columnMap[key]) {\n            return columnMap[key];\n        }\n        for (let i = 0; i < columnList.length; i++) {\n            if (this.columnsMatch(columnList[i], key)) {\n                return columnList[i];\n            }\n        }\n        return this.getAutoColumn(key);\n    }\n    getSourceColumnsForGroupColumn(groupCol) {\n        const sourceColumnId = groupCol.getColDef().showRowGroup;\n        if (!sourceColumnId) {\n            return null;\n        }\n        if (sourceColumnId === true) {\n            return this.rowGroupColumns.slice(0);\n        }\n        const column = this.getPrimaryColumn(sourceColumnId);\n        return column ? [column] : null;\n    }\n    getAutoColumn(key) {\n        if (!this.groupAutoColumns ||\n            !exists(this.groupAutoColumns) ||\n            missing(this.groupAutoColumns)) {\n            return null;\n        }\n        return this.groupAutoColumns.find(groupCol => this.columnsMatch(groupCol, key)) || null;\n    }\n    columnsMatch(column, key) {\n        const columnMatches = column === key;\n        const colDefMatches = column.getColDef() === key;\n        const idMatches = column.getColId() == key;\n        return columnMatches || colDefMatches || idMatches;\n    }\n    getDisplayNameForColumn(column, location, includeAggFunc = false) {\n        if (!column) {\n            return null;\n        }\n        const headerName = this.getHeaderName(column.getColDef(), column, null, null, location);\n        if (includeAggFunc) {\n            return this.wrapHeaderNameWithAggFunc(column, headerName);\n        }\n        return headerName;\n    }\n    getDisplayNameForProvidedColumnGroup(columnGroup, providedColumnGroup, location) {\n        const colGroupDef = providedColumnGroup ? providedColumnGroup.getColGroupDef() : null;\n        if (colGroupDef) {\n            return this.getHeaderName(colGroupDef, null, columnGroup, providedColumnGroup, location);\n        }\n        return null;\n    }\n    getDisplayNameForColumnGroup(columnGroup, location) {\n        return this.getDisplayNameForProvidedColumnGroup(columnGroup, columnGroup.getProvidedColumnGroup(), location);\n    }\n    // location is where the column is going to appear, ie who is calling us\n    getHeaderName(colDef, column, columnGroup, providedColumnGroup, location) {\n        const headerValueGetter = colDef.headerValueGetter;\n        if (headerValueGetter) {\n            const params = {\n                colDef: colDef,\n                column: column,\n                columnGroup: columnGroup,\n                providedColumnGroup: providedColumnGroup,\n                location: location,\n                api: this.gridOptionsService.api,\n                columnApi: this.gridOptionsService.columnApi,\n                context: this.gridOptionsService.context\n            };\n            if (typeof headerValueGetter === 'function') {\n                // valueGetter is a function, so just call it\n                return headerValueGetter(params);\n            }\n            else if (typeof headerValueGetter === 'string') {\n                // valueGetter is an expression, so execute the expression\n                return this.expressionService.evaluate(headerValueGetter, params);\n            }\n            console.warn('AG Grid: headerValueGetter must be a function or a string');\n            return '';\n        }\n        else if (colDef.headerName != null) {\n            return colDef.headerName;\n        }\n        else if (colDef.field) {\n            return camelCaseToHumanText(colDef.field);\n        }\n        return '';\n    }\n    wrapHeaderNameWithAggFunc(column, headerName) {\n        if (this.gridOptionsService.is('suppressAggFuncInHeader')) {\n            return headerName;\n        }\n        // only columns with aggregation active can have aggregations\n        const pivotValueColumn = column.getColDef().pivotValueColumn;\n        const pivotActiveOnThisColumn = exists(pivotValueColumn);\n        let aggFunc = null;\n        let aggFuncFound;\n        // otherwise we have a measure that is active, and we are doing aggregation on it\n        if (pivotActiveOnThisColumn) {\n            const isCollapsedHeaderEnabled = this.gridOptionsService.is('removePivotHeaderRowWhenSingleValueColumn') && this.valueColumns.length === 1;\n            const isTotalColumn = column.getColDef().pivotTotalColumnIds !== undefined;\n            if (isCollapsedHeaderEnabled && !isTotalColumn) {\n                return headerName; // Skip decorating the header - in this case the label is the pivot key, not the value col\n            }\n            aggFunc = pivotValueColumn ? pivotValueColumn.getAggFunc() : null;\n            aggFuncFound = true;\n        }\n        else {\n            const measureActive = column.isValueActive();\n            const aggregationPresent = this.pivotMode || !this.isRowGroupEmpty();\n            if (measureActive && aggregationPresent) {\n                aggFunc = column.getAggFunc();\n                aggFuncFound = true;\n            }\n            else {\n                aggFuncFound = false;\n            }\n        }\n        if (aggFuncFound) {\n            const aggFuncString = (typeof aggFunc === 'string') ? aggFunc : 'func';\n            const localeTextFunc = this.localeService.getLocaleTextFunc();\n            const aggFuncStringTranslated = localeTextFunc(aggFuncString, aggFuncString);\n            return `${aggFuncStringTranslated}(${headerName})`;\n        }\n        return headerName;\n    }\n    // returns the group with matching colId and instanceId. If instanceId is missing,\n    // matches only on the colId.\n    getColumnGroup(colId, partId) {\n        if (!colId) {\n            return null;\n        }\n        if (colId instanceof ColumnGroup) {\n            return colId;\n        }\n        const allColumnGroups = this.getAllDisplayedTrees();\n        const checkPartId = typeof partId === 'number';\n        let result = null;\n        this.columnUtils.depthFirstAllColumnTreeSearch(allColumnGroups, (child) => {\n            if (child instanceof ColumnGroup) {\n                const columnGroup = child;\n                let matched;\n                if (checkPartId) {\n                    matched = colId === columnGroup.getGroupId() && partId === columnGroup.getPartId();\n                }\n                else {\n                    matched = colId === columnGroup.getGroupId();\n                }\n                if (matched) {\n                    result = columnGroup;\n                }\n            }\n        });\n        return result;\n    }\n    isReady() {\n        return this.ready;\n    }\n    extractValueColumns(source, oldPrimaryColumns) {\n        this.valueColumns = this.extractColumns(oldPrimaryColumns, this.valueColumns, (col, flag) => col.setValueActive(flag, source), \n        // aggFunc doesn't have index variant, cos order of value cols doesn't matter, so always return null\n        () => undefined, () => undefined, \n        // aggFunc is a string, so return it's existence\n        (colDef) => {\n            const aggFunc = colDef.aggFunc;\n            // null or empty string means clear\n            if (aggFunc === null || aggFunc === '') {\n                return null;\n            }\n            if (aggFunc === undefined) {\n                return;\n            }\n            return !!aggFunc;\n        }, (colDef) => {\n            // return false if any of the following: null, undefined, empty string\n            return colDef.initialAggFunc != null && colDef.initialAggFunc != '';\n        });\n        // all new columns added will have aggFunc missing, so set it to what is in the colDef\n        this.valueColumns.forEach(col => {\n            const colDef = col.getColDef();\n            // if aggFunc provided, we always override, as reactive property\n            if (colDef.aggFunc != null && colDef.aggFunc != '') {\n                col.setAggFunc(colDef.aggFunc);\n            }\n            else {\n                // otherwise we use initialAggFunc only if no agg func set - which happens when new column only\n                if (!col.getAggFunc()) {\n                    col.setAggFunc(colDef.initialAggFunc);\n                }\n            }\n        });\n    }\n    extractRowGroupColumns(source, oldPrimaryColumns) {\n        this.rowGroupColumns = this.extractColumns(oldPrimaryColumns, this.rowGroupColumns, (col, flag) => col.setRowGroupActive(flag, source), (colDef) => colDef.rowGroupIndex, (colDef) => colDef.initialRowGroupIndex, (colDef) => colDef.rowGroup, (colDef) => colDef.initialRowGroup);\n    }\n    extractColumns(oldPrimaryColumns = [], previousCols = [], setFlagFunc, getIndexFunc, getInitialIndexFunc, getValueFunc, getInitialValueFunc) {\n        const colsWithIndex = [];\n        const colsWithValue = [];\n        // go though all cols.\n        // if value, change\n        // if default only, change only if new\n        (this.primaryColumns || []).forEach(col => {\n            const colIsNew = oldPrimaryColumns.indexOf(col) < 0;\n            const colDef = col.getColDef();\n            const value = attrToBoolean(getValueFunc(colDef));\n            const initialValue = attrToBoolean(getInitialValueFunc(colDef));\n            const index = attrToNumber(getIndexFunc(colDef));\n            const initialIndex = attrToNumber(getInitialIndexFunc(colDef));\n            let include;\n            const valuePresent = value !== undefined;\n            const indexPresent = index !== undefined;\n            const initialValuePresent = initialValue !== undefined;\n            const initialIndexPresent = initialIndex !== undefined;\n            if (valuePresent) {\n                include = value; // boolean value is guaranteed as attrToBoolean() is used above\n            }\n            else if (indexPresent) {\n                if (index === null) {\n                    // if col is new we don't want to use the default / initial if index is set to null. Similarly,\n                    // we don't want to include the property for existing columns, i.e. we want to 'clear' it.\n                    include = false;\n                }\n                else {\n                    // note that 'null >= 0' evaluates to true which means 'rowGroupIndex = null' would enable row\n                    // grouping if the null check didn't exist above.\n                    include = index >= 0;\n                }\n            }\n            else {\n                if (colIsNew) {\n                    // as no value or index is 'present' we use the default / initial when col is new\n                    if (initialValuePresent) {\n                        include = initialValue;\n                    }\n                    else if (initialIndexPresent) {\n                        include = initialIndex != null && initialIndex >= 0;\n                    }\n                    else {\n                        include = false;\n                    }\n                }\n                else {\n                    // otherwise include it if included last time, e.g. if we are extracting row group cols and this col\n                    // is an existing row group col (i.e. it exists in 'previousCols') then we should include it.\n                    include = previousCols.indexOf(col) >= 0;\n                }\n            }\n            if (include) {\n                const useIndex = colIsNew ? (index != null || initialIndex != null) : index != null;\n                useIndex ? colsWithIndex.push(col) : colsWithValue.push(col);\n            }\n        });\n        const getIndexForCol = (col) => {\n            const index = getIndexFunc(col.getColDef());\n            const defaultIndex = getInitialIndexFunc(col.getColDef());\n            return index != null ? index : defaultIndex;\n        };\n        // sort cols with index, and add these first\n        colsWithIndex.sort((colA, colB) => {\n            const indexA = getIndexForCol(colA);\n            const indexB = getIndexForCol(colB);\n            if (indexA === indexB) {\n                return 0;\n            }\n            if (indexA < indexB) {\n                return -1;\n            }\n            return 1;\n        });\n        const res = [].concat(colsWithIndex);\n        // second add columns that were there before and in the same order as they were before,\n        // so we are preserving order of current grouping of columns that simply have rowGroup=true\n        previousCols.forEach(col => {\n            if (colsWithValue.indexOf(col) >= 0) {\n                res.push(col);\n            }\n        });\n        // lastly put in all remaining cols\n        colsWithValue.forEach(col => {\n            if (res.indexOf(col) < 0) {\n                res.push(col);\n            }\n        });\n        // set flag=false for removed cols\n        previousCols.forEach(col => {\n            if (res.indexOf(col) < 0) {\n                setFlagFunc(col, false);\n            }\n        });\n        // set flag=true for newly added cols\n        res.forEach(col => {\n            if (previousCols.indexOf(col) < 0) {\n                setFlagFunc(col, true);\n            }\n        });\n        return res;\n    }\n    extractPivotColumns(source, oldPrimaryColumns) {\n        this.pivotColumns = this.extractColumns(oldPrimaryColumns, this.pivotColumns, (col, flag) => col.setPivotActive(flag, source), (colDef) => colDef.pivotIndex, (colDef) => colDef.initialPivotIndex, (colDef) => colDef.pivot, (colDef) => colDef.initialPivot);\n    }\n    resetColumnGroupState(source = \"api\") {\n        const stateItems = [];\n        this.columnUtils.depthFirstOriginalTreeSearch(null, this.primaryColumnTree, child => {\n            if (child instanceof ProvidedColumnGroup) {\n                const colGroupDef = child.getColGroupDef();\n                const groupState = {\n                    groupId: child.getGroupId(),\n                    open: !colGroupDef ? undefined : colGroupDef.openByDefault\n                };\n                stateItems.push(groupState);\n            }\n        });\n        this.setColumnGroupState(stateItems, source);\n    }\n    getColumnGroupState() {\n        const columnGroupState = [];\n        this.columnUtils.depthFirstOriginalTreeSearch(null, this.gridBalancedTree, node => {\n            if (node instanceof ProvidedColumnGroup) {\n                columnGroupState.push({\n                    groupId: node.getGroupId(),\n                    open: node.isExpanded()\n                });\n            }\n        });\n        return columnGroupState;\n    }\n    setColumnGroupState(stateItems, source = \"api\") {\n        this.columnAnimationService.start();\n        const impactedGroups = [];\n        stateItems.forEach(stateItem => {\n            const groupKey = stateItem.groupId;\n            const newValue = stateItem.open;\n            const providedColumnGroup = this.getProvidedColumnGroup(groupKey);\n            if (!providedColumnGroup) {\n                return;\n            }\n            if (providedColumnGroup.isExpanded() === newValue) {\n                return;\n            }\n            this.logger.log('columnGroupOpened(' + providedColumnGroup.getGroupId() + ',' + newValue + ')');\n            providedColumnGroup.setExpanded(newValue);\n            impactedGroups.push(providedColumnGroup);\n        });\n        this.updateGroupsAndDisplayedColumns(source);\n        this.setFirstRightAndLastLeftPinned(source);\n        impactedGroups.forEach(providedColumnGroup => {\n            const event = {\n                type: Events.EVENT_COLUMN_GROUP_OPENED,\n                columnGroup: providedColumnGroup\n            };\n            this.eventService.dispatchEvent(event);\n        });\n        this.columnAnimationService.finish();\n    }\n    // called by headerRenderer - when a header is opened or closed\n    setColumnGroupOpened(key, newValue, source = \"api\") {\n        let keyAsString;\n        if (key instanceof ProvidedColumnGroup) {\n            keyAsString = key.getId();\n        }\n        else {\n            keyAsString = key || '';\n        }\n        this.setColumnGroupState([{ groupId: keyAsString, open: newValue }], source);\n    }\n    getProvidedColumnGroup(key) {\n        // if (key instanceof ProvidedColumnGroup) { return key; }\n        if (typeof key !== 'string') {\n            console.error('AG Grid: group key must be a string');\n        }\n        // otherwise, search for the column group by id\n        let res = null;\n        this.columnUtils.depthFirstOriginalTreeSearch(null, this.gridBalancedTree, node => {\n            if (node instanceof ProvidedColumnGroup) {\n                if (node.getId() === key) {\n                    res = node;\n                }\n            }\n        });\n        return res;\n    }\n    calculateColumnsForDisplay() {\n        let columnsForDisplay;\n        if (this.pivotMode && missing(this.secondaryColumns)) {\n            // pivot mode is on, but we are not pivoting, so we only\n            // show columns we are aggregating on\n            columnsForDisplay = this.gridColumns.filter(column => {\n                const isAutoGroupCol = this.groupAutoColumns && includes(this.groupAutoColumns, column);\n                const isValueCol = this.valueColumns && includes(this.valueColumns, column);\n                return isAutoGroupCol || isValueCol;\n            });\n        }\n        else {\n            // otherwise continue as normal. this can be working on the primary\n            // or secondary columns, whatever the gridColumns are set to\n            columnsForDisplay = this.gridColumns.filter(column => {\n                // keep col if a) it's auto-group or b) it's visible\n                const isAutoGroupCol = this.groupAutoColumns && includes(this.groupAutoColumns, column);\n                return isAutoGroupCol || column.isVisible();\n            });\n        }\n        return columnsForDisplay;\n    }\n    checkColSpanActiveInCols(columns) {\n        let result = false;\n        columns.forEach(col => {\n            if (exists(col.getColDef().colSpan)) {\n                result = true;\n            }\n        });\n        return result;\n    }\n    calculateColumnsForGroupDisplay() {\n        this.groupDisplayColumns = [];\n        this.groupDisplayColumnsMap = {};\n        const checkFunc = (col) => {\n            const colDef = col.getColDef();\n            const underlyingColumn = colDef.showRowGroup;\n            if (colDef && exists(underlyingColumn)) {\n                this.groupDisplayColumns.push(col);\n                if (typeof underlyingColumn === 'string') {\n                    this.groupDisplayColumnsMap[underlyingColumn] = col;\n                }\n                else if (underlyingColumn === true) {\n                    this.getRowGroupColumns().forEach(rowGroupCol => {\n                        this.groupDisplayColumnsMap[rowGroupCol.getId()] = col;\n                    });\n                }\n            }\n        };\n        this.gridColumns.forEach(checkFunc);\n    }\n    getGroupDisplayColumns() {\n        return this.groupDisplayColumns;\n    }\n    getGroupDisplayColumnForGroup(rowGroupColumnId) {\n        return this.groupDisplayColumnsMap[rowGroupColumnId];\n    }\n    updateDisplayedColumns(source) {\n        const columnsForDisplay = this.calculateColumnsForDisplay();\n        this.buildDisplayedTrees(columnsForDisplay);\n        // also called when group opened/closed\n        this.updateGroupsAndDisplayedColumns(source);\n        // also called when group opened/closed\n        this.setFirstRightAndLastLeftPinned(source);\n    }\n    isSecondaryColumnsPresent() {\n        return exists(this.secondaryColumns);\n    }\n    setSecondaryColumns(colDefs, source = \"api\") {\n        const newColsPresent = colDefs && colDefs.length > 0;\n        // if not cols passed, and we had no cols anyway, then do nothing\n        if (!newColsPresent && missing(this.secondaryColumns)) {\n            return;\n        }\n        if (newColsPresent) {\n            this.processSecondaryColumnDefinitions(colDefs);\n            const balancedTreeResult = this.columnFactory.createColumnTree(colDefs, false, this.secondaryBalancedTree || this.previousSecondaryColumns || undefined);\n            this.destroyOldColumns(this.secondaryBalancedTree, balancedTreeResult.columnTree);\n            this.secondaryBalancedTree = balancedTreeResult.columnTree;\n            this.secondaryHeaderRowCount = balancedTreeResult.treeDept + 1;\n            this.secondaryColumns = this.getColumnsFromTree(this.secondaryBalancedTree);\n            this.secondaryColumnsMap = {};\n            this.secondaryColumns.forEach(col => this.secondaryColumnsMap[col.getId()] = col);\n            this.previousSecondaryColumns = null;\n        }\n        else {\n            this.previousSecondaryColumns = this.secondaryBalancedTree;\n            this.secondaryBalancedTree = null;\n            this.secondaryHeaderRowCount = -1;\n            this.secondaryColumns = null;\n            this.secondaryColumnsMap = {};\n        }\n        this.updateGridColumns();\n        this.updateDisplayedColumns(source);\n    }\n    processSecondaryColumnDefinitions(colDefs) {\n        const columnCallback = this.gridOptionsService.get('processPivotResultColDef') || this.gridOptionsService.get('processSecondaryColDef');\n        const groupCallback = this.gridOptionsService.get('processPivotResultColGroupDef') || this.gridOptionsService.get('processSecondaryColGroupDef');\n        if (!columnCallback && !groupCallback) {\n            return undefined;\n        }\n        const searchForColDefs = (colDefs2) => {\n            colDefs2.forEach((abstractColDef) => {\n                const isGroup = exists(abstractColDef.children);\n                if (isGroup) {\n                    const colGroupDef = abstractColDef;\n                    if (groupCallback) {\n                        groupCallback(colGroupDef);\n                    }\n                    searchForColDefs(colGroupDef.children);\n                }\n                else {\n                    const colDef = abstractColDef;\n                    if (columnCallback) {\n                        columnCallback(colDef);\n                    }\n                }\n            });\n        };\n        if (colDefs) {\n            searchForColDefs(colDefs);\n        }\n    }\n    // called from: applyColumnState, setColumnDefs, setSecondaryColumns\n    updateGridColumns() {\n        const prevGridCols = this.gridBalancedTree;\n        if (this.gridColsArePrimary) {\n            this.lastPrimaryOrder = this.gridColumns;\n        }\n        else {\n            this.lastSecondaryOrder = this.gridColumns;\n        }\n        let sortOrderToRecover;\n        if (this.secondaryColumns && this.secondaryBalancedTree) {\n            const hasSameColumns = this.secondaryColumns.every((col) => {\n                return this.gridColumnsMap[col.getColId()] !== undefined;\n            });\n            this.gridBalancedTree = this.secondaryBalancedTree.slice();\n            this.gridHeaderRowCount = this.secondaryHeaderRowCount;\n            this.gridColumns = this.secondaryColumns.slice();\n            this.gridColsArePrimary = false;\n            // If the current columns are the same or a subset of the previous\n            // we keep the previous order, otherwise we go back to the order the pivot\n            // cols are generated in\n            if (hasSameColumns) {\n                sortOrderToRecover = this.lastSecondaryOrder;\n            }\n        }\n        else if (this.primaryColumns) {\n            this.gridBalancedTree = this.primaryColumnTree.slice();\n            this.gridHeaderRowCount = this.primaryHeaderRowCount;\n            this.gridColumns = this.primaryColumns.slice();\n            this.gridColsArePrimary = true;\n            // updateGridColumns gets called after user adds a row group. we want to maintain the order of the columns\n            // when this happens (eg if user moved a column) rather than revert back to the original column order.\n            // likewise if changing in/out of pivot mode, we want to maintain the order of the cols\n            sortOrderToRecover = this.lastPrimaryOrder;\n        }\n        // create the new auto columns\n        const areAutoColsChanged = this.createGroupAutoColumnsIfNeeded();\n        // if auto group cols have changed, and we have a sort order, we need to move auto cols to the start\n        if (areAutoColsChanged && sortOrderToRecover) {\n            const groupAutoColsMap = convertToMap(this.groupAutoColumns.map(col => [col, true]));\n            // if group columns has changed, we don't preserve the group column order, so remove them from the old order\n            sortOrderToRecover = sortOrderToRecover.filter(col => !groupAutoColsMap.has(col));\n            // and add them to the start of the order\n            sortOrderToRecover = [...this.groupAutoColumns, ...sortOrderToRecover];\n        }\n        this.addAutoGroupToGridColumns();\n        this.orderGridColsLike(sortOrderToRecover);\n        this.gridColumns = this.placeLockedColumns(this.gridColumns);\n        this.calculateColumnsForGroupDisplay();\n        this.refreshQuickFilterColumns();\n        this.clearDisplayedAndViewportColumns();\n        this.colSpanActive = this.checkColSpanActiveInCols(this.gridColumns);\n        this.gridColumnsMap = {};\n        this.gridColumns.forEach(col => this.gridColumnsMap[col.getId()] = col);\n        this.setAutoHeightActive();\n        if (!areEqual(prevGridCols, this.gridBalancedTree)) {\n            const event = {\n                type: Events.EVENT_GRID_COLUMNS_CHANGED\n            };\n            this.eventService.dispatchEvent(event);\n        }\n    }\n    setAutoHeightActive() {\n        this.autoHeightActive = this.gridColumns.filter(col => col.isAutoHeight()).length > 0;\n        if (this.autoHeightActive) {\n            this.autoHeightActiveAtLeastOnce = true;\n            const supportedRowModel = this.gridOptionsService.isRowModelType('clientSide') || this.gridOptionsService.isRowModelType('serverSide');\n            if (!supportedRowModel) {\n                const message = 'AG Grid - autoHeight columns only work with Client Side Row Model and Server Side Row Model.';\n                doOnce(() => console.warn(message), 'autoHeightActive.wrongRowModel');\n            }\n        }\n    }\n    orderGridColsLike(colsOrder) {\n        if (missing(colsOrder)) {\n            return;\n        }\n        const lastOrderMapped = convertToMap(colsOrder.map((col, index) => [col, index]));\n        // only do the sort if at least one column is accounted for. columns will be not accounted for\n        // if changing from secondary to primary columns\n        let noColsFound = true;\n        this.gridColumns.forEach(col => {\n            if (lastOrderMapped.has(col)) {\n                noColsFound = false;\n            }\n        });\n        if (noColsFound) {\n            return;\n        }\n        // order cols in the same order as before. we need to make sure that all\n        // cols still exists, so filter out any that no longer exist.\n        const gridColsMap = convertToMap(this.gridColumns.map(col => [col, true]));\n        const oldColsOrdered = colsOrder.filter(col => gridColsMap.has(col));\n        const oldColsMap = convertToMap(oldColsOrdered.map(col => [col, true]));\n        const newColsOrdered = this.gridColumns.filter(col => !oldColsMap.has(col));\n        // add in the new columns, at the end (if no group), or at the end of the group (if a group)\n        const newGridColumns = oldColsOrdered.slice();\n        newColsOrdered.forEach(newCol => {\n            let parent = newCol.getOriginalParent();\n            // if no parent, means we are not grouping, so just add the column to the end\n            if (!parent) {\n                newGridColumns.push(newCol);\n                return;\n            }\n            // find the group the column belongs to. if no siblings at the current level (eg col in group on it's\n            // own) then go up one level and look for siblings there.\n            const siblings = [];\n            while (!siblings.length && parent) {\n                const leafCols = parent.getLeafColumns();\n                leafCols.forEach(leafCol => {\n                    const presentInNewGriColumns = newGridColumns.indexOf(leafCol) >= 0;\n                    const noYetInSiblings = siblings.indexOf(leafCol) < 0;\n                    if (presentInNewGriColumns && noYetInSiblings) {\n                        siblings.push(leafCol);\n                    }\n                });\n                parent = parent.getOriginalParent();\n            }\n            // if no siblings exist at any level, this means the col is in a group (or parent groups) on it's own\n            if (!siblings.length) {\n                newGridColumns.push(newCol);\n                return;\n            }\n            // find index of last column in the group\n            const indexes = siblings.map(col => newGridColumns.indexOf(col));\n            const lastIndex = Math.max(...indexes);\n            insertIntoArray(newGridColumns, newCol, lastIndex + 1);\n        });\n        this.gridColumns = newGridColumns;\n    }\n    isPrimaryColumnGroupsPresent() {\n        return this.primaryHeaderRowCount > 1;\n    }\n    // if we are using autoGroupCols, then they should be included for quick filter. this covers the\n    // following scenarios:\n    // a) user provides 'field' into autoGroupCol of normal grid, so now because a valid col to filter leafs on\n    // b) using tree data and user depends on autoGroupCol for first col, and we also want to filter on this\n    //    (tree data is a bit different, as parent rows can be filtered on, unlike row grouping)\n    refreshQuickFilterColumns() {\n        var _a;\n        let columnsForQuickFilter = (_a = (this.isPivotMode() ? this.secondaryColumns : this.primaryColumns)) !== null && _a !== void 0 ? _a : [];\n        if (this.groupAutoColumns) {\n            columnsForQuickFilter = columnsForQuickFilter.concat(this.groupAutoColumns);\n        }\n        this.columnsForQuickFilter = this.gridOptionsService.is('includeHiddenColumnsInQuickFilter')\n            ? columnsForQuickFilter\n            : columnsForQuickFilter.filter(col => col.isVisible() || col.isRowGroupActive());\n    }\n    placeLockedColumns(cols) {\n        const left = [];\n        const normal = [];\n        const right = [];\n        cols.forEach((col) => {\n            const position = col.getColDef().lockPosition;\n            if (position === 'right') {\n                right.push(col);\n            }\n            else if (position === 'left' || position === true) {\n                left.push(col);\n            }\n            else {\n                normal.push(col);\n            }\n        });\n        return [...left, ...normal, ...right];\n    }\n    addAutoGroupToGridColumns() {\n        if (missing(this.groupAutoColumns)) {\n            this.destroyOldColumns(this.groupAutoColsBalancedTree);\n            this.groupAutoColsBalancedTree = null;\n            return;\n        }\n        this.gridColumns = this.groupAutoColumns ? this.groupAutoColumns.concat(this.gridColumns) : this.gridColumns;\n        const newAutoColsTree = this.columnFactory.createForAutoGroups(this.groupAutoColumns, this.gridBalancedTree);\n        this.destroyOldColumns(this.groupAutoColsBalancedTree, newAutoColsTree);\n        this.groupAutoColsBalancedTree = newAutoColsTree;\n        this.gridBalancedTree = newAutoColsTree.concat(this.gridBalancedTree);\n    }\n    // gets called after we copy down grid columns, to make sure any part of the gui\n    // that tries to draw, eg the header, it will get empty lists of columns rather\n    // than stale columns. for example, the header will received gridColumnsChanged\n    // event, so will try and draw, but it will draw successfully when it acts on the\n    // virtualColumnsChanged event\n    clearDisplayedAndViewportColumns() {\n        this.viewportRowLeft = {};\n        this.viewportRowRight = {};\n        this.viewportRowCenter = {};\n        this.displayedColumnsLeft = [];\n        this.displayedColumnsRight = [];\n        this.displayedColumnsCenter = [];\n        this.displayedColumns = [];\n        this.viewportColumns = [];\n        this.headerViewportColumns = [];\n        this.viewportColumnsHash = '';\n    }\n    updateGroupsAndDisplayedColumns(source) {\n        this.updateOpenClosedVisibilityInColumnGroups();\n        this.deriveDisplayedColumns(source);\n        this.refreshFlexedColumns();\n        this.extractViewport();\n        this.updateBodyWidths();\n        // this event is picked up by the gui, headerRenderer and rowRenderer, to recalculate what columns to display\n        const event = {\n            type: Events.EVENT_DISPLAYED_COLUMNS_CHANGED\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    deriveDisplayedColumns(source) {\n        this.derivedDisplayedColumnsFromDisplayedTree(this.displayedTreeLeft, this.displayedColumnsLeft);\n        this.derivedDisplayedColumnsFromDisplayedTree(this.displayedTreeCentre, this.displayedColumnsCenter);\n        this.derivedDisplayedColumnsFromDisplayedTree(this.displayedTreeRight, this.displayedColumnsRight);\n        this.joinDisplayedColumns();\n        this.setLeftValues(source);\n        this.displayedAutoHeightCols = this.displayedColumns.filter(col => col.isAutoHeight());\n    }\n    isAutoRowHeightActive() {\n        return this.autoHeightActive;\n    }\n    wasAutoRowHeightEverActive() {\n        return this.autoHeightActiveAtLeastOnce;\n    }\n    joinDisplayedColumns() {\n        if (this.gridOptionsService.is('enableRtl')) {\n            this.displayedColumns = this.displayedColumnsRight\n                .concat(this.displayedColumnsCenter)\n                .concat(this.displayedColumnsLeft);\n        }\n        else {\n            this.displayedColumns = this.displayedColumnsLeft\n                .concat(this.displayedColumnsCenter)\n                .concat(this.displayedColumnsRight);\n        }\n    }\n    // sets the left pixel position of each column\n    setLeftValues(source) {\n        this.setLeftValuesOfColumns(source);\n        this.setLeftValuesOfGroups();\n    }\n    setLeftValuesOfColumns(source) {\n        if (!this.primaryColumns) {\n            return;\n        }\n        // go through each list of displayed columns\n        const allColumns = this.primaryColumns.slice(0);\n        // let totalColumnWidth = this.getWidthOfColsInList()\n        const doingRtl = this.gridOptionsService.is('enableRtl');\n        [\n            this.displayedColumnsLeft,\n            this.displayedColumnsRight,\n            this.displayedColumnsCenter\n        ].forEach(columns => {\n            if (doingRtl) {\n                // when doing RTL, we start at the top most pixel (ie RHS) and work backwards\n                let left = this.getWidthOfColsInList(columns);\n                columns.forEach(column => {\n                    left -= column.getActualWidth();\n                    column.setLeft(left, source);\n                });\n            }\n            else {\n                // otherwise normal LTR, we start at zero\n                let left = 0;\n                columns.forEach(column => {\n                    column.setLeft(left, source);\n                    left += column.getActualWidth();\n                });\n            }\n            removeAllFromArray(allColumns, columns);\n        });\n        // items left in allColumns are columns not displayed, so remove the left position. this is\n        // important for the rows, as if a col is made visible, then taken out, then made visible again,\n        // we don't want the animation of the cell floating in from the old position, whatever that was.\n        allColumns.forEach((column) => {\n            column.setLeft(null, source);\n        });\n    }\n    setLeftValuesOfGroups() {\n        // a groups left value is the lest left value of it's children\n        [\n            this.displayedTreeLeft,\n            this.displayedTreeRight,\n            this.displayedTreeCentre\n        ].forEach(columns => {\n            columns.forEach(column => {\n                if (column instanceof ColumnGroup) {\n                    const columnGroup = column;\n                    columnGroup.checkLeft();\n                }\n            });\n        });\n    }\n    derivedDisplayedColumnsFromDisplayedTree(tree, columns) {\n        columns.length = 0;\n        this.columnUtils.depthFirstDisplayedColumnTreeSearch(tree, (child) => {\n            if (child instanceof Column) {\n                columns.push(child);\n            }\n        });\n    }\n    extractViewportColumns() {\n        if (this.suppressColumnVirtualisation) {\n            // no virtualisation, so don't filter\n            this.viewportColumnsCenter = this.displayedColumnsCenter;\n            this.headerViewportColumnsCenter = this.displayedColumnsCenter;\n        }\n        else {\n            // filter out what should be visible\n            this.viewportColumnsCenter = this.displayedColumnsCenter.filter(this.isColumnInRowViewport.bind(this));\n            this.headerViewportColumnsCenter = this.displayedColumnsCenter.filter(this.isColumnInHeaderViewport.bind(this));\n        }\n        this.viewportColumns = this.viewportColumnsCenter\n            .concat(this.displayedColumnsLeft)\n            .concat(this.displayedColumnsRight);\n        this.headerViewportColumns = this.headerViewportColumnsCenter\n            .concat(this.displayedColumnsLeft)\n            .concat(this.displayedColumnsRight);\n    }\n    getVirtualHeaderGroupRow(type, dept) {\n        let result;\n        switch (type) {\n            case 'left':\n                result = this.viewportRowLeft[dept];\n                break;\n            case 'right':\n                result = this.viewportRowRight[dept];\n                break;\n            default:\n                result = this.viewportRowCenter[dept];\n                break;\n        }\n        if (missing(result)) {\n            result = [];\n        }\n        return result;\n    }\n    calculateHeaderRows() {\n        // go through each group, see if any of it's cols are displayed, and if yes,\n        // then this group is included\n        this.viewportRowLeft = {};\n        this.viewportRowRight = {};\n        this.viewportRowCenter = {};\n        // for easy lookup when building the groups.\n        const virtualColIds = {};\n        this.headerViewportColumns.forEach(col => virtualColIds[col.getId()] = true);\n        const testGroup = (children, result, dept) => {\n            let returnValue = false;\n            for (let i = 0; i < children.length; i++) {\n                // see if this item is within viewport\n                const child = children[i];\n                let addThisItem = false;\n                if (child instanceof Column) {\n                    // for column, test if column is included\n                    addThisItem = virtualColIds[child.getId()] === true;\n                }\n                else {\n                    // if group, base decision on children\n                    const columnGroup = child;\n                    const displayedChildren = columnGroup.getDisplayedChildren();\n                    if (displayedChildren) {\n                        addThisItem = testGroup(displayedChildren, result, dept + 1);\n                    }\n                }\n                if (addThisItem) {\n                    returnValue = true;\n                    if (!result[dept]) {\n                        result[dept] = [];\n                    }\n                    result[dept].push(child);\n                }\n            }\n            return returnValue;\n        };\n        testGroup(this.displayedTreeLeft, this.viewportRowLeft, 0);\n        testGroup(this.displayedTreeRight, this.viewportRowRight, 0);\n        testGroup(this.displayedTreeCentre, this.viewportRowCenter, 0);\n    }\n    extractViewport() {\n        const hashColumn = (c) => `${c.getId()}-${c.getPinned() || 'normal'}`;\n        this.extractViewportColumns();\n        const newHash = this.viewportColumns.map(hashColumn).join('#');\n        const changed = this.viewportColumnsHash !== newHash;\n        if (changed) {\n            this.viewportColumnsHash = newHash;\n            this.calculateHeaderRows();\n        }\n        return changed;\n    }\n    refreshFlexedColumns(params = {}) {\n        const source = params.source ? params.source : 'flex';\n        if (params.viewportWidth != null) {\n            this.flexViewportWidth = params.viewportWidth;\n        }\n        if (!this.flexViewportWidth) {\n            return [];\n        }\n        // If the grid has left-over space, divide it between flexing columns in proportion to their flex value.\n        // A \"flexing column\" is one that has a 'flex' value set and is not currently being constrained by its\n        // minWidth or maxWidth rules.\n        let flexAfterDisplayIndex = -1;\n        if (params.resizingCols) {\n            params.resizingCols.forEach(col => {\n                const indexOfCol = this.displayedColumnsCenter.indexOf(col);\n                if (flexAfterDisplayIndex < indexOfCol) {\n                    flexAfterDisplayIndex = indexOfCol;\n                }\n            });\n        }\n        const isColFlex = (col) => {\n            const afterResizingCols = this.displayedColumnsCenter.indexOf(col) > flexAfterDisplayIndex;\n            return col.getFlex() && afterResizingCols;\n        };\n        const knownWidthColumns = this.displayedColumnsCenter.filter(col => !isColFlex(col));\n        const flexingColumns = this.displayedColumnsCenter.filter(col => isColFlex(col));\n        const changedColumns = [];\n        if (!flexingColumns.length) {\n            return [];\n        }\n        const flexingColumnSizes = [];\n        let spaceForFlexingColumns;\n        outer: while (true) {\n            const totalFlex = flexingColumns.reduce((count, col) => count + col.getFlex(), 0);\n            spaceForFlexingColumns = this.flexViewportWidth - this.getWidthOfColsInList(knownWidthColumns);\n            for (let i = 0; i < flexingColumns.length; i++) {\n                const col = flexingColumns[i];\n                const widthByFlexRule = spaceForFlexingColumns * col.getFlex() / totalFlex;\n                let constrainedWidth = 0;\n                const minWidth = col.getMinWidth();\n                const maxWidth = col.getMaxWidth();\n                if (exists(minWidth) && widthByFlexRule < minWidth) {\n                    constrainedWidth = minWidth;\n                }\n                else if (exists(maxWidth) && widthByFlexRule > maxWidth) {\n                    constrainedWidth = maxWidth;\n                }\n                if (constrainedWidth) {\n                    // This column is not in fact flexing as it is being constrained to a specific size\n                    // so remove it from the list of flexing columns and start again\n                    col.setActualWidth(constrainedWidth, source);\n                    removeFromArray(flexingColumns, col);\n                    changedColumns.push(col);\n                    knownWidthColumns.push(col);\n                    continue outer;\n                }\n                flexingColumnSizes[i] = Math.round(widthByFlexRule);\n            }\n            break;\n        }\n        let remainingSpace = spaceForFlexingColumns;\n        flexingColumns.forEach((col, i) => {\n            col.setActualWidth(Math.min(flexingColumnSizes[i], remainingSpace), source);\n            changedColumns.push(col);\n            remainingSpace -= flexingColumnSizes[i];\n        });\n        if (!params.skipSetLeft) {\n            this.setLeftValues(source);\n        }\n        if (params.updateBodyWidths) {\n            this.updateBodyWidths();\n        }\n        if (params.fireResizedEvent) {\n            this.dispatchColumnResizedEvent(changedColumns, true, source, flexingColumns);\n        }\n        return flexingColumns;\n    }\n    // called from api\n    sizeColumnsToFit(gridWidth, source = \"sizeColumnsToFit\", silent, params) {\n        var _a, _b, _c, _d, _e;\n        const limitsMap = {};\n        if (params) {\n            (_a = params === null || params === void 0 ? void 0 : params.columnLimits) === null || _a === void 0 ? void 0 : _a.forEach((_a) => {\n                var { key } = _a, dimensions = __rest(_a, [\"key\"]);\n                limitsMap[typeof key === 'string' ? key : key.getColId()] = dimensions;\n            });\n        }\n        // avoid divide by zero\n        const allDisplayedColumns = this.getAllDisplayedColumns();\n        const doColumnsAlreadyFit = gridWidth === this.getWidthOfColsInList(allDisplayedColumns);\n        if (gridWidth <= 0 || !allDisplayedColumns.length || doColumnsAlreadyFit) {\n            return;\n        }\n        const colsToSpread = [];\n        const colsToNotSpread = [];\n        allDisplayedColumns.forEach(column => {\n            if (column.getColDef().suppressSizeToFit === true) {\n                colsToNotSpread.push(column);\n            }\n            else {\n                colsToSpread.push(column);\n            }\n        });\n        // make a copy of the cols that are going to be resized\n        const colsToDispatchEventFor = colsToSpread.slice(0);\n        let finishedResizing = false;\n        const moveToNotSpread = (column) => {\n            removeFromArray(colsToSpread, column);\n            colsToNotSpread.push(column);\n        };\n        // resetting cols to their original width makes the sizeColumnsToFit more deterministic,\n        // rather than depending on the current size of the columns. most users call sizeColumnsToFit\n        // immediately after grid is created, so will make no difference. however if application is calling\n        // sizeColumnsToFit repeatedly (eg after column group is opened / closed repeatedly) we don't want\n        // the columns to start shrinking / growing over time.\n        //\n        // NOTE: the process below will assign values to `this.actualWidth` of each column without firing events\n        // for this reason we need to manually dispatch resize events after the resize has been done for each column.\n        colsToSpread.forEach(column => column.resetActualWidth(source));\n        while (!finishedResizing) {\n            finishedResizing = true;\n            const availablePixels = gridWidth - this.getWidthOfColsInList(colsToNotSpread);\n            if (availablePixels <= 0) {\n                // no width, set everything to minimum\n                colsToSpread.forEach((column) => {\n                    var _a, _b;\n                    const widthOverride = (_b = (_a = limitsMap === null || limitsMap === void 0 ? void 0 : limitsMap[column.getId()]) === null || _a === void 0 ? void 0 : _a.minWidth) !== null && _b !== void 0 ? _b : params === null || params === void 0 ? void 0 : params.defaultMinWidth;\n                    if (typeof widthOverride === 'number') {\n                        column.setActualWidth(widthOverride);\n                        return;\n                    }\n                    column.setMinimum(source);\n                });\n            }\n            else {\n                const scale = availablePixels / this.getWidthOfColsInList(colsToSpread);\n                // we set the pixels for the last col based on what's left, as otherwise\n                // we could be a pixel or two short or extra because of rounding errors.\n                let pixelsForLastCol = availablePixels;\n                // backwards through loop, as we are removing items as we go\n                for (let i = colsToSpread.length - 1; i >= 0; i--) {\n                    const column = colsToSpread[i];\n                    const widthOverride = limitsMap === null || limitsMap === void 0 ? void 0 : limitsMap[column.getId()];\n                    const minOverride = ((_b = widthOverride === null || widthOverride === void 0 ? void 0 : widthOverride.minWidth) !== null && _b !== void 0 ? _b : params === null || params === void 0 ? void 0 : params.defaultMinWidth);\n                    const maxOverride = ((_c = widthOverride === null || widthOverride === void 0 ? void 0 : widthOverride.maxWidth) !== null && _c !== void 0 ? _c : params === null || params === void 0 ? void 0 : params.defaultMaxWidth);\n                    const colMinWidth = (_d = column.getMinWidth()) !== null && _d !== void 0 ? _d : 0;\n                    const colMaxWidth = (_e = column.getMaxWidth()) !== null && _e !== void 0 ? _e : Number.MAX_VALUE;\n                    const minWidth = typeof minOverride === 'number' && minOverride > colMinWidth ? minOverride : column.getMinWidth();\n                    const maxWidth = typeof maxOverride === 'number' && maxOverride < colMaxWidth ? maxOverride : column.getMaxWidth();\n                    let newWidth = Math.round(column.getActualWidth() * scale);\n                    if (exists(minWidth) && newWidth < minWidth) {\n                        newWidth = minWidth;\n                        moveToNotSpread(column);\n                        finishedResizing = false;\n                    }\n                    else if (exists(maxWidth) && newWidth > maxWidth) {\n                        newWidth = maxWidth;\n                        moveToNotSpread(column);\n                        finishedResizing = false;\n                    }\n                    else if (i === 0) { // if this is the last column\n                        newWidth = pixelsForLastCol;\n                    }\n                    column.setActualWidth(newWidth, source, true);\n                    pixelsForLastCol -= newWidth;\n                }\n            }\n        }\n        // see notes above\n        colsToDispatchEventFor.forEach(col => {\n            col.fireColumnWidthChangedEvent(source);\n        });\n        this.setLeftValues(source);\n        this.updateBodyWidths();\n        if (silent) {\n            return;\n        }\n        this.dispatchColumnResizedEvent(colsToDispatchEventFor, true, source);\n    }\n    buildDisplayedTrees(visibleColumns) {\n        const leftVisibleColumns = [];\n        const rightVisibleColumns = [];\n        const centerVisibleColumns = [];\n        visibleColumns.forEach(column => {\n            switch (column.getPinned()) {\n                case \"left\":\n                    leftVisibleColumns.push(column);\n                    break;\n                case \"right\":\n                    rightVisibleColumns.push(column);\n                    break;\n                default:\n                    centerVisibleColumns.push(column);\n                    break;\n            }\n        });\n        const groupInstanceIdCreator = new GroupInstanceIdCreator();\n        this.displayedTreeLeft = this.displayedGroupCreator.createDisplayedGroups(leftVisibleColumns, this.gridBalancedTree, groupInstanceIdCreator, 'left', this.displayedTreeLeft);\n        this.displayedTreeRight = this.displayedGroupCreator.createDisplayedGroups(rightVisibleColumns, this.gridBalancedTree, groupInstanceIdCreator, 'right', this.displayedTreeRight);\n        this.displayedTreeCentre = this.displayedGroupCreator.createDisplayedGroups(centerVisibleColumns, this.gridBalancedTree, groupInstanceIdCreator, null, this.displayedTreeCentre);\n        this.updateDisplayedMap();\n    }\n    updateDisplayedMap() {\n        this.displayedColumnsAndGroupsMap = {};\n        const func = (child) => {\n            this.displayedColumnsAndGroupsMap[child.getUniqueId()] = child;\n        };\n        this.columnUtils.depthFirstAllColumnTreeSearch(this.displayedTreeCentre, func);\n        this.columnUtils.depthFirstAllColumnTreeSearch(this.displayedTreeLeft, func);\n        this.columnUtils.depthFirstAllColumnTreeSearch(this.displayedTreeRight, func);\n    }\n    isDisplayed(item) {\n        const fromMap = this.displayedColumnsAndGroupsMap[item.getUniqueId()];\n        // check for reference, in case new column / group with same id is now present\n        return fromMap === item;\n    }\n    updateOpenClosedVisibilityInColumnGroups() {\n        const allColumnGroups = this.getAllDisplayedTrees();\n        this.columnUtils.depthFirstAllColumnTreeSearch(allColumnGroups, child => {\n            if (child instanceof ColumnGroup) {\n                const columnGroup = child;\n                columnGroup.calculateDisplayedColumns();\n            }\n        });\n    }\n    getGroupAutoColumns() {\n        return this.groupAutoColumns;\n    }\n    /**\n     * Creates new auto group columns if required\n     * @returns whether auto cols have changed\n     */\n    createGroupAutoColumnsIfNeeded() {\n        const forceRecreateAutoGroups = this.forceRecreateAutoGroups;\n        this.forceRecreateAutoGroups = false;\n        if (!this.autoGroupsNeedBuilding) {\n            return false;\n        }\n        this.autoGroupsNeedBuilding = false;\n        const groupFullWidthRow = this.gridOptionsService.isGroupUseEntireRow(this.pivotMode);\n        // we need to allow suppressing auto-column separately for group and pivot as the normal situation\n        // is CSRM and user provides group column themselves for normal view, but when they go into pivot the\n        // columns are generated by the grid so no opportunity for user to provide group column. so need a way\n        // to suppress auto-col for grouping only, and not pivot.\n        // however if using Viewport RM or SSRM and user is providing the columns, the user may wish full control\n        // of the group column in this instance.\n        const suppressAutoColumn = this.pivotMode ?\n            this.gridOptionsService.is('pivotSuppressAutoColumn') : this.isGroupSuppressAutoColumn();\n        const groupingActive = this.rowGroupColumns.length > 0 || this.usingTreeData;\n        const needAutoColumns = groupingActive && !suppressAutoColumn && !groupFullWidthRow;\n        if (needAutoColumns) {\n            const existingCols = this.groupAutoColumns || [];\n            const newAutoGroupCols = this.autoGroupColService.createAutoGroupColumns(existingCols, this.rowGroupColumns);\n            const autoColsDifferent = !this.autoColsEqual(newAutoGroupCols, this.groupAutoColumns);\n            // we force recreate so new group cols pick up the new\n            // definitions. otherwise we could ignore the new cols because they appear to be the same.\n            if (autoColsDifferent || forceRecreateAutoGroups) {\n                this.groupAutoColumns = newAutoGroupCols;\n                return true;\n            }\n        }\n        else {\n            this.groupAutoColumns = null;\n        }\n        return false;\n    }\n    isGroupSuppressAutoColumn() {\n        const groupDisplayType = this.gridOptionsService.get('groupDisplayType');\n        const isCustomRowGroups = groupDisplayType ? matchesGroupDisplayType('custom', groupDisplayType) : false;\n        if (isCustomRowGroups) {\n            return true;\n        }\n        const treeDataDisplayType = this.gridOptionsService.get('treeDataDisplayType');\n        return treeDataDisplayType ? matchesTreeDataDisplayType('custom', treeDataDisplayType) : false;\n    }\n    autoColsEqual(colsA, colsB) {\n        return areEqual(colsA, colsB, (a, b) => a.getColId() === b.getColId());\n    }\n    getWidthOfColsInList(columnList) {\n        return columnList.reduce((width, col) => width + col.getActualWidth(), 0);\n    }\n    getGridBalancedTree() {\n        return this.gridBalancedTree;\n    }\n    hasFloatingFilters() {\n        if (!this.gridColumns) {\n            return false;\n        }\n        const res = this.gridColumns.some(col => col.getColDef().floatingFilter);\n        return res;\n    }\n    getFirstDisplayedColumn() {\n        const isRtl = this.gridOptionsService.is('enableRtl');\n        const queryOrder = [\n            'getDisplayedLeftColumns',\n            'getDisplayedCenterColumns',\n            'getDisplayedRightColumns'\n        ];\n        if (isRtl) {\n            queryOrder.reverse();\n        }\n        for (let i = 0; i < queryOrder.length; i++) {\n            const container = this[queryOrder[i]]();\n            if (container.length) {\n                return isRtl ? last(container) : container[0];\n            }\n        }\n        return null;\n    }\n    setColumnHeaderHeight(col, height) {\n        const changed = col.setAutoHeaderHeight(height);\n        if (changed) {\n            const event = {\n                type: Events.EVENT_COLUMN_HEADER_HEIGHT_CHANGED,\n                column: col,\n                columns: [col],\n                source: 'autosizeColumnHeaderHeight',\n            };\n            this.eventService.dispatchEvent(event);\n        }\n    }\n    getColumnGroupHeaderRowHeight() {\n        if (this.isPivotMode()) {\n            return this.getPivotGroupHeaderHeight();\n        }\n        return this.getGroupHeaderHeight();\n    }\n    getColumnHeaderRowHeight() {\n        const defaultHeight = (this.isPivotMode() ?\n            this.getPivotHeaderHeight() :\n            this.getHeaderHeight());\n        const displayedHeights = this.getAllDisplayedColumns()\n            .filter((col) => col.isAutoHeaderHeight())\n            .map((col) => col.getAutoHeaderHeight() || 0);\n        return Math.max(defaultHeight, ...displayedHeights);\n    }\n    getHeaderHeight() {\n        var _a;\n        return (_a = this.gridOptionsService.getNum('headerHeight')) !== null && _a !== void 0 ? _a : this.environment.getFromTheme(25, 'headerHeight');\n    }\n    getFloatingFiltersHeight() {\n        var _a;\n        return (_a = this.gridOptionsService.getNum('floatingFiltersHeight')) !== null && _a !== void 0 ? _a : this.getHeaderHeight();\n    }\n    getGroupHeaderHeight() {\n        var _a;\n        return (_a = this.gridOptionsService.getNum('groupHeaderHeight')) !== null && _a !== void 0 ? _a : this.getHeaderHeight();\n    }\n    getPivotHeaderHeight() {\n        var _a;\n        return (_a = this.gridOptionsService.getNum('pivotHeaderHeight')) !== null && _a !== void 0 ? _a : this.getHeaderHeight();\n    }\n    getPivotGroupHeaderHeight() {\n        var _a;\n        return (_a = this.gridOptionsService.getNum('pivotGroupHeaderHeight')) !== null && _a !== void 0 ? _a : this.getGroupHeaderHeight();\n    }\n};\n__decorate$2w([\n    Autowired('expressionService')\n], ColumnModel.prototype, \"expressionService\", void 0);\n__decorate$2w([\n    Autowired('columnFactory')\n], ColumnModel.prototype, \"columnFactory\", void 0);\n__decorate$2w([\n    Autowired('displayedGroupCreator')\n], ColumnModel.prototype, \"displayedGroupCreator\", void 0);\n__decorate$2w([\n    Autowired('ctrlsService')\n], ColumnModel.prototype, \"ctrlsService\", void 0);\n__decorate$2w([\n    Autowired('autoWidthCalculator')\n], ColumnModel.prototype, \"autoWidthCalculator\", void 0);\n__decorate$2w([\n    Autowired('columnUtils')\n], ColumnModel.prototype, \"columnUtils\", void 0);\n__decorate$2w([\n    Autowired('columnAnimationService')\n], ColumnModel.prototype, \"columnAnimationService\", void 0);\n__decorate$2w([\n    Autowired('autoGroupColService')\n], ColumnModel.prototype, \"autoGroupColService\", void 0);\n__decorate$2w([\n    Optional('aggFuncService')\n], ColumnModel.prototype, \"aggFuncService\", void 0);\n__decorate$2w([\n    Optional('valueCache')\n], ColumnModel.prototype, \"valueCache\", void 0);\n__decorate$2w([\n    Optional('animationFrameService')\n], ColumnModel.prototype, \"animationFrameService\", void 0);\n__decorate$2w([\n    Autowired('sortController')\n], ColumnModel.prototype, \"sortController\", void 0);\n__decorate$2w([\n    Autowired('columnDefFactory')\n], ColumnModel.prototype, \"columnDefFactory\", void 0);\n__decorate$2w([\n    PostConstruct\n], ColumnModel.prototype, \"init\", null);\n__decorate$2w([\n    PreDestroy\n], ColumnModel.prototype, \"destroyColumns\", null);\n__decorate$2w([\n    __param$8(0, Qualifier('loggerFactory'))\n], ColumnModel.prototype, \"setBeans\", null);\nColumnModel = __decorate$2w([\n    Bean('columnModel')\n], ColumnModel);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2v = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// takes in a list of columns, as specified by the column definitions, and returns column groups\nlet ColumnUtils = class ColumnUtils extends BeanStub {\n    calculateColMinWidth(colDef) {\n        return colDef.minWidth != null ? colDef.minWidth : this.environment.getMinColWidth();\n    }\n    calculateColMaxWidth(colDef) {\n        return colDef.maxWidth != null ? colDef.maxWidth : Number.MAX_SAFE_INTEGER;\n    }\n    calculateColInitialWidth(colDef) {\n        const minColWidth = this.calculateColMinWidth(colDef);\n        const maxColWidth = this.calculateColMaxWidth(colDef);\n        let width;\n        const colDefWidth = attrToNumber(colDef.width);\n        const colDefInitialWidth = attrToNumber(colDef.initialWidth);\n        if (colDefWidth != null) {\n            width = colDefWidth;\n        }\n        else if (colDefInitialWidth != null) {\n            width = colDefInitialWidth;\n        }\n        else {\n            width = 200;\n        }\n        return Math.max(Math.min(width, maxColWidth), minColWidth);\n    }\n    getOriginalPathForColumn(column, originalBalancedTree) {\n        const result = [];\n        let found = false;\n        const recursePath = (balancedColumnTree, dept) => {\n            for (let i = 0; i < balancedColumnTree.length; i++) {\n                if (found) {\n                    return;\n                }\n                // quit the search, so 'result' is kept with the found result\n                const node = balancedColumnTree[i];\n                if (node instanceof ProvidedColumnGroup) {\n                    const nextNode = node;\n                    recursePath(nextNode.getChildren(), dept + 1);\n                    result[dept] = node;\n                }\n                else if (node === column) {\n                    found = true;\n                }\n            }\n        };\n        recursePath(originalBalancedTree, 0);\n        // we should always find the path, but in case there is a bug somewhere, returning null\n        // will make it fail rather than provide a 'hard to track down' bug\n        return found ? result : null;\n    }\n    depthFirstOriginalTreeSearch(parent, tree, callback) {\n        if (!tree) {\n            return;\n        }\n        tree.forEach((child) => {\n            if (child instanceof ProvidedColumnGroup) {\n                this.depthFirstOriginalTreeSearch(child, child.getChildren(), callback);\n            }\n            callback(child, parent);\n        });\n    }\n    depthFirstAllColumnTreeSearch(tree, callback) {\n        if (!tree) {\n            return;\n        }\n        tree.forEach((child) => {\n            if (child instanceof ColumnGroup) {\n                this.depthFirstAllColumnTreeSearch(child.getChildren(), callback);\n            }\n            callback(child);\n        });\n    }\n    depthFirstDisplayedColumnTreeSearch(tree, callback) {\n        if (!tree) {\n            return;\n        }\n        tree.forEach((child) => {\n            if (child instanceof ColumnGroup) {\n                this.depthFirstDisplayedColumnTreeSearch(child.getDisplayedChildren(), callback);\n            }\n            callback(child);\n        });\n    }\n};\nColumnUtils = __decorate$2v([\n    Bean('columnUtils')\n], ColumnUtils);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2u = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// takes in a list of columns, as specified by the column definitions, and returns column groups\nlet DisplayedGroupCreator = class DisplayedGroupCreator extends BeanStub {\n    createDisplayedGroups(\n    // all displayed columns sorted - this is the columns the grid should show\n    sortedVisibleColumns, \n    // the tree of columns, as provided by the users, used to know what groups columns roll up into\n    balancedColumnTree, \n    // creates unique id's for the group\n    groupInstanceIdCreator, \n    // whether it's left, right or center col\n    pinned, \n    // we try to reuse old groups if we can, to allow gui to do animation\n    oldDisplayedGroups) {\n        const result = [];\n        let previousRealPath;\n        let previousOriginalPath;\n        const oldColumnsMapped = this.mapOldGroupsById(oldDisplayedGroups);\n        // go through each column, then do a bottom up comparison to the previous column, and start\n        // to share groups if they converge at any point.\n        sortedVisibleColumns.forEach((currentColumn) => {\n            const currentOriginalPath = this.getOriginalPathForColumn(balancedColumnTree, currentColumn);\n            const currentRealPath = [];\n            const firstColumn = !previousOriginalPath;\n            for (let i = 0; i < currentOriginalPath.length; i++) {\n                if (firstColumn || currentOriginalPath[i] !== previousOriginalPath[i]) {\n                    // new group needed\n                    const newGroup = this.createColumnGroup(currentOriginalPath[i], groupInstanceIdCreator, oldColumnsMapped, pinned);\n                    currentRealPath[i] = newGroup;\n                    // if top level, add to result, otherwise add to parent\n                    if (i == 0) {\n                        result.push(newGroup);\n                    }\n                    else {\n                        currentRealPath[i - 1].addChild(newGroup);\n                    }\n                }\n                else {\n                    // reuse old group\n                    currentRealPath[i] = previousRealPath[i];\n                }\n            }\n            const noColumnGroups = currentRealPath.length === 0;\n            if (noColumnGroups) {\n                // if we are not grouping, then the result of the above is an empty\n                // path (no groups), and we just add the column to the root list.\n                result.push(currentColumn);\n            }\n            else {\n                const leafGroup = last(currentRealPath);\n                leafGroup.addChild(currentColumn);\n            }\n            previousRealPath = currentRealPath;\n            previousOriginalPath = currentOriginalPath;\n        });\n        this.setupParentsIntoColumns(result, null);\n        return result;\n    }\n    createColumnGroup(providedGroup, groupInstanceIdCreator, oldColumnsMapped, pinned) {\n        const groupId = providedGroup.getGroupId();\n        const instanceId = groupInstanceIdCreator.getInstanceIdForKey(groupId);\n        const uniqueId = ColumnGroup.createUniqueId(groupId, instanceId);\n        let columnGroup = oldColumnsMapped[uniqueId];\n        // if the user is setting new colDefs, it is possible that the id's overlap, and we\n        // would have a false match from above. so we double check we are talking about the\n        // same original column group.\n        if (columnGroup && columnGroup.getProvidedColumnGroup() !== providedGroup) {\n            columnGroup = null;\n        }\n        if (exists(columnGroup)) {\n            // clean out the old column group here, as we will be adding children into it again\n            columnGroup.reset();\n        }\n        else {\n            columnGroup = new ColumnGroup(providedGroup, groupId, instanceId, pinned);\n            this.context.createBean(columnGroup);\n        }\n        return columnGroup;\n    }\n    // returns back a 2d map of ColumnGroup as follows: groupId -> instanceId -> ColumnGroup\n    mapOldGroupsById(displayedGroups) {\n        const result = {};\n        const recursive = (columnsOrGroups) => {\n            columnsOrGroups.forEach(columnOrGroup => {\n                if (columnOrGroup instanceof ColumnGroup) {\n                    const columnGroup = columnOrGroup;\n                    result[columnOrGroup.getUniqueId()] = columnGroup;\n                    recursive(columnGroup.getChildren());\n                }\n            });\n        };\n        if (displayedGroups) {\n            recursive(displayedGroups);\n        }\n        return result;\n    }\n    setupParentsIntoColumns(columnsOrGroups, parent) {\n        columnsOrGroups.forEach(columnsOrGroup => {\n            columnsOrGroup.setParent(parent);\n            if (columnsOrGroup instanceof ColumnGroup) {\n                const columnGroup = columnsOrGroup;\n                this.setupParentsIntoColumns(columnGroup.getChildren(), columnGroup);\n            }\n        });\n    }\n    getOriginalPathForColumn(balancedColumnTree, column) {\n        const result = [];\n        let found = false;\n        const recursePath = (columnTree, dept) => {\n            for (let i = 0; i < columnTree.length; i++) {\n                // quit the search, so 'result' is kept with the found result\n                if (found) {\n                    return;\n                }\n                const node = columnTree[i];\n                if (node instanceof ProvidedColumnGroup) {\n                    recursePath(node.getChildren(), dept + 1);\n                    result[dept] = node;\n                }\n                else if (node === column) {\n                    found = true;\n                }\n            }\n        };\n        recursePath(balancedColumnTree, 0);\n        // it's possible we didn't find a path. this happens if the column is generated\n        // by the grid (auto-group), in that the definition didn't come from the client. in this case,\n        // we create a fake original path.\n        if (found) {\n            return result;\n        }\n        console.warn('AG Grid: could not get path');\n        return null;\n    }\n};\nDisplayedGroupCreator = __decorate$2u([\n    Bean('displayedGroupCreator')\n], DisplayedGroupCreator);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2t = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet AgStackComponentsRegistry = class AgStackComponentsRegistry extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.componentsMappedByName = {};\n    }\n    setupComponents(components) {\n        if (components) {\n            components.forEach(componentMeta => this.addComponent(componentMeta));\n        }\n    }\n    addComponent(componentMeta) {\n        // get name of the class as a string\n        // insert a dash after every capital letter\n        // let classEscaped = className.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n        const classEscaped = componentMeta.componentName.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n        // put all to upper case\n        const classUpperCase = classEscaped.toUpperCase();\n        // finally store\n        this.componentsMappedByName[classUpperCase] = componentMeta.componentClass;\n    }\n    getComponentClass(htmlTag) {\n        return this.componentsMappedByName[htmlTag];\n    }\n};\nAgStackComponentsRegistry = __decorate$2t([\n    Bean('agStackComponentsRegistry')\n], AgStackComponentsRegistry);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n// ARIA HELPER FUNCTIONS\nfunction toggleAriaAttribute(element, attribute, value) {\n    if (value == null || value == '') {\n        removeAriaAttribute(element, attribute);\n    }\n    else {\n        setAriaAttribute(element, attribute, value);\n    }\n}\nfunction setAriaAttribute(element, attribute, value) {\n    element.setAttribute(ariaAttributeName(attribute), value.toString());\n}\nfunction removeAriaAttribute(element, attribute) {\n    element.removeAttribute(ariaAttributeName(attribute));\n}\nfunction ariaAttributeName(attribute) {\n    return `aria-${attribute}`;\n}\nfunction setAriaRole(element, role) {\n    if (role) {\n        element.setAttribute('role', role);\n    }\n    else {\n        element.removeAttribute('role');\n    }\n}\nfunction getAriaSortState(sortDirection) {\n    let sort;\n    if (sortDirection === 'asc') {\n        sort = 'ascending';\n    }\n    else if (sortDirection === 'desc') {\n        sort = 'descending';\n    }\n    else if (sortDirection === 'mixed') {\n        sort = 'other';\n    }\n    else {\n        sort = 'none';\n    }\n    return sort;\n}\n// ARIA ATTRIBUTE GETTERS\nfunction getAriaLevel(element) {\n    return parseInt(element.getAttribute('aria-level'), 10);\n}\nfunction getAriaPosInSet(element) {\n    return parseInt(element.getAttribute('aria-posinset'), 10);\n}\nfunction getAriaDescribedBy(element) {\n    return element.getAttribute('aria-describedby') || '';\n}\n// ARIA ATTRIBUTE SETTERS\nfunction setAriaLabel(element, label) {\n    toggleAriaAttribute(element, 'label', label);\n}\nfunction setAriaLabelledBy(element, labelledBy) {\n    toggleAriaAttribute(element, 'labelledby', labelledBy);\n}\nfunction setAriaDescription(element, description) {\n    toggleAriaAttribute(element, 'description', description);\n}\nfunction setAriaDescribedBy(element, describedby) {\n    toggleAriaAttribute(element, 'describedby', describedby);\n}\nfunction setAriaLive(element, live) {\n    toggleAriaAttribute(element, 'live', live);\n}\nfunction setAriaLevel(element, level) {\n    toggleAriaAttribute(element, 'level', level);\n}\nfunction setAriaDisabled(element, disabled) {\n    toggleAriaAttribute(element, 'disabled', disabled);\n}\nfunction setAriaHidden(element, hidden) {\n    toggleAriaAttribute(element, 'hidden', hidden);\n}\nfunction setAriaExpanded(element, expanded) {\n    setAriaAttribute(element, 'expanded', expanded);\n}\nfunction removeAriaExpanded(element) {\n    removeAriaAttribute(element, 'expanded');\n}\nfunction setAriaSetSize(element, setsize) {\n    setAriaAttribute(element, 'setsize', setsize);\n}\nfunction setAriaPosInSet(element, position) {\n    setAriaAttribute(element, 'posinset', position);\n}\nfunction setAriaMultiSelectable(element, multiSelectable) {\n    setAriaAttribute(element, 'multiselectable', multiSelectable);\n}\nfunction setAriaRowCount(element, rowCount) {\n    setAriaAttribute(element, 'rowcount', rowCount);\n}\nfunction setAriaRowIndex(element, rowIndex) {\n    setAriaAttribute(element, 'rowindex', rowIndex);\n}\nfunction setAriaColCount(element, colCount) {\n    setAriaAttribute(element, 'colcount', colCount);\n}\nfunction setAriaColIndex(element, colIndex) {\n    setAriaAttribute(element, 'colindex', colIndex);\n}\nfunction setAriaColSpan(element, colSpan) {\n    setAriaAttribute(element, 'colspan', colSpan);\n}\nfunction setAriaSort(element, sort) {\n    setAriaAttribute(element, 'sort', sort);\n}\nfunction removeAriaSort(element) {\n    removeAriaAttribute(element, 'sort');\n}\nfunction setAriaSelected(element, selected) {\n    toggleAriaAttribute(element, 'selected', selected);\n}\nfunction setAriaChecked(element, checked) {\n    setAriaAttribute(element, 'checked', checked === undefined ? 'mixed' : checked);\n}\nfunction setAriaControls(controllerElement, controlledElement) {\n    toggleAriaAttribute(controllerElement, 'controls', controlledElement.id);\n    setAriaLabelledBy(controlledElement, controllerElement.id);\n}\nfunction getAriaCheckboxStateName(translate, state) {\n    return state === undefined\n        ? translate('ariaIndeterminate', 'indeterminate')\n        : (state === true\n            ? translate('ariaChecked', 'checked')\n            : translate('ariaUnchecked', 'unchecked'));\n}\n\nvar AriaUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    setAriaRole: setAriaRole,\n    getAriaSortState: getAriaSortState,\n    getAriaLevel: getAriaLevel,\n    getAriaPosInSet: getAriaPosInSet,\n    getAriaDescribedBy: getAriaDescribedBy,\n    setAriaLabel: setAriaLabel,\n    setAriaLabelledBy: setAriaLabelledBy,\n    setAriaDescription: setAriaDescription,\n    setAriaDescribedBy: setAriaDescribedBy,\n    setAriaLive: setAriaLive,\n    setAriaLevel: setAriaLevel,\n    setAriaDisabled: setAriaDisabled,\n    setAriaHidden: setAriaHidden,\n    setAriaExpanded: setAriaExpanded,\n    removeAriaExpanded: removeAriaExpanded,\n    setAriaSetSize: setAriaSetSize,\n    setAriaPosInSet: setAriaPosInSet,\n    setAriaMultiSelectable: setAriaMultiSelectable,\n    setAriaRowCount: setAriaRowCount,\n    setAriaRowIndex: setAriaRowIndex,\n    setAriaColCount: setAriaColCount,\n    setAriaColIndex: setAriaColIndex,\n    setAriaColSpan: setAriaColSpan,\n    setAriaSort: setAriaSort,\n    removeAriaSort: removeAriaSort,\n    setAriaSelected: setAriaSelected,\n    setAriaChecked: setAriaChecked,\n    setAriaControls: setAriaControls,\n    getAriaCheckboxStateName: getAriaCheckboxStateName\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n/**\n * These variables are lazy loaded, as otherwise they try and get initialised when we are loading\n * unit tests and we don't have references to window or document in the unit tests\n */\nlet isSafari;\nlet safariVersion;\nlet isChrome;\nlet isFirefox;\nlet isMacOs;\nlet isIOS;\nlet invisibleScrollbar;\nlet browserScrollbarWidth;\nfunction isBrowserSafari() {\n    if (isSafari === undefined) {\n        isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n    }\n    return isSafari;\n}\nfunction getSafariVersion() {\n    if (safariVersion === undefined) {\n        if (isBrowserSafari()) {\n            const versionMatch = navigator.userAgent.match(/version\\/(\\d+)/i);\n            if (versionMatch) {\n                safariVersion = versionMatch[1] != null ? parseFloat(versionMatch[1]) : 0;\n            }\n        }\n        else {\n            safariVersion = 0;\n        }\n    }\n    return safariVersion;\n}\n/**\n * Returns true for Chrome and also for Edge (Chromium)\n */\nfunction isBrowserChrome() {\n    if (isChrome === undefined) {\n        const win = window;\n        isChrome = (!!win.chrome && (!!win.chrome.webstore || !!win.chrome.runtime)) ||\n            (/Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor));\n    }\n    return isChrome;\n}\nfunction isBrowserFirefox() {\n    if (isFirefox === undefined) {\n        isFirefox = /(firefox)/i.test(navigator.userAgent);\n    }\n    return isFirefox;\n}\nfunction isMacOsUserAgent() {\n    if (isMacOs === undefined) {\n        isMacOs = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);\n    }\n    return isMacOs;\n}\nfunction isIOSUserAgent() {\n    if (isIOS === undefined) {\n        isIOS = (/iPad|iPhone|iPod/.test(navigator.platform) ||\n            // eslint-disable-next-line\n            (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1));\n    }\n    return isIOS;\n}\nfunction browserSupportsPreventScroll() {\n    // all browsers except safari support focus({ preventScroll: true }).\n    // this feature was added on Safari 15+\n    return !isBrowserSafari() || getSafariVersion() >= 15;\n}\nfunction getTabIndex(el) {\n    if (!el) {\n        return null;\n    }\n    const numberTabIndex = el.tabIndex;\n    const tabIndex = el.getAttribute('tabIndex');\n    if (numberTabIndex === -1 && (tabIndex === null || (tabIndex === '' && !isBrowserFirefox()))) {\n        return null;\n    }\n    return numberTabIndex.toString();\n}\nfunction getMaxDivHeight() {\n    if (!document.body) {\n        return -1;\n    }\n    let res = 1000000;\n    // FF reports the height back but still renders blank after ~6M px\n    const testUpTo = navigator.userAgent.toLowerCase().match(/firefox/) ? 6000000 : 1000000000;\n    const div = document.createElement('div');\n    document.body.appendChild(div);\n    while (true) {\n        const test = res * 2;\n        div.style.height = test + 'px';\n        if (test > testUpTo || div.clientHeight !== test) {\n            break;\n        }\n        else {\n            res = test;\n        }\n    }\n    document.body.removeChild(div);\n    return res;\n}\nfunction getBodyWidth() {\n    var _a, _b, _c;\n    return (_b = (_a = document.body) === null || _a === void 0 ? void 0 : _a.clientWidth) !== null && _b !== void 0 ? _b : (window.innerHeight || ((_c = document.documentElement) === null || _c === void 0 ? void 0 : _c.clientWidth) || -1);\n}\nfunction getBodyHeight() {\n    var _a, _b, _c;\n    return (_b = (_a = document.body) === null || _a === void 0 ? void 0 : _a.clientHeight) !== null && _b !== void 0 ? _b : (window.innerHeight || ((_c = document.documentElement) === null || _c === void 0 ? void 0 : _c.clientHeight) || -1);\n}\nfunction getScrollbarWidth() {\n    if (browserScrollbarWidth == null) {\n        initScrollbarWidthAndVisibility();\n    }\n    return browserScrollbarWidth;\n}\nfunction initScrollbarWidthAndVisibility() {\n    const body = document.body;\n    const div = document.createElement('div');\n    div.style.width = div.style.height = '100px';\n    div.style.opacity = '0';\n    div.style.overflow = 'scroll';\n    div.style.msOverflowStyle = 'scrollbar'; // needed for WinJS apps\n    div.style.position = 'absolute';\n    body.appendChild(div);\n    let width = div.offsetWidth - div.clientWidth;\n    // if width is 0 and client width is 0, means the DOM isn't ready\n    if (width === 0 && div.clientWidth === 0) {\n        width = null;\n    }\n    // remove div\n    if (div.parentNode) {\n        div.parentNode.removeChild(div);\n    }\n    if (width != null) {\n        browserScrollbarWidth = width;\n        invisibleScrollbar = width === 0;\n    }\n}\nfunction isInvisibleScrollbar() {\n    if (invisibleScrollbar == null) {\n        initScrollbarWidthAndVisibility();\n    }\n    return invisibleScrollbar;\n}\n\nvar BrowserUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    isBrowserSafari: isBrowserSafari,\n    getSafariVersion: getSafariVersion,\n    isBrowserChrome: isBrowserChrome,\n    isBrowserFirefox: isBrowserFirefox,\n    isMacOsUserAgent: isMacOsUserAgent,\n    isIOSUserAgent: isIOSUserAgent,\n    browserSupportsPreventScroll: browserSupportsPreventScroll,\n    getTabIndex: getTabIndex,\n    getMaxDivHeight: getMaxDivHeight,\n    getBodyWidth: getBodyWidth,\n    getBodyHeight: getBodyHeight,\n    getScrollbarWidth: getScrollbarWidth,\n    isInvisibleScrollbar: isInvisibleScrollbar\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nfunction padStartWidthZeros(value, totalStringSize) {\n    return value.toString().padStart(totalStringSize, '0');\n}\nfunction createArrayOfNumbers(first, last) {\n    const result = [];\n    for (let i = first; i <= last; i++) {\n        result.push(i);\n    }\n    return result;\n}\nfunction cleanNumber(value) {\n    if (typeof value === 'string') {\n        value = parseInt(value, 10);\n    }\n    if (typeof value === 'number') {\n        return Math.floor(value);\n    }\n    return null;\n}\nfunction decToHex(number, bytes) {\n    let hex = '';\n    for (let i = 0; i < bytes; i++) {\n        hex += String.fromCharCode(number & 0xff);\n        number >>>= 8;\n    }\n    return hex;\n}\nfunction formatNumberTwoDecimalPlacesAndCommas(value, thousandSeparator, decimalSeparator) {\n    if (typeof value !== 'number') {\n        return '';\n    }\n    return formatNumberCommas(Math.round(value * 100) / 100, thousandSeparator, decimalSeparator);\n}\n/**\n * the native method number.toLocaleString(undefined, {minimumFractionDigits: 0})\n * puts in decimal places in IE, so we use this method instead\n * from: http://blog.tompawlak.org/number-currency-formatting-javascript\n * @param {number} value\n * @returns {string}\n */\nfunction formatNumberCommas(value, thousandSeparator, decimalSeparator) {\n    if (typeof value !== 'number') {\n        return '';\n    }\n    return value.toString().replace('.', decimalSeparator).replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, `$1${thousandSeparator}`);\n}\nfunction sum(values) {\n    return values == null ? null : values.reduce((total, value) => total + value, 0);\n}\nfunction zeroOrGreater(value, defaultValue) {\n    if (value >= 0) {\n        return value;\n    }\n    // zero gets returned if number is missing or the wrong type\n    return defaultValue;\n}\nfunction oneOrGreater(value, defaultValue) {\n    const valueNumber = parseInt(value, 10);\n    if (!isNaN(valueNumber) && isFinite(valueNumber) && valueNumber > 0) {\n        return valueNumber;\n    }\n    return defaultValue;\n}\n\nvar NumberUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    padStartWidthZeros: padStartWidthZeros,\n    createArrayOfNumbers: createArrayOfNumbers,\n    cleanNumber: cleanNumber,\n    decToHex: decToHex,\n    formatNumberTwoDecimalPlacesAndCommas: formatNumberTwoDecimalPlacesAndCommas,\n    formatNumberCommas: formatNumberCommas,\n    sum: sum,\n    zeroOrGreater: zeroOrGreater,\n    oneOrGreater: oneOrGreater\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n/**\n * Serialises a Date to a string of format `yyyy-MM-dd HH:mm:ss`.\n * An alternative separator can be provided to be used instead of hyphens.\n * @param date The date to serialise\n * @param includeTime Whether to include the time in the serialised string\n * @param separator The separator to use between date parts\n */\nfunction serialiseDate(date, includeTime = true, separator = '-') {\n    if (!date) {\n        return null;\n    }\n    let serialised = [date.getFullYear(), date.getMonth() + 1, date.getDate()].map(part => padStartWidthZeros(part, 2)).join(separator);\n    if (includeTime) {\n        serialised += ' ' + [date.getHours(), date.getMinutes(), date.getSeconds()].map(part => padStartWidthZeros(part, 2)).join(':');\n    }\n    return serialised;\n}\nconst calculateOrdinal = (value) => {\n    if (value > 3 && value < 21) {\n        return 'th';\n    }\n    const remainder = value % 10;\n    switch (remainder) {\n        case 1: return \"st\";\n        case 2: return \"nd\";\n        case 3: return \"rd\";\n    }\n    return 'th';\n};\n/**\n * Serialises a Date to a string of format the defined format, does not include time.\n * @param date The date to serialise\n * @param format The string to format the date to, defaults to YYYY-MM-DD\n */\nfunction dateToFormattedString(date, format = 'YYYY-MM-DD') {\n    const fullYear = padStartWidthZeros(date.getFullYear(), 4);\n    const months = [\n        'January', 'February', 'March', 'April', 'May', 'June',\n        'July', 'August', 'September', 'October', 'November', 'December',\n    ];\n    const days = [\n        'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday',\n    ];\n    const replace = {\n        YYYY: () => fullYear.slice(fullYear.length - 4, fullYear.length),\n        YY: () => fullYear.slice(fullYear.length - 2, fullYear.length),\n        Y: () => `${date.getFullYear()}`,\n        MMMM: () => months[date.getMonth()],\n        MMM: () => months[date.getMonth()].slice(0, 3),\n        MM: () => padStartWidthZeros(date.getMonth() + 1, 2),\n        Mo: () => `${date.getMonth() + 1}${calculateOrdinal(date.getMonth() + 1)}`,\n        M: () => `${date.getMonth() + 1}`,\n        Do: () => `${date.getDate()}${calculateOrdinal(date.getDate())}`,\n        DD: () => padStartWidthZeros(date.getDate(), 2),\n        D: () => `${date.getDate()}`,\n        dddd: () => days[date.getDay()],\n        ddd: () => days[date.getDay()].slice(0, 3),\n        dd: () => days[date.getDay()].slice(0, 2),\n        do: () => `${date.getDay()}${calculateOrdinal(date.getDay())}`,\n        d: () => `${date.getDay()}`,\n    };\n    const regexp = new RegExp(Object.keys(replace).join('|'), 'g');\n    return format.replace(regexp, (match) => {\n        if (match in replace) {\n            return replace[match]();\n        }\n        return match;\n    });\n}\n/**\n * Parses a date and time from a string in the format `yyyy-MM-dd HH:mm:ss`\n */\nfunction parseDateTimeFromString(value) {\n    if (!value) {\n        return null;\n    }\n    const [dateStr, timeStr] = value.split(' ');\n    if (!dateStr) {\n        return null;\n    }\n    const fields = dateStr.split('-').map(f => parseInt(f, 10));\n    if (fields.filter(f => !isNaN(f)).length !== 3) {\n        return null;\n    }\n    const [year, month, day] = fields;\n    const date = new Date(year, month - 1, day);\n    if (date.getFullYear() !== year ||\n        date.getMonth() !== month - 1 ||\n        date.getDate() !== day) {\n        // date was not parsed as expected so must have been invalid\n        return null;\n    }\n    if (!timeStr || timeStr === '00:00:00') {\n        return date;\n    }\n    const [hours, minutes, seconds] = timeStr.split(':').map(part => parseInt(part, 10));\n    if (hours >= 0 && hours < 24) {\n        date.setHours(hours);\n    }\n    if (minutes >= 0 && minutes < 60) {\n        date.setMinutes(minutes);\n    }\n    if (seconds >= 0 && seconds < 60) {\n        date.setSeconds(seconds);\n    }\n    return date;\n}\n\nvar DateUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    serialiseDate: serialiseDate,\n    dateToFormattedString: dateToFormattedString,\n    parseDateTimeFromString: parseDateTimeFromString\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nlet rtlNegativeScroll;\n/**\n * This method adds a class to an element and remove that class from all siblings.\n * Useful for toggling state.\n * @param {HTMLElement} element The element to receive the class\n * @param {string} elementClass The class to be assigned to the element\n * @param {boolean} otherElementClass The class to be assigned to siblings of the element, but not the element itself\n */\nfunction radioCssClass(element, elementClass, otherElementClass) {\n    const parent = element.parentElement;\n    let sibling = parent && parent.firstChild;\n    while (sibling) {\n        if (elementClass) {\n            sibling.classList.toggle(elementClass, sibling === element);\n        }\n        if (otherElementClass) {\n            sibling.classList.toggle(otherElementClass, sibling !== element);\n        }\n        sibling = sibling.nextSibling;\n    }\n}\nconst FOCUSABLE_SELECTOR = '[tabindex], input, select, button, textarea, [href]';\nconst FOCUSABLE_EXCLUDE = '.ag-hidden, .ag-hidden *, [disabled], .ag-disabled, .ag-disabled *.mjs';\nfunction isFocusableFormField(element) {\n    const matches = Element.prototype.matches || Element.prototype.msMatchesSelector;\n    const inputSelector = 'input, select, button, textarea';\n    const isFocusable = matches.call(element, inputSelector);\n    const isNotFocusable = matches.call(element, FOCUSABLE_EXCLUDE);\n    const isElementVisible = isVisible(element);\n    const focusable = isFocusable && !isNotFocusable && isElementVisible;\n    return focusable;\n}\nfunction setDisplayed(element, displayed, options = {}) {\n    const { skipAriaHidden } = options;\n    element.classList.toggle('ag-hidden', !displayed);\n    if (!skipAriaHidden) {\n        setAriaHidden(element, !displayed);\n    }\n}\nfunction setVisible(element, visible, options = {}) {\n    const { skipAriaHidden } = options;\n    element.classList.toggle('ag-invisible', !visible);\n    if (!skipAriaHidden) {\n        setAriaHidden(element, !visible);\n    }\n}\nfunction setDisabled(element, disabled) {\n    const attributeName = 'disabled';\n    const addOrRemoveDisabledAttribute = disabled ?\n        (e) => e.setAttribute(attributeName, '') :\n        (e) => e.removeAttribute(attributeName);\n    addOrRemoveDisabledAttribute(element);\n    nodeListForEach(element.querySelectorAll('input'), input => addOrRemoveDisabledAttribute(input));\n}\nfunction isElementChildOfClass(element, cls, maxNest) {\n    let counter = 0;\n    while (element) {\n        if (element.classList.contains(cls)) {\n            return true;\n        }\n        element = element.parentElement;\n        if (typeof maxNest == 'number') {\n            if (++counter > maxNest) {\n                break;\n            }\n        }\n        else if (element === maxNest) {\n            break;\n        }\n    }\n    return false;\n}\n// returns back sizes as doubles instead of strings. similar to\n// getBoundingClientRect, however getBoundingClientRect does not:\n// a) work with fractions (eg browser is zooming)\n// b) has CSS transitions applied (eg CSS scale, browser zoom), which we don't want, we want the un-transitioned values\nfunction getElementSize(el) {\n    const { height, width, borderTopWidth, borderRightWidth, borderBottomWidth, borderLeftWidth, paddingTop, paddingRight, paddingBottom, paddingLeft, marginTop, marginRight, marginBottom, marginLeft, boxSizing } = window.getComputedStyle(el);\n    return {\n        height: parseFloat(height),\n        width: parseFloat(width),\n        borderTopWidth: parseFloat(borderTopWidth),\n        borderRightWidth: parseFloat(borderRightWidth),\n        borderBottomWidth: parseFloat(borderBottomWidth),\n        borderLeftWidth: parseFloat(borderLeftWidth),\n        paddingTop: parseFloat(paddingTop),\n        paddingRight: parseFloat(paddingRight),\n        paddingBottom: parseFloat(paddingBottom),\n        paddingLeft: parseFloat(paddingLeft),\n        marginTop: parseFloat(marginTop),\n        marginRight: parseFloat(marginRight),\n        marginBottom: parseFloat(marginBottom),\n        marginLeft: parseFloat(marginLeft),\n        boxSizing\n    };\n}\nfunction getInnerHeight(el) {\n    const size = getElementSize(el);\n    if (size.boxSizing === 'border-box') {\n        return size.height - size.paddingTop - size.paddingBottom;\n    }\n    return size.height;\n}\nfunction getInnerWidth(el) {\n    const size = getElementSize(el);\n    if (size.boxSizing === 'border-box') {\n        return size.width - size.paddingLeft - size.paddingRight;\n    }\n    return size.width;\n}\nfunction getAbsoluteHeight(el) {\n    const size = getElementSize(el);\n    const marginRight = size.marginBottom + size.marginTop;\n    return Math.ceil(el.offsetHeight + marginRight);\n}\nfunction getAbsoluteWidth(el) {\n    const size = getElementSize(el);\n    const marginWidth = size.marginLeft + size.marginRight;\n    return Math.ceil(el.offsetWidth + marginWidth);\n}\nfunction isRtlNegativeScroll() {\n    if (typeof rtlNegativeScroll === \"boolean\") {\n        return rtlNegativeScroll;\n    }\n    const template = document.createElement('div');\n    template.style.direction = 'rtl';\n    template.style.width = '1px';\n    template.style.height = '1px';\n    template.style.position = 'fixed';\n    template.style.top = '0px';\n    template.style.overflow = 'hidden';\n    template.dir = 'rtl';\n    template.innerHTML = /* html */\n        `<div style=\"width: 2px\">\n            <span style=\"display: inline-block; width: 1px\"></span>\n            <span style=\"display: inline-block; width: 1px\"></span>\n        </div>`;\n    document.body.appendChild(template);\n    template.scrollLeft = 1;\n    rtlNegativeScroll = Math.floor(template.scrollLeft) === 0;\n    document.body.removeChild(template);\n    return rtlNegativeScroll;\n}\nfunction getScrollLeft(element, rtl) {\n    let scrollLeft = element.scrollLeft;\n    if (rtl) {\n        // Absolute value - for FF that reports RTL scrolls in negative numbers\n        scrollLeft = Math.abs(scrollLeft);\n        if (isBrowserChrome() && !isRtlNegativeScroll()) {\n            scrollLeft = element.scrollWidth - element.clientWidth - scrollLeft;\n        }\n    }\n    return scrollLeft;\n}\nfunction setScrollLeft(element, value, rtl) {\n    if (rtl) {\n        // Chrome and Safari when doing RTL have the END position of the scroll as zero, not the start\n        if (isRtlNegativeScroll()) {\n            value *= -1;\n        }\n        else if (isBrowserSafari() || isBrowserChrome()) {\n            value = element.scrollWidth - element.clientWidth - value;\n        }\n    }\n    element.scrollLeft = value;\n}\nfunction clearElement(el) {\n    while (el && el.firstChild) {\n        el.removeChild(el.firstChild);\n    }\n}\n/** @deprecated */\nfunction removeElement(parent, cssSelector) {\n    removeFromParent(parent.querySelector(cssSelector));\n}\nfunction removeFromParent(node) {\n    if (node && node.parentNode) {\n        node.parentNode.removeChild(node);\n    }\n}\nfunction isVisible(element) {\n    return element.offsetParent !== null;\n}\n/**\n * Loads the template and returns it as an element. makes up for no simple way in\n * the dom api to load html directly, eg we cannot do this: document.createElement(template)\n * @param {string} template\n * @returns {HTMLElement}\n */\nfunction loadTemplate(template) {\n    const tempDiv = document.createElement('div');\n    tempDiv.innerHTML = (template || '').trim();\n    return tempDiv.firstChild;\n}\nfunction appendHtml(eContainer, htmlTemplate) {\n    if (eContainer.lastChild) {\n        // https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML\n        // we put the items at the start, so new items appear underneath old items,\n        // so when expanding/collapsing groups, the new rows don't go on top of the\n        // rows below that are moving our of the way\n        eContainer.insertAdjacentHTML('afterbegin', htmlTemplate);\n    }\n    else {\n        eContainer.innerHTML = htmlTemplate;\n    }\n}\n/** @deprecated */\nfunction getElementAttribute(element, attributeName) {\n    if (element.attributes && element.attributes[attributeName]) {\n        const attribute = element.attributes[attributeName];\n        return attribute.value;\n    }\n    return null;\n}\nfunction offsetHeight(element) {\n    return element && element.clientHeight ? element.clientHeight : 0;\n}\nfunction offsetWidth(element) {\n    return element && element.clientWidth ? element.clientWidth : 0;\n}\nfunction ensureDomOrder(eContainer, eChild, eChildBefore) {\n    // if already in right order, do nothing\n    if (eChildBefore && eChildBefore.nextSibling === eChild) {\n        return;\n    }\n    const focusedEl = document.activeElement;\n    const eChildHasFocus = eChild.contains(focusedEl);\n    if (eChildBefore) {\n        if (eChildBefore.nextSibling) {\n            // insert between the eRowBefore and the row after it\n            eContainer.insertBefore(eChild, eChildBefore.nextSibling);\n        }\n        else {\n            // if nextSibling is missing, means other row is at end, so just append new row at the end\n            eContainer.appendChild(eChild);\n        }\n    }\n    else {\n        // otherwise put at start\n        if (eContainer.firstChild && eContainer.firstChild !== eChild) {\n            // insert it at the first location\n            eContainer.insertAdjacentElement('afterbegin', eChild);\n        }\n    }\n    if (eChildHasFocus && focusedEl && browserSupportsPreventScroll()) {\n        focusedEl.focus({ preventScroll: true });\n    }\n}\nfunction setDomChildOrder(eContainer, orderedChildren) {\n    for (let i = 0; i < orderedChildren.length; i++) {\n        const correctCellAtIndex = orderedChildren[i];\n        const actualCellAtIndex = eContainer.children[i];\n        if (actualCellAtIndex !== correctCellAtIndex) {\n            eContainer.insertBefore(correctCellAtIndex, actualCellAtIndex);\n        }\n    }\n}\nfunction insertWithDomOrder(eContainer, eToInsert, eChildBefore) {\n    if (eChildBefore) {\n        // if previous element exists, just slot in after the previous element\n        eChildBefore.insertAdjacentElement('afterend', eToInsert);\n    }\n    else {\n        if (eContainer.firstChild) {\n            // insert it at the first location\n            eContainer.insertAdjacentElement('afterbegin', eToInsert);\n        }\n        else {\n            // otherwise eContainer is empty, so just append it\n            eContainer.appendChild(eToInsert);\n        }\n    }\n}\n/** @deprecated */\nfunction prependDC(parent, documentFragment) {\n    if (exists(parent.firstChild)) {\n        parent.insertBefore(documentFragment, parent.firstChild);\n    }\n    else {\n        parent.appendChild(documentFragment);\n    }\n}\nfunction addStylesToElement(eElement, styles) {\n    if (!styles) {\n        return;\n    }\n    for (const [key, value] of Object.entries(styles)) {\n        if (!key || !key.length || value == null) {\n            continue;\n        }\n        // changes the key from camelCase into a hyphenated-string\n        const parsedKey = camelCaseToHyphenated(key);\n        const valueAsString = value.toString();\n        const parsedValue = valueAsString.replace(/\\s*!important/g, '');\n        const priority = parsedValue.length != valueAsString.length ? 'important' : undefined;\n        eElement.style.setProperty(parsedKey, parsedValue, priority);\n    }\n}\nfunction isHorizontalScrollShowing(element) {\n    return element.clientWidth < element.scrollWidth;\n}\nfunction isVerticalScrollShowing(element) {\n    return element.clientHeight < element.scrollHeight;\n}\nfunction setElementWidth(element, width) {\n    if (width === 'flex') {\n        element.style.removeProperty('width');\n        element.style.removeProperty('minWidth');\n        element.style.removeProperty('maxWidth');\n        element.style.flex = '1 1 auto';\n    }\n    else {\n        setFixedWidth(element, width);\n    }\n}\nfunction setFixedWidth(element, width) {\n    width = formatSize(width);\n    element.style.width = width.toString();\n    element.style.maxWidth = width.toString();\n    element.style.minWidth = width.toString();\n}\nfunction setElementHeight(element, height) {\n    if (height === 'flex') {\n        element.style.removeProperty('height');\n        element.style.removeProperty('minHeight');\n        element.style.removeProperty('maxHeight');\n        element.style.flex = '1 1 auto';\n    }\n    else {\n        setFixedHeight(element, height);\n    }\n}\nfunction setFixedHeight(element, height) {\n    height = formatSize(height);\n    element.style.height = height.toString();\n    element.style.maxHeight = height.toString();\n    element.style.minHeight = height.toString();\n}\nfunction formatSize(size) {\n    if (typeof size === 'number') {\n        return `${size}px`;\n    }\n    return size;\n}\nfunction isNodeOrElement(o) {\n    return o instanceof Node || o instanceof HTMLElement;\n}\n/**\n * Makes a copy of a node list into a list\n * @param {NodeList} nodeList\n * @returns {Node[]}\n */\nfunction copyNodeList(nodeList) {\n    if (nodeList == null) {\n        return [];\n    }\n    const result = [];\n    nodeListForEach(nodeList, node => result.push(node));\n    return result;\n}\nfunction iterateNamedNodeMap(map, callback) {\n    if (!map) {\n        return;\n    }\n    for (let i = 0; i < map.length; i++) {\n        const attr = map[i];\n        callback(attr.name, attr.value);\n    }\n}\nfunction addOrRemoveAttribute(element, name, value) {\n    if (value == null) {\n        element.removeAttribute(name);\n    }\n    else {\n        element.setAttribute(name, value.toString());\n    }\n}\nfunction nodeListForEach(nodeList, action) {\n    if (nodeList == null) {\n        return;\n    }\n    for (let i = 0; i < nodeList.length; i++) {\n        action(nodeList[i]);\n    }\n}\n\nvar DomUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    radioCssClass: radioCssClass,\n    FOCUSABLE_SELECTOR: FOCUSABLE_SELECTOR,\n    FOCUSABLE_EXCLUDE: FOCUSABLE_EXCLUDE,\n    isFocusableFormField: isFocusableFormField,\n    setDisplayed: setDisplayed,\n    setVisible: setVisible,\n    setDisabled: setDisabled,\n    isElementChildOfClass: isElementChildOfClass,\n    getElementSize: getElementSize,\n    getInnerHeight: getInnerHeight,\n    getInnerWidth: getInnerWidth,\n    getAbsoluteHeight: getAbsoluteHeight,\n    getAbsoluteWidth: getAbsoluteWidth,\n    isRtlNegativeScroll: isRtlNegativeScroll,\n    getScrollLeft: getScrollLeft,\n    setScrollLeft: setScrollLeft,\n    clearElement: clearElement,\n    removeElement: removeElement,\n    removeFromParent: removeFromParent,\n    isVisible: isVisible,\n    loadTemplate: loadTemplate,\n    appendHtml: appendHtml,\n    getElementAttribute: getElementAttribute,\n    offsetHeight: offsetHeight,\n    offsetWidth: offsetWidth,\n    ensureDomOrder: ensureDomOrder,\n    setDomChildOrder: setDomChildOrder,\n    insertWithDomOrder: insertWithDomOrder,\n    prependDC: prependDC,\n    addStylesToElement: addStylesToElement,\n    isHorizontalScrollShowing: isHorizontalScrollShowing,\n    isVerticalScrollShowing: isVerticalScrollShowing,\n    setElementWidth: setElementWidth,\n    setFixedWidth: setFixedWidth,\n    setElementHeight: setElementHeight,\n    setFixedHeight: setFixedHeight,\n    formatSize: formatSize,\n    isNodeOrElement: isNodeOrElement,\n    copyNodeList: copyNodeList,\n    iterateNamedNodeMap: iterateNamedNodeMap,\n    addOrRemoveAttribute: addOrRemoveAttribute,\n    nodeListForEach: nodeListForEach\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n//\n// IMPORTANT NOTE!\n//\n// If you change the list below, copy/paste the new content into the docs page javascript-grid-icons\n//\nconst iconNameClassMap = {\n    // header column group shown when expanded (click to contract)\n    columnGroupOpened: 'expanded',\n    // header column group shown when contracted (click to expand)\n    columnGroupClosed: 'contracted',\n    // tool panel column group contracted (click to expand)\n    columnSelectClosed: 'tree-closed',\n    // tool panel column group expanded (click to contract)\n    columnSelectOpen: 'tree-open',\n    // column tool panel header expand/collapse all button, shown when some children are expanded and\n    //     others are collapsed\n    columnSelectIndeterminate: 'tree-indeterminate',\n    // shown on ghost icon while dragging column to the side of the grid to pin\n    columnMovePin: 'pin',\n    // shown on ghost icon while dragging over part of the page that is not a drop zone\n    columnMoveHide: 'eye-slash',\n    // shown on ghost icon while dragging columns to reorder\n    columnMoveMove: 'arrows',\n    // animating icon shown when dragging a column to the right of the grid causes horizontal scrolling\n    columnMoveLeft: 'left',\n    // animating icon shown when dragging a column to the left of the grid causes horizontal scrolling\n    columnMoveRight: 'right',\n    // shown on ghost icon while dragging over Row Groups drop zone\n    columnMoveGroup: 'group',\n    // shown on ghost icon while dragging over Values drop zone\n    columnMoveValue: 'aggregation',\n    // shown on ghost icon while dragging over pivot drop zone\n    columnMovePivot: 'pivot',\n    // shown on ghost icon while dragging over drop zone that doesn't support it, e.g.\n    //     string column over aggregation drop zone\n    dropNotAllowed: 'not-allowed',\n    // shown on row group when contracted (click to expand)\n    groupContracted: 'tree-closed',\n    // shown on row group when expanded (click to contract)\n    groupExpanded: 'tree-open',\n    // set filter tree list group contracted (click to expand)\n    setFilterGroupClosed: 'tree-closed',\n    // set filter tree list group expanded (click to contract)\n    setFilterGroupOpen: 'tree-open',\n    // set filter tree list expand/collapse all button, shown when some children are expanded and\n    //     others are collapsed\n    setFilterGroupIndeterminate: 'tree-indeterminate',\n    // context menu chart item\n    chart: 'chart',\n    // chart window title bar\n    close: 'cross',\n    // X (remove) on column 'pill' after adding it to a drop zone list\n    cancel: 'cancel',\n    // indicates the currently active pin state in the \"Pin column\" sub-menu of the column menu\n    check: 'tick',\n    // \"go to first\" button in pagination controls\n    first: 'first',\n    // \"go to previous\" button in pagination controls\n    previous: 'previous',\n    // \"go to next\" button in pagination controls\n    next: 'next',\n    // \"go to last\" button in pagination controls\n    last: 'last',\n    // shown on top right of chart when chart is linked to range data (click to unlink)\n    linked: 'linked',\n    // shown on top right of chart when chart is not linked to range data (click to link)\n    unlinked: 'unlinked',\n    // \"Choose colour\" button on chart settings tab\n    colorPicker: 'color-picker',\n    // rotating spinner shown by the loading cell renderer\n    groupLoading: 'loading',\n    // button to launch enterprise column menu\n    menu: 'menu',\n    // filter tool panel tab\n    filter: 'filter',\n    // column tool panel tab\n    columns: 'columns',\n    // button in chart regular size window title bar (click to maximise)\n    maximize: 'maximize',\n    // button in chart maximised window title bar (click to make regular size)\n    minimize: 'minimize',\n    // \"Pin column\" item in column header menu\n    menuPin: 'pin',\n    // \"Value aggregation\" column menu item (shown on numeric columns when grouping is active)\"\n    menuValue: 'aggregation',\n    // \"Group by {column-name}\" item in column header menu\n    menuAddRowGroup: 'group',\n    // \"Un-Group by {column-name}\" item in column header menu\n    menuRemoveRowGroup: 'group',\n    // context menu copy item\n    clipboardCopy: 'copy',\n    // context menu cut item\n    clipboardCut: 'cut',\n    // context menu paste item\n    clipboardPaste: 'paste',\n    // identifies the pivot drop zone\n    pivotPanel: 'pivot',\n    // \"Row groups\" drop zone in column tool panel\n    rowGroupPanel: 'group',\n    // columns tool panel Values drop zone\n    valuePanel: 'aggregation',\n    // drag handle used to pick up draggable columns\n    columnDrag: 'grip',\n    // drag handle used to pick up draggable rows\n    rowDrag: 'grip',\n    // context menu export item\n    save: 'save',\n    // csv export\n    csvExport: 'csv',\n    // excel export,\n    excelExport: 'excel',\n    // icon on dropdown editors\n    smallDown: 'small-down',\n    // version of small-right used in RTL mode\n    smallLeft: 'small-left',\n    // separater between column 'pills' when you add multiple columns to the header drop zone\n    smallRight: 'small-right',\n    smallUp: 'small-up',\n    // show on column header when column is sorted ascending\n    sortAscending: 'asc',\n    // show on column header when column is sorted descending\n    sortDescending: 'desc',\n    // show on column header when column has no sort, only when enabled with gridOptions.unSortIcon=true\n    sortUnSort: 'none'\n};\n/**\n * If icon provided, use this (either a string, or a function callback).\n * if not, then use the default icon from the theme\n * @param {string} iconName\n * @param {GridOptionsService} gridOptionsService\n * @param {Column | null} [column]\n * @returns {Element}\n */\nfunction createIcon(iconName, gridOptionsService, column) {\n    const iconContents = createIconNoSpan(iconName, gridOptionsService, column);\n    if (iconContents) {\n        const { className } = iconContents;\n        if ((typeof className === 'string' && className.indexOf('ag-icon') > -1) ||\n            (typeof className === 'object' && className['ag-icon'])) {\n            return iconContents;\n        }\n    }\n    const eResult = document.createElement('span');\n    eResult.appendChild(iconContents);\n    return eResult;\n}\nfunction createIconNoSpan(iconName, gridOptionsService, column, forceCreate) {\n    let userProvidedIcon = null;\n    // check col for icon first\n    const icons = column && column.getColDef().icons;\n    if (icons) {\n        userProvidedIcon = icons[iconName];\n    }\n    // if not in col, try grid options\n    if (gridOptionsService && !userProvidedIcon) {\n        const optionsIcons = gridOptionsService.get('icons');\n        if (optionsIcons) {\n            userProvidedIcon = optionsIcons[iconName];\n        }\n    }\n    // now if user provided, use it\n    if (userProvidedIcon) {\n        let rendererResult;\n        if (typeof userProvidedIcon === 'function') {\n            rendererResult = userProvidedIcon();\n        }\n        else if (typeof userProvidedIcon === 'string') {\n            rendererResult = userProvidedIcon;\n        }\n        else {\n            throw new Error('icon from grid options needs to be a string or a function');\n        }\n        if (typeof rendererResult === 'string') {\n            return loadTemplate(rendererResult);\n        }\n        if (isNodeOrElement(rendererResult)) {\n            return rendererResult;\n        }\n        console.warn('AG Grid: iconRenderer should return back a string or a dom object');\n    }\n    else {\n        const span = document.createElement('span');\n        let cssClass = iconNameClassMap[iconName];\n        if (!cssClass) {\n            if (!forceCreate) {\n                console.warn(`AG Grid: Did not find icon ${iconName}`);\n                cssClass = '';\n            }\n            else {\n                cssClass = iconName;\n            }\n        }\n        span.setAttribute('class', `ag-icon ag-icon-${cssClass}`);\n        span.setAttribute('unselectable', 'on');\n        setAriaRole(span, 'presentation');\n        return span;\n    }\n}\n\nvar IconUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    iconNameClassMap: iconNameClassMap,\n    createIcon: createIcon,\n    createIconNoSpan: createIconNoSpan\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass KeyCode {\n}\nKeyCode.BACKSPACE = 'Backspace';\nKeyCode.TAB = 'Tab';\nKeyCode.ENTER = 'Enter';\nKeyCode.ESCAPE = 'Escape';\nKeyCode.SPACE = ' ';\nKeyCode.LEFT = 'ArrowLeft';\nKeyCode.UP = 'ArrowUp';\nKeyCode.RIGHT = 'ArrowRight';\nKeyCode.DOWN = 'ArrowDown';\nKeyCode.DELETE = 'Delete';\nKeyCode.F2 = 'F2';\nKeyCode.PAGE_UP = 'PageUp';\nKeyCode.PAGE_DOWN = 'PageDown';\nKeyCode.PAGE_HOME = 'Home';\nKeyCode.PAGE_END = 'End';\n// these should be used with `event.code` instead of `event.key`\n// as `event.key` changes when non-latin keyboards are used\nKeyCode.A = 'KeyA';\nKeyCode.C = 'KeyC';\nKeyCode.D = 'KeyD';\nKeyCode.V = 'KeyV';\nKeyCode.X = 'KeyX';\nKeyCode.Y = 'KeyY';\nKeyCode.Z = 'KeyZ';\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nconst A_KEYCODE = 65;\nconst C_KEYCODE = 67;\nconst V_KEYCODE = 86;\nconst D_KEYCODE = 68;\nconst Z_KEYCODE = 90;\nconst Y_KEYCODE = 89;\nfunction isEventFromPrintableCharacter(event) {\n    // no allowed printable chars have alt or ctrl key combinations\n    if (event.altKey || event.ctrlKey || event.metaKey) {\n        return false;\n    }\n    // if key is length 1, eg if it is 'a' for the a key, or '2' for the '2' key.\n    // non-printable characters have names, eg 'Enter' or 'Backspace'.\n    const printableCharacter = event.key.length === 1;\n    return printableCharacter;\n}\n/**\n * Allows user to tell the grid to skip specific keyboard events\n * @param {GridOptionsService} gridOptionsService\n * @param {KeyboardEvent} keyboardEvent\n * @param {IRowNode} rowNode\n * @param {Column} column\n * @param {boolean} editing\n * @returns {boolean}\n */\nfunction isUserSuppressingKeyboardEvent(gridOptionsService, keyboardEvent, rowNode, column, editing) {\n    const colDefFunc = column ? column.getColDef().suppressKeyboardEvent : undefined;\n    // if no callbacks provided by user, then do nothing\n    if (!colDefFunc) {\n        return false;\n    }\n    const params = {\n        event: keyboardEvent,\n        editing,\n        column,\n        api: gridOptionsService.api,\n        node: rowNode,\n        data: rowNode.data,\n        colDef: column.getColDef(),\n        context: gridOptionsService.context,\n        columnApi: gridOptionsService.columnApi\n    };\n    // colDef get first preference on suppressing events\n    if (colDefFunc) {\n        const colDefFuncResult = colDefFunc(params);\n        // if colDef func suppressed, then return now, no need to call gridOption func\n        if (colDefFuncResult) {\n            return true;\n        }\n    }\n    // otherwise return false, don't suppress, as colDef didn't suppress and no func on gridOptions\n    return false;\n}\nfunction isUserSuppressingHeaderKeyboardEvent(gridOptionsService, keyboardEvent, headerRowIndex, column) {\n    const colDef = column.getDefinition();\n    const colDefFunc = colDef && colDef.suppressHeaderKeyboardEvent;\n    if (!exists(colDefFunc)) {\n        return false;\n    }\n    const params = {\n        api: gridOptionsService.api,\n        columnApi: gridOptionsService.columnApi,\n        context: gridOptionsService.context,\n        colDef: colDef,\n        column,\n        headerRowIndex,\n        event: keyboardEvent\n    };\n    return !!colDefFunc(params);\n}\nfunction normaliseQwertyAzerty(keyboardEvent) {\n    const { keyCode } = keyboardEvent;\n    let code;\n    switch (keyCode) {\n        case A_KEYCODE:\n            code = KeyCode.A;\n            break;\n        case C_KEYCODE:\n            code = KeyCode.C;\n            break;\n        case V_KEYCODE:\n            code = KeyCode.V;\n            break;\n        case D_KEYCODE:\n            code = KeyCode.D;\n            break;\n        case Z_KEYCODE:\n            code = KeyCode.Z;\n            break;\n        case Y_KEYCODE:\n            code = KeyCode.Y;\n            break;\n        default:\n            code = keyboardEvent.code;\n    }\n    return code;\n}\nfunction isDeleteKey(key, alwaysReturnFalseOnBackspace = false) {\n    if (key === KeyCode.DELETE) {\n        return true;\n    }\n    if (!alwaysReturnFalseOnBackspace && key === KeyCode.BACKSPACE) {\n        return isMacOsUserAgent();\n    }\n    return false;\n}\n\nvar KeyboardUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    isEventFromPrintableCharacter: isEventFromPrintableCharacter,\n    isUserSuppressingKeyboardEvent: isUserSuppressingKeyboardEvent,\n    isUserSuppressingHeaderKeyboardEvent: isUserSuppressingHeaderKeyboardEvent,\n    normaliseQwertyAzerty: normaliseQwertyAzerty,\n    isDeleteKey: isDeleteKey\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n/**\n * `True` if the event is close to the original event by X pixels either vertically or horizontally.\n * we only start dragging after X pixels so this allows us to know if we should start dragging yet.\n * @param {MouseEvent | TouchEvent} e1\n * @param {MouseEvent | TouchEvent} e2\n * @param {number} pixelCount\n * @returns {boolean}\n */\nfunction areEventsNear(e1, e2, pixelCount) {\n    // by default, we wait 4 pixels before starting the drag\n    if (pixelCount === 0) {\n        return false;\n    }\n    const diffX = Math.abs(e1.clientX - e2.clientX);\n    const diffY = Math.abs(e1.clientY - e2.clientY);\n    return Math.max(diffX, diffY) <= pixelCount;\n}\n\nvar MouseUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    areEventsNear: areEventsNear\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n/**\n * Gets called by: a) ClientSideNodeManager and b) GroupStage to do sorting.\n * when in ClientSideNodeManager we always have indexes (as this sorts the items the\n * user provided) but when in GroupStage, the nodes can contain filler nodes that\n * don't have order id's\n * @param {RowNode[]} rowNodes\n * @param {Object} rowNodeOrder\n *\n * @returns a boolean representing whether nodes were reordered\n */\nfunction sortRowNodesByOrder(rowNodes, rowNodeOrder) {\n    if (!rowNodes) {\n        return false;\n    }\n    const comparator = (nodeA, nodeB) => {\n        const positionA = rowNodeOrder[nodeA.id];\n        const positionB = rowNodeOrder[nodeB.id];\n        const aHasIndex = positionA !== undefined;\n        const bHasIndex = positionB !== undefined;\n        const bothNodesAreUserNodes = aHasIndex && bHasIndex;\n        const bothNodesAreFillerNodes = !aHasIndex && !bHasIndex;\n        if (bothNodesAreUserNodes) {\n            // when comparing two nodes the user has provided, they always\n            // have indexes\n            return positionA - positionB;\n        }\n        if (bothNodesAreFillerNodes) {\n            // when comparing two filler nodes, we have no index to compare them\n            // against, however we want this sorting to be deterministic, so that\n            // the rows don't jump around as the user does delta updates. so we\n            // want the same sort result. so we use the __objectId - which doesn't make sense\n            // from a sorting point of view, but does give consistent behaviour between\n            // calls. otherwise groups jump around as delta updates are done.\n            // note: previously here we used nodeId, however this gave a strange order\n            // as string ordering of numbers is wrong, so using id based on creation order\n            // as least gives better looking order.\n            return nodeA.__objectId - nodeB.__objectId;\n        }\n        if (aHasIndex) {\n            return 1;\n        }\n        return -1;\n    };\n    // check if the list first needs sorting\n    let rowNodeA;\n    let rowNodeB;\n    let atLeastOneOutOfOrder = false;\n    for (let i = 0; i < rowNodes.length - 1; i++) {\n        rowNodeA = rowNodes[i];\n        rowNodeB = rowNodes[i + 1];\n        if (comparator(rowNodeA, rowNodeB) > 0) {\n            atLeastOneOutOfOrder = true;\n            break;\n        }\n    }\n    if (atLeastOneOutOfOrder) {\n        rowNodes.sort(comparator);\n        return true;\n    }\n    return false;\n}\nfunction traverseNodesWithKey(nodes, callback) {\n    const keyParts = [];\n    recursiveSearchNodes(nodes);\n    function recursiveSearchNodes(currentNodes) {\n        if (!currentNodes) {\n            return;\n        }\n        currentNodes.forEach((node) => {\n            // also checking for children for tree data\n            if (node.group || node.hasChildren()) {\n                keyParts.push(node.key);\n                const key = keyParts.join('|');\n                callback(node, key);\n                recursiveSearchNodes(node.childrenAfterGroup);\n                keyParts.pop();\n            }\n        });\n    }\n}\n\nvar RowNodeUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    sortRowNodesByOrder: sortRowNodesByOrder,\n    traverseNodesWithKey: traverseNodesWithKey\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nfunction convertToSet(list) {\n    const set = new Set();\n    list.forEach(x => set.add(x));\n    return set;\n}\n\nvar SetUtils = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    convertToSet: convertToSet\n});\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nconst utils = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, AriaUtils), ArrayUtils), BrowserUtils), DateUtils), DomUtils), EventUtils), FunctionUtils), FuzzyMatchUtils), GenericUtils), IconUtils), KeyboardUtils), MapUtils), MouseUtils), NumberUtils), ObjectUtils), RowNodeUtils), SetUtils), StringUtils);\nconst _ = utils;\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass NumberSequence {\n    constructor(initValue = 0, step = 1) {\n        this.nextValue = initValue;\n        this.step = step;\n    }\n    next() {\n        const valToReturn = this.nextValue;\n        this.nextValue += this.step;\n        return valToReturn;\n    }\n    peek() {\n        return this.nextValue;\n    }\n    skip(count) {\n        this.nextValue += count;\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar AgPromiseStatus;\n(function (AgPromiseStatus) {\n    AgPromiseStatus[AgPromiseStatus[\"IN_PROGRESS\"] = 0] = \"IN_PROGRESS\";\n    AgPromiseStatus[AgPromiseStatus[\"RESOLVED\"] = 1] = \"RESOLVED\";\n})(AgPromiseStatus || (AgPromiseStatus = {}));\nclass AgPromise {\n    constructor(callback) {\n        this.status = AgPromiseStatus.IN_PROGRESS;\n        this.resolution = null;\n        this.waiters = [];\n        callback(value => this.onDone(value), params => this.onReject(params));\n    }\n    static all(promises) {\n        return new AgPromise(resolve => {\n            let remainingToResolve = promises.length;\n            const combinedValues = new Array(remainingToResolve);\n            promises.forEach((promise, index) => {\n                promise.then(value => {\n                    combinedValues[index] = value;\n                    remainingToResolve--;\n                    if (remainingToResolve === 0) {\n                        resolve(combinedValues);\n                    }\n                });\n            });\n        });\n    }\n    static resolve(value = null) {\n        return new AgPromise(resolve => resolve(value));\n    }\n    then(func) {\n        return new AgPromise(resolve => {\n            if (this.status === AgPromiseStatus.RESOLVED) {\n                resolve(func(this.resolution));\n            }\n            else {\n                this.waiters.push(value => resolve(func(value)));\n            }\n        });\n    }\n    resolveNow(ifNotResolvedValue, ifResolved) {\n        return this.status === AgPromiseStatus.RESOLVED ? ifResolved(this.resolution) : ifNotResolvedValue;\n    }\n    onDone(value) {\n        this.status = AgPromiseStatus.RESOLVED;\n        this.resolution = value;\n        this.waiters.forEach(waiter => waiter(value));\n    }\n    onReject(params) {\n        console.warn('TBI');\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n/**\n * A Util Class only used when debugging for printing time to console\n */\nclass Timer {\n    constructor() {\n        this.timestamp = new Date().getTime();\n    }\n    print(msg) {\n        const duration = (new Date().getTime()) - this.timestamp;\n        console.info(`${msg} = ${duration}`);\n        this.timestamp = new Date().getTime();\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2s = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar TooltipStates;\n(function (TooltipStates) {\n    TooltipStates[TooltipStates[\"NOTHING\"] = 0] = \"NOTHING\";\n    TooltipStates[TooltipStates[\"WAITING_TO_SHOW\"] = 1] = \"WAITING_TO_SHOW\";\n    TooltipStates[TooltipStates[\"SHOWING\"] = 2] = \"SHOWING\";\n})(TooltipStates || (TooltipStates = {}));\nclass CustomTooltipFeature extends BeanStub {\n    constructor(parentComp) {\n        super();\n        this.DEFAULT_SHOW_TOOLTIP_DELAY = 2000;\n        this.DEFAULT_HIDE_TOOLTIP_DELAY = 10000;\n        this.SHOW_QUICK_TOOLTIP_DIFF = 1000;\n        this.FADE_OUT_TOOLTIP_TIMEOUT = 1000;\n        this.state = TooltipStates.NOTHING;\n        // when showing the tooltip, we need to make sure it's the most recent instance we request, as due to\n        // async we could request two tooltips before the first instance returns, in which case we should\n        // disregard the second instance.\n        this.tooltipInstanceCount = 0;\n        this.tooltipMouseTrack = false;\n        this.parentComp = parentComp;\n    }\n    postConstruct() {\n        this.tooltipShowDelay = this.getTooltipDelay('show') || this.DEFAULT_SHOW_TOOLTIP_DELAY;\n        this.tooltipHideDelay = this.getTooltipDelay('hide') || this.DEFAULT_HIDE_TOOLTIP_DELAY;\n        this.tooltipMouseTrack = this.gridOptionsService.is('tooltipMouseTrack');\n        const el = this.parentComp.getGui();\n        this.addManagedListener(el, 'mouseenter', this.onMouseEnter.bind(this));\n        this.addManagedListener(el, 'mouseleave', this.onMouseLeave.bind(this));\n        this.addManagedListener(el, 'mousemove', this.onMouseMove.bind(this));\n        this.addManagedListener(el, 'mousedown', this.onMouseDown.bind(this));\n        this.addManagedListener(el, 'keydown', this.onKeyDown.bind(this));\n    }\n    destroy() {\n        // if this component gets destroyed while tooltip is showing, need to make sure\n        // we don't end with no mouseLeave event resulting in zombie tooltip\n        this.setToDoNothing();\n        super.destroy();\n    }\n    onMouseEnter(e) {\n        if (isIOSUserAgent()) {\n            return;\n        }\n        // every mouseenter should be following by a mouseleave, however for some unkonwn, it's possible for\n        // mouseenter to be called twice in a row, which can happen if editing the cell. this was reported\n        // in https://ag-grid.atlassian.net/browse/AG-4422. to get around this, we check the state, and if\n        // state is !=nothing, then we know mouseenter was already received.\n        if (this.state != TooltipStates.NOTHING) {\n            return;\n        }\n        // if another tooltip was hidden very recently, we only wait 200ms to show, not the normal waiting time\n        const delay = this.isLastTooltipHiddenRecently() ? 200 : this.tooltipShowDelay;\n        this.showTooltipTimeoutId = window.setTimeout(this.showTooltip.bind(this), delay);\n        this.lastMouseEvent = e;\n        this.state = TooltipStates.WAITING_TO_SHOW;\n    }\n    onMouseLeave() {\n        this.setToDoNothing();\n    }\n    onKeyDown() {\n        this.setToDoNothing();\n    }\n    setToDoNothing() {\n        if (this.state === TooltipStates.SHOWING) {\n            this.hideTooltip();\n        }\n        this.clearTimeouts();\n        this.state = TooltipStates.NOTHING;\n    }\n    onMouseMove(e) {\n        // there is a delay from the time we mouseOver a component and the time the\n        // tooltip is displayed, so we need to track mousemove to be able to correctly\n        // position the tooltip when showTooltip is called.\n        this.lastMouseEvent = e;\n        if (this.tooltipMouseTrack &&\n            this.state === TooltipStates.SHOWING &&\n            this.tooltipComp) {\n            this.positionTooltipUnderLastMouseEvent();\n        }\n    }\n    onMouseDown() {\n        this.setToDoNothing();\n    }\n    getTooltipDelay(type) {\n        const tooltipShowDelay = this.gridOptionsService.getNum('tooltipShowDelay');\n        const tooltipHideDelay = this.gridOptionsService.getNum('tooltipHideDelay');\n        const delay = type === 'show' ? tooltipShowDelay : tooltipHideDelay;\n        const capitalisedType = capitalise(type);\n        if (exists(delay)) {\n            if (delay < 0) {\n                doOnce(() => console.warn(`AG Grid: tooltip${capitalisedType}Delay should not be lower than 0`), `tooltip${capitalisedType}DelayWarn`);\n            }\n            return Math.max(200, delay);\n        }\n        return null;\n    }\n    hideTooltip() {\n        // check if comp exists - due to async, although we asked for\n        // one, the instance may not be back yet\n        if (this.tooltipComp) {\n            this.destroyTooltipComp();\n            CustomTooltipFeature.lastTooltipHideTime = new Date().getTime();\n        }\n        this.state = TooltipStates.NOTHING;\n    }\n    destroyTooltipComp() {\n        // add class to fade out the tooltip\n        this.tooltipComp.getGui().classList.add('ag-tooltip-hiding');\n        // make local copies of these variables, as we use them in the async function below,\n        // and we clear then to 'undefined' later, so need to take a copy before they are undefined.\n        const tooltipPopupDestroyFunc = this.tooltipPopupDestroyFunc;\n        const tooltipComp = this.tooltipComp;\n        window.setTimeout(() => {\n            tooltipPopupDestroyFunc();\n            this.getContext().destroyBean(tooltipComp);\n        }, this.FADE_OUT_TOOLTIP_TIMEOUT);\n        this.tooltipPopupDestroyFunc = undefined;\n        this.tooltipComp = undefined;\n    }\n    isLastTooltipHiddenRecently() {\n        // return true if <1000ms since last time we hid a tooltip\n        const now = new Date().getTime();\n        const then = CustomTooltipFeature.lastTooltipHideTime;\n        return (now - then) < this.SHOW_QUICK_TOOLTIP_DIFF;\n    }\n    showTooltip() {\n        const params = Object.assign({}, this.parentComp.getTooltipParams());\n        if (!exists(params.value)) {\n            this.setToDoNothing();\n            return;\n        }\n        this.state = TooltipStates.SHOWING;\n        this.tooltipInstanceCount++;\n        // we pass in tooltipInstanceCount so the callback knows what the count was when\n        // we requested the tooltip, so if another tooltip was requested in the mean time\n        // we disregard it\n        const callback = this.newTooltipComponentCallback.bind(this, this.tooltipInstanceCount);\n        const userDetails = this.userComponentFactory.getTooltipCompDetails(params);\n        userDetails.newAgStackInstance().then(callback);\n    }\n    newTooltipComponentCallback(tooltipInstanceCopy, tooltipComp) {\n        const compNoLongerNeeded = this.state !== TooltipStates.SHOWING || this.tooltipInstanceCount !== tooltipInstanceCopy;\n        if (compNoLongerNeeded) {\n            this.getContext().destroyBean(tooltipComp);\n            return;\n        }\n        const eGui = tooltipComp.getGui();\n        this.tooltipComp = tooltipComp;\n        if (!eGui.classList.contains('ag-tooltip')) {\n            eGui.classList.add('ag-tooltip-custom');\n        }\n        const translate = this.localeService.getLocaleTextFunc();\n        const addPopupRes = this.popupService.addPopup({\n            eChild: eGui,\n            ariaLabel: translate('ariaLabelTooltip', 'Tooltip')\n        });\n        if (addPopupRes) {\n            this.tooltipPopupDestroyFunc = addPopupRes.hideFunc;\n        }\n        // this.tooltipPopupDestroyFunc = this.popupService.addPopup(false, eGui, false);\n        this.positionTooltipUnderLastMouseEvent();\n        this.hideTooltipTimeoutId = window.setTimeout(this.hideTooltip.bind(this), this.tooltipHideDelay);\n    }\n    positionTooltipUnderLastMouseEvent() {\n        this.popupService.positionPopupUnderMouseEvent({\n            type: 'tooltip',\n            mouseEvent: this.lastMouseEvent,\n            ePopup: this.tooltipComp.getGui(),\n            nudgeY: 18,\n            skipObserver: this.tooltipMouseTrack\n        });\n    }\n    clearTimeouts() {\n        if (this.showTooltipTimeoutId) {\n            window.clearTimeout(this.showTooltipTimeoutId);\n            this.showTooltipTimeoutId = undefined;\n        }\n        if (this.hideTooltipTimeoutId) {\n            window.clearTimeout(this.hideTooltipTimeoutId);\n            this.hideTooltipTimeoutId = undefined;\n        }\n    }\n}\n__decorate$2s([\n    Autowired('popupService')\n], CustomTooltipFeature.prototype, \"popupService\", void 0);\n__decorate$2s([\n    Autowired('userComponentFactory')\n], CustomTooltipFeature.prototype, \"userComponentFactory\", void 0);\n__decorate$2s([\n    PostConstruct\n], CustomTooltipFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass CssClassManager {\n    constructor(getGui) {\n        // to minimise DOM hits, we only apply CSS classes if they have changed. as adding a CSS class that is already\n        // there, or removing one that wasn't present, all takes CPU.\n        this.cssClassStates = {};\n        this.getGui = getGui;\n    }\n    addCssClass(className) {\n        const list = (className || '').split(' ');\n        if (list.length > 1) {\n            list.forEach(cls => this.addCssClass(cls));\n            return;\n        }\n        const updateNeeded = this.cssClassStates[className] !== true;\n        if (updateNeeded && className.length) {\n            const eGui = this.getGui();\n            if (eGui) {\n                eGui.classList.add(className);\n            }\n            this.cssClassStates[className] = true;\n        }\n    }\n    removeCssClass(className) {\n        const list = (className || '').split(' ');\n        if (list.length > 1) {\n            list.forEach(cls => this.removeCssClass(cls));\n            return;\n        }\n        const updateNeeded = this.cssClassStates[className] !== false;\n        if (updateNeeded && className.length) {\n            const eGui = this.getGui();\n            if (eGui) {\n                eGui.classList.remove(className);\n            }\n            this.cssClassStates[className] = false;\n        }\n    }\n    containsCssClass(className) {\n        const eGui = this.getGui();\n        if (!eGui) {\n            return false;\n        }\n        return eGui.classList.contains(className);\n    }\n    addOrRemoveCssClass(className, addOrRemove) {\n        if (!className) {\n            return;\n        }\n        // we check for spaces before doing the split, as doing the split\n        // created a performance problem (on windows only, see AG-6765)\n        if (className.indexOf(' ') >= 0) {\n            const list = (className || '').split(' ');\n            if (list.length > 1) {\n                list.forEach(cls => this.addOrRemoveCssClass(cls, addOrRemove));\n                return;\n            }\n        }\n        const updateNeeded = this.cssClassStates[className] !== addOrRemove;\n        if (updateNeeded && className.length) {\n            const eGui = this.getGui();\n            if (eGui) {\n                eGui.classList.toggle(className, addOrRemove);\n            }\n            this.cssClassStates[className] = addOrRemove;\n        }\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2r = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst compIdSequence = new NumberSequence();\nclass Component extends BeanStub {\n    constructor(template) {\n        super();\n        // if false, then CSS class \"ag-hidden\" is applied, which sets \"display: none\"\n        this.displayed = true;\n        // if false, then CSS class \"ag-invisible\" is applied, which sets \"visibility: hidden\"\n        this.visible = true;\n        // unique id for this row component. this is used for getting a reference to the HTML dom.\n        // we cannot use the RowNode id as this is not unique (due to animation, old rows can be lying\n        // around as we create a new rowComp instance for the same row node).\n        this.compId = compIdSequence.next();\n        this.cssClassManager = new CssClassManager(() => this.eGui);\n        if (template) {\n            this.setTemplate(template);\n        }\n    }\n    preConstructOnComponent() {\n        this.usingBrowserTooltips = this.gridOptionsService.is('enableBrowserTooltips');\n    }\n    getCompId() {\n        return this.compId;\n    }\n    getTooltipParams() {\n        return {\n            value: this.tooltipText,\n            location: 'UNKNOWN'\n        };\n    }\n    setTooltip(newTooltipText) {\n        const removeTooltip = () => {\n            if (this.usingBrowserTooltips) {\n                this.getGui().removeAttribute('title');\n            }\n            else {\n                this.tooltipFeature = this.destroyBean(this.tooltipFeature);\n            }\n        };\n        const addTooltip = () => {\n            if (this.usingBrowserTooltips) {\n                this.getGui().setAttribute('title', this.tooltipText);\n            }\n            else {\n                this.tooltipFeature = this.createBean(new CustomTooltipFeature(this));\n            }\n        };\n        if (this.tooltipText != newTooltipText) {\n            if (this.tooltipText) {\n                removeTooltip();\n            }\n            if (newTooltipText != null) {\n                this.tooltipText = newTooltipText;\n                if (this.tooltipText) {\n                    addTooltip();\n                }\n            }\n        }\n    }\n    // for registered components only, eg creates AgCheckbox instance from ag-checkbox HTML tag\n    createChildComponentsFromTags(parentNode, paramsMap) {\n        // we MUST take a copy of the list first, as the 'swapComponentForNode' adds comments into the DOM\n        // which messes up the traversal order of the children.\n        const childNodeList = copyNodeList(parentNode.childNodes);\n        childNodeList.forEach(childNode => {\n            if (!(childNode instanceof HTMLElement)) {\n                return;\n            }\n            const childComp = this.createComponentFromElement(childNode, childComp => {\n                // copy over all attributes, including css classes, so any attributes user put on the tag\n                // wll be carried across\n                const childGui = childComp.getGui();\n                if (childGui) {\n                    this.copyAttributesFromNode(childNode, childComp.getGui());\n                }\n            }, paramsMap);\n            if (childComp) {\n                if (childComp.addItems && childNode.children.length) {\n                    this.createChildComponentsFromTags(childNode, paramsMap);\n                    // converting from HTMLCollection to Array\n                    const items = Array.prototype.slice.call(childNode.children);\n                    childComp.addItems(items);\n                }\n                // replace the tag (eg ag-checkbox) with the proper HTMLElement (eg 'div') in the dom\n                this.swapComponentForNode(childComp, parentNode, childNode);\n            }\n            else if (childNode.childNodes) {\n                this.createChildComponentsFromTags(childNode, paramsMap);\n            }\n        });\n    }\n    createComponentFromElement(element, afterPreCreateCallback, paramsMap) {\n        const key = element.nodeName;\n        const componentParams = paramsMap ? paramsMap[element.getAttribute('ref')] : undefined;\n        const ComponentClass = this.agStackComponentsRegistry.getComponentClass(key);\n        if (ComponentClass) {\n            Component.elementGettingCreated = element;\n            const newComponent = new ComponentClass(componentParams);\n            newComponent.setParentComponent(this);\n            this.createBean(newComponent, null, afterPreCreateCallback);\n            return newComponent;\n        }\n        return null;\n    }\n    copyAttributesFromNode(source, dest) {\n        iterateNamedNodeMap(source.attributes, (name, value) => dest.setAttribute(name, value));\n    }\n    swapComponentForNode(newComponent, parentNode, childNode) {\n        const eComponent = newComponent.getGui();\n        parentNode.replaceChild(eComponent, childNode);\n        parentNode.insertBefore(document.createComment(childNode.nodeName), eComponent);\n        this.addDestroyFunc(this.destroyBean.bind(this, newComponent));\n        this.swapInComponentForQuerySelectors(newComponent, childNode);\n    }\n    swapInComponentForQuerySelectors(newComponent, childNode) {\n        const thisNoType = this;\n        this.iterateOverQuerySelectors((querySelector) => {\n            if (thisNoType[querySelector.attributeName] === childNode) {\n                thisNoType[querySelector.attributeName] = newComponent;\n            }\n        });\n    }\n    iterateOverQuerySelectors(action) {\n        let thisPrototype = Object.getPrototypeOf(this);\n        while (thisPrototype != null) {\n            const metaData = thisPrototype.__agComponentMetaData;\n            const currentProtoName = getFunctionName(thisPrototype.constructor);\n            if (metaData && metaData[currentProtoName] && metaData[currentProtoName].querySelectors) {\n                metaData[currentProtoName].querySelectors.forEach((querySelector) => action(querySelector));\n            }\n            thisPrototype = Object.getPrototypeOf(thisPrototype);\n        }\n    }\n    setTemplate(template, paramsMap) {\n        const eGui = loadTemplate(template);\n        this.setTemplateFromElement(eGui, paramsMap);\n    }\n    setTemplateFromElement(element, paramsMap) {\n        this.eGui = element;\n        this.eGui.__agComponent = this;\n        this.wireQuerySelectors();\n        // context will not be available when user sets template in constructor\n        if (!!this.getContext()) {\n            this.createChildComponentsFromTags(this.getGui(), paramsMap);\n        }\n    }\n    createChildComponentsPreConstruct() {\n        // ui exists if user sets template in constructor. when this happens, we have to wait for the context\n        // to be autoWired first before we can create child components.\n        if (!!this.getGui()) {\n            this.createChildComponentsFromTags(this.getGui());\n        }\n    }\n    wireQuerySelectors() {\n        if (!this.eGui) {\n            return;\n        }\n        const thisNoType = this;\n        this.iterateOverQuerySelectors((querySelector) => {\n            const setResult = (result) => thisNoType[querySelector.attributeName] = result;\n            // if it's a ref selector, and match is on top level component, we return\n            // the element. otherwise no way of components putting ref=xxx on the top\n            // level element as querySelector only looks at children.\n            const topLevelRefMatch = querySelector.refSelector\n                && this.eGui.getAttribute('ref') === querySelector.refSelector;\n            if (topLevelRefMatch) {\n                setResult(this.eGui);\n            }\n            else {\n                // otherwise use querySelector, which looks at children\n                const resultOfQuery = this.eGui.querySelector(querySelector.querySelector);\n                if (resultOfQuery) {\n                    setResult(resultOfQuery.__agComponent || resultOfQuery);\n                }\n            }\n        });\n    }\n    getGui() {\n        return this.eGui;\n    }\n    getFocusableElement() {\n        return this.eGui;\n    }\n    setParentComponent(component) {\n        this.parentComponent = component;\n    }\n    getParentComponent() {\n        return this.parentComponent;\n    }\n    // this method is for older code, that wants to provide the gui element,\n    // it is not intended for this to be in ag-Stack\n    setGui(eGui) {\n        this.eGui = eGui;\n    }\n    queryForHtmlElement(cssSelector) {\n        return this.eGui.querySelector(cssSelector);\n    }\n    queryForHtmlInputElement(cssSelector) {\n        return this.eGui.querySelector(cssSelector);\n    }\n    appendChild(newChild, container) {\n        if (newChild == null) {\n            return;\n        }\n        if (!container) {\n            container = this.eGui;\n        }\n        if (isNodeOrElement(newChild)) {\n            container.appendChild(newChild);\n        }\n        else {\n            const childComponent = newChild;\n            container.appendChild(childComponent.getGui());\n        }\n    }\n    isDisplayed() {\n        return this.displayed;\n    }\n    setVisible(visible, options = {}) {\n        if (visible !== this.visible) {\n            this.visible = visible;\n            const { skipAriaHidden } = options;\n            setVisible(this.eGui, visible, { skipAriaHidden });\n        }\n    }\n    setDisplayed(displayed, options = {}) {\n        if (displayed !== this.displayed) {\n            this.displayed = displayed;\n            const { skipAriaHidden } = options;\n            setDisplayed(this.eGui, displayed, { skipAriaHidden });\n            const event = {\n                type: Component.EVENT_DISPLAYED_CHANGED,\n                visible: this.displayed\n            };\n            this.dispatchEvent(event);\n        }\n    }\n    destroy() {\n        if (this.tooltipFeature) {\n            this.tooltipFeature = this.destroyBean(this.tooltipFeature);\n        }\n        if (this.parentComponent) {\n            this.parentComponent = undefined;\n        }\n        const eGui = this.eGui;\n        if (eGui && eGui.__agComponent) {\n            eGui.__agComponent = undefined;\n        }\n        super.destroy();\n    }\n    addGuiEventListener(event, listener, options) {\n        this.eGui.addEventListener(event, listener, options);\n        this.addDestroyFunc(() => this.eGui.removeEventListener(event, listener));\n    }\n    addCssClass(className) {\n        this.cssClassManager.addCssClass(className);\n    }\n    removeCssClass(className) {\n        this.cssClassManager.removeCssClass(className);\n    }\n    containsCssClass(className) {\n        return this.cssClassManager.containsCssClass(className);\n    }\n    addOrRemoveCssClass(className, addOrRemove) {\n        this.cssClassManager.addOrRemoveCssClass(className, addOrRemove);\n    }\n    getAttribute(key) {\n        const { eGui } = this;\n        return eGui ? eGui.getAttribute(key) : null;\n    }\n    getRefElement(refName) {\n        return this.queryForHtmlElement(`[ref=\"${refName}\"]`);\n    }\n}\nComponent.EVENT_DISPLAYED_CHANGED = 'displayedChanged';\n__decorate$2r([\n    Autowired('agStackComponentsRegistry')\n], Component.prototype, \"agStackComponentsRegistry\", void 0);\n__decorate$2r([\n    PreConstruct\n], Component.prototype, \"preConstructOnComponent\", null);\n__decorate$2r([\n    PreConstruct\n], Component.prototype, \"createChildComponentsPreConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nfunction QuerySelector(selector) {\n    return querySelectorFunc.bind(this, selector, undefined);\n}\nfunction RefSelector(ref) {\n    return querySelectorFunc.bind(this, `[ref=${ref}]`, ref);\n}\nfunction querySelectorFunc(selector, refSelector, classPrototype, methodOrAttributeName, index) {\n    if (selector === null) {\n        console.error('AG Grid: QuerySelector selector should not be null');\n        return;\n    }\n    if (typeof index === 'number') {\n        console.error('AG Grid: QuerySelector should be on an attribute');\n        return;\n    }\n    addToObjectProps(classPrototype, 'querySelectors', {\n        attributeName: methodOrAttributeName,\n        querySelector: selector,\n        refSelector: refSelector\n    });\n}\n// // think we should take this out, put property bindings on the\n// export function Method(eventName?: string): Function {\n//     return methodFunc.bind(this, eventName);\n// }\n//\n// function methodFunc(alias: string, target: Object, methodName: string) {\n//     if (alias === null) {\n//         console.error(\"AG Grid: EventListener eventName should not be null\");\n//         return;\n//     }\n//\n//     addToObjectProps(target, 'methods', {\n//         methodName: methodName,\n//         alias: alias\n//     });\n// }\nfunction addToObjectProps(target, key, value) {\n    // it's an attribute on the class\n    const props = getOrCreateProps(target, getFunctionName(target.constructor));\n    if (!props[key]) {\n        props[key] = [];\n    }\n    props[key].push(value);\n}\nfunction getOrCreateProps(target, instanceName) {\n    if (!target.__agComponentMetaData) {\n        target.__agComponentMetaData = {};\n    }\n    if (!target.__agComponentMetaData[instanceName]) {\n        target.__agComponentMetaData[instanceName] = {};\n    }\n    return target.__agComponentMetaData[instanceName];\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2q = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// optional floating filter for user provided filters - instead of providing a floating filter,\n// they can provide a getModelAsString() method on the filter instead. this class just displays\n// the string returned from getModelAsString()\nclass ReadOnlyFloatingFilter extends Component {\n    constructor() {\n        super(/* html */ `\n            <div class=\"ag-floating-filter-input\" role=\"presentation\">\n                <ag-input-text-field ref=\"eFloatingFilterText\"></ag-input-text-field>\n            </div>`);\n    }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so we need to override destroy() just to make the method public.\n    destroy() {\n        super.destroy();\n    }\n    init(params) {\n        this.params = params;\n        const displayName = this.columnModel.getDisplayNameForColumn(params.column, 'header', true);\n        const translate = this.localeService.getLocaleTextFunc();\n        this.eFloatingFilterText\n            .setDisabled(true)\n            .setInputAriaLabel(`${displayName} ${translate('ariaFilterInput', 'Filter Input')}`);\n    }\n    onParentModelChanged(parentModel) {\n        if (!parentModel) {\n            this.eFloatingFilterText.setValue('');\n            return;\n        }\n        this.params.parentFilterInstance(filterInstance => {\n            // it would be nice to check if getModelAsString was present before creating this component,\n            // however that is not possible, as React Hooks and VueJS don't attached the methods to the Filter until\n            // AFTER the filter is created, not allowing inspection before this (we create floating filters as columns\n            // are drawn, but the parent filters are only created when needed).\n            if (filterInstance.getModelAsString) {\n                const modelAsString = filterInstance.getModelAsString(parentModel);\n                this.eFloatingFilterText.setValue(modelAsString);\n            }\n        });\n    }\n}\n__decorate$2q([\n    RefSelector('eFloatingFilterText')\n], ReadOnlyFloatingFilter.prototype, \"eFloatingFilterText\", void 0);\n__decorate$2q([\n    Autowired('columnModel')\n], ReadOnlyFloatingFilter.prototype, \"columnModel\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n/** Provides sync access to async component. Date component can be lazy created - this class encapsulates\n * this by keeping value locally until DateComp has loaded, then passing DateComp the value. */\nclass DateCompWrapper {\n    constructor(context, userComponentFactory, dateComponentParams, eParent) {\n        this.alive = true;\n        this.context = context;\n        this.eParent = eParent;\n        const compDetails = userComponentFactory.getDateCompDetails(dateComponentParams);\n        const promise = compDetails.newAgStackInstance();\n        promise.then(dateComp => {\n            // because async, check the filter still exists after component comes back\n            if (!this.alive) {\n                context.destroyBean(dateComp);\n                return;\n            }\n            this.dateComp = dateComp;\n            if (!dateComp) {\n                return;\n            }\n            eParent.appendChild(dateComp.getGui());\n            if (dateComp.afterGuiAttached) {\n                dateComp.afterGuiAttached();\n            }\n            if (this.tempValue) {\n                dateComp.setDate(this.tempValue);\n            }\n            if (this.disabled != null) {\n                this.setDateCompDisabled(this.disabled);\n            }\n        });\n    }\n    destroy() {\n        this.alive = false;\n        this.dateComp = this.context.destroyBean(this.dateComp);\n    }\n    getDate() {\n        return this.dateComp ? this.dateComp.getDate() : this.tempValue;\n    }\n    setDate(value) {\n        if (this.dateComp) {\n            this.dateComp.setDate(value);\n        }\n        else {\n            this.tempValue = value;\n        }\n    }\n    setDisabled(disabled) {\n        if (this.dateComp) {\n            this.setDateCompDisabled(disabled);\n        }\n        else {\n            this.disabled = disabled;\n        }\n    }\n    setDisplayed(displayed) {\n        setDisplayed(this.eParent, displayed);\n    }\n    setInputPlaceholder(placeholder) {\n        if (this.dateComp && this.dateComp.setInputPlaceholder) {\n            this.dateComp.setInputPlaceholder(placeholder);\n        }\n    }\n    setInputAriaLabel(label) {\n        if (this.dateComp && this.dateComp.setInputAriaLabel) {\n            this.dateComp.setInputAriaLabel(label);\n        }\n    }\n    afterGuiAttached(params) {\n        if (this.dateComp && typeof this.dateComp.afterGuiAttached === 'function') {\n            this.dateComp.afterGuiAttached(params);\n        }\n    }\n    setDateCompDisabled(disabled) {\n        if (this.dateComp == null) {\n            return;\n        }\n        if (this.dateComp.setDisabled == null) {\n            return;\n        }\n        this.dateComp.setDisabled(disabled);\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n/* Common logic for options, used by both filters and floating filters. */\nclass OptionsFactory {\n    constructor() {\n        this.customFilterOptions = {};\n    }\n    init(params, defaultOptions) {\n        this.filterOptions = params.filterOptions || defaultOptions;\n        this.mapCustomOptions();\n        this.selectDefaultItem(params);\n    }\n    getFilterOptions() {\n        return this.filterOptions;\n    }\n    mapCustomOptions() {\n        if (!this.filterOptions) {\n            return;\n        }\n        this.filterOptions.forEach(filterOption => {\n            if (typeof filterOption === 'string') {\n                return;\n            }\n            const requiredProperties = [['displayKey'], ['displayName'], ['predicate', 'test']];\n            const propertyCheck = (keys) => {\n                if (!keys.some(key => filterOption[key] != null)) {\n                    console.warn(`AG Grid: ignoring FilterOptionDef as it doesn't contain one of '${keys}'`);\n                    return false;\n                }\n                return true;\n            };\n            if (!requiredProperties.every(propertyCheck)) {\n                this.filterOptions = this.filterOptions.filter(v => v === filterOption) || [];\n                return;\n            }\n            this.customFilterOptions[filterOption.displayKey] = filterOption;\n        });\n    }\n    selectDefaultItem(params) {\n        if (params.defaultOption) {\n            this.defaultOption = params.defaultOption;\n        }\n        else if (this.filterOptions.length >= 1) {\n            const firstFilterOption = this.filterOptions[0];\n            if (typeof firstFilterOption === 'string') {\n                this.defaultOption = firstFilterOption;\n            }\n            else if (firstFilterOption.displayKey) {\n                this.defaultOption = firstFilterOption.displayKey;\n            }\n            else {\n                console.warn(`AG Grid: invalid FilterOptionDef supplied as it doesn't contain a 'displayKey'`);\n            }\n        }\n        else {\n            console.warn('AG Grid: no filter options for filter');\n        }\n    }\n    getDefaultOption() {\n        return this.defaultOption;\n    }\n    getCustomOption(name) {\n        return this.customFilterOptions[name];\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nconst DEFAULT_FILTER_LOCALE_TEXT = {\n    applyFilter: 'Apply',\n    clearFilter: 'Clear',\n    resetFilter: 'Reset',\n    cancelFilter: 'Cancel',\n    textFilter: 'Text Filter',\n    numberFilter: 'Number Filter',\n    dateFilter: 'Date Filter',\n    setFilter: 'Set Filter',\n    filterOoo: 'Filter...',\n    empty: 'Choose One',\n    equals: 'Equals',\n    notEqual: 'Not equal',\n    lessThan: 'Less than',\n    greaterThan: 'Greater than',\n    inRange: 'In range',\n    inRangeStart: 'From',\n    inRangeEnd: 'To',\n    lessThanOrEqual: 'Less than or equals',\n    greaterThanOrEqual: 'Greater than or equals',\n    contains: 'Contains',\n    notContains: 'Not contains',\n    startsWith: 'Starts with',\n    endsWith: 'Ends with',\n    blank: 'Blank',\n    notBlank: 'Not blank',\n    andCondition: 'AND',\n    orCondition: 'OR',\n    dateFormatOoo: 'yyyy-mm-dd',\n};\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2p = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ManagedFocusFeature extends BeanStub {\n    constructor(eFocusableElement, callbacks = {}) {\n        super();\n        this.eFocusableElement = eFocusableElement;\n        this.callbacks = callbacks;\n        this.callbacks = Object.assign({ shouldStopEventPropagation: () => false, onTabKeyDown: (e) => {\n                if (e.defaultPrevented) {\n                    return;\n                }\n                const nextRoot = this.focusService.findNextFocusableElement(this.eFocusableElement, false, e.shiftKey);\n                if (!nextRoot) {\n                    return;\n                }\n                nextRoot.focus();\n                e.preventDefault();\n            } }, callbacks);\n    }\n    postConstruct() {\n        this.eFocusableElement.classList.add(ManagedFocusFeature.FOCUS_MANAGED_CLASS);\n        this.addKeyDownListeners(this.eFocusableElement);\n        if (this.callbacks.onFocusIn) {\n            this.addManagedListener(this.eFocusableElement, 'focusin', this.callbacks.onFocusIn);\n        }\n        if (this.callbacks.onFocusOut) {\n            this.addManagedListener(this.eFocusableElement, 'focusout', this.callbacks.onFocusOut);\n        }\n    }\n    addKeyDownListeners(eGui) {\n        this.addManagedListener(eGui, 'keydown', (e) => {\n            if (e.defaultPrevented || isStopPropagationForAgGrid(e)) {\n                return;\n            }\n            if (this.callbacks.shouldStopEventPropagation(e)) {\n                stopPropagationForAgGrid(e);\n                return;\n            }\n            if (e.key === KeyCode.TAB) {\n                this.callbacks.onTabKeyDown(e);\n            }\n            else if (this.callbacks.handleKeyDown) {\n                this.callbacks.handleKeyDown(e);\n            }\n        });\n    }\n}\nManagedFocusFeature.FOCUS_MANAGED_CLASS = 'ag-focus-managed';\n__decorate$2p([\n    Autowired('focusService')\n], ManagedFocusFeature.prototype, \"focusService\", void 0);\n__decorate$2p([\n    PostConstruct\n], ManagedFocusFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2o = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst RESIZE_CONTAINER_STYLE = 'ag-resizer-wrapper';\nconst RESIZE_TEMPLATE = /* html */ `<div class=\"${RESIZE_CONTAINER_STYLE}\">\n        <div ref=\"eTopLeftResizer\" class=\"ag-resizer ag-resizer-topLeft\"></div>\n        <div ref=\"eTopResizer\" class=\"ag-resizer ag-resizer-top\"></div>\n        <div ref=\"eTopRightResizer\" class=\"ag-resizer ag-resizer-topRight\"></div>\n        <div ref=\"eRightResizer\" class=\"ag-resizer ag-resizer-right\"></div>\n        <div ref=\"eBottomRightResizer\" class=\"ag-resizer ag-resizer-bottomRight\"></div>\n        <div ref=\"eBottomResizer\" class=\"ag-resizer ag-resizer-bottom\"></div>\n        <div ref=\"eBottomLeftResizer\" class=\"ag-resizer ag-resizer-bottomLeft\"></div>\n        <div ref=\"eLeftResizer\" class=\"ag-resizer ag-resizer-left\"></div>\n    </div>`;\nclass PositionableFeature extends BeanStub {\n    constructor(element, config) {\n        super();\n        this.element = element;\n        this.dragStartPosition = {\n            x: 0,\n            y: 0\n        };\n        this.position = {\n            x: 0,\n            y: 0\n        };\n        this.lastSize = {\n            width: -1,\n            height: -1\n        };\n        this.positioned = false;\n        this.resizersAdded = false;\n        this.resizeListeners = [];\n        this.boundaryEl = null;\n        this.isResizing = false;\n        this.isMoving = false;\n        this.resizable = {};\n        this.movable = false;\n        this.currentResizer = null;\n        this.config = Object.assign({}, { popup: false }, config);\n    }\n    center() {\n        const { clientHeight, clientWidth } = this.offsetParent;\n        const x = (clientWidth / 2) - (this.getWidth() / 2);\n        const y = (clientHeight / 2) - (this.getHeight() / 2);\n        this.offsetElement(x, y);\n    }\n    initialisePosition() {\n        if (this.positioned) {\n            return;\n        }\n        const { centered, forcePopupParentAsOffsetParent, minWidth, width, minHeight, height, x, y } = this.config;\n        if (!this.offsetParent) {\n            this.setOffsetParent();\n        }\n        let computedMinHeight = 0;\n        let computedMinWidth = 0;\n        // here we don't use the main offset parent but the element's offsetParent\n        // in order to calculated the minWidth and minHeight correctly\n        const isVisible = !!this.element.offsetParent;\n        if (isVisible) {\n            const boundaryEl = this.findBoundaryElement();\n            const offsetParentComputedStyles = window.getComputedStyle(boundaryEl);\n            if (offsetParentComputedStyles.minWidth != null) {\n                const paddingWidth = boundaryEl.offsetWidth - this.element.offsetWidth;\n                computedMinWidth = parseInt(offsetParentComputedStyles.minWidth, 10) - paddingWidth;\n            }\n            if (offsetParentComputedStyles.minHeight != null) {\n                const paddingHeight = boundaryEl.offsetHeight - this.element.offsetHeight;\n                computedMinHeight = parseInt(offsetParentComputedStyles.minHeight, 10) - paddingHeight;\n            }\n        }\n        this.minHeight = minHeight || computedMinHeight;\n        this.minWidth = minWidth || computedMinWidth;\n        if (width) {\n            this.setWidth(width);\n        }\n        if (height) {\n            this.setHeight(height);\n        }\n        if (!width || !height) {\n            this.refreshSize();\n        }\n        if (centered) {\n            this.center();\n        }\n        else if (x || y) {\n            this.offsetElement(x, y);\n        }\n        else if (isVisible && forcePopupParentAsOffsetParent && this.boundaryEl) {\n            const top = parseFloat(this.boundaryEl.style.top);\n            const left = parseFloat(this.boundaryEl.style.left);\n            this.offsetElement(isNaN(left) ? 0 : left, isNaN(top) ? 0 : top);\n        }\n        this.positioned = !!this.offsetParent;\n    }\n    isPositioned() {\n        return this.positioned;\n    }\n    getPosition() {\n        return this.position;\n    }\n    setMovable(movable, moveElement) {\n        if (!this.config.popup || movable === this.movable) {\n            return;\n        }\n        this.movable = movable;\n        const params = this.moveElementDragListener || {\n            eElement: moveElement,\n            onDragStart: this.onMoveStart.bind(this),\n            onDragging: this.onMove.bind(this),\n            onDragStop: this.onMoveEnd.bind(this)\n        };\n        if (movable) {\n            this.dragService.addDragSource(params);\n            this.moveElementDragListener = params;\n        }\n        else {\n            this.dragService.removeDragSource(params);\n            this.moveElementDragListener = undefined;\n        }\n    }\n    setResizable(resizable) {\n        this.clearResizeListeners();\n        if (resizable) {\n            this.addResizers();\n        }\n        else {\n            this.removeResizers();\n        }\n        if (typeof resizable === 'boolean') {\n            if (resizable === false) {\n                return;\n            }\n            resizable = {\n                topLeft: resizable,\n                top: resizable,\n                topRight: resizable,\n                right: resizable,\n                bottomRight: resizable,\n                bottom: resizable,\n                bottomLeft: resizable,\n                left: resizable\n            };\n        }\n        Object.keys(resizable).forEach((side) => {\n            const resizableStructure = resizable;\n            const isSideResizable = !!resizableStructure[side];\n            const resizerEl = this.getResizerElement(side);\n            const params = {\n                dragStartPixels: 0,\n                eElement: resizerEl,\n                onDragStart: (e) => this.onResizeStart(e, side),\n                onDragging: this.onResize.bind(this),\n                onDragStop: (e) => this.onResizeEnd(e, side),\n            };\n            if (isSideResizable || (!this.isAlive() && !isSideResizable)) {\n                if (isSideResizable) {\n                    this.dragService.addDragSource(params);\n                    this.resizeListeners.push(params);\n                    resizerEl.style.pointerEvents = 'all';\n                }\n                else {\n                    resizerEl.style.pointerEvents = 'none';\n                }\n                this.resizable[side] = isSideResizable;\n            }\n        });\n    }\n    removeSizeFromEl() {\n        this.element.style.removeProperty('height');\n        this.element.style.removeProperty('width');\n        this.element.style.removeProperty('flex');\n    }\n    restoreLastSize() {\n        this.element.style.flex = '0 0 auto';\n        const { height, width } = this.lastSize;\n        if (width !== -1) {\n            this.element.style.width = `${width}px`;\n        }\n        if (height !== -1) {\n            this.element.style.height = `${height}px`;\n        }\n    }\n    getHeight() {\n        return this.element.offsetHeight;\n    }\n    setHeight(height) {\n        const { popup } = this.config;\n        const eGui = this.element;\n        let isPercent = false;\n        if (typeof height === 'string' && height.indexOf('%') !== -1) {\n            setFixedHeight(eGui, height);\n            height = getAbsoluteHeight(eGui);\n            isPercent = true;\n        }\n        else {\n            height = Math.max(this.minHeight, height);\n            if (this.positioned) {\n                const availableHeight = this.getAvailableHeight();\n                if (availableHeight && height > availableHeight) {\n                    height = availableHeight;\n                }\n            }\n        }\n        if (this.getHeight() === height) {\n            return;\n        }\n        if (!isPercent) {\n            if (popup) {\n                setFixedHeight(eGui, height);\n            }\n            else {\n                eGui.style.height = `${height}px`;\n                eGui.style.flex = '0 0 auto';\n                this.lastSize.height = typeof height === 'number' ? height : parseFloat(height);\n            }\n        }\n        else {\n            eGui.style.maxHeight = 'unset';\n            eGui.style.minHeight = 'unset';\n        }\n    }\n    getAvailableHeight() {\n        const { popup, forcePopupParentAsOffsetParent } = this.config;\n        if (!this.positioned) {\n            this.initialisePosition();\n        }\n        const { clientHeight } = this.offsetParent;\n        if (!clientHeight) {\n            return null;\n        }\n        const elRect = this.element.getBoundingClientRect();\n        const offsetParentRect = this.offsetParent.getBoundingClientRect();\n        const yPosition = popup ? this.position.y : elRect.top;\n        const parentTop = popup ? 0 : offsetParentRect.top;\n        // When `forcePopupParentAsOffsetParent`, there may be elements that appear after the resizable element, but aren't included in the height.\n        // Take these into account here\n        let additionalHeight = 0;\n        if (forcePopupParentAsOffsetParent) {\n            const parentEl = this.element.parentElement;\n            if (parentEl) {\n                const { bottom } = parentEl.getBoundingClientRect();\n                additionalHeight = bottom - elRect.bottom;\n            }\n        }\n        const availableHeight = clientHeight + parentTop - yPosition - additionalHeight;\n        return availableHeight;\n    }\n    getWidth() {\n        return this.element.offsetWidth;\n    }\n    setWidth(width) {\n        const eGui = this.element;\n        const { popup } = this.config;\n        let isPercent = false;\n        if (typeof width === 'string' && width.indexOf('%') !== -1) {\n            setFixedWidth(eGui, width);\n            width = getAbsoluteWidth(eGui);\n            isPercent = true;\n        }\n        else if (this.positioned) {\n            width = Math.max(this.minWidth, width);\n            const { clientWidth } = this.offsetParent;\n            const xPosition = popup ? this.position.x : this.element.getBoundingClientRect().left;\n            if (clientWidth && (width + xPosition > clientWidth)) {\n                width = clientWidth - xPosition;\n            }\n        }\n        if (this.getWidth() === width) {\n            return;\n        }\n        if (!isPercent) {\n            if (this.config.popup) {\n                setFixedWidth(eGui, width);\n            }\n            else {\n                eGui.style.width = `${width}px`;\n                eGui.style.flex = ' unset';\n                this.lastSize.width = typeof width === 'number' ? width : parseFloat(width);\n            }\n        }\n        else {\n            eGui.style.maxWidth = 'unset';\n            eGui.style.minWidth = 'unset';\n        }\n    }\n    offsetElement(x = 0, y = 0) {\n        const ePopup = this.config.forcePopupParentAsOffsetParent ? this.boundaryEl : this.element;\n        this.popupService.positionPopup({\n            ePopup,\n            keepWithinBounds: true,\n            skipObserver: this.movable || this.isResizable(),\n            updatePosition: () => ({ x, y })\n        });\n        this.setPosition(parseFloat(ePopup.style.left), parseFloat(ePopup.style.top));\n    }\n    constrainSizeToAvailableHeight(constrain) {\n        if (!this.config.forcePopupParentAsOffsetParent) {\n            return;\n        }\n        const applyMaxHeightToElement = () => {\n            const availableHeight = this.getAvailableHeight();\n            this.element.style.setProperty('max-height', `${availableHeight}px`);\n        };\n        if (constrain) {\n            this.resizeObserverSubscriber = this.resizeObserverService.observeResize(this.popupService.getPopupParent(), applyMaxHeightToElement);\n        }\n        else {\n            this.element.style.removeProperty('max-height');\n            if (this.resizeObserverSubscriber) {\n                this.resizeObserverSubscriber();\n                this.resizeObserverSubscriber = undefined;\n            }\n        }\n    }\n    setPosition(x, y) {\n        this.position.x = x;\n        this.position.y = y;\n    }\n    updateDragStartPosition(x, y) {\n        this.dragStartPosition = { x, y };\n    }\n    calculateMouseMovement(params) {\n        const { e, isLeft, isTop, anywhereWithin, topBuffer } = params;\n        const xDiff = e.clientX - this.dragStartPosition.x;\n        const yDiff = e.clientY - this.dragStartPosition.y;\n        const movementX = this.shouldSkipX(e, !!isLeft, !!anywhereWithin, xDiff) ? 0 : xDiff;\n        const movementY = this.shouldSkipY(e, !!isTop, topBuffer, yDiff) ? 0 : yDiff;\n        return { movementX, movementY };\n    }\n    shouldSkipX(e, isLeft, anywhereWithin, diff) {\n        const elRect = this.element.getBoundingClientRect();\n        const parentRect = this.offsetParent.getBoundingClientRect();\n        const boundaryElRect = this.boundaryEl.getBoundingClientRect();\n        const xPosition = this.config.popup ? this.position.x : elRect.left;\n        // skip if cursor is outside of popupParent horizontally\n        let skipX = ((xPosition <= 0 && parentRect.left >= e.clientX) ||\n            (parentRect.right <= e.clientX && parentRect.right <= boundaryElRect.right));\n        if (skipX) {\n            return true;\n        }\n        if (isLeft) {\n            skipX = (\n            // skip if we are moving to the left and the cursor\n            // is positioned to the right of the left side anchor\n            (diff < 0 && e.clientX > xPosition + parentRect.left) ||\n                // skip if we are moving to the right and the cursor\n                // is positioned to the left of the dialog\n                (diff > 0 && e.clientX < xPosition + parentRect.left));\n        }\n        else {\n            if (anywhereWithin) {\n                // if anywhereWithin is true, we allow to move\n                // as long as the cursor is within the dialog\n                skipX = ((diff < 0 && e.clientX > boundaryElRect.right) ||\n                    (diff > 0 && e.clientX < xPosition + parentRect.left));\n            }\n            else {\n                skipX = (\n                // if the movement is bound to the right side of the dialog\n                // we skip if we are moving to the left and the cursor\n                // is to the right of the dialog\n                (diff < 0 && e.clientX > boundaryElRect.right) ||\n                    // or skip if we are moving to the right and the cursor\n                    // is to the left of the right side anchor\n                    (diff > 0 && e.clientX < boundaryElRect.right));\n            }\n        }\n        return skipX;\n    }\n    shouldSkipY(e, isTop, topBuffer = 0, diff) {\n        const elRect = this.element.getBoundingClientRect();\n        const parentRect = this.offsetParent.getBoundingClientRect();\n        const boundaryElRect = this.boundaryEl.getBoundingClientRect();\n        const yPosition = this.config.popup ? this.position.y : elRect.top;\n        // skip if cursor is outside of popupParent vertically\n        let skipY = ((yPosition <= 0 && parentRect.top >= e.clientY) ||\n            (parentRect.bottom <= e.clientY && parentRect.bottom <= boundaryElRect.bottom));\n        if (skipY) {\n            return true;\n        }\n        if (isTop) {\n            skipY = (\n            // skip if we are moving to towards top and the cursor is\n            // below the top anchor + topBuffer\n            // note: topBuffer is used when moving the dialog using the title bar\n            (diff < 0 && e.clientY > yPosition + parentRect.top + topBuffer) ||\n                // skip if we are moving to the bottom and the cursor is\n                // above the top anchor\n                (diff > 0 && e.clientY < yPosition + parentRect.top));\n        }\n        else {\n            skipY = (\n            // skip if we are moving towards the top and the cursor\n            // is below the bottom anchor\n            (diff < 0 && e.clientY > boundaryElRect.bottom) ||\n                // skip if we are moving towards the bottom and the cursor\n                // is above the bottom anchor\n                (diff > 0 && e.clientY < boundaryElRect.bottom));\n        }\n        return skipY;\n    }\n    createResizeMap() {\n        const eGui = this.element;\n        this.resizerMap = {\n            topLeft: { element: eGui.querySelector('[ref=eTopLeftResizer]') },\n            top: { element: eGui.querySelector('[ref=eTopResizer]') },\n            topRight: { element: eGui.querySelector('[ref=eTopRightResizer]') },\n            right: { element: eGui.querySelector('[ref=eRightResizer]') },\n            bottomRight: { element: eGui.querySelector('[ref=eBottomRightResizer]') },\n            bottom: { element: eGui.querySelector('[ref=eBottomResizer]') },\n            bottomLeft: { element: eGui.querySelector('[ref=eBottomLeftResizer]') },\n            left: { element: eGui.querySelector('[ref=eLeftResizer]') }\n        };\n    }\n    addResizers() {\n        if (this.resizersAdded) {\n            return;\n        }\n        const eGui = this.element;\n        if (!eGui) {\n            return;\n        }\n        const parser = new DOMParser();\n        const resizers = parser.parseFromString(RESIZE_TEMPLATE, 'text/html').body;\n        eGui.appendChild(resizers.firstChild);\n        this.createResizeMap();\n        this.resizersAdded = true;\n    }\n    removeResizers() {\n        this.resizerMap = undefined;\n        const resizerEl = this.element.querySelector(`.${RESIZE_CONTAINER_STYLE}`);\n        if (resizerEl) {\n            this.element.removeChild(resizerEl);\n        }\n        this.resizersAdded = false;\n    }\n    getResizerElement(side) {\n        return this.resizerMap[side].element;\n    }\n    onResizeStart(e, side) {\n        this.boundaryEl = this.findBoundaryElement();\n        if (!this.positioned) {\n            this.initialisePosition();\n        }\n        this.currentResizer = {\n            isTop: !!side.match(/top/i),\n            isRight: !!side.match(/right/i),\n            isBottom: !!side.match(/bottom/i),\n            isLeft: !!side.match(/left/i),\n        };\n        this.element.classList.add('ag-resizing');\n        this.resizerMap[side].element.classList.add('ag-active');\n        const { popup, forcePopupParentAsOffsetParent } = this.config;\n        if (!popup && !forcePopupParentAsOffsetParent) {\n            this.applySizeToSiblings(this.currentResizer.isBottom || this.currentResizer.isTop);\n        }\n        this.isResizing = true;\n        this.updateDragStartPosition(e.clientX, e.clientY);\n    }\n    getSiblings() {\n        const element = this.element;\n        const parent = element.parentElement;\n        if (!parent) {\n            return null;\n        }\n        return Array.prototype.slice.call(parent.children).filter((el) => !el.classList.contains('ag-hidden'));\n    }\n    getMinSizeOfSiblings() {\n        const siblings = this.getSiblings() || [];\n        let height = 0;\n        let width = 0;\n        for (let i = 0; i < siblings.length; i++) {\n            const currentEl = siblings[i];\n            const isFlex = !!currentEl.style.flex && currentEl.style.flex !== '0 0 auto';\n            if (currentEl === this.element) {\n                continue;\n            }\n            let nextHeight = this.minHeight || 0;\n            let nextWidth = this.minWidth || 0;\n            if (isFlex) {\n                const computedStyle = window.getComputedStyle(currentEl);\n                if (computedStyle.minHeight) {\n                    nextHeight = parseInt(computedStyle.minHeight, 10);\n                }\n                if (computedStyle.minWidth) {\n                    nextWidth = parseInt(computedStyle.minWidth, 10);\n                }\n            }\n            else {\n                nextHeight = currentEl.offsetHeight;\n                nextWidth = currentEl.offsetWidth;\n            }\n            height += nextHeight;\n            width += nextWidth;\n        }\n        return { height, width };\n    }\n    applySizeToSiblings(vertical) {\n        let containerToFlex = null;\n        const siblings = this.getSiblings();\n        if (!siblings) {\n            return;\n        }\n        for (let i = 0; i < siblings.length; i++) {\n            const el = siblings[i];\n            if (el === containerToFlex) {\n                continue;\n            }\n            if (vertical) {\n                el.style.height = `${el.offsetHeight}px`;\n            }\n            else {\n                el.style.width = `${el.offsetWidth}px`;\n            }\n            el.style.flex = '0 0 auto';\n            if (el === this.element) {\n                containerToFlex = siblings[i + 1];\n            }\n        }\n        if (containerToFlex) {\n            containerToFlex.style.removeProperty('height');\n            containerToFlex.style.removeProperty('min-height');\n            containerToFlex.style.removeProperty('max-height');\n            containerToFlex.style.flex = '1 1 auto';\n        }\n    }\n    isResizable() {\n        return Object.values(this.resizable).some(value => value);\n    }\n    onResize(e) {\n        if (!this.isResizing || !this.currentResizer) {\n            return;\n        }\n        const { popup, forcePopupParentAsOffsetParent } = this.config;\n        const { isTop, isRight, isBottom, isLeft } = this.currentResizer;\n        const isHorizontal = isRight || isLeft;\n        const isVertical = isBottom || isTop;\n        const { movementX, movementY } = this.calculateMouseMovement({ e, isLeft, isTop });\n        const xPosition = this.position.x;\n        const yPosition = this.position.y;\n        let offsetLeft = 0;\n        let offsetTop = 0;\n        if (isHorizontal && movementX) {\n            const direction = isLeft ? -1 : 1;\n            const oldWidth = this.getWidth();\n            const newWidth = oldWidth + (movementX * direction);\n            let skipWidth = false;\n            if (isLeft) {\n                offsetLeft = oldWidth - newWidth;\n                if (xPosition + offsetLeft <= 0 || newWidth <= this.minWidth) {\n                    skipWidth = true;\n                    offsetLeft = 0;\n                }\n            }\n            if (!skipWidth) {\n                this.setWidth(newWidth);\n            }\n        }\n        if (isVertical && movementY) {\n            const direction = isTop ? -1 : 1;\n            const oldHeight = this.getHeight();\n            const newHeight = oldHeight + (movementY * direction);\n            let skipHeight = false;\n            if (isTop) {\n                offsetTop = oldHeight - newHeight;\n                if (yPosition + offsetTop <= 0 || newHeight <= this.minHeight) {\n                    skipHeight = true;\n                    offsetTop = 0;\n                }\n            }\n            else {\n                // do not let the size of all siblings be higher than the parent container\n                if (!this.config.popup &&\n                    !this.config.forcePopupParentAsOffsetParent &&\n                    oldHeight < newHeight &&\n                    (this.getMinSizeOfSiblings().height + newHeight) > this.element.parentElement.offsetHeight) {\n                    skipHeight = true;\n                }\n            }\n            if (!skipHeight) {\n                this.setHeight(newHeight);\n            }\n        }\n        this.updateDragStartPosition(e.clientX, e.clientY);\n        if ((popup || forcePopupParentAsOffsetParent) && offsetLeft || offsetTop) {\n            this.offsetElement(xPosition + offsetLeft, yPosition + offsetTop);\n        }\n    }\n    onResizeEnd(e, side) {\n        this.isResizing = false;\n        this.currentResizer = null;\n        this.boundaryEl = null;\n        const params = {\n            type: 'resize',\n            api: this.gridOptionsService.api,\n            columnApi: this.gridOptionsService.columnApi\n        };\n        this.element.classList.remove('ag-resizing');\n        this.resizerMap[side].element.classList.remove('ag-active');\n        this.dispatchEvent(params);\n    }\n    refreshSize() {\n        const eGui = this.element;\n        if (this.config.popup) {\n            if (!this.config.width) {\n                this.setWidth(eGui.offsetWidth);\n            }\n            if (!this.config.height) {\n                this.setHeight(eGui.offsetHeight);\n            }\n        }\n    }\n    onMoveStart(e) {\n        this.boundaryEl = this.findBoundaryElement();\n        if (!this.positioned) {\n            this.initialisePosition();\n        }\n        this.isMoving = true;\n        this.element.classList.add('ag-moving');\n        this.updateDragStartPosition(e.clientX, e.clientY);\n    }\n    onMove(e) {\n        if (!this.isMoving) {\n            return;\n        }\n        const { x, y } = this.position;\n        let topBuffer;\n        if (this.config.calculateTopBuffer) {\n            topBuffer = this.config.calculateTopBuffer();\n        }\n        const { movementX, movementY } = this.calculateMouseMovement({\n            e,\n            isTop: true,\n            anywhereWithin: true,\n            topBuffer\n        });\n        this.offsetElement(x + movementX, y + movementY);\n        this.updateDragStartPosition(e.clientX, e.clientY);\n    }\n    onMoveEnd() {\n        this.isMoving = false;\n        this.boundaryEl = null;\n        this.element.classList.remove('ag-moving');\n    }\n    setOffsetParent() {\n        if (this.config.forcePopupParentAsOffsetParent) {\n            this.offsetParent = this.popupService.getPopupParent();\n        }\n        else {\n            this.offsetParent = this.element.offsetParent;\n        }\n    }\n    findBoundaryElement() {\n        let el = this.element;\n        while (el) {\n            if (window.getComputedStyle(el).position !== 'static') {\n                return el;\n            }\n            el = el.parentElement;\n        }\n        return this.element;\n    }\n    clearResizeListeners() {\n        while (this.resizeListeners.length) {\n            const params = this.resizeListeners.pop();\n            this.dragService.removeDragSource(params);\n        }\n    }\n    destroy() {\n        super.destroy();\n        if (this.moveElementDragListener) {\n            this.dragService.removeDragSource(this.moveElementDragListener);\n        }\n        this.constrainSizeToAvailableHeight(false);\n        this.clearResizeListeners();\n        this.removeResizers();\n    }\n}\n__decorate$2o([\n    Autowired('popupService')\n], PositionableFeature.prototype, \"popupService\", void 0);\n__decorate$2o([\n    Autowired('resizeObserverService')\n], PositionableFeature.prototype, \"resizeObserverService\", void 0);\n__decorate$2o([\n    Autowired('dragService')\n], PositionableFeature.prototype, \"dragService\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2n = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Contains common logic to all provided filters (apply button, clear button, etc).\n * All the filters that come with AG Grid extend this class. User filters do not\n * extend this class.\n *\n * @param M type of filter-model managed by the concrete sub-class that extends this type\n * @param V type of value managed by the concrete sub-class that extends this type\n */\nclass ProvidedFilter extends Component {\n    constructor(filterNameKey) {\n        super();\n        this.filterNameKey = filterNameKey;\n        this.applyActive = false;\n        this.hidePopup = null;\n        this.debouncePending = false;\n        // after the user hits 'apply' the model gets copied to here. this is then the model that we use for\n        // all filtering. so if user changes UI but doesn't hit apply, then the UI will be out of sync with this model.\n        // this is what we want, as the UI should only become the 'active' filter once it's applied. when apply is\n        // inactive, this model will be in sync (following the debounce ms). if the UI is not a valid filter\n        // (eg the value is missing so nothing to filter on, or for set filter all checkboxes are checked so filter\n        // not active) then this appliedModel will be null/undefined.\n        this.appliedModel = null;\n    }\n    postConstruct() {\n        this.resetTemplate(); // do this first to create the DOM\n        this.createManagedBean(new ManagedFocusFeature(this.getFocusableElement(), {\n            handleKeyDown: this.handleKeyDown.bind(this)\n        }));\n        this.positionableFeature = new PositionableFeature(this.getPositionableElement(), {\n            forcePopupParentAsOffsetParent: true\n        });\n        this.createBean(this.positionableFeature);\n    }\n    // override\n    handleKeyDown(e) { }\n    getFilterTitle() {\n        return this.translate(this.filterNameKey);\n    }\n    isFilterActive() {\n        // filter is active if we have a valid applied model\n        return !!this.appliedModel;\n    }\n    resetTemplate(paramsMap) {\n        let eGui = this.getGui();\n        if (eGui) {\n            eGui.removeEventListener('submit', this.onFormSubmit);\n        }\n        const templateString = /* html */ `\n            <form class=\"ag-filter-wrapper\">\n                <div class=\"ag-filter-body-wrapper ag-${this.getCssIdentifier()}-body-wrapper\" ref=\"eFilterBody\">\n                    ${this.createBodyTemplate()}\n                </div>\n            </form>`;\n        this.setTemplate(templateString, paramsMap);\n        eGui = this.getGui();\n        if (eGui) {\n            eGui.addEventListener('submit', this.onFormSubmit);\n        }\n    }\n    isReadOnly() {\n        return !!this.providedFilterParams.readOnly;\n    }\n    init(params) {\n        this.setParams(params);\n        this.resetUiToDefaults(true).then(() => {\n            this.updateUiVisibility();\n            this.setupOnBtApplyDebounce();\n        });\n    }\n    setParams(params) {\n        this.providedFilterParams = params;\n        this.applyActive = ProvidedFilter.isUseApplyButton(params);\n        this.createButtonPanel();\n    }\n    createButtonPanel() {\n        const { buttons } = this.providedFilterParams;\n        if (!buttons || buttons.length < 1 || this.isReadOnly()) {\n            return;\n        }\n        const eButtonsPanel = document.createElement('div');\n        eButtonsPanel.classList.add('ag-filter-apply-panel');\n        const addButton = (type) => {\n            let text;\n            let clickListener;\n            switch (type) {\n                case 'apply':\n                    text = this.translate('applyFilter');\n                    clickListener = (e) => this.onBtApply(false, false, e);\n                    break;\n                case 'clear':\n                    text = this.translate('clearFilter');\n                    clickListener = () => this.onBtClear();\n                    break;\n                case 'reset':\n                    text = this.translate('resetFilter');\n                    clickListener = () => this.onBtReset();\n                    break;\n                case 'cancel':\n                    text = this.translate('cancelFilter');\n                    clickListener = (e) => { this.onBtCancel(e); };\n                    break;\n                default:\n                    console.warn('AG Grid: Unknown button type specified');\n                    return;\n            }\n            const buttonType = type === 'apply' ? 'submit' : 'button';\n            const button = loadTemplate(\n            /* html */\n            `<button\n                    type=\"${buttonType}\"\n                    ref=\"${type}FilterButton\"\n                    class=\"ag-button ag-standard-button ag-filter-apply-panel-button\"\n                >${text}\n                </button>`);\n            eButtonsPanel.appendChild(button);\n            this.addManagedListener(button, 'click', clickListener);\n        };\n        convertToSet(buttons).forEach(type => addButton(type));\n        this.getGui().appendChild(eButtonsPanel);\n    }\n    // subclasses can override this to provide alternative debounce defaults\n    getDefaultDebounceMs() {\n        return 0;\n    }\n    setupOnBtApplyDebounce() {\n        const debounceMs = ProvidedFilter.getDebounceMs(this.providedFilterParams, this.getDefaultDebounceMs());\n        const debounceFunc = debounce(this.checkApplyDebounce.bind(this), debounceMs);\n        this.onBtApplyDebounce = () => {\n            this.debouncePending = true;\n            debounceFunc();\n        };\n    }\n    checkApplyDebounce() {\n        if (this.debouncePending) {\n            // May already have been applied, so don't apply again (e.g. closing filter before debounce timeout)\n            this.debouncePending = false;\n            this.onBtApply();\n        }\n    }\n    getModel() {\n        return this.appliedModel ? this.appliedModel : null;\n    }\n    setModel(model) {\n        const promise = model != null ? this.setModelIntoUi(model) : this.resetUiToDefaults();\n        return promise.then(() => {\n            this.updateUiVisibility();\n            // we set the model from the GUI, rather than the provided model,\n            // so the model is consistent, e.g. handling of null/undefined will be the same,\n            // or if model is case insensitive, then casing is removed.\n            this.applyModel('api');\n        });\n    }\n    onBtCancel(e) {\n        this.resetUiToActiveModel(this.getModel(), () => {\n            this.handleCancelEnd(e);\n        });\n    }\n    handleCancelEnd(e) {\n        if (this.providedFilterParams.closeOnApply) {\n            this.close(e);\n        }\n    }\n    resetUiToActiveModel(currentModel, afterUiUpdatedFunc) {\n        const afterAppliedFunc = () => {\n            this.onUiChanged(false, 'prevent');\n            afterUiUpdatedFunc === null || afterUiUpdatedFunc === void 0 ? void 0 : afterUiUpdatedFunc();\n        };\n        if (currentModel != null) {\n            this.setModelIntoUi(currentModel).then(afterAppliedFunc);\n        }\n        else {\n            this.resetUiToDefaults().then(afterAppliedFunc);\n        }\n    }\n    onBtClear() {\n        this.resetUiToDefaults().then(() => this.onUiChanged());\n    }\n    onBtReset() {\n        this.onBtClear();\n        this.onBtApply();\n    }\n    /**\n     * Applies changes made in the UI to the filter, and returns true if the model has changed.\n     */\n    applyModel(source = 'api') {\n        const newModel = this.getModelFromUi();\n        if (!this.isModelValid(newModel)) {\n            return false;\n        }\n        const previousModel = this.appliedModel;\n        this.appliedModel = newModel;\n        // models can be same if user pasted same content into text field, or maybe just changed the case\n        // and it's a case insensitive filter\n        return !this.areModelsEqual(previousModel, newModel);\n    }\n    isModelValid(model) {\n        return true;\n    }\n    onFormSubmit(e) {\n        e.preventDefault();\n    }\n    onBtApply(afterFloatingFilter = false, afterDataChange = false, e) {\n        // Prevent form submission\n        if (e) {\n            e.preventDefault();\n        }\n        if (this.applyModel(afterDataChange ? 'rowDataUpdated' : 'ui')) {\n            // the floating filter uses 'afterFloatingFilter' info, so it doesn't refresh after filter changed if change\n            // came from floating filter\n            this.providedFilterParams.filterChangedCallback({ afterFloatingFilter, afterDataChange });\n        }\n        const { closeOnApply } = this.providedFilterParams;\n        // only close if an apply button is visible, otherwise we'd be closing every time a change was made!\n        if (closeOnApply && this.applyActive && !afterFloatingFilter && !afterDataChange) {\n            this.close(e);\n        }\n    }\n    onNewRowsLoaded() {\n    }\n    close(e) {\n        if (!this.hidePopup) {\n            return;\n        }\n        const keyboardEvent = e;\n        const key = keyboardEvent && keyboardEvent.key;\n        let params;\n        if (key === 'Enter' || key === 'Space') {\n            params = { keyboardEvent };\n        }\n        this.hidePopup(params);\n        this.hidePopup = null;\n    }\n    /**\n     * By default, if the change came from a floating filter it will be applied immediately, otherwise if there is no\n     * apply button it will be applied after a debounce, otherwise it will not be applied at all. This behaviour can\n     * be adjusted by using the apply parameter.\n     */\n    onUiChanged(fromFloatingFilter = false, apply) {\n        this.updateUiVisibility();\n        this.providedFilterParams.filterModifiedCallback();\n        if (this.applyActive && !this.isReadOnly()) {\n            const isValid = this.isModelValid(this.getModelFromUi());\n            setDisabled(this.getRefElement('applyFilterButton'), !isValid);\n        }\n        if ((fromFloatingFilter && !apply) || apply === 'immediately') {\n            this.onBtApply(fromFloatingFilter);\n        }\n        else if ((!this.applyActive && !apply) || apply === 'debounce') {\n            this.onBtApplyDebounce();\n        }\n    }\n    afterGuiAttached(params) {\n        if (params) {\n            this.hidePopup = params.hidePopup;\n        }\n        this.refreshFilterResizer(params === null || params === void 0 ? void 0 : params.container);\n    }\n    refreshFilterResizer(containerType) {\n        // tool panel is scrollable, so don't need to size\n        if (!this.positionableFeature || containerType === 'toolPanel') {\n            return;\n        }\n        const isFloatingFilter = containerType === 'floatingFilter';\n        const { positionableFeature, gridOptionsService } = this;\n        if (isFloatingFilter) {\n            positionableFeature.restoreLastSize();\n            positionableFeature.setResizable(gridOptionsService.is('enableRtl')\n                ? { bottom: true, bottomLeft: true, left: true }\n                : { bottom: true, bottomRight: true, right: true });\n        }\n        else {\n            this.positionableFeature.removeSizeFromEl();\n            this.positionableFeature.setResizable(false);\n        }\n        this.positionableFeature.constrainSizeToAvailableHeight(true);\n    }\n    afterGuiDetached() {\n        this.checkApplyDebounce();\n        if (this.positionableFeature) {\n            this.positionableFeature.constrainSizeToAvailableHeight(false);\n        }\n    }\n    // static, as used by floating filter also\n    static getDebounceMs(params, debounceDefault) {\n        if (ProvidedFilter.isUseApplyButton(params)) {\n            if (params.debounceMs != null) {\n                console.warn('AG Grid: debounceMs is ignored when apply button is present');\n            }\n            return 0;\n        }\n        return params.debounceMs != null ? params.debounceMs : debounceDefault;\n    }\n    // static, as used by floating filter also\n    static isUseApplyButton(params) {\n        return !!params.buttons && params.buttons.indexOf('apply') >= 0;\n    }\n    destroy() {\n        const eGui = this.getGui();\n        if (eGui) {\n            eGui.removeEventListener('submit', this.onFormSubmit);\n        }\n        this.hidePopup = null;\n        if (this.positionableFeature) {\n            this.positionableFeature = this.destroyBean(this.positionableFeature);\n        }\n        super.destroy();\n    }\n    translate(key) {\n        const translate = this.localeService.getLocaleTextFunc();\n        return translate(key, DEFAULT_FILTER_LOCALE_TEXT[key]);\n    }\n    getCellValue(rowNode) {\n        const { api, colDef, column, columnApi, context } = this.providedFilterParams;\n        return this.providedFilterParams.valueGetter({\n            api,\n            colDef,\n            column,\n            columnApi,\n            context,\n            data: rowNode.data,\n            getValue: (field) => rowNode.data[field],\n            node: rowNode,\n        });\n    }\n    // override to control positionable feature\n    getPositionableElement() {\n        return this.eFilterBody;\n    }\n}\n__decorate$2n([\n    Autowired('rowModel')\n], ProvidedFilter.prototype, \"rowModel\", void 0);\n__decorate$2n([\n    RefSelector('eFilterBody')\n], ProvidedFilter.prototype, \"eFilterBody\", void 0);\n__decorate$2n([\n    PostConstruct\n], ProvidedFilter.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2m = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AgAbstractLabel extends Component {\n    constructor(config, template) {\n        super(template);\n        this.labelSeparator = '';\n        this.labelAlignment = 'left';\n        this.disabled = false;\n        this.label = '';\n        this.config = config || {};\n    }\n    postConstruct() {\n        this.addCssClass('ag-labeled');\n        this.eLabel.classList.add('ag-label');\n        const { labelSeparator, label, labelWidth, labelAlignment } = this.config;\n        if (labelSeparator != null) {\n            this.setLabelSeparator(labelSeparator);\n        }\n        if (label != null) {\n            this.setLabel(label);\n        }\n        if (labelWidth != null) {\n            this.setLabelWidth(labelWidth);\n        }\n        this.setLabelAlignment(labelAlignment || this.labelAlignment);\n        this.refreshLabel();\n    }\n    refreshLabel() {\n        clearElement(this.eLabel);\n        if (typeof this.label === 'string') {\n            this.eLabel.innerText = this.label + this.labelSeparator;\n        }\n        else if (this.label) {\n            this.eLabel.appendChild(this.label);\n        }\n        if (this.label === '') {\n            setDisplayed(this.eLabel, false);\n            setAriaRole(this.eLabel, 'presentation');\n        }\n        else {\n            setDisplayed(this.eLabel, true);\n            setAriaRole(this.eLabel, null);\n        }\n    }\n    setLabelSeparator(labelSeparator) {\n        if (this.labelSeparator === labelSeparator) {\n            return this;\n        }\n        this.labelSeparator = labelSeparator;\n        if (this.label != null) {\n            this.refreshLabel();\n        }\n        return this;\n    }\n    getLabelId() {\n        this.eLabel.id = this.eLabel.id || `ag-${this.getCompId()}-label`;\n        return this.eLabel.id;\n    }\n    getLabel() {\n        return this.label;\n    }\n    setLabel(label) {\n        if (this.label === label) {\n            return this;\n        }\n        this.label = label;\n        this.refreshLabel();\n        return this;\n    }\n    setLabelAlignment(alignment) {\n        const eGui = this.getGui();\n        const eGuiClassList = eGui.classList;\n        eGuiClassList.toggle('ag-label-align-left', alignment === 'left');\n        eGuiClassList.toggle('ag-label-align-right', alignment === 'right');\n        eGuiClassList.toggle('ag-label-align-top', alignment === 'top');\n        return this;\n    }\n    setLabelEllipsis(hasEllipsis) {\n        this.eLabel.classList.toggle('ag-label-ellipsis', hasEllipsis);\n        return this;\n    }\n    setLabelWidth(width) {\n        if (this.label == null) {\n            return this;\n        }\n        setElementWidth(this.eLabel, width);\n        return this;\n    }\n    setDisabled(disabled) {\n        disabled = !!disabled;\n        const element = this.getGui();\n        setDisabled(element, disabled);\n        element.classList.toggle('ag-disabled', disabled);\n        this.disabled = disabled;\n        return this;\n    }\n    isDisabled() {\n        return !!this.disabled;\n    }\n}\n__decorate$2m([\n    PostConstruct\n], AgAbstractLabel.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass AgAbstractField extends AgAbstractLabel {\n    constructor(config, template, className) {\n        super(config, template);\n        this.className = className;\n    }\n    postConstruct() {\n        super.postConstruct();\n        if (this.className) {\n            this.addCssClass(this.className);\n        }\n    }\n    onValueChange(callbackFn) {\n        this.addManagedListener(this, AgAbstractField.EVENT_CHANGED, () => callbackFn(this.getValue()));\n        return this;\n    }\n    getWidth() {\n        return this.getGui().clientWidth;\n    }\n    setWidth(width) {\n        setFixedWidth(this.getGui(), width);\n        return this;\n    }\n    getPreviousValue() {\n        return this.previousValue;\n    }\n    getValue() {\n        return this.value;\n    }\n    setValue(value, silent) {\n        if (this.value === value) {\n            return this;\n        }\n        this.previousValue = this.value;\n        this.value = value;\n        if (!silent) {\n            this.dispatchEvent({ type: AgAbstractField.EVENT_CHANGED });\n        }\n        return this;\n    }\n}\nAgAbstractField.EVENT_CHANGED = 'valueChange';\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2l = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AgPickerField extends AgAbstractField {\n    constructor(config, className, pickerIcon, ariaRole) {\n        super(config, \n        /* html */ `<div class=\"ag-picker-field\" role=\"presentation\">\n                <div ref=\"eLabel\"></div>\n                <div ref=\"eWrapper\"\n                    class=\"ag-wrapper ag-picker-field-wrapper\"\n                    tabIndex=\"-1\"\n                    aria-expanded=\"false\"\n                    ${ariaRole ? `role=\"${ariaRole}\"` : ''}\n                >\n                    <div ref=\"eDisplayField\" class=\"ag-picker-field-display\"></div>\n                    <div ref=\"eIcon\" class=\"ag-picker-field-icon\" aria-hidden=\"true\"></div>\n                </div>\n            </div>`, className);\n        this.pickerIcon = pickerIcon;\n        this.isPickerDisplayed = false;\n        this.isDestroyingPicker = false;\n        this.skipClick = false;\n    }\n    postConstruct() {\n        super.postConstruct();\n        const displayId = `ag-${this.getCompId()}-display`;\n        this.eDisplayField.setAttribute('id', displayId);\n        setAriaDescribedBy(this.eWrapper, displayId);\n        const clickHandler = () => {\n            if (this.skipClick) {\n                this.skipClick = false;\n                return;\n            }\n            if (this.isDisabled()) {\n                return;\n            }\n            this.pickerComponent = this.showPicker();\n        };\n        const eGui = this.getGui();\n        this.addManagedListener(eGui, 'mousedown', (e) => {\n            if (!this.skipClick &&\n                this.pickerComponent &&\n                this.pickerComponent.isAlive() &&\n                isVisible(this.pickerComponent.getGui()) &&\n                eGui.contains(e.target)) {\n                this.skipClick = true;\n            }\n        });\n        this.addManagedListener(eGui, 'keydown', (e) => {\n            switch (e.key) {\n                case KeyCode.UP:\n                case KeyCode.DOWN:\n                case KeyCode.ENTER:\n                case KeyCode.SPACE:\n                    clickHandler();\n                case KeyCode.ESCAPE:\n                    if (this.isPickerDisplayed) {\n                        e.preventDefault();\n                    }\n                    break;\n            }\n        });\n        this.addManagedListener(this.eWrapper, 'click', clickHandler);\n        this.addManagedListener(this.eLabel, 'click', clickHandler);\n        if (this.pickerIcon) {\n            const icon = createIconNoSpan(this.pickerIcon, this.gridOptionsService);\n            if (icon) {\n                this.eIcon.appendChild(icon);\n            }\n        }\n    }\n    refreshLabel() {\n        if (exists(this.getLabel())) {\n            setAriaLabelledBy(this.eWrapper, this.getLabelId());\n        }\n        else {\n            this.eWrapper.removeAttribute('aria-labelledby');\n        }\n        super.refreshLabel();\n    }\n    setAriaLabel(label) {\n        setAriaLabel(this.eWrapper, label);\n        return this;\n    }\n    setInputWidth(width) {\n        setElementWidth(this.eWrapper, width);\n        return this;\n    }\n    getFocusableElement() {\n        return this.eWrapper;\n    }\n}\n__decorate$2l([\n    RefSelector('eLabel')\n], AgPickerField.prototype, \"eLabel\", void 0);\n__decorate$2l([\n    RefSelector('eWrapper')\n], AgPickerField.prototype, \"eWrapper\", void 0);\n__decorate$2l([\n    RefSelector('eDisplayField')\n], AgPickerField.prototype, \"eDisplayField\", void 0);\n__decorate$2l([\n    RefSelector('eIcon')\n], AgPickerField.prototype, \"eIcon\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2k = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AgList extends Component {\n    constructor(cssIdentifier = 'default') {\n        super(/* html */ `<div class=\"ag-list ag-${cssIdentifier}-list\" role=\"listbox\"></div>`);\n        this.cssIdentifier = cssIdentifier;\n        this.options = [];\n        this.itemEls = [];\n    }\n    init() {\n        this.addManagedListener(this.getGui(), 'keydown', this.handleKeyDown.bind(this));\n    }\n    handleKeyDown(e) {\n        const key = e.key;\n        switch (key) {\n            case KeyCode.ENTER:\n                if (!this.highlightedEl) {\n                    this.setValue(this.getValue());\n                }\n                else {\n                    const pos = this.itemEls.indexOf(this.highlightedEl);\n                    this.setValueByIndex(pos);\n                }\n                break;\n            case KeyCode.DOWN:\n            case KeyCode.UP:\n                const isDown = key === KeyCode.DOWN;\n                let itemToHighlight;\n                e.preventDefault();\n                if (!this.highlightedEl) {\n                    itemToHighlight = this.itemEls[isDown ? 0 : this.itemEls.length - 1];\n                }\n                else {\n                    const currentIdx = this.itemEls.indexOf(this.highlightedEl);\n                    let nextPos = currentIdx + (isDown ? 1 : -1);\n                    nextPos = Math.min(Math.max(nextPos, 0), this.itemEls.length - 1);\n                    itemToHighlight = this.itemEls[nextPos];\n                }\n                this.highlightItem(itemToHighlight);\n                break;\n        }\n    }\n    addOptions(listOptions) {\n        listOptions.forEach(listOption => this.addOption(listOption));\n        return this;\n    }\n    addOption(listOption) {\n        const { value, text } = listOption;\n        const sanitisedText = escapeString(text || value);\n        this.options.push({ value, text: sanitisedText });\n        this.renderOption(value, sanitisedText);\n        this.updateIndices();\n        return this;\n    }\n    updateIndices() {\n        const options = this.getGui().querySelectorAll('.ag-list-item');\n        options.forEach((option, idx) => {\n            setAriaPosInSet(option, idx + 1);\n            setAriaSetSize(option, options.length);\n        });\n    }\n    renderOption(value, text) {\n        const itemEl = document.createElement('div');\n        setAriaRole(itemEl, 'option');\n        itemEl.classList.add('ag-list-item', `ag-${this.cssIdentifier}-list-item`);\n        itemEl.innerHTML = `<span>${text}</span>`;\n        itemEl.tabIndex = -1;\n        this.itemEls.push(itemEl);\n        this.addManagedListener(itemEl, 'mouseover', () => this.highlightItem(itemEl));\n        this.addManagedListener(itemEl, 'mouseleave', () => this.clearHighlighted());\n        this.addManagedListener(itemEl, 'click', () => this.setValue(value));\n        this.getGui().appendChild(itemEl);\n    }\n    setValue(value, silent) {\n        if (this.value === value) {\n            this.fireItemSelected();\n            return this;\n        }\n        if (value == null) {\n            this.reset();\n            return this;\n        }\n        const idx = this.options.findIndex(option => option.value === value);\n        if (idx !== -1) {\n            const option = this.options[idx];\n            this.value = option.value;\n            this.displayValue = option.text != null ? option.text : option.value;\n            this.highlightItem(this.itemEls[idx]);\n            if (!silent) {\n                this.fireChangeEvent();\n            }\n        }\n        return this;\n    }\n    setValueByIndex(idx) {\n        return this.setValue(this.options[idx].value);\n    }\n    getValue() {\n        return this.value;\n    }\n    getDisplayValue() {\n        return this.displayValue;\n    }\n    refreshHighlighted() {\n        this.clearHighlighted();\n        const idx = this.options.findIndex(option => option.value === this.value);\n        if (idx !== -1) {\n            this.highlightItem(this.itemEls[idx]);\n        }\n    }\n    reset() {\n        this.value = null;\n        this.displayValue = null;\n        this.clearHighlighted();\n        this.fireChangeEvent();\n    }\n    highlightItem(el) {\n        if (!el.offsetParent) {\n            return;\n        }\n        this.clearHighlighted();\n        this.highlightedEl = el;\n        this.highlightedEl.classList.add(AgList.ACTIVE_CLASS);\n        setAriaSelected(this.highlightedEl, true);\n        this.highlightedEl.focus();\n    }\n    clearHighlighted() {\n        if (!this.highlightedEl || !this.highlightedEl.offsetParent) {\n            return;\n        }\n        this.highlightedEl.classList.remove(AgList.ACTIVE_CLASS);\n        setAriaSelected(this.highlightedEl, false);\n        this.highlightedEl = null;\n    }\n    fireChangeEvent() {\n        this.dispatchEvent({ type: AgAbstractField.EVENT_CHANGED });\n        this.fireItemSelected();\n    }\n    fireItemSelected() {\n        this.dispatchEvent({ type: AgList.EVENT_ITEM_SELECTED });\n    }\n}\nAgList.EVENT_ITEM_SELECTED = 'selectedItem';\nAgList.ACTIVE_CLASS = 'ag-active-item';\n__decorate$2k([\n    PostConstruct\n], AgList.prototype, \"init\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2j = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AgSelect extends AgPickerField {\n    constructor(config) {\n        super(config, 'ag-select', 'smallDown', 'listbox');\n    }\n    init() {\n        this.listComponent = this.createBean(new AgList('select'));\n        this.listComponent.setParentComponent(this);\n        this.eWrapper.tabIndex = 0;\n        this.listComponent.addManagedListener(this.listComponent, AgList.EVENT_ITEM_SELECTED, () => {\n            if (this.hideList) {\n                this.hideList();\n            }\n            this.dispatchEvent({ type: AgSelect.EVENT_ITEM_SELECTED });\n        });\n        this.listComponent.addManagedListener(this.listComponent, AgAbstractField.EVENT_CHANGED, () => {\n            this.setValue(this.listComponent.getValue(), false, true);\n            if (this.hideList) {\n                this.hideList();\n            }\n        });\n    }\n    showPicker() {\n        const listGui = this.listComponent.getGui();\n        const eDocument = this.gridOptionsService.getDocument();\n        const destroyMouseWheelFunc = this.addManagedListener(eDocument.body, 'wheel', (e) => {\n            if (!listGui.contains(e.target) && this.hideList) {\n                this.hideList();\n            }\n        });\n        const destroyFocusOutFunc = this.addManagedListener(listGui, 'focusout', (e) => {\n            if (!listGui.contains(e.relatedTarget) && this.hideList) {\n                this.hideList();\n            }\n        });\n        const translate = this.localeService.getLocaleTextFunc();\n        const addPopupRes = this.popupService.addPopup({\n            modal: true,\n            eChild: listGui,\n            closeOnEsc: true,\n            closedCallback: () => {\n                this.hideList = null;\n                this.isPickerDisplayed = false;\n                destroyFocusOutFunc();\n                destroyMouseWheelFunc();\n                if (this.isAlive()) {\n                    setAriaExpanded(this.eWrapper, false);\n                    this.getFocusableElement().focus();\n                }\n            },\n            ariaLabel: translate('ariaLabelSelectField', 'Select Field')\n        });\n        if (addPopupRes) {\n            this.hideList = addPopupRes.hideFunc;\n        }\n        this.isPickerDisplayed = true;\n        setElementWidth(listGui, getAbsoluteWidth(this.eWrapper));\n        setAriaExpanded(this.eWrapper, true);\n        listGui.style.maxHeight = getInnerHeight(this.popupService.getPopupParent()) + 'px';\n        listGui.style.position = 'absolute';\n        this.popupService.positionPopupByComponent({\n            type: 'ag-list',\n            eventSource: this.eWrapper,\n            ePopup: listGui,\n            position: 'under',\n            keepWithinBounds: true\n        });\n        this.listComponent.refreshHighlighted();\n        return this.listComponent;\n    }\n    addOptions(options) {\n        options.forEach(option => this.addOption(option));\n        return this;\n    }\n    addOption(option) {\n        this.listComponent.addOption(option);\n        return this;\n    }\n    setValue(value, silent, fromPicker) {\n        if (this.value === value) {\n            return this;\n        }\n        if (!fromPicker) {\n            this.listComponent.setValue(value, true);\n        }\n        const newValue = this.listComponent.getValue();\n        if (newValue === this.getValue()) {\n            return this;\n        }\n        this.eDisplayField.innerHTML = this.listComponent.getDisplayValue();\n        return super.setValue(value, silent);\n    }\n    destroy() {\n        if (this.hideList) {\n            this.hideList();\n        }\n        this.destroyBean(this.listComponent);\n        super.destroy();\n    }\n}\nAgSelect.EVENT_ITEM_SELECTED = 'selectedItem';\n__decorate$2j([\n    Autowired('popupService')\n], AgSelect.prototype, \"popupService\", void 0);\n__decorate$2j([\n    PostConstruct\n], AgSelect.prototype, \"init\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2i = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AgAbstractInputField extends AgAbstractField {\n    constructor(config, className, inputType = 'text', displayFieldTag = 'input') {\n        super(config, /* html */ `\n            <div role=\"presentation\">\n                <div ref=\"eLabel\" class=\"ag-input-field-label\"></div>\n                <div ref=\"eWrapper\" class=\"ag-wrapper ag-input-wrapper\" role=\"presentation\">\n                    <${displayFieldTag} ref=\"eInput\" class=\"ag-input-field-input\"></${displayFieldTag}>\n                </div>\n            </div>`, className);\n        this.inputType = inputType;\n        this.displayFieldTag = displayFieldTag;\n    }\n    postConstruct() {\n        super.postConstruct();\n        this.setInputType();\n        this.eLabel.classList.add(`${this.className}-label`);\n        this.eWrapper.classList.add(`${this.className}-input-wrapper`);\n        this.eInput.classList.add(`${this.className}-input`);\n        this.addCssClass('ag-input-field');\n        this.eInput.id = this.eInput.id || `ag-${this.getCompId()}-input`;\n        const { width, value } = this.config;\n        if (width != null) {\n            this.setWidth(width);\n        }\n        if (value != null) {\n            this.setValue(value);\n        }\n        this.addInputListeners();\n    }\n    refreshLabel() {\n        if (exists(this.getLabel())) {\n            setAriaLabelledBy(this.eInput, this.getLabelId());\n        }\n        else {\n            this.eInput.removeAttribute('aria-labelledby');\n        }\n        super.refreshLabel();\n    }\n    addInputListeners() {\n        this.addManagedListener(this.eInput, 'input', e => this.setValue(e.target.value));\n    }\n    setInputType() {\n        if (this.displayFieldTag === 'input') {\n            this.eInput.setAttribute('type', this.inputType);\n        }\n    }\n    getInputElement() {\n        return this.eInput;\n    }\n    setInputWidth(width) {\n        setElementWidth(this.eWrapper, width);\n        return this;\n    }\n    setInputName(name) {\n        this.getInputElement().setAttribute('name', name);\n        return this;\n    }\n    getFocusableElement() {\n        return this.eInput;\n    }\n    setMaxLength(length) {\n        const eInput = this.eInput;\n        eInput.maxLength = length;\n        return this;\n    }\n    setInputPlaceholder(placeholder) {\n        addOrRemoveAttribute(this.eInput, 'placeholder', placeholder);\n        return this;\n    }\n    setInputAriaLabel(label) {\n        setAriaLabel(this.eInput, label);\n        return this;\n    }\n    setDisabled(disabled) {\n        setDisabled(this.eInput, disabled);\n        return super.setDisabled(disabled);\n    }\n}\n__decorate$2i([\n    RefSelector('eLabel')\n], AgAbstractInputField.prototype, \"eLabel\", void 0);\n__decorate$2i([\n    RefSelector('eWrapper')\n], AgAbstractInputField.prototype, \"eWrapper\", void 0);\n__decorate$2i([\n    RefSelector('eInput')\n], AgAbstractInputField.prototype, \"eInput\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass AgCheckbox extends AgAbstractInputField {\n    constructor(config, className = 'ag-checkbox', inputType = 'checkbox') {\n        super(config, className, inputType);\n        this.labelAlignment = 'right';\n        this.selected = false;\n        this.readOnly = false;\n        this.passive = false;\n    }\n    addInputListeners() {\n        this.addManagedListener(this.eInput, 'click', this.onCheckboxClick.bind(this));\n        this.addManagedListener(this.eLabel, 'click', this.toggle.bind(this));\n    }\n    getNextValue() {\n        return this.selected === undefined ? true : !this.selected;\n    }\n    setPassive(passive) {\n        this.passive = passive;\n    }\n    isReadOnly() {\n        return this.readOnly;\n    }\n    setReadOnly(readOnly) {\n        this.eWrapper.classList.toggle('ag-disabled', readOnly);\n        this.eInput.disabled = readOnly;\n        this.readOnly = readOnly;\n    }\n    setDisabled(disabled) {\n        this.eWrapper.classList.toggle('ag-disabled', disabled);\n        return super.setDisabled(disabled);\n    }\n    toggle() {\n        if (this.eInput.disabled) {\n            return;\n        }\n        const previousValue = this.isSelected();\n        const nextValue = this.getNextValue();\n        if (this.passive) {\n            this.dispatchChange(nextValue, previousValue);\n        }\n        else {\n            this.setValue(nextValue);\n        }\n    }\n    getValue() {\n        return this.isSelected();\n    }\n    setValue(value, silent) {\n        this.refreshSelectedClass(value);\n        this.setSelected(value, silent);\n        return this;\n    }\n    setName(name) {\n        const input = this.getInputElement();\n        input.name = name;\n        return this;\n    }\n    isSelected() {\n        return this.selected;\n    }\n    setSelected(selected, silent) {\n        if (this.isSelected() === selected) {\n            return;\n        }\n        this.previousValue = this.isSelected();\n        selected = this.selected = typeof selected === 'boolean' ? selected : undefined;\n        this.eInput.checked = selected;\n        this.eInput.indeterminate = selected === undefined;\n        if (!silent) {\n            this.dispatchChange(this.selected, this.previousValue);\n        }\n    }\n    dispatchChange(selected, previousValue, event) {\n        this.dispatchEvent({ type: AgCheckbox.EVENT_CHANGED, selected, previousValue, event });\n        const input = this.getInputElement();\n        const checkboxChangedEvent = {\n            type: Events.EVENT_CHECKBOX_CHANGED,\n            id: input.id,\n            name: input.name,\n            selected,\n            previousValue\n        };\n        this.eventService.dispatchEvent(checkboxChangedEvent);\n    }\n    onCheckboxClick(e) {\n        if (this.passive || this.eInput.disabled) {\n            return;\n        }\n        const previousValue = this.isSelected();\n        const selected = this.selected = e.target.checked;\n        this.refreshSelectedClass(selected);\n        this.dispatchChange(selected, previousValue, e);\n    }\n    refreshSelectedClass(value) {\n        this.eWrapper.classList.toggle('ag-checked', value === true);\n        this.eWrapper.classList.toggle('ag-indeterminate', value == null);\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass AgRadioButton extends AgCheckbox {\n    constructor(config) {\n        super(config, 'ag-radio-button', 'radio');\n    }\n    isSelected() {\n        return this.eInput.checked;\n    }\n    toggle() {\n        if (this.eInput.disabled) {\n            return;\n        }\n        // do not allow an active radio button to be deselected\n        if (!this.isSelected()) {\n            this.setValue(true);\n        }\n    }\n    addInputListeners() {\n        super.addInputListeners();\n        this.addManagedListener(this.eventService, Events.EVENT_CHECKBOX_CHANGED, this.onChange.bind(this));\n    }\n    /**\n     * This ensures that if another radio button in the same named group is selected, we deselect this radio button.\n     * By default the browser does this for you, but we are managing classes ourselves in order to ensure input\n     * elements are styled correctly in IE11, and the DOM 'changed' event is only fired when a button is selected,\n     * not deselected, so we need to use our own event.\n     */\n    onChange(event) {\n        if (event.selected &&\n            event.name &&\n            this.eInput.name &&\n            this.eInput.name === event.name &&\n            event.id &&\n            this.eInput.id !== event.id) {\n            this.setValue(false, true);\n        }\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass SimpleFilterModelFormatter {\n    constructor(localeService, optionsFactory) {\n        this.localeService = localeService;\n        this.optionsFactory = optionsFactory;\n    }\n    // used by:\n    // 1) NumberFloatingFilter & TextFloatingFilter: Always, for both when editable and read only.\n    // 2) DateFloatingFilter: Only when read only (as we show text rather than a date picker when read only)\n    getModelAsString(model) {\n        if (!model) {\n            return null;\n        }\n        const isCombined = model.operator != null;\n        const translate = this.localeService.getLocaleTextFunc();\n        if (isCombined) {\n            const combinedModel = model;\n            let { conditions } = combinedModel;\n            if (!conditions) {\n                const { condition1, condition2 } = combinedModel;\n                conditions = [condition1, condition2];\n            }\n            const customOptions = conditions.map(condition => this.getModelAsString(condition));\n            const joinOperatorTranslateKey = combinedModel.operator === 'AND' ? 'andCondition' : 'orCondition';\n            return customOptions.join(` ${translate(joinOperatorTranslateKey, DEFAULT_FILTER_LOCALE_TEXT[joinOperatorTranslateKey])} `);\n        }\n        else if (model.type === SimpleFilter.BLANK || model.type === SimpleFilter.NOT_BLANK) {\n            return translate(model.type, model.type);\n        }\n        else {\n            const condition = model;\n            const customOption = this.optionsFactory.getCustomOption(condition.type);\n            // For custom filter options we display the Name of the filter instead\n            // of displaying the `from` value, as it wouldn't be relevant\n            const { displayKey, displayName, numberOfInputs } = customOption || {};\n            if (displayKey && displayName && numberOfInputs === 0) {\n                translate(displayKey, displayName);\n                return displayName;\n            }\n            return this.conditionToString(condition, customOption);\n        }\n    }\n}\n/**\n * Every filter with a dropdown where the user can specify a comparing type against the filter values.\n *\n * @param M type of filter-model managed by the concrete sub-class that extends this type\n * @param V type of value managed by the concrete sub-class that extends this type\n * @param E type of UI element used for collecting user-input\n */\nclass SimpleFilter extends ProvidedFilter {\n    constructor() {\n        super(...arguments);\n        this.eTypes = [];\n        this.eJoinOperatorPanels = [];\n        this.eJoinOperatorsAnd = [];\n        this.eJoinOperatorsOr = [];\n        this.eConditionBodies = [];\n        this.listener = () => this.onUiChanged();\n        this.lastUiCompletePosition = null;\n        this.joinOperatorId = 0;\n    }\n    getNumberOfInputs(type) {\n        const customOpts = this.optionsFactory.getCustomOption(type);\n        if (customOpts) {\n            const { numberOfInputs } = customOpts;\n            return numberOfInputs != null ? numberOfInputs : 1;\n        }\n        const zeroInputTypes = [\n            SimpleFilter.EMPTY, SimpleFilter.NOT_BLANK, SimpleFilter.BLANK,\n        ];\n        if (type && zeroInputTypes.indexOf(type) >= 0) {\n            return 0;\n        }\n        else if (type === SimpleFilter.IN_RANGE) {\n            return 2;\n        }\n        return 1;\n    }\n    // floating filter calls this when user applies filter from floating filter\n    onFloatingFilterChanged(type, value) {\n        this.setTypeFromFloatingFilter(type);\n        this.setValueFromFloatingFilter(value);\n        this.onUiChanged(true);\n    }\n    setTypeFromFloatingFilter(type) {\n        this.eTypes.forEach((eType, position) => {\n            if (position === 0) {\n                eType.setValue(type, true);\n            }\n            else {\n                eType.setValue(this.optionsFactory.getDefaultOption(), true);\n            }\n        });\n    }\n    getModelFromUi() {\n        const conditions = this.getUiCompleteConditions();\n        if (conditions.length === 0) {\n            return null;\n        }\n        if (this.maxNumConditions > 1 && conditions.length > 1) {\n            return {\n                filterType: this.getFilterType(),\n                operator: this.getJoinOperator(),\n                condition1: conditions[0],\n                condition2: conditions[1],\n                conditions\n            };\n        }\n        return conditions[0];\n    }\n    getConditionTypes() {\n        return this.eTypes.map(eType => eType.getValue());\n    }\n    getConditionType(position) {\n        return this.eTypes[position].getValue();\n    }\n    getJoinOperator() {\n        if (this.eJoinOperatorsOr.length === 0) {\n            return this.defaultJoinOperator;\n        }\n        return this.eJoinOperatorsOr[0].getValue() === true ? 'OR' : 'AND';\n    }\n    areModelsEqual(a, b) {\n        // both are missing\n        if (!a && !b) {\n            return true;\n        }\n        // one is missing, other present\n        if ((!a && b) || (a && !b)) {\n            return false;\n        }\n        // one is combined, the other is not\n        const aIsSimple = !a.operator;\n        const bIsSimple = !b.operator;\n        const oneSimpleOneCombined = (!aIsSimple && bIsSimple) || (aIsSimple && !bIsSimple);\n        if (oneSimpleOneCombined) {\n            return false;\n        }\n        let res;\n        // otherwise both present, so compare\n        if (aIsSimple) {\n            const aSimple = a;\n            const bSimple = b;\n            res = this.areSimpleModelsEqual(aSimple, bSimple);\n        }\n        else {\n            const aCombined = a;\n            const bCombined = b;\n            res = aCombined.operator === bCombined.operator\n                && areEqual(aCombined.conditions, bCombined.conditions, (aModel, bModel) => this.areSimpleModelsEqual(aModel, bModel));\n        }\n        return res;\n    }\n    setModelIntoUi(model) {\n        const isCombined = model.operator;\n        if (isCombined) {\n            let combinedModel = model;\n            if (!combinedModel.conditions) {\n                combinedModel.conditions = [\n                    combinedModel.condition1,\n                    combinedModel.condition2\n                ];\n            }\n            const numConditions = this.validateAndUpdateConditions(combinedModel.conditions);\n            const numPrevConditions = this.getNumConditions();\n            if (numConditions < numPrevConditions) {\n                this.removeConditionsAndOperators(numConditions);\n            }\n            else if (numConditions > numPrevConditions) {\n                for (let i = numPrevConditions; i < numConditions; i++) {\n                    this.createJoinOperatorPanel();\n                    this.createOption();\n                }\n            }\n            const orChecked = combinedModel.operator === 'OR';\n            this.eJoinOperatorsAnd.forEach(eJoinOperatorAnd => eJoinOperatorAnd.setValue(!orChecked, true));\n            this.eJoinOperatorsOr.forEach(eJoinOperatorOr => eJoinOperatorOr.setValue(orChecked, true));\n            combinedModel.conditions.forEach((condition, position) => {\n                this.eTypes[position].setValue(condition.type, true);\n                this.setConditionIntoUi(condition, position);\n            });\n        }\n        else {\n            const simpleModel = model;\n            if (this.getNumConditions() > 1) {\n                this.removeConditionsAndOperators(1);\n            }\n            this.eTypes[0].setValue(simpleModel.type, true);\n            this.setConditionIntoUi(simpleModel, 0);\n        }\n        this.lastUiCompletePosition = this.getNumConditions() - 1;\n        this.createMissingConditionsAndOperators();\n        this.onUiChanged();\n        return AgPromise.resolve();\n    }\n    validateAndUpdateConditions(conditions) {\n        let numConditions = conditions.length;\n        if (numConditions > this.maxNumConditions) {\n            conditions.splice(this.maxNumConditions);\n            doOnce(() => console.warn('AG Grid: Filter Model contains more conditions than \"filterParams.maxNumConditions\". Additional conditions have been ignored.'), 'simpleFilterSetModelMaxNumConditions');\n            numConditions = this.maxNumConditions;\n        }\n        return numConditions;\n    }\n    doesFilterPass(params) {\n        var _a;\n        const model = this.getModel();\n        if (model == null) {\n            return true;\n        }\n        const { operator } = model;\n        const models = [];\n        if (operator) {\n            const combinedModel = model;\n            models.push(...((_a = combinedModel.conditions) !== null && _a !== void 0 ? _a : []));\n        }\n        else {\n            models.push(model);\n        }\n        const combineFunction = operator && operator === 'OR' ? 'some' : 'every';\n        return models[combineFunction](m => this.individualConditionPasses(params, m));\n    }\n    setParams(params) {\n        super.setParams(params);\n        this.setNumConditions(params);\n        this.defaultJoinOperator = this.getDefaultJoinOperator(params.defaultJoinOperator);\n        this.filterPlaceholder = params.filterPlaceholder;\n        this.optionsFactory = new OptionsFactory();\n        this.optionsFactory.init(params, this.getDefaultFilterOptions());\n        this.createFilterListOptions();\n        this.createOption();\n        this.createMissingConditionsAndOperators();\n    }\n    setNumConditions(params) {\n        var _a, _b;\n        if (params.suppressAndOrCondition != null) {\n            doOnce(() => console.warn('AG Grid: Since v29.2 \"filterParams.suppressAndOrCondition\" is deprecated. Use \"filterParams.maxNumConditions = 1\" instead.'), 'simpleFilterSuppressAndOrCondition');\n        }\n        if (params.alwaysShowBothConditions != null) {\n            doOnce(() => console.warn('AG Grid: Since v29.2 \"filterParams.alwaysShowBothConditions\" is deprecated. Use \"filterParams.numAlwaysVisibleConditions = 2\" instead.'), 'simpleFilterAlwaysShowBothConditions');\n        }\n        this.maxNumConditions = (_a = params.maxNumConditions) !== null && _a !== void 0 ? _a : (params.suppressAndOrCondition ? 1 : 2);\n        if (this.maxNumConditions < 1) {\n            doOnce(() => console.warn('AG Grid: \"filterParams.maxNumConditions\" must be greater than or equal to zero.'), 'simpleFilterMaxNumConditions');\n            this.maxNumConditions = 1;\n        }\n        this.numAlwaysVisibleConditions = (_b = params.numAlwaysVisibleConditions) !== null && _b !== void 0 ? _b : (params.alwaysShowBothConditions ? 2 : 1);\n        if (this.numAlwaysVisibleConditions < 1) {\n            doOnce(() => console.warn('AG Grid: \"filterParams.numAlwaysVisibleConditions\" must be greater than or equal to zero.'), 'simpleFilterNumAlwaysVisibleConditions');\n            this.numAlwaysVisibleConditions = 1;\n        }\n        if (this.numAlwaysVisibleConditions > this.maxNumConditions) {\n            doOnce(() => console.warn('AG Grid: \"filterParams.numAlwaysVisibleConditions\" cannot be greater than \"filterParams.maxNumConditions\".'), 'simpleFilterNumAlwaysVisibleGreaterThanMaxNumConditions');\n            this.numAlwaysVisibleConditions = this.maxNumConditions;\n        }\n    }\n    createOption() {\n        const eType = this.createManagedBean(new AgSelect());\n        this.eTypes.push(eType);\n        eType.addCssClass('ag-filter-select');\n        this.eFilterBody.appendChild(eType.getGui());\n        const eConditionBody = this.createValueElement();\n        this.eConditionBodies.push(eConditionBody);\n        this.eFilterBody.appendChild(eConditionBody);\n        this.putOptionsIntoDropdown(eType);\n        this.resetType(eType);\n        const position = this.getNumConditions() - 1;\n        this.forEachPositionInput(position, (element) => this.resetInput(element));\n        this.addChangedListeners(eType, position);\n    }\n    createJoinOperatorPanel() {\n        const eJoinOperatorPanel = document.createElement('div');\n        this.eJoinOperatorPanels.push(eJoinOperatorPanel);\n        eJoinOperatorPanel.classList.add('ag-filter-condition');\n        const eJoinOperatorAnd = this.createJoinOperator(this.eJoinOperatorsAnd, eJoinOperatorPanel, 'and');\n        const eJoinOperatorOr = this.createJoinOperator(this.eJoinOperatorsOr, eJoinOperatorPanel, 'or');\n        this.eFilterBody.appendChild(eJoinOperatorPanel);\n        const index = this.eJoinOperatorPanels.length - 1;\n        const uniqueGroupId = this.joinOperatorId++;\n        this.resetJoinOperatorAnd(eJoinOperatorAnd, index, uniqueGroupId);\n        this.resetJoinOperatorOr(eJoinOperatorOr, index, uniqueGroupId);\n        if (!this.isReadOnly()) {\n            eJoinOperatorAnd.onValueChange(this.listener);\n            eJoinOperatorOr.onValueChange(this.listener);\n        }\n    }\n    createJoinOperator(eJoinOperators, eJoinOperatorPanel, andOr) {\n        const eJoinOperator = this.createManagedBean(new AgRadioButton());\n        eJoinOperators.push(eJoinOperator);\n        eJoinOperator.addCssClass('ag-filter-condition-operator');\n        eJoinOperator.addCssClass(`ag-filter-condition-operator-${andOr}`);\n        eJoinOperatorPanel.appendChild(eJoinOperator.getGui());\n        return eJoinOperator;\n    }\n    getDefaultJoinOperator(defaultJoinOperator) {\n        return defaultJoinOperator === 'AND' || defaultJoinOperator === 'OR' ? defaultJoinOperator : 'AND';\n    }\n    createFilterListOptions() {\n        const filterOptions = this.optionsFactory.getFilterOptions();\n        this.filterListOptions = filterOptions.map(option => typeof option === 'string' ?\n            this.createBoilerplateListOption(option) :\n            this.createCustomListOption(option));\n    }\n    putOptionsIntoDropdown(eType) {\n        // Add specified options to condition drop-down.\n        this.filterListOptions.forEach(listOption => {\n            eType.addOption(listOption);\n        });\n        // Make drop-downs read-only if there is only one option.\n        eType.setDisabled(this.filterListOptions.length <= 1);\n    }\n    createBoilerplateListOption(option) {\n        return { value: option, text: this.translate(option) };\n    }\n    createCustomListOption(option) {\n        const { displayKey } = option;\n        const customOption = this.optionsFactory.getCustomOption(option.displayKey);\n        return {\n            value: displayKey,\n            text: customOption ?\n                this.localeService.getLocaleTextFunc()(customOption.displayKey, customOption.displayName) :\n                this.translate(displayKey),\n        };\n    }\n    /**\n     * @deprecated As of v29.2 filters can have more than two conditions. Check `colDef.filterParams.maxNumConditions` instead.\n     */\n    isAllowTwoConditions() {\n        return this.maxNumConditions >= 2;\n    }\n    createBodyTemplate() {\n        // created dynamically\n        return '';\n    }\n    getCssIdentifier() {\n        return 'simple-filter';\n    }\n    updateUiVisibility() {\n        const joinOperator = this.getJoinOperator();\n        this.updateNumConditions();\n        // from here, the number of elements in all the collections is correct, so can just update the values/statuses\n        this.updateConditionStatusesAndValues(this.lastUiCompletePosition, joinOperator);\n    }\n    updateNumConditions() {\n        var _a;\n        // Collection sizes are already correct if updated via API, so only need to handle UI updates here\n        let lastUiCompletePosition = -1;\n        let areAllConditionsUiComplete = true;\n        for (let position = 0; position < this.getNumConditions(); position++) {\n            if (this.isConditionUiComplete(position)) {\n                lastUiCompletePosition = position;\n            }\n            else {\n                areAllConditionsUiComplete = false;\n            }\n        }\n        if (this.shouldAddNewConditionAtEnd(areAllConditionsUiComplete)) {\n            this.createJoinOperatorPanel();\n            this.createOption();\n        }\n        else {\n            const activePosition = (_a = this.lastUiCompletePosition) !== null && _a !== void 0 ? _a : this.getNumConditions() - 2;\n            if (lastUiCompletePosition < activePosition) {\n                // remove any incomplete conditions at the end, excluding the active position\n                this.removeConditionsAndOperators(activePosition + 1);\n                const removeStartPosition = lastUiCompletePosition + 1;\n                const numConditionsToRemove = activePosition - removeStartPosition;\n                if (numConditionsToRemove > 0) {\n                    this.removeConditionsAndOperators(removeStartPosition, numConditionsToRemove);\n                }\n                this.createMissingConditionsAndOperators();\n            }\n        }\n        this.lastUiCompletePosition = lastUiCompletePosition;\n    }\n    updateConditionStatusesAndValues(lastUiCompletePosition, joinOperator) {\n        this.eTypes.forEach((eType, position) => {\n            const disabled = this.isConditionDisabled(position, lastUiCompletePosition);\n            eType.setDisabled(disabled || this.filterListOptions.length <= 1);\n            if (position === 1) {\n                setDisabled(this.eJoinOperatorPanels[0], disabled);\n                this.eJoinOperatorsAnd[0].setDisabled(disabled);\n                this.eJoinOperatorsOr[0].setDisabled(disabled);\n            }\n        });\n        this.eConditionBodies.forEach((element, index) => {\n            setDisplayed(element, this.isConditionBodyVisible(index));\n        });\n        const orChecked = (joinOperator !== null && joinOperator !== void 0 ? joinOperator : this.getJoinOperator()) === 'OR';\n        this.eJoinOperatorsAnd.forEach((eJoinOperatorAnd, index) => {\n            eJoinOperatorAnd.setValue(!orChecked, true);\n        });\n        this.eJoinOperatorsOr.forEach((eJoinOperatorOr, index) => {\n            eJoinOperatorOr.setValue(orChecked, true);\n        });\n        this.forEachInput((element, index, position, numberOfInputs) => {\n            this.setElementDisplayed(element, index < numberOfInputs);\n            this.setElementDisabled(element, this.isConditionDisabled(position, lastUiCompletePosition));\n        });\n        this.resetPlaceholder();\n    }\n    shouldAddNewConditionAtEnd(areAllConditionsUiComplete) {\n        return areAllConditionsUiComplete && this.getNumConditions() < this.maxNumConditions && !this.isReadOnly();\n    }\n    removeConditionsAndOperators(startPosition, deleteCount) {\n        if (startPosition >= this.getNumConditions()) {\n            return;\n        }\n        this.removeComponents(this.eTypes, startPosition, deleteCount);\n        this.removeElements(this.eConditionBodies, startPosition, deleteCount);\n        this.removeValueElements(startPosition, deleteCount);\n        const joinOperatorIndex = Math.max(startPosition - 1, 0);\n        this.removeElements(this.eJoinOperatorPanels, joinOperatorIndex, deleteCount);\n        this.removeComponents(this.eJoinOperatorsAnd, joinOperatorIndex, deleteCount);\n        this.removeComponents(this.eJoinOperatorsOr, joinOperatorIndex, deleteCount);\n    }\n    removeElements(elements, startPosition, deleteCount) {\n        const removedElements = this.removeItems(elements, startPosition, deleteCount);\n        removedElements.forEach(element => removeFromParent(element));\n    }\n    removeComponents(components, startPosition, deleteCount) {\n        const removedComponents = this.removeItems(components, startPosition, deleteCount);\n        removedComponents.forEach(comp => {\n            removeFromParent(comp.getGui());\n            this.destroyBean(comp);\n        });\n    }\n    removeItems(items, startPosition, deleteCount) {\n        return deleteCount == null ? items.splice(startPosition) : items.splice(startPosition, deleteCount);\n    }\n    afterGuiAttached(params) {\n        super.afterGuiAttached(params);\n        this.resetPlaceholder();\n        if (!params || (!params.suppressFocus && !this.isReadOnly())) {\n            const firstInput = this.getInputs(0)[0];\n            if (!firstInput) {\n                return;\n            }\n            if (firstInput instanceof AgAbstractInputField) {\n                firstInput.getInputElement().focus();\n            }\n        }\n    }\n    afterGuiDetached() {\n        super.afterGuiDetached();\n        const appliedModel = this.getModel();\n        if (!this.areModelsEqual(appliedModel, this.getModelFromUi()) || this.hasInvalidInputs()) {\n            this.resetUiToActiveModel(appliedModel);\n        }\n        // remove incomplete positions\n        let lastUiCompletePosition = -1;\n        // as we remove incomplete positions, the last UI complete position will change\n        let updatedLastUiCompletePosition = -1;\n        let conditionsRemoved = false;\n        const joinOperator = this.getJoinOperator();\n        for (let position = this.getNumConditions() - 1; position >= 0; position--) {\n            if (this.isConditionUiComplete(position)) {\n                if (lastUiCompletePosition === -1) {\n                    lastUiCompletePosition = position;\n                    updatedLastUiCompletePosition = position;\n                }\n            }\n            else {\n                const shouldRemovePositionAtEnd = position >= this.numAlwaysVisibleConditions && !this.isConditionUiComplete(position - 1);\n                const positionBeforeLastUiCompletePosition = position < lastUiCompletePosition;\n                if (shouldRemovePositionAtEnd || positionBeforeLastUiCompletePosition) {\n                    this.removeConditionsAndOperators(position, 1);\n                    conditionsRemoved = true;\n                    if (positionBeforeLastUiCompletePosition) {\n                        updatedLastUiCompletePosition--;\n                    }\n                }\n            }\n        }\n        let shouldUpdateConditionStatusesAndValues = false;\n        if (this.getNumConditions() < this.numAlwaysVisibleConditions) {\n            // if conditions have been removed, need to recreate new ones at the end up to the number required\n            this.createMissingConditionsAndOperators();\n            shouldUpdateConditionStatusesAndValues = true;\n        }\n        if (this.shouldAddNewConditionAtEnd(updatedLastUiCompletePosition === this.getNumConditions() - 1)) {\n            this.createJoinOperatorPanel();\n            this.createOption();\n            shouldUpdateConditionStatusesAndValues = true;\n        }\n        if (shouldUpdateConditionStatusesAndValues) {\n            this.updateConditionStatusesAndValues(updatedLastUiCompletePosition, joinOperator);\n        }\n        if (conditionsRemoved) {\n            this.updateJoinOperatorsDisabled();\n        }\n        this.lastUiCompletePosition = updatedLastUiCompletePosition;\n    }\n    getPlaceholderText(defaultPlaceholder, position) {\n        let placeholder = this.translate(defaultPlaceholder);\n        if (isFunction(this.filterPlaceholder)) {\n            const filterPlaceholderFn = this.filterPlaceholder;\n            const filterOptionKey = this.eTypes[position].getValue();\n            const filterOption = this.translate(filterOptionKey);\n            placeholder = filterPlaceholderFn({\n                filterOptionKey,\n                filterOption,\n                placeholder\n            });\n        }\n        else if (typeof this.filterPlaceholder === 'string') {\n            placeholder = this.filterPlaceholder;\n        }\n        return placeholder;\n    }\n    // allow sub-classes to reset HTML placeholders after UI update.\n    resetPlaceholder() {\n        const globalTranslate = this.localeService.getLocaleTextFunc();\n        this.forEachInput((element, index, position, numberOfInputs) => {\n            if (!(element instanceof AgAbstractInputField)) {\n                return;\n            }\n            const placeholder = index === 0 && numberOfInputs > 1 ? 'inRangeStart' :\n                index === 0 ? 'filterOoo' :\n                    'inRangeEnd';\n            const ariaLabel = index === 0 && numberOfInputs > 1 ? globalTranslate('ariaFilterFromValue', 'Filter from value') :\n                index === 0 ? globalTranslate('ariaFilterValue', 'Filter Value') :\n                    globalTranslate('ariaFilterToValue', 'Filter to Value');\n            element.setInputPlaceholder(this.getPlaceholderText(placeholder, position));\n            element.setInputAriaLabel(ariaLabel);\n        });\n    }\n    setElementValue(element, value) {\n        if (element instanceof AgAbstractInputField) {\n            element.setValue(value != null ? String(value) : null, true);\n        }\n    }\n    setElementDisplayed(element, displayed) {\n        if (element instanceof Component) {\n            setDisplayed(element.getGui(), displayed);\n        }\n    }\n    setElementDisabled(element, disabled) {\n        if (element instanceof Component) {\n            setDisabled(element.getGui(), disabled);\n        }\n    }\n    attachElementOnChange(element, listener) {\n        if (element instanceof AgAbstractInputField) {\n            element.onValueChange(listener);\n        }\n    }\n    forEachInput(cb) {\n        this.getConditionTypes().forEach((type, position) => {\n            this.forEachPositionTypeInput(position, type, cb);\n        });\n    }\n    forEachPositionInput(position, cb) {\n        const type = this.getConditionType(position);\n        this.forEachPositionTypeInput(position, type, cb);\n    }\n    forEachPositionTypeInput(position, type, cb) {\n        const numberOfInputs = this.getNumberOfInputs(type);\n        const inputs = this.getInputs(position);\n        for (let index = 0; index < inputs.length; index++) {\n            const input = inputs[index];\n            if (input != null) {\n                cb(input, index, position, numberOfInputs);\n            }\n        }\n    }\n    isConditionDisabled(position, lastUiCompletePosition) {\n        if (this.isReadOnly()) {\n            return true;\n        } // Read-only mode trumps everything.\n        if (position === 0) {\n            return false;\n        } // Position 0 should typically be editable.\n        // Only allow editing of a 2nd or later condition if the previous condition is complete and no subsequent conditions are complete.\n        return position > lastUiCompletePosition + 1;\n    }\n    isConditionBodyVisible(position) {\n        // Check that the condition needs inputs.\n        const type = this.getConditionType(position);\n        const numberOfInputs = this.getNumberOfInputs(type);\n        return numberOfInputs > 0;\n    }\n    // returns true if the UI represents a working filter, eg all parts are filled out.\n    // eg if text filter and textfield blank then returns false.\n    isConditionUiComplete(position) {\n        if (position >= this.getNumConditions()) {\n            return false;\n        } // Condition doesn't exist.\n        const type = this.getConditionType(position);\n        if (type === SimpleFilter.EMPTY) {\n            return false;\n        }\n        if (this.getValues(position).some(v => v == null)) {\n            return false;\n        }\n        return true;\n    }\n    getNumConditions() {\n        return this.eTypes.length;\n    }\n    getUiCompleteConditions() {\n        const conditions = [];\n        for (let position = 0; position < this.getNumConditions(); position++) {\n            if (this.isConditionUiComplete(position)) {\n                conditions.push(this.createCondition(position));\n            }\n        }\n        return conditions;\n    }\n    createMissingConditionsAndOperators() {\n        if (this.isReadOnly()) {\n            return;\n        } // don't show incomplete conditions when read only\n        for (let i = this.getNumConditions(); i < this.numAlwaysVisibleConditions; i++) {\n            this.createJoinOperatorPanel();\n            this.createOption();\n        }\n    }\n    resetUiToDefaults(silent) {\n        this.removeConditionsAndOperators(this.isReadOnly() ? 1 : this.numAlwaysVisibleConditions);\n        this.eTypes.forEach(eType => this.resetType(eType));\n        this.eJoinOperatorsAnd.forEach((eJoinOperatorAnd, index) => this.resetJoinOperatorAnd(eJoinOperatorAnd, index, this.joinOperatorId + index));\n        this.eJoinOperatorsOr.forEach((eJoinOperatorOr, index) => this.resetJoinOperatorOr(eJoinOperatorOr, index, this.joinOperatorId + index));\n        this.joinOperatorId++;\n        this.forEachInput((element) => this.resetInput(element));\n        this.resetPlaceholder();\n        this.createMissingConditionsAndOperators();\n        this.lastUiCompletePosition = null;\n        if (!silent) {\n            this.onUiChanged();\n        }\n        return AgPromise.resolve();\n    }\n    resetType(eType) {\n        const translate = this.localeService.getLocaleTextFunc();\n        const filteringLabel = translate('ariaFilteringOperator', 'Filtering operator');\n        eType\n            .setValue(this.optionsFactory.getDefaultOption(), true)\n            .setAriaLabel(filteringLabel)\n            .setDisabled(this.isReadOnly() || this.filterListOptions.length <= 1);\n    }\n    resetJoinOperatorAnd(eJoinOperatorAnd, index, uniqueGroupId) {\n        this.resetJoinOperator(eJoinOperatorAnd, index, this.isDefaultOperator('AND'), this.translate('andCondition'), uniqueGroupId);\n    }\n    resetJoinOperatorOr(eJoinOperatorOr, index, uniqueGroupId) {\n        this.resetJoinOperator(eJoinOperatorOr, index, this.isDefaultOperator('OR'), this.translate('orCondition'), uniqueGroupId);\n    }\n    resetJoinOperator(eJoinOperator, index, value, label, uniqueGroupId) {\n        this.updateJoinOperatorDisabled(eJoinOperator\n            .setValue(value, true)\n            .setName(`ag-simple-filter-and-or-${this.getCompId()}-${uniqueGroupId}`)\n            .setLabel(label), index);\n    }\n    updateJoinOperatorsDisabled() {\n        this.eJoinOperatorsAnd.forEach((eJoinOperator, index) => this.updateJoinOperatorDisabled(eJoinOperator, index));\n        this.eJoinOperatorsOr.forEach((eJoinOperator, index) => this.updateJoinOperatorDisabled(eJoinOperator, index));\n    }\n    updateJoinOperatorDisabled(eJoinOperator, index) {\n        eJoinOperator.setDisabled(this.isReadOnly() || index > 0);\n    }\n    resetInput(element) {\n        this.setElementValue(element, null);\n        this.setElementDisabled(element, this.isReadOnly());\n    }\n    // puts model values into the UI\n    setConditionIntoUi(model, position) {\n        const values = this.mapValuesFromModel(model);\n        this.forEachInput((element, index, elPosition, _) => {\n            if (elPosition !== position) {\n                return;\n            }\n            this.setElementValue(element, values[index] != null ? values[index] : null);\n        });\n    }\n    // after floating filter changes, this sets the 'value' section. this is implemented by the base class\n    // (as that's where value is controlled), the 'type' part from the floating filter is dealt with in this class.\n    setValueFromFloatingFilter(value) {\n        this.forEachInput((element, index, position, _) => {\n            this.setElementValue(element, index === 0 && position === 0 ? value : null);\n        });\n    }\n    isDefaultOperator(operator) {\n        return operator === this.defaultJoinOperator;\n    }\n    addChangedListeners(eType, position) {\n        if (this.isReadOnly()) {\n            return;\n        }\n        eType.onValueChange(this.listener);\n        this.forEachPositionInput(position, (element) => {\n            this.attachElementOnChange(element, this.listener);\n        });\n    }\n    /** returns true if the row passes the said condition */\n    individualConditionPasses(params, filterModel) {\n        const cellValue = this.getCellValue(params.node);\n        const values = this.mapValuesFromModel(filterModel);\n        const customFilterOption = this.optionsFactory.getCustomOption(filterModel.type);\n        const customFilterResult = this.evaluateCustomFilter(customFilterOption, values, cellValue);\n        if (customFilterResult != null) {\n            return customFilterResult;\n        }\n        if (cellValue == null) {\n            return this.evaluateNullValue(filterModel.type);\n        }\n        return this.evaluateNonNullValue(values, cellValue, filterModel, params);\n    }\n    evaluateCustomFilter(customFilterOption, values, cellValue) {\n        if (customFilterOption == null) {\n            return;\n        }\n        const { predicate } = customFilterOption;\n        // only execute the custom filter if a value exists or a value isn't required, i.e. input is hidden\n        if (predicate != null && !values.some(v => v == null)) {\n            return predicate(values, cellValue);\n        }\n        // No custom filter invocation, indicate that to the caller.\n        return;\n    }\n    isBlank(cellValue) {\n        return cellValue == null ||\n            (typeof cellValue === 'string' && cellValue.trim().length === 0);\n    }\n    hasInvalidInputs() {\n        return false;\n    }\n}\nSimpleFilter.EMPTY = 'empty';\nSimpleFilter.BLANK = 'blank';\nSimpleFilter.NOT_BLANK = 'notBlank';\nSimpleFilter.EQUALS = 'equals';\nSimpleFilter.NOT_EQUAL = 'notEqual';\nSimpleFilter.LESS_THAN = 'lessThan';\nSimpleFilter.LESS_THAN_OR_EQUAL = 'lessThanOrEqual';\nSimpleFilter.GREATER_THAN = 'greaterThan';\nSimpleFilter.GREATER_THAN_OR_EQUAL = 'greaterThanOrEqual';\nSimpleFilter.IN_RANGE = 'inRange';\nSimpleFilter.CONTAINS = 'contains';\nSimpleFilter.NOT_CONTAINS = 'notContains';\nSimpleFilter.STARTS_WITH = 'startsWith';\nSimpleFilter.ENDS_WITH = 'endsWith';\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass ScalarFilter extends SimpleFilter {\n    setParams(params) {\n        super.setParams(params);\n        this.scalarFilterParams = params;\n    }\n    evaluateNullValue(filterType) {\n        switch (filterType) {\n            case ScalarFilter.EQUALS:\n            case ScalarFilter.NOT_EQUAL:\n                if (this.scalarFilterParams.includeBlanksInEquals) {\n                    return true;\n                }\n                break;\n            case ScalarFilter.GREATER_THAN:\n            case ScalarFilter.GREATER_THAN_OR_EQUAL:\n                if (this.scalarFilterParams.includeBlanksInGreaterThan) {\n                    return true;\n                }\n                break;\n            case ScalarFilter.LESS_THAN:\n            case ScalarFilter.LESS_THAN_OR_EQUAL:\n                if (this.scalarFilterParams.includeBlanksInLessThan) {\n                    return true;\n                }\n                break;\n            case ScalarFilter.IN_RANGE:\n                if (this.scalarFilterParams.includeBlanksInRange) {\n                    return true;\n                }\n                break;\n            case ScalarFilter.BLANK:\n                return true;\n            case ScalarFilter.NOT_BLANK:\n                return false;\n        }\n        return false;\n    }\n    evaluateNonNullValue(values, cellValue, filterModel) {\n        const comparator = this.comparator();\n        const compareResult = values[0] != null ? comparator(values[0], cellValue) : 0;\n        switch (filterModel.type) {\n            case ScalarFilter.EQUALS:\n                return compareResult === 0;\n            case ScalarFilter.NOT_EQUAL:\n                return compareResult !== 0;\n            case ScalarFilter.GREATER_THAN:\n                return compareResult > 0;\n            case ScalarFilter.GREATER_THAN_OR_EQUAL:\n                return compareResult >= 0;\n            case ScalarFilter.LESS_THAN:\n                return compareResult < 0;\n            case ScalarFilter.LESS_THAN_OR_EQUAL:\n                return compareResult <= 0;\n            case ScalarFilter.IN_RANGE: {\n                const compareToResult = comparator(values[1], cellValue);\n                return this.scalarFilterParams.inRangeInclusive ?\n                    compareResult >= 0 && compareToResult <= 0 :\n                    compareResult > 0 && compareToResult < 0;\n            }\n            case ScalarFilter.BLANK:\n                return this.isBlank(cellValue);\n            case ScalarFilter.NOT_BLANK:\n                return !this.isBlank(cellValue);\n            default:\n                console.warn('AG Grid: Unexpected type of filter \"' + filterModel.type + '\", it looks like the filter was configured with incorrect Filter Options');\n                return true;\n        }\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2h = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst DEFAULT_MIN_YEAR = 1000;\nconst DEFAULT_MAX_YEAR = Infinity;\nclass DateFilterModelFormatter extends SimpleFilterModelFormatter {\n    constructor(dateFilterParams, localeService, optionsFactory) {\n        super(localeService, optionsFactory);\n        this.dateFilterParams = dateFilterParams;\n    }\n    conditionToString(condition, options) {\n        const { type } = condition;\n        const { numberOfInputs } = options || {};\n        const isRange = type == SimpleFilter.IN_RANGE || numberOfInputs === 2;\n        const dateFrom = parseDateTimeFromString(condition.dateFrom);\n        const dateTo = parseDateTimeFromString(condition.dateTo);\n        const format = this.dateFilterParams.inRangeFloatingFilterDateFormat;\n        if (isRange) {\n            const formattedFrom = dateFrom !== null ? dateToFormattedString(dateFrom, format) : 'null';\n            const formattedTo = dateTo !== null ? dateToFormattedString(dateTo, format) : 'null';\n            return `${formattedFrom}-${formattedTo}`;\n        }\n        if (dateFrom != null) {\n            return dateToFormattedString(dateFrom, format);\n        }\n        // cater for when the type doesn't need a value\n        return `${type}`;\n    }\n}\nclass DateFilter extends ScalarFilter {\n    constructor() {\n        super('dateFilter');\n        this.eConditionPanelsFrom = [];\n        this.eConditionPanelsTo = [];\n        this.dateConditionFromComps = [];\n        this.dateConditionToComps = [];\n        this.minValidYear = DEFAULT_MIN_YEAR;\n        this.maxValidYear = DEFAULT_MAX_YEAR;\n    }\n    afterGuiAttached(params) {\n        super.afterGuiAttached(params);\n        this.dateConditionFromComps[0].afterGuiAttached(params);\n    }\n    mapValuesFromModel(filterModel) {\n        // unlike the other filters, we do two things here:\n        // 1) allow for different attribute names (same as done for other filters) (eg the 'from' and 'to'\n        //    are in different locations in Date and Number filter models)\n        // 2) convert the type (because Date filter uses Dates, however model is 'string')\n        //\n        // NOTE: The conversion of string to date also removes the timezone - i.e. when user picks\n        //       a date from the UI, it will have timezone info in it. This is lost when creating\n        //       the model. When we recreate the date again here, it's without a timezone.\n        const { dateFrom, dateTo, type } = filterModel || {};\n        return [\n            dateFrom && parseDateTimeFromString(dateFrom) || null,\n            dateTo && parseDateTimeFromString(dateTo) || null,\n        ].slice(0, this.getNumberOfInputs(type));\n    }\n    comparator() {\n        return this.dateFilterParams.comparator ? this.dateFilterParams.comparator : this.defaultComparator.bind(this);\n    }\n    defaultComparator(filterDate, cellValue) {\n        // The default comparator assumes that the cellValue is a date\n        const cellAsDate = cellValue;\n        if (cellValue == null || cellAsDate < filterDate) {\n            return -1;\n        }\n        if (cellAsDate > filterDate) {\n            return 1;\n        }\n        return 0;\n    }\n    setParams(params) {\n        this.dateFilterParams = params;\n        super.setParams(params);\n        const yearParser = (param, fallback) => {\n            if (params[param] != null) {\n                if (!isNaN(params[param])) {\n                    return params[param] == null ? fallback : Number(params[param]);\n                }\n                else {\n                    console.warn(`AG Grid: DateFilter ${param} is not a number`);\n                }\n            }\n            return fallback;\n        };\n        this.minValidYear = yearParser('minValidYear', DEFAULT_MIN_YEAR);\n        this.maxValidYear = yearParser('maxValidYear', DEFAULT_MAX_YEAR);\n        if (this.minValidYear > this.maxValidYear) {\n            console.warn(`AG Grid: DateFilter minValidYear should be <= maxValidYear`);\n        }\n        this.filterModelFormatter = new DateFilterModelFormatter(this.dateFilterParams, this.localeService, this.optionsFactory);\n    }\n    createDateCompWrapper(element) {\n        const dateCompWrapper = new DateCompWrapper(this.getContext(), this.userComponentFactory, {\n            onDateChanged: () => this.onUiChanged(),\n            filterParams: this.dateFilterParams\n        }, element);\n        this.addDestroyFunc(() => dateCompWrapper.destroy());\n        return dateCompWrapper;\n    }\n    setElementValue(element, value) {\n        element.setDate(value);\n    }\n    setElementDisplayed(element, displayed) {\n        element.setDisplayed(displayed);\n    }\n    setElementDisabled(element, disabled) {\n        element.setDisabled(disabled);\n    }\n    getDefaultFilterOptions() {\n        return DateFilter.DEFAULT_FILTER_OPTIONS;\n    }\n    createValueElement() {\n        const eCondition = document.createElement('div');\n        eCondition.classList.add('ag-filter-body');\n        this.createFromToElement(eCondition, this.eConditionPanelsFrom, this.dateConditionFromComps, 'from');\n        this.createFromToElement(eCondition, this.eConditionPanelsTo, this.dateConditionToComps, 'to');\n        return eCondition;\n    }\n    createFromToElement(eCondition, eConditionPanels, dateConditionComps, fromTo) {\n        const eConditionPanel = document.createElement('div');\n        eConditionPanel.classList.add(`ag-filter-${fromTo}`);\n        eConditionPanel.classList.add(`ag-filter-date-${fromTo}`);\n        eConditionPanels.push(eConditionPanel);\n        eCondition.appendChild(eConditionPanel);\n        dateConditionComps.push(this.createDateCompWrapper(eConditionPanel));\n    }\n    removeValueElements(startPosition, deleteCount) {\n        this.removeDateComps(this.dateConditionFromComps, startPosition, deleteCount);\n        this.removeDateComps(this.dateConditionToComps, startPosition, deleteCount);\n        this.removeItems(this.eConditionPanelsFrom, startPosition, deleteCount);\n        this.removeItems(this.eConditionPanelsTo, startPosition, deleteCount);\n    }\n    removeDateComps(components, startPosition, deleteCount) {\n        const removedComponents = this.removeItems(components, startPosition, deleteCount);\n        removedComponents.forEach(comp => comp.destroy());\n    }\n    isConditionUiComplete(position) {\n        if (!super.isConditionUiComplete(position)) {\n            return false;\n        }\n        const isValidDate = (value) => value != null\n            && value.getUTCFullYear() >= this.minValidYear\n            && value.getUTCFullYear() <= this.maxValidYear;\n        let valid = true;\n        this.forEachInput((element, index, elPosition, numberOfInputs) => {\n            if (elPosition !== position || !valid || index >= numberOfInputs) {\n                return;\n            }\n            valid = valid && isValidDate(element.getDate());\n        });\n        return valid;\n    }\n    areSimpleModelsEqual(aSimple, bSimple) {\n        return aSimple.dateFrom === bSimple.dateFrom\n            && aSimple.dateTo === bSimple.dateTo\n            && aSimple.type === bSimple.type;\n    }\n    getFilterType() {\n        return 'date';\n    }\n    createCondition(position) {\n        const type = this.getConditionType(position);\n        const model = {};\n        const values = this.getValues(position);\n        if (values.length > 0) {\n            model.dateFrom = serialiseDate(values[0]);\n        }\n        if (values.length > 1) {\n            model.dateTo = serialiseDate(values[1]);\n        }\n        return Object.assign({ dateFrom: null, dateTo: null, filterType: this.getFilterType(), type }, model);\n    }\n    resetPlaceholder() {\n        const globalTranslate = this.localeService.getLocaleTextFunc();\n        const placeholder = this.translate('dateFormatOoo');\n        const ariaLabel = globalTranslate('ariaFilterValue', 'Filter Value');\n        this.forEachInput((element) => {\n            element.setInputPlaceholder(placeholder);\n            element.setInputAriaLabel(ariaLabel);\n        });\n    }\n    getInputs(position) {\n        if (position >= this.dateConditionFromComps.length) {\n            return [null, null];\n        }\n        return [this.dateConditionFromComps[position], this.dateConditionToComps[position]];\n    }\n    getValues(position) {\n        const result = [];\n        this.forEachPositionInput(position, (element, index, _elPosition, numberOfInputs) => {\n            if (index < numberOfInputs) {\n                result.push(element.getDate());\n            }\n        });\n        return result;\n    }\n    getModelAsString(model) {\n        var _a;\n        return (_a = this.filterModelFormatter.getModelAsString(model)) !== null && _a !== void 0 ? _a : '';\n    }\n}\nDateFilter.DEFAULT_FILTER_OPTIONS = [\n    ScalarFilter.EQUALS,\n    ScalarFilter.GREATER_THAN,\n    ScalarFilter.LESS_THAN,\n    ScalarFilter.NOT_EQUAL,\n    ScalarFilter.IN_RANGE,\n    ScalarFilter.BLANK,\n    ScalarFilter.NOT_BLANK,\n];\n__decorate$2h([\n    Autowired('userComponentFactory')\n], DateFilter.prototype, \"userComponentFactory\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass SimpleFloatingFilter extends Component {\n    getDefaultDebounceMs() {\n        return 0;\n    }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so we need to override destroy() just to make the method public.\n    destroy() {\n        super.destroy();\n    }\n    isEventFromFloatingFilter(event) {\n        return event && event.afterFloatingFilter;\n    }\n    isEventFromDataChange(event) {\n        return event === null || event === void 0 ? void 0 : event.afterDataChange;\n    }\n    getLastType() {\n        return this.lastType;\n    }\n    isReadOnly() {\n        return this.readOnly;\n    }\n    setLastTypeFromModel(model) {\n        // if no model provided by the parent filter use default\n        if (!model) {\n            this.lastType = this.optionsFactory.getDefaultOption();\n            return;\n        }\n        const isCombined = model.operator;\n        let condition;\n        if (isCombined) {\n            const combinedModel = model;\n            condition = combinedModel.conditions[0];\n        }\n        else {\n            condition = model;\n        }\n        this.lastType = condition.type;\n    }\n    canWeEditAfterModelFromParentFilter(model) {\n        if (!model) {\n            // if no model, then we can edit as long as the lastType is something we can edit, as this\n            // is the type we will provide to the parent filter if the user decides to use the floating filter.\n            return this.isTypeEditable(this.lastType);\n        }\n        // never allow editing if the filter is combined (ie has two parts)\n        const isCombined = model.operator;\n        if (isCombined) {\n            return false;\n        }\n        const simpleModel = model;\n        return this.isTypeEditable(simpleModel.type);\n    }\n    init(params) {\n        this.optionsFactory = new OptionsFactory();\n        this.optionsFactory.init(params.filterParams, this.getDefaultFilterOptions());\n        this.lastType = this.optionsFactory.getDefaultOption();\n        // readOnly is a property of ProvidedFilterParams - we need to find a better (type-safe)\n        // way to support reading this in the future.\n        this.readOnly = !!params.filterParams.readOnly;\n        // we are editable if:\n        // 1) there is a type (user has configured filter wrong if not type)\n        //  AND\n        // 2) the default type is not 'in range'\n        const editable = this.isTypeEditable(this.lastType);\n        this.setEditable(editable);\n    }\n    doesFilterHaveSingleInput(filterType) {\n        const customFilterOption = this.optionsFactory.getCustomOption(filterType);\n        const { numberOfInputs } = customFilterOption || {};\n        return numberOfInputs == null || numberOfInputs == 1;\n    }\n    isTypeEditable(type) {\n        const uneditableTypes = [\n            SimpleFilter.IN_RANGE, SimpleFilter.EMPTY, SimpleFilter.BLANK, SimpleFilter.NOT_BLANK,\n        ];\n        return !!type &&\n            !this.isReadOnly() &&\n            this.doesFilterHaveSingleInput(type) &&\n            uneditableTypes.indexOf(type) < 0;\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2g = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass DateFloatingFilter extends SimpleFloatingFilter {\n    constructor() {\n        super(/* html */ `\n            <div class=\"ag-floating-filter-input\" role=\"presentation\">\n                <ag-input-text-field ref=\"eReadOnlyText\"></ag-input-text-field>\n                <div ref=\"eDateWrapper\" style=\"display: flex;\"></div>\n            </div>`);\n    }\n    getDefaultFilterOptions() {\n        return DateFilter.DEFAULT_FILTER_OPTIONS;\n    }\n    init(params) {\n        super.init(params);\n        this.params = params;\n        this.filterParams = params.filterParams;\n        this.createDateComponent();\n        const translate = this.localeService.getLocaleTextFunc();\n        this.eReadOnlyText\n            .setDisabled(true)\n            .setInputAriaLabel(translate('ariaDateFilterInput', 'Date Filter Input'));\n        this.filterModelFormatter = new DateFilterModelFormatter(this.filterParams, this.localeService, this.optionsFactory);\n    }\n    setEditable(editable) {\n        setDisplayed(this.eDateWrapper, editable);\n        setDisplayed(this.eReadOnlyText.getGui(), !editable);\n    }\n    onParentModelChanged(model, event) {\n        // We don't want to update the floating filter if the floating filter caused the change,\n        // because the UI is already in sync. if we didn't do this, the UI would behave strangely\n        // as it would be updating as the user is typing.\n        // This is similar for data changes, which don't affect provided date floating filters\n        if (this.isEventFromFloatingFilter(event) || this.isEventFromDataChange(event)) {\n            return;\n        }\n        super.setLastTypeFromModel(model);\n        const allowEditing = !this.isReadOnly() &&\n            this.canWeEditAfterModelFromParentFilter(model);\n        this.setEditable(allowEditing);\n        if (allowEditing) {\n            if (model) {\n                const dateModel = model;\n                this.dateComp.setDate(parseDateTimeFromString(dateModel.dateFrom));\n            }\n            else {\n                this.dateComp.setDate(null);\n            }\n            this.eReadOnlyText.setValue('');\n        }\n        else {\n            this.eReadOnlyText.setValue(this.filterModelFormatter.getModelAsString(model));\n            this.dateComp.setDate(null);\n        }\n    }\n    onDateChanged() {\n        const filterValueDate = this.dateComp.getDate();\n        const filterValueText = serialiseDate(filterValueDate);\n        this.params.parentFilterInstance(filterInstance => {\n            if (filterInstance) {\n                const date = parseDateTimeFromString(filterValueText);\n                filterInstance.onFloatingFilterChanged(this.getLastType() || null, date);\n            }\n        });\n    }\n    createDateComponent() {\n        const debounceMs = ProvidedFilter.getDebounceMs(this.params.filterParams, this.getDefaultDebounceMs());\n        const dateComponentParams = {\n            onDateChanged: debounce(this.onDateChanged.bind(this), debounceMs),\n            filterParams: this.params.column.getColDef().filterParams\n        };\n        this.dateComp = new DateCompWrapper(this.getContext(), this.userComponentFactory, dateComponentParams, this.eDateWrapper);\n        this.addDestroyFunc(() => this.dateComp.destroy());\n    }\n    getFilterModelFormatter() {\n        return this.filterModelFormatter;\n    }\n}\n__decorate$2g([\n    Autowired('userComponentFactory')\n], DateFloatingFilter.prototype, \"userComponentFactory\", void 0);\n__decorate$2g([\n    RefSelector('eReadOnlyText')\n], DateFloatingFilter.prototype, \"eReadOnlyText\", void 0);\n__decorate$2g([\n    RefSelector('eDateWrapper')\n], DateFloatingFilter.prototype, \"eDateWrapper\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2f = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass DefaultDateComponent extends Component {\n    constructor() {\n        super(/* html */ `\n            <div class=\"ag-filter-filter\">\n                <ag-input-text-field class=\"ag-date-filter\" ref=\"eDateInput\"></ag-input-text-field>\n            </div>`);\n    }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so we need to override destroy() just to make the method public.\n    destroy() {\n        super.destroy();\n    }\n    init(params) {\n        const eDocument = this.gridOptionsService.getDocument();\n        const inputElement = this.eDateInput.getInputElement();\n        const shouldUseBrowserDatePicker = this.shouldUseBrowserDatePicker(params);\n        if (shouldUseBrowserDatePicker) {\n            inputElement.type = 'date';\n        }\n        // ensures that the input element is focussed when a clear button is clicked,\n        // unless using safari as there is no clear button and focus does not work properly\n        const usingSafariDatePicker = shouldUseBrowserDatePicker && isBrowserSafari();\n        this.addManagedListener(inputElement, 'mousedown', () => {\n            if (this.eDateInput.isDisabled() || usingSafariDatePicker) {\n                return;\n            }\n            inputElement.focus();\n        });\n        this.addManagedListener(inputElement, 'input', e => {\n            if (e.target !== eDocument.activeElement) {\n                return;\n            }\n            if (this.eDateInput.isDisabled()) {\n                return;\n            }\n            params.onDateChanged();\n        });\n        const { minValidYear, maxValidYear } = params.filterParams || {};\n        if (minValidYear) {\n            inputElement.min = `${minValidYear}-01-01`;\n        }\n        if (maxValidYear) {\n            inputElement.max = `${maxValidYear}-12-31`;\n        }\n    }\n    getDate() {\n        return parseDateTimeFromString(this.eDateInput.getValue());\n    }\n    setDate(date) {\n        this.eDateInput.setValue(serialiseDate(date, false));\n    }\n    setInputPlaceholder(placeholder) {\n        this.eDateInput.setInputPlaceholder(placeholder);\n    }\n    setDisabled(disabled) {\n        this.eDateInput.setDisabled(disabled);\n    }\n    afterGuiAttached(params) {\n        if (!params || !params.suppressFocus) {\n            this.eDateInput.getInputElement().focus();\n        }\n    }\n    shouldUseBrowserDatePicker(params) {\n        if (params.filterParams && params.filterParams.browserDatePicker != null) {\n            return params.filterParams.browserDatePicker;\n        }\n        return isBrowserChrome() || isBrowserFirefox() || (isBrowserSafari() && getSafariVersion() >= 14.1);\n    }\n}\n__decorate$2f([\n    RefSelector('eDateInput')\n], DefaultDateComponent.prototype, \"eDateInput\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass AgInputTextField extends AgAbstractInputField {\n    constructor(config, className = 'ag-text-field', inputType = 'text') {\n        super(config, className, inputType);\n    }\n    postConstruct() {\n        super.postConstruct();\n        if (this.config.allowedCharPattern) {\n            this.preventDisallowedCharacters();\n        }\n    }\n    setValue(value, silent) {\n        const ret = super.setValue(value, silent);\n        if (this.eInput.value !== value) {\n            this.eInput.value = exists(value) ? value : '';\n        }\n        return ret;\n    }\n    /** Used to set an initial value into the input without necessarily setting `this.value` or triggering events (e.g. to set an invalid value) */\n    setStartValue(value) {\n        this.setValue(value, true);\n    }\n    preventDisallowedCharacters() {\n        const pattern = new RegExp(`[${this.config.allowedCharPattern}]`);\n        const preventCharacters = (event) => {\n            if (!isEventFromPrintableCharacter(event)) {\n                return;\n            }\n            if (event.key && !pattern.test(event.key)) {\n                event.preventDefault();\n            }\n        };\n        this.addManagedListener(this.eInput, 'keydown', preventCharacters);\n        this.addManagedListener(this.eInput, 'paste', (e) => {\n            var _a;\n            const text = (_a = e.clipboardData) === null || _a === void 0 ? void 0 : _a.getData('text');\n            if (text && text.split('').some((c) => !pattern.test(c))) {\n                e.preventDefault();\n            }\n        });\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass AgInputNumberField extends AgInputTextField {\n    constructor(config) {\n        super(config, 'ag-number-field', 'number');\n    }\n    postConstruct() {\n        super.postConstruct();\n        this.addManagedListener(this.eInput, 'blur', () => {\n            const floatedValue = parseFloat(this.eInput.value);\n            const value = isNaN(floatedValue) ? '' : this.normalizeValue(floatedValue.toString());\n            if (this.value !== value) {\n                this.setValue(value);\n            }\n        });\n        this.addManagedListener(this.eInput, 'wheel', this.onWheel.bind(this));\n        this.eInput.step = 'any';\n    }\n    onWheel(e) {\n        // Prevent default scroll events from incrementing / decrementing the input, since its inconsistent between browsers\n        if (document.activeElement === this.eInput) {\n            e.preventDefault();\n        }\n    }\n    normalizeValue(value) {\n        if (value === '') {\n            return '';\n        }\n        if (this.precision != null) {\n            value = this.adjustPrecision(value);\n        }\n        const val = parseFloat(value);\n        if (this.min != null && val < this.min) {\n            value = this.min.toString();\n        }\n        else if (this.max != null && val > this.max) {\n            value = this.max.toString();\n        }\n        return value;\n    }\n    adjustPrecision(value, isScientificNotation) {\n        if (this.precision == null) {\n            return value;\n        }\n        if (isScientificNotation) {\n            const floatString = parseFloat(value).toFixed(this.precision);\n            return parseFloat(floatString).toString();\n        }\n        // can't use toFixed here because we don't want to round up\n        const parts = String(value).split('.');\n        if (parts.length > 1) {\n            if (parts[1].length <= this.precision) {\n                return value;\n            }\n            else if (this.precision > 0) {\n                return `${parts[0]}.${parts[1].slice(0, this.precision)}`;\n            }\n        }\n        return parts[0];\n    }\n    setMin(min) {\n        if (this.min === min) {\n            return this;\n        }\n        this.min = min;\n        addOrRemoveAttribute(this.eInput, 'min', min);\n        return this;\n    }\n    setMax(max) {\n        if (this.max === max) {\n            return this;\n        }\n        this.max = max;\n        addOrRemoveAttribute(this.eInput, 'max', max);\n        return this;\n    }\n    setPrecision(precision) {\n        this.precision = precision;\n        return this;\n    }\n    setStep(step) {\n        if (this.step === step) {\n            return this;\n        }\n        this.step = step;\n        addOrRemoveAttribute(this.eInput, 'step', step);\n        return this;\n    }\n    setValue(value, silent) {\n        return this.setValueOrInputValue(v => super.setValue(v, silent), () => this, value);\n    }\n    setStartValue(value) {\n        return this.setValueOrInputValue(v => super.setValue(v, true), v => { this.eInput.value = v; }, value);\n    }\n    setValueOrInputValue(setValueFunc, setInputValueOnlyFunc, value) {\n        if (exists(value)) {\n            // need to maintain the scientific notation format whilst typing (e.g. 1e10)\n            let setInputValueOnly = this.isScientificNotation(value);\n            if (setInputValueOnly && this.eInput.validity.valid) {\n                return setValueFunc(value);\n            }\n            if (!setInputValueOnly) {\n                value = this.adjustPrecision(value);\n                const normalizedValue = this.normalizeValue(value);\n                // outside of valid range\n                setInputValueOnly = value != normalizedValue;\n            }\n            if (setInputValueOnly) {\n                return setInputValueOnlyFunc(value);\n            }\n        }\n        return setValueFunc(value);\n    }\n    getValue() {\n        if (!this.eInput.validity.valid) {\n            return undefined;\n        }\n        const inputValue = this.eInput.value;\n        if (this.isScientificNotation(inputValue)) {\n            return this.adjustPrecision(inputValue, true);\n        }\n        return super.getValue();\n    }\n    isScientificNotation(value) {\n        return typeof value === 'string' && value.includes('e');\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass NumberFilterModelFormatter extends SimpleFilterModelFormatter {\n    conditionToString(condition, options) {\n        const { numberOfInputs } = options || {};\n        const isRange = condition.type == SimpleFilter.IN_RANGE || numberOfInputs === 2;\n        if (isRange) {\n            return `${condition.filter}-${condition.filterTo}`;\n        }\n        // cater for when the type doesn't need a value\n        if (condition.filter != null) {\n            return `${condition.filter}`;\n        }\n        return `${condition.type}`;\n    }\n}\nfunction getAllowedCharPattern(filterParams) {\n    const { allowedCharPattern } = filterParams !== null && filterParams !== void 0 ? filterParams : {};\n    return allowedCharPattern !== null && allowedCharPattern !== void 0 ? allowedCharPattern : null;\n}\nclass NumberFilter extends ScalarFilter {\n    constructor() {\n        super('numberFilter');\n        this.eValuesFrom = [];\n        this.eValuesTo = [];\n    }\n    mapValuesFromModel(filterModel) {\n        const { filter, filterTo, type } = filterModel || {};\n        return [\n            this.processValue(filter),\n            this.processValue(filterTo),\n        ].slice(0, this.getNumberOfInputs(type));\n    }\n    getDefaultDebounceMs() {\n        return 500;\n    }\n    comparator() {\n        return (left, right) => {\n            if (left === right) {\n                return 0;\n            }\n            return left < right ? 1 : -1;\n        };\n    }\n    setParams(params) {\n        this.numberFilterParams = params;\n        super.setParams(params);\n        this.filterModelFormatter = new NumberFilterModelFormatter(this.localeService, this.optionsFactory);\n    }\n    getDefaultFilterOptions() {\n        return NumberFilter.DEFAULT_FILTER_OPTIONS;\n    }\n    createValueElement() {\n        const allowedCharPattern = getAllowedCharPattern(this.numberFilterParams);\n        const eCondition = document.createElement('div');\n        eCondition.classList.add('ag-filter-body');\n        setAriaRole(eCondition, 'presentation');\n        this.createFromToElement(eCondition, this.eValuesFrom, 'from', allowedCharPattern);\n        this.createFromToElement(eCondition, this.eValuesTo, 'to', allowedCharPattern);\n        return eCondition;\n    }\n    createFromToElement(eCondition, eValues, fromTo, allowedCharPattern) {\n        const eValue = this.createManagedBean(allowedCharPattern ? new AgInputTextField({ allowedCharPattern }) : new AgInputNumberField());\n        eValue.addCssClass(`ag-filter-${fromTo}`);\n        eValue.addCssClass('ag-filter-filter');\n        eValues.push(eValue);\n        eCondition.appendChild(eValue.getGui());\n    }\n    removeValueElements(startPosition, deleteCount) {\n        this.removeComponents(this.eValuesFrom, startPosition, deleteCount);\n        this.removeComponents(this.eValuesTo, startPosition, deleteCount);\n    }\n    getValues(position) {\n        const result = [];\n        this.forEachPositionInput(position, (element, index, _elPosition, numberOfInputs) => {\n            if (index < numberOfInputs) {\n                result.push(this.processValue(this.stringToFloat(element.getValue())));\n            }\n        });\n        return result;\n    }\n    areSimpleModelsEqual(aSimple, bSimple) {\n        return aSimple.filter === bSimple.filter\n            && aSimple.filterTo === bSimple.filterTo\n            && aSimple.type === bSimple.type;\n    }\n    getFilterType() {\n        return 'number';\n    }\n    processValue(value) {\n        if (value == null) {\n            return null;\n        }\n        return isNaN(value) ? null : value;\n    }\n    stringToFloat(value) {\n        if (typeof value === 'number') {\n            return value;\n        }\n        let filterText = makeNull(value);\n        if (filterText != null && filterText.trim() === '') {\n            filterText = null;\n        }\n        if (this.numberFilterParams.numberParser) {\n            return this.numberFilterParams.numberParser(filterText);\n        }\n        return filterText == null || filterText.trim() === '-' ? null : parseFloat(filterText);\n    }\n    createCondition(position) {\n        const type = this.getConditionType(position);\n        const model = {\n            filterType: this.getFilterType(),\n            type\n        };\n        const values = this.getValues(position);\n        if (values.length > 0) {\n            model.filter = values[0];\n        }\n        if (values.length > 1) {\n            model.filterTo = values[1];\n        }\n        return model;\n    }\n    getInputs(position) {\n        if (position >= this.eValuesFrom.length) {\n            return [null, null];\n        }\n        return [this.eValuesFrom[position], this.eValuesTo[position]];\n    }\n    getModelAsString(model) {\n        var _a;\n        return (_a = this.filterModelFormatter.getModelAsString(model)) !== null && _a !== void 0 ? _a : '';\n    }\n    hasInvalidInputs() {\n        let invalidInputs = false;\n        this.forEachInput(element => {\n            if (!element.getInputElement().validity.valid) {\n                invalidInputs = true;\n                return;\n            }\n        });\n        return invalidInputs;\n    }\n}\nNumberFilter.DEFAULT_FILTER_OPTIONS = [\n    ScalarFilter.EQUALS,\n    ScalarFilter.NOT_EQUAL,\n    ScalarFilter.LESS_THAN,\n    ScalarFilter.LESS_THAN_OR_EQUAL,\n    ScalarFilter.GREATER_THAN,\n    ScalarFilter.GREATER_THAN_OR_EQUAL,\n    ScalarFilter.IN_RANGE,\n    ScalarFilter.BLANK,\n    ScalarFilter.NOT_BLANK,\n];\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass TextFilterModelFormatter extends SimpleFilterModelFormatter {\n    conditionToString(condition, options) {\n        const { numberOfInputs } = options || {};\n        const isRange = condition.type == SimpleFilter.IN_RANGE || numberOfInputs === 2;\n        if (isRange) {\n            return `${condition.filter}-${condition.filterTo}`;\n        }\n        // cater for when the type doesn't need a value\n        if (condition.filter != null) {\n            return `${condition.filter}`;\n        }\n        return `${condition.type}`;\n    }\n}\nclass TextFilter extends SimpleFilter {\n    constructor() {\n        super('textFilter');\n        this.eValuesFrom = [];\n        this.eValuesTo = [];\n    }\n    static trimInput(value) {\n        const trimmedInput = value && value.trim();\n        // trim the input, unless it is all whitespace (this is consistent with Excel behaviour)\n        return trimmedInput === '' ? value : trimmedInput;\n    }\n    getDefaultDebounceMs() {\n        return 500;\n    }\n    setParams(params) {\n        this.textFilterParams = params;\n        super.setParams(params);\n        this.matcher = this.getTextMatcher();\n        this.formatter = this.textFilterParams.textFormatter ||\n            (this.textFilterParams.caseSensitive ? TextFilter.DEFAULT_FORMATTER : TextFilter.DEFAULT_LOWERCASE_FORMATTER);\n        this.filterModelFormatter = new TextFilterModelFormatter(this.localeService, this.optionsFactory);\n    }\n    getTextMatcher() {\n        const legacyComparator = this.textFilterParams.textCustomComparator;\n        if (legacyComparator) {\n            _.doOnce(() => console.warn('AG Grid - textCustomComparator is deprecated, use textMatcher instead.'), 'textCustomComparator.deprecated');\n            return ({ filterOption, value, filterText }) => legacyComparator(filterOption, value, filterText);\n        }\n        return this.textFilterParams.textMatcher || TextFilter.DEFAULT_MATCHER;\n    }\n    createCondition(position) {\n        const type = this.getConditionType(position);\n        const model = {\n            filterType: this.getFilterType(),\n            type,\n        };\n        const values = this.getValues(position);\n        if (values.length > 0) {\n            model.filter = values[0];\n        }\n        if (values.length > 1) {\n            model.filterTo = values[1];\n        }\n        return model;\n    }\n    getFilterType() {\n        return 'text';\n    }\n    areSimpleModelsEqual(aSimple, bSimple) {\n        return aSimple.filter === bSimple.filter &&\n            aSimple.filterTo === bSimple.filterTo &&\n            aSimple.type === bSimple.type;\n    }\n    getInputs(position) {\n        if (position >= this.eValuesFrom.length) {\n            return [null, null];\n        }\n        return [this.eValuesFrom[position], this.eValuesTo[position]];\n    }\n    getValues(position) {\n        const result = [];\n        this.forEachPositionInput(position, (element, index, _elPosition, numberOfInputs) => {\n            if (index < numberOfInputs) {\n                const value = makeNull(element.getValue());\n                const cleanValue = (this.textFilterParams.trimInput ? TextFilter.trimInput(value) : value) || null;\n                result.push(cleanValue);\n                element.setValue(cleanValue, true); // ensure clean value is visible\n            }\n        });\n        return result;\n    }\n    getDefaultFilterOptions() {\n        return TextFilter.DEFAULT_FILTER_OPTIONS;\n    }\n    createValueElement() {\n        const eCondition = document.createElement('div');\n        eCondition.classList.add('ag-filter-body');\n        setAriaRole(eCondition, 'presentation');\n        this.createFromToElement(eCondition, this.eValuesFrom, 'from');\n        this.createFromToElement(eCondition, this.eValuesTo, 'to');\n        return eCondition;\n    }\n    createFromToElement(eCondition, eValues, fromTo) {\n        const eValue = this.createManagedBean(new AgInputTextField());\n        eValue.addCssClass(`ag-filter-${fromTo}`);\n        eValue.addCssClass('ag-filter-filter');\n        eValues.push(eValue);\n        eCondition.appendChild(eValue.getGui());\n    }\n    removeValueElements(startPosition, deleteCount) {\n        this.removeComponents(this.eValuesFrom, startPosition, deleteCount);\n        this.removeComponents(this.eValuesTo, startPosition, deleteCount);\n    }\n    mapValuesFromModel(filterModel) {\n        const { filter, filterTo, type } = filterModel || {};\n        return [\n            filter || null,\n            filterTo || null,\n        ].slice(0, this.getNumberOfInputs(type));\n    }\n    evaluateNullValue(filterType) {\n        const filterTypesAllowNulls = [\n            SimpleFilter.NOT_EQUAL, SimpleFilter.NOT_CONTAINS, SimpleFilter.BLANK,\n        ];\n        return filterType ? filterTypesAllowNulls.indexOf(filterType) >= 0 : false;\n    }\n    evaluateNonNullValue(values, cellValue, filterModel, params) {\n        const formattedValues = values.map(v => this.formatter(v)) || [];\n        const cellValueFormatted = this.formatter(cellValue);\n        const { api, colDef, column, columnApi, context, textFormatter } = this.textFilterParams;\n        if (filterModel.type === SimpleFilter.BLANK) {\n            return this.isBlank(cellValue);\n        }\n        else if (filterModel.type === SimpleFilter.NOT_BLANK) {\n            return !this.isBlank(cellValue);\n        }\n        const matcherParams = {\n            api,\n            colDef,\n            column,\n            columnApi,\n            context,\n            node: params.node,\n            data: params.data,\n            filterOption: filterModel.type,\n            value: cellValueFormatted,\n            textFormatter,\n        };\n        return formattedValues.some(v => this.matcher(Object.assign(Object.assign({}, matcherParams), { filterText: v })));\n    }\n    getModelAsString(model) {\n        var _a;\n        return (_a = this.filterModelFormatter.getModelAsString(model)) !== null && _a !== void 0 ? _a : '';\n    }\n}\nTextFilter.DEFAULT_FILTER_OPTIONS = [\n    SimpleFilter.CONTAINS,\n    SimpleFilter.NOT_CONTAINS,\n    SimpleFilter.EQUALS,\n    SimpleFilter.NOT_EQUAL,\n    SimpleFilter.STARTS_WITH,\n    SimpleFilter.ENDS_WITH,\n    SimpleFilter.BLANK,\n    SimpleFilter.NOT_BLANK,\n];\nTextFilter.DEFAULT_FORMATTER = (from) => from;\nTextFilter.DEFAULT_LOWERCASE_FORMATTER = (from) => from == null ? null : from.toString().toLowerCase();\nTextFilter.DEFAULT_MATCHER = ({ filterOption, value, filterText }) => {\n    if (filterText == null) {\n        return false;\n    }\n    switch (filterOption) {\n        case TextFilter.CONTAINS:\n            return value.indexOf(filterText) >= 0;\n        case TextFilter.NOT_CONTAINS:\n            return value.indexOf(filterText) < 0;\n        case TextFilter.EQUALS:\n            return value === filterText;\n        case TextFilter.NOT_EQUAL:\n            return value != filterText;\n        case TextFilter.STARTS_WITH:\n            return value.indexOf(filterText) === 0;\n        case TextFilter.ENDS_WITH:\n            const index = value.lastIndexOf(filterText);\n            return index >= 0 && index === (value.length - filterText.length);\n        default:\n            return false;\n    }\n};\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2e = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass FloatingFilterTextInputService extends BeanStub {\n    constructor(params) {\n        super();\n        this.params = params;\n    }\n    setupGui(parentElement) {\n        this.eFloatingFilterTextInput = this.createManagedBean(new AgInputTextField(this.params.config));\n        this.eFloatingFilterTextInput.setInputAriaLabel(this.params.ariaLabel);\n        parentElement.appendChild(this.eFloatingFilterTextInput.getGui());\n    }\n    setEditable(editable) {\n        this.eFloatingFilterTextInput.setDisabled(!editable);\n    }\n    getValue() {\n        return this.eFloatingFilterTextInput.getValue();\n    }\n    setValue(value, silent) {\n        this.eFloatingFilterTextInput.setValue(value, silent);\n    }\n    addValueChangedListener(listener) {\n        const inputGui = this.eFloatingFilterTextInput.getGui();\n        this.addManagedListener(inputGui, 'input', listener);\n        this.addManagedListener(inputGui, 'keydown', listener);\n    }\n}\nclass TextInputFloatingFilter extends SimpleFloatingFilter {\n    postConstruct() {\n        this.setTemplate(/* html */ `\n            <div class=\"ag-floating-filter-input\" role=\"presentation\" ref=\"eFloatingFilterInputContainer\"></div>\n        `);\n    }\n    getDefaultDebounceMs() {\n        return 500;\n    }\n    onParentModelChanged(model, event) {\n        if (this.isEventFromFloatingFilter(event) || this.isEventFromDataChange(event)) {\n            // if the floating filter triggered the change, it is already in sync.\n            // Data changes also do not affect provided text floating filters\n            return;\n        }\n        this.setLastTypeFromModel(model);\n        this.setEditable(this.canWeEditAfterModelFromParentFilter(model));\n        this.floatingFilterInputService.setValue(this.getFilterModelFormatter().getModelAsString(model));\n    }\n    init(params) {\n        this.params = params;\n        const displayName = this.columnModel.getDisplayNameForColumn(params.column, 'header', true);\n        const translate = this.localeService.getLocaleTextFunc();\n        const ariaLabel = `${displayName} ${translate('ariaFilterInput', 'Filter Input')}`;\n        this.floatingFilterInputService = this.createFloatingFilterInputService(ariaLabel);\n        this.floatingFilterInputService.setupGui(this.eFloatingFilterInputContainer);\n        super.init(params);\n        this.applyActive = ProvidedFilter.isUseApplyButton(this.params.filterParams);\n        if (!this.isReadOnly()) {\n            const debounceMs = ProvidedFilter.getDebounceMs(this.params.filterParams, this.getDefaultDebounceMs());\n            const toDebounce = debounce(this.syncUpWithParentFilter.bind(this), debounceMs);\n            this.floatingFilterInputService.addValueChangedListener(toDebounce);\n        }\n    }\n    syncUpWithParentFilter(e) {\n        const isEnterKey = e.key === KeyCode.ENTER;\n        if (this.applyActive && !isEnterKey) {\n            return;\n        }\n        let value = this.floatingFilterInputService.getValue();\n        if (this.params.filterParams.trimInput) {\n            value = TextFilter.trimInput(value);\n            this.floatingFilterInputService.setValue(value, true); // ensure visible value is trimmed\n        }\n        this.params.parentFilterInstance(filterInstance => {\n            if (filterInstance) {\n                // NumberFilter is typed as number, but actually receives string values\n                filterInstance.onFloatingFilterChanged(this.getLastType() || null, value || null);\n            }\n        });\n    }\n    setEditable(editable) {\n        this.floatingFilterInputService.setEditable(editable);\n    }\n}\n__decorate$2e([\n    Autowired('columnModel')\n], TextInputFloatingFilter.prototype, \"columnModel\", void 0);\n__decorate$2e([\n    RefSelector('eFloatingFilterInputContainer')\n], TextInputFloatingFilter.prototype, \"eFloatingFilterInputContainer\", void 0);\n__decorate$2e([\n    PostConstruct\n], TextInputFloatingFilter.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass FloatingFilterNumberInputService extends BeanStub {\n    constructor(params) {\n        super();\n        this.params = params;\n        this.numberInputActive = true;\n    }\n    setupGui(parentElement) {\n        this.eFloatingFilterNumberInput = this.createManagedBean(new AgInputNumberField());\n        this.eFloatingFilterTextInput = this.createManagedBean(new AgInputTextField());\n        this.eFloatingFilterTextInput.setDisabled(true);\n        this.eFloatingFilterNumberInput.setInputAriaLabel(this.params.ariaLabel);\n        this.eFloatingFilterTextInput.setInputAriaLabel(this.params.ariaLabel);\n        parentElement.appendChild(this.eFloatingFilterNumberInput.getGui());\n        parentElement.appendChild(this.eFloatingFilterTextInput.getGui());\n    }\n    setEditable(editable) {\n        this.numberInputActive = editable;\n        this.eFloatingFilterNumberInput.setDisplayed(this.numberInputActive);\n        this.eFloatingFilterTextInput.setDisplayed(!this.numberInputActive);\n    }\n    getValue() {\n        return this.getActiveInputElement().getValue();\n    }\n    setValue(value, silent) {\n        this.getActiveInputElement().setValue(value, silent);\n    }\n    getActiveInputElement() {\n        return this.numberInputActive ? this.eFloatingFilterNumberInput : this.eFloatingFilterTextInput;\n    }\n    addValueChangedListener(listener) {\n        this.setupListeners(this.eFloatingFilterNumberInput.getGui(), listener);\n        this.setupListeners(this.eFloatingFilterTextInput.getGui(), listener);\n    }\n    setupListeners(element, listener) {\n        this.addManagedListener(element, 'input', listener);\n        this.addManagedListener(element, 'keydown', listener);\n    }\n}\nclass NumberFloatingFilter extends TextInputFloatingFilter {\n    init(params) {\n        super.init(params);\n        this.filterModelFormatter = new NumberFilterModelFormatter(this.localeService, this.optionsFactory);\n    }\n    getDefaultFilterOptions() {\n        return NumberFilter.DEFAULT_FILTER_OPTIONS;\n    }\n    getFilterModelFormatter() {\n        return this.filterModelFormatter;\n    }\n    createFloatingFilterInputService(ariaLabel) {\n        const allowedCharPattern = getAllowedCharPattern(this.params.filterParams);\n        if (allowedCharPattern) {\n            // need to sue text input\n            return this.createManagedBean(new FloatingFilterTextInputService({\n                config: { allowedCharPattern },\n                ariaLabel\n            }));\n        }\n        return this.createManagedBean(new FloatingFilterNumberInputService({ ariaLabel }));\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass TextFloatingFilter extends TextInputFloatingFilter {\n    init(params) {\n        super.init(params);\n        this.filterModelFormatter = new TextFilterModelFormatter(this.localeService, this.optionsFactory);\n    }\n    getDefaultFilterOptions() {\n        return TextFilter.DEFAULT_FILTER_OPTIONS;\n    }\n    getFilterModelFormatter() {\n        return this.filterModelFormatter;\n    }\n    createFloatingFilterInputService(ariaLabel) {\n        return this.createManagedBean(new FloatingFilterTextInputService({\n            ariaLabel\n        }));\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass TouchListener {\n    constructor(eElement, preventMouseClick = false) {\n        this.destroyFuncs = [];\n        this.touching = false;\n        this.eventService = new EventService();\n        this.eElement = eElement;\n        this.preventMouseClick = preventMouseClick;\n        const startListener = this.onTouchStart.bind(this);\n        const moveListener = this.onTouchMove.bind(this);\n        const endListener = this.onTouchEnd.bind(this);\n        this.eElement.addEventListener(\"touchstart\", startListener, { passive: true });\n        this.eElement.addEventListener(\"touchmove\", moveListener, { passive: true });\n        // we set passive=false, as we want to prevent default on this event\n        this.eElement.addEventListener(\"touchend\", endListener, { passive: false });\n        this.destroyFuncs.push(() => {\n            this.eElement.removeEventListener(\"touchstart\", startListener, { passive: true });\n            this.eElement.removeEventListener(\"touchmove\", moveListener, { passive: true });\n            this.eElement.removeEventListener(\"touchend\", endListener, { passive: false });\n        });\n    }\n    getActiveTouch(touchList) {\n        for (let i = 0; i < touchList.length; i++) {\n            const matches = touchList[i].identifier === this.touchStart.identifier;\n            if (matches) {\n                return touchList[i];\n            }\n        }\n        return null;\n    }\n    addEventListener(eventType, listener) {\n        this.eventService.addEventListener(eventType, listener);\n    }\n    removeEventListener(eventType, listener) {\n        this.eventService.removeEventListener(eventType, listener);\n    }\n    onTouchStart(touchEvent) {\n        // only looking at one touch point at any time\n        if (this.touching) {\n            return;\n        }\n        this.touchStart = touchEvent.touches[0];\n        this.touching = true;\n        this.moved = false;\n        const touchStartCopy = this.touchStart;\n        window.setTimeout(() => {\n            const touchesMatch = this.touchStart === touchStartCopy;\n            if (this.touching && touchesMatch && !this.moved) {\n                this.moved = true;\n                const event = {\n                    type: TouchListener.EVENT_LONG_TAP,\n                    touchStart: this.touchStart,\n                    touchEvent: touchEvent\n                };\n                this.eventService.dispatchEvent(event);\n            }\n        }, 500);\n    }\n    onTouchMove(touchEvent) {\n        if (!this.touching) {\n            return;\n        }\n        const touch = this.getActiveTouch(touchEvent.touches);\n        if (!touch) {\n            return;\n        }\n        const eventIsFarAway = !areEventsNear(touch, this.touchStart, 4);\n        if (eventIsFarAway) {\n            this.moved = true;\n        }\n    }\n    onTouchEnd(touchEvent) {\n        if (!this.touching) {\n            return;\n        }\n        if (!this.moved) {\n            const event = {\n                type: TouchListener.EVENT_TAP,\n                touchStart: this.touchStart\n            };\n            this.eventService.dispatchEvent(event);\n            this.checkForDoubleTap();\n        }\n        // stops the tap from also been processed as a mouse click\n        if (this.preventMouseClick && touchEvent.cancelable) {\n            touchEvent.preventDefault();\n        }\n        this.touching = false;\n    }\n    checkForDoubleTap() {\n        const now = new Date().getTime();\n        if (this.lastTapTime && this.lastTapTime > 0) {\n            // if previous tap, see if duration is short enough to be considered double tap\n            const interval = now - this.lastTapTime;\n            if (interval > TouchListener.DOUBLE_TAP_MILLIS) {\n                // dispatch double tap event\n                const event = {\n                    type: TouchListener.EVENT_DOUBLE_TAP,\n                    touchStart: this.touchStart\n                };\n                this.eventService.dispatchEvent(event);\n                // this stops a tripple tap ending up as two double taps\n                this.lastTapTime = null;\n            }\n            else {\n                this.lastTapTime = now;\n            }\n        }\n        else {\n            this.lastTapTime = now;\n        }\n    }\n    destroy() {\n        this.destroyFuncs.forEach(func => func());\n    }\n}\nTouchListener.EVENT_TAP = \"tap\";\nTouchListener.EVENT_DOUBLE_TAP = \"doubleTap\";\nTouchListener.EVENT_LONG_TAP = \"longTap\";\nTouchListener.DOUBLE_TAP_MILLIS = 500;\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2d = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass SortIndicatorComp extends Component {\n    constructor(skipTemplate) {\n        super();\n        if (!skipTemplate) {\n            this.setTemplate(SortIndicatorComp.TEMPLATE);\n        }\n    }\n    attachCustomElements(eSortOrder, eSortAsc, eSortDesc, eSortMixed, eSortNone) {\n        this.eSortOrder = eSortOrder;\n        this.eSortAsc = eSortAsc;\n        this.eSortDesc = eSortDesc;\n        this.eSortMixed = eSortMixed;\n        this.eSortNone = eSortNone;\n    }\n    setupSort(column, suppressOrder = false) {\n        this.column = column;\n        this.suppressOrder = suppressOrder;\n        this.setupMultiSortIndicator();\n        const canSort = !!this.column.getColDef().sortable;\n        if (!canSort) {\n            return;\n        }\n        this.addInIcon('sortAscending', this.eSortAsc, column);\n        this.addInIcon('sortDescending', this.eSortDesc, column);\n        this.addInIcon('sortUnSort', this.eSortNone, column);\n        // Watch global events, as row group columns can effect their display column.\n        this.addManagedListener(this.eventService, Events.EVENT_SORT_CHANGED, () => this.onSortChanged());\n        // when grouping changes so can sort indexes and icons\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, () => this.onSortChanged());\n        this.onSortChanged();\n    }\n    addInIcon(iconName, eParent, column) {\n        if (eParent == null) {\n            return;\n        }\n        const eIcon = createIconNoSpan(iconName, this.gridOptionsService, column);\n        if (eIcon) {\n            eParent.appendChild(eIcon);\n        }\n    }\n    onSortChanged() {\n        this.updateIcons();\n        if (!this.suppressOrder) {\n            this.updateSortOrder();\n        }\n    }\n    updateIcons() {\n        const sortDirection = this.sortController.getDisplaySortForColumn(this.column);\n        if (this.eSortAsc) {\n            const isAscending = sortDirection === 'asc';\n            setDisplayed(this.eSortAsc, isAscending, { skipAriaHidden: true });\n        }\n        if (this.eSortDesc) {\n            const isDescending = sortDirection === 'desc';\n            setDisplayed(this.eSortDesc, isDescending, { skipAriaHidden: true });\n        }\n        if (this.eSortNone) {\n            const alwaysHideNoSort = !this.column.getColDef().unSortIcon && !this.gridOptionsService.is('unSortIcon');\n            const isNone = sortDirection === null || sortDirection === undefined;\n            setDisplayed(this.eSortNone, !alwaysHideNoSort && isNone, { skipAriaHidden: true });\n        }\n    }\n    setupMultiSortIndicator() {\n        this.addInIcon('sortUnSort', this.eSortMixed, this.column);\n        const isColumnShowingRowGroup = this.column.getColDef().showRowGroup;\n        const areGroupsCoupled = this.gridOptionsService.isColumnsSortingCoupledToGroup();\n        if (areGroupsCoupled && isColumnShowingRowGroup) {\n            // Watch global events, as row group columns can effect their display column.\n            this.addManagedListener(this.eventService, Events.EVENT_SORT_CHANGED, () => this.updateMultiSortIndicator());\n            // when grouping changes so can sort indexes and icons\n            this.addManagedListener(this.eventService, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, () => this.updateMultiSortIndicator());\n            this.updateMultiSortIndicator();\n        }\n    }\n    updateMultiSortIndicator() {\n        if (this.eSortMixed) {\n            const isMixedSort = this.sortController.getDisplaySortForColumn(this.column) === 'mixed';\n            setDisplayed(this.eSortMixed, isMixedSort, { skipAriaHidden: true });\n        }\n    }\n    // we listen here for global sort events, NOT column sort events, as we want to do this\n    // when sorting has been set on all column (if we listened just for our col (where we\n    // set the asc / desc icons) then it's possible other cols are yet to get their sorting state.\n    updateSortOrder() {\n        var _a;\n        if (!this.eSortOrder) {\n            return;\n        }\n        const allColumnsWithSorting = this.sortController.getColumnsWithSortingOrdered();\n        const indexThisCol = (_a = this.sortController.getDisplaySortIndexForColumn(this.column)) !== null && _a !== void 0 ? _a : -1;\n        const moreThanOneColSorting = allColumnsWithSorting.some(col => { var _a; return (_a = this.sortController.getDisplaySortIndexForColumn(col)) !== null && _a !== void 0 ? _a : -1 >= 1; });\n        const showIndex = indexThisCol >= 0 && moreThanOneColSorting;\n        setDisplayed(this.eSortOrder, showIndex, { skipAriaHidden: true });\n        if (indexThisCol >= 0) {\n            this.eSortOrder.innerHTML = (indexThisCol + 1).toString();\n        }\n        else {\n            clearElement(this.eSortOrder);\n        }\n    }\n}\nSortIndicatorComp.TEMPLATE = `<span class=\"ag-sort-indicator-container\">\n            <span ref=\"eSortOrder\" class=\"ag-sort-indicator-icon ag-sort-order ag-hidden\" aria-hidden=\"true\"></span>\n            <span ref=\"eSortAsc\" class=\"ag-sort-indicator-icon ag-sort-ascending-icon ag-hidden\" aria-hidden=\"true\"></span>\n            <span ref=\"eSortDesc\" class=\"ag-sort-indicator-icon ag-sort-descending-icon ag-hidden\" aria-hidden=\"true\"></span>\n            <span ref=\"eSortMixed\" class=\"ag-sort-indicator-icon ag-sort-mixed-icon ag-hidden\" aria-hidden=\"true\"></span>\n            <span ref=\"eSortNone\" class=\"ag-sort-indicator-icon ag-sort-none-icon ag-hidden\" aria-hidden=\"true\"></span>\n        </span>`;\n__decorate$2d([\n    RefSelector('eSortOrder')\n], SortIndicatorComp.prototype, \"eSortOrder\", void 0);\n__decorate$2d([\n    RefSelector('eSortAsc')\n], SortIndicatorComp.prototype, \"eSortAsc\", void 0);\n__decorate$2d([\n    RefSelector('eSortDesc')\n], SortIndicatorComp.prototype, \"eSortDesc\", void 0);\n__decorate$2d([\n    RefSelector('eSortMixed')\n], SortIndicatorComp.prototype, \"eSortMixed\", void 0);\n__decorate$2d([\n    RefSelector('eSortNone')\n], SortIndicatorComp.prototype, \"eSortNone\", void 0);\n__decorate$2d([\n    Autowired('columnModel')\n], SortIndicatorComp.prototype, \"columnModel\", void 0);\n__decorate$2d([\n    Autowired('sortController')\n], SortIndicatorComp.prototype, \"sortController\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2c = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass HeaderComp extends Component {\n    constructor() {\n        super(...arguments);\n        this.lastMovingChanged = 0;\n    }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so we need to override destroy() just to make the method public.\n    destroy() {\n        super.destroy();\n    }\n    refresh(params) {\n        this.params = params;\n        // if template changed, then recreate the whole comp, the code required to manage\n        // a changing template is to difficult for what it's worth.\n        if (this.workOutTemplate() != this.currentTemplate) {\n            return false;\n        }\n        if (this.workOutShowMenu() != this.currentShowMenu) {\n            return false;\n        }\n        if (this.workOutSort() != this.currentSort) {\n            return false;\n        }\n        this.setDisplayName(params);\n        return true;\n    }\n    workOutTemplate() {\n        let template = firstExistingValue(this.params.template, HeaderComp.TEMPLATE);\n        // take account of any newlines & whitespace before/after the actual template\n        template = template && template.trim ? template.trim() : template;\n        return template;\n    }\n    init(params) {\n        this.params = params;\n        this.currentTemplate = this.workOutTemplate();\n        this.setTemplate(this.currentTemplate);\n        this.setupTap();\n        this.setupIcons(params.column);\n        this.setMenu();\n        this.setupSort();\n        this.setupFilterIcon();\n        this.setDisplayName(params);\n    }\n    setDisplayName(params) {\n        if (this.currentDisplayName != params.displayName) {\n            this.currentDisplayName = params.displayName;\n            const displayNameSanitised = escapeString(this.currentDisplayName);\n            if (this.eText) {\n                this.eText.innerHTML = displayNameSanitised;\n            }\n        }\n    }\n    setupIcons(column) {\n        this.addInIcon('menu', this.eMenu, column);\n        this.addInIcon('filter', this.eFilter, column);\n    }\n    addInIcon(iconName, eParent, column) {\n        if (eParent == null) {\n            return;\n        }\n        const eIcon = createIconNoSpan(iconName, this.gridOptionsService, column);\n        if (eIcon) {\n            eParent.appendChild(eIcon);\n        }\n    }\n    setupTap() {\n        const { gridOptionsService } = this;\n        if (gridOptionsService.is('suppressTouch')) {\n            return;\n        }\n        const touchListener = new TouchListener(this.getGui(), true);\n        const suppressMenuHide = gridOptionsService.is('suppressMenuHide');\n        const tapMenuButton = suppressMenuHide && exists(this.eMenu);\n        const menuTouchListener = tapMenuButton ? new TouchListener(this.eMenu, true) : touchListener;\n        if (this.params.enableMenu) {\n            const eventType = tapMenuButton ? 'EVENT_TAP' : 'EVENT_LONG_TAP';\n            const showMenuFn = (event) => {\n                gridOptionsService.api.showColumnMenuAfterMouseClick(this.params.column, event.touchStart);\n            };\n            this.addManagedListener(menuTouchListener, TouchListener[eventType], showMenuFn);\n        }\n        if (this.params.enableSorting) {\n            const tapListener = (event) => {\n                const target = event.touchStart.target;\n                // When suppressMenuHide is true, a tap on the menu icon will bubble up\n                // to the header container, in that case we should not sort\n                if (suppressMenuHide && this.eMenu.contains(target)) {\n                    return;\n                }\n                this.sortController.progressSort(this.params.column, false, \"uiColumnSorted\");\n            };\n            this.addManagedListener(touchListener, TouchListener.EVENT_TAP, tapListener);\n        }\n        // if tapMenuButton is true `touchListener` and `menuTouchListener` are different\n        // so we need to make sure to destroy both listeners here\n        this.addDestroyFunc(() => touchListener.destroy());\n        if (tapMenuButton) {\n            this.addDestroyFunc(() => menuTouchListener.destroy());\n        }\n    }\n    workOutShowMenu() {\n        // we don't show the menu if on an iPad/iPhone, as the user cannot have a pointer device/\n        // However if suppressMenuHide is set to true the menu will be displayed alwasys, so it's ok\n        // to show it on iPad in this case (as hover isn't needed). If suppressMenuHide\n        // is false (default) user will need to use longpress to display the menu.\n        const menuHides = !this.gridOptionsService.is('suppressMenuHide');\n        const onIpadAndMenuHides = isIOSUserAgent() && menuHides;\n        const showMenu = this.params.enableMenu && !onIpadAndMenuHides;\n        return showMenu;\n    }\n    setMenu() {\n        // if no menu provided in template, do nothing\n        if (!this.eMenu) {\n            return;\n        }\n        this.currentShowMenu = this.workOutShowMenu();\n        if (!this.currentShowMenu) {\n            removeFromParent(this.eMenu);\n            return;\n        }\n        const suppressMenuHide = this.gridOptionsService.is('suppressMenuHide');\n        this.addManagedListener(this.eMenu, 'click', () => this.showMenu(this.eMenu));\n        this.eMenu.classList.toggle('ag-header-menu-always-show', suppressMenuHide);\n    }\n    showMenu(eventSource) {\n        if (!eventSource) {\n            eventSource = this.eMenu;\n        }\n        this.menuFactory.showMenuAfterButtonClick(this.params.column, eventSource, 'columnMenu');\n    }\n    workOutSort() {\n        return this.params.enableSorting;\n    }\n    setupSort() {\n        this.currentSort = this.params.enableSorting;\n        // eSortIndicator will not be present when customers provided custom header\n        // templates, in that case, we need to look for provided sort elements and\n        // manually create eSortIndicator.\n        if (!this.eSortIndicator) {\n            this.eSortIndicator = this.context.createBean(new SortIndicatorComp(true));\n            this.eSortIndicator.attachCustomElements(this.eSortOrder, this.eSortAsc, this.eSortDesc, this.eSortMixed, this.eSortNone);\n        }\n        this.eSortIndicator.setupSort(this.params.column);\n        // we set up the indicator prior to the check for whether this column is sortable, as it allows the indicator to\n        // set up the multi sort indicator which can appear irrelevant of whether this column can itself be sorted.\n        // this can occur in the case of a non-sortable group display column.\n        if (!this.currentSort) {\n            return;\n        }\n        const sortUsingCtrl = this.gridOptionsService.get('multiSortKey') === 'ctrl';\n        // keep track of last time the moving changed flag was set\n        this.addManagedListener(this.params.column, Column.EVENT_MOVING_CHANGED, () => {\n            this.lastMovingChanged = new Date().getTime();\n        });\n        // add the event on the header, so when clicked, we do sorting\n        if (this.eLabel) {\n            this.addManagedListener(this.eLabel, 'click', (event) => {\n                // sometimes when moving a column via dragging, this was also firing a clicked event.\n                // here is issue raised by user: https://ag-grid.zendesk.com/agent/tickets/1076\n                // this check stops sort if a) column is moving or b) column moved less than 200ms ago (so caters for race condition)\n                const moving = this.params.column.isMoving();\n                const nowTime = new Date().getTime();\n                // typically there is <2ms if moving flag was set recently, as it would be done in same VM turn\n                const movedRecently = (nowTime - this.lastMovingChanged) < 50;\n                const columnMoving = moving || movedRecently;\n                if (!columnMoving) {\n                    const multiSort = sortUsingCtrl ? (event.ctrlKey || event.metaKey) : event.shiftKey;\n                    this.params.progressSort(multiSort);\n                }\n            });\n        }\n        const onSortingChanged = () => {\n            this.addOrRemoveCssClass('ag-header-cell-sorted-asc', this.params.column.isSortAscending());\n            this.addOrRemoveCssClass('ag-header-cell-sorted-desc', this.params.column.isSortDescending());\n            this.addOrRemoveCssClass('ag-header-cell-sorted-none', this.params.column.isSortNone());\n            if (this.params.column.getColDef().showRowGroup) {\n                const sourceColumns = this.columnModel.getSourceColumnsForGroupColumn(this.params.column);\n                // this == is intentional, as it allows null and undefined to match, which are both unsorted states\n                const sortDirectionsMatch = sourceColumns === null || sourceColumns === void 0 ? void 0 : sourceColumns.every(sourceCol => this.params.column.getSort() == sourceCol.getSort());\n                const isMultiSorting = !sortDirectionsMatch;\n                this.addOrRemoveCssClass('ag-header-cell-sorted-mixed', isMultiSorting);\n            }\n        };\n        this.addManagedListener(this.eventService, Events.EVENT_SORT_CHANGED, onSortingChanged);\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, onSortingChanged);\n    }\n    setupFilterIcon() {\n        if (!this.eFilter) {\n            return;\n        }\n        this.addManagedListener(this.params.column, Column.EVENT_FILTER_CHANGED, this.onFilterChanged.bind(this));\n        this.onFilterChanged();\n    }\n    onFilterChanged() {\n        const filterPresent = this.params.column.isFilterActive();\n        setDisplayed(this.eFilter, filterPresent, { skipAriaHidden: true });\n    }\n}\nHeaderComp.TEMPLATE = `<div class=\"ag-cell-label-container\" role=\"presentation\">\n            <span ref=\"eMenu\" class=\"ag-header-icon ag-header-cell-menu-button\" aria-hidden=\"true\"></span>\n            <div ref=\"eLabel\" class=\"ag-header-cell-label\" role=\"presentation\">\n                <span ref=\"eText\" class=\"ag-header-cell-text\"></span>\n                <span ref=\"eFilter\" class=\"ag-header-icon ag-header-label-icon ag-filter-icon\" aria-hidden=\"true\"></span>\n                <ag-sort-indicator ref=\"eSortIndicator\"></ag-sort-indicator>\n            </div>\n        </div>`;\n__decorate$2c([\n    Autowired('sortController')\n], HeaderComp.prototype, \"sortController\", void 0);\n__decorate$2c([\n    Autowired('menuFactory')\n], HeaderComp.prototype, \"menuFactory\", void 0);\n__decorate$2c([\n    Autowired('columnModel')\n], HeaderComp.prototype, \"columnModel\", void 0);\n__decorate$2c([\n    RefSelector('eFilter')\n], HeaderComp.prototype, \"eFilter\", void 0);\n__decorate$2c([\n    RefSelector('eSortIndicator')\n], HeaderComp.prototype, \"eSortIndicator\", void 0);\n__decorate$2c([\n    RefSelector('eMenu')\n], HeaderComp.prototype, \"eMenu\", void 0);\n__decorate$2c([\n    RefSelector('eLabel')\n], HeaderComp.prototype, \"eLabel\", void 0);\n__decorate$2c([\n    RefSelector('eText')\n], HeaderComp.prototype, \"eText\", void 0);\n__decorate$2c([\n    RefSelector('eSortOrder')\n], HeaderComp.prototype, \"eSortOrder\", void 0);\n__decorate$2c([\n    RefSelector('eSortAsc')\n], HeaderComp.prototype, \"eSortAsc\", void 0);\n__decorate$2c([\n    RefSelector('eSortDesc')\n], HeaderComp.prototype, \"eSortDesc\", void 0);\n__decorate$2c([\n    RefSelector('eSortMixed')\n], HeaderComp.prototype, \"eSortMixed\", void 0);\n__decorate$2c([\n    RefSelector('eSortNone')\n], HeaderComp.prototype, \"eSortNone\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2b = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass HeaderGroupComp extends Component {\n    constructor() {\n        super(HeaderGroupComp.TEMPLATE);\n    }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so we need to override destroy() just to make the method public.\n    destroy() {\n        super.destroy();\n    }\n    init(params) {\n        this.params = params;\n        this.checkWarnings();\n        this.setupLabel();\n        this.addGroupExpandIcon();\n        this.setupExpandIcons();\n    }\n    checkWarnings() {\n        const paramsAny = this.params;\n        if (paramsAny.template) {\n            const message = `AG Grid: A template was provided for Header Group Comp - templates are only supported for Header Comps (not groups)`;\n            doOnce(() => console.warn(message), 'HeaderGroupComp.templateNotSupported');\n        }\n    }\n    setupExpandIcons() {\n        this.addInIcon(\"columnGroupOpened\", \"agOpened\");\n        this.addInIcon(\"columnGroupClosed\", \"agClosed\");\n        const expandAction = (event) => {\n            if (isStopPropagationForAgGrid(event)) {\n                return;\n            }\n            const newExpandedValue = !this.params.columnGroup.isExpanded();\n            this.columnModel.setColumnGroupOpened(this.params.columnGroup.getProvidedColumnGroup(), newExpandedValue, \"uiColumnExpanded\");\n        };\n        this.addTouchAndClickListeners(this.eCloseIcon, expandAction);\n        this.addTouchAndClickListeners(this.eOpenIcon, expandAction);\n        const stopPropagationAction = (event) => {\n            stopPropagationForAgGrid(event);\n        };\n        // adding stopPropagation to the double click for the icons prevents double click action happening\n        // when the icons are clicked. if the icons are double clicked, then the groups should open and\n        // then close again straight away. if we also listened to double click, then the group would open,\n        // close, then open, which is not what we want. double click should only action if the user double\n        // clicks outside of the icons.\n        this.addManagedListener(this.eCloseIcon, \"dblclick\", stopPropagationAction);\n        this.addManagedListener(this.eOpenIcon, \"dblclick\", stopPropagationAction);\n        this.addManagedListener(this.getGui(), \"dblclick\", expandAction);\n        this.updateIconVisibility();\n        const providedColumnGroup = this.params.columnGroup.getProvidedColumnGroup();\n        this.addManagedListener(providedColumnGroup, ProvidedColumnGroup.EVENT_EXPANDED_CHANGED, this.updateIconVisibility.bind(this));\n        this.addManagedListener(providedColumnGroup, ProvidedColumnGroup.EVENT_EXPANDABLE_CHANGED, this.updateIconVisibility.bind(this));\n    }\n    addTouchAndClickListeners(eElement, action) {\n        const touchListener = new TouchListener(eElement, true);\n        this.addManagedListener(touchListener, TouchListener.EVENT_TAP, action);\n        this.addDestroyFunc(() => touchListener.destroy());\n        this.addManagedListener(eElement, \"click\", action);\n    }\n    updateIconVisibility() {\n        const columnGroup = this.params.columnGroup;\n        if (columnGroup.isExpandable()) {\n            const expanded = this.params.columnGroup.isExpanded();\n            setDisplayed(this.eOpenIcon, expanded);\n            setDisplayed(this.eCloseIcon, !expanded);\n        }\n        else {\n            setDisplayed(this.eOpenIcon, false);\n            setDisplayed(this.eCloseIcon, false);\n        }\n    }\n    addInIcon(iconName, refName) {\n        const eIcon = createIconNoSpan(iconName, this.gridOptionsService, null);\n        if (eIcon) {\n            this.getRefElement(refName).appendChild(eIcon);\n        }\n    }\n    addGroupExpandIcon() {\n        if (!this.params.columnGroup.isExpandable()) {\n            setDisplayed(this.eOpenIcon, false);\n            setDisplayed(this.eCloseIcon, false);\n            return;\n        }\n    }\n    setupLabel() {\n        var _a;\n        // no renderer, default text render\n        const { displayName, columnGroup } = this.params;\n        if (exists(displayName)) {\n            const displayNameSanitised = escapeString(displayName);\n            this.getRefElement('agLabel').innerHTML = displayNameSanitised;\n        }\n        this.addOrRemoveCssClass('ag-sticky-label', !((_a = columnGroup.getColGroupDef()) === null || _a === void 0 ? void 0 : _a.suppressStickyLabel));\n    }\n}\nHeaderGroupComp.TEMPLATE = `<div class=\"ag-header-group-cell-label\" ref=\"agContainer\" role=\"presentation\">\n            <span ref=\"agLabel\" class=\"ag-header-group-text\" role=\"presentation\"></span>\n            <span ref=\"agOpened\" class=\"ag-header-icon ag-header-expand-icon ag-header-expand-icon-expanded\"></span>\n            <span ref=\"agClosed\" class=\"ag-header-icon ag-header-expand-icon ag-header-expand-icon-collapsed\"></span>\n        </div>`;\n__decorate$2b([\n    Autowired(\"columnModel\")\n], HeaderGroupComp.prototype, \"columnModel\", void 0);\n__decorate$2b([\n    RefSelector(\"agOpened\")\n], HeaderGroupComp.prototype, \"eOpenIcon\", void 0);\n__decorate$2b([\n    RefSelector(\"agClosed\")\n], HeaderGroupComp.prototype, \"eCloseIcon\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass PopupComponent extends Component {\n    isPopup() {\n        return true;\n    }\n    setParentComponent(container) {\n        container.addCssClass('ag-has-popup');\n        super.setParentComponent(container);\n    }\n    destroy() {\n        const parentComp = this.parentComponent;\n        const hasParent = parentComp && parentComp.isAlive();\n        if (hasParent) {\n            parentComp.getGui().classList.remove('ag-has-popup');\n        }\n        super.destroy();\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$2a = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass LargeTextCellEditor extends PopupComponent {\n    constructor() {\n        super(LargeTextCellEditor.TEMPLATE);\n    }\n    init(params) {\n        this.params = params;\n        this.focusAfterAttached = params.cellStartedEdit;\n        this.eTextArea\n            .setMaxLength(params.maxLength || 200)\n            .setCols(params.cols || 60)\n            .setRows(params.rows || 10);\n        if (exists(params.value, true)) {\n            this.eTextArea.setValue(params.value.toString(), true);\n        }\n        this.addGuiEventListener('keydown', this.onKeyDown.bind(this));\n    }\n    onKeyDown(event) {\n        const key = event.key;\n        if (key === KeyCode.LEFT ||\n            key === KeyCode.UP ||\n            key === KeyCode.RIGHT ||\n            key === KeyCode.DOWN ||\n            (event.shiftKey && key === KeyCode.ENTER)) { // shift+enter allows for newlines\n            event.stopPropagation();\n        }\n    }\n    afterGuiAttached() {\n        const translate = this.localeService.getLocaleTextFunc();\n        this.eTextArea.setInputAriaLabel(translate('ariaInputEditor', 'Input Editor'));\n        if (this.focusAfterAttached) {\n            this.eTextArea.getFocusableElement().focus();\n        }\n    }\n    getValue() {\n        const value = this.eTextArea.getValue();\n        if (!exists(value) && !exists(this.params.value)) {\n            return this.params.value;\n        }\n        return this.params.parseValue(value);\n    }\n}\nLargeTextCellEditor.TEMPLATE = `<div class=\"ag-large-text\" tabindex=\"0\">\n            <ag-input-text-area ref=\"eTextArea\" class=\"ag-large-text-input\"></ag-input-text-area>\n        </div>`;\n__decorate$2a([\n    RefSelector(\"eTextArea\")\n], LargeTextCellEditor.prototype, \"eTextArea\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$29 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass SelectCellEditor extends PopupComponent {\n    constructor() {\n        super('<div class=\"ag-cell-edit-wrapper\"><ag-select class=\"ag-cell-editor\" ref=\"eSelect\"></ag-select></div>');\n        this.startedByEnter = false;\n    }\n    init(params) {\n        this.focusAfterAttached = params.cellStartedEdit;\n        if (missing(params.values)) {\n            console.warn('AG Grid: no values found for select cellEditor');\n            return;\n        }\n        this.startedByEnter = params.eventKey != null ? params.eventKey === KeyCode.ENTER : false;\n        let hasValue = false;\n        params.values.forEach((value) => {\n            const option = { value };\n            const valueFormatted = this.valueFormatterService.formatValue(params.column, null, value);\n            const valueFormattedExits = valueFormatted !== null && valueFormatted !== undefined;\n            option.text = valueFormattedExits ? valueFormatted : value;\n            this.eSelect.addOption(option);\n            hasValue = hasValue || params.value === value;\n        });\n        if (hasValue) {\n            this.eSelect.setValue(params.value, true);\n        }\n        else if (params.values.length) {\n            this.eSelect.setValue(params.values[0], true);\n        }\n        // we don't want to add this if full row editing, otherwise selecting will stop the\n        // full row editing.\n        if (this.gridOptionsService.get('editType') !== 'fullRow') {\n            this.addManagedListener(this.eSelect, AgSelect.EVENT_ITEM_SELECTED, () => params.stopEditing());\n        }\n    }\n    afterGuiAttached() {\n        if (this.focusAfterAttached) {\n            this.eSelect.getFocusableElement().focus();\n        }\n        if (this.startedByEnter) {\n            this.eSelect.showPicker();\n        }\n    }\n    focusIn() {\n        this.eSelect.getFocusableElement().focus();\n    }\n    getValue() {\n        return this.eSelect.getValue();\n    }\n    isPopup() {\n        return false;\n    }\n}\n__decorate$29([\n    Autowired('valueFormatterService')\n], SelectCellEditor.prototype, \"valueFormatterService\", void 0);\n__decorate$29([\n    RefSelector('eSelect')\n], SelectCellEditor.prototype, \"eSelect\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$28 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass SimpleCellEditor extends PopupComponent {\n    constructor(cellEditorInput) {\n        super(/* html */ `\n            <div class=\"ag-cell-edit-wrapper\">\n                ${cellEditorInput.getTemplate()}\n            </div>`);\n        this.cellEditorInput = cellEditorInput;\n    }\n    init(params) {\n        this.params = params;\n        const eInput = this.eInput;\n        this.cellEditorInput.init(eInput, params);\n        let startValue;\n        // cellStartedEdit is only false if we are doing fullRow editing\n        if (params.cellStartedEdit) {\n            this.focusAfterAttached = true;\n            const eventKey = params.eventKey;\n            if (eventKey === KeyCode.BACKSPACE || params.eventKey === KeyCode.DELETE) {\n                startValue = '';\n            }\n            else if (eventKey && eventKey.length === 1) {\n                startValue = eventKey;\n            }\n            else {\n                startValue = this.cellEditorInput.getStartValue();\n                if (eventKey !== KeyCode.F2) {\n                    this.highlightAllOnFocus = true;\n                }\n            }\n        }\n        else {\n            this.focusAfterAttached = false;\n            startValue = this.cellEditorInput.getStartValue();\n        }\n        if (startValue != null) {\n            eInput.setStartValue(startValue);\n        }\n        this.addManagedListener(eInput.getGui(), 'keydown', (event) => {\n            const { key } = event;\n            if (key === KeyCode.PAGE_UP || key === KeyCode.PAGE_DOWN) {\n                event.preventDefault();\n            }\n        });\n    }\n    afterGuiAttached() {\n        var _a, _b;\n        const translate = this.localeService.getLocaleTextFunc();\n        const eInput = this.eInput;\n        eInput.setInputAriaLabel(translate('ariaInputEditor', 'Input Editor'));\n        if (!this.focusAfterAttached) {\n            return;\n        }\n        // Added for AG-3238. We can't remove this explicit focus() because Chrome requires an input\n        // to be focused before setSelectionRange will work. But it triggers a bug in Safari where\n        // explicitly focusing then blurring an empty field will cause the parent container to scroll.\n        if (!isBrowserSafari()) {\n            eInput.getFocusableElement().focus();\n        }\n        const inputEl = eInput.getInputElement();\n        if (this.highlightAllOnFocus) {\n            inputEl.select();\n        }\n        else {\n            (_b = (_a = this.cellEditorInput).setCaret) === null || _b === void 0 ? void 0 : _b.call(_a);\n        }\n    }\n    // gets called when tabbing through cells and in full row edit mode\n    focusIn() {\n        const eInput = this.eInput;\n        const focusEl = eInput.getFocusableElement();\n        const inputEl = eInput.getInputElement();\n        focusEl.focus();\n        inputEl.select();\n    }\n    getValue() {\n        return this.cellEditorInput.getValue();\n    }\n    isPopup() {\n        return false;\n    }\n}\n__decorate$28([\n    RefSelector('eInput')\n], SimpleCellEditor.prototype, \"eInput\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass TextCellEditorInput {\n    getTemplate() {\n        return /* html */ `<ag-input-text-field class=\"ag-cell-editor\" ref=\"eInput\"></ag-input-text-field>`;\n    }\n    init(eInput, params) {\n        this.eInput = eInput;\n        this.params = params;\n        if (params.maxLength != null) {\n            eInput.setMaxLength(params.maxLength);\n        }\n    }\n    getValue() {\n        const value = this.eInput.getValue();\n        if (!exists(value) && !exists(this.params.value)) {\n            return this.params.value;\n        }\n        return this.params.parseValue(value);\n    }\n    getStartValue() {\n        const formatValue = this.params.useFormatter || this.params.column.getColDef().refData;\n        return formatValue ? this.params.formatValue(this.params.value) : this.params.value;\n    }\n    setCaret() {\n        // when we started editing, we want the caret at the end, not the start.\n        // this comes into play in two scenarios:\n        //   a) when user hits F2\n        //   b) when user hits a printable character\n        const value = this.eInput.getValue();\n        const len = (exists(value) && value.length) || 0;\n        if (len) {\n            this.eInput.getInputElement().setSelectionRange(len, len);\n        }\n    }\n}\nclass TextCellEditor extends SimpleCellEditor {\n    constructor() {\n        super(new TextCellEditorInput());\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$27 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst ARROW_UP = '\\u2191';\nconst ARROW_DOWN = '\\u2193';\nclass AnimateShowChangeCellRenderer extends Component {\n    constructor() {\n        super(AnimateShowChangeCellRenderer.TEMPLATE);\n        this.refreshCount = 0;\n    }\n    init(params) {\n        // this.params = params;\n        this.eValue = this.queryForHtmlElement('.ag-value-change-value');\n        this.eDelta = this.queryForHtmlElement('.ag-value-change-delta');\n        this.refresh(params);\n    }\n    showDelta(params, delta) {\n        const absDelta = Math.abs(delta);\n        const valueFormatted = params.formatValue(absDelta);\n        const valueToUse = exists(valueFormatted) ? valueFormatted : absDelta;\n        const deltaUp = (delta >= 0);\n        if (deltaUp) {\n            this.eDelta.innerHTML = ARROW_UP + valueToUse;\n        }\n        else {\n            // because negative, use ABS to remove sign\n            this.eDelta.innerHTML = ARROW_DOWN + valueToUse;\n        }\n        this.eDelta.classList.toggle('ag-value-change-delta-up', deltaUp);\n        this.eDelta.classList.toggle('ag-value-change-delta-down', !deltaUp);\n    }\n    setTimerToRemoveDelta() {\n        // the refreshCount makes sure that if the value updates again while\n        // the below timer is waiting, then the below timer will realise it\n        // is not the most recent and will not try to remove the delta value.\n        this.refreshCount++;\n        const refreshCountCopy = this.refreshCount;\n        window.setTimeout(() => {\n            if (refreshCountCopy === this.refreshCount) {\n                this.hideDeltaValue();\n            }\n        }, 2000);\n    }\n    hideDeltaValue() {\n        this.eValue.classList.remove('ag-value-change-value-highlight');\n        clearElement(this.eDelta);\n    }\n    refresh(params) {\n        const value = params.value;\n        if (value === this.lastValue) {\n            return false;\n        }\n        if (exists(params.valueFormatted)) {\n            this.eValue.innerHTML = params.valueFormatted;\n        }\n        else if (exists(params.value)) {\n            this.eValue.innerHTML = value;\n        }\n        else {\n            clearElement(this.eValue);\n        }\n        // we don't show the delta if we are in the middle of a filter. see comment on FilterManager\n        // with regards processingFilterChange\n        if (this.filterManager.isSuppressFlashingCellsBecauseFiltering()) {\n            return false;\n        }\n        if (typeof value === 'number' && typeof this.lastValue === 'number') {\n            const delta = value - this.lastValue;\n            this.showDelta(params, delta);\n        }\n        // highlight the current value, but only if it's not new, otherwise it\n        // would get highlighted first time the value is shown\n        if (this.lastValue) {\n            this.eValue.classList.add('ag-value-change-value-highlight');\n        }\n        this.setTimerToRemoveDelta();\n        this.lastValue = value;\n        return true;\n    }\n}\nAnimateShowChangeCellRenderer.TEMPLATE = '<span>' +\n    '<span class=\"ag-value-change-delta\"></span>' +\n    '<span class=\"ag-value-change-value\"></span>' +\n    '</span>';\n__decorate$27([\n    Autowired('filterManager')\n], AnimateShowChangeCellRenderer.prototype, \"filterManager\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$26 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AnimateSlideCellRenderer extends Component {\n    constructor() {\n        super(AnimateSlideCellRenderer.TEMPLATE);\n        this.refreshCount = 0;\n        this.eCurrent = this.queryForHtmlElement('.ag-value-slide-current');\n    }\n    init(params) {\n        this.refresh(params);\n    }\n    addSlideAnimation() {\n        this.refreshCount++;\n        // below we keep checking this, and stop working on the animation\n        // if it no longer matches - this means another animation has started\n        // and this one is stale.\n        const refreshCountCopy = this.refreshCount;\n        // if old animation, remove it\n        if (this.ePrevious) {\n            this.getGui().removeChild(this.ePrevious);\n        }\n        this.ePrevious = loadTemplate('<span class=\"ag-value-slide-previous ag-value-slide-out\"></span>');\n        this.ePrevious.innerHTML = this.eCurrent.innerHTML;\n        this.getGui().insertBefore(this.ePrevious, this.eCurrent);\n        // having timeout of 0 allows use to skip to the next css turn,\n        // so we know the previous css classes have been applied. so the\n        // complex set of setTimeout below creates the animation\n        window.setTimeout(() => {\n            if (refreshCountCopy !== this.refreshCount) {\n                return;\n            }\n            this.ePrevious.classList.add('ag-value-slide-out-end');\n        }, 50);\n        window.setTimeout(() => {\n            if (refreshCountCopy !== this.refreshCount) {\n                return;\n            }\n            this.getGui().removeChild(this.ePrevious);\n            this.ePrevious = null;\n        }, 3000);\n    }\n    refresh(params) {\n        let value = params.value;\n        if (missing(value)) {\n            value = '';\n        }\n        if (value === this.lastValue) {\n            return false;\n        }\n        // we don't show the delta if we are in the middle of a filter. see comment on FilterManager\n        // with regards processingFilterChange\n        if (this.filterManager.isSuppressFlashingCellsBecauseFiltering()) {\n            return false;\n        }\n        this.addSlideAnimation();\n        this.lastValue = value;\n        if (exists(params.valueFormatted)) {\n            this.eCurrent.innerHTML = params.valueFormatted;\n        }\n        else if (exists(params.value)) {\n            this.eCurrent.innerHTML = value;\n        }\n        else {\n            clearElement(this.eCurrent);\n        }\n        return true;\n    }\n}\nAnimateSlideCellRenderer.TEMPLATE = `<span>\n            <span class=\"ag-value-slide-current\"></span>\n        </span>`;\n__decorate$26([\n    Autowired('filterManager')\n], AnimateSlideCellRenderer.prototype, \"filterManager\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass RowNode {\n    constructor(beans) {\n        /** The current row index. If the row is filtered out or in a collapsed group, this value will be `null`. */\n        this.rowIndex = null;\n        /** The key for the group eg Ireland, UK, USA */\n        this.key = null;\n        /** Children mapped by the pivot columns. */\n        this.childrenMapped = {};\n        /**\n         * This will be `true` if it has a rowIndex assigned, otherwise `false`.\n         */\n        this.displayed = false;\n        /** The row top position in pixels. */\n        this.rowTop = null;\n        /** The top pixel for this row last time, makes sense if data set was ordered or filtered,\n         * it is used so new rows can animate in from their old position. */\n        this.oldRowTop = null;\n        /** `true` by default - can be overridden via gridOptions.isRowSelectable(rowNode) */\n        this.selectable = true;\n        /** Used by sorting service - to give deterministic sort to groups. Previously we\n         * just id for this, however id is a string and had slower sorting compared to numbers. */\n        this.__objectId = RowNode.OBJECT_ID_SEQUENCE++;\n        /** When one or more Columns are using autoHeight, this keeps track of height of each autoHeight Cell,\n         * indexed by the Column ID. */\n        this.__autoHeights = {};\n        /** `true` when nodes with the same id are being removed and added as part of the same batch transaction */\n        this.alreadyRendered = false;\n        this.highlighted = null;\n        this.hovered = false;\n        this.selected = false;\n        this.beans = beans;\n    }\n    /**\n     * Replaces the data on the `rowNode`. When this method is called, the grid will refresh the entire rendered row if it is displayed.\n     */\n    setData(data) {\n        this.setDataCommon(data, false);\n    }\n    // similar to setRowData, however it is expected that the data is the same data item. this\n    // is intended to be used with Redux type stores, where the whole data can be changed. we are\n    // guaranteed that the data is the same entity (so grid doesn't need to worry about the id of the\n    // underlying data changing, hence doesn't need to worry about selection). the grid, upon receiving\n    // dataChanged event, will refresh the cells rather than rip them all out (so user can show transitions).\n    /**\n     * Updates the data on the `rowNode`. When this method is called, the grid will refresh the entire rendered row if it is displayed.\n     */\n    updateData(data) {\n        this.setDataCommon(data, true);\n    }\n    setDataCommon(data, update) {\n        const oldData = this.data;\n        this.data = data;\n        this.beans.valueCache.onDataChanged();\n        this.updateDataOnDetailNode();\n        this.checkRowSelectable();\n        this.resetQuickFilterAggregateText();\n        const event = this.createDataChangedEvent(data, oldData, update);\n        this.dispatchLocalEvent(event);\n    }\n    // when we are doing master / detail, the detail node is lazy created, but then kept around.\n    // so if we show / hide the detail, the same detail rowNode is used. so we need to keep the data\n    // in sync, otherwise expand/collapse of the detail would still show the old values.\n    updateDataOnDetailNode() {\n        if (this.detailNode) {\n            this.detailNode.data = this.data;\n        }\n    }\n    createDataChangedEvent(newData, oldData, update) {\n        return {\n            type: RowNode.EVENT_DATA_CHANGED,\n            node: this,\n            oldData: oldData,\n            newData: newData,\n            update: update\n        };\n    }\n    createLocalRowEvent(type) {\n        return {\n            type: type,\n            node: this\n        };\n    }\n    getRowIndexString() {\n        if (this.rowPinned === 'top') {\n            return 't-' + this.rowIndex;\n        }\n        if (this.rowPinned === 'bottom') {\n            return 'b-' + this.rowIndex;\n        }\n        return this.rowIndex.toString();\n    }\n    createDaemonNode() {\n        const oldNode = new RowNode(this.beans);\n        // just copy the id and data, this is enough for the node to be used\n        // in the selection controller (the selection controller is the only\n        // place where daemon nodes can live).\n        oldNode.id = this.id;\n        oldNode.data = this.data;\n        oldNode.__daemon = true;\n        oldNode.selected = this.selected;\n        oldNode.level = this.level;\n        return oldNode;\n    }\n    setDataAndId(data, id) {\n        const oldNode = exists(this.id) ? this.createDaemonNode() : null;\n        const oldData = this.data;\n        this.data = data;\n        this.updateDataOnDetailNode();\n        this.setId(id);\n        this.beans.selectionService.syncInRowNode(this, oldNode);\n        this.checkRowSelectable();\n        const event = this.createDataChangedEvent(data, oldData, false);\n        this.dispatchLocalEvent(event);\n    }\n    checkRowSelectable() {\n        const isRowSelectableFunc = this.beans.gridOptionsService.get('isRowSelectable');\n        this.setRowSelectable(isRowSelectableFunc ? isRowSelectableFunc(this) : true);\n    }\n    setRowSelectable(newVal) {\n        if (this.selectable !== newVal) {\n            this.selectable = newVal;\n            if (this.eventService) {\n                this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_SELECTABLE_CHANGED));\n            }\n            const isGroupSelectsChildren = this.beans.gridOptionsService.is('groupSelectsChildren');\n            if (isGroupSelectsChildren) {\n                const selected = this.calculateSelectedFromChildren();\n                this.setSelectedParams({\n                    newValue: selected !== null && selected !== void 0 ? selected : false,\n                    source: 'selectableChanged',\n                });\n            }\n        }\n    }\n    setId(id) {\n        // see if user is providing the id's\n        const getRowIdFunc = this.beans.gridOptionsService.getCallback('getRowId');\n        if (getRowIdFunc) {\n            // if user is providing the id's, then we set the id only after the data has been set.\n            // this is important for virtual pagination and viewport, where empty rows exist.\n            if (this.data) {\n                // we pass 'true' as we skip this level when generating keys,\n                // as we don't always have the key for this level (eg when updating\n                // data via transaction on SSRM, we are getting key to look up the\n                // RowNode, don't have the RowNode yet, thus no way to get the current key)\n                const parentKeys = this.getGroupKeys(true);\n                this.id = getRowIdFunc({\n                    data: this.data,\n                    parentKeys: parentKeys.length > 0 ? parentKeys : undefined,\n                    level: this.level\n                });\n                // make sure id provided doesn't start with 'row-group-' as this is reserved. also check that\n                // it has 'startsWith' in case the user provided a number.\n                if (this.id !== null && typeof this.id === 'string' && this.id.startsWith(RowNode.ID_PREFIX_ROW_GROUP)) {\n                    console.error(`AG Grid: Row IDs cannot start with ${RowNode.ID_PREFIX_ROW_GROUP}, this is a reserved prefix for AG Grid's row grouping feature.`);\n                }\n                // force id to be a string\n                if (this.id !== null && typeof this.id !== 'string') {\n                    this.id = '' + this.id;\n                }\n            }\n            else {\n                // this can happen if user has set blank into the rowNode after the row previously\n                // having data. this happens in virtual page row model, when data is delete and\n                // the page is refreshed.\n                this.id = undefined;\n            }\n        }\n        else {\n            this.id = id;\n        }\n    }\n    getGroupKeys(excludeSelf = false) {\n        const keys = [];\n        let pointer = this;\n        if (excludeSelf) {\n            pointer = pointer.parent;\n        }\n        while (pointer && pointer.level >= 0) {\n            keys.push(pointer.key);\n            pointer = pointer.parent;\n        }\n        keys.reverse();\n        return keys;\n    }\n    isPixelInRange(pixel) {\n        if (!exists(this.rowTop) || !exists(this.rowHeight)) {\n            return false;\n        }\n        return pixel >= this.rowTop && pixel < (this.rowTop + this.rowHeight);\n    }\n    setFirstChild(firstChild) {\n        if (this.firstChild === firstChild) {\n            return;\n        }\n        this.firstChild = firstChild;\n        if (this.eventService) {\n            this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_FIRST_CHILD_CHANGED));\n        }\n    }\n    setLastChild(lastChild) {\n        if (this.lastChild === lastChild) {\n            return;\n        }\n        this.lastChild = lastChild;\n        if (this.eventService) {\n            this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_LAST_CHILD_CHANGED));\n        }\n    }\n    setChildIndex(childIndex) {\n        if (this.childIndex === childIndex) {\n            return;\n        }\n        this.childIndex = childIndex;\n        if (this.eventService) {\n            this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_CHILD_INDEX_CHANGED));\n        }\n    }\n    setRowTop(rowTop) {\n        this.oldRowTop = this.rowTop;\n        if (this.rowTop === rowTop) {\n            return;\n        }\n        this.rowTop = rowTop;\n        if (this.eventService) {\n            this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_TOP_CHANGED));\n        }\n        this.setDisplayed(rowTop !== null);\n    }\n    clearRowTopAndRowIndex() {\n        this.oldRowTop = null;\n        this.setRowTop(null);\n        this.setRowIndex(null);\n    }\n    setDisplayed(displayed) {\n        if (this.displayed === displayed) {\n            return;\n        }\n        this.displayed = displayed;\n        if (this.eventService) {\n            this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_DISPLAYED_CHANGED));\n        }\n    }\n    setDragging(dragging) {\n        if (this.dragging === dragging) {\n            return;\n        }\n        this.dragging = dragging;\n        if (this.eventService) {\n            this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_DRAGGING_CHANGED));\n        }\n    }\n    setHighlighted(highlighted) {\n        if (highlighted === this.highlighted) {\n            return;\n        }\n        this.highlighted = highlighted;\n        if (this.eventService) {\n            this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_HIGHLIGHT_CHANGED));\n        }\n    }\n    setHovered(hovered) {\n        if (this.hovered === hovered) {\n            return;\n        }\n        this.hovered = hovered;\n    }\n    isHovered() {\n        return this.hovered;\n    }\n    setAllChildrenCount(allChildrenCount) {\n        if (this.allChildrenCount === allChildrenCount) {\n            return;\n        }\n        this.allChildrenCount = allChildrenCount;\n        if (this.eventService) {\n            this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_ALL_CHILDREN_COUNT_CHANGED));\n        }\n    }\n    setMaster(master) {\n        if (this.master === master) {\n            return;\n        }\n        // if changing AWAY from master, then unexpand, otherwise\n        // next time it's shown it is expanded again\n        if (this.master && !master) {\n            this.expanded = false;\n        }\n        this.master = master;\n        if (this.eventService) {\n            this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_MASTER_CHANGED));\n        }\n    }\n    setGroup(group) {\n        if (this.group === group) {\n            return;\n        }\n        // if we used to be a group, and no longer, then close the node\n        if (this.group && !group) {\n            this.expanded = false;\n        }\n        this.group = group;\n        this.updateHasChildren();\n        if (this.eventService) {\n            this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_GROUP_CHANGED));\n        }\n    }\n    /**\n     * Sets the row height.\n     * Call if you want to change the height initially assigned to the row.\n     * After calling, you must call `api.onRowHeightChanged()` so the grid knows it needs to work out the placement of the rows. */\n    setRowHeight(rowHeight, estimated = false) {\n        this.rowHeight = rowHeight;\n        this.rowHeightEstimated = estimated;\n        if (this.eventService) {\n            this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_HEIGHT_CHANGED));\n        }\n    }\n    setRowAutoHeight(cellHeight, column) {\n        if (!this.__autoHeights) {\n            this.__autoHeights = {};\n        }\n        this.__autoHeights[column.getId()] = cellHeight;\n        if (cellHeight != null) {\n            if (this.checkAutoHeightsDebounced == null) {\n                this.checkAutoHeightsDebounced = debounce(this.checkAutoHeights.bind(this), 1);\n            }\n            this.checkAutoHeightsDebounced();\n        }\n    }\n    checkAutoHeights() {\n        let notAllPresent = false;\n        let nonePresent = true;\n        let newRowHeight = 0;\n        const autoHeights = this.__autoHeights;\n        if (autoHeights == null) {\n            return;\n        }\n        const displayedAutoHeightCols = this.beans.columnModel.getAllDisplayedAutoHeightCols();\n        displayedAutoHeightCols.forEach(col => {\n            let cellHeight = autoHeights[col.getId()];\n            if (cellHeight == null) {\n                // If column spanning is active a column may not provide auto height for a row if that\n                // cell is not present for the given row due to a previous cell spanning over the auto height column.\n                if (this.beans.columnModel.isColSpanActive()) {\n                    let activeColsForRow = [];\n                    switch (col.getPinned()) {\n                        case 'left':\n                            activeColsForRow = this.beans.columnModel.getDisplayedLeftColumnsForRow(this);\n                            break;\n                        case 'right':\n                            activeColsForRow = this.beans.columnModel.getDisplayedRightColumnsForRow(this);\n                            break;\n                        case null:\n                            activeColsForRow = this.beans.columnModel.getViewportCenterColumnsForRow(this);\n                            break;\n                    }\n                    if (activeColsForRow.includes(col)) {\n                        // Column is present in the row, i.e not spanned over, but no auto height was provided so we cannot calculate the row height\n                        notAllPresent = true;\n                        return;\n                    }\n                    // Ignore this column as it is spanned over and not present in the row\n                    cellHeight = -1;\n                }\n                else {\n                    notAllPresent = true;\n                    return;\n                }\n            }\n            else {\n                // At least one auto height is present\n                nonePresent = false;\n            }\n            if (cellHeight > newRowHeight) {\n                newRowHeight = cellHeight;\n            }\n        });\n        if (notAllPresent) {\n            return;\n        }\n        // we take min of 10, so we don't adjust for empty rows. if <10, we put to default.\n        // this prevents the row starting very small when waiting for async components,\n        // which would then mean the grid squashes in far to many rows (as small heights\n        // means more rows fit in) which looks crap. so best ignore small values and assume\n        // we are still waiting for values to render.\n        if (nonePresent || newRowHeight < 10) {\n            newRowHeight = this.beans.gridOptionsService.getRowHeightForNode(this).height;\n        }\n        if (newRowHeight == this.rowHeight) {\n            return;\n        }\n        this.setRowHeight(newRowHeight);\n        const rowModel = this.beans.rowModel;\n        if (rowModel.onRowHeightChangedDebounced) {\n            rowModel.onRowHeightChangedDebounced();\n        }\n    }\n    setRowIndex(rowIndex) {\n        if (this.rowIndex === rowIndex) {\n            return;\n        }\n        this.rowIndex = rowIndex;\n        if (this.eventService) {\n            this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_ROW_INDEX_CHANGED));\n        }\n    }\n    setUiLevel(uiLevel) {\n        if (this.uiLevel === uiLevel) {\n            return;\n        }\n        this.uiLevel = uiLevel;\n        if (this.eventService) {\n            this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_UI_LEVEL_CHANGED));\n        }\n    }\n    /**\n     * Set the expanded state of this rowNode. Pass `true` to expand and `false` to collapse.\n     */\n    setExpanded(expanded, e) {\n        if (this.expanded === expanded) {\n            return;\n        }\n        this.expanded = expanded;\n        if (this.eventService) {\n            this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_EXPANDED_CHANGED));\n        }\n        const event = Object.assign({}, this.createGlobalRowEvent(Events.EVENT_ROW_GROUP_OPENED), {\n            expanded,\n            event: e || null\n        });\n        this.beans.rowNodeEventThrottle.dispatchExpanded(event);\n        // when using footers we need to refresh the group row, as the aggregation\n        // values jump between group and footer\n        if (this.beans.gridOptionsService.is('groupIncludeFooter')) {\n            this.beans.rowRenderer.refreshCells({ rowNodes: [this] });\n        }\n    }\n    createGlobalRowEvent(type) {\n        return {\n            type: type,\n            node: this,\n            data: this.data,\n            rowIndex: this.rowIndex,\n            rowPinned: this.rowPinned,\n            context: this.beans.gridOptionsService.context,\n            api: this.beans.gridOptionsService.api,\n            columnApi: this.beans.gridOptionsService.columnApi\n        };\n    }\n    dispatchLocalEvent(event) {\n        if (this.eventService) {\n            this.eventService.dispatchEvent(event);\n        }\n    }\n    /**\n     * Replaces the value on the `rowNode` for the specified column. When complete,\n     * the grid will refresh the rendered cell on the required row only.\n     * **Note**: This method only fires `onCellEditRequest` when the Grid is in **Read Only** mode.\n     *\n     * @param colKey The column where the value should be updated\n     * @param newValue The new value\n     * @param eventSource The source of the event\n     * @returns `true` if the value was changed, otherwise `false`.\n     */\n    setDataValue(colKey, newValue, eventSource) {\n        const getColumnFromKey = () => {\n            var _a;\n            if (typeof colKey !== 'string') {\n                return colKey;\n            }\n            // if in pivot mode, grid columns wont include primary columns\n            return (_a = this.beans.columnModel.getGridColumn(colKey)) !== null && _a !== void 0 ? _a : this.beans.columnModel.getPrimaryColumn(colKey);\n        };\n        // When it is done via the editors, no 'cell changed' event gets fired, as it's assumed that\n        // the cell knows about the change given it's in charge of the editing.\n        // this method is for the client to call, so the cell listens for the change\n        // event, and also flashes the cell when the change occurs.\n        const column = getColumnFromKey();\n        const oldValue = this.getValueFromValueService(column);\n        if (this.beans.gridOptionsService.is('readOnlyEdit')) {\n            this.dispatchEventForSaveValueReadOnly(column, oldValue, newValue, eventSource);\n            return false;\n        }\n        const valueChanged = this.beans.valueService.setValue(this, column, newValue, eventSource);\n        this.dispatchCellChangedEvent(column, newValue, oldValue);\n        this.checkRowSelectable();\n        return valueChanged;\n    }\n    getValueFromValueService(column) {\n        // if we don't check this, then the grid will render leaf groups as open even if we are not\n        // allowing the user to open leaf groups. confused? remember for pivot mode we don't allow\n        // opening leaf groups, so we have to force leafGroups to be closed in case the user expanded\n        // them via the API, or user user expanded them in the UI before turning on pivot mode\n        const lockedClosedGroup = this.leafGroup && this.beans.columnModel.isPivotMode();\n        const isOpenGroup = this.group && this.expanded && !this.footer && !lockedClosedGroup;\n        // are we showing group footers\n        const groupFootersEnabled = this.beans.gridOptionsService.is('groupIncludeFooter');\n        // if doing footers, we normally don't show agg data at group level when group is open\n        const groupAlwaysShowAggData = this.beans.gridOptionsService.is('groupSuppressBlankHeader');\n        // if doing grouping and footers, we don't want to include the agg value\n        // in the header when the group is open\n        const ignoreAggData = (isOpenGroup && groupFootersEnabled) && !groupAlwaysShowAggData;\n        const value = this.beans.valueService.getValue(column, this, false, ignoreAggData);\n        return value;\n    }\n    dispatchEventForSaveValueReadOnly(column, oldValue, newValue, eventSource) {\n        const event = {\n            type: Events.EVENT_CELL_EDIT_REQUEST,\n            event: null,\n            rowIndex: this.rowIndex,\n            rowPinned: this.rowPinned,\n            column: column,\n            colDef: column.getColDef(),\n            context: this.beans.gridOptionsService.context,\n            api: this.beans.gridOptionsService.api,\n            columnApi: this.beans.gridOptionsService.columnApi,\n            data: this.data,\n            node: this,\n            oldValue,\n            newValue,\n            value: newValue,\n            source: eventSource\n        };\n        this.beans.eventService.dispatchEvent(event);\n    }\n    setGroupValue(colKey, newValue) {\n        const column = this.beans.columnModel.getGridColumn(colKey);\n        if (missing(this.groupData)) {\n            this.groupData = {};\n        }\n        const columnId = column.getColId();\n        const oldValue = this.groupData[columnId];\n        if (oldValue === newValue) {\n            return;\n        }\n        this.groupData[columnId] = newValue;\n        this.dispatchCellChangedEvent(column, newValue, oldValue);\n    }\n    // sets the data for an aggregation\n    setAggData(newAggData) {\n        // find out all keys that could potentially change\n        const colIds = getAllKeysInObjects([this.aggData, newAggData]);\n        const oldAggData = this.aggData;\n        this.aggData = newAggData;\n        // if no event service, nobody has registered for events, so no need fire event\n        if (this.eventService) {\n            colIds.forEach(colId => {\n                const column = this.beans.columnModel.getGridColumn(colId);\n                const value = this.aggData ? this.aggData[colId] : undefined;\n                const oldValue = oldAggData ? oldAggData[colId] : undefined;\n                this.dispatchCellChangedEvent(column, value, oldValue);\n            });\n        }\n    }\n    updateHasChildren() {\n        // in CSRM, the group property will be set before the childrenAfterGroup property, check both to prevent flickering\n        let newValue = (this.group && !this.footer) || (this.childrenAfterGroup && this.childrenAfterGroup.length > 0);\n        const isSsrm = this.beans.gridOptionsService.isRowModelType('serverSide');\n        if (isSsrm) {\n            const isTreeData = this.beans.gridOptionsService.isTreeData();\n            const isGroupFunc = this.beans.gridOptionsService.get('isServerSideGroup');\n            // stubs and footers can never have children, as they're grid rows. if tree data the presence of children\n            // is determined by the isServerSideGroup callback, if not tree data then the rows group property will be set.\n            newValue = !this.stub && !this.footer && (isTreeData ? !!isGroupFunc && isGroupFunc(this.data) : !!this.group);\n        }\n        if (newValue !== this.__hasChildren) {\n            this.__hasChildren = !!newValue;\n            if (this.eventService) {\n                this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_HAS_CHILDREN_CHANGED));\n            }\n        }\n    }\n    hasChildren() {\n        if (this.__hasChildren == null) {\n            this.updateHasChildren();\n        }\n        return this.__hasChildren;\n    }\n    isEmptyRowGroupNode() {\n        return this.group && missingOrEmpty(this.childrenAfterGroup);\n    }\n    dispatchCellChangedEvent(column, newValue, oldValue) {\n        const cellChangedEvent = {\n            type: RowNode.EVENT_CELL_CHANGED,\n            node: this,\n            column: column,\n            newValue: newValue,\n            oldValue: oldValue\n        };\n        this.dispatchLocalEvent(cellChangedEvent);\n    }\n    /**\n     * The first time `quickFilter` runs, the grid creates a one-off string representation of the row.\n     * This string is then used for the quick filter instead of hitting each column separately.\n     * When you edit, using grid editing, this string gets cleared down.\n     * However if you edit without using grid editing, you will need to clear this string down for the row to be updated with the new values.\n     * Otherwise new values will not work with the `quickFilter`. */\n    resetQuickFilterAggregateText() {\n        this.quickFilterAggregateText = null;\n    }\n    /** Returns:\n    * - `true` if the node can be expanded, i.e it is a group or master row.\n    * - `false` if the node cannot be expanded\n    */\n    isExpandable() {\n        return (this.hasChildren() && !this.footer) || this.master ? true : false;\n    }\n    /** Returns:\n     * - `true` if node is selected,\n     * - `false` if the node isn't selected\n     * - `undefined` if it's partially selected (group where not all children are selected). */\n    isSelected() {\n        // for footers, we just return what our sibling selected state is, as cannot select a footer\n        if (this.footer) {\n            return this.sibling.isSelected();\n        }\n        return this.selected;\n    }\n    /** Perform a depth-first search of this node and its children. */\n    depthFirstSearch(callback) {\n        if (this.childrenAfterGroup) {\n            this.childrenAfterGroup.forEach(child => child.depthFirstSearch(callback));\n        }\n        callback(this);\n    }\n    // + selectionController.calculatedSelectedForAllGroupNodes()\n    calculateSelectedFromChildren() {\n        var _a;\n        let atLeastOneSelected = false;\n        let atLeastOneDeSelected = false;\n        let atLeastOneMixed = false;\n        if (!((_a = this.childrenAfterGroup) === null || _a === void 0 ? void 0 : _a.length)) {\n            return this.selectable ? this.selected : null;\n        }\n        for (let i = 0; i < this.childrenAfterGroup.length; i++) {\n            const child = this.childrenAfterGroup[i];\n            let childState = child.isSelected();\n            // non-selectable nodes must be calculated from their children, or ignored if no value results.\n            if (!child.selectable) {\n                const selectable = child.calculateSelectedFromChildren();\n                if (selectable === null) {\n                    continue;\n                }\n                childState = selectable;\n            }\n            switch (childState) {\n                case true:\n                    atLeastOneSelected = true;\n                    break;\n                case false:\n                    atLeastOneDeSelected = true;\n                    break;\n                default:\n                    atLeastOneMixed = true;\n                    break;\n            }\n        }\n        if (atLeastOneMixed || (atLeastOneSelected && atLeastOneDeSelected)) {\n            return undefined;\n        }\n        if (atLeastOneSelected) {\n            return true;\n        }\n        if (atLeastOneDeSelected) {\n            return false;\n        }\n        if (!this.selectable) {\n            return null;\n        }\n        return this.selected;\n    }\n    setSelectedInitialValue(selected) {\n        this.selected = selected;\n    }\n    selectThisNode(newValue, e, source = 'api') {\n        // we only check selectable when newValue=true (ie selecting) to allow unselecting values,\n        // as selectable is dynamic, need a way to unselect rows when selectable becomes false.\n        const selectionNotAllowed = !this.selectable && newValue;\n        const selectionNotChanged = this.selected === newValue;\n        if (selectionNotAllowed || selectionNotChanged) {\n            return false;\n        }\n        this.selected = newValue;\n        if (this.eventService) {\n            this.dispatchLocalEvent(this.createLocalRowEvent(RowNode.EVENT_ROW_SELECTED));\n        }\n        const event = Object.assign(Object.assign({}, this.createGlobalRowEvent(Events.EVENT_ROW_SELECTED)), { event: e || null, source });\n        this.beans.eventService.dispatchEvent(event);\n        return true;\n    }\n    /**\n     * Select (or deselect) the node.\n     * @param newValue -`true` for selection, `false` for deselection.\n     * @param clearSelection - If selecting, then passing `true` will select the node exclusively (i.e. NOT do multi select). If doing deselection, `clearSelection` has no impact.\n     * @param source - Source property that will appear in the `selectionChanged` event.\n     */\n    setSelected(newValue, clearSelection = false, source = 'api') {\n        if (typeof source === 'boolean') {\n            console.warn('AG Grid: since version v30, rowNode.setSelected() property `suppressFinishActions` has been removed, please use `gridApi.setNodesSelected()` for bulk actions, and the event `source` property for ignoring events instead.');\n            return;\n        }\n        this.setSelectedParams({\n            newValue,\n            clearSelection,\n            rangeSelect: false,\n            source\n        });\n    }\n    // this is for internal use only. To make calling code more readable, this is the same method as setSelected except it takes names parameters\n    setSelectedParams(params) {\n        if (this.rowPinned) {\n            console.warn('AG Grid: cannot select pinned rows');\n            return 0;\n        }\n        if (this.id === undefined) {\n            console.warn('AG Grid: cannot select node until id for node is known');\n            return 0;\n        }\n        return this.beans.selectionService.setNodesSelected(Object.assign(Object.assign({}, params), { nodes: [this.footer ? this.sibling : this] }));\n    }\n    /**\n     * Returns:\n     * - `true` if node is either pinned to the `top` or `bottom`\n     * - `false` if the node isn't pinned\n     */\n    isRowPinned() {\n        return this.rowPinned === 'top' || this.rowPinned === 'bottom';\n    }\n    isParentOfNode(potentialParent) {\n        let parentNode = this.parent;\n        while (parentNode) {\n            if (parentNode === potentialParent) {\n                return true;\n            }\n            parentNode = parentNode.parent;\n        }\n        return false;\n    }\n    /** Add an event listener. */\n    addEventListener(eventType, listener) {\n        if (!this.eventService) {\n            this.eventService = new EventService();\n        }\n        this.eventService.addEventListener(eventType, listener);\n    }\n    /** Remove event listener. */\n    removeEventListener(eventType, listener) {\n        if (!this.eventService) {\n            return;\n        }\n        this.eventService.removeEventListener(eventType, listener);\n        if (this.eventService.noRegisteredListenersExist()) {\n            this.eventService = null;\n        }\n    }\n    onMouseEnter() {\n        this.dispatchLocalEvent(this.createLocalRowEvent(RowNode.EVENT_MOUSE_ENTER));\n    }\n    onMouseLeave() {\n        this.dispatchLocalEvent(this.createLocalRowEvent(RowNode.EVENT_MOUSE_LEAVE));\n    }\n    getFirstChildOfFirstChild(rowGroupColumn) {\n        let currentRowNode = this;\n        let isCandidate = true;\n        let foundFirstChildPath = false;\n        let nodeToSwapIn = null;\n        // if we are hiding groups, then if we are the first child, of the first child,\n        // all the way up to the column we are interested in, then we show the group cell.\n        while (isCandidate && !foundFirstChildPath) {\n            const parentRowNode = currentRowNode.parent;\n            const firstChild = exists(parentRowNode) && currentRowNode.firstChild;\n            if (firstChild) {\n                if (parentRowNode.rowGroupColumn === rowGroupColumn) {\n                    foundFirstChildPath = true;\n                    nodeToSwapIn = parentRowNode;\n                }\n            }\n            else {\n                isCandidate = false;\n            }\n            currentRowNode = parentRowNode;\n        }\n        return foundFirstChildPath ? nodeToSwapIn : null;\n    }\n    /**\n     * Returns:\n     * - `true` if the node is a full width cell\n     * - `false` if the node is not a full width cell\n     */\n    isFullWidthCell() {\n        const isFullWidthCellFunc = this.beans.gridOptionsService.getCallback('isFullWidthRow');\n        return isFullWidthCellFunc ? isFullWidthCellFunc({ rowNode: this }) : false;\n    }\n    /**\n     * Returns the route of the row node. If the Row Node is a group, it returns the route to that Row Node.\n     * If the Row Node is not a group, it returns `undefined`.\n     */\n    getRoute() {\n        if (this.key == null) {\n            return;\n        }\n        const res = [];\n        let pointer = this;\n        while (pointer.key != null) {\n            res.push(pointer.key);\n            pointer = pointer.parent;\n        }\n        return res.reverse();\n    }\n    createFooter() {\n        // only create footer node once, otherwise we have daemons and\n        // the animate screws up with the daemons hanging around\n        if (this.sibling) {\n            return;\n        }\n        const footerNode = new RowNode(this.beans);\n        Object.keys(this).forEach(key => {\n            footerNode[key] = this[key];\n        });\n        footerNode.footer = true;\n        footerNode.setRowTop(null);\n        footerNode.setRowIndex(null);\n        // manually set oldRowTop to null so we discard any\n        // previous information about its position.\n        footerNode.oldRowTop = null;\n        footerNode.id = 'rowGroupFooter_' + this.id;\n        // get both header and footer to reference each other as siblings. this is never undone,\n        // only overwritten. so if a group is expanded, then contracted, it will have a ghost\n        // sibling - but that's fine, as we can ignore this if the header is contracted.\n        footerNode.sibling = this;\n        this.sibling = footerNode;\n    }\n}\nRowNode.ID_PREFIX_ROW_GROUP = 'row-group-';\nRowNode.ID_PREFIX_TOP_PINNED = 't-';\nRowNode.ID_PREFIX_BOTTOM_PINNED = 'b-';\nRowNode.OBJECT_ID_SEQUENCE = 0;\nRowNode.EVENT_ROW_SELECTED = 'rowSelected';\nRowNode.EVENT_DATA_CHANGED = 'dataChanged';\nRowNode.EVENT_CELL_CHANGED = 'cellChanged';\nRowNode.EVENT_ALL_CHILDREN_COUNT_CHANGED = 'allChildrenCountChanged';\nRowNode.EVENT_MASTER_CHANGED = 'masterChanged';\nRowNode.EVENT_GROUP_CHANGED = 'groupChanged';\nRowNode.EVENT_MOUSE_ENTER = 'mouseEnter';\nRowNode.EVENT_MOUSE_LEAVE = 'mouseLeave';\nRowNode.EVENT_HEIGHT_CHANGED = 'heightChanged';\nRowNode.EVENT_TOP_CHANGED = 'topChanged';\nRowNode.EVENT_DISPLAYED_CHANGED = 'displayedChanged';\nRowNode.EVENT_FIRST_CHILD_CHANGED = 'firstChildChanged';\nRowNode.EVENT_LAST_CHILD_CHANGED = 'lastChildChanged';\nRowNode.EVENT_CHILD_INDEX_CHANGED = 'childIndexChanged';\nRowNode.EVENT_ROW_INDEX_CHANGED = 'rowIndexChanged';\nRowNode.EVENT_EXPANDED_CHANGED = 'expandedChanged';\nRowNode.EVENT_HAS_CHILDREN_CHANGED = 'hasChildrenChanged';\nRowNode.EVENT_SELECTABLE_CHANGED = 'selectableChanged';\nRowNode.EVENT_UI_LEVEL_CHANGED = 'uiLevelChanged';\nRowNode.EVENT_HIGHLIGHT_CHANGED = 'rowHighlightChanged';\nRowNode.EVENT_DRAGGING_CHANGED = 'draggingChanged';\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$25 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass CheckboxSelectionComponent extends Component {\n    constructor() {\n        super(/* html*/ `\n            <div class=\"ag-selection-checkbox\" role=\"presentation\">\n                <ag-checkbox role=\"presentation\" ref=\"eCheckbox\"></ag-checkbox>\n            </div>`);\n    }\n    postConstruct() {\n        this.eCheckbox.setPassive(true);\n        setAriaLive(this.eCheckbox.getInputElement(), 'polite');\n    }\n    getCheckboxId() {\n        return this.eCheckbox.getInputElement().id;\n    }\n    onDataChanged() {\n        // when rows are loaded for the second time, this can impact the selection, as a row\n        // could be loaded as already selected (if user scrolls down, and then up again).\n        this.onSelectionChanged();\n    }\n    onSelectableChanged() {\n        this.showOrHideSelect();\n    }\n    onSelectionChanged() {\n        const translate = this.localeService.getLocaleTextFunc();\n        const state = this.rowNode.isSelected();\n        const stateName = getAriaCheckboxStateName(translate, state);\n        const ariaLabel = translate('ariaRowToggleSelection', 'Press Space to toggle row selection');\n        this.eCheckbox.setValue(state, true);\n        this.eCheckbox.setInputAriaLabel(`${ariaLabel} (${stateName})`);\n    }\n    onCheckedClicked(event) {\n        const groupSelectsFiltered = this.gridOptionsService.is('groupSelectsFiltered');\n        return this.rowNode.setSelectedParams({ newValue: false, rangeSelect: event.shiftKey, groupSelectsFiltered: groupSelectsFiltered, event, source: 'checkboxSelected' });\n    }\n    onUncheckedClicked(event) {\n        const groupSelectsFiltered = this.gridOptionsService.is('groupSelectsFiltered');\n        return this.rowNode.setSelectedParams({ newValue: true, rangeSelect: event.shiftKey, groupSelectsFiltered: groupSelectsFiltered, event, source: 'checkboxSelected' });\n    }\n    init(params) {\n        this.rowNode = params.rowNode;\n        this.column = params.column;\n        this.overrides = params.overrides;\n        this.onSelectionChanged();\n        // we don't want double click on this icon to open a group\n        this.addManagedListener(this.eCheckbox.getInputElement(), 'dblclick', (event) => {\n            stopPropagationForAgGrid(event);\n        });\n        this.addManagedListener(this.eCheckbox.getInputElement(), 'click', (event) => {\n            // we don't want the row clicked event to fire when selecting the checkbox, otherwise the row\n            // would possibly get selected twice\n            stopPropagationForAgGrid(event);\n            const isSelected = this.eCheckbox.getValue();\n            if (isSelected) {\n                this.onCheckedClicked(event);\n            }\n            else {\n                this.onUncheckedClicked(event || {});\n            }\n        });\n        this.addManagedListener(this.rowNode, RowNode.EVENT_ROW_SELECTED, this.onSelectionChanged.bind(this));\n        this.addManagedListener(this.rowNode, RowNode.EVENT_DATA_CHANGED, this.onDataChanged.bind(this));\n        this.addManagedListener(this.rowNode, RowNode.EVENT_SELECTABLE_CHANGED, this.onSelectableChanged.bind(this));\n        const isRowSelectableFunc = this.gridOptionsService.get('isRowSelectable');\n        const checkboxVisibleIsDynamic = isRowSelectableFunc || typeof this.getIsVisible() === 'function';\n        if (checkboxVisibleIsDynamic) {\n            const showOrHideSelectListener = this.showOrHideSelect.bind(this);\n            this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_CHANGED, showOrHideSelectListener);\n            this.addManagedListener(this.rowNode, RowNode.EVENT_DATA_CHANGED, showOrHideSelectListener);\n            this.addManagedListener(this.rowNode, RowNode.EVENT_CELL_CHANGED, showOrHideSelectListener);\n            this.showOrHideSelect();\n        }\n        this.eCheckbox.getInputElement().setAttribute('tabindex', '-1');\n    }\n    showOrHideSelect() {\n        var _a, _b, _c, _d;\n        // if the isRowSelectable() is not provided the row node is selectable by default\n        let selectable = this.rowNode.selectable;\n        // checkboxSelection callback is deemed a legacy solution however we will still consider it's result.\n        // If selectable, then also check the colDef callback. if not selectable, this it short circuits - no need\n        // to call the colDef callback.\n        const isVisible = this.getIsVisible();\n        if (selectable) {\n            if (typeof isVisible === 'function') {\n                const extraParams = (_a = this.overrides) === null || _a === void 0 ? void 0 : _a.callbackParams;\n                const params = (_b = this.column) === null || _b === void 0 ? void 0 : _b.createColumnFunctionCallbackParams(this.rowNode);\n                selectable = params ? isVisible(Object.assign(Object.assign({}, extraParams), params)) : false;\n            }\n            else {\n                selectable = isVisible !== null && isVisible !== void 0 ? isVisible : false;\n            }\n        }\n        const disableInsteadOfHide = (_c = this.column) === null || _c === void 0 ? void 0 : _c.getColDef().showDisabledCheckboxes;\n        if (disableInsteadOfHide) {\n            this.eCheckbox.setDisabled(!selectable);\n            this.setVisible(true);\n            this.setDisplayed(true);\n            return;\n        }\n        if ((_d = this.overrides) === null || _d === void 0 ? void 0 : _d.removeHidden) {\n            this.setDisplayed(selectable);\n            return;\n        }\n        this.setVisible(selectable);\n    }\n    getIsVisible() {\n        var _a, _b;\n        if (this.overrides) {\n            return this.overrides.isVisible;\n        }\n        // column will be missing if groupDisplayType = 'groupRows'\n        return (_b = (_a = this.column) === null || _a === void 0 ? void 0 : _a.getColDef()) === null || _b === void 0 ? void 0 : _b.checkboxSelection;\n    }\n}\n__decorate$25([\n    RefSelector('eCheckbox')\n], CheckboxSelectionComponent.prototype, \"eCheckbox\", void 0);\n__decorate$25([\n    PostConstruct\n], CheckboxSelectionComponent.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$24 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar DragAndDropService_1;\nvar DragSourceType;\n(function (DragSourceType) {\n    DragSourceType[DragSourceType[\"ToolPanel\"] = 0] = \"ToolPanel\";\n    DragSourceType[DragSourceType[\"HeaderCell\"] = 1] = \"HeaderCell\";\n    DragSourceType[DragSourceType[\"RowDrag\"] = 2] = \"RowDrag\";\n    DragSourceType[DragSourceType[\"ChartPanel\"] = 3] = \"ChartPanel\";\n})(DragSourceType || (DragSourceType = {}));\nvar VerticalDirection;\n(function (VerticalDirection) {\n    VerticalDirection[VerticalDirection[\"Up\"] = 0] = \"Up\";\n    VerticalDirection[VerticalDirection[\"Down\"] = 1] = \"Down\";\n})(VerticalDirection || (VerticalDirection = {}));\nvar HorizontalDirection;\n(function (HorizontalDirection) {\n    HorizontalDirection[HorizontalDirection[\"Left\"] = 0] = \"Left\";\n    HorizontalDirection[HorizontalDirection[\"Right\"] = 1] = \"Right\";\n})(HorizontalDirection || (HorizontalDirection = {}));\nlet DragAndDropService = DragAndDropService_1 = class DragAndDropService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.dragSourceAndParamsList = [];\n        this.dropTargets = [];\n    }\n    init() {\n        this.ePinnedIcon = createIcon('columnMovePin', this.gridOptionsService, null);\n        this.eHideIcon = createIcon('columnMoveHide', this.gridOptionsService, null);\n        this.eMoveIcon = createIcon('columnMoveMove', this.gridOptionsService, null);\n        this.eLeftIcon = createIcon('columnMoveLeft', this.gridOptionsService, null);\n        this.eRightIcon = createIcon('columnMoveRight', this.gridOptionsService, null);\n        this.eGroupIcon = createIcon('columnMoveGroup', this.gridOptionsService, null);\n        this.eAggregateIcon = createIcon('columnMoveValue', this.gridOptionsService, null);\n        this.ePivotIcon = createIcon('columnMovePivot', this.gridOptionsService, null);\n        this.eDropNotAllowedIcon = createIcon('dropNotAllowed', this.gridOptionsService, null);\n    }\n    addDragSource(dragSource, allowTouch = false) {\n        const params = {\n            eElement: dragSource.eElement,\n            dragStartPixels: dragSource.dragStartPixels,\n            onDragStart: this.onDragStart.bind(this, dragSource),\n            onDragStop: this.onDragStop.bind(this),\n            onDragging: this.onDragging.bind(this)\n        };\n        this.dragSourceAndParamsList.push({ params: params, dragSource: dragSource });\n        this.dragService.addDragSource(params, allowTouch);\n    }\n    removeDragSource(dragSource) {\n        const sourceAndParams = this.dragSourceAndParamsList.find(item => item.dragSource === dragSource);\n        if (sourceAndParams) {\n            this.dragService.removeDragSource(sourceAndParams.params);\n            removeFromArray(this.dragSourceAndParamsList, sourceAndParams);\n        }\n    }\n    clearDragSourceParamsList() {\n        this.dragSourceAndParamsList.forEach(sourceAndParams => this.dragService.removeDragSource(sourceAndParams.params));\n        this.dragSourceAndParamsList.length = 0;\n        this.dropTargets.length = 0;\n    }\n    nudge() {\n        if (this.dragging) {\n            this.onDragging(this.eventLastTime, true);\n        }\n    }\n    onDragStart(dragSource, mouseEvent) {\n        this.dragging = true;\n        this.dragSource = dragSource;\n        this.eventLastTime = mouseEvent;\n        this.dragItem = this.dragSource.getDragItem();\n        this.lastDropTarget = this.dragSource.dragSourceDropTarget;\n        if (this.dragSource.onDragStarted) {\n            this.dragSource.onDragStarted();\n        }\n        this.createGhost();\n    }\n    onDragStop(mouseEvent) {\n        this.eventLastTime = null;\n        this.dragging = false;\n        if (this.dragSource.onDragStopped) {\n            this.dragSource.onDragStopped();\n        }\n        if (this.lastDropTarget && this.lastDropTarget.onDragStop) {\n            const draggingEvent = this.createDropTargetEvent(this.lastDropTarget, mouseEvent, null, null, false);\n            this.lastDropTarget.onDragStop(draggingEvent);\n        }\n        this.lastDropTarget = null;\n        this.dragItem = null;\n        this.removeGhost();\n    }\n    onDragging(mouseEvent, fromNudge) {\n        var _a, _b, _c, _d;\n        const hDirection = this.getHorizontalDirection(mouseEvent);\n        const vDirection = this.getVerticalDirection(mouseEvent);\n        this.eventLastTime = mouseEvent;\n        this.positionGhost(mouseEvent);\n        // check if mouseEvent intersects with any of the drop targets\n        const validDropTargets = this.dropTargets.filter(target => this.isMouseOnDropTarget(mouseEvent, target));\n        const dropTarget = this.findCurrentDropTarget(mouseEvent, validDropTargets);\n        if (dropTarget !== this.lastDropTarget) {\n            this.leaveLastTargetIfExists(mouseEvent, hDirection, vDirection, fromNudge);\n            if (this.lastDropTarget !== null && dropTarget === null) {\n                (_b = (_a = this.dragSource).onGridExit) === null || _b === void 0 ? void 0 : _b.call(_a, this.dragItem);\n            }\n            if (this.lastDropTarget === null && dropTarget !== null) {\n                (_d = (_c = this.dragSource).onGridEnter) === null || _d === void 0 ? void 0 : _d.call(_c, this.dragItem);\n            }\n            this.enterDragTargetIfExists(dropTarget, mouseEvent, hDirection, vDirection, fromNudge);\n            this.lastDropTarget = dropTarget;\n        }\n        else if (dropTarget && dropTarget.onDragging) {\n            const draggingEvent = this.createDropTargetEvent(dropTarget, mouseEvent, hDirection, vDirection, fromNudge);\n            dropTarget.onDragging(draggingEvent);\n        }\n    }\n    getAllContainersFromDropTarget(dropTarget) {\n        const secondaryContainers = dropTarget.getSecondaryContainers ? dropTarget.getSecondaryContainers() : null;\n        const containers = [[dropTarget.getContainer()]];\n        return secondaryContainers ? containers.concat(secondaryContainers) : containers;\n    }\n    allContainersIntersect(mouseEvent, containers) {\n        for (const container of containers) {\n            const rect = container.getBoundingClientRect();\n            // if element is not visible, then width and height are zero\n            if (rect.width === 0 || rect.height === 0) {\n                return false;\n            }\n            const horizontalFit = mouseEvent.clientX >= rect.left && mouseEvent.clientX < rect.right;\n            const verticalFit = mouseEvent.clientY >= rect.top && mouseEvent.clientY < rect.bottom;\n            if (!horizontalFit || !verticalFit) {\n                return false;\n            }\n        }\n        return true;\n    }\n    // checks if the mouse is on the drop target. it checks eContainer and eSecondaryContainers\n    isMouseOnDropTarget(mouseEvent, dropTarget) {\n        const allContainersFromDropTarget = this.getAllContainersFromDropTarget(dropTarget);\n        let mouseOverTarget = false;\n        for (const currentContainers of allContainersFromDropTarget) {\n            if (this.allContainersIntersect(mouseEvent, currentContainers)) {\n                mouseOverTarget = true;\n                break;\n            }\n        }\n        if (dropTarget.targetContainsSource && !dropTarget.getContainer().contains(this.dragSource.eElement)) {\n            return false;\n        }\n        return mouseOverTarget && dropTarget.isInterestedIn(this.dragSource.type, this.dragSource.eElement);\n    }\n    findCurrentDropTarget(mouseEvent, validDropTargets) {\n        const len = validDropTargets.length;\n        if (len === 0) {\n            return null;\n        }\n        if (len === 1) {\n            return validDropTargets[0];\n        }\n        const rootNode = this.gridOptionsService.getRootNode();\n        // elementsFromPoint return a list of elements under\n        // the mouseEvent sorted from topMost to bottomMost\n        const elementStack = rootNode.elementsFromPoint(mouseEvent.clientX, mouseEvent.clientY);\n        // loop over the sorted elementStack to find which dropTarget comes first\n        for (const el of elementStack) {\n            for (const dropTarget of validDropTargets) {\n                const containers = flatten(this.getAllContainersFromDropTarget(dropTarget));\n                if (containers.indexOf(el) !== -1) {\n                    return dropTarget;\n                }\n            }\n        }\n        // we should never hit this point of the code because only\n        // valid dropTargets should be provided to this method.\n        return null;\n    }\n    enterDragTargetIfExists(dropTarget, mouseEvent, hDirection, vDirection, fromNudge) {\n        if (!dropTarget) {\n            return;\n        }\n        if (dropTarget.onDragEnter) {\n            const dragEnterEvent = this.createDropTargetEvent(dropTarget, mouseEvent, hDirection, vDirection, fromNudge);\n            dropTarget.onDragEnter(dragEnterEvent);\n        }\n        this.setGhostIcon(dropTarget.getIconName ? dropTarget.getIconName() : null);\n    }\n    leaveLastTargetIfExists(mouseEvent, hDirection, vDirection, fromNudge) {\n        if (!this.lastDropTarget) {\n            return;\n        }\n        if (this.lastDropTarget.onDragLeave) {\n            const dragLeaveEvent = this.createDropTargetEvent(this.lastDropTarget, mouseEvent, hDirection, vDirection, fromNudge);\n            this.lastDropTarget.onDragLeave(dragLeaveEvent);\n        }\n        this.setGhostIcon(null);\n    }\n    addDropTarget(dropTarget) {\n        this.dropTargets.push(dropTarget);\n    }\n    removeDropTarget(dropTarget) {\n        this.dropTargets = this.dropTargets.filter(target => target.getContainer() !== dropTarget.getContainer());\n    }\n    hasExternalDropZones() {\n        return this.dropTargets.some(zones => zones.external);\n    }\n    findExternalZone(params) {\n        const externalTargets = this.dropTargets.filter(target => target.external);\n        return externalTargets.find(zone => zone.getContainer() === params.getContainer()) || null;\n    }\n    getHorizontalDirection(event) {\n        const clientX = this.eventLastTime && this.eventLastTime.clientX;\n        const eClientX = event.clientX;\n        if (clientX === eClientX) {\n            return null;\n        }\n        return clientX > eClientX ? HorizontalDirection.Left : HorizontalDirection.Right;\n    }\n    getVerticalDirection(event) {\n        const clientY = this.eventLastTime && this.eventLastTime.clientY;\n        const eClientY = event.clientY;\n        if (clientY === eClientY) {\n            return null;\n        }\n        return clientY > eClientY ? VerticalDirection.Up : VerticalDirection.Down;\n    }\n    createDropTargetEvent(dropTarget, event, hDirection, vDirection, fromNudge) {\n        // localise x and y to the target\n        const dropZoneTarget = dropTarget.getContainer();\n        const rect = dropZoneTarget.getBoundingClientRect();\n        const { gridApi: api, columnApi, dragItem, dragSource } = this;\n        const x = event.clientX - rect.left;\n        const y = event.clientY - rect.top;\n        return { event, x, y, vDirection, hDirection, dragSource, fromNudge, dragItem: dragItem, api, columnApi, dropZoneTarget };\n    }\n    positionGhost(event) {\n        const ghost = this.eGhost;\n        if (!ghost) {\n            return;\n        }\n        const ghostRect = ghost.getBoundingClientRect();\n        const ghostHeight = ghostRect.height;\n        // for some reason, without the '-2', it still overlapped by 1 or 2 pixels, which\n        // then brought in scrollbars to the browser. no idea why, but putting in -2 here\n        // works around it which is good enough for me.\n        const browserWidth = getBodyWidth() - 2;\n        const browserHeight = getBodyHeight() - 2;\n        let top = event.pageY - (ghostHeight / 2);\n        let left = event.pageX - 10;\n        const eDocument = this.gridOptionsService.getDocument();\n        const win = (eDocument.defaultView || window);\n        const windowScrollY = win.pageYOffset || eDocument.documentElement.scrollTop;\n        const windowScrollX = win.pageXOffset || eDocument.documentElement.scrollLeft;\n        // check ghost is not positioned outside of the browser\n        if (browserWidth > 0 && ((left + ghost.clientWidth) > (browserWidth + windowScrollX))) {\n            left = browserWidth + windowScrollX - ghost.clientWidth;\n        }\n        if (left < 0) {\n            left = 0;\n        }\n        if (browserHeight > 0 && ((top + ghost.clientHeight) > (browserHeight + windowScrollY))) {\n            top = browserHeight + windowScrollY - ghost.clientHeight;\n        }\n        if (top < 0) {\n            top = 0;\n        }\n        ghost.style.left = `${left}px`;\n        ghost.style.top = `${top}px`;\n    }\n    removeGhost() {\n        if (this.eGhost && this.eGhostParent) {\n            this.eGhostParent.removeChild(this.eGhost);\n        }\n        this.eGhost = null;\n    }\n    createGhost() {\n        this.eGhost = loadTemplate(DragAndDropService_1.GHOST_TEMPLATE);\n        this.mouseEventService.stampTopLevelGridCompWithGridInstance(this.eGhost);\n        const { theme } = this.environment.getTheme();\n        if (theme) {\n            this.eGhost.classList.add(theme);\n        }\n        this.eGhostIcon = this.eGhost.querySelector('.ag-dnd-ghost-icon');\n        this.setGhostIcon(null);\n        const eText = this.eGhost.querySelector('.ag-dnd-ghost-label');\n        let dragItemName = this.dragSource.dragItemName;\n        if (isFunction(dragItemName)) {\n            dragItemName = dragItemName();\n        }\n        eText.innerHTML = escapeString(dragItemName) || '';\n        this.eGhost.style.height = '25px';\n        this.eGhost.style.top = '20px';\n        this.eGhost.style.left = '20px';\n        const eDocument = this.gridOptionsService.getDocument();\n        let targetEl = null;\n        try {\n            targetEl = eDocument.fullscreenElement;\n        }\n        catch (e) {\n            // some environments like SalesForce will throw errors\n            // simply by trying to read the fullscreenElement property\n        }\n        finally {\n            if (!targetEl) {\n                const rootNode = this.gridOptionsService.getRootNode();\n                const body = rootNode.querySelector('body');\n                if (body) {\n                    targetEl = body;\n                }\n                else if (rootNode instanceof ShadowRoot) {\n                    targetEl = rootNode;\n                }\n                else {\n                    targetEl = rootNode === null || rootNode === void 0 ? void 0 : rootNode.documentElement;\n                }\n            }\n        }\n        this.eGhostParent = targetEl;\n        if (!this.eGhostParent) {\n            console.warn('AG Grid: could not find document body, it is needed for dragging columns');\n        }\n        else {\n            this.eGhostParent.appendChild(this.eGhost);\n        }\n    }\n    setGhostIcon(iconName, shake = false) {\n        clearElement(this.eGhostIcon);\n        let eIcon = null;\n        if (!iconName) {\n            iconName = this.dragSource.defaultIconName || DragAndDropService_1.ICON_NOT_ALLOWED;\n        }\n        switch (iconName) {\n            case DragAndDropService_1.ICON_PINNED:\n                eIcon = this.ePinnedIcon;\n                break;\n            case DragAndDropService_1.ICON_MOVE:\n                eIcon = this.eMoveIcon;\n                break;\n            case DragAndDropService_1.ICON_LEFT:\n                eIcon = this.eLeftIcon;\n                break;\n            case DragAndDropService_1.ICON_RIGHT:\n                eIcon = this.eRightIcon;\n                break;\n            case DragAndDropService_1.ICON_GROUP:\n                eIcon = this.eGroupIcon;\n                break;\n            case DragAndDropService_1.ICON_AGGREGATE:\n                eIcon = this.eAggregateIcon;\n                break;\n            case DragAndDropService_1.ICON_PIVOT:\n                eIcon = this.ePivotIcon;\n                break;\n            case DragAndDropService_1.ICON_NOT_ALLOWED:\n                eIcon = this.eDropNotAllowedIcon;\n                break;\n            case DragAndDropService_1.ICON_HIDE:\n                eIcon = this.eHideIcon;\n                break;\n        }\n        this.eGhostIcon.classList.toggle('ag-shake-left-to-right', shake);\n        if (eIcon === this.eHideIcon && this.gridOptionsService.is('suppressDragLeaveHidesColumns')) {\n            return;\n        }\n        if (eIcon) {\n            this.eGhostIcon.appendChild(eIcon);\n        }\n    }\n};\nDragAndDropService.ICON_PINNED = 'pinned';\nDragAndDropService.ICON_MOVE = 'move';\nDragAndDropService.ICON_LEFT = 'left';\nDragAndDropService.ICON_RIGHT = 'right';\nDragAndDropService.ICON_GROUP = 'group';\nDragAndDropService.ICON_AGGREGATE = 'aggregate';\nDragAndDropService.ICON_PIVOT = 'pivot';\nDragAndDropService.ICON_NOT_ALLOWED = 'notAllowed';\nDragAndDropService.ICON_HIDE = 'hide';\nDragAndDropService.GHOST_TEMPLATE = `<div class=\"ag-dnd-ghost ag-unselectable\">\n            <span class=\"ag-dnd-ghost-icon ag-shake-left-to-right\"></span>\n            <div class=\"ag-dnd-ghost-label\"></div>\n        </div>`;\n__decorate$24([\n    Autowired('dragService')\n], DragAndDropService.prototype, \"dragService\", void 0);\n__decorate$24([\n    Autowired('mouseEventService')\n], DragAndDropService.prototype, \"mouseEventService\", void 0);\n__decorate$24([\n    Autowired('columnApi')\n], DragAndDropService.prototype, \"columnApi\", void 0);\n__decorate$24([\n    Autowired('gridApi')\n], DragAndDropService.prototype, \"gridApi\", void 0);\n__decorate$24([\n    PostConstruct\n], DragAndDropService.prototype, \"init\", null);\n__decorate$24([\n    PreDestroy\n], DragAndDropService.prototype, \"clearDragSourceParamsList\", null);\nDragAndDropService = DragAndDropService_1 = __decorate$24([\n    Bean('dragAndDropService')\n], DragAndDropService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$23 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass RowDragComp extends Component {\n    constructor(cellValueFn, rowNode, column, customGui, dragStartPixels, suppressVisibilityChange) {\n        super();\n        this.cellValueFn = cellValueFn;\n        this.rowNode = rowNode;\n        this.column = column;\n        this.customGui = customGui;\n        this.dragStartPixels = dragStartPixels;\n        this.suppressVisibilityChange = suppressVisibilityChange;\n        this.dragSource = null;\n    }\n    isCustomGui() {\n        return this.customGui != null;\n    }\n    postConstruct() {\n        if (!this.customGui) {\n            this.setTemplate(/* html */ `<div class=\"ag-drag-handle ag-row-drag\" aria-hidden=\"true\"></div>`);\n            this.getGui().appendChild(createIconNoSpan('rowDrag', this.gridOptionsService, null));\n            this.addDragSource();\n        }\n        else {\n            this.setDragElement(this.customGui, this.dragStartPixels);\n        }\n        this.checkCompatibility();\n        if (!this.suppressVisibilityChange) {\n            const strategy = this.gridOptionsService.is('rowDragManaged') ?\n                new ManagedVisibilityStrategy(this, this.beans, this.rowNode, this.column) :\n                new NonManagedVisibilityStrategy(this, this.beans, this.rowNode, this.column);\n            this.createManagedBean(strategy, this.beans.context);\n        }\n    }\n    setDragElement(dragElement, dragStartPixels) {\n        this.setTemplateFromElement(dragElement);\n        this.addDragSource(dragStartPixels);\n    }\n    getSelectedNodes() {\n        const isRowDragMultiRow = this.gridOptionsService.is('rowDragMultiRow');\n        if (!isRowDragMultiRow) {\n            return [this.rowNode];\n        }\n        const selection = this.beans.selectionService.getSelectedNodes();\n        return selection.indexOf(this.rowNode) !== -1 ? selection : [this.rowNode];\n    }\n    // returns true if all compatibility items work out\n    checkCompatibility() {\n        const managed = this.gridOptionsService.is('rowDragManaged');\n        const treeData = this.gridOptionsService.isTreeData();\n        if (treeData && managed) {\n            doOnce(() => console.warn('AG Grid: If using row drag with tree data, you cannot have rowDragManaged=true'), 'RowDragComp.managedAndTreeData');\n        }\n    }\n    getDragItem() {\n        return {\n            rowNode: this.rowNode,\n            rowNodes: this.getSelectedNodes(),\n            columns: this.column ? [this.column] : undefined,\n            defaultTextValue: this.cellValueFn(),\n        };\n    }\n    getRowDragText(column) {\n        if (column) {\n            const colDef = column.getColDef();\n            if (colDef.rowDragText) {\n                return colDef.rowDragText;\n            }\n        }\n        return this.gridOptionsService.get('rowDragText');\n    }\n    addDragSource(dragStartPixels = 4) {\n        // if this is changing the drag element, delete the previous dragSource\n        if (this.dragSource) {\n            this.removeDragSource();\n        }\n        const rowDragText = this.getRowDragText(this.column);\n        const translate = this.localeService.getLocaleTextFunc();\n        this.dragSource = {\n            type: DragSourceType.RowDrag,\n            eElement: this.getGui(),\n            dragItemName: () => {\n                var _a;\n                const dragItem = this.getDragItem();\n                const dragItemCount = ((_a = dragItem.rowNodes) === null || _a === void 0 ? void 0 : _a.length) || 1;\n                if (rowDragText) {\n                    return rowDragText(dragItem, dragItemCount);\n                }\n                return dragItemCount === 1 ? this.cellValueFn() : `${dragItemCount} ${translate('rowDragRows', 'rows')}`;\n            },\n            getDragItem: () => this.getDragItem(),\n            dragStartPixels,\n            dragSourceDomDataKey: this.gridOptionsService.getDomDataKey()\n        };\n        this.beans.dragAndDropService.addDragSource(this.dragSource, true);\n    }\n    removeDragSource() {\n        if (this.dragSource) {\n            this.beans.dragAndDropService.removeDragSource(this.dragSource);\n        }\n        this.dragSource = null;\n    }\n}\n__decorate$23([\n    Autowired('beans')\n], RowDragComp.prototype, \"beans\", void 0);\n__decorate$23([\n    PostConstruct\n], RowDragComp.prototype, \"postConstruct\", null);\n__decorate$23([\n    PreDestroy\n], RowDragComp.prototype, \"removeDragSource\", null);\nclass VisibilityStrategy extends BeanStub {\n    constructor(parent, rowNode, column) {\n        super();\n        this.parent = parent;\n        this.rowNode = rowNode;\n        this.column = column;\n    }\n    setDisplayedOrVisible(neverDisplayed) {\n        const displayedOptions = { skipAriaHidden: true };\n        if (neverDisplayed) {\n            this.parent.setDisplayed(false, displayedOptions);\n        }\n        else {\n            let shown = true;\n            let isShownSometimes = false;\n            if (this.column) {\n                shown = this.column.isRowDrag(this.rowNode) || this.parent.isCustomGui();\n                isShownSometimes = isFunction(this.column.getColDef().rowDrag);\n            }\n            // if shown sometimes, them some rows can have drag handle while other don't,\n            // so we use setVisible to keep the handles horizontally aligned (as setVisible\n            // keeps the empty space, whereas setDisplayed looses the space)\n            if (isShownSometimes) {\n                this.parent.setDisplayed(true, displayedOptions);\n                this.parent.setVisible(shown, displayedOptions);\n            }\n            else {\n                this.parent.setDisplayed(shown, displayedOptions);\n                this.parent.setVisible(true, displayedOptions);\n            }\n        }\n    }\n}\n// when non managed, the visibility depends on suppressRowDrag property only\nclass NonManagedVisibilityStrategy extends VisibilityStrategy {\n    constructor(parent, beans, rowNode, column) {\n        super(parent, rowNode, column);\n        this.beans = beans;\n    }\n    postConstruct() {\n        this.addManagedPropertyListener('suppressRowDrag', this.onSuppressRowDrag.bind(this));\n        // in case data changes, then we need to update visibility of drag item\n        this.addManagedListener(this.rowNode, RowNode.EVENT_DATA_CHANGED, this.workOutVisibility.bind(this));\n        this.addManagedListener(this.rowNode, RowNode.EVENT_CELL_CHANGED, this.workOutVisibility.bind(this));\n        this.addManagedListener(this.rowNode, RowNode.EVENT_CELL_CHANGED, this.workOutVisibility.bind(this));\n        this.addManagedListener(this.beans.eventService, Events.EVENT_NEW_COLUMNS_LOADED, this.workOutVisibility.bind(this));\n        this.workOutVisibility();\n    }\n    onSuppressRowDrag() {\n        this.workOutVisibility();\n    }\n    workOutVisibility() {\n        // only show the drag if both sort and filter are not present\n        const neverDisplayed = this.gridOptionsService.is('suppressRowDrag');\n        this.setDisplayedOrVisible(neverDisplayed);\n    }\n}\n__decorate$23([\n    PostConstruct\n], NonManagedVisibilityStrategy.prototype, \"postConstruct\", null);\n// when managed, the visibility depends on sort, filter and row group, as well as suppressRowDrag property\nclass ManagedVisibilityStrategy extends VisibilityStrategy {\n    constructor(parent, beans, rowNode, column) {\n        super(parent, rowNode, column);\n        this.beans = beans;\n    }\n    postConstruct() {\n        // we do not show the component if sort, filter or grouping is active\n        this.addManagedListener(this.beans.eventService, Events.EVENT_SORT_CHANGED, this.workOutVisibility.bind(this));\n        this.addManagedListener(this.beans.eventService, Events.EVENT_FILTER_CHANGED, this.workOutVisibility.bind(this));\n        this.addManagedListener(this.beans.eventService, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, this.workOutVisibility.bind(this));\n        this.addManagedListener(this.beans.eventService, Events.EVENT_NEW_COLUMNS_LOADED, this.workOutVisibility.bind(this));\n        // in case data changes, then we need to update visibility of drag item\n        this.addManagedListener(this.rowNode, RowNode.EVENT_DATA_CHANGED, this.workOutVisibility.bind(this));\n        this.addManagedListener(this.rowNode, RowNode.EVENT_CELL_CHANGED, this.workOutVisibility.bind(this));\n        this.addManagedPropertyListener('suppressRowDrag', this.onSuppressRowDrag.bind(this));\n        this.workOutVisibility();\n    }\n    onSuppressRowDrag() {\n        this.workOutVisibility();\n    }\n    workOutVisibility() {\n        // only show the drag if both sort and filter are not present\n        const gridBodyCon = this.beans.ctrlsService.getGridBodyCtrl();\n        const rowDragFeature = gridBodyCon.getRowDragFeature();\n        const shouldPreventRowMove = rowDragFeature && rowDragFeature.shouldPreventRowMove();\n        const suppressRowDrag = this.gridOptionsService.is('suppressRowDrag');\n        const hasExternalDropZones = this.beans.dragAndDropService.hasExternalDropZones();\n        const neverDisplayed = (shouldPreventRowMove && !hasExternalDropZones) || suppressRowDrag;\n        this.setDisplayedOrVisible(neverDisplayed);\n    }\n}\n__decorate$23([\n    PostConstruct\n], ManagedVisibilityStrategy.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$22 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass GroupCellRendererCtrl extends BeanStub {\n    init(comp, eGui, eCheckbox, eExpanded, eContracted, compClass, params) {\n        this.params = params;\n        this.eGui = eGui;\n        this.eCheckbox = eCheckbox;\n        this.eExpanded = eExpanded;\n        this.eContracted = eContracted;\n        this.comp = comp;\n        this.compClass = compClass;\n        const topLevelFooter = this.isTopLevelFooter();\n        const embeddedRowMismatch = this.isEmbeddedRowMismatch();\n        // This allows for empty strings to appear as groups since\n        // it will only return for null or undefined.\n        const isNullValueAndNotMaster = params.value == null && !params.node.master;\n        let skipCell = false;\n        // if the groupCellRenderer is inside of a footer and groupHideOpenParents is true\n        // we should only display the groupCellRenderer if the current column is the rowGroupedColumn\n        if (this.gridOptionsService.is('groupIncludeFooter') && this.gridOptionsService.is('groupHideOpenParents')) {\n            const node = params.node;\n            if (node.footer) {\n                const showRowGroup = params.colDef && params.colDef.showRowGroup;\n                const rowGroupColumnId = node.rowGroupColumn && node.rowGroupColumn.getColId();\n                skipCell = showRowGroup !== rowGroupColumnId;\n            }\n        }\n        this.cellIsBlank = topLevelFooter ? false : (embeddedRowMismatch || (isNullValueAndNotMaster && !params.node.master) || skipCell);\n        if (this.cellIsBlank) {\n            return;\n        }\n        this.setupShowingValueForOpenedParent();\n        this.findDisplayedGroupNode();\n        this.addFullWidthRowDraggerIfNeeded();\n        this.addExpandAndContract();\n        this.addCheckboxIfNeeded();\n        this.addValueElement();\n        this.setupIndent();\n        this.refreshAriaExpanded();\n    }\n    destroy() {\n        super.destroy();\n        // property cleanup to avoid memory leaks\n        this.expandListener = null;\n    }\n    refreshAriaExpanded() {\n        const { node, eParentOfValue } = this.params;\n        if (this.expandListener) {\n            this.expandListener = this.expandListener();\n        }\n        if (!this.isExpandable()) {\n            removeAriaExpanded(eParentOfValue);\n            return;\n        }\n        const listener = () => {\n            // for react, we don't use JSX, as setting attributes via jsx is slower\n            setAriaExpanded(eParentOfValue, !!node.expanded);\n        };\n        this.expandListener = this.addManagedListener(node, RowNode.EVENT_EXPANDED_CHANGED, listener) || null;\n        listener();\n    }\n    isTopLevelFooter() {\n        if (!this.gridOptionsService.is('groupIncludeTotalFooter')) {\n            return false;\n        }\n        if (this.params.value != null || this.params.node.level != -1) {\n            return false;\n        }\n        // at this point, we know it's the root node and there is no value present, so it's a footer cell.\n        // the only thing to work out is if we are displaying groups  across multiple\n        // columns (groupDisplayType: 'multipleColumns'), we only want 'total' to appear in the first column.\n        const colDef = this.params.colDef;\n        const doingFullWidth = colDef == null;\n        if (doingFullWidth) {\n            return true;\n        }\n        if (colDef.showRowGroup === true) {\n            return true;\n        }\n        const rowGroupCols = this.columnModel.getRowGroupColumns();\n        // this is a sanity check, rowGroupCols should always be present\n        if (!rowGroupCols || rowGroupCols.length === 0) {\n            return true;\n        }\n        const firstRowGroupCol = rowGroupCols[0];\n        return firstRowGroupCol.getId() === colDef.showRowGroup;\n    }\n    // if we are doing embedded full width rows, we only show the renderer when\n    // in the body, or if pinning in the pinned section, or if pinning and RTL,\n    // in the right section. otherwise we would have the cell repeated in each section.\n    isEmbeddedRowMismatch() {\n        if (!this.params.fullWidth || !this.gridOptionsService.is('embedFullWidthRows')) {\n            return false;\n        }\n        const pinnedLeftCell = this.params.pinned === 'left';\n        const pinnedRightCell = this.params.pinned === 'right';\n        const bodyCell = !pinnedLeftCell && !pinnedRightCell;\n        if (this.gridOptionsService.is('enableRtl')) {\n            if (this.columnModel.isPinningLeft()) {\n                return !pinnedRightCell;\n            }\n            return !bodyCell;\n        }\n        if (this.columnModel.isPinningLeft()) {\n            return !pinnedLeftCell;\n        }\n        return !bodyCell;\n    }\n    findDisplayedGroupNode() {\n        const column = this.params.column;\n        const rowNode = this.params.node;\n        if (this.showingValueForOpenedParent) {\n            let pointer = rowNode.parent;\n            while (pointer != null) {\n                if (pointer.rowGroupColumn && column.isRowGroupDisplayed(pointer.rowGroupColumn.getId())) {\n                    this.displayedGroupNode = pointer;\n                    break;\n                }\n                pointer = pointer.parent;\n            }\n        }\n        // if we didn't find a displayed group, set it to the row node\n        if (missing(this.displayedGroupNode)) {\n            this.displayedGroupNode = rowNode;\n        }\n    }\n    setupShowingValueForOpenedParent() {\n        // note - this code depends on sortService.updateGroupDataForHiddenOpenParents, where group data\n        // is updated to reflect the dragged down parents\n        const rowNode = this.params.node;\n        const column = this.params.column;\n        if (!this.gridOptionsService.is('groupHideOpenParents')) {\n            this.showingValueForOpenedParent = false;\n            return;\n        }\n        // hideOpenParents means rowNode.groupData can have data for the group this column is displaying, even though\n        // this rowNode isn't grouping by the column we are displaying\n        // if no groupData at all, we are not showing a parent value\n        if (!rowNode.groupData) {\n            this.showingValueForOpenedParent = false;\n            return;\n        }\n        // this is the normal case, in that we are showing a group for which this column is configured. note that\n        // this means the Row Group is closed (if it was open, we would not be displaying it)\n        const showingGroupNode = rowNode.rowGroupColumn != null;\n        if (showingGroupNode) {\n            const keyOfGroupingColumn = rowNode.rowGroupColumn.getId();\n            const configuredToShowThisGroupLevel = column.isRowGroupDisplayed(keyOfGroupingColumn);\n            // if showing group as normal, we didn't take group info from parent\n            if (configuredToShowThisGroupLevel) {\n                this.showingValueForOpenedParent = false;\n                return;\n            }\n        }\n        // see if we are showing a Group Value for the Displayed Group. if we are showing a group value, and this Row Node\n        // is not grouping by this Displayed Group, we must of gotten the value from a parent node\n        const valPresent = rowNode.groupData[column.getId()] != null;\n        this.showingValueForOpenedParent = valPresent;\n    }\n    addValueElement() {\n        if (this.displayedGroupNode.footer) {\n            this.addFooterValue();\n        }\n        else {\n            this.addGroupValue();\n            this.addChildCount();\n        }\n    }\n    addGroupValue() {\n        // we try and use the cellRenderer of the column used for the grouping if we can\n        const paramsAdjusted = this.adjustParamsWithDetailsFromRelatedColumn();\n        const innerCompDetails = this.getInnerCompDetails(paramsAdjusted);\n        const { valueFormatted, value } = paramsAdjusted;\n        let valueWhenNoRenderer = valueFormatted;\n        if (valueWhenNoRenderer == null) {\n            if (value === '' && this.params.node.group) {\n                const localeTextFunc = this.localeService.getLocaleTextFunc();\n                valueWhenNoRenderer = localeTextFunc('blanks', '(Blanks)');\n            }\n            else {\n                valueWhenNoRenderer = value !== null && value !== void 0 ? value : null;\n            }\n        }\n        this.comp.setInnerRenderer(innerCompDetails, valueWhenNoRenderer);\n    }\n    adjustParamsWithDetailsFromRelatedColumn() {\n        const relatedColumn = this.displayedGroupNode.rowGroupColumn;\n        const column = this.params.column;\n        if (!relatedColumn) {\n            return this.params;\n        }\n        const notFullWidth = column != null;\n        if (notFullWidth) {\n            const showingThisRowGroup = column.isRowGroupDisplayed(relatedColumn.getId());\n            if (!showingThisRowGroup) {\n                return this.params;\n            }\n        }\n        const params = this.params;\n        const { value, node } = this.params;\n        const valueFormatted = this.valueFormatterService.formatValue(relatedColumn, node, value);\n        // we don't update the original params, as they could of come through React,\n        // as react has RowGroupCellRenderer, which means the params could be props which\n        // would be read only\n        const paramsAdjusted = Object.assign(Object.assign({}, params), { valueFormatted: valueFormatted });\n        return paramsAdjusted;\n    }\n    addFooterValue() {\n        const footerValueGetter = this.params.footerValueGetter;\n        let footerValue = '';\n        if (footerValueGetter) {\n            // params is same as we were given, except we set the value as the item to display\n            const paramsClone = cloneObject(this.params);\n            paramsClone.value = this.params.value;\n            if (typeof footerValueGetter === 'function') {\n                footerValue = footerValueGetter(paramsClone);\n            }\n            else if (typeof footerValueGetter === 'string') {\n                footerValue = this.expressionService.evaluate(footerValueGetter, paramsClone);\n            }\n            else {\n                console.warn('AG Grid: footerValueGetter should be either a function or a string (expression)');\n            }\n        }\n        else {\n            footerValue = 'Total ' + (this.params.value != null ? this.params.value : '');\n        }\n        const innerCompDetails = this.getInnerCompDetails(this.params);\n        this.comp.setInnerRenderer(innerCompDetails, footerValue);\n    }\n    getInnerCompDetails(params) {\n        // for full width rows, we don't do any of the below\n        if (params.fullWidth) {\n            return this.userComponentFactory.getFullWidthGroupRowInnerCellRenderer(this.gridOptionsService.get('groupRowRendererParams'), params);\n        }\n        // when grouping, the normal case is we use the cell renderer of the grouped column. eg if grouping by country\n        // and then rating, we will use the country cell renderer for each country group row and likewise the rating\n        // cell renderer for each rating group row.\n        //\n        // however if the user has innerCellRenderer defined, this gets preference and we don't use cell renderers\n        // of the grouped columns.\n        //\n        // so we check and use in the following order:\n        //\n        // 1) thisColDef.cellRendererParams.innerRenderer of the column showing the groups (eg auto group column)\n        // 2) groupedColDef.cellRenderer of the grouped column\n        // 3) groupedColDef.cellRendererParams.innerRenderer\n        // we check if cell renderer provided for the group cell renderer, eg colDef.cellRendererParams.innerRenderer\n        const innerCompDetails = this.userComponentFactory\n            .getInnerRendererDetails(params, params);\n        // avoid using GroupCellRenderer again, otherwise stack overflow, as we insert same renderer again and again.\n        // this covers off chance user is grouping by a column that is also configured with GroupCellRenderer\n        const isGroupRowRenderer = (details) => details && details.componentClass == this.compClass;\n        if (innerCompDetails && !isGroupRowRenderer(innerCompDetails)) {\n            // use the renderer defined in cellRendererParams.innerRenderer\n            return innerCompDetails;\n        }\n        const relatedColumn = this.displayedGroupNode.rowGroupColumn;\n        const relatedColDef = relatedColumn ? relatedColumn.getColDef() : undefined;\n        if (!relatedColDef) {\n            return;\n        }\n        // otherwise see if we can use the cellRenderer of the column we are grouping by\n        const relatedCompDetails = this.userComponentFactory\n            .getCellRendererDetails(relatedColDef, params);\n        if (relatedCompDetails && !isGroupRowRenderer(relatedCompDetails)) {\n            // Only if the original column is using a specific renderer, it it is a using a DEFAULT one ignore it\n            return relatedCompDetails;\n        }\n        if (isGroupRowRenderer(relatedCompDetails) &&\n            relatedColDef.cellRendererParams &&\n            relatedColDef.cellRendererParams.innerRenderer) {\n            // edge case - this comes from a column which has been grouped dynamically, that has a renderer 'group'\n            // and has an inner cell renderer\n            const res = this.userComponentFactory.getInnerRendererDetails(relatedColDef.cellRendererParams, params);\n            return res;\n        }\n    }\n    addChildCount() {\n        // only include the child count if it's included, eg if user doing custom aggregation,\n        // then this could be left out, or set to -1, ie no child count\n        if (this.params.suppressCount) {\n            return;\n        }\n        this.addManagedListener(this.displayedGroupNode, RowNode.EVENT_ALL_CHILDREN_COUNT_CHANGED, this.updateChildCount.bind(this));\n        // filtering changes the child count, so need to cater for it\n        this.updateChildCount();\n    }\n    updateChildCount() {\n        const allChildrenCount = this.displayedGroupNode.allChildrenCount;\n        const showingGroupForThisNode = this.isShowRowGroupForThisRow();\n        const showCount = showingGroupForThisNode && allChildrenCount != null && allChildrenCount >= 0;\n        const countString = showCount ? `(${allChildrenCount})` : ``;\n        this.comp.setChildCount(countString);\n    }\n    isShowRowGroupForThisRow() {\n        if (this.gridOptionsService.isTreeData()) {\n            return true;\n        }\n        const rowGroupColumn = this.displayedGroupNode.rowGroupColumn;\n        if (!rowGroupColumn) {\n            return false;\n        }\n        // column is null for fullWidthRows\n        const column = this.params.column;\n        const thisColumnIsInterested = column == null || column.isRowGroupDisplayed(rowGroupColumn.getId());\n        return thisColumnIsInterested;\n    }\n    addExpandAndContract() {\n        var _a;\n        const params = this.params;\n        const eExpandedIcon = createIconNoSpan('groupExpanded', this.gridOptionsService, null);\n        const eContractedIcon = createIconNoSpan('groupContracted', this.gridOptionsService, null);\n        if (eExpandedIcon) {\n            this.eExpanded.appendChild(eExpandedIcon);\n        }\n        if (eContractedIcon) {\n            this.eContracted.appendChild(eContractedIcon);\n        }\n        const eGroupCell = params.eGridCell;\n        // if editing groups, then double click is to start editing\n        const isDoubleClickEdit = ((_a = this.params.column) === null || _a === void 0 ? void 0 : _a.isCellEditable(params.node)) && this.gridOptionsService.is('enableGroupEdit');\n        if (!isDoubleClickEdit && this.isExpandable() && !params.suppressDoubleClickExpand) {\n            this.addManagedListener(eGroupCell, 'dblclick', this.onCellDblClicked.bind(this));\n        }\n        this.addManagedListener(this.eExpanded, 'click', this.onExpandClicked.bind(this));\n        this.addManagedListener(this.eContracted, 'click', this.onExpandClicked.bind(this));\n        // expand / contract as the user hits enter\n        this.addManagedListener(eGroupCell, 'keydown', this.onKeyDown.bind(this));\n        this.addManagedListener(params.node, RowNode.EVENT_EXPANDED_CHANGED, this.showExpandAndContractIcons.bind(this));\n        this.showExpandAndContractIcons();\n        // because we don't show the expand / contract when there are no children, we need to check every time\n        // the number of children change.\n        const expandableChangedListener = this.onRowNodeIsExpandableChanged.bind(this);\n        this.addManagedListener(this.displayedGroupNode, RowNode.EVENT_ALL_CHILDREN_COUNT_CHANGED, expandableChangedListener);\n        this.addManagedListener(this.displayedGroupNode, RowNode.EVENT_MASTER_CHANGED, expandableChangedListener);\n        this.addManagedListener(this.displayedGroupNode, RowNode.EVENT_GROUP_CHANGED, expandableChangedListener);\n        this.addManagedListener(this.displayedGroupNode, RowNode.EVENT_HAS_CHILDREN_CHANGED, expandableChangedListener);\n    }\n    onExpandClicked(mouseEvent) {\n        if (isStopPropagationForAgGrid(mouseEvent)) {\n            return;\n        }\n        // so if we expand a node, it does not also get selected.\n        stopPropagationForAgGrid(mouseEvent);\n        this.onExpandOrContract(mouseEvent);\n    }\n    onExpandOrContract(e) {\n        // must use the displayedGroup, so if data was dragged down, we expand the parent, not this row\n        const rowNode = this.displayedGroupNode;\n        const nextExpandState = !rowNode.expanded;\n        if (!nextExpandState && rowNode.sticky) {\n            this.scrollToStickyNode(rowNode);\n        }\n        rowNode.setExpanded(nextExpandState, e);\n    }\n    scrollToStickyNode(rowNode) {\n        const gridBodyCtrl = this.ctrlsService.getGridBodyCtrl();\n        const scrollFeature = gridBodyCtrl.getScrollFeature();\n        scrollFeature.setVerticalScrollPosition(rowNode.rowTop - rowNode.stickyRowTop);\n    }\n    isExpandable() {\n        if (this.showingValueForOpenedParent) {\n            return true;\n        }\n        const rowNode = this.displayedGroupNode;\n        const reducedLeafNode = this.columnModel.isPivotMode() && rowNode.leafGroup;\n        const expandableGroup = rowNode.isExpandable() && !rowNode.footer && !reducedLeafNode;\n        if (!expandableGroup) {\n            return false;\n        }\n        // column is null for fullWidthRows\n        const column = this.params.column;\n        const displayingForOneColumnOnly = column != null && typeof column.getColDef().showRowGroup === 'string';\n        if (displayingForOneColumnOnly) {\n            const showing = this.isShowRowGroupForThisRow();\n            return showing;\n        }\n        return true;\n    }\n    showExpandAndContractIcons() {\n        const { params, displayedGroupNode: displayedGroup, columnModel } = this;\n        const { node } = params;\n        const isExpandable = this.isExpandable();\n        if (isExpandable) {\n            // if expandable, show one based on expand state.\n            // if we were dragged down, means our parent is always expanded\n            const expanded = this.showingValueForOpenedParent ? true : node.expanded;\n            this.comp.setExpandedDisplayed(expanded);\n            this.comp.setContractedDisplayed(!expanded);\n        }\n        else {\n            // it not expandable, show neither\n            this.comp.setExpandedDisplayed(false);\n            this.comp.setContractedDisplayed(false);\n        }\n        // compensation padding for leaf nodes, so there is blank space instead of the expand icon\n        const pivotMode = columnModel.isPivotMode();\n        const pivotModeAndLeafGroup = pivotMode && displayedGroup.leafGroup;\n        const addExpandableCss = isExpandable && !pivotModeAndLeafGroup;\n        const isTotalFooterNode = node.footer && node.level === -1;\n        this.comp.addOrRemoveCssClass('ag-cell-expandable', addExpandableCss);\n        this.comp.addOrRemoveCssClass('ag-row-group', addExpandableCss);\n        if (pivotMode) {\n            this.comp.addOrRemoveCssClass('ag-pivot-leaf-group', pivotModeAndLeafGroup);\n        }\n        else if (!isTotalFooterNode) {\n            this.comp.addOrRemoveCssClass('ag-row-group-leaf-indent', !addExpandableCss);\n        }\n    }\n    onRowNodeIsExpandableChanged() {\n        // maybe if no children now, we should hide the expand / contract icons\n        this.showExpandAndContractIcons();\n        // if we have no children, this impacts the indent\n        this.setIndent();\n        this.refreshAriaExpanded();\n    }\n    setupIndent() {\n        // only do this if an indent - as this overwrites the padding that\n        // the theme set, which will make things look 'not aligned' for the\n        // first group level.\n        const node = this.params.node;\n        const suppressPadding = this.params.suppressPadding;\n        if (!suppressPadding) {\n            this.addManagedListener(node, RowNode.EVENT_UI_LEVEL_CHANGED, this.setIndent.bind(this));\n            this.setIndent();\n        }\n    }\n    setIndent() {\n        if (this.gridOptionsService.is('groupHideOpenParents')) {\n            return;\n        }\n        const params = this.params;\n        const rowNode = params.node;\n        // if we are only showing one group column, we don't want to be indenting based on level\n        const fullWithRow = !!params.colDef;\n        const treeData = this.gridOptionsService.isTreeData();\n        const manyDimensionThisColumn = !fullWithRow || treeData || params.colDef.showRowGroup === true;\n        const paddingCount = manyDimensionThisColumn ? rowNode.uiLevel : 0;\n        if (this.indentClass) {\n            this.comp.addOrRemoveCssClass(this.indentClass, false);\n        }\n        this.indentClass = 'ag-row-group-indent-' + paddingCount;\n        this.comp.addOrRemoveCssClass(this.indentClass, true);\n    }\n    addFullWidthRowDraggerIfNeeded() {\n        if (!this.params.fullWidth || !this.params.rowDrag) {\n            return;\n        }\n        const rowDragComp = new RowDragComp(() => this.params.value, this.params.node);\n        this.createManagedBean(rowDragComp, this.context);\n        this.eGui.insertAdjacentElement('afterbegin', rowDragComp.getGui());\n    }\n    isUserWantsSelected() {\n        const paramsCheckbox = this.params.checkbox;\n        // if a function, we always return true as change detection can show or hide the checkbox.\n        return typeof paramsCheckbox === 'function' || paramsCheckbox === true;\n    }\n    addCheckboxIfNeeded() {\n        const rowNode = this.displayedGroupNode;\n        const checkboxNeeded = this.isUserWantsSelected() &&\n            // footers cannot be selected\n            !rowNode.footer &&\n            // pinned rows cannot be selected\n            !rowNode.rowPinned &&\n            // details cannot be selected\n            !rowNode.detail;\n        if (checkboxNeeded) {\n            const cbSelectionComponent = new CheckboxSelectionComponent();\n            this.getContext().createBean(cbSelectionComponent);\n            cbSelectionComponent.init({\n                rowNode: rowNode,\n                column: this.params.column,\n                overrides: {\n                    isVisible: this.params.checkbox,\n                    callbackParams: this.params,\n                    removeHidden: true,\n                },\n            });\n            this.eCheckbox.appendChild(cbSelectionComponent.getGui());\n            this.addDestroyFunc(() => this.getContext().destroyBean(cbSelectionComponent));\n        }\n        this.comp.setCheckboxVisible(checkboxNeeded);\n    }\n    onKeyDown(event) {\n        const isEnterKey = event.key === KeyCode.ENTER;\n        if (!isEnterKey || this.params.suppressEnterExpand) {\n            return;\n        }\n        const cellEditable = this.params.column && this.params.column.isCellEditable(this.params.node);\n        if (cellEditable) {\n            return;\n        }\n        this.onExpandOrContract(event);\n    }\n    onCellDblClicked(mouseEvent) {\n        if (isStopPropagationForAgGrid(mouseEvent)) {\n            return;\n        }\n        // we want to avoid acting on double click events on the expand / contract icon,\n        // as that icons already has expand / collapse functionality on it. otherwise if\n        // the icon was double clicked, we would get 'click', 'click', 'dblclick' which\n        // is open->close->open, however double click should be open->close only.\n        const targetIsExpandIcon = isElementInEventPath(this.eExpanded, mouseEvent)\n            || isElementInEventPath(this.eContracted, mouseEvent);\n        if (!targetIsExpandIcon) {\n            this.onExpandOrContract(mouseEvent);\n        }\n    }\n}\n__decorate$22([\n    Autowired('expressionService')\n], GroupCellRendererCtrl.prototype, \"expressionService\", void 0);\n__decorate$22([\n    Autowired('valueFormatterService')\n], GroupCellRendererCtrl.prototype, \"valueFormatterService\", void 0);\n__decorate$22([\n    Autowired('columnModel')\n], GroupCellRendererCtrl.prototype, \"columnModel\", void 0);\n__decorate$22([\n    Autowired('userComponentFactory')\n], GroupCellRendererCtrl.prototype, \"userComponentFactory\", void 0);\n__decorate$22([\n    Autowired(\"ctrlsService\")\n], GroupCellRendererCtrl.prototype, \"ctrlsService\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$21 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass GroupCellRenderer extends Component {\n    constructor() {\n        super(GroupCellRenderer.TEMPLATE);\n    }\n    init(params) {\n        const compProxy = {\n            setInnerRenderer: (compDetails, valueToDisplay) => this.setRenderDetails(compDetails, valueToDisplay),\n            setChildCount: count => this.eChildCount.innerHTML = count,\n            addOrRemoveCssClass: (cssClass, value) => this.addOrRemoveCssClass(cssClass, value),\n            setContractedDisplayed: expanded => setDisplayed(this.eContracted, expanded),\n            setExpandedDisplayed: expanded => setDisplayed(this.eExpanded, expanded),\n            setCheckboxVisible: visible => this.eCheckbox.classList.toggle('ag-invisible', !visible)\n        };\n        const ctrl = this.createManagedBean(new GroupCellRendererCtrl());\n        const fullWidth = !params.colDef;\n        const eGui = this.getGui();\n        ctrl.init(compProxy, eGui, this.eCheckbox, this.eExpanded, this.eContracted, this.constructor, params);\n        if (fullWidth) {\n            setAriaRole(eGui, 'gridcell');\n        }\n    }\n    setRenderDetails(compDetails, valueToDisplay) {\n        if (compDetails) {\n            const componentPromise = compDetails.newAgStackInstance();\n            if (!componentPromise) {\n                return;\n            }\n            componentPromise.then(comp => {\n                if (!comp) {\n                    return;\n                }\n                const destroyComp = () => this.context.destroyBean(comp);\n                if (this.isAlive()) {\n                    this.eValue.appendChild(comp.getGui());\n                    this.addDestroyFunc(destroyComp);\n                }\n                else {\n                    destroyComp();\n                }\n            });\n        }\n        else {\n            this.eValue.innerText = valueToDisplay;\n        }\n    }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so we need to have public here instead of private or protected\n    destroy() {\n        this.getContext().destroyBean(this.innerCellRenderer);\n        super.destroy();\n    }\n    refresh() {\n        return false;\n    }\n}\nGroupCellRenderer.TEMPLATE = `<span class=\"ag-cell-wrapper\">\n            <span class=\"ag-group-expanded\" ref=\"eExpanded\"></span>\n            <span class=\"ag-group-contracted\" ref=\"eContracted\"></span>\n            <span class=\"ag-group-checkbox ag-invisible\" ref=\"eCheckbox\"></span>\n            <span class=\"ag-group-value\" ref=\"eValue\"></span>\n            <span class=\"ag-group-child-count\" ref=\"eChildCount\"></span>\n        </span>`;\n__decorate$21([\n    RefSelector('eExpanded')\n], GroupCellRenderer.prototype, \"eExpanded\", void 0);\n__decorate$21([\n    RefSelector('eContracted')\n], GroupCellRenderer.prototype, \"eContracted\", void 0);\n__decorate$21([\n    RefSelector('eCheckbox')\n], GroupCellRenderer.prototype, \"eCheckbox\", void 0);\n__decorate$21([\n    RefSelector('eValue')\n], GroupCellRenderer.prototype, \"eValue\", void 0);\n__decorate$21([\n    RefSelector('eChildCount')\n], GroupCellRenderer.prototype, \"eChildCount\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$20 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass LoadingCellRenderer extends Component {\n    constructor() {\n        super(LoadingCellRenderer.TEMPLATE);\n    }\n    init(params) {\n        params.node.failedLoad ? this.setupFailed() : this.setupLoading();\n    }\n    setupFailed() {\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        this.eLoadingText.innerText = localeTextFunc('loadingError', 'ERR');\n    }\n    setupLoading() {\n        const eLoadingIcon = createIconNoSpan('groupLoading', this.gridOptionsService, null);\n        if (eLoadingIcon) {\n            this.eLoadingIcon.appendChild(eLoadingIcon);\n        }\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        this.eLoadingText.innerText = localeTextFunc('loadingOoo', 'Loading');\n    }\n    refresh(params) {\n        return false;\n    }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so we need to override destroy() just to make the method public.\n    destroy() {\n        super.destroy();\n    }\n}\nLoadingCellRenderer.TEMPLATE = `<div class=\"ag-loading\">\n            <span class=\"ag-loading-icon\" ref=\"eLoadingIcon\"></span>\n            <span class=\"ag-loading-text\" ref=\"eLoadingText\"></span>\n        </div>`;\n__decorate$20([\n    RefSelector('eLoadingIcon')\n], LoadingCellRenderer.prototype, \"eLoadingIcon\", void 0);\n__decorate$20([\n    RefSelector('eLoadingText')\n], LoadingCellRenderer.prototype, \"eLoadingText\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass LoadingOverlayComponent$1 extends Component {\n    constructor() {\n        super();\n    }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so we need to override destroy() just to make the method public.\n    destroy() {\n        super.destroy();\n    }\n    init(params) {\n        var _a;\n        const template = (_a = this.gridOptionsService.get('overlayLoadingTemplate')) !== null && _a !== void 0 ? _a : LoadingOverlayComponent$1.DEFAULT_LOADING_OVERLAY_TEMPLATE;\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        const localisedTemplate = template.replace('[LOADING...]', localeTextFunc('loadingOoo', 'Loading...'));\n        this.setTemplate(localisedTemplate);\n    }\n}\nLoadingOverlayComponent$1.DEFAULT_LOADING_OVERLAY_TEMPLATE = '<span class=\"ag-overlay-loading-center\">[LOADING...]</span>';\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass NoRowsOverlayComponent$1 extends Component {\n    constructor() {\n        super();\n    }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so we need to override destroy() just to make the method public.\n    destroy() {\n        super.destroy();\n    }\n    init(params) {\n        var _a;\n        const template = (_a = this.gridOptionsService.get('overlayNoRowsTemplate')) !== null && _a !== void 0 ? _a : NoRowsOverlayComponent$1.DEFAULT_NO_ROWS_TEMPLATE;\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        const localisedTemplate = template.replace('[NO_ROWS_TO_SHOW]', localeTextFunc('noRowsToShow', 'No Rows To Show'));\n        this.setTemplate(localisedTemplate);\n    }\n}\nNoRowsOverlayComponent$1.DEFAULT_NO_ROWS_TEMPLATE = '<span class=\"ag-overlay-no-rows-center\">[NO_ROWS_TO_SHOW]</span>';\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass TooltipComponent$1 extends PopupComponent {\n    constructor() {\n        super(/* html */ `<div class=\"ag-tooltip\"></div>`);\n    }\n    // will need to type params\n    init(params) {\n        const { value } = params;\n        this.getGui().innerHTML = escapeString(value);\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass NumberCellEditorInput {\n    getTemplate() {\n        return /* html */ `<ag-input-number-field class=\"ag-cell-editor\" ref=\"eInput\"></ag-input-number-field>`;\n    }\n    init(eInput, params) {\n        this.eInput = eInput;\n        this.params = params;\n        if (params.max != null) {\n            eInput.setMax(params.max);\n        }\n        if (params.min != null) {\n            eInput.setMin(params.min);\n        }\n        if (params.precision != null) {\n            eInput.setPrecision(params.precision);\n        }\n        if (params.step != null) {\n            eInput.setStep(params.step);\n        }\n        if (params.showStepperButtons) {\n            eInput.getInputElement().classList.add('ag-number-field-input-stepper');\n        }\n    }\n    getValue() {\n        const value = this.eInput.getValue();\n        if (!exists(value) && !exists(this.params.value)) {\n            return this.params.value;\n        }\n        let parsedValue = this.params.parseValue(value);\n        if (parsedValue == null) {\n            return parsedValue;\n        }\n        if (typeof parsedValue === 'string') {\n            if (parsedValue === '') {\n                return null;\n            }\n            parsedValue = Number(parsedValue);\n        }\n        return isNaN(parsedValue) ? null : parsedValue;\n    }\n    getStartValue() {\n        return this.params.value;\n    }\n}\nclass NumberCellEditor extends SimpleCellEditor {\n    constructor() {\n        super(new NumberCellEditorInput());\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass DateCellEditorInput {\n    getTemplate() {\n        return /* html */ `<ag-input-date-field class=\"ag-cell-editor\" ref=\"eInput\"></ag-input-date-field>`;\n    }\n    init(eInput, params) {\n        this.eInput = eInput;\n        this.params = params;\n        if (params.min != null) {\n            eInput.setMin(params.min);\n        }\n        if (params.max != null) {\n            eInput.setMax(params.max);\n        }\n        if (params.step != null) {\n            eInput.setStep(params.step);\n        }\n    }\n    getValue() {\n        const value = this.eInput.getDate();\n        if (!exists(value) && !exists(this.params.value)) {\n            return this.params.value;\n        }\n        return value !== null && value !== void 0 ? value : null;\n    }\n    getStartValue() {\n        const { value } = this.params;\n        if (!(value instanceof Date)) {\n            return undefined;\n        }\n        return serialiseDate(value, false);\n    }\n}\nclass DateCellEditor extends SimpleCellEditor {\n    constructor() {\n        super(new DateCellEditorInput());\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1$ = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass DateStringCellEditorInput {\n    constructor(getDataTypeService) {\n        this.getDataTypeService = getDataTypeService;\n    }\n    getTemplate() {\n        return /* html */ `<ag-input-date-field class=\"ag-cell-editor\" ref=\"eInput\"></ag-input-date-field>`;\n    }\n    init(eInput, params) {\n        this.eInput = eInput;\n        this.params = params;\n        if (params.min != null) {\n            eInput.setMin(params.min);\n        }\n        if (params.max != null) {\n            eInput.setMax(params.max);\n        }\n        if (params.step != null) {\n            eInput.setStep(params.step);\n        }\n    }\n    getValue() {\n        const value = this.formatDate(this.eInput.getDate());\n        if (!exists(value) && !exists(this.params.value)) {\n            return this.params.value;\n        }\n        return this.params.parseValue(value !== null && value !== void 0 ? value : '');\n    }\n    getStartValue() {\n        var _a, _b;\n        return serialiseDate((_b = this.parseDate((_a = this.params.value) !== null && _a !== void 0 ? _a : undefined)) !== null && _b !== void 0 ? _b : null, false);\n    }\n    parseDate(value) {\n        return this.getDataTypeService().getDateParserFunction()(value);\n    }\n    formatDate(value) {\n        return this.getDataTypeService().getDateFormatterFunction()(value);\n    }\n}\nclass DateStringCellEditor extends SimpleCellEditor {\n    constructor() {\n        super(new DateStringCellEditorInput(() => this.dataTypeService));\n    }\n}\n__decorate$1$([\n    Autowired('dataTypeService')\n], DateStringCellEditor.prototype, \"dataTypeService\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1_ = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass CheckboxCellRenderer extends Component {\n    constructor() {\n        super(CheckboxCellRenderer.TEMPLATE);\n    }\n    init(params) {\n        this.params = params;\n        this.updateCheckbox(params);\n        this.eCheckbox.getInputElement().setAttribute('tabindex', '-1');\n        this.addManagedListener(this.eCheckbox.getInputElement(), 'click', (event) => {\n            stopPropagationForAgGrid(event);\n            if (this.eCheckbox.isDisabled()) {\n                return;\n            }\n            const isSelected = this.eCheckbox.getValue();\n            this.onCheckboxChanged(isSelected);\n        });\n        this.addManagedListener(this.eCheckbox.getInputElement(), 'dblclick', (event) => {\n            stopPropagationForAgGrid(event);\n        });\n        const eDocument = this.gridOptionsService.getDocument();\n        this.addManagedListener(this.params.eGridCell, 'keydown', (event) => {\n            if (event.key === KeyCode.SPACE && !this.eCheckbox.isDisabled()) {\n                if (this.params.eGridCell === eDocument.activeElement) {\n                    this.eCheckbox.toggle();\n                }\n                const isSelected = this.eCheckbox.getValue();\n                this.onCheckboxChanged(isSelected);\n                event.preventDefault();\n            }\n        });\n    }\n    refresh(params) {\n        this.params = params;\n        this.updateCheckbox(params);\n        return true;\n    }\n    updateCheckbox(params) {\n        var _a, _b, _c;\n        let isSelected;\n        let displayed = true;\n        if (params.node.group && params.column) {\n            const colId = params.column.getColId();\n            if (colId.startsWith(GROUP_AUTO_COLUMN_ID)) {\n                // if we're grouping by this column then the value is a string and we need to parse it\n                isSelected = params.value == null || params.value === '' ? undefined : params.value === 'true';\n            }\n            else if (params.node.aggData && params.node.aggData[colId] !== undefined) {\n                isSelected = (_a = params.value) !== null && _a !== void 0 ? _a : undefined;\n            }\n            else {\n                displayed = false;\n            }\n        }\n        else {\n            isSelected = (_b = params.value) !== null && _b !== void 0 ? _b : undefined;\n        }\n        if (!displayed) {\n            this.eCheckbox.setDisplayed(false);\n            return;\n        }\n        this.eCheckbox.setValue(isSelected);\n        const disabled = params.disabled != null ? params.disabled : !((_c = params.column) === null || _c === void 0 ? void 0 : _c.isCellEditable(params.node));\n        this.eCheckbox.setDisabled(disabled);\n        const translate = this.localeService.getLocaleTextFunc();\n        const stateName = getAriaCheckboxStateName(translate, isSelected);\n        const ariaLabel = disabled\n            ? stateName\n            : `${translate('ariaToggleCellValue', 'Press SPACE to toggle cell value')} (${stateName})`;\n        this.eCheckbox.setInputAriaLabel(ariaLabel);\n    }\n    onCheckboxChanged(isSelected) {\n        const { column, node, rowIndex, value } = this.params;\n        const eventStarted = {\n            type: Events.EVENT_CELL_EDITING_STARTED,\n            column: column,\n            colDef: column === null || column === void 0 ? void 0 : column.getColDef(),\n            data: node.data,\n            node,\n            rowIndex,\n            rowPinned: node.rowPinned,\n            value\n        };\n        this.eventService.dispatchEvent(eventStarted);\n        const valueChanged = this.params.node.setDataValue(this.params.column, isSelected, 'edit');\n        const eventStopped = {\n            type: Events.EVENT_CELL_EDITING_STOPPED,\n            column: column,\n            colDef: column === null || column === void 0 ? void 0 : column.getColDef(),\n            data: node.data,\n            node,\n            rowIndex,\n            rowPinned: node.rowPinned,\n            value,\n            oldValue: value,\n            newValue: isSelected,\n            valueChanged\n        };\n        this.eventService.dispatchEvent(eventStopped);\n    }\n}\nCheckboxCellRenderer.TEMPLATE = `\n        <div class=\"ag-cell-wrapper ag-checkbox-cell\" role=\"presentation\">\n            <ag-checkbox role=\"presentation\" ref=\"eCheckbox\"></ag-checkbox>\n        </div>`;\n__decorate$1_([\n    RefSelector('eCheckbox')\n], CheckboxCellRenderer.prototype, \"eCheckbox\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1Z = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass CheckboxCellEditor extends PopupComponent {\n    constructor() {\n        super(/* html */ `\n            <div class=\"ag-cell-wrapper ag-cell-edit-wrapper ag-checkbox-edit\">\n                <ag-checkbox role=\"presentation\" ref=\"eCheckbox\"></ag-checkbox>\n            </div>`);\n    }\n    init(params) {\n        var _a;\n        this.params = params;\n        const isSelected = (_a = params.value) !== null && _a !== void 0 ? _a : undefined;\n        this.eCheckbox.setValue(isSelected);\n        this.eCheckbox.getInputElement().setAttribute('tabindex', '-1');\n        this.setAriaLabel(isSelected);\n        this.addManagedListener(this.eCheckbox, AgCheckbox.EVENT_CHANGED, (event) => this.setAriaLabel(event.selected));\n    }\n    getValue() {\n        return this.eCheckbox.getValue();\n    }\n    focusIn() {\n        this.eCheckbox.getFocusableElement().focus();\n    }\n    afterGuiAttached() {\n        if (this.params.cellStartedEdit) {\n            this.focusIn();\n        }\n    }\n    isPopup() {\n        return false;\n    }\n    setAriaLabel(isSelected) {\n        const translate = this.localeService.getLocaleTextFunc();\n        const stateName = getAriaCheckboxStateName(translate, isSelected);\n        const ariaLabel = translate('ariaToggleCellValue', 'Press SPACE to toggle cell value');\n        this.eCheckbox.setInputAriaLabel(`${ariaLabel} (${stateName})`);\n    }\n}\n__decorate$1Z([\n    RefSelector('eCheckbox')\n], CheckboxCellEditor.prototype, \"eCheckbox\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1Y = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet UserComponentRegistry = class UserComponentRegistry extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.agGridDefaults = {\n            //date\n            agDateInput: DefaultDateComponent,\n            //header\n            agColumnHeader: HeaderComp,\n            agColumnGroupHeader: HeaderGroupComp,\n            agSortIndicator: SortIndicatorComp,\n            //floating filters\n            agTextColumnFloatingFilter: TextFloatingFilter,\n            agNumberColumnFloatingFilter: NumberFloatingFilter,\n            agDateColumnFloatingFilter: DateFloatingFilter,\n            agReadOnlyFloatingFilter: ReadOnlyFloatingFilter,\n            // renderers\n            agAnimateShowChangeCellRenderer: AnimateShowChangeCellRenderer,\n            agAnimateSlideCellRenderer: AnimateSlideCellRenderer,\n            agGroupCellRenderer: GroupCellRenderer,\n            agGroupRowRenderer: GroupCellRenderer,\n            agLoadingCellRenderer: LoadingCellRenderer,\n            agCheckboxCellRenderer: CheckboxCellRenderer,\n            //editors\n            agCellEditor: TextCellEditor,\n            agTextCellEditor: TextCellEditor,\n            agNumberCellEditor: NumberCellEditor,\n            agDateCellEditor: DateCellEditor,\n            agDateStringCellEditor: DateStringCellEditor,\n            agSelectCellEditor: SelectCellEditor,\n            agLargeTextCellEditor: LargeTextCellEditor,\n            agCheckboxCellEditor: CheckboxCellEditor,\n            //filter\n            agTextColumnFilter: TextFilter,\n            agNumberColumnFilter: NumberFilter,\n            agDateColumnFilter: DateFilter,\n            //overlays\n            agLoadingOverlay: LoadingOverlayComponent$1,\n            agNoRowsOverlay: NoRowsOverlayComponent$1,\n            // tooltips\n            agTooltipComponent: TooltipComponent$1\n        };\n        /** Used to provide useful error messages if a user is trying to use an enterprise component without loading the module. */\n        this.enterpriseAgDefaultCompsModule = {\n            agSetColumnFilter: ModuleNames.SetFilterModule,\n            agSetColumnFloatingFilter: ModuleNames.SetFilterModule,\n            agMultiColumnFilter: ModuleNames.MultiFilterModule,\n            agMultiColumnFloatingFilter: ModuleNames.MultiFilterModule,\n            agGroupColumnFilter: ModuleNames.RowGroupingModule,\n            agGroupColumnFloatingFilter: ModuleNames.RowGroupingModule,\n            agRichSelect: ModuleNames.RichSelectModule,\n            agRichSelectCellEditor: ModuleNames.RichSelectModule,\n            agDetailCellRenderer: ModuleNames.MasterDetailModule,\n            agSparklineCellRenderer: ModuleNames.SparklinesModule\n        };\n        this.jsComps = {};\n    }\n    init() {\n        if (this.gridOptions.components != null) {\n            iterateObject(this.gridOptions.components, (key, component) => this.registerJsComponent(key, component));\n        }\n    }\n    registerDefaultComponent(name, component) {\n        if (this.agGridDefaults[name]) {\n            console.error(`Trying to overwrite a default component. You should call registerComponent`);\n            return;\n        }\n        this.agGridDefaults[name] = component;\n    }\n    registerJsComponent(name, component) {\n        this.jsComps[name] = component;\n    }\n    retrieve(propertyName, name) {\n        const createResult = (component, componentFromFramework) => ({ componentFromFramework, component });\n        // FrameworkOverrides.frameworkComponent() is used in two locations:\n        // 1) for Vue, user provided components get registered via a framework specific way.\n        // 2) for React, it's how the React UI provides alternative default components (eg GroupCellRenderer and DetailCellRenderer)\n        const registeredViaFrameworkComp = this.getFrameworkOverrides().frameworkComponent(name, this.gridOptions.components);\n        if (registeredViaFrameworkComp != null) {\n            return createResult(registeredViaFrameworkComp, true);\n        }\n        const jsComponent = this.jsComps[name];\n        if (jsComponent) {\n            const isFwkComp = this.getFrameworkOverrides().isFrameworkComponent(jsComponent);\n            return createResult(jsComponent, isFwkComp);\n        }\n        const defaultComponent = this.agGridDefaults[name];\n        if (defaultComponent) {\n            return createResult(defaultComponent, false);\n        }\n        const moduleForComponent = this.enterpriseAgDefaultCompsModule[name];\n        if (moduleForComponent) {\n            ModuleRegistry.assertRegistered(moduleForComponent, `AG Grid '${propertyName}' component: ${name}`, this.context.getGridId());\n        }\n        else {\n            doOnce(() => { this.warnAboutMissingComponent(propertyName, name); }, \"MissingComp\" + name);\n        }\n        return null;\n    }\n    warnAboutMissingComponent(propertyName, componentName) {\n        const validComponents = [\n            // Don't include the old names / internals in potential suggestions\n            ...Object.keys(this.agGridDefaults).filter(k => !['agCellEditor', 'agGroupRowRenderer', 'agSortIndicator'].includes(k)),\n            ...Object.keys(this.jsComps)\n        ];\n        const suggestions = fuzzySuggestions(componentName, validComponents, true, 0.8);\n        console.warn(`AG Grid: Could not find '${componentName}' component. It was configured as \"${propertyName}: '${componentName}'\" but it wasn't found in the list of registered components.`);\n        if (suggestions.length > 0) {\n            console.warn(`         Did you mean: [${suggestions.slice(0, 3)}]?`);\n        }\n        console.warn(`If using a custom component check it has been registered as described in: https://ag-grid.com/javascript-data-grid/components/`);\n    }\n};\n__decorate$1Y([\n    Autowired('gridOptions')\n], UserComponentRegistry.prototype, \"gridOptions\", void 0);\n__decorate$1Y([\n    PostConstruct\n], UserComponentRegistry.prototype, \"init\", null);\nUserComponentRegistry = __decorate$1Y([\n    Bean('userComponentRegistry')\n], UserComponentRegistry);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nconst DateComponent = {\n    propertyName: 'dateComponent',\n    cellRenderer: false\n};\nconst HeaderComponent = {\n    propertyName: 'headerComponent',\n    cellRenderer: false\n};\nconst HeaderGroupComponent = {\n    propertyName: 'headerGroupComponent',\n    cellRenderer: false\n};\nconst CellRendererComponent = {\n    propertyName: 'cellRenderer',\n    cellRenderer: true\n};\nconst CellEditorComponent = {\n    propertyName: 'cellEditor',\n    cellRenderer: false\n};\nconst InnerRendererComponent = {\n    propertyName: 'innerRenderer',\n    cellRenderer: true\n};\nconst LoadingOverlayComponent = {\n    propertyName: 'loadingOverlayComponent',\n    cellRenderer: false\n};\nconst NoRowsOverlayComponent = {\n    propertyName: 'noRowsOverlayComponent',\n    cellRenderer: false\n};\nconst TooltipComponent = {\n    propertyName: 'tooltipComponent',\n    cellRenderer: false\n};\nconst FilterComponent = {\n    propertyName: 'filter',\n    cellRenderer: false\n};\nconst FloatingFilterComponent = {\n    propertyName: 'floatingFilterComponent',\n    cellRenderer: false\n};\nconst ToolPanelComponent = {\n    propertyName: 'toolPanel',\n    cellRenderer: false\n};\nconst StatusPanelComponent = {\n    propertyName: 'statusPanel',\n    cellRenderer: false\n};\nconst FullWidth = {\n    propertyName: 'fullWidthCellRenderer',\n    cellRenderer: true\n};\nconst FullWidthLoading = {\n    propertyName: 'loadingCellRenderer',\n    cellRenderer: true\n};\nconst FullWidthGroup = {\n    propertyName: 'groupRowRenderer',\n    cellRenderer: true\n};\nconst FullWidthDetail = {\n    propertyName: 'detailCellRenderer',\n    cellRenderer: true\n};\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass FloatingFilterMapper {\n    static getFloatingFilterType(filterType) {\n        return this.filterToFloatingFilterMapping[filterType];\n    }\n}\nFloatingFilterMapper.filterToFloatingFilterMapping = {\n    set: 'agSetColumnFloatingFilter',\n    agSetColumnFilter: 'agSetColumnFloatingFilter',\n    multi: 'agMultiColumnFloatingFilter',\n    agMultiColumnFilter: 'agMultiColumnFloatingFilter',\n    group: 'agGroupColumnFloatingFilter',\n    agGroupColumnFilter: 'agGroupColumnFloatingFilter',\n    number: 'agNumberColumnFloatingFilter',\n    agNumberColumnFilter: 'agNumberColumnFloatingFilter',\n    date: 'agDateColumnFloatingFilter',\n    agDateColumnFilter: 'agDateColumnFloatingFilter',\n    text: 'agTextColumnFloatingFilter',\n    agTextColumnFilter: 'agTextColumnFloatingFilter'\n};\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1X = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet UserComponentFactory = class UserComponentFactory extends BeanStub {\n    getHeaderCompDetails(colDef, params) {\n        return this.getCompDetails(colDef, HeaderComponent, 'agColumnHeader', params);\n    }\n    getHeaderGroupCompDetails(params) {\n        const colGroupDef = params.columnGroup.getColGroupDef();\n        return this.getCompDetails(colGroupDef, HeaderGroupComponent, 'agColumnGroupHeader', params);\n    }\n    // this one is unusual, as it can be LoadingCellRenderer, DetailCellRenderer, FullWidthCellRenderer or GroupRowRenderer.\n    // so we have to pass the type in.\n    getFullWidthCellRendererDetails(params) {\n        return this.getCompDetails(this.gridOptions, FullWidth, null, params, true);\n    }\n    getFullWidthLoadingCellRendererDetails(params) {\n        return this.getCompDetails(this.gridOptions, FullWidthLoading, 'agLoadingCellRenderer', params, true);\n    }\n    getFullWidthGroupCellRendererDetails(params) {\n        return this.getCompDetails(this.gridOptions, FullWidthGroup, 'agGroupRowRenderer', params, true);\n    }\n    getFullWidthDetailCellRendererDetails(params) {\n        return this.getCompDetails(this.gridOptions, FullWidthDetail, 'agDetailCellRenderer', params, true);\n    }\n    // CELL RENDERER\n    getInnerRendererDetails(def, params) {\n        return this.getCompDetails(def, InnerRendererComponent, null, params);\n    }\n    getFullWidthGroupRowInnerCellRenderer(def, params) {\n        return this.getCompDetails(def, InnerRendererComponent, null, params);\n    }\n    getCellRendererDetails(def, params) {\n        return this.getCompDetails(def, CellRendererComponent, null, params);\n    }\n    // CELL EDITOR\n    getCellEditorDetails(def, params) {\n        return this.getCompDetails(def, CellEditorComponent, 'agCellEditor', params, true);\n    }\n    // FILTER\n    getFilterDetails(def, params, defaultFilter) {\n        return this.getCompDetails(def, FilterComponent, defaultFilter, params, true);\n    }\n    getDateCompDetails(params) {\n        return this.getCompDetails(this.gridOptions, DateComponent, 'agDateInput', params, true);\n    }\n    getLoadingOverlayCompDetails(params) {\n        return this.getCompDetails(this.gridOptions, LoadingOverlayComponent, 'agLoadingOverlay', params, true);\n    }\n    getNoRowsOverlayCompDetails(params) {\n        return this.getCompDetails(this.gridOptions, NoRowsOverlayComponent, 'agNoRowsOverlay', params, true);\n    }\n    getTooltipCompDetails(params) {\n        return this.getCompDetails(params.colDef, TooltipComponent, 'agTooltipComponent', params, true);\n    }\n    getSetFilterCellRendererDetails(def, params) {\n        return this.getCompDetails(def, CellRendererComponent, null, params);\n    }\n    getFloatingFilterCompDetails(def, params, defaultFloatingFilter) {\n        return this.getCompDetails(def, FloatingFilterComponent, defaultFloatingFilter, params);\n    }\n    getToolPanelCompDetails(toolPanelDef, params) {\n        return this.getCompDetails(toolPanelDef, ToolPanelComponent, null, params, true);\n    }\n    getStatusPanelCompDetails(def, params) {\n        return this.getCompDetails(def, StatusPanelComponent, null, params, true);\n    }\n    getCompDetails(defObject, type, defaultName, params, mandatory = false) {\n        const { propertyName, cellRenderer } = type;\n        let { compName, jsComp, fwComp, paramsFromSelector, popupFromSelector, popupPositionFromSelector } = this.getCompKeys(defObject, type, params);\n        const lookupFromRegistry = (key) => {\n            const item = this.userComponentRegistry.retrieve(propertyName, key);\n            if (item) {\n                jsComp = !item.componentFromFramework ? item.component : undefined;\n                fwComp = item.componentFromFramework ? item.component : undefined;\n            }\n        };\n        // if compOption is a string, means we need to look the item up\n        if (compName != null) {\n            lookupFromRegistry(compName);\n        }\n        // if lookup brought nothing back, and we have a default, lookup the default\n        if (jsComp == null && fwComp == null && defaultName != null) {\n            lookupFromRegistry(defaultName);\n        }\n        // if we have a comp option, and it's a function, replace it with an object equivalent adaptor\n        if (jsComp && cellRenderer && !this.agComponentUtils.doesImplementIComponent(jsComp)) {\n            jsComp = this.agComponentUtils.adaptFunction(propertyName, jsComp);\n        }\n        if (!jsComp && !fwComp) {\n            if (mandatory) {\n                console.error(`AG Grid: Could not find component ${compName}, did you forget to configure this component?`);\n            }\n            return;\n        }\n        const paramsMerged = this.mergeParamsWithApplicationProvidedParams(defObject, type, params, paramsFromSelector);\n        const componentFromFramework = jsComp == null;\n        const componentClass = jsComp ? jsComp : fwComp;\n        return {\n            componentFromFramework,\n            componentClass,\n            params: paramsMerged,\n            type: type,\n            popupFromSelector,\n            popupPositionFromSelector,\n            newAgStackInstance: () => this.newAgStackInstance(componentClass, componentFromFramework, paramsMerged, type)\n        };\n    }\n    getCompKeys(defObject, type, params) {\n        const { propertyName } = type;\n        let compName;\n        let jsComp;\n        let fwComp;\n        let paramsFromSelector;\n        let popupFromSelector;\n        let popupPositionFromSelector;\n        // there are two types of js comps, class based and func based. we can only check for\n        // class based, by checking if getGui() exists. no way to differentiate js func based vs eg react func based\n        // const isJsClassComp = (comp: any) => this.agComponentUtils.doesImplementIComponent(comp);\n        // const fwActive = this.frameworkComponentWrapper != null;\n        // pull from defObject if available\n        if (defObject) {\n            const defObjectAny = defObject;\n            // if selector, use this\n            const selectorFunc = defObjectAny[propertyName + 'Selector'];\n            const selectorRes = selectorFunc ? selectorFunc(params) : null;\n            const assignComp = (providedJsComp) => {\n                if (typeof providedJsComp === 'string') {\n                    compName = providedJsComp;\n                }\n                else if (providedJsComp != null && providedJsComp !== true) {\n                    const isFwkComp = this.getFrameworkOverrides().isFrameworkComponent(providedJsComp);\n                    if (isFwkComp) {\n                        fwComp = providedJsComp;\n                    }\n                    else {\n                        jsComp = providedJsComp;\n                    }\n                }\n            };\n            if (selectorRes) {\n                assignComp(selectorRes.component);\n                paramsFromSelector = selectorRes.params;\n                popupFromSelector = selectorRes.popup;\n                popupPositionFromSelector = selectorRes.popupPosition;\n            }\n            else {\n                // if no selector, or result of selector is empty, take from defObject\n                assignComp(defObjectAny[propertyName]);\n            }\n        }\n        return { compName, jsComp, fwComp, paramsFromSelector, popupFromSelector, popupPositionFromSelector };\n    }\n    newAgStackInstance(ComponentClass, componentFromFramework, params, type) {\n        const propertyName = type.propertyName;\n        const jsComponent = !componentFromFramework;\n        // using javascript component\n        let instance;\n        if (jsComponent) {\n            instance = new ComponentClass();\n        }\n        else {\n            // Using framework component\n            const thisComponentConfig = this.componentMetadataProvider.retrieve(propertyName);\n            instance = this.frameworkComponentWrapper.wrap(ComponentClass, thisComponentConfig.mandatoryMethodList, thisComponentConfig.optionalMethodList, type);\n        }\n        const deferredInit = this.initComponent(instance, params);\n        if (deferredInit == null) {\n            return AgPromise.resolve(instance);\n        }\n        return deferredInit.then(() => instance);\n    }\n    // used by Floating Filter\n    mergeParamsWithApplicationProvidedParams(defObject, type, paramsFromGrid, paramsFromSelector = null) {\n        const params = {\n            context: this.gridOptionsService.context,\n            columnApi: this.gridOptionsService.columnApi,\n            api: this.gridOptionsService.api\n        };\n        mergeDeep(params, paramsFromGrid);\n        // pull user params from either the old prop name and new prop name\n        // eg either cellRendererParams and cellCompParams\n        const defObjectAny = defObject;\n        const userParams = defObjectAny && defObjectAny[type.propertyName + 'Params'];\n        if (typeof userParams === 'function') {\n            const userParamsFromFunc = userParams(paramsFromGrid);\n            mergeDeep(params, userParamsFromFunc);\n        }\n        else if (typeof userParams === 'object') {\n            mergeDeep(params, userParams);\n        }\n        mergeDeep(params, paramsFromSelector);\n        return params;\n    }\n    initComponent(component, params) {\n        this.context.createBean(component);\n        if (component.init == null) {\n            return;\n        }\n        return component.init(params);\n    }\n    getDefaultFloatingFilterType(def, getFromDefault) {\n        if (def == null) {\n            return null;\n        }\n        let defaultFloatingFilterType = null;\n        let { compName, jsComp, fwComp } = this.getCompKeys(def, FilterComponent);\n        if (compName) {\n            // will be undefined if not in the map\n            defaultFloatingFilterType = FloatingFilterMapper.getFloatingFilterType(compName);\n        }\n        else {\n            const usingDefaultFilter = (jsComp == null && fwComp == null) && (def.filter === true);\n            if (usingDefaultFilter) {\n                defaultFloatingFilterType = getFromDefault();\n            }\n        }\n        return defaultFloatingFilterType;\n    }\n};\n__decorate$1X([\n    Autowired('gridOptions')\n], UserComponentFactory.prototype, \"gridOptions\", void 0);\n__decorate$1X([\n    Autowired('agComponentUtils')\n], UserComponentFactory.prototype, \"agComponentUtils\", void 0);\n__decorate$1X([\n    Autowired('componentMetadataProvider')\n], UserComponentFactory.prototype, \"componentMetadataProvider\", void 0);\n__decorate$1X([\n    Autowired('userComponentRegistry')\n], UserComponentFactory.prototype, \"userComponentRegistry\", void 0);\n__decorate$1X([\n    Optional('frameworkComponentWrapper')\n], UserComponentFactory.prototype, \"frameworkComponentWrapper\", void 0);\nUserComponentFactory = __decorate$1X([\n    Bean('userComponentFactory')\n], UserComponentFactory);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n// Excel Export\nvar ExcelFactoryMode;\n(function (ExcelFactoryMode) {\n    ExcelFactoryMode[ExcelFactoryMode[\"SINGLE_SHEET\"] = 0] = \"SINGLE_SHEET\";\n    ExcelFactoryMode[ExcelFactoryMode[\"MULTI_SHEET\"] = 1] = \"MULTI_SHEET\";\n})(ExcelFactoryMode || (ExcelFactoryMode = {}));\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1W = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/** Adds drag listening onto an element. In AG Grid this is used twice, first is resizing columns,\n * second is moving the columns and column groups around (ie the 'drag' part of Drag and Drop. */\nlet DragService = class DragService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.dragEndFunctions = [];\n        this.dragSources = [];\n    }\n    removeAllListeners() {\n        this.dragSources.forEach(this.removeListener.bind(this));\n        this.dragSources.length = 0;\n    }\n    removeListener(dragSourceAndListener) {\n        const element = dragSourceAndListener.dragSource.eElement;\n        const mouseDownListener = dragSourceAndListener.mouseDownListener;\n        element.removeEventListener('mousedown', mouseDownListener);\n        // remove touch listener only if it exists\n        if (dragSourceAndListener.touchEnabled) {\n            const touchStartListener = dragSourceAndListener.touchStartListener;\n            element.removeEventListener('touchstart', touchStartListener, { passive: true });\n        }\n    }\n    removeDragSource(params) {\n        const dragSourceAndListener = this.dragSources.find(item => item.dragSource === params);\n        if (!dragSourceAndListener) {\n            return;\n        }\n        this.removeListener(dragSourceAndListener);\n        removeFromArray(this.dragSources, dragSourceAndListener);\n    }\n    isDragging() {\n        return this.dragging;\n    }\n    addDragSource(params, includeTouch = false) {\n        const mouseListener = this.onMouseDown.bind(this, params);\n        params.eElement.addEventListener('mousedown', mouseListener);\n        let touchListener = null;\n        const suppressTouch = this.gridOptionsService.is('suppressTouch');\n        if (includeTouch && !suppressTouch) {\n            touchListener = (touchEvent) => {\n                if (isFocusableFormField(touchEvent.target)) {\n                    return;\n                }\n                if (touchEvent.cancelable) {\n                    touchEvent.preventDefault();\n                    touchEvent.stopPropagation();\n                }\n                this.onTouchStart(params, touchEvent);\n            };\n            // we set passive=false, as we want to prevent default on this event\n            params.eElement.addEventListener('touchstart', touchListener, { passive: false });\n        }\n        this.dragSources.push({\n            dragSource: params,\n            mouseDownListener: mouseListener,\n            touchStartListener: touchListener,\n            touchEnabled: includeTouch\n        });\n    }\n    getStartTarget() {\n        return this.startTarget;\n    }\n    // gets called whenever mouse down on any drag source\n    onTouchStart(params, touchEvent) {\n        this.currentDragParams = params;\n        this.dragging = false;\n        const touch = touchEvent.touches[0];\n        this.touchLastTime = touch;\n        this.touchStart = touch;\n        const touchMoveEvent = (e) => this.onTouchMove(e, params.eElement);\n        const touchEndEvent = (e) => this.onTouchUp(e, params.eElement);\n        const documentTouchMove = (e) => { if (e.cancelable) {\n            e.preventDefault();\n        } };\n        const target = touchEvent.target;\n        const events = [\n            // Prevents the page document from moving while we are dragging items around.\n            // preventDefault needs to be called in the touchmove listener and never inside the\n            // touchstart, because using touchstart causes the click event to be cancelled on touch devices.\n            { target: this.gridOptionsService.getRootNode(), type: 'touchmove', listener: documentTouchMove, options: { passive: false } },\n            { target, type: 'touchmove', listener: touchMoveEvent, options: { passive: true } },\n            { target, type: 'touchend', listener: touchEndEvent, options: { passive: true } },\n            { target, type: 'touchcancel', listener: touchEndEvent, options: { passive: true } }\n        ];\n        // temporally add these listeners, for the duration of the drag\n        this.addTemporaryEvents(events);\n        // see if we want to start dragging straight away\n        if (params.dragStartPixels === 0) {\n            this.onCommonMove(touch, this.touchStart, params.eElement);\n        }\n    }\n    // gets called whenever mouse down on any drag source\n    onMouseDown(params, mouseEvent) {\n        const e = mouseEvent;\n        if (params.skipMouseEvent && params.skipMouseEvent(mouseEvent)) {\n            return;\n        }\n        // if there are two elements with parent / child relationship, and both are draggable,\n        // when we drag the child, we should NOT drag the parent. an example of this is row moving\n        // and range selection - row moving should get preference when use drags the rowDrag component.\n        if (e._alreadyProcessedByDragService) {\n            return;\n        }\n        e._alreadyProcessedByDragService = true;\n        // only interested in left button clicks\n        if (mouseEvent.button !== 0) {\n            return;\n        }\n        this.currentDragParams = params;\n        this.dragging = false;\n        this.mouseStartEvent = mouseEvent;\n        this.startTarget = mouseEvent.target;\n        const mouseMoveEvent = (event) => this.onMouseMove(event, params.eElement);\n        const mouseUpEvent = (event) => this.onMouseUp(event, params.eElement);\n        const contextEvent = (event) => event.preventDefault();\n        const target = this.gridOptionsService.getRootNode();\n        const events = [\n            { target, type: 'mousemove', listener: mouseMoveEvent },\n            { target, type: 'mouseup', listener: mouseUpEvent },\n            { target, type: 'contextmenu', listener: contextEvent }\n        ];\n        // temporally add these listeners, for the duration of the drag\n        this.addTemporaryEvents(events);\n        //see if we want to start dragging straight away\n        if (params.dragStartPixels === 0) {\n            this.onMouseMove(mouseEvent, params.eElement);\n        }\n    }\n    addTemporaryEvents(events) {\n        events.forEach((currentEvent) => {\n            const { target, type, listener, options } = currentEvent;\n            target.addEventListener(type, listener, options);\n        });\n        this.dragEndFunctions.push(() => {\n            events.forEach((currentEvent) => {\n                const { target, type, listener, options } = currentEvent;\n                target.removeEventListener(type, listener, options);\n            });\n        });\n    }\n    // returns true if the event is close to the original event by X pixels either vertically or horizontally.\n    // we only start dragging after X pixels so this allows us to know if we should start dragging yet.\n    isEventNearStartEvent(currentEvent, startEvent) {\n        // by default, we wait 4 pixels before starting the drag\n        const { dragStartPixels } = this.currentDragParams;\n        const requiredPixelDiff = exists(dragStartPixels) ? dragStartPixels : 4;\n        return areEventsNear(currentEvent, startEvent, requiredPixelDiff);\n    }\n    getFirstActiveTouch(touchList) {\n        for (let i = 0; i < touchList.length; i++) {\n            if (touchList[i].identifier === this.touchStart.identifier) {\n                return touchList[i];\n            }\n        }\n        return null;\n    }\n    onCommonMove(currentEvent, startEvent, el) {\n        if (!this.dragging) {\n            // if mouse hasn't travelled from the start position enough, do nothing\n            if (!this.dragging && this.isEventNearStartEvent(currentEvent, startEvent)) {\n                return;\n            }\n            this.dragging = true;\n            const event = {\n                type: Events.EVENT_DRAG_STARTED,\n                target: el\n            };\n            this.eventService.dispatchEvent(event);\n            this.currentDragParams.onDragStart(startEvent);\n            // we need ONE drag action at the startEvent, so that we are guaranteed the drop target\n            // at the start gets notified. this is because the drag can start outside of the element\n            // that started it, as the mouse is allowed drag away from the mouse down before it's\n            // considered a drag (the isEventNearStartEvent() above). if we didn't do this, then\n            // it would be possible to click a column by the edge, then drag outside of the drop zone\n            // in less than 4 pixels and the drag officially starts outside of the header but the header\n            // wouldn't be notified of the dragging.\n            this.currentDragParams.onDragging(startEvent);\n        }\n        this.currentDragParams.onDragging(currentEvent);\n    }\n    onTouchMove(touchEvent, el) {\n        const touch = this.getFirstActiveTouch(touchEvent.touches);\n        if (!touch) {\n            return;\n        }\n        // this.___statusPanel.setInfoText(Math.random() + ' onTouchMove preventDefault stopPropagation');\n        this.onCommonMove(touch, this.touchStart, el);\n    }\n    // only gets called after a mouse down - as this is only added after mouseDown\n    // and is removed when mouseUp happens\n    onMouseMove(mouseEvent, el) {\n        // when `isEnableCellTextSelect` is `true`, we need to preventDefault on mouseMove\n        // to avoid the grid text being selected while dragging components.\n        // Note: Safari also has an issue, where `user-select: none` is not being respected.\n        if ((this.gridOptionsService.is('enableCellTextSelection') || isBrowserSafari()) &&\n            // The event type can be `mousedown` when `dragStartPixels=0`\n            // we should only preventDefault on `mousemove`.\n            mouseEvent.type === 'mousemove' &&\n            mouseEvent.cancelable &&\n            this.mouseEventService.isEventFromThisGrid(mouseEvent) &&\n            // we should not prevent mouseMove when above a form field\n            // as that would prevent the text in the field from being selected\n            !this.isOverFormFieldElement(mouseEvent)) {\n            mouseEvent.preventDefault();\n        }\n        this.onCommonMove(mouseEvent, this.mouseStartEvent, el);\n    }\n    isOverFormFieldElement(mouseEvent) {\n        const el = mouseEvent.target;\n        const tagName = el === null || el === void 0 ? void 0 : el.tagName.toLocaleLowerCase();\n        return !!(tagName === null || tagName === void 0 ? void 0 : tagName.match('^a$|textarea|input|select|button'));\n    }\n    onTouchUp(touchEvent, el) {\n        let touch = this.getFirstActiveTouch(touchEvent.changedTouches);\n        // i haven't worked this out yet, but there is no matching touch\n        // when we get the touch up event. to get around this, we swap in\n        // the last touch. this is a hack to 'get it working' while we\n        // figure out what's going on, why we are not getting a touch in\n        // current event.\n        if (!touch) {\n            touch = this.touchLastTime;\n        }\n        // if mouse was left up before we started to move, then this is a tap.\n        // we check this before onUpCommon as onUpCommon resets the dragging\n        // let tap = !this.dragging;\n        // let tapTarget = this.currentDragParams.eElement;\n        this.onUpCommon(touch, el);\n        // if tap, tell user\n        // console.log(`${Math.random()} tap = ${tap}`);\n        // if (tap) {\n        //     tapTarget.click();\n        // }\n    }\n    onMouseUp(mouseEvent, el) {\n        this.onUpCommon(mouseEvent, el);\n    }\n    onUpCommon(eventOrTouch, el) {\n        if (this.dragging) {\n            this.dragging = false;\n            this.currentDragParams.onDragStop(eventOrTouch);\n            const event = {\n                type: Events.EVENT_DRAG_STOPPED,\n                target: el\n            };\n            this.eventService.dispatchEvent(event);\n        }\n        this.mouseStartEvent = null;\n        this.startTarget = null;\n        this.touchStart = null;\n        this.touchLastTime = null;\n        this.currentDragParams = null;\n        this.dragEndFunctions.forEach(func => func());\n        this.dragEndFunctions.length = 0;\n    }\n};\n__decorate$1W([\n    Autowired('mouseEventService')\n], DragService.prototype, \"mouseEventService\", void 0);\n__decorate$1W([\n    PreDestroy\n], DragService.prototype, \"removeAllListeners\", null);\nDragService = __decorate$1W([\n    Bean('dragService')\n], DragService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar RowHighlightPosition;\n(function (RowHighlightPosition) {\n    RowHighlightPosition[RowHighlightPosition[\"Above\"] = 0] = \"Above\";\n    RowHighlightPosition[RowHighlightPosition[\"Below\"] = 1] = \"Below\";\n})(RowHighlightPosition || (RowHighlightPosition = {}));\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar ClientSideRowModelSteps;\n(function (ClientSideRowModelSteps) {\n    ClientSideRowModelSteps[\"EVERYTHING\"] = \"group\";\n    ClientSideRowModelSteps[\"FILTER\"] = \"filter\";\n    ClientSideRowModelSteps[\"SORT\"] = \"sort\";\n    ClientSideRowModelSteps[\"MAP\"] = \"map\";\n    ClientSideRowModelSteps[\"AGGREGATE\"] = \"aggregate\";\n    ClientSideRowModelSteps[\"FILTER_AGGREGATES\"] = \"filter_aggregates\";\n    ClientSideRowModelSteps[\"PIVOT\"] = \"pivot\";\n    ClientSideRowModelSteps[\"NOTHING\"] = \"nothing\";\n})(ClientSideRowModelSteps || (ClientSideRowModelSteps = {}));\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1V = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nfunction unwrapUserComp(comp) {\n    const compAsAny = comp;\n    const isProxy = compAsAny != null && compAsAny.getFrameworkComponentInstance != null;\n    return isProxy ? compAsAny.getFrameworkComponentInstance() : comp;\n}\nlet GridApi = class GridApi {\n    constructor() {\n        this.detailGridInfoMap = {};\n        this.destroyCalled = false;\n    }\n    registerOverlayWrapperComp(overlayWrapperComp) {\n        this.overlayWrapperComp = overlayWrapperComp;\n    }\n    registerSideBarComp(sideBarComp) {\n        this.sideBarComp = sideBarComp;\n    }\n    init() {\n        switch (this.rowModel.getType()) {\n            case 'clientSide':\n                this.clientSideRowModel = this.rowModel;\n                break;\n            case 'infinite':\n                this.infiniteRowModel = this.rowModel;\n                break;\n            case 'serverSide':\n                this.serverSideRowModel = this.rowModel;\n                break;\n        }\n        this.ctrlsService.whenReady(() => {\n            this.gridBodyCtrl = this.ctrlsService.getGridBodyCtrl();\n        });\n    }\n    /** Used internally by grid. Not intended to be used by the client. Interface may change between releases. */\n    __getAlignedGridService() {\n        return this.alignedGridsService;\n    }\n    /** Used internally by grid. Not intended to be used by the client. Interface may change between releases. */\n    __getContext() {\n        return this.context;\n    }\n    getSetterMethod(key) {\n        return `set${key.charAt(0).toUpperCase()}${key.substring(1)}`;\n    }\n    /** Used internally by grid. Not intended to be used by the client. Interface may change between releases. */\n    __setProperty(propertyName, value) {\n        // Ensure the GridOptions property gets updated and fires the change event as we\n        // cannot assume that the dynamic Api call will updated GridOptions.\n        this.gridOptionsService.set(propertyName, value);\n        // If the dynamic api does update GridOptions then change detection in the \n        // GridOptionsService will prevent the event being fired twice.\n        const setterName = this.getSetterMethod(propertyName);\n        const dynamicApi = this;\n        if (dynamicApi[setterName]) {\n            dynamicApi[setterName](value);\n        }\n    }\n    /** Returns the `gridId` for the current grid as specified via the gridOptions property `gridId` or the auto assigned grid id if none was provided. */\n    getGridId() {\n        return this.context.getGridId();\n    }\n    /** Register a detail grid with the master grid when it is created. */\n    addDetailGridInfo(id, gridInfo) {\n        this.detailGridInfoMap[id] = gridInfo;\n    }\n    /** Unregister a detail grid from the master grid when it is destroyed. */\n    removeDetailGridInfo(id) {\n        this.detailGridInfoMap[id] = undefined;\n    }\n    /** Returns the `DetailGridInfo` corresponding to the supplied `detailGridId`. */\n    getDetailGridInfo(id) {\n        return this.detailGridInfoMap[id];\n    }\n    /** Iterates through each `DetailGridInfo` in the grid and calls the supplied callback on each. */\n    forEachDetailGridInfo(callback) {\n        let index = 0;\n        iterateObject(this.detailGridInfoMap, (id, gridInfo) => {\n            // check for undefined, as old references will still be lying around\n            if (exists(gridInfo)) {\n                callback(gridInfo, index);\n                index++;\n            }\n        });\n    }\n    /** Similar to `exportDataAsCsv`, except returns the result as a string rather than download it. */\n    getDataAsCsv(params) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.CsvExportModule, 'api.getDataAsCsv', this.context.getGridId())) {\n            return this.csvCreator.getDataAsCsv(params);\n        }\n    }\n    /** Downloads a CSV export of the grid's data. */\n    exportDataAsCsv(params) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.CsvExportModule, 'api.exportDataAsCSv', this.context.getGridId())) {\n            this.csvCreator.exportDataAsCsv(params);\n        }\n    }\n    getExcelExportMode(params) {\n        const baseParams = this.gridOptionsService.get('defaultExcelExportParams');\n        const mergedParams = Object.assign({ exportMode: 'xlsx' }, baseParams, params);\n        return mergedParams.exportMode;\n    }\n    assertNotExcelMultiSheet(method, params) {\n        if (!ModuleRegistry.assertRegistered(ModuleNames.ExcelExportModule, 'api.' + method, this.context.getGridId())) {\n            return false;\n        }\n        const exportMode = this.getExcelExportMode(params);\n        if (this.excelCreator.getFactoryMode(exportMode) === ExcelFactoryMode.MULTI_SHEET) {\n            console.warn(\"AG Grid: The Excel Exporter is currently on Multi Sheet mode. End that operation by calling 'api.getMultipleSheetAsExcel()' or 'api.exportMultipleSheetsAsExcel()'\");\n            return false;\n        }\n        return true;\n    }\n    /** Similar to `exportDataAsExcel`, except instead of downloading a file, it will return a [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) to be processed by the user. */\n    getDataAsExcel(params) {\n        if (this.assertNotExcelMultiSheet('getDataAsExcel', params)) {\n            return this.excelCreator.getDataAsExcel(params);\n        }\n    }\n    /** Downloads an Excel export of the grid's data. */\n    exportDataAsExcel(params) {\n        if (this.assertNotExcelMultiSheet('exportDataAsExcel', params)) {\n            this.excelCreator.exportDataAsExcel(params);\n        }\n    }\n    /** This is method to be used to get the grid's data as a sheet, that will later be exported either by `getMultipleSheetsAsExcel()` or `exportMultipleSheetsAsExcel()`. */\n    getSheetDataForExcel(params) {\n        if (!ModuleRegistry.assertRegistered(ModuleNames.ExcelExportModule, 'api.getSheetDataForExcel', this.context.getGridId())) {\n            return;\n        }\n        const exportMode = this.getExcelExportMode(params);\n        this.excelCreator.setFactoryMode(ExcelFactoryMode.MULTI_SHEET, exportMode);\n        return this.excelCreator.getSheetDataForExcel(params);\n    }\n    /** Similar to `exportMultipleSheetsAsExcel`, except instead of downloading a file, it will return a [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) to be processed by the user. */\n    getMultipleSheetsAsExcel(params) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.ExcelExportModule, 'api.getMultipleSheetsAsExcel', this.context.getGridId())) {\n            return this.excelCreator.getMultipleSheetsAsExcel(params);\n        }\n    }\n    /** Downloads an Excel export of multiple sheets in one file. */\n    exportMultipleSheetsAsExcel(params) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.ExcelExportModule, 'api.exportMultipleSheetsAsExcel', this.context.getGridId())) {\n            return this.excelCreator.exportMultipleSheetsAsExcel(params);\n        }\n    }\n    /**\n     * Sets an ARIA property in the grid panel (element with `role=\\\"grid\\\"`), and removes an ARIA property when the value is null.\n     *\n     * Example: `api.setGridAriaProperty('label', 'my grid')` will set `aria-label=\\\"my grid\\\"`.\n     *\n     * `api.setGridAriaProperty('label', null)` will remove the `aria-label` attribute from the grid element.\n     */\n    setGridAriaProperty(property, value) {\n        if (!property) {\n            return;\n        }\n        const eGrid = this.ctrlsService.getGridBodyCtrl().getGui();\n        const ariaProperty = `aria-${property}`;\n        if (value === null) {\n            eGrid.removeAttribute(ariaProperty);\n        }\n        else {\n            eGrid.setAttribute(ariaProperty, value);\n        }\n    }\n    logMissingRowModel(apiMethod, ...requiredRowModels) {\n        console.error(`AG Grid: api.${apiMethod} can only be called when gridOptions.rowModelType is ${requiredRowModels.join(' or ')}`);\n    }\n    /** Set new datasource for Server-Side Row Model. */\n    setServerSideDatasource(datasource) {\n        if (this.serverSideRowModel) {\n            this.serverSideRowModel.setDatasource(datasource);\n        }\n        else {\n            this.logMissingRowModel('setServerSideDatasource', 'serverSide');\n        }\n    }\n    /**\n     * Updates the `cacheBlockSize` when requesting data from the server if `suppressServerSideInfiniteScroll` is not enabled.\n     *\n     * Note this purges all the cached data and reloads all the rows of the grid.\n     * */\n    setCacheBlockSize(blockSize) {\n        if (this.serverSideRowModel) {\n            this.gridOptionsService.set('cacheBlockSize', blockSize);\n            this.serverSideRowModel.resetRootStore();\n        }\n        else {\n            this.logMissingRowModel('setCacheBlockSize', 'serverSide');\n        }\n    }\n    /** Set new datasource for Infinite Row Model. */\n    setDatasource(datasource) {\n        if (this.gridOptionsService.isRowModelType('infinite')) {\n            this.rowModel.setDatasource(datasource);\n        }\n        else {\n            this.logMissingRowModel('setDatasource', 'infinite');\n        }\n    }\n    /** Set new datasource for Viewport Row Model. */\n    setViewportDatasource(viewportDatasource) {\n        if (this.gridOptionsService.isRowModelType('viewport')) {\n            // this is bad coding, because it's using an interface that's exposed in the enterprise.\n            // really we should create an interface in the core for viewportDatasource and let\n            // the enterprise implement it, rather than casting to 'any' here\n            this.rowModel.setViewportDatasource(viewportDatasource);\n        }\n        else {\n            this.logMissingRowModel('setViewportDatasource', 'viewport');\n        }\n    }\n    /** Set the row data. */\n    setRowData(rowData) {\n        // immutable service is part of the CSRM module, if missing, no CSRM\n        const missingImmutableService = this.immutableService == null;\n        if (missingImmutableService) {\n            this.logMissingRowModel('setRowData', 'clientSide');\n            return;\n        }\n        // if no keys provided provided for rows, then we can tread the operation as Immutable\n        if (this.immutableService.isActive()) {\n            this.immutableService.setRowData(rowData);\n        }\n        else {\n            this.selectionService.reset();\n            this.clientSideRowModel.setRowData(rowData);\n        }\n    }\n    /** Set the top pinned rows. Call with no rows / undefined to clear top pinned rows. */\n    setPinnedTopRowData(rows) {\n        this.pinnedRowModel.setPinnedTopRowData(rows);\n    }\n    /** Set the bottom pinned rows. Call with no rows / undefined to clear bottom pinned rows. */\n    setPinnedBottomRowData(rows) {\n        this.pinnedRowModel.setPinnedBottomRowData(rows);\n    }\n    /** Gets the number of top pinned rows. */\n    getPinnedTopRowCount() {\n        return this.pinnedRowModel.getPinnedTopRowCount();\n    }\n    /** Gets the number of bottom pinned rows. */\n    getPinnedBottomRowCount() {\n        return this.pinnedRowModel.getPinnedBottomRowCount();\n    }\n    /** Gets the top pinned row with the specified index. */\n    getPinnedTopRow(index) {\n        return this.pinnedRowModel.getPinnedTopRow(index);\n    }\n    /** Gets the bottom pinned row with the specified index. */\n    getPinnedBottomRow(index) {\n        return this.pinnedRowModel.getPinnedBottomRow(index);\n    }\n    /**\n     * Call to set new column definitions. The grid will redraw all the column headers, and then redraw all of the rows.\n     */\n    setColumnDefs(colDefs, source = \"api\") {\n        this.columnModel.setColumnDefs(colDefs, source);\n        // Keep gridOptions.columnDefs in sync\n        this.gridOptionsService.set('columnDefs', colDefs, true, { source });\n    }\n    /** Call to set new auto group column definition. The grid will recreate any auto-group columns if present. */\n    setAutoGroupColumnDef(colDef, source = \"api\") {\n        this.gridOptionsService.set('autoGroupColumnDef', colDef, true, { source });\n    }\n    /** Call to set new Default Column Definition. */\n    setDefaultColDef(colDef, source = \"api\") {\n        this.gridOptionsService.set('defaultColDef', colDef, true, { source });\n    }\n    /** Call to set new Column Types. */\n    setColumnTypes(columnTypes, source = \"api\") {\n        this.gridOptionsService.set('columnTypes', columnTypes, true, { source });\n    }\n    expireValueCache() {\n        this.valueCache.expire();\n    }\n    /**\n     * Returns an object with two properties:\n     *  - `top`: The top pixel position of the current scroll in the grid\n     *  - `bottom`: The bottom pixel position of the current scroll in the grid\n     */\n    getVerticalPixelRange() {\n        return this.gridBodyCtrl.getScrollFeature().getVScrollPosition();\n    }\n    /**\n     * Returns an object with two properties:\n     * - `left`: The left pixel position of the current scroll in the grid\n     * - `right`: The right pixel position of the current scroll in the grid\n     */\n    getHorizontalPixelRange() {\n        return this.gridBodyCtrl.getScrollFeature().getHScrollPosition();\n    }\n    /** If `true`, the horizontal scrollbar will always be present, even if not required. Otherwise, it will only be displayed when necessary. */\n    setAlwaysShowHorizontalScroll(show) {\n        this.gridOptionsService.set('alwaysShowHorizontalScroll', show);\n    }\n    /** If `true`, the vertical scrollbar will always be present, even if not required. Otherwise it will only be displayed when necessary. */\n    setAlwaysShowVerticalScroll(show) {\n        this.gridOptionsService.set('alwaysShowVerticalScroll', show);\n    }\n    /** Performs change detection on all cells, refreshing cells where required. */\n    refreshCells(params = {}) {\n        this.rowRenderer.refreshCells(params);\n    }\n    /** Flash rows, columns or individual cells. */\n    flashCells(params = {}) {\n        this.rowRenderer.flashCells(params);\n    }\n    /** Remove row(s) from the DOM and recreate them again from scratch. */\n    redrawRows(params = {}) {\n        const rowNodes = params ? params.rowNodes : undefined;\n        this.rowRenderer.redrawRows(rowNodes);\n    }\n    setFunctionsReadOnly(readOnly) {\n        this.gridOptionsService.set('functionsReadOnly', readOnly);\n    }\n    /** Redraws the header. Useful if a column name changes, or something else that changes how the column header is displayed. */\n    refreshHeader() {\n        this.ctrlsService.getHeaderRowContainerCtrls().forEach(c => c.refresh());\n    }\n    /** Returns `true` if any filter is set. This includes quick filter, advanced filter or external filter. */\n    isAnyFilterPresent() {\n        return this.filterManager.isAnyFilterPresent();\n    }\n    /** Returns `true` if any column filter is set, otherwise `false`. */\n    isColumnFilterPresent() {\n        return this.filterManager.isColumnFilterPresent() || this.filterManager.isAggregateFilterPresent();\n    }\n    /** Returns `true` if the Quick Filter is set, otherwise `false`. */\n    isQuickFilterPresent() {\n        return this.filterManager.isQuickFilterPresent();\n    }\n    /**\n     * Returns the row model inside the table.\n     * From here you can see the original rows, rows after filter has been applied,\n     * rows after aggregation has been applied, and the final set of 'to be displayed' rows.\n     */\n    getModel() {\n        return this.rowModel;\n    }\n    /** Expand or collapse a specific row node, optionally expanding/collapsing all of its parent nodes. */\n    setRowNodeExpanded(rowNode, expanded, expandParents) {\n        if (rowNode) {\n            // expand all parents recursively, except root node.\n            if (expandParents && rowNode.parent && rowNode.parent.level !== -1) {\n                this.setRowNodeExpanded(rowNode.parent, expanded, expandParents);\n            }\n            rowNode.setExpanded(expanded);\n        }\n    }\n    /**\n     * Informs the grid that row group expanded state has changed and it needs to rerender the group nodes.\n     * Typically called after updating the row node expanded state explicitly, i.e `rowNode.expanded = false`,\n     * across multiple groups and you want to update the grid view in a single rerender instead of on every group change.\n     */\n    onGroupExpandedOrCollapsed() {\n        if (missing(this.clientSideRowModel)) {\n            this.logMissingRowModel('onGroupExpandedOrCollapsed', 'clientSide');\n            return;\n        }\n        // we don't really want the user calling this if only one rowNode was expanded, instead they should be\n        // calling rowNode.setExpanded(boolean) - this way we do a 'keepRenderedRows=false' so that the whole\n        // grid gets refreshed again - otherwise the row with the rowNodes that were changed won't get updated,\n        // and thus the expand icon in the group cell won't get 'opened' or 'closed'.\n        this.clientSideRowModel.refreshModel({ step: ClientSideRowModelSteps.MAP });\n    }\n    /**\n     * Refresh the Client-Side Row Model, executing the grouping, filtering and sorting again.\n     * Optionally provide the step you wish the refresh to apply from. Defaults to `everything`.\n     */\n    refreshClientSideRowModel(step) {\n        if (missing(this.clientSideRowModel)) {\n            this.logMissingRowModel('refreshClientSideRowModel', 'clientSide');\n            return;\n        }\n        this.clientSideRowModel.refreshModel(step);\n    }\n    /** Returns `true` when there are no more animation frames left to process. */\n    isAnimationFrameQueueEmpty() {\n        return this.animationFrameService.isQueueEmpty();\n    }\n    flushAllAnimationFrames() {\n        this.animationFrameService.flushAllFrames();\n    }\n    /**\n     * Returns the row node with the given ID.\n     * The row node ID is the one you provide from the callback `getRowId(params)`,\n     * otherwise the ID is a number (cast as string) auto-generated by the grid when\n     * the row data is set.\n     */\n    getRowNode(id) {\n        return this.rowModel.getRowNode(id);\n    }\n    /**\n     * Gets the sizes that various UI elements will be rendered at with the current theme.\n     * If you override the row or header height using `gridOptions`, the override value you provided will be returned.\n     */\n    getSizesForCurrentTheme() {\n        return {\n            rowHeight: this.gridOptionsService.getRowHeightAsNumber(),\n            headerHeight: this.columnModel.getHeaderHeight()\n        };\n    }\n    /** Expand all groups. */\n    expandAll() {\n        if (this.clientSideRowModel) {\n            this.clientSideRowModel.expandOrCollapseAll(true);\n        }\n        else if (this.serverSideRowModel) {\n            this.serverSideRowModel.expandAll(true);\n        }\n        else {\n            this.logMissingRowModel('expandAll', 'clientSide', 'serverSide');\n        }\n    }\n    /** Collapse all groups. */\n    collapseAll() {\n        if (this.clientSideRowModel) {\n            this.clientSideRowModel.expandOrCollapseAll(false);\n        }\n        else if (this.serverSideRowModel) {\n            this.serverSideRowModel.expandAll(false);\n        }\n        else {\n            this.logMissingRowModel('expandAll', 'clientSide', 'serverSide');\n        }\n    }\n    /**\n     * Registers a callback to a virtual row.\n     * A virtual row is a row that is visually rendered on the screen (rows that are not visible because of the scroll position are not rendered).\n     * Unlike normal events, you do not need to unregister rendered row listeners.\n     * When the rendered row is removed from the grid, all associated rendered row listeners will also be removed.\n     * listen for this event if your `cellRenderer` needs to do cleanup when the row no longer exists.\n     */\n    addRenderedRowListener(eventName, rowIndex, callback) {\n        this.rowRenderer.addRenderedRowListener(eventName, rowIndex, callback);\n    }\n    /** Get the current Quick Filter text from the grid, or `undefined` if none is set. */\n    getQuickFilter() {\n        return this.gridOptionsService.get('quickFilterText');\n    }\n    /** Pass a Quick Filter text into the grid for filtering. */\n    setQuickFilter(newFilter) {\n        this.gridOptionsService.set('quickFilterText', newFilter);\n    }\n    /**\n     * @deprecated As of v30, hidden columns are excluded from the Quick Filter by default. To include hidden columns, use `setIncludeHiddenColumnsInQuickFilter` instead.\n     */\n    setExcludeHiddenColumnsFromQuickFilter(value) {\n        logDeprecation('30', 'setExcludeHiddenColumnsFromQuickFilter', undefined, 'Hidden columns are now excluded from the Quick Filter by default. This can be toggled using `setIncludeHiddenColumnsInQuickFilter`');\n        this.setIncludeHiddenColumnsInQuickFilter(!value);\n    }\n    /**\n     * Updates the `includeHiddenColumnsInQuickFilter` grid option.\n     * By default hidden columns are excluded from the Quick Filter.\n     * Set to `true` to include them.\n     */\n    setIncludeHiddenColumnsInQuickFilter(value) {\n        this.gridOptionsService.set('includeHiddenColumnsInQuickFilter', value);\n    }\n    /**\n     * Set all of the provided nodes selection state to the provided value.\n     */\n    setNodesSelected(params) {\n        const allNodesValid = params.nodes.every(node => {\n            if (node.rowPinned) {\n                console.warn('AG Grid: cannot select pinned rows');\n                return false;\n            }\n            if (node.id === undefined) {\n                console.warn('AG Grid: cannot select node until id for node is known');\n                return false;\n            }\n            return true;\n        });\n        if (!allNodesValid) {\n            return;\n        }\n        const { nodes, source, newValue } = params;\n        const nodesAsRowNode = nodes;\n        this.selectionService.setNodesSelected({ nodes: nodesAsRowNode, source: source !== null && source !== void 0 ? source : 'api', newValue });\n    }\n    /**\n     * Select all rows, regardless of filtering and rows that are not visible due to grouping being enabled and their groups not expanded.\n     * @param source Source property that will appear in the `selectionChanged` event, defaults to `'apiSelectAll'`\n     */\n    selectAll(source = 'apiSelectAll') {\n        this.selectionService.selectAllRowNodes({ source });\n    }\n    /**\n     * Clear all row selections, regardless of filtering.\n     * @param source Source property that will appear in the `selectionChanged` event, defaults to `'apiSelectAll'`\n     */\n    deselectAll(source = 'apiSelectAll') {\n        this.selectionService.deselectAllRowNodes({ source });\n    }\n    /**\n     * Select all filtered rows.\n     * @param source Source property that will appear in the `selectionChanged` event, defaults to `'apiSelectAllFiltered'`\n     */\n    selectAllFiltered(source = 'apiSelectAllFiltered') {\n        this.selectionService.selectAllRowNodes({ source, justFiltered: true });\n    }\n    /**\n     * Clear all filtered selections.\n     * @param source Source property that will appear in the `selectionChanged` event, defaults to `'apiSelectAllFiltered'`\n     */\n    deselectAllFiltered(source = 'apiSelectAllFiltered') {\n        this.selectionService.deselectAllRowNodes({ source, justFiltered: true });\n    }\n    /**\n     * Returns an object containing rules matching the selected rows in the SSRM.\n     *\n     * If `groupSelectsChildren=false` the returned object will be flat, and will conform to IServerSideSelectionState.\n     * If `groupSelectsChildren=true` the retuned object will be hierarchical, and will conform to IServerSideGroupSelectionState.\n     */\n    getServerSideSelectionState() {\n        if (missing(this.serverSideRowModel)) {\n            this.logMissingRowModel('getServerSideSelectionState', 'serverSide');\n            return null;\n        }\n        return this.selectionService.getServerSideSelectionState();\n    }\n    /**\n     * Set the rules matching the selected rows in the SSRM.\n     *\n     * If `groupSelectsChildren=false` the param will be flat, and should conform to IServerSideSelectionState.\n     * If `groupSelectsChildren=true` the param will be hierarchical, and should conform to IServerSideGroupSelectionState.\n     */\n    setServerSideSelectionState(state) {\n        if (missing(this.serverSideRowModel)) {\n            this.logMissingRowModel('setServerSideSelectionState', 'serverSide');\n            return;\n        }\n        this.selectionService.setServerSideSelectionState(state);\n    }\n    /**\n     * Select all rows on the current page.\n     * @param source Source property that will appear in the `selectionChanged` event, defaults to `'apiSelectAllCurrentPage'`\n     */\n    selectAllOnCurrentPage(source = 'apiSelectAllCurrentPage') {\n        this.selectionService.selectAllRowNodes({ source, justCurrentPage: true });\n    }\n    /**\n     * Clear all filtered on the current page.\n     * @param source Source property that will appear in the `selectionChanged` event, defaults to `'apiSelectAllCurrentPage'`\n     */\n    deselectAllOnCurrentPage(source = 'apiSelectAllCurrentPage') {\n        this.selectionService.deselectAllRowNodes({ source, justCurrentPage: true });\n    }\n    /**\n     * Sets columns to adjust in size to fit the grid horizontally.\n     **/\n    sizeColumnsToFit(params) {\n        this.gridBodyCtrl.sizeColumnsToFit(params);\n    }\n    /** Show the 'loading' overlay. */\n    showLoadingOverlay() {\n        this.overlayWrapperComp.showLoadingOverlay();\n    }\n    /** Show the 'no rows' overlay. */\n    showNoRowsOverlay() {\n        this.overlayWrapperComp.showNoRowsOverlay();\n    }\n    /** Hides the overlay if showing. */\n    hideOverlay() {\n        this.overlayWrapperComp.hideOverlay();\n    }\n    /**\n     * Returns an unsorted list of selected nodes.\n     * Getting the underlying node (rather than the data) is useful when working with tree / aggregated data,\n     * as the node can be traversed.\n     */\n    getSelectedNodes() {\n        return this.selectionService.getSelectedNodes();\n    }\n    /** Returns an unsorted list of selected rows (i.e. row data that you provided). */\n    getSelectedRows() {\n        return this.selectionService.getSelectedRows();\n    }\n    /**\n     * Returns a list of all selected nodes at 'best cost', a feature to be used with groups / trees.\n     * If a group has all its children selected, then the group appears in the result, but not the children.\n     * Designed for use with `'children'` as the group selection type, where groups don't actually appear in the selection normally.\n     */\n    getBestCostNodeSelection() {\n        if (missing(this.clientSideRowModel)) {\n            this.logMissingRowModel('getBestCostNodeSelection', 'clientSide');\n            return;\n        }\n        return this.selectionService.getBestCostNodeSelection();\n    }\n    /** Retrieve rendered nodes. Due to virtualisation this will contain only the current visible rows and those in the buffer. */\n    getRenderedNodes() {\n        return this.rowRenderer.getRenderedNodes();\n    }\n    /**\n     *  Ensures the column is visible by scrolling the table if needed.\n     *\n     * This will have no effect before the firstDataRendered event has fired.\n     *\n     * @param key - The column to ensure visible\n     * @param position - Where the column will be positioned.\n     * - `auto` - Scrolls the minimum amount to make sure the column is visible.\n     * - `start` - Scrolls the column to the start of the viewport.\n     * - `middle` - Scrolls the column to the middle of the viewport.\n     * - `end` - Scrolls the column to the end of the viewport.\n    */\n    ensureColumnVisible(key, position = 'auto') {\n        this.gridBodyCtrl.getScrollFeature().ensureColumnVisible(key, position);\n    }\n    /**\n     * Vertically scrolls the grid until the provided row index is inside the visible viewport.\n     * If a position is provided, the grid will attempt to scroll until the row is at the given position within the viewport.\n     * This will have no effect before the firstDataRendered event has fired.\n     */\n    ensureIndexVisible(index, position) {\n        this.gridBodyCtrl.getScrollFeature().ensureIndexVisible(index, position);\n    }\n    /**\n     * Vertically scrolls the grid until the provided row (or a row matching the provided comparator) is inside the visible viewport.\n     * If a position is provided, the grid will attempt to scroll until the row is at the given position within the viewport.\n     * This will have no effect before the firstDataRendered event has fired.\n     */\n    ensureNodeVisible(nodeSelector, position = null) {\n        this.gridBodyCtrl.getScrollFeature().ensureNodeVisible(nodeSelector, position);\n    }\n    /**\n     * Similar to `forEachNode`, except lists all the leaf nodes.\n     * This effectively goes through all the data that you provided to the grid before the grid performed any grouping.\n     * If using tree data, goes through all the nodes for the data you provided, including nodes that have children,\n     * but excluding groups the grid created where gaps were missing in the hierarchy.\n     */\n    forEachLeafNode(callback) {\n        if (missing(this.clientSideRowModel)) {\n            this.logMissingRowModel('forEachLeafNode', 'clientSide');\n            return;\n        }\n        this.clientSideRowModel.forEachLeafNode(callback);\n    }\n    /**\n     * Iterates through each node (row) in the grid and calls the callback for each node.\n     * This works similar to the `forEach` method on a JavaScript array.\n     * This is called for every node, ignoring any filtering or sorting applied within the grid.\n     * If using the Infinite Row Model, then this gets called for each page loaded in the page cache.\n     */\n    forEachNode(callback, includeFooterNodes) {\n        this.rowModel.forEachNode(callback, includeFooterNodes);\n    }\n    /** Similar to `forEachNode`, except skips any filtered out data. */\n    forEachNodeAfterFilter(callback) {\n        if (missing(this.clientSideRowModel)) {\n            this.logMissingRowModel('forEachNodeAfterFilter', 'clientSide');\n            return;\n        }\n        this.clientSideRowModel.forEachNodeAfterFilter(callback);\n    }\n    /** Similar to `forEachNodeAfterFilter`, except the callbacks are called in the order the rows are displayed in the grid. */\n    forEachNodeAfterFilterAndSort(callback) {\n        if (missing(this.clientSideRowModel)) {\n            this.logMissingRowModel('forEachNodeAfterFilterAndSort', 'clientSide');\n            return;\n        }\n        this.clientSideRowModel.forEachNodeAfterFilterAndSort(callback);\n    }\n    /**\n     * Returns the filter component instance for a column.\n     * `key` can be a string field name or a ColDef object (matches on object reference, useful if field names are not unique).\n     * If your filter is created asynchronously, `getFilterInstance` will return `null` so you will need to use the `callback` to access the filter instance instead.\n     */\n    getFilterInstance(key, callback) {\n        const res = this.getFilterInstanceImpl(key, instance => {\n            if (!callback) {\n                return;\n            }\n            const unwrapped = unwrapUserComp(instance);\n            callback(unwrapped);\n        });\n        const unwrapped = unwrapUserComp(res);\n        return unwrapped;\n    }\n    getFilterInstanceImpl(key, callback) {\n        const column = this.columnModel.getPrimaryColumn(key);\n        if (!column) {\n            return undefined;\n        }\n        const filterPromise = this.filterManager.getFilterComponent(column, 'NO_UI');\n        const currentValue = filterPromise && filterPromise.resolveNow(null, filterComp => filterComp);\n        if (currentValue) {\n            setTimeout(callback, 0, currentValue);\n        }\n        else if (filterPromise) {\n            filterPromise.then(comp => {\n                callback(comp);\n            });\n        }\n        return currentValue;\n    }\n    /** Destroys a filter. Useful to force a particular filter to be created from scratch again. */\n    destroyFilter(key) {\n        const column = this.columnModel.getPrimaryColumn(key);\n        if (column) {\n            return this.filterManager.destroyFilter(column, 'api');\n        }\n    }\n    /** Gets the status panel instance corresponding to the supplied `id`. */\n    getStatusPanel(key) {\n        if (!ModuleRegistry.assertRegistered(ModuleNames.StatusBarModule, 'api.getStatusPanel', this.context.getGridId())) {\n            return;\n        }\n        const comp = this.statusBarService.getStatusPanel(key);\n        return unwrapUserComp(comp);\n    }\n    getColumnDef(key) {\n        const column = this.columnModel.getPrimaryColumn(key);\n        if (column) {\n            return column.getColDef();\n        }\n        return null;\n    }\n    /**\n     * Returns the current column definitions.\n    */\n    getColumnDefs() { return this.columnModel.getColumnDefs(); }\n    /** Informs the grid that a filter has changed. This is typically called after a filter change through one of the filter APIs. */\n    onFilterChanged() {\n        this.filterManager.onFilterChanged();\n    }\n    /**\n     * Gets the grid to act as if the sort was changed.\n     * Useful if you update some values and want to get the grid to reorder them according to the new values.\n     */\n    onSortChanged() {\n        this.sortController.onSortChanged('api');\n    }\n    /** Sets the state of all the advanced filters. Provide it with what you get from `getFilterModel()` to restore filter state. */\n    setFilterModel(model) {\n        this.filterManager.setFilterModel(model);\n    }\n    /** Gets the current state of all the advanced filters. Used for saving filter state. */\n    getFilterModel() {\n        return this.filterManager.getFilterModel();\n    }\n    /** Returns the focused cell (or the last focused cell if the grid lost focus). */\n    getFocusedCell() {\n        return this.focusService.getFocusedCell();\n    }\n    /** Clears the focused cell. */\n    clearFocusedCell() {\n        return this.focusService.clearFocusedCell();\n    }\n    /** Sets the focus to the specified cell. `rowPinned` can be either 'top', 'bottom' or null (for not pinned). */\n    setFocusedCell(rowIndex, colKey, rowPinned) {\n        this.focusService.setFocusedCell({ rowIndex, column: colKey, rowPinned, forceBrowserFocus: true });\n    }\n    /** Sets the `suppressRowDrag` property. */\n    setSuppressRowDrag(value) {\n        this.gridOptionsService.set('suppressRowDrag', value);\n    }\n    /** Sets the `suppressMoveWhenRowDragging` property. */\n    setSuppressMoveWhenRowDragging(value) {\n        this.gridOptionsService.set('suppressMoveWhenRowDragging', value);\n    }\n    /** Sets the `suppressRowClickSelection` property. */\n    setSuppressRowClickSelection(value) {\n        this.gridOptionsService.set('suppressRowClickSelection', value);\n    }\n    /** Adds a drop zone outside of the grid where rows can be dropped. */\n    addRowDropZone(params) {\n        this.gridBodyCtrl.getRowDragFeature().addRowDropZone(params);\n    }\n    /** Removes an external drop zone added by `addRowDropZone`. */\n    removeRowDropZone(params) {\n        const activeDropTarget = this.dragAndDropService.findExternalZone(params);\n        if (activeDropTarget) {\n            this.dragAndDropService.removeDropTarget(activeDropTarget);\n        }\n    }\n    /** Returns the `RowDropZoneParams` to be used by another grid's `addRowDropZone` method. */\n    getRowDropZoneParams(events) {\n        return this.gridBodyCtrl.getRowDragFeature().getRowDropZone(events);\n    }\n    /** Sets the height in pixels for the row containing the column label header. */\n    setHeaderHeight(headerHeight) {\n        this.gridOptionsService.set('headerHeight', headerHeight);\n    }\n    /**\n     * Switch between layout options: `normal`, `autoHeight`, `print`.\n     * Defaults to `normal` if no domLayout provided.\n     */\n    setDomLayout(domLayout) {\n        if (!this.clientSideRowModel && domLayout === 'autoHeight' && !this.gridOptionsService.is('pagination')) {\n            console.error(`AG Grid: domLayout can only be set to 'autoHeight' when using the client side row model or when using pagination.`);\n            return;\n        }\n        this.gridOptionsService.set('domLayout', domLayout);\n    }\n    /** Sets the `enableCellTextSelection` property. */\n    setEnableCellTextSelection(selectable) {\n        this.gridBodyCtrl.setCellTextSelection(selectable);\n    }\n    /** Sets the preferred direction for the selection fill handle. */\n    setFillHandleDirection(direction) {\n        this.gridOptionsService.set('fillHandleDirection', direction);\n    }\n    /** Sets the height in pixels for the rows containing header column groups. */\n    setGroupHeaderHeight(headerHeight) {\n        this.gridOptionsService.set('groupHeaderHeight', headerHeight);\n    }\n    /** Sets the height in pixels for the row containing the floating filters. */\n    setFloatingFiltersHeight(headerHeight) {\n        this.gridOptionsService.set('floatingFiltersHeight', headerHeight);\n    }\n    /** Sets the height in pixels for the row containing the columns when in pivot mode. */\n    setPivotHeaderHeight(headerHeight) {\n        this.gridOptionsService.set('pivotHeaderHeight', headerHeight);\n    }\n    /** Sets the height in pixels for the row containing header column groups when in pivot mode. */\n    setPivotGroupHeaderHeight(headerHeight) {\n        this.gridOptionsService.set('pivotGroupHeaderHeight', headerHeight);\n    }\n    setPivotMode(pivotMode) {\n        this.columnModel.setPivotMode(pivotMode);\n    }\n    setAnimateRows(animateRows) {\n        this.gridOptionsService.set('animateRows', animateRows);\n    }\n    setIsExternalFilterPresent(isExternalFilterPresentFunc) {\n        this.gridOptionsService.set('isExternalFilterPresent', isExternalFilterPresentFunc);\n    }\n    setDoesExternalFilterPass(doesExternalFilterPassFunc) {\n        this.gridOptionsService.set('doesExternalFilterPass', doesExternalFilterPassFunc);\n    }\n    setNavigateToNextCell(navigateToNextCellFunc) {\n        this.gridOptionsService.set('navigateToNextCell', navigateToNextCellFunc);\n    }\n    setTabToNextCell(tabToNextCellFunc) {\n        this.gridOptionsService.set('tabToNextCell', tabToNextCellFunc);\n    }\n    setTabToNextHeader(tabToNextHeaderFunc) {\n        this.gridOptionsService.set('tabToNextHeader', tabToNextHeaderFunc);\n    }\n    setNavigateToNextHeader(navigateToNextHeaderFunc) {\n        this.gridOptionsService.set('navigateToNextHeader', navigateToNextHeaderFunc);\n    }\n    setRowGroupPanelShow(rowGroupPanelShow) {\n        this.gridOptionsService.set('rowGroupPanelShow', rowGroupPanelShow);\n    }\n    setGetGroupRowAgg(getGroupRowAggFunc) {\n        this.gridOptionsService.set('getGroupRowAgg', getGroupRowAggFunc);\n    }\n    setGetBusinessKeyForNode(getBusinessKeyForNodeFunc) {\n        this.gridOptionsService.set('getBusinessKeyForNode', getBusinessKeyForNodeFunc);\n    }\n    setGetChildCount(getChildCountFunc) {\n        this.gridOptionsService.set('getChildCount', getChildCountFunc);\n    }\n    setProcessRowPostCreate(processRowPostCreateFunc) {\n        this.gridOptionsService.set('processRowPostCreate', processRowPostCreateFunc);\n    }\n    setGetRowId(getRowIdFunc) {\n        this.gridOptionsService.set('getRowId', getRowIdFunc);\n    }\n    setGetRowClass(rowClassFunc) {\n        this.gridOptionsService.set('getRowClass', rowClassFunc);\n    }\n    setIsFullWidthRow(isFullWidthRowFunc) {\n        this.gridOptionsService.set('isFullWidthRow', isFullWidthRowFunc);\n    }\n    setIsRowSelectable(isRowSelectableFunc) {\n        this.gridOptionsService.set('isRowSelectable', isRowSelectableFunc);\n    }\n    setIsRowMaster(isRowMasterFunc) {\n        this.gridOptionsService.set('isRowMaster', isRowMasterFunc);\n    }\n    setPostSortRows(postSortRowsFunc) {\n        this.gridOptionsService.set('postSortRows', postSortRowsFunc);\n    }\n    setGetDocument(getDocumentFunc) {\n        this.gridOptionsService.set('getDocument', getDocumentFunc);\n    }\n    setGetContextMenuItems(getContextMenuItemsFunc) {\n        this.gridOptionsService.set('getContextMenuItems', getContextMenuItemsFunc);\n    }\n    setGetMainMenuItems(getMainMenuItemsFunc) {\n        this.gridOptionsService.set('getMainMenuItems', getMainMenuItemsFunc);\n    }\n    setProcessCellForClipboard(processCellForClipboardFunc) {\n        this.gridOptionsService.set('processCellForClipboard', processCellForClipboardFunc);\n    }\n    setSendToClipboard(sendToClipboardFunc) {\n        this.gridOptionsService.set('sendToClipboard', sendToClipboardFunc);\n    }\n    setProcessCellFromClipboard(processCellFromClipboardFunc) {\n        this.gridOptionsService.set('processCellFromClipboard', processCellFromClipboardFunc);\n    }\n    /** @deprecated v28 use `setProcessPivotResultColDef` instead */\n    setProcessSecondaryColDef(processSecondaryColDefFunc) {\n        logDeprecation('28.0', 'setProcessSecondaryColDef', 'setProcessPivotResultColDef');\n        this.setProcessPivotResultColDef(processSecondaryColDefFunc);\n    }\n    /** @deprecated v28 use `setProcessPivotResultColGroupDef` instead */\n    setProcessSecondaryColGroupDef(processSecondaryColGroupDefFunc) {\n        logDeprecation('28.0', 'setProcessSecondaryColGroupDef', 'setProcessPivotResultColGroupDef');\n        this.setProcessPivotResultColGroupDef(processSecondaryColGroupDefFunc);\n    }\n    setProcessPivotResultColDef(processPivotResultColDefFunc) {\n        this.gridOptionsService.set('processPivotResultColDef', processPivotResultColDefFunc);\n    }\n    setProcessPivotResultColGroupDef(processPivotResultColGroupDefFunc) {\n        this.gridOptionsService.set('processPivotResultColGroupDef', processPivotResultColGroupDefFunc);\n    }\n    setPostProcessPopup(postProcessPopupFunc) {\n        this.gridOptionsService.set('postProcessPopup', postProcessPopupFunc);\n    }\n    setInitialGroupOrderComparator(initialGroupOrderComparatorFunc) {\n        this.gridOptionsService.set('initialGroupOrderComparator', initialGroupOrderComparatorFunc);\n    }\n    setGetChartToolbarItems(getChartToolbarItemsFunc) {\n        this.gridOptionsService.set('getChartToolbarItems', getChartToolbarItemsFunc);\n    }\n    setPaginationNumberFormatter(paginationNumberFormatterFunc) {\n        this.gridOptionsService.set('paginationNumberFormatter', paginationNumberFormatterFunc);\n    }\n    /** @deprecated v28 use setGetServerSideGroupLevelParams instead */\n    setGetServerSideStoreParams(getServerSideStoreParamsFunc) {\n        logDeprecation('28.0', 'setGetServerSideStoreParams', 'setGetServerSideGroupLevelParams');\n        this.setGetServerSideGroupLevelParams(getServerSideStoreParamsFunc);\n    }\n    setGetServerSideGroupLevelParams(getServerSideGroupLevelParamsFunc) {\n        this.gridOptionsService.set('getServerSideGroupLevelParams', getServerSideGroupLevelParamsFunc);\n    }\n    setIsServerSideGroupOpenByDefault(isServerSideGroupOpenByDefaultFunc) {\n        this.gridOptionsService.set('isServerSideGroupOpenByDefault', isServerSideGroupOpenByDefaultFunc);\n    }\n    setIsApplyServerSideTransaction(isApplyServerSideTransactionFunc) {\n        this.gridOptionsService.set('isApplyServerSideTransaction', isApplyServerSideTransactionFunc);\n    }\n    setIsServerSideGroup(isServerSideGroupFunc) {\n        this.gridOptionsService.set('isServerSideGroup', isServerSideGroupFunc);\n    }\n    setGetServerSideGroupKey(getServerSideGroupKeyFunc) {\n        this.gridOptionsService.set('getServerSideGroupKey', getServerSideGroupKeyFunc);\n    }\n    setGetRowStyle(rowStyleFunc) {\n        this.gridOptionsService.set('getRowStyle', rowStyleFunc);\n    }\n    setGetRowHeight(rowHeightFunc) {\n        this.gridOptionsService.set('getRowHeight', rowHeightFunc);\n    }\n    assertSideBarLoaded(apiMethod) {\n        return ModuleRegistry.assertRegistered(ModuleNames.SideBarModule, 'api.' + apiMethod, this.context.getGridId());\n    }\n    /** Returns `true` if the side bar is visible. */\n    isSideBarVisible() {\n        return this.assertSideBarLoaded('isSideBarVisible') && this.sideBarComp.isDisplayed();\n    }\n    /** Show/hide the entire side bar, including any visible panel and the tab buttons. */\n    setSideBarVisible(show) {\n        if (this.assertSideBarLoaded('setSideBarVisible')) {\n            this.sideBarComp.setDisplayed(show);\n        }\n    }\n    /** Sets the side bar position relative to the grid. Possible values are `'left'` or `'right'`. */\n    setSideBarPosition(position) {\n        if (this.assertSideBarLoaded('setSideBarPosition')) {\n            this.sideBarComp.setSideBarPosition(position);\n        }\n    }\n    /** Opens a particular tool panel. Provide the ID of the tool panel to open. */\n    openToolPanel(key) {\n        if (this.assertSideBarLoaded('openToolPanel')) {\n            this.sideBarComp.openToolPanel(key, 'api');\n        }\n    }\n    /** Closes the currently open tool panel (if any). */\n    closeToolPanel() {\n        if (this.assertSideBarLoaded('closeToolPanel')) {\n            this.sideBarComp.close('api');\n        }\n    }\n    /** Returns the ID of the currently shown tool panel if any, otherwise `null`. */\n    getOpenedToolPanel() {\n        if (this.assertSideBarLoaded('getOpenedToolPanel')) {\n            return this.sideBarComp.openedItem();\n        }\n        return null;\n    }\n    /** Force refresh all tool panels by calling their `refresh` method. */\n    refreshToolPanel() {\n        if (this.assertSideBarLoaded('refreshToolPanel')) {\n            this.sideBarComp.refresh();\n        }\n    }\n    /** Returns `true` if the tool panel is showing, otherwise `false`. */\n    isToolPanelShowing() {\n        return this.assertSideBarLoaded('isToolPanelShowing') && this.sideBarComp.isToolPanelShowing();\n    }\n    /** Gets the tool panel instance corresponding to the supplied `id`. */\n    getToolPanelInstance(id) {\n        if (this.assertSideBarLoaded('getToolPanelInstance')) {\n            const comp = this.sideBarComp.getToolPanelInstance(id);\n            return unwrapUserComp(comp);\n        }\n    }\n    /** Returns the current side bar configuration. If a shortcut was used, returns the detailed long form. */\n    getSideBar() {\n        if (this.assertSideBarLoaded('getSideBar')) {\n            return this.sideBarComp.getDef();\n        }\n        return undefined;\n    }\n    /** Resets the side bar to the provided configuration. The parameter is the same as the sideBar grid property. The side bar is re-created from scratch with the new config. */\n    setSideBar(def) {\n        this.gridOptionsService.set('sideBar', def);\n    }\n    setSuppressClipboardPaste(value) {\n        this.gridOptionsService.set('suppressClipboardPaste', value);\n    }\n    /** Tells the grid to recalculate the row heights. */\n    resetRowHeights() {\n        if (exists(this.clientSideRowModel)) {\n            if (this.columnModel.isAutoRowHeightActive()) {\n                console.warn('AG Grid: calling gridApi.resetRowHeights() makes no sense when using Auto Row Height.');\n                return;\n            }\n            this.clientSideRowModel.resetRowHeights();\n        }\n    }\n    setGroupRemoveSingleChildren(value) {\n        this.gridOptionsService.set('groupRemoveSingleChildren', value);\n    }\n    setGroupRemoveLowestSingleChildren(value) {\n        this.gridOptionsService.set('groupRemoveLowestSingleChildren', value);\n    }\n    setGroupDisplayType(value) {\n        this.gridOptionsService.set('groupDisplayType', value);\n    }\n    setRowClass(className) {\n        this.gridOptionsService.set('rowClass', className);\n    }\n    /** Sets the `deltaSort` property */\n    setDeltaSort(enable) {\n        this.gridOptionsService.set('deltaSort', enable);\n    }\n    /**\n     * Sets the `rowCount` and `maxRowFound` properties.\n     * The second parameter, `maxRowFound`, is optional and if left out, only `rowCount` is set.\n     * Set `rowCount` to adjust the height of the vertical scroll.\n     * Set `maxRowFound` to enable / disable searching for more rows.\n     * Use this method if you add or remove rows into the dataset and need to reset the number of rows or instruct the grid that the entire row count is no longer known.\n     */\n    setRowCount(rowCount, maxRowFound) {\n        if (this.serverSideRowModel) {\n            if (this.columnModel.isRowGroupEmpty()) {\n                this.serverSideRowModel.setRowCount(rowCount, maxRowFound);\n                return;\n            }\n            console.error('AG Grid: setRowCount cannot be used while using row grouping.');\n            return;\n        }\n        if (this.infiniteRowModel) {\n            this.infiniteRowModel.setRowCount(rowCount, maxRowFound);\n            return;\n        }\n        this.logMissingRowModel('setRowCount', 'infinite', 'serverSide');\n    }\n    /** Tells the grid a row height has changed. To be used after calling `rowNode.setRowHeight(newHeight)`. */\n    onRowHeightChanged() {\n        if (this.clientSideRowModel) {\n            this.clientSideRowModel.onRowHeightChanged();\n        }\n        else if (this.serverSideRowModel) {\n            this.serverSideRowModel.onRowHeightChanged();\n        }\n    }\n    /**\n     * Gets the value for a column for a particular `rowNode` (row).\n     * This is useful if you want the raw value of a cell e.g. if implementing your own CSV export.\n     */\n    getValue(colKey, rowNode) {\n        let column = this.columnModel.getPrimaryColumn(colKey);\n        if (missing(column)) {\n            column = this.columnModel.getGridColumn(colKey);\n        }\n        if (missing(column)) {\n            return null;\n        }\n        return this.valueService.getValue(column, rowNode);\n    }\n    /** Add an event listener for the specified `eventType`. Works similar to `addEventListener` for a browser DOM element. */\n    addEventListener(eventType, listener) {\n        const async = this.gridOptionsService.useAsyncEvents();\n        this.eventService.addEventListener(eventType, listener, async);\n    }\n    /** Add an event listener for all event types coming from the grid. */\n    addGlobalListener(listener) {\n        const async = this.gridOptionsService.useAsyncEvents();\n        this.eventService.addGlobalListener(listener, async);\n    }\n    /** Remove an event listener. */\n    removeEventListener(eventType, listener) {\n        const async = this.gridOptionsService.useAsyncEvents();\n        this.eventService.removeEventListener(eventType, listener, async);\n    }\n    /** Remove a global event listener. */\n    removeGlobalListener(listener) {\n        const async = this.gridOptionsService.useAsyncEvents();\n        this.eventService.removeGlobalListener(listener, async);\n    }\n    dispatchEvent(event) {\n        this.eventService.dispatchEvent(event);\n    }\n    /** Will destroy the grid and release resources. If you are using a framework you do not need to call this, as the grid links in with the framework lifecycle. However if you are using Web Components or native JavaScript, you do need to call this, to avoid a memory leak in your application. */\n    destroy() {\n        // this is needed as GridAPI is a bean, and GridAPI.destroy() is called as part\n        // of context.destroy(). so we need to stop the infinite loop.\n        if (this.destroyCalled) {\n            return;\n        }\n        this.destroyCalled = true;\n        // destroy the UI first (as they use the services)\n        const gridCtrl = this.ctrlsService.getGridCtrl();\n        if (gridCtrl) {\n            gridCtrl.destroyGridUi();\n        }\n        // destroy the services\n        this.context.destroy();\n    }\n    cleanDownReferencesToAvoidMemoryLeakInCaseApplicationIsKeepingReferenceToDestroyedGrid() {\n        // some users were raising support issues with regards memory leaks. the problem was the customers applications\n        // were keeping references to the API. trying to educate them all would be difficult, easier to just remove\n        // all references in the API so at least the core grid can be garbage collected.\n        //\n        // wait about 100ms before clearing down the references, in case user has some cleanup to do,\n        // and needs to deference the API first\n        setTimeout(removeAllReferences.bind(window, this, 'Grid API'), 100);\n    }\n    warnIfDestroyed(methodName) {\n        if (this.destroyCalled) {\n            console.warn(`AG Grid: Grid API method ${methodName} was called on a grid that was destroyed.`);\n        }\n        return this.destroyCalled;\n    }\n    /** Reset the Quick Filter cache text on every rowNode. */\n    resetQuickFilter() {\n        if (this.warnIfDestroyed('resetQuickFilter')) {\n            return;\n        }\n        this.filterManager.resetQuickFilterCache();\n    }\n    /** Returns the list of selected cell ranges. */\n    getCellRanges() {\n        if (this.rangeService) {\n            return this.rangeService.getCellRanges();\n        }\n        ModuleRegistry.assertRegistered(ModuleNames.RangeSelectionModule, 'api.getCellRanges', this.context.getGridId());\n        return null;\n    }\n    /** Adds the provided cell range to the selected ranges. */\n    addCellRange(params) {\n        if (this.rangeService) {\n            this.rangeService.addCellRange(params);\n            return;\n        }\n        ModuleRegistry.assertRegistered(ModuleNames.RangeSelectionModule, 'api.addCellRange', this.context.getGridId());\n    }\n    /** Clears the selected ranges. */\n    clearRangeSelection() {\n        if (this.rangeService) {\n            this.rangeService.removeAllCellRanges();\n        }\n        ModuleRegistry.assertRegistered(ModuleNames.RangeSelectionModule, 'gridApi.clearRangeSelection', this.context.getGridId());\n    }\n    /** Reverts the last cell edit. */\n    undoCellEditing() {\n        this.undoRedoService.undo('api');\n    }\n    /** Re-applies the most recently undone cell edit. */\n    redoCellEditing() {\n        this.undoRedoService.redo('api');\n    }\n    /** Returns current number of available cell edit undo operations. */\n    getCurrentUndoSize() {\n        return this.undoRedoService.getCurrentUndoStackSize();\n    }\n    /** Returns current number of available cell edit redo operations. */\n    getCurrentRedoSize() {\n        return this.undoRedoService.getCurrentRedoStackSize();\n    }\n    /** Returns a list of models with information about the charts that are currently rendered from the grid. */\n    getChartModels() {\n        if (ModuleRegistry.assertRegistered(ModuleNames.GridChartsModule, 'api.getChartModels', this.context.getGridId())) {\n            return this.chartService.getChartModels();\n        }\n    }\n    /** Returns the `ChartRef` using the supplied `chartId`. */\n    getChartRef(chartId) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.GridChartsModule, 'api.getChartRef', this.context.getGridId())) {\n            return this.chartService.getChartRef(chartId);\n        }\n    }\n    /** Returns a base64-encoded image data URL for the referenced chartId. */\n    getChartImageDataURL(params) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.GridChartsModule, 'api.getChartImageDataURL', this.context.getGridId())) {\n            return this.chartService.getChartImageDataURL(params);\n        }\n    }\n    /** Starts a browser-based image download for the referenced chartId. */\n    downloadChart(params) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.GridChartsModule, 'api.downloadChart', this.context.getGridId())) {\n            return this.chartService.downloadChart(params);\n        }\n    }\n    /** Open the Chart Tool Panel. */\n    openChartToolPanel(params) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.GridChartsModule, 'api.openChartToolPanel', this.context.getGridId())) {\n            return this.chartService.openChartToolPanel(params);\n        }\n    }\n    /** Close the Chart Tool Panel. */\n    closeChartToolPanel(params) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.GridChartsModule, 'api.closeChartToolPanel', this.context.getGridId())) {\n            return this.chartService.closeChartToolPanel(params.chartId);\n        }\n    }\n    /** Used to programmatically create charts from a range. */\n    createRangeChart(params) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.GridChartsModule, 'api.createRangeChart', this.context.getGridId())) {\n            return this.chartService.createRangeChart(params);\n        }\n    }\n    /** Used to programmatically create pivot charts from a grid. */\n    createPivotChart(params) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.GridChartsModule, 'api.createPivotChart', this.context.getGridId())) {\n            return this.chartService.createPivotChart(params);\n        }\n    }\n    /** Used to programmatically create cross filter charts from a range. */\n    createCrossFilterChart(params) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.GridChartsModule, 'api.createCrossFilterChart', this.context.getGridId())) {\n            return this.chartService.createCrossFilterChart(params);\n        }\n    }\n    /** Used to programmatically update a chart. */\n    updateChart(params) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.GridChartsModule, 'api.updateChart', this.context.getGridId())) {\n            this.chartService.updateChart(params);\n        }\n    }\n    /** Restores a chart using the `ChartModel` that was previously obtained from `getChartModels()`. */\n    restoreChart(chartModel, chartContainer) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.GridChartsModule, 'api.restoreChart', this.context.getGridId())) {\n            return this.chartService.restoreChart(chartModel, chartContainer);\n        }\n    }\n    /** Copies data to clipboard by following the same rules as pressing Ctrl+C. */\n    copyToClipboard(params) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.ClipboardModule, 'api.copyToClipboard', this.context.getGridId())) {\n            this.clipboardService.copyToClipboard(params);\n        }\n    }\n    /** Cuts data to clipboard by following the same rules as pressing Ctrl+X. */\n    cutToClipboard(params) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.ClipboardModule, 'api.cutToClipboard', this.context.getGridId())) {\n            this.clipboardService.cutToClipboard(params, 'api');\n        }\n    }\n    /** Copies the selected rows to the clipboard. */\n    copySelectedRowsToClipboard(params) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.ClipboardModule, 'api.copySelectedRowsToClipboard', this.context.getGridId())) {\n            this.clipboardService.copySelectedRowsToClipboard(params);\n        }\n    }\n    /** Copies the selected ranges to the clipboard. */\n    copySelectedRangeToClipboard(params) {\n        if (ModuleRegistry.assertRegistered(ModuleNames.ClipboardModule, 'api.copySelectedRangeToClipboard', this.context.getGridId())) {\n            this.clipboardService.copySelectedRangeToClipboard(params);\n        }\n    }\n    /** Copies the selected range down, similar to `Ctrl + D` in Excel. */\n    copySelectedRangeDown() {\n        if (ModuleRegistry.assertRegistered(ModuleNames.ClipboardModule, 'api.copySelectedRangeDown', this.context.getGridId())) {\n            this.clipboardService.copyRangeDown();\n        }\n    }\n    /** Pastes the data from the Clipboard into the focused cell of the grid. If no grid cell is focused, calling this method has no effect. */\n    pasteFromClipboard() {\n        if (ModuleRegistry.assertRegistered(ModuleNames.ClipboardModule, 'api.pasteFromClipboard', this.context.getGridId())) {\n            this.clipboardService.pasteFromClipboard();\n        }\n    }\n    /** Shows the column menu after and positions it relative to the provided button element. Use in conjunction with your own header template. */\n    showColumnMenuAfterButtonClick(colKey, buttonElement) {\n        // use grid column so works with pivot mode\n        const column = this.columnModel.getGridColumn(colKey);\n        this.menuFactory.showMenuAfterButtonClick(column, buttonElement, 'columnMenu');\n    }\n    /** Shows the column menu after and positions it relative to the mouse event. Use in conjunction with your own header template. */\n    showColumnMenuAfterMouseClick(colKey, mouseEvent) {\n        // use grid column so works with pivot mode\n        let column = this.columnModel.getGridColumn(colKey);\n        if (!column) {\n            column = this.columnModel.getPrimaryColumn(colKey);\n        }\n        if (!column) {\n            console.error(`AG Grid: column '${colKey}' not found`);\n            return;\n        }\n        this.menuFactory.showMenuAfterMouseEvent(column, mouseEvent);\n    }\n    /** Hides any visible context menu or column menu. */\n    hidePopupMenu() {\n        // hide the context menu if in enterprise\n        if (this.contextMenuFactory) {\n            this.contextMenuFactory.hideActiveMenu();\n        }\n        // and hide the column menu always\n        this.menuFactory.hideActiveMenu();\n    }\n    /** DOM element to use as the popup parent for grid popups (context menu, column menu etc). */\n    setPopupParent(ePopupParent) {\n        this.gridOptionsService.set('popupParent', ePopupParent);\n    }\n    /** Navigates the grid focus to the next cell, as if tabbing. */\n    tabToNextCell(event) {\n        return this.navigationService.tabToNextCell(false, event);\n    }\n    /** Navigates the grid focus to the previous cell, as if shift-tabbing. */\n    tabToPreviousCell(event) {\n        return this.navigationService.tabToNextCell(true, event);\n    }\n    /** Returns the list of active cell renderer instances. */\n    getCellRendererInstances(params = {}) {\n        const res = this.rowRenderer.getCellRendererInstances(params);\n        const unwrapped = res.map(unwrapUserComp);\n        return unwrapped;\n    }\n    /** Returns the list of active cell editor instances. Optionally provide parameters to restrict to certain columns / row nodes. */\n    getCellEditorInstances(params = {}) {\n        const res = this.rowRenderer.getCellEditorInstances(params);\n        const unwrapped = res.map(unwrapUserComp);\n        return unwrapped;\n    }\n    /** If the grid is editing, returns back details of the editing cell(s). */\n    getEditingCells() {\n        return this.rowRenderer.getEditingCells();\n    }\n    /** If a cell is editing, it stops the editing. Pass `true` if you want to cancel the editing (i.e. don't accept changes). */\n    stopEditing(cancel = false) {\n        this.rowRenderer.stopEditing(cancel);\n    }\n    /** Start editing the provided cell. If another cell is editing, the editing will be stopped in that other cell. */\n    startEditingCell(params) {\n        const column = this.columnModel.getGridColumn(params.colKey);\n        if (!column) {\n            console.warn(`AG Grid: no column found for ${params.colKey}`);\n            return;\n        }\n        const cellPosition = {\n            rowIndex: params.rowIndex,\n            rowPinned: params.rowPinned || null,\n            column: column\n        };\n        const notPinned = params.rowPinned == null;\n        if (notPinned) {\n            this.gridBodyCtrl.getScrollFeature().ensureIndexVisible(params.rowIndex);\n        }\n        const cell = this.navigationService.getCellByPosition(cellPosition);\n        if (!cell) {\n            return;\n        }\n        cell.startRowOrCellEdit(params.key);\n    }\n    /** Add an aggregation function with the specified key. */\n    addAggFunc(key, aggFunc) {\n        if (this.aggFuncService) {\n            this.aggFuncService.addAggFunc(key, aggFunc);\n        }\n    }\n    /** Add aggregations function with the specified keys. */\n    addAggFuncs(aggFuncs) {\n        if (this.aggFuncService) {\n            this.aggFuncService.addAggFuncs(aggFuncs);\n        }\n    }\n    /** Clears all aggregation functions (including those provided by the grid). */\n    clearAggFuncs() {\n        if (this.aggFuncService) {\n            this.aggFuncService.clear();\n        }\n    }\n    /** Apply transactions to the server side row model. */\n    applyServerSideTransaction(transaction) {\n        if (!this.serverSideTransactionManager) {\n            this.logMissingRowModel('applyServerSideTransaction', 'serverSide');\n            return;\n        }\n        return this.serverSideTransactionManager.applyTransaction(transaction);\n    }\n    /** Batch apply transactions to the server side row model. */\n    applyServerSideTransactionAsync(transaction, callback) {\n        if (!this.serverSideTransactionManager) {\n            this.logMissingRowModel('applyServerSideTransactionAsync', 'serverSide');\n            return;\n        }\n        return this.serverSideTransactionManager.applyTransactionAsync(transaction, callback);\n    }\n    /** Gets all failed server side loads to retry. */\n    retryServerSideLoads() {\n        if (!this.serverSideRowModel) {\n            this.logMissingRowModel('retryServerSideLoads', 'serverSide');\n            return;\n        }\n        this.serverSideRowModel.retryLoads();\n    }\n    flushServerSideAsyncTransactions() {\n        if (!this.serverSideTransactionManager) {\n            this.logMissingRowModel('flushServerSideAsyncTransactions', 'serverSide');\n            return;\n        }\n        return this.serverSideTransactionManager.flushAsyncTransactions();\n    }\n    /** Update row data. Pass a transaction object with lists for `add`, `remove` and `update`. */\n    applyTransaction(rowDataTransaction) {\n        if (!this.clientSideRowModel) {\n            this.logMissingRowModel('applyTransaction', 'clientSide');\n            return;\n        }\n        const res = this.clientSideRowModel.updateRowData(rowDataTransaction);\n        // do change detection for all present cells\n        if (!this.gridOptionsService.is('suppressChangeDetection')) {\n            this.rowRenderer.refreshCells();\n        }\n        return res;\n    }\n    /** Same as `applyTransaction` except executes asynchronously for efficiency. */\n    applyTransactionAsync(rowDataTransaction, callback) {\n        if (!this.clientSideRowModel) {\n            this.logMissingRowModel('applyTransactionAsync', 'clientSide');\n            return;\n        }\n        this.clientSideRowModel.batchUpdateRowData(rowDataTransaction, callback);\n    }\n    /** Executes any remaining asynchronous grid transactions, if any are waiting to be executed. */\n    flushAsyncTransactions() {\n        if (!this.clientSideRowModel) {\n            this.logMissingRowModel('flushAsyncTransactions', 'clientSide');\n            return;\n        }\n        this.clientSideRowModel.flushAsyncTransactions();\n    }\n    setSuppressModelUpdateAfterUpdateTransaction(value) {\n        this.gridOptionsService.set('suppressModelUpdateAfterUpdateTransaction', value);\n    }\n    /**\n     * Marks all the currently loaded blocks in the cache for reload.\n     * If you have 10 blocks in the cache, all 10 will be marked for reload.\n     * The old data will continue to be displayed until the new data is loaded.\n     */\n    refreshInfiniteCache() {\n        if (this.infiniteRowModel) {\n            this.infiniteRowModel.refreshCache();\n        }\n        else {\n            this.logMissingRowModel('refreshInfiniteCache', 'infinite');\n        }\n    }\n    /**\n     * Purges the cache.\n     * The grid is then told to refresh. Only the blocks required to display the current data on screen are fetched (typically no more than 2).\n     * The grid will display nothing while the new blocks are loaded.\n     * Use this to immediately remove the old data from the user.\n     */\n    purgeInfiniteCache() {\n        if (this.infiniteRowModel) {\n            this.infiniteRowModel.purgeCache();\n        }\n        else {\n            this.logMissingRowModel('purgeInfiniteCache', 'infinite');\n        }\n    }\n    /**\n     * Refresh a server-side store level.\n     * If you pass no parameters, then the top level store is refreshed.\n     * To refresh a child level, pass in the string of keys to get to the desired level.\n     * Once the store refresh is complete, the storeRefreshed event is fired.\n     */\n    refreshServerSide(params) {\n        if (!this.serverSideRowModel) {\n            this.logMissingRowModel('refreshServerSide', 'serverSide');\n            return;\n        }\n        this.serverSideRowModel.refreshStore(params);\n    }\n    /** @deprecated v28 use `refreshServerSide` instead */\n    refreshServerSideStore(params) {\n        logDeprecation('28.0', 'refreshServerSideStore', 'refreshServerSide');\n        return this.refreshServerSide(params);\n    }\n    /** @deprecated v28 use `getServerSideGroupLevelState` instead */\n    getServerSideStoreState() {\n        logDeprecation('28.0', 'getServerSideStoreState', 'getServerSideGroupLevelState');\n        return this.getServerSideGroupLevelState();\n    }\n    /** Returns info on all server side group levels. */\n    getServerSideGroupLevelState() {\n        if (!this.serverSideRowModel) {\n            this.logMissingRowModel('getServerSideGroupLevelState', 'serverSide');\n            return [];\n        }\n        return this.serverSideRowModel.getStoreState();\n    }\n    /** The row count defines how many rows the grid allows scrolling to. */\n    getInfiniteRowCount() {\n        if (this.infiniteRowModel) {\n            return this.infiniteRowModel.getRowCount();\n        }\n        else {\n            this.logMissingRowModel('getInfiniteRowCount', 'infinite');\n        }\n    }\n    /** Returns `true` if grid allows for scrolling past the last row to load more rows, thus providing infinite scroll. */\n    isLastRowIndexKnown() {\n        if (this.infiniteRowModel) {\n            return this.infiniteRowModel.isLastRowIndexKnown();\n        }\n        else {\n            this.logMissingRowModel('isLastRowIndexKnown', 'infinite');\n        }\n    }\n    /**\n     * Returns an object representing the state of the cache. This is useful for debugging and understanding how the cache is working.\n     */\n    getCacheBlockState() {\n        return this.rowNodeBlockLoader.getBlockState();\n    }\n    /** Get the index of the first displayed row due to scrolling (includes invisible rendered rows in the buffer). */\n    getFirstDisplayedRow() {\n        return this.rowRenderer.getFirstVirtualRenderedRow();\n    }\n    /** Get the index of the last displayed row due to scrolling (includes invisible rendered rows in the buffer). */\n    getLastDisplayedRow() {\n        return this.rowRenderer.getLastVirtualRenderedRow();\n    }\n    /** Returns the displayed `RowNode` at the given `index`. */\n    getDisplayedRowAtIndex(index) {\n        return this.rowModel.getRow(index);\n    }\n    /** Returns the total number of displayed rows. */\n    getDisplayedRowCount() {\n        return this.rowModel.getRowCount();\n    }\n    /** Resets the data type definitions. This will update the columns in the grid. */\n    setDataTypeDefinitions(dataTypeDefinitions) {\n        this.gridOptionsService.set('dataTypeDefinitions', dataTypeDefinitions);\n    }\n    /**\n     * Set whether the grid paginates the data or not.\n     *  - `true` to enable pagination\n     *  - `false` to disable pagination\n     */\n    setPagination(value) {\n        if (!this.clientSideRowModel && this.gridOptionsService.get('domLayout') === 'autoHeight' && !value) {\n            console.error(`AG Grid: Pagination cannot be disabled when using domLayout set to 'autoHeight' unless using the client-side row model.`);\n            return;\n        }\n        this.gridOptionsService.set('pagination', value);\n    }\n    /**\n     * Returns `true` when the last page is known.\n     * This will always be `true` if you are using the Client-Side Row Model for pagination.\n     * Returns `false` when the last page is not known; this only happens when using Infinite Row Model.\n     */\n    paginationIsLastPageFound() {\n        return this.paginationProxy.isLastPageFound();\n    }\n    /** Returns how many rows are being shown per page. */\n    paginationGetPageSize() {\n        return this.paginationProxy.getPageSize();\n    }\n    /** Sets the `paginationPageSize`, then re-paginates the grid so the changes are applied immediately. */\n    paginationSetPageSize(size) {\n        this.gridOptionsService.set('paginationPageSize', size);\n    }\n    /** Returns the 0-based index of the page which is showing. */\n    paginationGetCurrentPage() {\n        return this.paginationProxy.getCurrentPage();\n    }\n    /** Returns the total number of pages. Returns `null` if `paginationIsLastPageFound() === false`. */\n    paginationGetTotalPages() {\n        return this.paginationProxy.getTotalPages();\n    }\n    /** The total number of rows. Returns `null` if `paginationIsLastPageFound() === false`. */\n    paginationGetRowCount() {\n        return this.paginationProxy.getMasterRowCount();\n    }\n    /** Navigates to the next page. */\n    paginationGoToNextPage() {\n        this.paginationProxy.goToNextPage();\n    }\n    /** Navigates to the previous page. */\n    paginationGoToPreviousPage() {\n        this.paginationProxy.goToPreviousPage();\n    }\n    /** Navigates to the first page. */\n    paginationGoToFirstPage() {\n        this.paginationProxy.goToFirstPage();\n    }\n    /** Navigates to the last page. */\n    paginationGoToLastPage() {\n        this.paginationProxy.goToLastPage();\n    }\n    /** Goes to the specified page. If the page requested doesn't exist, it will go to the last page. */\n    paginationGoToPage(page) {\n        this.paginationProxy.goToPage(page);\n    }\n};\n__decorate$1V([\n    Optional('immutableService')\n], GridApi.prototype, \"immutableService\", void 0);\n__decorate$1V([\n    Optional('csvCreator')\n], GridApi.prototype, \"csvCreator\", void 0);\n__decorate$1V([\n    Optional('excelCreator')\n], GridApi.prototype, \"excelCreator\", void 0);\n__decorate$1V([\n    Autowired('rowRenderer')\n], GridApi.prototype, \"rowRenderer\", void 0);\n__decorate$1V([\n    Autowired('navigationService')\n], GridApi.prototype, \"navigationService\", void 0);\n__decorate$1V([\n    Autowired('filterManager')\n], GridApi.prototype, \"filterManager\", void 0);\n__decorate$1V([\n    Autowired('columnModel')\n], GridApi.prototype, \"columnModel\", void 0);\n__decorate$1V([\n    Autowired('selectionService')\n], GridApi.prototype, \"selectionService\", void 0);\n__decorate$1V([\n    Autowired('gridOptionsService')\n], GridApi.prototype, \"gridOptionsService\", void 0);\n__decorate$1V([\n    Autowired('valueService')\n], GridApi.prototype, \"valueService\", void 0);\n__decorate$1V([\n    Autowired('alignedGridsService')\n], GridApi.prototype, \"alignedGridsService\", void 0);\n__decorate$1V([\n    Autowired('eventService')\n], GridApi.prototype, \"eventService\", void 0);\n__decorate$1V([\n    Autowired('pinnedRowModel')\n], GridApi.prototype, \"pinnedRowModel\", void 0);\n__decorate$1V([\n    Autowired('context')\n], GridApi.prototype, \"context\", void 0);\n__decorate$1V([\n    Autowired('rowModel')\n], GridApi.prototype, \"rowModel\", void 0);\n__decorate$1V([\n    Autowired('sortController')\n], GridApi.prototype, \"sortController\", void 0);\n__decorate$1V([\n    Autowired('paginationProxy')\n], GridApi.prototype, \"paginationProxy\", void 0);\n__decorate$1V([\n    Autowired('focusService')\n], GridApi.prototype, \"focusService\", void 0);\n__decorate$1V([\n    Autowired('dragAndDropService')\n], GridApi.prototype, \"dragAndDropService\", void 0);\n__decorate$1V([\n    Optional('rangeService')\n], GridApi.prototype, \"rangeService\", void 0);\n__decorate$1V([\n    Optional('clipboardService')\n], GridApi.prototype, \"clipboardService\", void 0);\n__decorate$1V([\n    Optional('aggFuncService')\n], GridApi.prototype, \"aggFuncService\", void 0);\n__decorate$1V([\n    Autowired('menuFactory')\n], GridApi.prototype, \"menuFactory\", void 0);\n__decorate$1V([\n    Optional('contextMenuFactory')\n], GridApi.prototype, \"contextMenuFactory\", void 0);\n__decorate$1V([\n    Autowired('valueCache')\n], GridApi.prototype, \"valueCache\", void 0);\n__decorate$1V([\n    Autowired('animationFrameService')\n], GridApi.prototype, \"animationFrameService\", void 0);\n__decorate$1V([\n    Optional('statusBarService')\n], GridApi.prototype, \"statusBarService\", void 0);\n__decorate$1V([\n    Optional('chartService')\n], GridApi.prototype, \"chartService\", void 0);\n__decorate$1V([\n    Optional('undoRedoService')\n], GridApi.prototype, \"undoRedoService\", void 0);\n__decorate$1V([\n    Optional('rowNodeBlockLoader')\n], GridApi.prototype, \"rowNodeBlockLoader\", void 0);\n__decorate$1V([\n    Optional('ssrmTransactionManager')\n], GridApi.prototype, \"serverSideTransactionManager\", void 0);\n__decorate$1V([\n    Autowired('ctrlsService')\n], GridApi.prototype, \"ctrlsService\", void 0);\n__decorate$1V([\n    PostConstruct\n], GridApi.prototype, \"init\", null);\n__decorate$1V([\n    PreDestroy\n], GridApi.prototype, \"cleanDownReferencesToAvoidMemoryLeakInCaseApplicationIsKeepingReferenceToDestroyedGrid\", null);\nGridApi = __decorate$1V([\n    Bean('gridApi')\n], GridApi);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1U = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar FilterManager_1;\nlet FilterManager = FilterManager_1 = class FilterManager extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.allColumnFilters = new Map();\n        this.allColumnListeners = new Map();\n        this.activeAggregateFilters = [];\n        this.activeColumnFilters = [];\n        this.quickFilter = null;\n        this.quickFilterParts = null;\n        // this is true when the grid is processing the filter change. this is used by the cell comps, so that they\n        // don't flash when data changes due to filter changes. there is no need to flash when filter changes as the\n        // user is in control, so doesn't make sense to show flashing changes. for example, go to main demo where\n        // this feature is turned off (hack code to always return false for isSuppressFlashingCellsBecauseFiltering(), put in)\n        // 100,000 rows and group by country. then do some filtering. all the cells flash, which is silly.\n        this.processingFilterChange = false;\n    }\n    init() {\n        this.addManagedListener(this.eventService, Events.EVENT_GRID_COLUMNS_CHANGED, () => this.onColumnsChanged());\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_VALUE_CHANGED, () => this.refreshFiltersForAggregations());\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_CHANGED, () => this.refreshFiltersForAggregations());\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, () => {\n            this.refreshFiltersForAggregations();\n            this.resetQuickFilterCache();\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, () => this.resetQuickFilterCache());\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, () => this.resetQuickFilterCache());\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_VISIBLE, () => {\n            if (!this.gridOptionsService.is('includeHiddenColumnsInQuickFilter')) {\n                this.resetQuickFilterCache();\n            }\n        });\n        this.addManagedPropertyListener('quickFilterText', (e) => this.setQuickFilter(e.currentValue));\n        this.addManagedPropertyListener('includeHiddenColumnsInQuickFilter', () => this.onIncludeHiddenColumnsInQuickFilterChanged());\n        this.quickFilter = this.parseQuickFilter(this.gridOptionsService.get('quickFilterText'));\n        this.setQuickFilterParts();\n        this.allowShowChangeAfterFilter = this.gridOptionsService.is('allowShowChangeAfterFilter');\n        this.externalFilterPresent = this.isExternalFilterPresentCallback();\n        this.updateAggFiltering();\n        this.addManagedPropertyListener('groupAggFiltering', () => this.updateAggFiltering());\n    }\n    isExternalFilterPresentCallback() {\n        const isFilterPresent = this.gridOptionsService.getCallback('isExternalFilterPresent');\n        if (typeof isFilterPresent === 'function') {\n            return isFilterPresent({});\n        }\n        return false;\n    }\n    doesExternalFilterPass(node) {\n        const doesFilterPass = this.gridOptionsService.get('doesExternalFilterPass');\n        if (typeof doesFilterPass === 'function') {\n            return doesFilterPass(node);\n        }\n        return false;\n    }\n    setQuickFilterParts() {\n        this.quickFilterParts = this.quickFilter ? this.quickFilter.split(' ') : null;\n    }\n    setFilterModel(model) {\n        const allPromises = [];\n        const previousModel = this.getFilterModel();\n        if (model) {\n            // mark the filters as we set them, so any active filters left over we stop\n            const modelKeys = convertToSet(Object.keys(model));\n            this.allColumnFilters.forEach((filterWrapper, colId) => {\n                const newModel = model[colId];\n                allPromises.push(this.setModelOnFilterWrapper(filterWrapper.filterPromise, newModel));\n                modelKeys.delete(colId);\n            });\n            // at this point, processedFields contains data for which we don't have a filter working yet\n            modelKeys.forEach(colId => {\n                const column = this.columnModel.getPrimaryColumn(colId) || this.columnModel.getGridColumn(colId);\n                if (!column) {\n                    console.warn('AG Grid: setFilterModel() - no column found for colId: ' + colId);\n                    return;\n                }\n                if (!column.isFilterAllowed()) {\n                    console.warn('AG Grid: setFilterModel() - unable to fully apply model, filtering disabled for colId: ' + colId);\n                    return;\n                }\n                const filterWrapper = this.getOrCreateFilterWrapper(column, 'NO_UI');\n                if (!filterWrapper) {\n                    console.warn('AG-Grid: setFilterModel() - unable to fully apply model, unable to create filter for colId: ' + colId);\n                    return;\n                }\n                allPromises.push(this.setModelOnFilterWrapper(filterWrapper.filterPromise, model[colId]));\n            });\n        }\n        else {\n            this.allColumnFilters.forEach(filterWrapper => {\n                allPromises.push(this.setModelOnFilterWrapper(filterWrapper.filterPromise, null));\n            });\n        }\n        AgPromise.all(allPromises).then(() => {\n            const currentModel = this.getFilterModel();\n            const columns = [];\n            this.allColumnFilters.forEach((filterWrapper, colId) => {\n                const before = previousModel ? previousModel[colId] : null;\n                const after = currentModel ? currentModel[colId] : null;\n                if (!_.jsonEquals(before, after)) {\n                    columns.push(filterWrapper.column);\n                }\n            });\n            if (columns.length > 0) {\n                this.onFilterChanged({ columns });\n            }\n        });\n    }\n    setModelOnFilterWrapper(filterPromise, newModel) {\n        return new AgPromise(resolve => {\n            filterPromise.then(filter => {\n                if (typeof filter.setModel !== 'function') {\n                    console.warn('AG Grid: filter missing setModel method, which is needed for setFilterModel');\n                    resolve();\n                }\n                (filter.setModel(newModel) || AgPromise.resolve()).then(() => resolve());\n            });\n        });\n    }\n    getFilterModel() {\n        const result = {};\n        this.allColumnFilters.forEach((filterWrapper, key) => {\n            // because user can provide filters, we provide useful error checking and messages\n            const filterPromise = filterWrapper.filterPromise;\n            const filter = filterPromise.resolveNow(null, promiseFilter => promiseFilter);\n            if (filter == null) {\n                return null;\n            }\n            if (typeof filter.getModel !== 'function') {\n                console.warn('AG Grid: filter API missing getModel method, which is needed for getFilterModel');\n                return;\n            }\n            const model = filter.getModel();\n            if (exists(model)) {\n                result[key] = model;\n            }\n        });\n        return result;\n    }\n    isColumnFilterPresent() {\n        return this.activeColumnFilters.length > 0;\n    }\n    isAggregateFilterPresent() {\n        return !!this.activeAggregateFilters.length;\n    }\n    isExternalFilterPresent() {\n        return this.externalFilterPresent;\n    }\n    doAggregateFiltersPass(node, filterToSkip) {\n        return this.doColumnFiltersPass(node, filterToSkip, true);\n    }\n    // called by:\n    // 1) onFilterChanged()\n    // 2) onNewRowsLoaded()\n    updateActiveFilters() {\n        this.activeColumnFilters.length = 0;\n        this.activeAggregateFilters.length = 0;\n        const isFilterActive = (filter) => {\n            if (!filter) {\n                return false;\n            } // this never happens, including to avoid compile error\n            if (!filter.isFilterActive) {\n                console.warn('AG Grid: Filter is missing isFilterActive() method');\n                return false;\n            }\n            return filter.isFilterActive();\n        };\n        const groupFilterEnabled = !!this.gridOptionsService.getGroupAggFiltering();\n        const isAggFilter = (column) => {\n            const isSecondary = !column.isPrimary();\n            // the only filters that can appear on secondary columns are groupAgg filters\n            if (isSecondary) {\n                return true;\n            }\n            const isShowingPrimaryColumns = !this.columnModel.isPivotActive();\n            const isValueActive = column.isValueActive();\n            // primary columns are only ever groupAgg filters if a) value is active and b) showing primary columns\n            if (!isValueActive || !isShowingPrimaryColumns) {\n                return false;\n            }\n            // from here on we know: isPrimary=true, isValueActive=true, isShowingPrimaryColumns=true\n            if (this.columnModel.isPivotMode()) {\n                // primary column is pretending to be a pivot column, ie pivotMode=true, but we are\n                // still showing primary columns\n                return true;\n            }\n            // we are not pivoting, so we groupFilter when it's an agg column\n            return groupFilterEnabled;\n        };\n        this.allColumnFilters.forEach(filterWrapper => {\n            if (filterWrapper.filterPromise.resolveNow(false, isFilterActive)) {\n                const filterComp = filterWrapper.filterPromise.resolveNow(null, filter => filter);\n                if (isAggFilter(filterWrapper.column)) {\n                    this.activeAggregateFilters.push(filterComp);\n                }\n                else {\n                    this.activeColumnFilters.push(filterComp);\n                }\n            }\n        });\n    }\n    updateFilterFlagInColumns(source, additionalEventAttributes) {\n        this.allColumnFilters.forEach(filterWrapper => {\n            const isFilterActive = filterWrapper.filterPromise.resolveNow(false, filter => filter.isFilterActive());\n            filterWrapper.column.setFilterActive(isFilterActive, source, additionalEventAttributes);\n        });\n    }\n    isAnyFilterPresent() {\n        return this.isQuickFilterPresent() || this.isColumnFilterPresent() || this.isAggregateFilterPresent() || this.isExternalFilterPresent();\n    }\n    doColumnFiltersPass(node, filterToSkip, targetAggregates) {\n        const { data, aggData } = node;\n        const targetedFilters = targetAggregates ? this.activeAggregateFilters : this.activeColumnFilters;\n        const targetedData = targetAggregates ? aggData : data;\n        for (let i = 0; i < targetedFilters.length; i++) {\n            const filter = targetedFilters[i];\n            if (filter == null || filter === filterToSkip) {\n                continue;\n            }\n            if (typeof filter.doesFilterPass !== 'function') {\n                // because users can do custom filters, give nice error message\n                throw new Error('Filter is missing method doesFilterPass');\n            }\n            if (!filter.doesFilterPass({ node, data: targetedData })) {\n                return false;\n            }\n        }\n        return true;\n    }\n    parseQuickFilter(newFilter) {\n        if (!exists(newFilter)) {\n            return null;\n        }\n        if (!this.gridOptionsService.isRowModelType('clientSide')) {\n            console.warn('AG Grid - Quick filtering only works with the Client-Side Row Model');\n            return null;\n        }\n        return newFilter.toUpperCase();\n    }\n    setQuickFilter(newFilter) {\n        if (newFilter != null && typeof newFilter !== 'string') {\n            console.warn(`AG Grid - setQuickFilter() only supports string inputs, received: ${typeof newFilter}`);\n            return;\n        }\n        const parsedFilter = this.parseQuickFilter(newFilter);\n        if (this.quickFilter !== parsedFilter) {\n            this.quickFilter = parsedFilter;\n            this.setQuickFilterParts();\n            this.onFilterChanged();\n        }\n    }\n    resetQuickFilterCache() {\n        this.rowModel.forEachNode(node => node.quickFilterAggregateText = null);\n    }\n    onIncludeHiddenColumnsInQuickFilterChanged() {\n        this.columnModel.refreshQuickFilterColumns();\n        this.resetQuickFilterCache();\n        if (this.isQuickFilterPresent()) {\n            this.onFilterChanged();\n        }\n    }\n    refreshFiltersForAggregations() {\n        const isAggFiltering = this.gridOptionsService.getGroupAggFiltering();\n        if (isAggFiltering) {\n            this.onFilterChanged();\n        }\n    }\n    // sometimes (especially in React) the filter can call onFilterChanged when we are in the middle\n    // of a render cycle. this would be bad, so we wait for render cycle to complete when this happens.\n    // this happens in react when we change React State in the grid (eg setting RowCtrl's in RowContainer)\n    // which results in React State getting applied in the main application, triggering a useEffect() to\n    // be kicked off adn then the application calling the grid's API. in AG-6554, the custom filter was\n    // getting it's useEffect() triggered in this way.\n    callOnFilterChangedOutsideRenderCycle(params = {}) {\n        const action = () => this.onFilterChanged(params);\n        if (this.rowRenderer.isRefreshInProgress()) {\n            setTimeout(action, 0);\n        }\n        else {\n            action();\n        }\n    }\n    onFilterChanged(params = {}) {\n        const { filterInstance, additionalEventAttributes, columns } = params;\n        this.updateDependantFilters();\n        this.updateActiveFilters();\n        this.updateFilterFlagInColumns('filterChanged', additionalEventAttributes);\n        this.externalFilterPresent = this.isExternalFilterPresentCallback();\n        this.allColumnFilters.forEach(filterWrapper => {\n            if (!filterWrapper.filterPromise) {\n                return;\n            }\n            filterWrapper.filterPromise.then(filter => {\n                if (filter && filter !== filterInstance && filter.onAnyFilterChanged) {\n                    filter.onAnyFilterChanged();\n                }\n            });\n        });\n        const filterChangedEvent = {\n            type: Events.EVENT_FILTER_CHANGED,\n            columns: columns || [],\n        };\n        if (additionalEventAttributes) {\n            mergeDeep(filterChangedEvent, additionalEventAttributes);\n        }\n        // because internal events are not async in ag-grid, when the dispatchEvent\n        // method comes back, we know all listeners have finished executing.\n        this.processingFilterChange = true;\n        this.eventService.dispatchEvent(filterChangedEvent);\n        this.processingFilterChange = false;\n    }\n    isSuppressFlashingCellsBecauseFiltering() {\n        // if user has elected to always flash cell changes, then always return false, otherwise we suppress flashing\n        // changes when filtering\n        return !this.allowShowChangeAfterFilter && this.processingFilterChange;\n    }\n    isQuickFilterPresent() {\n        return this.quickFilter !== null;\n    }\n    updateAggFiltering() {\n        this.aggFiltering = !!this.gridOptionsService.getGroupAggFiltering();\n    }\n    isAggregateQuickFilterPresent() {\n        return this.isQuickFilterPresent() && (this.aggFiltering || this.columnModel.isPivotMode());\n    }\n    isNonAggregateQuickFilterPresent() {\n        return this.isQuickFilterPresent() && !(this.aggFiltering || this.columnModel.isPivotMode());\n    }\n    doesRowPassOtherFilters(filterToSkip, node) {\n        return this.doesRowPassFilter({ rowNode: node, filterInstanceToSkip: filterToSkip });\n    }\n    doesRowPassQuickFilterNoCache(node, filterPart) {\n        const columns = this.columnModel.getAllColumnsForQuickFilter();\n        return columns.some(column => {\n            const part = this.getQuickFilterTextForColumn(column, node);\n            return exists(part) && part.indexOf(filterPart) >= 0;\n        });\n    }\n    doesRowPassQuickFilterCache(node, filterPart) {\n        if (!node.quickFilterAggregateText) {\n            this.aggregateRowForQuickFilter(node);\n        }\n        return node.quickFilterAggregateText.indexOf(filterPart) >= 0;\n    }\n    doesRowPassQuickFilter(node) {\n        const usingCache = this.gridOptionsService.is('cacheQuickFilter');\n        // each part must pass, if any fails, then the whole filter fails\n        return this.quickFilterParts.every(part => usingCache ? this.doesRowPassQuickFilterCache(node, part) : this.doesRowPassQuickFilterNoCache(node, part));\n    }\n    doesRowPassAggregateFilters(params) {\n        // check quick filter\n        if (this.isAggregateQuickFilterPresent() && !this.doesRowPassQuickFilter(params.rowNode)) {\n            return false;\n        }\n        if (this.isAggregateFilterPresent() && !this.doAggregateFiltersPass(params.rowNode, params.filterInstanceToSkip)) {\n            return false;\n        }\n        // got this far, all filters pass\n        return true;\n    }\n    doesRowPassFilter(params) {\n        // the row must pass ALL of the filters, so if any of them fail,\n        // we return true. that means if a row passes the quick filter,\n        // but fails the column filter, it fails overall\n        // first up, check quick filter\n        if (this.isNonAggregateQuickFilterPresent() && !this.doesRowPassQuickFilter(params.rowNode)) {\n            return false;\n        }\n        // secondly, give the client a chance to reject this row\n        if (this.isExternalFilterPresent() && !this.doesExternalFilterPass(params.rowNode)) {\n            return false;\n        }\n        // lastly, check column filter\n        if (this.isColumnFilterPresent() && !this.doColumnFiltersPass(params.rowNode, params.filterInstanceToSkip)) {\n            return false;\n        }\n        // got this far, all filters pass\n        return true;\n    }\n    getQuickFilterTextForColumn(column, node) {\n        let value = this.valueService.getValue(column, node, true);\n        const colDef = column.getColDef();\n        if (colDef.getQuickFilterText) {\n            const params = {\n                value,\n                node,\n                data: node.data,\n                column,\n                colDef,\n                api: this.gridOptionsService.api,\n                columnApi: this.gridOptionsService.columnApi,\n                context: this.gridOptionsService.context\n            };\n            value = colDef.getQuickFilterText(params);\n        }\n        return exists(value) ? value.toString().toUpperCase() : null;\n    }\n    aggregateRowForQuickFilter(node) {\n        const stringParts = [];\n        const columns = this.columnModel.getAllColumnsForQuickFilter();\n        columns.forEach(column => {\n            const part = this.getQuickFilterTextForColumn(column, node);\n            if (exists(part)) {\n                stringParts.push(part);\n            }\n        });\n        node.quickFilterAggregateText = stringParts.join(FilterManager_1.QUICK_FILTER_SEPARATOR);\n    }\n    onNewRowsLoaded(source) {\n        this.allColumnFilters.forEach(filterWrapper => {\n            filterWrapper.filterPromise.then(filter => {\n                if (filter.onNewRowsLoaded) {\n                    filter.onNewRowsLoaded();\n                }\n            });\n        });\n        this.updateFilterFlagInColumns(source, { afterDataChange: true });\n        this.updateActiveFilters();\n    }\n    createValueGetter(column) {\n        return ({ node }) => this.valueService.getValue(column, node, true);\n    }\n    getFilterComponent(column, source, createIfDoesNotExist = true) {\n        var _a;\n        if (createIfDoesNotExist) {\n            return ((_a = this.getOrCreateFilterWrapper(column, source)) === null || _a === void 0 ? void 0 : _a.filterPromise) || null;\n        }\n        const filterWrapper = this.cachedFilter(column);\n        return filterWrapper ? filterWrapper.filterPromise : null;\n    }\n    isFilterActive(column) {\n        const filterWrapper = this.cachedFilter(column);\n        return !!filterWrapper && filterWrapper.filterPromise.resolveNow(false, filter => filter.isFilterActive());\n    }\n    getOrCreateFilterWrapper(column, source) {\n        if (!column.isFilterAllowed()) {\n            return null;\n        }\n        let filterWrapper = this.cachedFilter(column);\n        if (!filterWrapper) {\n            filterWrapper = this.createFilterWrapper(column, source);\n            const colId = column.getColId();\n            this.allColumnFilters.set(colId, filterWrapper);\n            this.allColumnListeners.set(colId, this.addManagedListener(column, Column.EVENT_COL_DEF_CHANGED, () => this.checkDestroyFilter(colId)));\n        }\n        else if (source !== 'NO_UI') {\n            this.putIntoGui(filterWrapper, source);\n        }\n        return filterWrapper;\n    }\n    cachedFilter(column) {\n        return this.allColumnFilters.get(column.getColId());\n    }\n    getDefaultFilter(column) {\n        let defaultFilter;\n        if (ModuleRegistry.isRegistered(ModuleNames.SetFilterModule, this.context.getGridId())) {\n            defaultFilter = 'agSetColumnFilter';\n        }\n        else {\n            const cellDataType = column.getColDef().cellDataType;\n            if (cellDataType === 'number') {\n                defaultFilter = 'agNumberColumnFilter';\n            }\n            else if (cellDataType === 'date' || cellDataType === 'dateString') {\n                defaultFilter = 'agDateColumnFilter';\n            }\n            else {\n                defaultFilter = 'agTextColumnFilter';\n            }\n        }\n        return defaultFilter;\n    }\n    getDefaultFloatingFilter(column) {\n        let defaultFloatingFilterType;\n        if (ModuleRegistry.isRegistered(ModuleNames.SetFilterModule, this.context.getGridId())) {\n            defaultFloatingFilterType = 'agSetColumnFloatingFilter';\n        }\n        else {\n            const cellDataType = column.getColDef().cellDataType;\n            if (cellDataType === 'number') {\n                defaultFloatingFilterType = 'agNumberColumnFloatingFilter';\n            }\n            else if (cellDataType === 'date' || cellDataType === 'dateString') {\n                defaultFloatingFilterType = 'agDateColumnFloatingFilter';\n            }\n            else {\n                defaultFloatingFilterType = 'agTextColumnFloatingFilter';\n            }\n        }\n        return defaultFloatingFilterType;\n    }\n    createFilterInstance(column) {\n        const defaultFilter = this.getDefaultFilter(column);\n        const colDef = column.getColDef();\n        let filterInstance;\n        const params = Object.assign(Object.assign({}, this.createFilterParams(column, colDef)), { filterModifiedCallback: () => {\n                const event = {\n                    type: Events.EVENT_FILTER_MODIFIED,\n                    column,\n                    filterInstance\n                };\n                this.eventService.dispatchEvent(event);\n            }, filterChangedCallback: (additionalEventAttributes) => {\n                const params = { filterInstance, additionalEventAttributes, columns: [column] };\n                this.callOnFilterChangedOutsideRenderCycle(params);\n            }, doesRowPassOtherFilter: node => this.doesRowPassOtherFilters(filterInstance, node) });\n        const compDetails = this.userComponentFactory.getFilterDetails(colDef, params, defaultFilter);\n        if (!compDetails) {\n            return { filterPromise: null, compDetails: null };\n        }\n        return {\n            filterPromise: () => {\n                const filterPromise = compDetails.newAgStackInstance();\n                if (filterPromise) {\n                    filterPromise.then(r => filterInstance = r);\n                }\n                return filterPromise;\n            },\n            compDetails\n        };\n    }\n    createFilterParams(column, colDef) {\n        const params = {\n            column,\n            colDef: cloneObject(colDef),\n            rowModel: this.rowModel,\n            filterChangedCallback: () => { },\n            filterModifiedCallback: () => { },\n            valueGetter: this.createValueGetter(column),\n            doesRowPassOtherFilter: () => true,\n            api: this.gridOptionsService.api,\n            columnApi: this.gridOptionsService.columnApi,\n            context: this.gridOptionsService.context,\n        };\n        return params;\n    }\n    createFilterWrapper(column, source) {\n        var _a;\n        const filterWrapper = {\n            column: column,\n            filterPromise: null,\n            compiledElement: null,\n            guiPromise: AgPromise.resolve(null),\n            compDetails: null\n        };\n        const { filterPromise, compDetails } = this.createFilterInstance(column);\n        filterWrapper.filterPromise = (_a = filterPromise === null || filterPromise === void 0 ? void 0 : filterPromise()) !== null && _a !== void 0 ? _a : null;\n        filterWrapper.compDetails = compDetails;\n        if (filterPromise) {\n            this.putIntoGui(filterWrapper, source);\n        }\n        return filterWrapper;\n    }\n    putIntoGui(filterWrapper, source) {\n        const eFilterGui = document.createElement('div');\n        eFilterGui.className = 'ag-filter';\n        filterWrapper.guiPromise = new AgPromise(resolve => {\n            filterWrapper.filterPromise.then(filter => {\n                let guiFromFilter = filter.getGui();\n                if (!exists(guiFromFilter)) {\n                    console.warn(`AG Grid: getGui method from filter returned ${guiFromFilter}, it should be a DOM element or an HTML template string.`);\n                }\n                // for backwards compatibility with Angular 1 - we\n                // used to allow providing back HTML from getGui().\n                // once we move away from supporting Angular 1\n                // directly, we can change this.\n                if (typeof guiFromFilter === 'string') {\n                    guiFromFilter = loadTemplate(guiFromFilter);\n                }\n                eFilterGui.appendChild(guiFromFilter);\n                resolve(eFilterGui);\n                const event = {\n                    type: Events.EVENT_FILTER_OPENED,\n                    column: filterWrapper.column,\n                    source,\n                    eGui: eFilterGui\n                };\n                this.eventService.dispatchEvent(event);\n            });\n        });\n    }\n    onColumnsChanged() {\n        const columns = [];\n        this.allColumnFilters.forEach((wrapper, colId) => {\n            let currentColumn;\n            if (wrapper.column.isPrimary()) {\n                currentColumn = this.columnModel.getPrimaryColumn(colId);\n            }\n            else {\n                currentColumn = this.columnModel.getGridColumn(colId);\n            }\n            if (currentColumn) {\n                return;\n            }\n            columns.push(wrapper.column);\n            this.disposeFilterWrapper(wrapper, 'columnChanged');\n            this.disposeColumnListener(colId);\n        });\n        if (columns.length > 0) {\n            this.onFilterChanged({ columns });\n        }\n        else {\n            // onFilterChanged does this already\n            this.updateDependantFilters();\n        }\n    }\n    updateDependantFilters() {\n        // Group column filters can be dependant on underlying column filters, but don't normally get created until they're used for the first time.\n        // Instead, create them by default when any filter changes.\n        const groupColumns = this.columnModel.getGroupAutoColumns();\n        groupColumns === null || groupColumns === void 0 ? void 0 : groupColumns.forEach(groupColumn => {\n            if (groupColumn.getColDef().filter === 'agGroupColumnFilter') {\n                this.getOrCreateFilterWrapper(groupColumn, 'NO_UI');\n            }\n        });\n    }\n    // for group filters, can change dynamically whether they are allowed or not\n    isFilterAllowed(column) {\n        var _a, _b;\n        const isFilterAllowed = column.isFilterAllowed();\n        if (!isFilterAllowed) {\n            return false;\n        }\n        const filterWrapper = this.allColumnFilters.get(column.getColId());\n        return (_b = (_a = filterWrapper === null || filterWrapper === void 0 ? void 0 : filterWrapper.filterPromise) === null || _a === void 0 ? void 0 : _a.resolveNow(true, \n        // defer to filter component isFilterAllowed if it exists\n        filter => {\n            var _a, _b;\n            return (typeof ((_a = filter) === null || _a === void 0 ? void 0 : _a.isFilterAllowed) === 'function')\n                ? (_b = filter) === null || _b === void 0 ? void 0 : _b.isFilterAllowed()\n                : true;\n        })) !== null && _b !== void 0 ? _b : true;\n    }\n    getFloatingFilterCompDetails(column, showParentFilter) {\n        const colDef = column.getColDef();\n        const filterParams = this.createFilterParams(column, colDef);\n        const finalFilterParams = this.userComponentFactory.mergeParamsWithApplicationProvidedParams(colDef, FilterComponent, filterParams);\n        let defaultFloatingFilterType = this.userComponentFactory.getDefaultFloatingFilterType(colDef, () => this.getDefaultFloatingFilter(column));\n        if (defaultFloatingFilterType == null) {\n            defaultFloatingFilterType = 'agReadOnlyFloatingFilter';\n        }\n        const parentFilterInstance = (callback) => {\n            const filterComponent = this.getFilterComponent(column, 'NO_UI');\n            if (filterComponent == null) {\n                return;\n            }\n            filterComponent.then(instance => {\n                callback(unwrapUserComp(instance));\n            });\n        };\n        const params = {\n            column: column,\n            filterParams: finalFilterParams,\n            currentParentModel: () => this.getCurrentFloatingFilterParentModel(column),\n            parentFilterInstance,\n            showParentFilter,\n            suppressFilterButton: false // This one might be overridden from the colDef\n        };\n        return this.userComponentFactory.getFloatingFilterCompDetails(colDef, params, defaultFloatingFilterType);\n    }\n    getCurrentFloatingFilterParentModel(column) {\n        const filterComponent = this.getFilterComponent(column, 'NO_UI', false);\n        return filterComponent ? filterComponent.resolveNow(null, filter => filter && filter.getModel()) : null;\n    }\n    // destroys the filter, so it no longer takes part\n    destroyFilter(column, source = 'api') {\n        const colId = column.getColId();\n        const filterWrapper = this.allColumnFilters.get(colId);\n        this.disposeColumnListener(colId);\n        if (filterWrapper) {\n            this.disposeFilterWrapper(filterWrapper, source);\n            this.onFilterChanged({ columns: [column] });\n        }\n    }\n    disposeColumnListener(colId) {\n        const columnListener = this.allColumnListeners.get(colId);\n        if (columnListener) {\n            this.allColumnListeners.delete(colId);\n            columnListener();\n        }\n    }\n    disposeFilterWrapper(filterWrapper, source) {\n        filterWrapper.filterPromise.then(filter => {\n            (filter.setModel(null) || AgPromise.resolve()).then(() => {\n                this.getContext().destroyBean(filter);\n                filterWrapper.column.setFilterActive(false, 'filterDestroyed');\n                this.allColumnFilters.delete(filterWrapper.column.getColId());\n                const event = {\n                    type: Events.EVENT_FILTER_DESTROYED,\n                    source,\n                    column: filterWrapper.column,\n                };\n                this.eventService.dispatchEvent(event);\n            });\n        });\n    }\n    checkDestroyFilter(colId) {\n        var _a;\n        const filterWrapper = this.allColumnFilters.get(colId);\n        if (!filterWrapper) {\n            return;\n        }\n        const column = filterWrapper.column;\n        const { compDetails } = column.isFilterAllowed()\n            ? this.createFilterInstance(column)\n            : { compDetails: null };\n        if (!compDetails || ((_a = filterWrapper.compDetails) === null || _a === void 0 ? void 0 : _a.componentClass) !== compDetails.componentClass) {\n            this.destroyFilter(column, 'columnChanged');\n        }\n    }\n    destroy() {\n        super.destroy();\n        this.allColumnFilters.forEach(filterWrapper => this.disposeFilterWrapper(filterWrapper, 'gridDestroyed'));\n        // don't need to destroy the listeners as they are managed listeners\n        this.allColumnListeners.clear();\n    }\n};\nFilterManager.QUICK_FILTER_SEPARATOR = '\\n';\n__decorate$1U([\n    Autowired('valueService')\n], FilterManager.prototype, \"valueService\", void 0);\n__decorate$1U([\n    Autowired('columnModel')\n], FilterManager.prototype, \"columnModel\", void 0);\n__decorate$1U([\n    Autowired('rowModel')\n], FilterManager.prototype, \"rowModel\", void 0);\n__decorate$1U([\n    Autowired('userComponentFactory')\n], FilterManager.prototype, \"userComponentFactory\", void 0);\n__decorate$1U([\n    Autowired('rowRenderer')\n], FilterManager.prototype, \"rowRenderer\", void 0);\n__decorate$1U([\n    PostConstruct\n], FilterManager.prototype, \"init\", null);\nFilterManager = FilterManager_1 = __decorate$1U([\n    Bean('filterManager')\n], FilterManager);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass AbstractHeaderCellComp extends Component {\n    constructor(template, ctrl) {\n        super(template);\n        this.ctrl = ctrl;\n    }\n    getCtrl() {\n        return this.ctrl;\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1T = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass HeaderFilterCellComp extends AbstractHeaderCellComp {\n    constructor(ctrl) {\n        super(HeaderFilterCellComp.TEMPLATE, ctrl);\n    }\n    postConstruct() {\n        const eGui = this.getGui();\n        const compProxy = {\n            addOrRemoveCssClass: (cssClassName, on) => this.addOrRemoveCssClass(cssClassName, on),\n            addOrRemoveBodyCssClass: (cssClassName, on) => this.eFloatingFilterBody.classList.toggle(cssClassName, on),\n            setButtonWrapperDisplayed: (displayed) => setDisplayed(this.eButtonWrapper, displayed),\n            setCompDetails: compDetails => this.setCompDetails(compDetails),\n            getFloatingFilterComp: () => this.compPromise,\n            setWidth: width => eGui.style.width = width,\n            setMenuIcon: eIcon => this.eButtonShowMainFilter.appendChild(eIcon)\n        };\n        this.ctrl.setComp(compProxy, eGui, this.eButtonShowMainFilter, this.eFloatingFilterBody);\n    }\n    setCompDetails(compDetails) {\n        if (!compDetails) {\n            this.destroyFloatingFilterComp();\n            this.compPromise = null;\n            return;\n        }\n        // because we are providing defaultFloatingFilterType, we know it will never be undefined;\n        this.compPromise = compDetails.newAgStackInstance();\n        this.compPromise.then(comp => this.afterCompCreated(comp));\n    }\n    destroyFloatingFilterComp() {\n        if (this.floatingFilterComp) {\n            this.eFloatingFilterBody.removeChild(this.floatingFilterComp.getGui());\n            this.floatingFilterComp = this.destroyBean(this.floatingFilterComp);\n        }\n    }\n    afterCompCreated(comp) {\n        if (!comp) {\n            return;\n        }\n        if (!this.isAlive()) {\n            this.destroyBean(comp);\n            return;\n        }\n        this.destroyFloatingFilterComp();\n        this.floatingFilterComp = comp;\n        this.eFloatingFilterBody.appendChild(comp.getGui());\n        if (comp.afterGuiAttached) {\n            comp.afterGuiAttached();\n        }\n    }\n}\nHeaderFilterCellComp.TEMPLATE = `<div class=\"ag-header-cell ag-floating-filter\" role=\"gridcell\" tabindex=\"-1\">\n            <div ref=\"eFloatingFilterBody\" role=\"presentation\"></div>\n            <div class=\"ag-floating-filter-button ag-hidden\" ref=\"eButtonWrapper\" role=\"presentation\">\n                <button type=\"button\" class=\"ag-button ag-floating-filter-button-button\" ref=\"eButtonShowMainFilter\" tabindex=\"-1\"></button>\n            </div>\n        </div>`;\n__decorate$1T([\n    RefSelector('eFloatingFilterBody')\n], HeaderFilterCellComp.prototype, \"eFloatingFilterBody\", void 0);\n__decorate$1T([\n    RefSelector('eButtonWrapper')\n], HeaderFilterCellComp.prototype, \"eButtonWrapper\", void 0);\n__decorate$1T([\n    RefSelector('eButtonShowMainFilter')\n], HeaderFilterCellComp.prototype, \"eButtonShowMainFilter\", void 0);\n__decorate$1T([\n    PostConstruct\n], HeaderFilterCellComp.prototype, \"postConstruct\", null);\n__decorate$1T([\n    PreDestroy\n], HeaderFilterCellComp.prototype, \"destroyFloatingFilterComp\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1S = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar LayoutCssClasses;\n(function (LayoutCssClasses) {\n    LayoutCssClasses[\"AUTO_HEIGHT\"] = \"ag-layout-auto-height\";\n    LayoutCssClasses[\"NORMAL\"] = \"ag-layout-normal\";\n    LayoutCssClasses[\"PRINT\"] = \"ag-layout-print\";\n})(LayoutCssClasses || (LayoutCssClasses = {}));\nclass LayoutFeature extends BeanStub {\n    constructor(view) {\n        super();\n        this.view = view;\n    }\n    postConstruct() {\n        this.addManagedPropertyListener('domLayout', this.updateLayoutClasses.bind(this));\n        this.updateLayoutClasses();\n    }\n    updateLayoutClasses() {\n        const domLayout = this.getDomLayout();\n        const params = {\n            autoHeight: domLayout === 'autoHeight',\n            normal: domLayout === 'normal',\n            print: domLayout === 'print'\n        };\n        const cssClass = params.autoHeight ? LayoutCssClasses.AUTO_HEIGHT :\n            params.print ? LayoutCssClasses.PRINT : LayoutCssClasses.NORMAL;\n        this.view.updateLayoutClasses(cssClass, params);\n    }\n    // returns either 'print', 'autoHeight' or 'normal' (normal is the default)\n    getDomLayout() {\n        var _a;\n        const domLayout = (_a = this.gridOptionsService.get('domLayout')) !== null && _a !== void 0 ? _a : 'normal';\n        const validLayouts = ['normal', 'print', 'autoHeight'];\n        if (validLayouts.indexOf(domLayout) === -1) {\n            doOnce(() => console.warn(`AG Grid: ${domLayout} is not valid for DOM Layout, valid values are 'normal', 'autoHeight', 'print'.`), 'warn about dom layout values');\n            return 'normal';\n        }\n        return domLayout;\n    }\n}\n__decorate$1S([\n    PostConstruct\n], LayoutFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1R = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass GridBodyScrollFeature extends BeanStub {\n    constructor(eBodyViewport) {\n        super();\n        this.scrollLeft = -1;\n        this.nextScrollTop = -1;\n        this.scrollTop = -1;\n        this.eBodyViewport = eBodyViewport;\n        this.resetLastHScrollDebounced = debounce(() => this.eLastHScroll = null, 500);\n        this.resetLastVScrollDebounced = debounce(() => this.eLastVScroll = null, 500);\n    }\n    postConstruct() {\n        this.enableRtl = this.gridOptionsService.is('enableRtl');\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED, this.onDisplayedColumnsWidthChanged.bind(this));\n        this.ctrlsService.whenReady(p => {\n            this.centerRowContainerCtrl = p.centerRowContainerCtrl;\n            this.onDisplayedColumnsWidthChanged();\n            this.addScrollListener();\n        });\n    }\n    addScrollListener() {\n        const fakeHScroll = this.ctrlsService.getFakeHScrollComp();\n        const fakeVScroll = this.ctrlsService.getFakeVScrollComp();\n        this.addManagedListener(this.centerRowContainerCtrl.getViewportElement(), 'scroll', this.onHScroll.bind(this));\n        this.addManagedListener(fakeHScroll.getViewport(), 'scroll', this.onFakeHScroll.bind(this));\n        const isDebounce = this.gridOptionsService.is('debounceVerticalScrollbar');\n        const onVScroll = isDebounce ?\n            debounce(this.onVScroll.bind(this), 100) : this.onVScroll.bind(this);\n        const onFakeVScroll = isDebounce ?\n            debounce(this.onFakeVScroll.bind(this), 100) : this.onFakeVScroll.bind(this);\n        this.addManagedListener(this.eBodyViewport, 'scroll', onVScroll);\n        this.addManagedListener(fakeVScroll.getViewport(), 'scroll', onFakeVScroll);\n    }\n    onDisplayedColumnsWidthChanged() {\n        if (this.enableRtl) {\n            // because RTL is all backwards, a change in the width of the row\n            // can cause a change in the scroll position, without a scroll event,\n            // because the scroll position in RTL is a function that depends on\n            // the width. to be convinced of this, take out this line, enable RTL,\n            // scroll all the way to the left and then resize a column\n            this.horizontallyScrollHeaderCenterAndFloatingCenter();\n        }\n    }\n    horizontallyScrollHeaderCenterAndFloatingCenter(scrollLeft) {\n        // when doing RTL, this method gets called once prematurely\n        const notYetInitialised = this.centerRowContainerCtrl == null;\n        if (notYetInitialised) {\n            return;\n        }\n        if (scrollLeft === undefined) {\n            scrollLeft = this.centerRowContainerCtrl.getCenterViewportScrollLeft();\n        }\n        const offset = this.enableRtl ? scrollLeft : -scrollLeft;\n        const topCenterContainer = this.ctrlsService.getTopCenterRowContainerCtrl();\n        const stickyTopCenterContainer = this.ctrlsService.getStickyTopCenterRowContainerCtrl();\n        const bottomCenterContainer = this.ctrlsService.getBottomCenterRowContainerCtrl();\n        const fakeHScroll = this.ctrlsService.getFakeHScrollComp();\n        const centerHeaderContainer = this.ctrlsService.getHeaderRowContainerCtrl();\n        centerHeaderContainer.setHorizontalScroll(-offset);\n        bottomCenterContainer.setContainerTranslateX(offset);\n        topCenterContainer.setContainerTranslateX(offset);\n        stickyTopCenterContainer.setContainerTranslateX(offset);\n        const centerViewport = this.centerRowContainerCtrl.getViewportElement();\n        const isCenterViewportLastHorizontal = this.eLastHScroll === centerViewport;\n        const partner = isCenterViewportLastHorizontal ?\n            fakeHScroll.getViewport() :\n            this.centerRowContainerCtrl.getViewportElement();\n        setScrollLeft(partner, Math.abs(scrollLeft), this.enableRtl);\n    }\n    isControllingHScroll(eDiv) {\n        if (!this.eLastHScroll) {\n            this.eLastHScroll = eDiv;\n            return true;\n        }\n        return eDiv === this.eLastHScroll;\n    }\n    isControllingVScroll(eDiv) {\n        if (!this.eLastVScroll) {\n            this.eLastVScroll = eDiv;\n            return true;\n        }\n        return eDiv === this.eLastVScroll;\n    }\n    onFakeHScroll() {\n        const fakeHScrollViewport = this.ctrlsService.getFakeHScrollComp().getViewport();\n        if (!this.isControllingHScroll(fakeHScrollViewport)) {\n            return;\n        }\n        this.onHScrollCommon(fakeHScrollViewport);\n    }\n    onHScroll() {\n        const centerContainerViewport = this.centerRowContainerCtrl.getViewportElement();\n        if (!this.isControllingHScroll(centerContainerViewport)) {\n            return;\n        }\n        this.onHScrollCommon(centerContainerViewport);\n    }\n    onHScrollCommon(eSource) {\n        const centerContainerViewport = this.centerRowContainerCtrl.getViewportElement();\n        const { scrollLeft } = centerContainerViewport;\n        if (this.shouldBlockScrollUpdate('horizontal', scrollLeft, true)) {\n            return;\n        }\n        // we do Math.round() rather than Math.floor(), to mirror how scroll values are applied.\n        // eg if a scale is applied (ie user has zoomed the browser), then applying scroll=200\n        // could result in 199.88, which then floor(199.88) = 199, however round(199.88) = 200.\n        // initially Math.floor() was used, however this caused (almost) infinite loop with aligned grids,\n        // as the scroll would move 1px at at time bouncing from one grid to the next (eg one grid would cause\n        // scroll to 200px, the next to 199px, then the first back to 198px and so on).\n        this.doHorizontalScroll(Math.round(getScrollLeft(eSource, this.enableRtl)));\n        this.resetLastHScrollDebounced();\n    }\n    onFakeVScroll() {\n        const fakeVScrollViewport = this.ctrlsService.getFakeVScrollComp().getViewport();\n        if (!this.isControllingVScroll(fakeVScrollViewport)) {\n            return;\n        }\n        this.onVScrollCommon(fakeVScrollViewport);\n    }\n    onVScroll() {\n        if (!this.isControllingVScroll(this.eBodyViewport)) {\n            return;\n        }\n        this.onVScrollCommon(this.eBodyViewport);\n    }\n    onVScrollCommon(eSource) {\n        const scrollTop = eSource.scrollTop;\n        if (this.shouldBlockScrollUpdate('vertical', scrollTop, true)) {\n            return;\n        }\n        this.animationFrameService.setScrollTop(scrollTop);\n        this.nextScrollTop = scrollTop;\n        if (eSource === this.eBodyViewport) {\n            const fakeVScrollViewport = this.ctrlsService.getFakeVScrollComp().getViewport();\n            fakeVScrollViewport.scrollTop = scrollTop;\n        }\n        else {\n            this.eBodyViewport.scrollTop = scrollTop;\n        }\n        // the `scrollGridIfNeeded` will recalculate the rows to be rendered by the grid\n        // so it should only be called after `eBodyViewport` has been scrolled to the correct\n        // position, otherwise the `first` and `last` row could be miscalculated.\n        if (this.gridOptionsService.is('suppressAnimationFrame')) {\n            this.scrollGridIfNeeded();\n        }\n        else {\n            this.animationFrameService.schedule();\n        }\n        this.resetLastVScrollDebounced();\n    }\n    doHorizontalScroll(scrollLeft) {\n        const fakeHScrollViewport = this.ctrlsService.getFakeHScrollComp().getViewport();\n        const fakeScrollLeft = getScrollLeft(fakeHScrollViewport, this.enableRtl);\n        if (this.scrollLeft === scrollLeft && scrollLeft === fakeScrollLeft) {\n            return;\n        }\n        this.scrollLeft = scrollLeft;\n        this.fireScrollEvent('horizontal');\n        this.horizontallyScrollHeaderCenterAndFloatingCenter(scrollLeft);\n        this.onHorizontalViewportChanged();\n    }\n    fireScrollEvent(direction) {\n        const bodyScrollEvent = {\n            type: Events.EVENT_BODY_SCROLL,\n            direction,\n            left: this.scrollLeft,\n            top: this.scrollTop\n        };\n        this.eventService.dispatchEvent(bodyScrollEvent);\n        window.clearTimeout(this.scrollTimer);\n        this.scrollTimer = undefined;\n        this.scrollTimer = window.setTimeout(() => {\n            const bodyScrollEndEvent = Object.assign(Object.assign({}, bodyScrollEvent), { type: Events.EVENT_BODY_SCROLL_END });\n            this.eventService.dispatchEvent(bodyScrollEndEvent);\n        }, 100);\n    }\n    shouldBlockScrollUpdate(direction, scrollTo, touchOnly = false) {\n        // touch devices allow elastic scroll - which temporally scrolls the panel outside of the viewport\n        // (eg user uses touch to go to the left of the grid, but drags past the left, the rows will actually\n        // scroll past the left until the user releases the mouse). when this happens, we want ignore the scroll,\n        // as otherwise it was causing the rows and header to flicker.\n        // sometimes when scrolling, we got values that extended the maximum scroll allowed. we used to\n        // ignore these scrolls. problem is the max scroll position could be skipped (eg the previous scroll event\n        // could be 10px before the max position, and then current scroll event could be 20px after the max position).\n        // if we just ignored the last event, we would be setting the scroll to 10px before the max position, when in\n        // actual fact the user has exceeded the max scroll and thus scroll should be set to the max.\n        if (touchOnly && !isIOSUserAgent()) {\n            return false;\n        }\n        if (direction === 'vertical') {\n            return this.shouldBlockVerticalScroll(scrollTo);\n        }\n        return this.shouldBlockHorizontalScroll(scrollTo);\n    }\n    shouldBlockVerticalScroll(scrollTo) {\n        const clientHeight = getInnerHeight(this.eBodyViewport);\n        const { scrollHeight } = this.eBodyViewport;\n        if (scrollTo < 0 || (scrollTo + clientHeight > scrollHeight)) {\n            return true;\n        }\n        return false;\n    }\n    shouldBlockHorizontalScroll(scrollTo) {\n        const clientWidth = this.centerRowContainerCtrl.getCenterWidth();\n        const { scrollWidth } = this.centerRowContainerCtrl.getViewportElement();\n        if (this.enableRtl && isRtlNegativeScroll()) {\n            if (scrollTo > 0) {\n                return true;\n            }\n        }\n        else if (scrollTo < 0) {\n            return true;\n        }\n        if (Math.abs(scrollTo) + clientWidth > scrollWidth) {\n            return true;\n        }\n        return false;\n    }\n    redrawRowsAfterScroll() {\n        this.fireScrollEvent('vertical');\n    }\n    onHorizontalViewportChanged() {\n        this.centerRowContainerCtrl.onHorizontalViewportChanged();\n    }\n    // this is to cater for AG-3274, where grid is removed from the dom and then inserted back in again.\n    // (which happens with some implementations of tabbing). this can result in horizontal scroll getting\n    // reset back to the left, however no scroll event is fired. so we need to get header to also scroll\n    // back to the left to be kept in sync.\n    // adding and removing the grid from the DOM both resets the scroll position and\n    // triggers a resize event, so notify listeners if the scroll position has changed\n    checkScrollLeft() {\n        if (this.scrollLeft !== this.centerRowContainerCtrl.getCenterViewportScrollLeft()) {\n            this.onHScrollCommon(this.centerRowContainerCtrl.getViewportElement());\n        }\n    }\n    scrollGridIfNeeded() {\n        const frameNeeded = this.scrollTop != this.nextScrollTop;\n        if (frameNeeded) {\n            this.scrollTop = this.nextScrollTop;\n            this.redrawRowsAfterScroll();\n        }\n        return frameNeeded;\n    }\n    // called by scrollHorizontally method and alignedGridsService\n    setHorizontalScrollPosition(hScrollPosition) {\n        this.ctrlsService.getFakeHScrollComp().getGui();\n        const minScrollLeft = 0;\n        const maxScrollLeft = this.centerRowContainerCtrl.getViewportElement().scrollWidth - this.centerRowContainerCtrl.getCenterWidth();\n        if (this.shouldBlockScrollUpdate('horizontal', hScrollPosition)) {\n            if (this.enableRtl && isRtlNegativeScroll()) {\n                hScrollPosition = hScrollPosition > 0 ? 0 : maxScrollLeft;\n            }\n            else {\n                hScrollPosition = Math.min(Math.max(hScrollPosition, minScrollLeft), maxScrollLeft);\n            }\n        }\n        setScrollLeft(this.centerRowContainerCtrl.getViewportElement(), Math.abs(hScrollPosition), this.enableRtl);\n        // we need to manually do the event handling (rather than wait for the event)\n        // for the alignedGridsService, as if we don't, the aligned grid service gets\n        // notified async, and then it's 'consuming' flag doesn't get used right, and\n        // we can end up with an infinite loop\n        this.doHorizontalScroll(hScrollPosition);\n    }\n    setVerticalScrollPosition(vScrollPosition) {\n        this.eBodyViewport.scrollTop = vScrollPosition;\n    }\n    getVScrollPosition() {\n        const result = {\n            top: this.eBodyViewport.scrollTop,\n            bottom: this.eBodyViewport.scrollTop + this.eBodyViewport.offsetHeight\n        };\n        return result;\n    }\n    getHScrollPosition() {\n        return this.centerRowContainerCtrl.getHScrollPosition();\n    }\n    isHorizontalScrollShowing() {\n        return this.centerRowContainerCtrl.isHorizontalScrollShowing();\n    }\n    // called by the headerRootComp and moveColumnController\n    scrollHorizontally(pixels) {\n        const oldScrollPosition = this.centerRowContainerCtrl.getViewportElement().scrollLeft;\n        this.setHorizontalScrollPosition(oldScrollPosition + pixels);\n        return this.centerRowContainerCtrl.getViewportElement().scrollLeft - oldScrollPosition;\n    }\n    // gets called by rowRenderer when new data loaded, as it will want to scroll to the top\n    scrollToTop() {\n        this.eBodyViewport.scrollTop = 0;\n    }\n    // Valid values for position are bottom, middle and top\n    ensureNodeVisible(comparator, position = null) {\n        // look for the node index we want to display\n        const rowCount = this.rowModel.getRowCount();\n        let indexToSelect = -1;\n        // go through all the nodes, find the one we want to show\n        for (let i = 0; i < rowCount; i++) {\n            const node = this.rowModel.getRow(i);\n            if (typeof comparator === 'function') {\n                // Have to assert type here, as type could be TData & Function\n                const predicate = comparator;\n                if (node && predicate(node)) {\n                    indexToSelect = i;\n                    break;\n                }\n            }\n            else {\n                // check object equality against node and data\n                if (comparator === node || comparator === node.data) {\n                    indexToSelect = i;\n                    break;\n                }\n            }\n        }\n        if (indexToSelect >= 0) {\n            this.ensureIndexVisible(indexToSelect, position);\n        }\n    }\n    // Valid values for position are bottom, middle and top\n    // position should be {'top','middle','bottom', or undefined/null}.\n    // if undefined/null, then the grid will to the minimal amount of scrolling,\n    // eg if grid needs to scroll up, it scrolls until row is on top,\n    //    if grid needs to scroll down, it scrolls until row is on bottom,\n    //    if row is already in view, grid does not scroll\n    ensureIndexVisible(index, position) {\n        // if for print or auto height, everything is always visible\n        if (this.gridOptionsService.isDomLayout('print')) {\n            return;\n        }\n        const rowCount = this.paginationProxy.getRowCount();\n        if (typeof index !== 'number' || index < 0 || index >= rowCount) {\n            console.warn('AG Grid: Invalid row index for ensureIndexVisible: ' + index);\n            return;\n        }\n        const isPaging = this.gridOptionsService.is('pagination');\n        const paginationPanelEnabled = isPaging && !this.gridOptionsService.is('suppressPaginationPanel');\n        if (!paginationPanelEnabled) {\n            this.paginationProxy.goToPageWithIndex(index);\n        }\n        const gridBodyCtrl = this.ctrlsService.getGridBodyCtrl();\n        const stickyTopHeight = gridBodyCtrl.getStickyTopHeight();\n        const rowNode = this.paginationProxy.getRow(index);\n        let rowGotShiftedDuringOperation;\n        do {\n            const startingRowTop = rowNode.rowTop;\n            const startingRowHeight = rowNode.rowHeight;\n            const paginationOffset = this.paginationProxy.getPixelOffset();\n            const rowTopPixel = rowNode.rowTop - paginationOffset;\n            const rowBottomPixel = rowTopPixel + rowNode.rowHeight;\n            const scrollPosition = this.getVScrollPosition();\n            const heightOffset = this.heightScaler.getDivStretchOffset();\n            const vScrollTop = scrollPosition.top + heightOffset;\n            const vScrollBottom = scrollPosition.bottom + heightOffset;\n            const viewportHeight = vScrollBottom - vScrollTop;\n            // work out the pixels for top, middle and bottom up front,\n            // make the if/else below easier to read\n            const pxTop = this.heightScaler.getScrollPositionForPixel(rowTopPixel);\n            const pxBottom = this.heightScaler.getScrollPositionForPixel(rowBottomPixel - viewportHeight);\n            // make sure if middle, the row is not outside the top of the grid\n            const pxMiddle = Math.min((pxTop + pxBottom) / 2, rowTopPixel);\n            const rowAboveViewport = (vScrollTop + stickyTopHeight) > rowTopPixel;\n            const rowBelowViewport = vScrollBottom < rowBottomPixel;\n            let newScrollPosition = null;\n            if (position === 'top') {\n                newScrollPosition = pxTop;\n            }\n            else if (position === 'bottom') {\n                newScrollPosition = pxBottom;\n            }\n            else if (position === 'middle') {\n                newScrollPosition = pxMiddle;\n            }\n            else if (rowAboveViewport) {\n                // if row is before, scroll up with row at top\n                newScrollPosition = pxTop - stickyTopHeight;\n            }\n            else if (rowBelowViewport) {\n                // if row is after, scroll down with row at bottom\n                newScrollPosition = pxBottom;\n            }\n            if (newScrollPosition !== null) {\n                this.setVerticalScrollPosition(newScrollPosition);\n                this.rowRenderer.redrawAfterScroll();\n            }\n            // the row can get shifted if during the rendering (during rowRenderer.redrawAfterScroll()),\n            // the height of a row changes due to lazy calculation of row heights when using\n            // colDef.autoHeight or gridOptions.getRowHeight.\n            // if row was shifted, then the position we scrolled to is incorrect.\n            rowGotShiftedDuringOperation = (startingRowTop !== rowNode.rowTop)\n                || (startingRowHeight !== rowNode.rowHeight);\n        } while (rowGotShiftedDuringOperation);\n        // so when we return back to user, the cells have rendered\n        this.animationFrameService.flushAllFrames();\n    }\n    ensureColumnVisible(key, position = 'auto') {\n        const column = this.columnModel.getGridColumn(key);\n        if (!column) {\n            return;\n        }\n        // calling ensureColumnVisible on a pinned column doesn't make sense\n        if (column.isPinned()) {\n            return;\n        }\n        // defensive\n        if (!this.columnModel.isColumnDisplayed(column)) {\n            return;\n        }\n        const newHorizontalScroll = this.getPositionedHorizontalScroll(column, position);\n        if (newHorizontalScroll !== null) {\n            this.centerRowContainerCtrl.setCenterViewportScrollLeft(newHorizontalScroll);\n        }\n        // this will happen anyway, as the move will cause a 'scroll' event on the body, however\n        // it is possible that the ensureColumnVisible method is called from within AG Grid and\n        // the caller will need to have the columns rendered to continue, which will be before\n        // the event has been worked on (which is the case for cell navigation).\n        this.centerRowContainerCtrl.onHorizontalViewportChanged();\n        // so when we return back to user, the cells have rendered\n        this.animationFrameService.flushAllFrames();\n    }\n    getPositionedHorizontalScroll(column, position) {\n        const { columnBeforeStart, columnAfterEnd } = this.isColumnOutsideViewport(column);\n        const viewportTooSmallForColumn = this.centerRowContainerCtrl.getCenterWidth() < column.getActualWidth();\n        const viewportWidth = this.centerRowContainerCtrl.getCenterWidth();\n        const isRtl = this.enableRtl;\n        let alignColToStart = (isRtl ? columnBeforeStart : columnAfterEnd) || viewportTooSmallForColumn;\n        let alignColToEnd = isRtl ? columnAfterEnd : columnBeforeStart;\n        if (position !== 'auto') {\n            alignColToStart = position === 'start';\n            alignColToEnd = position === 'end';\n        }\n        const isMiddle = position === 'middle';\n        if (alignColToStart || alignColToEnd || isMiddle) {\n            const { colLeft, colMiddle, colRight } = this.getColumnBounds(column);\n            if (isMiddle) {\n                return colMiddle - viewportWidth / 2;\n            }\n            if (alignColToStart) {\n                return isRtl ? colRight : colLeft;\n            }\n            return isRtl ? (colLeft - viewportWidth) : (colRight - viewportWidth);\n        }\n        return null;\n    }\n    isColumnOutsideViewport(column) {\n        const { start: viewportStart, end: viewportEnd } = this.getViewportBounds();\n        const { colLeft, colRight } = this.getColumnBounds(column);\n        const isRtl = this.enableRtl;\n        const columnBeforeStart = isRtl ? (viewportStart > colRight) : (viewportEnd < colRight);\n        const columnAfterEnd = isRtl ? (viewportEnd < colLeft) : (viewportStart > colLeft);\n        return { columnBeforeStart, columnAfterEnd };\n    }\n    getColumnBounds(column) {\n        const isRtl = this.enableRtl;\n        const bodyWidth = this.columnModel.getBodyContainerWidth();\n        const colWidth = column.getActualWidth();\n        const colLeft = column.getLeft();\n        const multiplier = isRtl ? -1 : 1;\n        const colLeftPixel = isRtl ? (bodyWidth - colLeft) : colLeft;\n        const colRightPixel = colLeftPixel + colWidth * multiplier;\n        const colMidPixel = colLeftPixel + colWidth / 2 * multiplier;\n        return { colLeft: colLeftPixel, colMiddle: colMidPixel, colRight: colRightPixel };\n    }\n    getViewportBounds() {\n        const viewportWidth = this.centerRowContainerCtrl.getCenterWidth();\n        const scrollPosition = this.centerRowContainerCtrl.getCenterViewportScrollLeft();\n        const viewportStartPixel = scrollPosition;\n        const viewportEndPixel = viewportWidth + scrollPosition;\n        return { start: viewportStartPixel, end: viewportEndPixel, width: viewportWidth };\n    }\n}\n__decorate$1R([\n    Autowired('ctrlsService')\n], GridBodyScrollFeature.prototype, \"ctrlsService\", void 0);\n__decorate$1R([\n    Autowired('animationFrameService')\n], GridBodyScrollFeature.prototype, \"animationFrameService\", void 0);\n__decorate$1R([\n    Autowired('paginationProxy')\n], GridBodyScrollFeature.prototype, \"paginationProxy\", void 0);\n__decorate$1R([\n    Autowired('rowModel')\n], GridBodyScrollFeature.prototype, \"rowModel\", void 0);\n__decorate$1R([\n    Autowired('rowContainerHeightService')\n], GridBodyScrollFeature.prototype, \"heightScaler\", void 0);\n__decorate$1R([\n    Autowired('rowRenderer')\n], GridBodyScrollFeature.prototype, \"rowRenderer\", void 0);\n__decorate$1R([\n    Autowired('columnModel')\n], GridBodyScrollFeature.prototype, \"columnModel\", void 0);\n__decorate$1R([\n    PostConstruct\n], GridBodyScrollFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass AutoScrollService {\n    constructor(params) {\n        this.tickingInterval = null;\n        this.onScrollCallback = null;\n        this.scrollContainer = params.scrollContainer;\n        this.scrollHorizontally = params.scrollAxis.indexOf('x') !== -1;\n        this.scrollVertically = params.scrollAxis.indexOf('y') !== -1;\n        this.scrollByTick = params.scrollByTick != null ? params.scrollByTick : 20;\n        if (params.onScrollCallback) {\n            this.onScrollCallback = params.onScrollCallback;\n        }\n        if (this.scrollVertically) {\n            this.getVerticalPosition = params.getVerticalPosition;\n            this.setVerticalPosition = params.setVerticalPosition;\n        }\n        if (this.scrollHorizontally) {\n            this.getHorizontalPosition = params.getHorizontalPosition;\n            this.setHorizontalPosition = params.setHorizontalPosition;\n        }\n        this.shouldSkipVerticalScroll = params.shouldSkipVerticalScroll || (() => false);\n        this.shouldSkipHorizontalScroll = params.shouldSkipHorizontalScroll || (() => false);\n    }\n    check(mouseEvent, forceSkipVerticalScroll = false) {\n        const skipVerticalScroll = forceSkipVerticalScroll || this.shouldSkipVerticalScroll();\n        if (skipVerticalScroll && this.shouldSkipHorizontalScroll()) {\n            return;\n        }\n        const rect = this.scrollContainer.getBoundingClientRect();\n        const scrollTick = this.scrollByTick;\n        this.tickLeft = mouseEvent.clientX < (rect.left + scrollTick);\n        this.tickRight = mouseEvent.clientX > (rect.right - scrollTick);\n        this.tickUp = mouseEvent.clientY < (rect.top + scrollTick) && !skipVerticalScroll;\n        this.tickDown = mouseEvent.clientY > (rect.bottom - scrollTick) && !skipVerticalScroll;\n        if (this.tickLeft || this.tickRight || this.tickUp || this.tickDown) {\n            this.ensureTickingStarted();\n        }\n        else {\n            this.ensureCleared();\n        }\n    }\n    ensureTickingStarted() {\n        if (this.tickingInterval === null) {\n            this.tickingInterval = window.setInterval(this.doTick.bind(this), 100);\n            this.tickCount = 0;\n        }\n    }\n    doTick() {\n        this.tickCount++;\n        let tickAmount;\n        tickAmount = this.tickCount > 20 ? 200 : (this.tickCount > 10 ? 80 : 40);\n        if (this.scrollVertically) {\n            const vScrollPosition = this.getVerticalPosition();\n            if (this.tickUp) {\n                this.setVerticalPosition(vScrollPosition - tickAmount);\n            }\n            if (this.tickDown) {\n                this.setVerticalPosition(vScrollPosition + tickAmount);\n            }\n        }\n        if (this.scrollHorizontally) {\n            const hScrollPosition = this.getHorizontalPosition();\n            if (this.tickLeft) {\n                this.setHorizontalPosition(hScrollPosition - tickAmount);\n            }\n            if (this.tickRight) {\n                this.setHorizontalPosition(hScrollPosition + tickAmount);\n            }\n        }\n        if (this.onScrollCallback) {\n            this.onScrollCallback();\n        }\n    }\n    ensureCleared() {\n        if (this.tickingInterval) {\n            window.clearInterval(this.tickingInterval);\n            this.tickingInterval = null;\n        }\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1Q = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass RowDragFeature extends BeanStub {\n    constructor(eContainer) {\n        super();\n        this.isMultiRowDrag = false;\n        this.isGridSorted = false;\n        this.isGridFiltered = false;\n        this.isRowGroupActive = false;\n        this.eContainer = eContainer;\n    }\n    postConstruct() {\n        if (this.gridOptionsService.isRowModelType('clientSide')) {\n            this.clientSideRowModel = this.rowModel;\n        }\n        const refreshStatus = () => {\n            this.onSortChanged();\n            this.onFilterChanged();\n            this.onRowGroupChanged();\n        };\n        this.addManagedListener(this.eventService, Events.EVENT_SORT_CHANGED, this.onSortChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_FILTER_CHANGED, this.onFilterChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, this.onRowGroupChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_MODEL_UPDATED, () => {\n            refreshStatus();\n        });\n        refreshStatus();\n        this.ctrlsService.whenReady(() => {\n            const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n            this.autoScrollService = new AutoScrollService({\n                scrollContainer: gridBodyCon.getBodyViewportElement(),\n                scrollAxis: 'y',\n                getVerticalPosition: () => gridBodyCon.getScrollFeature().getVScrollPosition().top,\n                setVerticalPosition: (position) => gridBodyCon.getScrollFeature().setVerticalScrollPosition(position),\n                onScrollCallback: () => { this.onDragging(this.lastDraggingEvent); }\n            });\n        });\n    }\n    onSortChanged() {\n        this.isGridSorted = this.sortController.isSortActive();\n    }\n    onFilterChanged() {\n        this.isGridFiltered = this.filterManager.isAnyFilterPresent();\n    }\n    onRowGroupChanged() {\n        const rowGroups = this.columnModel.getRowGroupColumns();\n        this.isRowGroupActive = !missingOrEmpty(rowGroups);\n    }\n    getContainer() {\n        return this.eContainer;\n    }\n    isInterestedIn(type) {\n        return type === DragSourceType.RowDrag;\n    }\n    getIconName() {\n        const managedDrag = this.gridOptionsService.is('rowDragManaged');\n        if (managedDrag && this.shouldPreventRowMove()) {\n            return DragAndDropService.ICON_NOT_ALLOWED;\n        }\n        return DragAndDropService.ICON_MOVE;\n    }\n    shouldPreventRowMove() {\n        return this.isGridSorted || this.isGridFiltered || this.isRowGroupActive;\n    }\n    getRowNodes(draggingEvent) {\n        if (!this.isFromThisGrid(draggingEvent)) {\n            return (draggingEvent.dragItem.rowNodes || []);\n        }\n        const isRowDragMultiRow = this.gridOptionsService.is('rowDragMultiRow');\n        const selectedNodes = [...this.selectionService.getSelectedNodes()].sort((a, b) => {\n            if (a.rowIndex == null || b.rowIndex == null) {\n                return 0;\n            }\n            return this.getRowIndexNumber(a) - this.getRowIndexNumber(b);\n        });\n        const currentNode = draggingEvent.dragItem.rowNode;\n        if (isRowDragMultiRow && selectedNodes.indexOf(currentNode) !== -1) {\n            this.isMultiRowDrag = true;\n            return selectedNodes;\n        }\n        this.isMultiRowDrag = false;\n        return [currentNode];\n    }\n    onDragEnter(draggingEvent) {\n        // builds a lits of all rows being dragged before firing events\n        draggingEvent.dragItem.rowNodes = this.getRowNodes(draggingEvent);\n        // when entering, we fire the enter event, then in onEnterOrDragging,\n        // we also fire the move event. so we get both events when entering.\n        this.dispatchGridEvent(Events.EVENT_ROW_DRAG_ENTER, draggingEvent);\n        this.getRowNodes(draggingEvent).forEach(rowNode => {\n            rowNode.setDragging(true);\n        });\n        this.onEnterOrDragging(draggingEvent);\n    }\n    onDragging(draggingEvent) {\n        this.onEnterOrDragging(draggingEvent);\n    }\n    isFromThisGrid(draggingEvent) {\n        const { dragSourceDomDataKey } = draggingEvent.dragSource;\n        return dragSourceDomDataKey === this.gridOptionsService.getDomDataKey();\n    }\n    isDropZoneWithinThisGrid(draggingEvent) {\n        const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n        const gridGui = gridBodyCon.getGui();\n        const { dropZoneTarget } = draggingEvent;\n        return !gridGui.contains(dropZoneTarget);\n    }\n    onEnterOrDragging(draggingEvent) {\n        // this event is fired for enter and move\n        this.dispatchGridEvent(Events.EVENT_ROW_DRAG_MOVE, draggingEvent);\n        this.lastDraggingEvent = draggingEvent;\n        const pixel = this.mouseEventService.getNormalisedPosition(draggingEvent).y;\n        const managedDrag = this.gridOptionsService.is('rowDragManaged');\n        if (managedDrag) {\n            this.doManagedDrag(draggingEvent, pixel);\n        }\n        this.autoScrollService.check(draggingEvent.event);\n    }\n    doManagedDrag(draggingEvent, pixel) {\n        const isFromThisGrid = this.isFromThisGrid(draggingEvent);\n        const managedDrag = this.gridOptionsService.is('rowDragManaged');\n        const rowNodes = draggingEvent.dragItem.rowNodes;\n        if (managedDrag && this.shouldPreventRowMove()) {\n            return;\n        }\n        if (this.gridOptionsService.is('suppressMoveWhenRowDragging') || !isFromThisGrid) {\n            if (!this.isDropZoneWithinThisGrid(draggingEvent)) {\n                this.clientSideRowModel.highlightRowAtPixel(rowNodes[0], pixel);\n            }\n        }\n        else {\n            this.moveRows(rowNodes, pixel);\n        }\n    }\n    getRowIndexNumber(rowNode) {\n        return parseInt(last(rowNode.getRowIndexString().split('-')), 10);\n    }\n    moveRowAndClearHighlight(draggingEvent) {\n        const lastHighlightedRowNode = this.clientSideRowModel.getLastHighlightedRowNode();\n        const isBelow = lastHighlightedRowNode && lastHighlightedRowNode.highlighted === RowHighlightPosition.Below;\n        const pixel = this.mouseEventService.getNormalisedPosition(draggingEvent).y;\n        const rowNodes = draggingEvent.dragItem.rowNodes;\n        let increment = isBelow ? 1 : 0;\n        if (this.isFromThisGrid(draggingEvent)) {\n            rowNodes.forEach(rowNode => {\n                if (rowNode.rowTop < pixel) {\n                    increment -= 1;\n                }\n            });\n            this.moveRows(rowNodes, pixel, increment);\n        }\n        else {\n            const getRowIdFunc = this.gridOptionsService.getCallback('getRowId');\n            let addIndex = this.clientSideRowModel.getRowIndexAtPixel(pixel) + 1;\n            if (this.clientSideRowModel.getHighlightPosition(pixel) === RowHighlightPosition.Above) {\n                addIndex--;\n            }\n            this.clientSideRowModel.updateRowData({\n                add: rowNodes\n                    .map(node => node.data)\n                    .filter(data => !this.clientSideRowModel.getRowNode(getRowIdFunc ? getRowIdFunc({ data, level: 0 }) : data.id)),\n                addIndex\n            });\n        }\n        this.clearRowHighlight();\n    }\n    clearRowHighlight() {\n        this.clientSideRowModel.highlightRowAtPixel(null);\n    }\n    moveRows(rowNodes, pixel, increment = 0) {\n        const rowWasMoved = this.clientSideRowModel.ensureRowsAtPixel(rowNodes, pixel, increment);\n        if (rowWasMoved) {\n            this.focusService.clearFocusedCell();\n            if (this.rangeService) {\n                this.rangeService.removeAllCellRanges();\n            }\n        }\n    }\n    addRowDropZone(params) {\n        if (!params.getContainer()) {\n            doOnce(() => console.warn('AG Grid: addRowDropZone - A container target needs to be provided'), 'add-drop-zone-empty-target');\n            return;\n        }\n        if (this.dragAndDropService.findExternalZone(params)) {\n            console.warn('AG Grid: addRowDropZone - target already exists in the list of DropZones. Use `removeRowDropZone` before adding it again.');\n            return;\n        }\n        let processedParams = {\n            getContainer: params.getContainer\n        };\n        if (params.fromGrid) {\n            params.fromGrid = undefined;\n            processedParams = params;\n        }\n        else {\n            if (params.onDragEnter) {\n                processedParams.onDragEnter = (e) => {\n                    params.onDragEnter(this.draggingToRowDragEvent(Events.EVENT_ROW_DRAG_ENTER, e));\n                };\n            }\n            if (params.onDragLeave) {\n                processedParams.onDragLeave = (e) => {\n                    params.onDragLeave(this.draggingToRowDragEvent(Events.EVENT_ROW_DRAG_LEAVE, e));\n                };\n            }\n            if (params.onDragging) {\n                processedParams.onDragging = (e) => {\n                    params.onDragging(this.draggingToRowDragEvent(Events.EVENT_ROW_DRAG_MOVE, e));\n                };\n            }\n            if (params.onDragStop) {\n                processedParams.onDragStop = (e) => {\n                    params.onDragStop(this.draggingToRowDragEvent(Events.EVENT_ROW_DRAG_END, e));\n                };\n            }\n        }\n        this.dragAndDropService.addDropTarget(Object.assign({ isInterestedIn: (type) => type === DragSourceType.RowDrag, getIconName: () => DragAndDropService.ICON_MOVE, external: true }, processedParams));\n    }\n    getRowDropZone(events) {\n        const getContainer = this.getContainer.bind(this);\n        const onDragEnter = this.onDragEnter.bind(this);\n        const onDragLeave = this.onDragLeave.bind(this);\n        const onDragging = this.onDragging.bind(this);\n        const onDragStop = this.onDragStop.bind(this);\n        if (!events) {\n            return { getContainer, onDragEnter, onDragLeave, onDragging, onDragStop, /* @private */ fromGrid: true };\n        }\n        return {\n            getContainer,\n            onDragEnter: events.onDragEnter\n                ? ((e) => {\n                    onDragEnter(e);\n                    events.onDragEnter(this.draggingToRowDragEvent(Events.EVENT_ROW_DRAG_ENTER, e));\n                })\n                : onDragEnter,\n            onDragLeave: events.onDragLeave\n                ? ((e) => {\n                    onDragLeave(e);\n                    events.onDragLeave(this.draggingToRowDragEvent(Events.EVENT_ROW_DRAG_LEAVE, e));\n                })\n                : onDragLeave,\n            onDragging: events.onDragging\n                ? ((e) => {\n                    onDragging(e);\n                    events.onDragging(this.draggingToRowDragEvent(Events.EVENT_ROW_DRAG_MOVE, e));\n                })\n                : onDragging,\n            onDragStop: events.onDragStop\n                ? ((e) => {\n                    onDragStop(e);\n                    events.onDragStop(this.draggingToRowDragEvent(Events.EVENT_ROW_DRAG_END, e));\n                })\n                : onDragStop,\n            fromGrid: true /* @private */\n        };\n    }\n    draggingToRowDragEvent(type, draggingEvent) {\n        const yNormalised = this.mouseEventService.getNormalisedPosition(draggingEvent).y;\n        const mouseIsPastLastRow = yNormalised > this.paginationProxy.getCurrentPageHeight();\n        let overIndex = -1;\n        let overNode;\n        if (!mouseIsPastLastRow) {\n            overIndex = this.rowModel.getRowIndexAtPixel(yNormalised);\n            overNode = this.rowModel.getRow(overIndex);\n        }\n        let vDirectionString;\n        switch (draggingEvent.vDirection) {\n            case VerticalDirection.Down:\n                vDirectionString = 'down';\n                break;\n            case VerticalDirection.Up:\n                vDirectionString = 'up';\n                break;\n            default:\n                vDirectionString = null;\n                break;\n        }\n        const event = {\n            type: type,\n            api: this.gridOptionsService.api,\n            columnApi: this.gridOptionsService.columnApi,\n            context: this.gridOptionsService.context,\n            event: draggingEvent.event,\n            node: draggingEvent.dragItem.rowNode,\n            nodes: draggingEvent.dragItem.rowNodes,\n            overIndex: overIndex,\n            overNode: overNode,\n            y: yNormalised,\n            vDirection: vDirectionString\n        };\n        return event;\n    }\n    dispatchGridEvent(type, draggingEvent) {\n        const event = this.draggingToRowDragEvent(type, draggingEvent);\n        this.eventService.dispatchEvent(event);\n    }\n    onDragLeave(draggingEvent) {\n        this.dispatchGridEvent(Events.EVENT_ROW_DRAG_LEAVE, draggingEvent);\n        this.stopDragging(draggingEvent);\n        if (this.gridOptionsService.is('rowDragManaged')) {\n            this.clearRowHighlight();\n        }\n        if (this.isFromThisGrid(draggingEvent)) {\n            this.isMultiRowDrag = false;\n        }\n    }\n    onDragStop(draggingEvent) {\n        this.dispatchGridEvent(Events.EVENT_ROW_DRAG_END, draggingEvent);\n        this.stopDragging(draggingEvent);\n        if (this.gridOptionsService.is('rowDragManaged') &&\n            (this.gridOptionsService.is('suppressMoveWhenRowDragging') || !this.isFromThisGrid(draggingEvent)) &&\n            !this.isDropZoneWithinThisGrid(draggingEvent)) {\n            this.moveRowAndClearHighlight(draggingEvent);\n        }\n    }\n    stopDragging(draggingEvent) {\n        this.autoScrollService.ensureCleared();\n        this.getRowNodes(draggingEvent).forEach(rowNode => {\n            rowNode.setDragging(false);\n        });\n    }\n}\n__decorate$1Q([\n    Autowired('dragAndDropService')\n], RowDragFeature.prototype, \"dragAndDropService\", void 0);\n__decorate$1Q([\n    Autowired('rowModel')\n], RowDragFeature.prototype, \"rowModel\", void 0);\n__decorate$1Q([\n    Autowired('paginationProxy')\n], RowDragFeature.prototype, \"paginationProxy\", void 0);\n__decorate$1Q([\n    Autowired('columnModel')\n], RowDragFeature.prototype, \"columnModel\", void 0);\n__decorate$1Q([\n    Autowired('focusService')\n], RowDragFeature.prototype, \"focusService\", void 0);\n__decorate$1Q([\n    Autowired('sortController')\n], RowDragFeature.prototype, \"sortController\", void 0);\n__decorate$1Q([\n    Autowired('filterManager')\n], RowDragFeature.prototype, \"filterManager\", void 0);\n__decorate$1Q([\n    Autowired('selectionService')\n], RowDragFeature.prototype, \"selectionService\", void 0);\n__decorate$1Q([\n    Autowired('mouseEventService')\n], RowDragFeature.prototype, \"mouseEventService\", void 0);\n__decorate$1Q([\n    Autowired('ctrlsService')\n], RowDragFeature.prototype, \"ctrlsService\", void 0);\n__decorate$1Q([\n    Optional('rangeService')\n], RowDragFeature.prototype, \"rangeService\", void 0);\n__decorate$1Q([\n    PostConstruct\n], RowDragFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1P = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar RowAnimationCssClasses;\n(function (RowAnimationCssClasses) {\n    RowAnimationCssClasses[\"ANIMATION_ON\"] = \"ag-row-animation\";\n    RowAnimationCssClasses[\"ANIMATION_OFF\"] = \"ag-row-no-animation\";\n})(RowAnimationCssClasses || (RowAnimationCssClasses = {}));\nconst CSS_CLASS_FORCE_VERTICAL_SCROLL = 'ag-force-vertical-scroll';\nconst CSS_CLASS_CELL_SELECTABLE = 'ag-selectable';\nconst CSS_CLASS_COLUMN_MOVING = 'ag-column-moving';\nclass GridBodyCtrl extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.stickyTopHeight = 0;\n    }\n    getScrollFeature() {\n        return this.bodyScrollFeature;\n    }\n    getBodyViewportElement() {\n        return this.eBodyViewport;\n    }\n    setComp(comp, eGridBody, eBodyViewport, eTop, eBottom, eStickyTop) {\n        this.comp = comp;\n        this.eGridBody = eGridBody;\n        this.eBodyViewport = eBodyViewport;\n        this.eTop = eTop;\n        this.eBottom = eBottom;\n        this.eStickyTop = eStickyTop;\n        this.setCellTextSelection(this.gridOptionsService.is('enableCellTextSelection'));\n        this.createManagedBean(new LayoutFeature(this.comp));\n        this.bodyScrollFeature = this.createManagedBean(new GridBodyScrollFeature(this.eBodyViewport));\n        this.addRowDragListener();\n        this.setupRowAnimationCssClass();\n        this.addEventListeners();\n        this.addFocusListeners([eTop, eBodyViewport, eBottom, eStickyTop]);\n        this.onGridColumnsChanged();\n        this.addBodyViewportListener();\n        this.setFloatingHeights();\n        this.disableBrowserDragging();\n        this.addStopEditingWhenGridLosesFocus();\n        this.ctrlsService.registerGridBodyCtrl(this);\n    }\n    getComp() {\n        return this.comp;\n    }\n    addEventListeners() {\n        this.addManagedListener(this.eventService, Events.EVENT_GRID_COLUMNS_CHANGED, this.onGridColumnsChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_SCROLL_VISIBILITY_CHANGED, this.onScrollVisibilityChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_PINNED_ROW_DATA_CHANGED, this.onPinnedRowDataChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_HEADER_HEIGHT_CHANGED, this.onHeaderHeightChanged.bind(this));\n    }\n    addFocusListeners(elements) {\n        elements.forEach(element => {\n            this.addManagedListener(element, 'focusin', (e) => {\n                const { target } = e;\n                // element being focused is nested?\n                const isFocusedElementNested = isElementChildOfClass(target, 'ag-root', element);\n                element.classList.toggle('ag-has-focus', !isFocusedElementNested);\n            });\n            this.addManagedListener(element, 'focusout', (e) => {\n                const { target, relatedTarget } = e;\n                const gridContainRelatedTarget = element.contains(relatedTarget);\n                const isNestedRelatedTarget = isElementChildOfClass(relatedTarget, 'ag-root', element);\n                const isNestedTarget = isElementChildOfClass(target, 'ag-root', element);\n                // element losing focus belongs to a nested grid,\n                // it should not be handled here.\n                if (isNestedTarget) {\n                    return;\n                }\n                // the grid does not contain, or the focus element is within\n                // a nested grid\n                if (!gridContainRelatedTarget || isNestedRelatedTarget) {\n                    element.classList.remove('ag-has-focus');\n                }\n            });\n        });\n    }\n    // used by ColumnAnimationService\n    setColumnMovingCss(moving) {\n        this.comp.setColumnMovingCss(CSS_CLASS_COLUMN_MOVING, moving);\n    }\n    setCellTextSelection(selectable = false) {\n        this.comp.setCellSelectableCss(CSS_CLASS_CELL_SELECTABLE, selectable);\n    }\n    onScrollVisibilityChanged() {\n        const visible = this.scrollVisibleService.isVerticalScrollShowing();\n        this.setVerticalScrollPaddingVisible(visible);\n        this.setStickyTopWidth(visible);\n        const scrollbarWidth = visible ? (this.gridOptionsService.getScrollbarWidth() || 0) : 0;\n        const pad = isInvisibleScrollbar() ? 16 : 0;\n        const width = `calc(100% + ${scrollbarWidth + pad}px)`;\n        this.animationFrameService.requestAnimationFrame(() => this.comp.setBodyViewportWidth(width));\n    }\n    onGridColumnsChanged() {\n        const columns = this.columnModel.getAllGridColumns();\n        this.comp.setColumnCount(columns ? columns.length : 0);\n    }\n    // if we do not do this, then the user can select a pic in the grid (eg an image in a custom cell renderer)\n    // and then that will start the browser native drag n' drop, which messes up with our own drag and drop.\n    disableBrowserDragging() {\n        this.addManagedListener(this.eGridBody, 'dragstart', (event) => {\n            if (event.target instanceof HTMLImageElement) {\n                event.preventDefault();\n                return false;\n            }\n        });\n    }\n    addStopEditingWhenGridLosesFocus() {\n        if (!this.gridOptionsService.is('stopEditingWhenCellsLoseFocus')) {\n            return;\n        }\n        const focusOutListener = (event) => {\n            // this is the element the focus is moving to\n            const elementWithFocus = event.relatedTarget;\n            if (getTabIndex(elementWithFocus) === null) {\n                this.rowRenderer.stopEditing();\n                return;\n            }\n            let clickInsideGrid = \n            // see if click came from inside the viewports\n            viewports.some(viewport => viewport.contains(elementWithFocus))\n                // and also that it's not from a detail grid\n                && this.mouseEventService.isElementInThisGrid(elementWithFocus);\n            if (!clickInsideGrid) {\n                const popupService = this.popupService;\n                clickInsideGrid =\n                    popupService.getActivePopups().some(popup => popup.contains(elementWithFocus)) ||\n                        popupService.isElementWithinCustomPopup(elementWithFocus);\n            }\n            if (!clickInsideGrid) {\n                this.rowRenderer.stopEditing();\n            }\n        };\n        const viewports = [this.eBodyViewport, this.eBottom, this.eTop, this.eStickyTop];\n        viewports.forEach(viewport => this.addManagedListener(viewport, 'focusout', focusOutListener));\n    }\n    updateRowCount() {\n        const headerCount = this.headerNavigationService.getHeaderRowCount();\n        const rowCount = this.rowModel.isLastRowIndexKnown() ? this.rowModel.getRowCount() : -1;\n        const total = rowCount === -1 ? -1 : (headerCount + rowCount);\n        this.comp.setRowCount(total);\n    }\n    registerBodyViewportResizeListener(listener) {\n        this.comp.registerBodyViewportResizeListener(listener);\n    }\n    setVerticalScrollPaddingVisible(visible) {\n        const overflowY = visible ? 'scroll' : 'hidden';\n        this.comp.setPinnedTopBottomOverflowY(overflowY);\n    }\n    isVerticalScrollShowing() {\n        const show = this.gridOptionsService.is('alwaysShowVerticalScroll');\n        const cssClass = show ? CSS_CLASS_FORCE_VERTICAL_SCROLL : null;\n        const allowVerticalScroll = this.gridOptionsService.isDomLayout('normal');\n        this.comp.setAlwaysVerticalScrollClass(cssClass, show);\n        return show || (allowVerticalScroll && isVerticalScrollShowing(this.eBodyViewport));\n    }\n    setupRowAnimationCssClass() {\n        const listener = () => {\n            // we don't want to use row animation if scaling, as rows jump strangely as you scroll,\n            // when scaling and doing row animation.\n            const animateRows = this.gridOptionsService.isAnimateRows() && !this.rowContainerHeightService.isStretching();\n            const animateRowsCssClass = animateRows ? RowAnimationCssClasses.ANIMATION_ON : RowAnimationCssClasses.ANIMATION_OFF;\n            this.comp.setRowAnimationCssOnBodyViewport(animateRowsCssClass, animateRows);\n        };\n        listener();\n        this.addManagedListener(this.eventService, Events.EVENT_HEIGHT_SCALE_CHANGED, listener);\n        this.addManagedPropertyListener('animateRows', listener);\n    }\n    getGridBodyElement() {\n        return this.eGridBody;\n    }\n    addBodyViewportListener() {\n        // we want to listen for clicks directly on the eBodyViewport, so the user has a way of showing\n        // the context menu if no rows or columns are displayed, or user simply clicks outside of a cell\n        const listener = this.onBodyViewportContextMenu.bind(this);\n        this.addManagedListener(this.eBodyViewport, 'contextmenu', listener);\n        this.mockContextMenuForIPad(listener);\n        this.addManagedListener(this.eBodyViewport, 'wheel', this.onBodyViewportWheel.bind(this));\n        this.addManagedListener(this.eStickyTop, 'wheel', this.onStickyTopWheel.bind(this));\n        // allow mouseWheel on the Full Width Container to Scroll the Viewport\n        this.addFullWidthContainerWheelListener();\n    }\n    addFullWidthContainerWheelListener() {\n        const fullWidthContainer = this.eBodyViewport.querySelector('.ag-full-width-container');\n        const eCenterColsViewport = this.eBodyViewport.querySelector('.ag-center-cols-viewport');\n        if (fullWidthContainer && eCenterColsViewport) {\n            this.addManagedListener(fullWidthContainer, 'wheel', (e) => this.onFullWidthContainerWheel(e, eCenterColsViewport));\n        }\n    }\n    onFullWidthContainerWheel(e, eCenterColsViewport) {\n        if (!e.deltaX || Math.abs(e.deltaY) > Math.abs(e.deltaX)) {\n            return;\n        }\n        e.preventDefault();\n        eCenterColsViewport.scrollBy({ left: e.deltaX });\n    }\n    onBodyViewportContextMenu(mouseEvent, touch, touchEvent) {\n        if (!mouseEvent && !touchEvent) {\n            return;\n        }\n        if (this.gridOptionsService.is('preventDefaultOnContextMenu')) {\n            const event = (mouseEvent || touchEvent);\n            event.preventDefault();\n        }\n        const { target } = (mouseEvent || touch);\n        if (target === this.eBodyViewport || target === this.ctrlsService.getCenterRowContainerCtrl().getViewportElement()) {\n            // show it\n            if (!this.contextMenuFactory) {\n                return;\n            }\n            if (mouseEvent) {\n                this.contextMenuFactory.onContextMenu(mouseEvent, null, null, null, null, this.eGridBody);\n            }\n            else if (touchEvent) {\n                this.contextMenuFactory.onContextMenu(null, touchEvent, null, null, null, this.eGridBody);\n            }\n        }\n    }\n    mockContextMenuForIPad(listener) {\n        // we do NOT want this when not in iPad\n        if (!isIOSUserAgent()) {\n            return;\n        }\n        const touchListener = new TouchListener(this.eBodyViewport);\n        const longTapListener = (event) => {\n            listener(undefined, event.touchStart, event.touchEvent);\n        };\n        this.addManagedListener(touchListener, TouchListener.EVENT_LONG_TAP, longTapListener);\n        this.addDestroyFunc(() => touchListener.destroy());\n    }\n    onBodyViewportWheel(e) {\n        if (!this.gridOptionsService.is('suppressScrollWhenPopupsAreOpen')) {\n            return;\n        }\n        if (this.popupService.hasAnchoredPopup()) {\n            e.preventDefault();\n        }\n    }\n    onStickyTopWheel(e) {\n        e.preventDefault();\n        if (e.offsetY) {\n            this.scrollVertically(e.deltaY);\n        }\n    }\n    getGui() {\n        return this.eGridBody;\n    }\n    // called by rowDragFeature\n    scrollVertically(pixels) {\n        const oldScrollPosition = this.eBodyViewport.scrollTop;\n        this.bodyScrollFeature.setVerticalScrollPosition(oldScrollPosition + pixels);\n        return this.eBodyViewport.scrollTop - oldScrollPosition;\n    }\n    addRowDragListener() {\n        this.rowDragFeature = this.createManagedBean(new RowDragFeature(this.eBodyViewport));\n        this.dragAndDropService.addDropTarget(this.rowDragFeature);\n    }\n    getRowDragFeature() {\n        return this.rowDragFeature;\n    }\n    onPinnedRowDataChanged() {\n        this.setFloatingHeights();\n    }\n    setFloatingHeights() {\n        const { pinnedRowModel } = this;\n        let floatingTopHeight = pinnedRowModel.getPinnedTopTotalHeight();\n        if (floatingTopHeight) {\n            // adding 1px for cell bottom border\n            floatingTopHeight += 1;\n        }\n        let floatingBottomHeight = pinnedRowModel.getPinnedBottomTotalHeight();\n        if (floatingBottomHeight) {\n            // adding 1px for cell bottom border\n            floatingBottomHeight += 1;\n        }\n        this.comp.setTopHeight(floatingTopHeight);\n        this.comp.setBottomHeight(floatingBottomHeight);\n        this.comp.setTopDisplay(floatingTopHeight ? 'inherit' : 'none');\n        this.comp.setBottomDisplay(floatingBottomHeight ? 'inherit' : 'none');\n        this.setStickyTopOffsetTop();\n    }\n    setStickyTopHeight(height = 0) {\n        // console.log('setting sticky top height ' + height);\n        this.comp.setStickyTopHeight(`${height}px`);\n        this.stickyTopHeight = height;\n    }\n    getStickyTopHeight() {\n        return this.stickyTopHeight;\n    }\n    setStickyTopWidth(vScrollVisible) {\n        if (!vScrollVisible) {\n            this.comp.setStickyTopWidth('100%');\n        }\n        else {\n            const scrollbarWidth = this.gridOptionsService.getScrollbarWidth();\n            this.comp.setStickyTopWidth(`calc(100% - ${scrollbarWidth}px)`);\n        }\n    }\n    onHeaderHeightChanged() {\n        this.setStickyTopOffsetTop();\n    }\n    setStickyTopOffsetTop() {\n        const headerCtrl = this.ctrlsService.getGridHeaderCtrl();\n        const headerHeight = headerCtrl.getHeaderHeight();\n        const pinnedTopHeight = this.pinnedRowModel.getPinnedTopTotalHeight();\n        let height = 0;\n        if (headerHeight > 0) {\n            height += headerHeight + 1;\n        }\n        if (pinnedTopHeight > 0) {\n            height += pinnedTopHeight + 1;\n        }\n        this.comp.setStickyTopTop(`${height}px`);\n    }\n    // method will call itself if no available width. this covers if the grid\n    // isn't visible, but is just about to be visible.\n    sizeColumnsToFit(params, nextTimeout) {\n        const removeScrollWidth = this.isVerticalScrollShowing();\n        const scrollWidthToRemove = removeScrollWidth ? this.gridOptionsService.getScrollbarWidth() : 0;\n        // bodyViewportWidth should be calculated from eGridBody, not eBodyViewport\n        // because we change the width of the bodyViewport to hide the real browser scrollbar\n        const bodyViewportWidth = getInnerWidth(this.eGridBody);\n        const availableWidth = bodyViewportWidth - scrollWidthToRemove;\n        if (availableWidth > 0) {\n            this.columnModel.sizeColumnsToFit(availableWidth, \"sizeColumnsToFit\", false, params);\n            return;\n        }\n        if (nextTimeout === undefined) {\n            window.setTimeout(() => {\n                this.sizeColumnsToFit(params, 100);\n            }, 0);\n        }\n        else if (nextTimeout === 100) {\n            window.setTimeout(() => {\n                this.sizeColumnsToFit(params, 500);\n            }, 100);\n        }\n        else if (nextTimeout === 500) {\n            window.setTimeout(() => {\n                this.sizeColumnsToFit(params, -1);\n            }, 500);\n        }\n        else {\n            console.warn('AG Grid: tried to call sizeColumnsToFit() but the grid is coming back with ' +\n                'zero width, maybe the grid is not visible yet on the screen?');\n        }\n    }\n    // + rangeService\n    addScrollEventListener(listener) {\n        this.eBodyViewport.addEventListener('scroll', listener, { passive: true });\n    }\n    // + focusService\n    removeScrollEventListener(listener) {\n        this.eBodyViewport.removeEventListener('scroll', listener);\n    }\n}\n__decorate$1P([\n    Autowired('animationFrameService')\n], GridBodyCtrl.prototype, \"animationFrameService\", void 0);\n__decorate$1P([\n    Autowired('rowContainerHeightService')\n], GridBodyCtrl.prototype, \"rowContainerHeightService\", void 0);\n__decorate$1P([\n    Autowired('ctrlsService')\n], GridBodyCtrl.prototype, \"ctrlsService\", void 0);\n__decorate$1P([\n    Autowired('columnModel')\n], GridBodyCtrl.prototype, \"columnModel\", void 0);\n__decorate$1P([\n    Autowired('scrollVisibleService')\n], GridBodyCtrl.prototype, \"scrollVisibleService\", void 0);\n__decorate$1P([\n    Optional('contextMenuFactory')\n], GridBodyCtrl.prototype, \"contextMenuFactory\", void 0);\n__decorate$1P([\n    Autowired('headerNavigationService')\n], GridBodyCtrl.prototype, \"headerNavigationService\", void 0);\n__decorate$1P([\n    Autowired('dragAndDropService')\n], GridBodyCtrl.prototype, \"dragAndDropService\", void 0);\n__decorate$1P([\n    Autowired('pinnedRowModel')\n], GridBodyCtrl.prototype, \"pinnedRowModel\", void 0);\n__decorate$1P([\n    Autowired('rowRenderer')\n], GridBodyCtrl.prototype, \"rowRenderer\", void 0);\n__decorate$1P([\n    Autowired('popupService')\n], GridBodyCtrl.prototype, \"popupService\", void 0);\n__decorate$1P([\n    Autowired('mouseEventService')\n], GridBodyCtrl.prototype, \"mouseEventService\", void 0);\n__decorate$1P([\n    Autowired('rowModel')\n], GridBodyCtrl.prototype, \"rowModel\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar SelectionHandleType;\n(function (SelectionHandleType) {\n    SelectionHandleType[SelectionHandleType[\"FILL\"] = 0] = \"FILL\";\n    SelectionHandleType[SelectionHandleType[\"RANGE\"] = 1] = \"RANGE\";\n})(SelectionHandleType || (SelectionHandleType = {}));\nvar CellRangeType;\n(function (CellRangeType) {\n    CellRangeType[CellRangeType[\"VALUE\"] = 0] = \"VALUE\";\n    CellRangeType[CellRangeType[\"DIMENSION\"] = 1] = \"DIMENSION\";\n})(CellRangeType || (CellRangeType = {}));\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nconst CSS_CELL_RANGE_SELECTED = 'ag-cell-range-selected';\nconst CSS_CELL_RANGE_CHART = 'ag-cell-range-chart';\nconst CSS_CELL_RANGE_SINGLE_CELL = 'ag-cell-range-single-cell';\nconst CSS_CELL_RANGE_CHART_CATEGORY = 'ag-cell-range-chart-category';\nconst CSS_CELL_RANGE_HANDLE = 'ag-cell-range-handle';\nconst CSS_CELL_RANGE_TOP = 'ag-cell-range-top';\nconst CSS_CELL_RANGE_RIGHT = 'ag-cell-range-right';\nconst CSS_CELL_RANGE_BOTTOM = 'ag-cell-range-bottom';\nconst CSS_CELL_RANGE_LEFT = 'ag-cell-range-left';\nclass CellRangeFeature {\n    constructor(beans, ctrl) {\n        this.beans = beans;\n        this.cellCtrl = ctrl;\n    }\n    setComp(cellComp, eGui) {\n        this.cellComp = cellComp;\n        this.eGui = eGui;\n        this.onRangeSelectionChanged();\n    }\n    onRangeSelectionChanged() {\n        // when using reactUi, given UI is async, it's possible this method is called before the comp is registered\n        if (!this.cellComp) {\n            return;\n        }\n        this.rangeCount = this.beans.rangeService.getCellRangeCount(this.cellCtrl.getCellPosition());\n        this.hasChartRange = this.getHasChartRange();\n        this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_SELECTED, this.rangeCount !== 0);\n        this.cellComp.addOrRemoveCssClass(`${CSS_CELL_RANGE_SELECTED}-1`, this.rangeCount === 1);\n        this.cellComp.addOrRemoveCssClass(`${CSS_CELL_RANGE_SELECTED}-2`, this.rangeCount === 2);\n        this.cellComp.addOrRemoveCssClass(`${CSS_CELL_RANGE_SELECTED}-3`, this.rangeCount === 3);\n        this.cellComp.addOrRemoveCssClass(`${CSS_CELL_RANGE_SELECTED}-4`, this.rangeCount >= 4);\n        this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_CHART, this.hasChartRange);\n        setAriaSelected(this.eGui, this.rangeCount > 0 ? true : undefined);\n        this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_SINGLE_CELL, this.isSingleCell());\n        this.updateRangeBorders();\n        this.refreshHandle();\n    }\n    updateRangeBorders() {\n        const rangeBorders = this.getRangeBorders();\n        const isSingleCell = this.isSingleCell();\n        const isTop = !isSingleCell && rangeBorders.top;\n        const isRight = !isSingleCell && rangeBorders.right;\n        const isBottom = !isSingleCell && rangeBorders.bottom;\n        const isLeft = !isSingleCell && rangeBorders.left;\n        this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_TOP, isTop);\n        this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_RIGHT, isRight);\n        this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_BOTTOM, isBottom);\n        this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_LEFT, isLeft);\n    }\n    isSingleCell() {\n        const { rangeService } = this.beans;\n        return this.rangeCount === 1 && rangeService && !rangeService.isMoreThanOneCell();\n    }\n    getHasChartRange() {\n        const { rangeService } = this.beans;\n        if (!this.rangeCount || !rangeService) {\n            return false;\n        }\n        const cellRanges = rangeService.getCellRanges();\n        return cellRanges.length > 0 && cellRanges.every(range => includes([CellRangeType.DIMENSION, CellRangeType.VALUE], range.type));\n    }\n    updateRangeBordersIfRangeCount() {\n        // we only need to update range borders if we are in a range\n        if (this.rangeCount > 0) {\n            this.updateRangeBorders();\n            this.refreshHandle();\n        }\n    }\n    getRangeBorders() {\n        const isRtl = this.beans.gridOptionsService.is('enableRtl');\n        let top = false;\n        let right = false;\n        let bottom = false;\n        let left = false;\n        const thisCol = this.cellCtrl.getCellPosition().column;\n        const { rangeService, columnModel } = this.beans;\n        let leftCol;\n        let rightCol;\n        if (isRtl) {\n            leftCol = columnModel.getDisplayedColAfter(thisCol);\n            rightCol = columnModel.getDisplayedColBefore(thisCol);\n        }\n        else {\n            leftCol = columnModel.getDisplayedColBefore(thisCol);\n            rightCol = columnModel.getDisplayedColAfter(thisCol);\n        }\n        const ranges = rangeService.getCellRanges().filter(range => rangeService.isCellInSpecificRange(this.cellCtrl.getCellPosition(), range));\n        // this means we are the first column in the grid\n        if (!leftCol) {\n            left = true;\n        }\n        // this means we are the last column in the grid\n        if (!rightCol) {\n            right = true;\n        }\n        for (let i = 0; i < ranges.length; i++) {\n            if (top && right && bottom && left) {\n                break;\n            }\n            const range = ranges[i];\n            const startRow = rangeService.getRangeStartRow(range);\n            const endRow = rangeService.getRangeEndRow(range);\n            if (!top && this.beans.rowPositionUtils.sameRow(startRow, this.cellCtrl.getCellPosition())) {\n                top = true;\n            }\n            if (!bottom && this.beans.rowPositionUtils.sameRow(endRow, this.cellCtrl.getCellPosition())) {\n                bottom = true;\n            }\n            if (!left && leftCol && range.columns.indexOf(leftCol) < 0) {\n                left = true;\n            }\n            if (!right && rightCol && range.columns.indexOf(rightCol) < 0) {\n                right = true;\n            }\n        }\n        return { top, right, bottom, left };\n    }\n    refreshHandle() {\n        if (!this.beans.rangeService) {\n            return;\n        }\n        const shouldHaveSelectionHandle = this.shouldHaveSelectionHandle();\n        if (this.selectionHandle && !shouldHaveSelectionHandle) {\n            this.selectionHandle = this.beans.context.destroyBean(this.selectionHandle);\n        }\n        if (shouldHaveSelectionHandle) {\n            this.addSelectionHandle();\n        }\n        this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_HANDLE, !!this.selectionHandle);\n    }\n    shouldHaveSelectionHandle() {\n        const { gridOptionsService, rangeService } = this.beans;\n        const cellRanges = rangeService.getCellRanges();\n        const rangesLen = cellRanges.length;\n        if (this.rangeCount < 1 || rangesLen < 1) {\n            return false;\n        }\n        const cellRange = last(cellRanges);\n        const cellPosition = this.cellCtrl.getCellPosition();\n        const isFillHandleAvailable = gridOptionsService.is('enableFillHandle') && !this.cellCtrl.isSuppressFillHandle();\n        const isRangeHandleAvailable = gridOptionsService.is('enableRangeHandle');\n        let handleIsAvailable = rangesLen === 1 && !this.cellCtrl.isEditing() && (isFillHandleAvailable || isRangeHandleAvailable);\n        if (this.hasChartRange) {\n            const hasCategoryRange = cellRanges[0].type === CellRangeType.DIMENSION;\n            const isCategoryCell = hasCategoryRange && rangeService.isCellInSpecificRange(cellPosition, cellRanges[0]);\n            this.cellComp.addOrRemoveCssClass(CSS_CELL_RANGE_CHART_CATEGORY, isCategoryCell);\n            handleIsAvailable = cellRange.type === CellRangeType.VALUE;\n        }\n        return handleIsAvailable &&\n            cellRange.endRow != null &&\n            rangeService.isContiguousRange(cellRange) &&\n            rangeService.isBottomRightCell(cellRange, cellPosition);\n    }\n    addSelectionHandle() {\n        const { gridOptionsService, rangeService } = this.beans;\n        const cellRangeType = last(rangeService.getCellRanges()).type;\n        const selectionHandleFill = gridOptionsService.is('enableFillHandle') && missing(cellRangeType);\n        const type = selectionHandleFill ? SelectionHandleType.FILL : SelectionHandleType.RANGE;\n        if (this.selectionHandle && this.selectionHandle.getType() !== type) {\n            this.selectionHandle = this.beans.context.destroyBean(this.selectionHandle);\n        }\n        if (!this.selectionHandle) {\n            this.selectionHandle = this.beans.selectionHandleFactory.createSelectionHandle(type);\n        }\n        this.selectionHandle.refresh(this.cellCtrl);\n    }\n    destroy() {\n        this.beans.context.destroyBean(this.selectionHandle);\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n/**\n * Takes care of:\n *  #) Cell Width (including when doing cell spanning, which makes width cover many columns)\n *  #) Cell Height (when doing row span, otherwise we don't touch the height as it's just row height)\n *  #) Cell Left (the horizontal positioning of the cell, the vertical positioning is on the row)\n */\nclass CellPositionFeature extends BeanStub {\n    constructor(ctrl, beans) {\n        super();\n        this.cellCtrl = ctrl;\n        this.beans = beans;\n        this.column = ctrl.getColumn();\n        this.rowNode = ctrl.getRowNode();\n        this.setupColSpan();\n        this.setupRowSpan();\n    }\n    setupRowSpan() {\n        this.rowSpan = this.column.getRowSpan(this.rowNode);\n    }\n    setComp(eGui) {\n        this.eGui = eGui;\n        this.onLeftChanged();\n        this.onWidthChanged();\n        this.applyRowSpan();\n    }\n    onDisplayColumnsChanged() {\n        const colsSpanning = this.getColSpanningList();\n        if (!areEqual(this.colsSpanning, colsSpanning)) {\n            this.colsSpanning = colsSpanning;\n            this.onWidthChanged();\n            this.onLeftChanged(); // left changes when doing RTL\n        }\n    }\n    setupColSpan() {\n        // if no col span is active, then we don't set it up, as it would be wasteful of CPU\n        if (this.column.getColDef().colSpan == null) {\n            return;\n        }\n        this.colsSpanning = this.getColSpanningList();\n        // because we are col spanning, a reorder of the cols can change what cols we are spanning over\n        this.addManagedListener(this.beans.eventService, Events.EVENT_DISPLAYED_COLUMNS_CHANGED, this.onDisplayColumnsChanged.bind(this));\n        // because we are spanning over multiple cols, we check for width any time any cols width changes.\n        // this is expensive - really we should be explicitly checking only the cols we are spanning over\n        // instead of every col, however it would be tricky code to track the cols we are spanning over, so\n        // because hardly anyone will be using colSpan, am favouring this easier way for more maintainable code.\n        this.addManagedListener(this.beans.eventService, Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED, this.onWidthChanged.bind(this));\n    }\n    onWidthChanged() {\n        if (!this.eGui) {\n            return;\n        }\n        const width = this.getCellWidth();\n        this.eGui.style.width = `${width}px`;\n    }\n    getCellWidth() {\n        if (!this.colsSpanning) {\n            return this.column.getActualWidth();\n        }\n        return this.colsSpanning.reduce((width, col) => width + col.getActualWidth(), 0);\n    }\n    getColSpanningList() {\n        const colSpan = this.column.getColSpan(this.rowNode);\n        const colsSpanning = [];\n        // if just one col, the col span is just the column we are in\n        if (colSpan === 1) {\n            colsSpanning.push(this.column);\n        }\n        else {\n            let pointer = this.column;\n            const pinned = this.column.getPinned();\n            for (let i = 0; pointer && i < colSpan; i++) {\n                colsSpanning.push(pointer);\n                pointer = this.beans.columnModel.getDisplayedColAfter(pointer);\n                if (!pointer || missing(pointer)) {\n                    break;\n                }\n                // we do not allow col spanning to span outside of pinned areas\n                if (pinned !== pointer.getPinned()) {\n                    break;\n                }\n            }\n        }\n        return colsSpanning;\n    }\n    onLeftChanged() {\n        if (!this.eGui) {\n            return;\n        }\n        const left = this.modifyLeftForPrintLayout(this.getCellLeft());\n        this.eGui.style.left = left + 'px';\n    }\n    getCellLeft() {\n        let mostLeftCol;\n        if (this.beans.gridOptionsService.is('enableRtl') && this.colsSpanning) {\n            mostLeftCol = last(this.colsSpanning);\n        }\n        else {\n            mostLeftCol = this.column;\n        }\n        return mostLeftCol.getLeft();\n    }\n    modifyLeftForPrintLayout(leftPosition) {\n        if (!this.cellCtrl.isPrintLayout() || this.column.getPinned() === 'left') {\n            return leftPosition;\n        }\n        const leftWidth = this.beans.columnModel.getDisplayedColumnsLeftWidth();\n        if (this.column.getPinned() === 'right') {\n            const bodyWidth = this.beans.columnModel.getBodyContainerWidth();\n            return leftWidth + bodyWidth + (leftPosition || 0);\n        }\n        // is in body\n        return leftWidth + (leftPosition || 0);\n    }\n    applyRowSpan() {\n        if (this.rowSpan === 1) {\n            return;\n        }\n        const singleRowHeight = this.beans.gridOptionsService.getRowHeightAsNumber();\n        const totalRowHeight = singleRowHeight * this.rowSpan;\n        this.eGui.style.height = `${totalRowHeight}px`;\n        this.eGui.style.zIndex = '1';\n    }\n    // overriding to make public, as we don't dispose this bean via context\n    destroy() {\n        super.destroy();\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass CellCustomStyleFeature extends BeanStub {\n    constructor(ctrl, beans) {\n        super();\n        this.staticClasses = [];\n        this.cellCtrl = ctrl;\n        this.beans = beans;\n        this.column = ctrl.getColumn();\n        this.rowNode = ctrl.getRowNode();\n    }\n    setComp(comp) {\n        this.cellComp = comp;\n        this.applyUserStyles();\n        this.applyCellClassRules();\n        this.applyClassesFromColDef();\n    }\n    applyCellClassRules() {\n        const colDef = this.column.getColDef();\n        const cellClassParams = {\n            value: this.cellCtrl.getValue(),\n            data: this.rowNode.data,\n            node: this.rowNode,\n            colDef: colDef,\n            column: this.column,\n            rowIndex: this.rowNode.rowIndex,\n            api: this.beans.gridOptionsService.api,\n            columnApi: this.beans.gridOptionsService.columnApi,\n            context: this.beans.gridOptionsService.context\n        };\n        this.beans.stylingService.processClassRules(colDef.cellClassRules, cellClassParams, className => this.cellComp.addOrRemoveCssClass(className, true), className => this.cellComp.addOrRemoveCssClass(className, false));\n    }\n    applyUserStyles() {\n        const colDef = this.column.getColDef();\n        if (!colDef.cellStyle) {\n            return;\n        }\n        let styles;\n        if (typeof colDef.cellStyle === 'function') {\n            const cellStyleParams = {\n                column: this.column,\n                value: this.cellCtrl.getValue(),\n                colDef: colDef,\n                data: this.rowNode.data,\n                node: this.rowNode,\n                rowIndex: this.rowNode.rowIndex,\n                api: this.beans.gridOptionsService.api,\n                columnApi: this.beans.gridOptionsService.columnApi,\n                context: this.beans.gridOptionsService.context,\n            };\n            const cellStyleFunc = colDef.cellStyle;\n            styles = cellStyleFunc(cellStyleParams);\n        }\n        else {\n            styles = colDef.cellStyle;\n        }\n        if (styles) {\n            this.cellComp.setUserStyles(styles);\n        }\n    }\n    applyClassesFromColDef() {\n        const colDef = this.column.getColDef();\n        const cellClassParams = {\n            value: this.cellCtrl.getValue(),\n            data: this.rowNode.data,\n            node: this.rowNode,\n            column: this.column,\n            colDef: colDef,\n            rowIndex: this.rowNode.rowIndex,\n            api: this.beans.gridOptionsService.api,\n            columnApi: this.beans.gridOptionsService.columnApi,\n            context: this.beans.gridOptionsService.context\n        };\n        if (this.staticClasses.length) {\n            this.staticClasses.forEach(className => this.cellComp.addOrRemoveCssClass(className, false));\n        }\n        this.staticClasses = this.beans.stylingService.getStaticCellClasses(colDef, cellClassParams);\n        if (this.staticClasses.length) {\n            this.staticClasses.forEach(className => this.cellComp.addOrRemoveCssClass(className, true));\n        }\n    }\n    // overriding to make public, as we don't dispose this bean via context\n    destroy() {\n        super.destroy();\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass TooltipFeature extends BeanStub {\n    constructor(ctrl, beans) {\n        super();\n        this.ctrl = ctrl;\n        this.beans = beans;\n    }\n    setComp(comp) {\n        this.comp = comp;\n        this.setupTooltip();\n    }\n    setupTooltip() {\n        this.browserTooltips = this.beans.gridOptionsService.is('enableBrowserTooltips');\n        this.updateTooltipText();\n        if (this.browserTooltips) {\n            this.comp.setTitle(this.tooltip != null ? this.tooltip : undefined);\n        }\n        else {\n            this.createTooltipFeatureIfNeeded();\n        }\n    }\n    updateTooltipText() {\n        this.tooltip = this.ctrl.getTooltipValue();\n    }\n    createTooltipFeatureIfNeeded() {\n        if (this.genericTooltipFeature != null) {\n            return;\n        }\n        const parent = {\n            getTooltipParams: () => this.getTooltipParams(),\n            getGui: () => this.ctrl.getGui()\n        };\n        this.genericTooltipFeature = this.createManagedBean(new CustomTooltipFeature(parent), this.beans.context);\n    }\n    refreshToolTip() {\n        this.updateTooltipText();\n        if (this.browserTooltips) {\n            this.comp.setTitle(this.tooltip != null ? this.tooltip : undefined);\n        }\n    }\n    getTooltipParams() {\n        const ctrl = this.ctrl;\n        const column = ctrl.getColumn ? ctrl.getColumn() : undefined;\n        const colDef = ctrl.getColDef ? ctrl.getColDef() : undefined;\n        const rowNode = ctrl.getRowNode ? ctrl.getRowNode() : undefined;\n        return {\n            location: ctrl.getLocation(),\n            colDef: colDef,\n            column: column,\n            rowIndex: ctrl.getRowIndex ? ctrl.getRowIndex() : undefined,\n            node: rowNode,\n            data: rowNode ? rowNode.data : undefined,\n            value: this.getTooltipText(),\n            valueFormatted: ctrl.getValueFormatted ? ctrl.getValueFormatted() : undefined,\n        };\n    }\n    getTooltipText() {\n        return this.tooltip;\n    }\n    // overriding to make public, as we don't dispose this bean via context\n    destroy() {\n        super.destroy();\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1O = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/** Using the IoC has a slight performance consideration, which is no problem most of the\n * time, unless we are trashing objects - which is the case when scrolling and rowComp\n * and cellComp. So for performance reasons, RowComp and CellComp do not get autowired\n * with the IoC. Instead they get passed this object which is all the beans the RowComp\n * and CellComp need. Not autowiring all the cells gives performance improvement. */\nlet Beans = class Beans {\n    postConstruct() {\n        this.doingMasterDetail = this.gridOptionsService.isMasterDetail();\n        if (this.gridOptionsService.isRowModelType('clientSide')) {\n            this.clientSideRowModel = this.rowModel;\n        }\n        if (this.gridOptionsService.isRowModelType('serverSide')) {\n            this.serverSideRowModel = this.rowModel;\n        }\n    }\n};\n__decorate$1O([\n    Autowired('resizeObserverService')\n], Beans.prototype, \"resizeObserverService\", void 0);\n__decorate$1O([\n    Autowired('paginationProxy')\n], Beans.prototype, \"paginationProxy\", void 0);\n__decorate$1O([\n    Autowired('context')\n], Beans.prototype, \"context\", void 0);\n__decorate$1O([\n    Autowired('columnApi')\n], Beans.prototype, \"columnApi\", void 0);\n__decorate$1O([\n    Autowired('gridApi')\n], Beans.prototype, \"gridApi\", void 0);\n__decorate$1O([\n    Autowired('gridOptionsService')\n], Beans.prototype, \"gridOptionsService\", void 0);\n__decorate$1O([\n    Autowired('expressionService')\n], Beans.prototype, \"expressionService\", void 0);\n__decorate$1O([\n    Autowired('environment')\n], Beans.prototype, \"environment\", void 0);\n__decorate$1O([\n    Autowired('rowRenderer')\n], Beans.prototype, \"rowRenderer\", void 0);\n__decorate$1O([\n    Autowired('templateService')\n], Beans.prototype, \"templateService\", void 0);\n__decorate$1O([\n    Autowired('valueService')\n], Beans.prototype, \"valueService\", void 0);\n__decorate$1O([\n    Autowired('eventService')\n], Beans.prototype, \"eventService\", void 0);\n__decorate$1O([\n    Autowired('columnModel')\n], Beans.prototype, \"columnModel\", void 0);\n__decorate$1O([\n    Autowired('headerNavigationService')\n], Beans.prototype, \"headerNavigationService\", void 0);\n__decorate$1O([\n    Autowired('navigationService')\n], Beans.prototype, \"navigationService\", void 0);\n__decorate$1O([\n    Autowired('columnAnimationService')\n], Beans.prototype, \"columnAnimationService\", void 0);\n__decorate$1O([\n    Optional('rangeService')\n], Beans.prototype, \"rangeService\", void 0);\n__decorate$1O([\n    Autowired('focusService')\n], Beans.prototype, \"focusService\", void 0);\n__decorate$1O([\n    Optional('contextMenuFactory')\n], Beans.prototype, \"contextMenuFactory\", void 0);\n__decorate$1O([\n    Autowired('popupService')\n], Beans.prototype, \"popupService\", void 0);\n__decorate$1O([\n    Autowired('valueFormatterService')\n], Beans.prototype, \"valueFormatterService\", void 0);\n__decorate$1O([\n    Autowired('stylingService')\n], Beans.prototype, \"stylingService\", void 0);\n__decorate$1O([\n    Autowired('columnHoverService')\n], Beans.prototype, \"columnHoverService\", void 0);\n__decorate$1O([\n    Autowired('userComponentFactory')\n], Beans.prototype, \"userComponentFactory\", void 0);\n__decorate$1O([\n    Autowired('userComponentRegistry')\n], Beans.prototype, \"userComponentRegistry\", void 0);\n__decorate$1O([\n    Autowired('animationFrameService')\n], Beans.prototype, \"animationFrameService\", void 0);\n__decorate$1O([\n    Autowired('dragService')\n], Beans.prototype, \"dragService\", void 0);\n__decorate$1O([\n    Autowired('dragAndDropService')\n], Beans.prototype, \"dragAndDropService\", void 0);\n__decorate$1O([\n    Autowired('sortController')\n], Beans.prototype, \"sortController\", void 0);\n__decorate$1O([\n    Autowired('filterManager')\n], Beans.prototype, \"filterManager\", void 0);\n__decorate$1O([\n    Autowired('rowContainerHeightService')\n], Beans.prototype, \"rowContainerHeightService\", void 0);\n__decorate$1O([\n    Autowired('frameworkOverrides')\n], Beans.prototype, \"frameworkOverrides\", void 0);\n__decorate$1O([\n    Autowired('cellPositionUtils')\n], Beans.prototype, \"cellPositionUtils\", void 0);\n__decorate$1O([\n    Autowired('rowPositionUtils')\n], Beans.prototype, \"rowPositionUtils\", void 0);\n__decorate$1O([\n    Autowired('selectionService')\n], Beans.prototype, \"selectionService\", void 0);\n__decorate$1O([\n    Optional('selectionHandleFactory')\n], Beans.prototype, \"selectionHandleFactory\", void 0);\n__decorate$1O([\n    Autowired('rowCssClassCalculator')\n], Beans.prototype, \"rowCssClassCalculator\", void 0);\n__decorate$1O([\n    Autowired('rowModel')\n], Beans.prototype, \"rowModel\", void 0);\n__decorate$1O([\n    Autowired('ctrlsService')\n], Beans.prototype, \"ctrlsService\", void 0);\n__decorate$1O([\n    Autowired('ctrlsFactory')\n], Beans.prototype, \"ctrlsFactory\", void 0);\n__decorate$1O([\n    Autowired('agStackComponentsRegistry')\n], Beans.prototype, \"agStackComponentsRegistry\", void 0);\n__decorate$1O([\n    Autowired('valueCache')\n], Beans.prototype, \"valueCache\", void 0);\n__decorate$1O([\n    Autowired('rowNodeEventThrottle')\n], Beans.prototype, \"rowNodeEventThrottle\", void 0);\n__decorate$1O([\n    Autowired('localeService')\n], Beans.prototype, \"localeService\", void 0);\n__decorate$1O([\n    Autowired('valueParserService')\n], Beans.prototype, \"valueParserService\", void 0);\n__decorate$1O([\n    PostConstruct\n], Beans.prototype, \"postConstruct\", null);\nBeans = __decorate$1O([\n    Bean('beans')\n], Beans);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass CellMouseListenerFeature extends Beans {\n    constructor(ctrl, beans, column) {\n        super();\n        this.cellCtrl = ctrl;\n        this.beans = beans;\n        this.column = column;\n    }\n    onMouseEvent(eventName, mouseEvent) {\n        if (isStopPropagationForAgGrid(mouseEvent)) {\n            return;\n        }\n        switch (eventName) {\n            case 'click':\n                this.onCellClicked(mouseEvent);\n                break;\n            case 'mousedown':\n            case 'touchstart':\n                this.onMouseDown(mouseEvent);\n                break;\n            case 'dblclick':\n                this.onCellDoubleClicked(mouseEvent);\n                break;\n            case 'mouseout':\n                this.onMouseOut(mouseEvent);\n                break;\n            case 'mouseover':\n                this.onMouseOver(mouseEvent);\n                break;\n        }\n    }\n    onCellClicked(mouseEvent) {\n        // iPad doesn't have double click - so we need to mimic it to enable editing for iPad.\n        if (this.isDoubleClickOnIPad()) {\n            this.onCellDoubleClicked(mouseEvent);\n            mouseEvent.preventDefault(); // if we don't do this, then iPad zooms in\n            return;\n        }\n        const { eventService, rangeService, gridOptionsService } = this.beans;\n        const isMultiKey = mouseEvent.ctrlKey || mouseEvent.metaKey;\n        if (rangeService && isMultiKey) {\n            // the mousedown event has created the range already, so we only intersect if there is more than one\n            // range on this cell\n            if (rangeService.getCellRangeCount(this.cellCtrl.getCellPosition()) > 1) {\n                rangeService.intersectLastRange(true);\n            }\n        }\n        const cellClickedEvent = this.cellCtrl.createEvent(mouseEvent, Events.EVENT_CELL_CLICKED);\n        eventService.dispatchEvent(cellClickedEvent);\n        const colDef = this.column.getColDef();\n        if (colDef.onCellClicked) {\n            // to make callback async, do in a timeout\n            window.setTimeout(() => colDef.onCellClicked(cellClickedEvent), 0);\n        }\n        const editOnSingleClick = (gridOptionsService.is('singleClickEdit') || colDef.singleClickEdit)\n            && !gridOptionsService.is('suppressClickEdit');\n        if (editOnSingleClick) {\n            this.cellCtrl.startRowOrCellEdit();\n        }\n    }\n    // returns true if on iPad and this is second 'click' event in 200ms\n    isDoubleClickOnIPad() {\n        if (!isIOSUserAgent() || isEventSupported('dblclick')) {\n            return false;\n        }\n        const nowMillis = new Date().getTime();\n        const res = nowMillis - this.lastIPadMouseClickEvent < 200;\n        this.lastIPadMouseClickEvent = nowMillis;\n        return res;\n    }\n    onCellDoubleClicked(mouseEvent) {\n        const colDef = this.column.getColDef();\n        // always dispatch event to eventService\n        const cellDoubleClickedEvent = this.cellCtrl.createEvent(mouseEvent, Events.EVENT_CELL_DOUBLE_CLICKED);\n        this.beans.eventService.dispatchEvent(cellDoubleClickedEvent);\n        // check if colDef also wants to handle event\n        if (typeof colDef.onCellDoubleClicked === 'function') {\n            // to make the callback async, do in a timeout\n            window.setTimeout(() => colDef.onCellDoubleClicked(cellDoubleClickedEvent), 0);\n        }\n        const editOnDoubleClick = !this.beans.gridOptionsService.is('singleClickEdit')\n            && !this.beans.gridOptionsService.is('suppressClickEdit');\n        if (editOnDoubleClick) {\n            this.cellCtrl.startRowOrCellEdit(null, mouseEvent);\n        }\n    }\n    onMouseDown(mouseEvent) {\n        const { ctrlKey, metaKey, shiftKey } = mouseEvent;\n        const target = mouseEvent.target;\n        const { eventService, rangeService } = this.beans;\n        // do not change the range for right-clicks inside an existing range\n        if (this.isRightClickInExistingRange(mouseEvent)) {\n            return;\n        }\n        const ranges = rangeService && rangeService.getCellRanges().length != 0;\n        if (!shiftKey || !ranges) {\n            // We only need to pass true to focusCell when the browser is Safari and we are trying\n            // to focus the cell itself. This should never be true if the mousedown was triggered\n            // due to a click on a cell editor for example.\n            const forceBrowserFocus = (isBrowserSafari()) && !this.cellCtrl.isEditing() && !isFocusableFormField(target);\n            this.cellCtrl.focusCell(forceBrowserFocus);\n        }\n        // if shift clicking, and a range exists, we keep the focus on the cell that started the\n        // range as the user then changes the range selection.\n        if (shiftKey && ranges) {\n            // this stops the cell from getting focused\n            mouseEvent.preventDefault();\n        }\n        // if we are clicking on a checkbox, we need to make sure the cell wrapping that checkbox\n        // is focused but we don't want to change the range selection, so return here.\n        if (this.containsWidget(target)) {\n            return;\n        }\n        if (rangeService) {\n            const thisCell = this.cellCtrl.getCellPosition();\n            if (shiftKey) {\n                rangeService.extendLatestRangeToCell(thisCell);\n            }\n            else {\n                const isMultiKey = ctrlKey || metaKey;\n                rangeService.setRangeToCell(thisCell, isMultiKey);\n            }\n        }\n        eventService.dispatchEvent(this.cellCtrl.createEvent(mouseEvent, Events.EVENT_CELL_MOUSE_DOWN));\n    }\n    isRightClickInExistingRange(mouseEvent) {\n        const { rangeService } = this.beans;\n        if (rangeService) {\n            const cellInRange = rangeService.isCellInAnyRange(this.cellCtrl.getCellPosition());\n            if (cellInRange && mouseEvent.button === 2) {\n                return true;\n            }\n        }\n        return false;\n    }\n    containsWidget(target) {\n        return isElementChildOfClass(target, 'ag-selection-checkbox', 3);\n    }\n    onMouseOut(mouseEvent) {\n        if (this.mouseStayingInsideCell(mouseEvent)) {\n            return;\n        }\n        const cellMouseOutEvent = this.cellCtrl.createEvent(mouseEvent, Events.EVENT_CELL_MOUSE_OUT);\n        this.beans.eventService.dispatchEvent(cellMouseOutEvent);\n        this.beans.columnHoverService.clearMouseOver();\n    }\n    onMouseOver(mouseEvent) {\n        if (this.mouseStayingInsideCell(mouseEvent)) {\n            return;\n        }\n        const cellMouseOverEvent = this.cellCtrl.createEvent(mouseEvent, Events.EVENT_CELL_MOUSE_OVER);\n        this.beans.eventService.dispatchEvent(cellMouseOverEvent);\n        this.beans.columnHoverService.setMouseOver([this.column]);\n    }\n    mouseStayingInsideCell(e) {\n        if (!e.target || !e.relatedTarget) {\n            return false;\n        }\n        const eGui = this.cellCtrl.getGui();\n        const cellContainsTarget = eGui.contains(e.target);\n        const cellContainsRelatedTarget = eGui.contains(e.relatedTarget);\n        return cellContainsTarget && cellContainsRelatedTarget;\n    }\n    destroy() {\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass CellKeyboardListenerFeature extends BeanStub {\n    constructor(ctrl, beans, column, rowNode, rowCtrl) {\n        super();\n        this.cellCtrl = ctrl;\n        this.beans = beans;\n        this.rowNode = rowNode;\n        this.rowCtrl = rowCtrl;\n    }\n    setComp(eGui) {\n        this.eGui = eGui;\n    }\n    onKeyDown(event) {\n        const key = event.key;\n        switch (key) {\n            case KeyCode.ENTER:\n                this.onEnterKeyDown(event);\n                break;\n            case KeyCode.F2:\n                this.onF2KeyDown(event);\n                break;\n            case KeyCode.ESCAPE:\n                this.onEscapeKeyDown(event);\n                break;\n            case KeyCode.TAB:\n                this.onTabKeyDown(event);\n                break;\n            case KeyCode.BACKSPACE:\n            case KeyCode.DELETE:\n                this.onBackspaceOrDeleteKeyDown(key, event);\n                break;\n            case KeyCode.DOWN:\n            case KeyCode.UP:\n            case KeyCode.RIGHT:\n            case KeyCode.LEFT:\n                this.onNavigationKeyDown(event, key);\n                break;\n        }\n    }\n    onNavigationKeyDown(event, key) {\n        if (this.cellCtrl.isEditing()) {\n            return;\n        }\n        if (event.shiftKey && this.cellCtrl.isRangeSelectionEnabled()) {\n            this.onShiftRangeSelect(event);\n        }\n        else {\n            this.beans.navigationService.navigateToNextCell(event, key, this.cellCtrl.getCellPosition(), true);\n        }\n        // if we don't prevent default, the grid will scroll with the navigation keys\n        event.preventDefault();\n    }\n    onShiftRangeSelect(event) {\n        if (!this.beans.rangeService) {\n            return;\n        }\n        const endCell = this.beans.rangeService.extendLatestRangeInDirection(event);\n        if (endCell) {\n            this.beans.navigationService.ensureCellVisible(endCell);\n        }\n    }\n    onTabKeyDown(event) {\n        this.beans.navigationService.onTabKeyDown(this.cellCtrl, event);\n    }\n    onBackspaceOrDeleteKeyDown(key, event) {\n        const { cellCtrl, beans, rowNode } = this;\n        const { gridOptionsService, rangeService, eventService } = beans;\n        if (cellCtrl.isEditing()) {\n            return;\n        }\n        eventService.dispatchEvent({ type: Events.EVENT_KEY_SHORTCUT_CHANGED_CELL_START });\n        if (isDeleteKey(key, gridOptionsService.is('enableCellEditingOnBackspace'))) {\n            if (rangeService && gridOptionsService.isEnableRangeSelection()) {\n                rangeService.clearCellRangeCellValues({ dispatchWrapperEvents: true, wrapperEventSource: 'deleteKey' });\n            }\n            else if (cellCtrl.isCellEditable()) {\n                rowNode.setDataValue(cellCtrl.getColumn(), null, 'cellClear');\n            }\n        }\n        else {\n            cellCtrl.startRowOrCellEdit(key, event);\n        }\n        eventService.dispatchEvent({ type: Events.EVENT_KEY_SHORTCUT_CHANGED_CELL_END });\n    }\n    onEnterKeyDown(e) {\n        if (this.cellCtrl.isEditing() || this.rowCtrl.isEditing()) {\n            this.cellCtrl.stopEditingAndFocus(false, e.shiftKey);\n        }\n        else {\n            if (this.beans.gridOptionsService.is('enterNavigatesVertically')) {\n                const key = e.shiftKey ? KeyCode.UP : KeyCode.DOWN;\n                this.beans.navigationService.navigateToNextCell(null, key, this.cellCtrl.getCellPosition(), false);\n            }\n            else {\n                this.cellCtrl.startRowOrCellEdit(KeyCode.ENTER, e);\n                if (this.cellCtrl.isEditing()) {\n                    // if we started editing, then we need to prevent default, otherwise the Enter action can get\n                    // applied to the cell editor. this happened, for example, with largeTextCellEditor where not\n                    // preventing default results in a 'new line' character getting inserted in the text area\n                    // when the editing was started\n                    e.preventDefault();\n                }\n            }\n        }\n    }\n    onF2KeyDown(event) {\n        if (!this.cellCtrl.isEditing()) {\n            this.cellCtrl.startRowOrCellEdit(KeyCode.F2, event);\n        }\n    }\n    onEscapeKeyDown(event) {\n        if (this.cellCtrl.isEditing()) {\n            this.cellCtrl.stopRowOrCellEdit(true);\n            this.cellCtrl.focusCell(true);\n        }\n    }\n    processCharacter(event) {\n        // check this, in case focus is on a (for example) a text field inside the cell,\n        // in which cse we should not be listening for these key pressed\n        const eventTarget = event.target;\n        const eventOnChildComponent = eventTarget !== this.eGui;\n        if (eventOnChildComponent || this.cellCtrl.isEditing()) {\n            return;\n        }\n        const key = event.key;\n        if (key === ' ') {\n            this.onSpaceKeyDown(event);\n        }\n        else {\n            this.cellCtrl.startRowOrCellEdit(key, event);\n            // if we don't prevent default, then the event also gets applied to the text field\n            // (at least when doing the default editor), but we need to allow the editor to decide\n            // what it wants to do. we only do this IF editing was started - otherwise it messes\n            // up when the use is not doing editing, but using rendering with text fields in cellRenderer\n            // (as it would block the the user from typing into text fields).\n            event.preventDefault();\n        }\n    }\n    onSpaceKeyDown(event) {\n        const { gridOptionsService } = this.beans;\n        if (!this.cellCtrl.isEditing() && gridOptionsService.isRowSelection()) {\n            const currentSelection = this.rowNode.isSelected();\n            const newSelection = !currentSelection;\n            if (newSelection || !gridOptionsService.is('suppressRowDeselection')) {\n                const groupSelectsFiltered = this.beans.gridOptionsService.is('groupSelectsFiltered');\n                const updatedCount = this.rowNode.setSelectedParams({\n                    newValue: newSelection,\n                    rangeSelect: event.shiftKey,\n                    groupSelectsFiltered: groupSelectsFiltered,\n                    event,\n                    source: 'spaceKey',\n                });\n                if (currentSelection === undefined && updatedCount === 0) {\n                    this.rowNode.setSelectedParams({\n                        newValue: false,\n                        rangeSelect: event.shiftKey,\n                        groupSelectsFiltered: groupSelectsFiltered,\n                        event,\n                        source: 'spaceKey',\n                    });\n                }\n            }\n        }\n        // prevent default as space key, by default, moves browser scroll down\n        event.preventDefault();\n    }\n    destroy() {\n        super.destroy();\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1N = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass DndSourceComp extends Component {\n    constructor(rowNode, column, eCell) {\n        super(/* html */ `<div class=\"ag-drag-handle ag-row-drag\" draggable=\"true\"></div>`);\n        this.rowNode = rowNode;\n        this.column = column;\n        this.eCell = eCell;\n    }\n    postConstruct() {\n        const eGui = this.getGui();\n        eGui.appendChild(createIconNoSpan('rowDrag', this.gridOptionsService, null));\n        // we need to stop the event propagation here to avoid starting a range selection while dragging\n        this.addGuiEventListener('mousedown', (e) => {\n            e.stopPropagation();\n        });\n        this.addDragSource();\n        this.checkVisibility();\n    }\n    addDragSource() {\n        this.addGuiEventListener('dragstart', this.onDragStart.bind(this));\n    }\n    onDragStart(dragEvent) {\n        const providedOnRowDrag = this.column.getColDef().dndSourceOnRowDrag;\n        dragEvent.dataTransfer.setDragImage(this.eCell, 0, 0);\n        // default behaviour is to convert data to json and set into drag component\n        const defaultOnRowDrag = () => {\n            try {\n                const jsonData = JSON.stringify(this.rowNode.data);\n                dragEvent.dataTransfer.setData('application/json', jsonData);\n                dragEvent.dataTransfer.setData('text/plain', jsonData);\n            }\n            catch (e) {\n                // if we cannot convert the data to json, then we do not set the type\n            }\n        };\n        if (providedOnRowDrag) {\n            const params = {\n                rowNode: this.rowNode, dragEvent: dragEvent,\n                api: this.gridOptionsService.api,\n                columnApi: this.gridOptionsService.columnApi,\n                context: this.gridOptionsService.context\n            };\n            providedOnRowDrag(params);\n        }\n        else {\n            defaultOnRowDrag();\n        }\n    }\n    checkVisibility() {\n        const visible = this.column.isDndSource(this.rowNode);\n        this.setDisplayed(visible);\n    }\n}\n__decorate$1N([\n    PostConstruct\n], DndSourceComp.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nconst CSS_CELL = 'ag-cell';\nconst CSS_AUTO_HEIGHT = 'ag-cell-auto-height';\nconst CSS_NORMAL_HEIGHT = 'ag-cell-normal-height';\nconst CSS_CELL_FOCUS = 'ag-cell-focus';\nconst CSS_CELL_FIRST_RIGHT_PINNED = 'ag-cell-first-right-pinned';\nconst CSS_CELL_LAST_LEFT_PINNED = 'ag-cell-last-left-pinned';\nconst CSS_CELL_NOT_INLINE_EDITING = 'ag-cell-not-inline-editing';\nconst CSS_COLUMN_HOVER = 'ag-column-hover';\nconst CSS_CELL_WRAP_TEXT = 'ag-cell-wrap-text';\nlet instanceIdSequence$3 = 0;\nclass CellCtrl extends BeanStub {\n    constructor(column, rowNode, beans, rowCtrl) {\n        super();\n        this.cellRangeFeature = null;\n        this.cellPositionFeature = null;\n        this.cellCustomStyleFeature = null;\n        this.tooltipFeature = null;\n        this.cellMouseListenerFeature = null;\n        this.cellKeyboardListenerFeature = null;\n        this.suppressRefreshCell = false;\n        this.onCellCompAttachedFuncs = [];\n        this.column = column;\n        this.rowNode = rowNode;\n        this.beans = beans;\n        this.rowCtrl = rowCtrl;\n        // unique id to this instance, including the column ID to help with debugging in React as it's used in 'key'\n        this.instanceId = column.getId() + '-' + instanceIdSequence$3++;\n        this.createCellPosition();\n        this.addFeatures();\n    }\n    addFeatures() {\n        this.cellPositionFeature = new CellPositionFeature(this, this.beans);\n        this.addDestroyFunc(() => { var _a; (_a = this.cellPositionFeature) === null || _a === void 0 ? void 0 : _a.destroy(); this.cellPositionFeature = null; });\n        this.cellCustomStyleFeature = new CellCustomStyleFeature(this, this.beans);\n        this.addDestroyFunc(() => { var _a; (_a = this.cellCustomStyleFeature) === null || _a === void 0 ? void 0 : _a.destroy(); this.cellCustomStyleFeature = null; });\n        this.cellMouseListenerFeature = new CellMouseListenerFeature(this, this.beans, this.column);\n        this.addDestroyFunc(() => { var _a; (_a = this.cellMouseListenerFeature) === null || _a === void 0 ? void 0 : _a.destroy(); this.cellMouseListenerFeature = null; });\n        this.cellKeyboardListenerFeature = new CellKeyboardListenerFeature(this, this.beans, this.column, this.rowNode, this.rowCtrl);\n        this.addDestroyFunc(() => { var _a; (_a = this.cellKeyboardListenerFeature) === null || _a === void 0 ? void 0 : _a.destroy(); this.cellKeyboardListenerFeature = null; });\n        const rangeSelectionEnabled = this.beans.rangeService && this.beans.gridOptionsService.isEnableRangeSelection();\n        if (rangeSelectionEnabled) {\n            this.cellRangeFeature = new CellRangeFeature(this.beans, this);\n            this.addDestroyFunc(() => { var _a; (_a = this.cellRangeFeature) === null || _a === void 0 ? void 0 : _a.destroy(); this.cellRangeFeature = null; });\n        }\n        if (this.column.isTooltipEnabled()) {\n            this.addTooltipFeature();\n        }\n    }\n    addTooltipFeature() {\n        const getTooltipValue = () => {\n            const colDef = this.column.getColDef();\n            const data = this.rowNode.data;\n            if (colDef.tooltipField && exists(data)) {\n                return getValueUsingField(data, colDef.tooltipField, this.column.isTooltipFieldContainsDots());\n            }\n            const valueGetter = colDef.tooltipValueGetter;\n            if (valueGetter) {\n                return valueGetter({\n                    location: 'cell',\n                    api: this.beans.gridOptionsService.api,\n                    columnApi: this.beans.gridOptionsService.columnApi,\n                    context: this.beans.gridOptionsService.context,\n                    colDef: this.column.getColDef(),\n                    column: this.column,\n                    rowIndex: this.cellPosition.rowIndex,\n                    node: this.rowNode,\n                    data: this.rowNode.data,\n                    value: this.value,\n                    valueFormatted: this.valueFormatted,\n                });\n            }\n            return null;\n        };\n        const tooltipCtrl = {\n            getColumn: () => this.column,\n            getColDef: () => this.column.getColDef(),\n            getRowIndex: () => this.cellPosition.rowIndex,\n            getRowNode: () => this.rowNode,\n            getGui: () => this.getGui(),\n            getLocation: () => 'cell',\n            getTooltipValue: getTooltipValue,\n            // this makes no sense, why is the cell formatted value passed to the tooltip???\n            getValueFormatted: () => this.valueFormatted\n        };\n        this.tooltipFeature = new TooltipFeature(tooltipCtrl, this.beans);\n        this.addDestroyFunc(() => { var _a; (_a = this.tooltipFeature) === null || _a === void 0 ? void 0 : _a.destroy(); this.tooltipFeature = null; });\n    }\n    setComp(comp, eGui, eCellWrapper, printLayout, startEditing) {\n        var _a, _b, _c, _d;\n        this.cellComp = comp;\n        this.eGui = eGui;\n        this.printLayout = printLayout;\n        // we force to make sure formatter gets called at least once,\n        // even if value has not changed (is is undefined)\n        this.updateAndFormatValue(true);\n        this.addDomData();\n        this.onCellFocused();\n        this.applyStaticCssClasses();\n        this.setWrapText();\n        this.onFirstRightPinnedChanged();\n        this.onLastLeftPinnedChanged();\n        this.onColumnHover();\n        this.setupControlComps();\n        if (eCellWrapper) {\n            this.setupAutoHeight(eCellWrapper);\n        }\n        this.setAriaColIndex();\n        if (!this.beans.gridOptionsService.is('suppressCellFocus')) {\n            this.cellComp.setTabIndex(-1);\n        }\n        const colIdSanitised = escapeString(this.column.getId());\n        this.cellComp.setColId(colIdSanitised);\n        this.cellComp.setRole('gridcell');\n        (_a = this.cellPositionFeature) === null || _a === void 0 ? void 0 : _a.setComp(eGui);\n        (_b = this.cellCustomStyleFeature) === null || _b === void 0 ? void 0 : _b.setComp(comp);\n        (_c = this.tooltipFeature) === null || _c === void 0 ? void 0 : _c.setComp(comp);\n        (_d = this.cellKeyboardListenerFeature) === null || _d === void 0 ? void 0 : _d.setComp(this.eGui);\n        if (this.cellRangeFeature) {\n            this.cellRangeFeature.setComp(comp, eGui);\n        }\n        if (startEditing && this.isCellEditable()) {\n            this.startEditing();\n        }\n        else {\n            this.showValue();\n        }\n        if (this.onCellCompAttachedFuncs.length) {\n            this.onCellCompAttachedFuncs.forEach(func => func());\n            this.onCellCompAttachedFuncs = [];\n        }\n    }\n    setupAutoHeight(eCellWrapper) {\n        if (!this.column.isAutoHeight()) {\n            return;\n        }\n        const eParentCell = eCellWrapper.parentElement;\n        // taking minRowHeight from getRowHeightForNode means the getRowHeight() callback is used,\n        // thus allowing different min heights for different rows.\n        const minRowHeight = this.beans.gridOptionsService.getRowHeightForNode(this.rowNode).height;\n        const measureHeight = (timesCalled) => {\n            if (this.editing) {\n                return;\n            }\n            // because of the retry's below, it's possible the retry's go beyond\n            // the rows life.\n            if (!this.isAlive()) {\n                return;\n            }\n            const { paddingTop, paddingBottom, borderBottomWidth, borderTopWidth } = getElementSize(eParentCell);\n            const extraHeight = paddingTop + paddingBottom + borderBottomWidth + borderTopWidth;\n            const wrapperHeight = eCellWrapper.offsetHeight;\n            const autoHeight = wrapperHeight + extraHeight;\n            if (timesCalled < 5) {\n                // if not in doc yet, means framework not yet inserted, so wait for next VM turn,\n                // maybe it will be ready next VM turn\n                const doc = this.beans.gridOptionsService.getDocument();\n                const notYetInDom = !doc || !doc.contains(eCellWrapper);\n                // this happens in React, where React hasn't put any content in. we say 'possibly'\n                // as a) may not be React and b) the cell could be empty anyway\n                const possiblyNoContentYet = autoHeight == 0;\n                if (notYetInDom || possiblyNoContentYet) {\n                    this.beans.frameworkOverrides.setTimeout(() => measureHeight(timesCalled + 1), 0);\n                    return;\n                }\n            }\n            const newHeight = Math.max(autoHeight, minRowHeight);\n            this.rowNode.setRowAutoHeight(newHeight, this.column);\n        };\n        const listener = () => measureHeight(0);\n        // do once to set size in case size doesn't change, common when cell is blank\n        listener();\n        const destroyResizeObserver = this.beans.resizeObserverService.observeResize(eCellWrapper, listener);\n        this.addDestroyFunc(() => {\n            destroyResizeObserver();\n            this.rowNode.setRowAutoHeight(undefined, this.column);\n        });\n    }\n    getInstanceId() {\n        return this.instanceId;\n    }\n    showValue(forceNewCellRendererInstance = false) {\n        const valueToDisplay = this.valueFormatted != null ? this.valueFormatted : this.value;\n        const params = this.createCellRendererParams();\n        const compDetails = this.beans.userComponentFactory.getCellRendererDetails(this.column.getColDef(), params);\n        this.cellComp.setRenderDetails(compDetails, valueToDisplay, forceNewCellRendererInstance);\n        this.refreshHandle();\n    }\n    setupControlComps() {\n        const colDef = this.column.getColDef();\n        this.includeSelection = this.isIncludeControl(colDef.checkboxSelection);\n        this.includeRowDrag = this.isIncludeControl(colDef.rowDrag);\n        this.includeDndSource = this.isIncludeControl(colDef.dndSource);\n        this.cellComp.setIncludeSelection(this.includeSelection);\n        this.cellComp.setIncludeDndSource(this.includeDndSource);\n        this.cellComp.setIncludeRowDrag(this.includeRowDrag);\n    }\n    isForceWrapper() {\n        // text selection requires the value to be wrapped in another element\n        const forceWrapper = this.beans.gridOptionsService.is('enableCellTextSelection') || this.column.isAutoHeight();\n        return forceWrapper;\n    }\n    isIncludeControl(value) {\n        const rowNodePinned = this.rowNode.rowPinned != null;\n        const isFunc = typeof value === 'function';\n        const res = rowNodePinned ? false : isFunc || value === true;\n        return res;\n    }\n    refreshShouldDestroy() {\n        const colDef = this.column.getColDef();\n        const selectionChanged = this.includeSelection != this.isIncludeControl(colDef.checkboxSelection);\n        const rowDragChanged = this.includeRowDrag != this.isIncludeControl(colDef.rowDrag);\n        const dndSourceChanged = this.includeDndSource != this.isIncludeControl(colDef.dndSource);\n        return selectionChanged || rowDragChanged || dndSourceChanged;\n    }\n    // either called internally if single cell editing, or called by rowRenderer if row editing\n    startEditing(key = null, cellStartedEdit = false, event = null) {\n        if (!this.isCellEditable() || this.editing) {\n            return;\n        }\n        // because of async in React, the cellComp may not be set yet, if no cellComp then we are\n        // yet to initialise the cell, so we re-schedule this operation for when celLComp is attached\n        if (!this.cellComp) {\n            this.onCellCompAttachedFuncs.push(() => { this.startEditing(key, cellStartedEdit, event); });\n            return;\n        }\n        const editorParams = this.createCellEditorParams(key, cellStartedEdit);\n        const colDef = this.column.getColDef();\n        const compDetails = this.beans.userComponentFactory.getCellEditorDetails(colDef, editorParams);\n        // if cellEditorSelector was used, we give preference to popup and popupPosition from the selector\n        const popup = (compDetails === null || compDetails === void 0 ? void 0 : compDetails.popupFromSelector) != null ? compDetails.popupFromSelector : !!colDef.cellEditorPopup;\n        const position = (compDetails === null || compDetails === void 0 ? void 0 : compDetails.popupPositionFromSelector) != null ? compDetails.popupPositionFromSelector : colDef.cellEditorPopupPosition;\n        this.setEditing(true);\n        this.cellComp.setEditDetails(compDetails, popup, position);\n        const e = this.createEvent(event, Events.EVENT_CELL_EDITING_STARTED);\n        this.beans.eventService.dispatchEvent(e);\n    }\n    setEditing(editing) {\n        if (this.editing === editing) {\n            return;\n        }\n        this.editing = editing;\n        this.refreshHandle();\n    }\n    // pass in 'true' to cancel the editing.\n    stopRowOrCellEdit(cancel = false) {\n        if (this.beans.gridOptionsService.get('editType') === 'fullRow') {\n            this.rowCtrl.stopRowEditing(cancel);\n        }\n        else {\n            this.stopEditing(cancel);\n        }\n    }\n    onPopupEditorClosed() {\n        if (!this.isEditing()) {\n            return;\n        }\n        // note: this happens because of a click outside of the grid or if the popupEditor\n        // is closed with `Escape` key. if another cell was clicked, then the editing will\n        // have already stopped and returned on the conditional above.\n        this.stopEditingAndFocus();\n    }\n    takeValueFromCellEditor(cancel) {\n        const noValueResult = { newValueExists: false };\n        if (cancel) {\n            return noValueResult;\n        }\n        const cellEditor = this.cellComp.getCellEditor();\n        if (!cellEditor) {\n            return noValueResult;\n        }\n        const userWantsToCancel = cellEditor.isCancelAfterEnd && cellEditor.isCancelAfterEnd();\n        if (userWantsToCancel) {\n            return noValueResult;\n        }\n        const newValue = cellEditor.getValue();\n        return {\n            newValue: newValue,\n            newValueExists: true\n        };\n    }\n    /**\n     * @returns `True` if the value changes, otherwise `False`.\n     */\n    saveNewValue(oldValue, newValue) {\n        if (newValue === oldValue) {\n            return false;\n        }\n        // we suppressRefreshCell because the call to rowNode.setDataValue() results in change detection\n        // getting triggered, which results in all cells getting refreshed. we do not want this refresh\n        // to happen on this call as we want to call it explicitly below. otherwise refresh gets called twice.\n        // if we only did this refresh (and not the one below) then the cell would flash and not be forced.\n        this.suppressRefreshCell = true;\n        const valueChanged = this.rowNode.setDataValue(this.column, newValue, 'edit');\n        this.suppressRefreshCell = false;\n        return valueChanged;\n    }\n    /**\n     * Ends the Cell Editing\n     * @param cancel `True` if the edit process is being canceled.\n     * @returns `True` if the value of the `GridCell` has been updated, otherwise `False`.\n     */\n    stopEditing(cancel = false) {\n        if (!this.editing) {\n            return false;\n        }\n        const { newValue, newValueExists } = this.takeValueFromCellEditor(cancel);\n        const oldValue = this.rowNode.getValueFromValueService(this.column);\n        let valueChanged = false;\n        if (newValueExists) {\n            valueChanged = this.saveNewValue(oldValue, newValue);\n        }\n        this.setEditing(false);\n        this.cellComp.setEditDetails(); // passing nothing stops editing\n        this.updateAndFormatValue();\n        this.refreshCell({ forceRefresh: true, suppressFlash: true });\n        this.dispatchEditingStoppedEvent(oldValue, newValue, !cancel && !!valueChanged);\n        return valueChanged;\n    }\n    dispatchEditingStoppedEvent(oldValue, newValue, valueChanged) {\n        const editingStoppedEvent = Object.assign(Object.assign({}, this.createEvent(null, Events.EVENT_CELL_EDITING_STOPPED)), { oldValue,\n            newValue,\n            valueChanged });\n        this.beans.eventService.dispatchEvent(editingStoppedEvent);\n    }\n    createCellEditorParams(key, cellStartedEdit) {\n        return {\n            value: this.rowNode.getValueFromValueService(this.column),\n            eventKey: key,\n            column: this.column,\n            colDef: this.column.getColDef(),\n            rowIndex: this.getCellPosition().rowIndex,\n            node: this.rowNode,\n            data: this.rowNode.data,\n            api: this.beans.gridOptionsService.api,\n            cellStartedEdit: cellStartedEdit,\n            columnApi: this.beans.gridOptionsService.columnApi,\n            context: this.beans.gridOptionsService.context,\n            onKeyDown: this.onKeyDown.bind(this),\n            stopEditing: this.stopEditingAndFocus.bind(this),\n            eGridCell: this.getGui(),\n            parseValue: this.parseValue.bind(this),\n            formatValue: this.formatValue.bind(this)\n        };\n    }\n    createCellRendererParams() {\n        const res = {\n            value: this.value,\n            valueFormatted: this.valueFormatted,\n            getValue: () => this.rowNode.getValueFromValueService(this.column),\n            setValue: (value) => this.beans.valueService.setValue(this.rowNode, this.column, value),\n            formatValue: this.formatValue.bind(this),\n            data: this.rowNode.data,\n            node: this.rowNode,\n            pinned: this.column.getPinned(),\n            colDef: this.column.getColDef(),\n            column: this.column,\n            rowIndex: this.getCellPosition().rowIndex,\n            api: this.beans.gridOptionsService.api,\n            columnApi: this.beans.gridOptionsService.columnApi,\n            context: this.beans.gridOptionsService.context,\n            refreshCell: this.refreshCell.bind(this),\n            eGridCell: this.getGui(),\n            eParentOfValue: this.cellComp.getParentOfValue(),\n            registerRowDragger: (rowDraggerElement, dragStartPixels, value, suppressVisibilityChange) => this.registerRowDragger(rowDraggerElement, dragStartPixels, suppressVisibilityChange),\n        };\n        return res;\n    }\n    parseValue(newValue) {\n        return this.beans.valueParserService.parseValue(this.column, this.rowNode, newValue, this.getValue());\n    }\n    setFocusOutOnEditor() {\n        if (!this.editing) {\n            return;\n        }\n        const cellEditor = this.cellComp.getCellEditor();\n        if (cellEditor && cellEditor.focusOut) {\n            cellEditor.focusOut();\n        }\n    }\n    setFocusInOnEditor() {\n        if (!this.editing) {\n            return;\n        }\n        const cellEditor = this.cellComp.getCellEditor();\n        if (cellEditor && cellEditor.focusIn) {\n            // if the editor is present, then we just focus it\n            cellEditor.focusIn();\n        }\n        else {\n            // if the editor is not present, it means async cell editor (eg React fibre)\n            // and we are trying to set focus before the cell editor is present, so we\n            // focus the cell instead\n            this.focusCell(true);\n        }\n    }\n    onCellChanged(event) {\n        // because of async in React, the cellComp may not be set yet, if no cellComp then we are\n        // yet to initialise the cell, so no need to refresh.\n        if (!this.cellComp) {\n            return;\n        }\n        const eventImpactsThisCell = event.column === this.column;\n        if (eventImpactsThisCell) {\n            this.refreshCell({});\n        }\n    }\n    // + stop editing {forceRefresh: true, suppressFlash: true}\n    // + event cellChanged {}\n    // + cellRenderer.params.refresh() {} -> method passes 'as is' to the cellRenderer, so params could be anything\n    // + rowCtrl: event dataChanged {suppressFlash: !update, newData: !update}\n    // + rowCtrl: api refreshCells() {animate: true/false}\n    // + rowRenderer: api softRefreshView() {}\n    refreshCell(params) {\n        var _a, _b, _c;\n        // if we are in the middle of 'stopEditing', then we don't refresh here, as refresh gets called explicitly\n        if (this.suppressRefreshCell || this.editing) {\n            return;\n        }\n        // In React, due to async, it's possible a refresh was asked for before the CellComp\n        // has been set. If this happens, we skip the refresh, as the cell is going to be\n        // initialised anyway once the CellComp is set.\n        if (!this.cellComp) {\n            return;\n        }\n        const colDef = this.column.getColDef();\n        const newData = params != null && !!params.newData;\n        const suppressFlash = (params != null && !!params.suppressFlash) || !!colDef.suppressCellFlash;\n        // we always refresh if cell has no value - this can happen when user provides Cell Renderer and the\n        // cell renderer doesn't rely on a value, instead it could be looking directly at the data, or maybe\n        // printing the current time (which would be silly)???. Generally speaking\n        // non of {field, valueGetter, showRowGroup} is bad in the users application, however for this edge case, it's\n        // best always refresh and take the performance hit rather than never refresh and users complaining in support\n        // that cells are not updating.\n        const noValueProvided = colDef.field == null && colDef.valueGetter == null && colDef.showRowGroup == null;\n        const forceRefresh = (params && params.forceRefresh) || noValueProvided || newData;\n        const valuesDifferent = this.updateAndFormatValue();\n        const dataNeedsUpdating = forceRefresh || valuesDifferent;\n        if (dataNeedsUpdating) {\n            // if it's 'new data', then we don't refresh the cellRenderer, even if refresh method is available.\n            // this is because if the whole data is new (ie we are showing stock price 'BBA' now and not 'SSD')\n            // then we are not showing a movement in the stock price, rather we are showing different stock.\n            this.showValue(newData);\n            // we don't want to flash the cells when processing a filter change, as otherwise the UI would\n            // be to busy. see comment in FilterManager with regards processingFilterChange\n            const processingFilterChange = this.beans.filterManager.isSuppressFlashingCellsBecauseFiltering();\n            const flashCell = !suppressFlash && !processingFilterChange &&\n                (this.beans.gridOptionsService.is('enableCellChangeFlash') || colDef.enableCellChangeFlash);\n            if (flashCell) {\n                this.flashCell();\n            }\n            (_a = this.cellCustomStyleFeature) === null || _a === void 0 ? void 0 : _a.applyUserStyles();\n            (_b = this.cellCustomStyleFeature) === null || _b === void 0 ? void 0 : _b.applyClassesFromColDef();\n        }\n        this.refreshToolTip();\n        // we do cellClassRules even if the value has not changed, so that users who have rules that\n        // look at other parts of the row (where the other part of the row might of changed) will work.\n        (_c = this.cellCustomStyleFeature) === null || _c === void 0 ? void 0 : _c.applyCellClassRules();\n    }\n    // cell editors call this, when they want to stop for reasons other\n    // than what we pick up on. eg selecting from a dropdown ends editing.\n    stopEditingAndFocus(suppressNavigateAfterEdit = false, shiftKey = false) {\n        this.stopRowOrCellEdit();\n        this.focusCell(true);\n        if (!suppressNavigateAfterEdit) {\n            this.navigateAfterEdit(shiftKey);\n        }\n    }\n    navigateAfterEdit(shiftKey) {\n        const enterNavigatesVerticallyAfterEdit = this.beans.gridOptionsService.is('enterNavigatesVerticallyAfterEdit');\n        if (enterNavigatesVerticallyAfterEdit) {\n            const key = shiftKey ? KeyCode.UP : KeyCode.DOWN;\n            this.beans.navigationService.navigateToNextCell(null, key, this.getCellPosition(), false);\n        }\n    }\n    // user can also call this via API\n    flashCell(delays) {\n        const flashDelay = delays && delays.flashDelay;\n        const fadeDelay = delays && delays.fadeDelay;\n        this.animateCell('data-changed', flashDelay, fadeDelay);\n    }\n    animateCell(cssName, flashDelay, fadeDelay) {\n        var _a, _b;\n        const fullName = `ag-cell-${cssName}`;\n        const animationFullName = `ag-cell-${cssName}-animation`;\n        const { gridOptionsService } = this.beans;\n        if (!flashDelay) {\n            flashDelay = (_a = gridOptionsService.getNum('cellFlashDelay')) !== null && _a !== void 0 ? _a : 500;\n        }\n        if (!exists(fadeDelay)) {\n            fadeDelay = (_b = gridOptionsService.getNum('cellFadeDelay')) !== null && _b !== void 0 ? _b : 1000;\n        }\n        // we want to highlight the cells, without any animation\n        this.cellComp.addOrRemoveCssClass(fullName, true);\n        this.cellComp.addOrRemoveCssClass(animationFullName, false);\n        // then once that is applied, we remove the highlight with animation\n        window.setTimeout(() => {\n            if (!this.isAlive()) {\n                return;\n            }\n            this.cellComp.addOrRemoveCssClass(fullName, false);\n            this.cellComp.addOrRemoveCssClass(animationFullName, true);\n            this.eGui.style.transition = `background-color ${fadeDelay}ms`;\n            window.setTimeout(() => {\n                if (!this.isAlive()) {\n                    return;\n                }\n                // and then to leave things as we got them, we remove the animation\n                this.cellComp.addOrRemoveCssClass(animationFullName, false);\n                this.eGui.style.transition = '';\n            }, fadeDelay);\n        }, flashDelay);\n    }\n    onFlashCells(event) {\n        if (!this.cellComp) {\n            return;\n        }\n        const cellId = this.beans.cellPositionUtils.createId(this.getCellPosition());\n        const shouldFlash = event.cells[cellId];\n        if (shouldFlash) {\n            this.animateCell('highlight');\n        }\n    }\n    isCellEditable() {\n        return this.column.isCellEditable(this.rowNode);\n    }\n    isSuppressFillHandle() {\n        return this.column.isSuppressFillHandle();\n    }\n    formatValue(value) {\n        const res = this.callValueFormatter(value);\n        return res != null ? res : value;\n    }\n    callValueFormatter(value) {\n        return this.beans.valueFormatterService.formatValue(this.column, this.rowNode, value);\n    }\n    updateAndFormatValue(force = false) {\n        const oldValue = this.value;\n        const oldValueFormatted = this.valueFormatted;\n        this.value = this.rowNode.getValueFromValueService(this.column);\n        this.valueFormatted = this.callValueFormatter(this.value);\n        const valuesDifferent = force ? true :\n            !this.valuesAreEqual(oldValue, this.value) || this.valueFormatted != oldValueFormatted;\n        return valuesDifferent;\n    }\n    valuesAreEqual(val1, val2) {\n        // if the user provided an equals method, use that, otherwise do simple comparison\n        const colDef = this.column.getColDef();\n        return colDef.equals ? colDef.equals(val1, val2) : val1 === val2;\n    }\n    getComp() {\n        return this.cellComp;\n    }\n    getValue() {\n        return this.value;\n    }\n    getValueFormatted() {\n        return this.valueFormatted;\n    }\n    addDomData() {\n        const element = this.getGui();\n        this.beans.gridOptionsService.setDomData(element, CellCtrl.DOM_DATA_KEY_CELL_CTRL, this);\n        this.addDestroyFunc(() => this.beans.gridOptionsService.setDomData(element, CellCtrl.DOM_DATA_KEY_CELL_CTRL, null));\n    }\n    createEvent(domEvent, eventType) {\n        const event = {\n            type: eventType,\n            node: this.rowNode,\n            data: this.rowNode.data,\n            value: this.value,\n            column: this.column,\n            colDef: this.column.getColDef(),\n            context: this.beans.gridOptionsService.context,\n            api: this.beans.gridApi,\n            columnApi: this.beans.columnApi,\n            rowPinned: this.rowNode.rowPinned,\n            event: domEvent,\n            rowIndex: this.rowNode.rowIndex\n        };\n        return event;\n    }\n    processCharacter(event) {\n        var _a;\n        (_a = this.cellKeyboardListenerFeature) === null || _a === void 0 ? void 0 : _a.processCharacter(event);\n    }\n    onKeyDown(event) {\n        var _a;\n        (_a = this.cellKeyboardListenerFeature) === null || _a === void 0 ? void 0 : _a.onKeyDown(event);\n    }\n    onMouseEvent(eventName, mouseEvent) {\n        var _a;\n        (_a = this.cellMouseListenerFeature) === null || _a === void 0 ? void 0 : _a.onMouseEvent(eventName, mouseEvent);\n    }\n    getGui() {\n        return this.eGui;\n    }\n    refreshToolTip() {\n        var _a;\n        (_a = this.tooltipFeature) === null || _a === void 0 ? void 0 : _a.refreshToolTip();\n    }\n    getColSpanningList() {\n        return this.cellPositionFeature.getColSpanningList();\n    }\n    onLeftChanged() {\n        var _a;\n        if (!this.cellComp) {\n            return;\n        }\n        (_a = this.cellPositionFeature) === null || _a === void 0 ? void 0 : _a.onLeftChanged();\n    }\n    onDisplayedColumnsChanged() {\n        if (!this.eGui) {\n            return;\n        }\n        this.setAriaColIndex();\n    }\n    setAriaColIndex() {\n        const colIdx = this.beans.columnModel.getAriaColumnIndex(this.column);\n        setAriaColIndex(this.getGui(), colIdx); // for react, we don't use JSX, as it slowed down column moving\n    }\n    isSuppressNavigable() {\n        return this.column.isSuppressNavigable(this.rowNode);\n    }\n    onWidthChanged() {\n        var _a;\n        return (_a = this.cellPositionFeature) === null || _a === void 0 ? void 0 : _a.onWidthChanged();\n    }\n    getColumn() {\n        return this.column;\n    }\n    getRowNode() {\n        return this.rowNode;\n    }\n    getBeans() {\n        return this.beans;\n    }\n    isPrintLayout() {\n        return this.printLayout;\n    }\n    appendChild(htmlElement) {\n        this.eGui.appendChild(htmlElement);\n    }\n    refreshHandle() {\n        if (this.cellRangeFeature) {\n            this.cellRangeFeature.refreshHandle();\n        }\n    }\n    getCellPosition() {\n        return this.cellPosition;\n    }\n    isEditing() {\n        return this.editing;\n    }\n    // called by rowRenderer when user navigates via tab key\n    startRowOrCellEdit(key, event = null) {\n        if (!this.cellComp) {\n            return;\n        }\n        if (this.beans.gridOptionsService.get('editType') === 'fullRow') {\n            this.rowCtrl.startRowEditing(key, this);\n        }\n        else {\n            this.startEditing(key, true, event);\n        }\n    }\n    getRowCtrl() {\n        return this.rowCtrl;\n    }\n    getRowPosition() {\n        return {\n            rowIndex: this.cellPosition.rowIndex,\n            rowPinned: this.cellPosition.rowPinned\n        };\n    }\n    updateRangeBordersIfRangeCount() {\n        if (!this.cellComp) {\n            return;\n        }\n        if (this.cellRangeFeature) {\n            this.cellRangeFeature.updateRangeBordersIfRangeCount();\n        }\n    }\n    onRangeSelectionChanged() {\n        if (!this.cellComp) {\n            return;\n        }\n        if (this.cellRangeFeature) {\n            this.cellRangeFeature.onRangeSelectionChanged();\n        }\n    }\n    isRangeSelectionEnabled() {\n        return this.cellRangeFeature != null;\n    }\n    focusCell(forceBrowserFocus = false) {\n        this.beans.focusService.setFocusedCell({\n            rowIndex: this.getCellPosition().rowIndex,\n            column: this.column,\n            rowPinned: this.rowNode.rowPinned,\n            forceBrowserFocus\n        });\n    }\n    onRowIndexChanged() {\n        // when index changes, this influences items that need the index, so we update the\n        // grid cell so they are working off the new index.\n        this.createCellPosition();\n        // when the index of the row changes, ie means the cell may have lost or gained focus\n        this.onCellFocused();\n        // check range selection\n        if (this.cellRangeFeature) {\n            this.cellRangeFeature.onRangeSelectionChanged();\n        }\n    }\n    onFirstRightPinnedChanged() {\n        if (!this.cellComp) {\n            return;\n        }\n        const firstRightPinned = this.column.isFirstRightPinned();\n        this.cellComp.addOrRemoveCssClass(CSS_CELL_FIRST_RIGHT_PINNED, firstRightPinned);\n    }\n    onLastLeftPinnedChanged() {\n        if (!this.cellComp) {\n            return;\n        }\n        const lastLeftPinned = this.column.isLastLeftPinned();\n        this.cellComp.addOrRemoveCssClass(CSS_CELL_LAST_LEFT_PINNED, lastLeftPinned);\n    }\n    onCellFocused(event) {\n        if (!this.cellComp || this.beans.gridOptionsService.is('suppressCellFocus')) {\n            return;\n        }\n        const cellFocused = this.beans.focusService.isCellFocused(this.cellPosition);\n        this.cellComp.addOrRemoveCssClass(CSS_CELL_FOCUS, cellFocused);\n        // see if we need to force browser focus - this can happen if focus is programmatically set\n        if (cellFocused && event && event.forceBrowserFocus) {\n            const focusEl = this.cellComp.getFocusableElement();\n            focusEl.focus({ preventScroll: !!event.preventScrollOnBrowserFocus });\n        }\n        // if another cell was focused, and we are editing, then stop editing\n        const fullRowEdit = this.beans.gridOptionsService.get('editType') === 'fullRow';\n        if (!cellFocused && !fullRowEdit && this.editing) {\n            this.stopRowOrCellEdit();\n        }\n    }\n    createCellPosition() {\n        this.cellPosition = {\n            rowIndex: this.rowNode.rowIndex,\n            rowPinned: makeNull(this.rowNode.rowPinned),\n            column: this.column\n        };\n    }\n    // CSS Classes that only get applied once, they never change\n    applyStaticCssClasses() {\n        this.cellComp.addOrRemoveCssClass(CSS_CELL, true);\n        this.cellComp.addOrRemoveCssClass(CSS_CELL_NOT_INLINE_EDITING, true);\n        // normal cells fill the height of the row. autoHeight cells have no height to let them\n        // fit the height of content.\n        const autoHeight = this.column.isAutoHeight() == true;\n        this.cellComp.addOrRemoveCssClass(CSS_AUTO_HEIGHT, autoHeight);\n        this.cellComp.addOrRemoveCssClass(CSS_NORMAL_HEIGHT, !autoHeight);\n    }\n    onColumnHover() {\n        if (!this.cellComp) {\n            return;\n        }\n        if (!this.beans.gridOptionsService.is('columnHoverHighlight')) {\n            return;\n        }\n        const isHovered = this.beans.columnHoverService.isHovered(this.column);\n        this.cellComp.addOrRemoveCssClass(CSS_COLUMN_HOVER, isHovered);\n    }\n    onColDefChanged() {\n        if (!this.cellComp) {\n            return;\n        }\n        this.setWrapText();\n        if (!this.editing) {\n            this.refreshCell({ forceRefresh: true, suppressFlash: true });\n        }\n    }\n    setWrapText() {\n        const value = this.column.getColDef().wrapText == true;\n        this.cellComp.addOrRemoveCssClass(CSS_CELL_WRAP_TEXT, value);\n    }\n    dispatchCellContextMenuEvent(event) {\n        const colDef = this.column.getColDef();\n        const cellContextMenuEvent = this.createEvent(event, Events.EVENT_CELL_CONTEXT_MENU);\n        this.beans.eventService.dispatchEvent(cellContextMenuEvent);\n        if (colDef.onCellContextMenu) {\n            // to make the callback async, do in a timeout\n            window.setTimeout(() => colDef.onCellContextMenu(cellContextMenuEvent), 0);\n        }\n    }\n    getCellRenderer() {\n        return this.cellComp ? this.cellComp.getCellRenderer() : null;\n    }\n    getCellEditor() {\n        return this.cellComp ? this.cellComp.getCellEditor() : null;\n    }\n    destroy() {\n        this.onCellCompAttachedFuncs = [];\n        super.destroy();\n    }\n    createSelectionCheckbox() {\n        const cbSelectionComponent = new CheckboxSelectionComponent();\n        this.beans.context.createBean(cbSelectionComponent);\n        cbSelectionComponent.init({ rowNode: this.rowNode, column: this.column });\n        // put the checkbox in before the value\n        return cbSelectionComponent;\n    }\n    createDndSource() {\n        const dndSourceComp = new DndSourceComp(this.rowNode, this.column, this.eGui);\n        this.beans.context.createBean(dndSourceComp);\n        return dndSourceComp;\n    }\n    registerRowDragger(customElement, dragStartPixels, suppressVisibilityChange) {\n        // if previously existed, then we are only updating\n        if (this.customRowDragComp) {\n            this.customRowDragComp.setDragElement(customElement, dragStartPixels);\n            return;\n        }\n        const newComp = this.createRowDragComp(customElement, dragStartPixels, suppressVisibilityChange);\n        if (newComp) {\n            this.customRowDragComp = newComp;\n            this.addDestroyFunc(() => { this.beans.context.destroyBean(newComp); this.customRowDragComp = null; });\n        }\n    }\n    createRowDragComp(customElement, dragStartPixels, suppressVisibilityChange) {\n        const pagination = this.beans.gridOptionsService.is('pagination');\n        const rowDragManaged = this.beans.gridOptionsService.is('rowDragManaged');\n        const clientSideRowModelActive = this.beans.gridOptionsService.isRowModelType('clientSide');\n        if (rowDragManaged) {\n            // row dragging only available in default row model\n            if (!clientSideRowModelActive) {\n                doOnce(() => console.warn('AG Grid: managed row dragging is only allowed in the Client Side Row Model'), 'CellComp.addRowDragging');\n                return;\n            }\n            if (pagination) {\n                doOnce(() => console.warn('AG Grid: managed row dragging is not possible when doing pagination'), 'CellComp.addRowDragging');\n                return;\n            }\n        }\n        // otherwise (normal case) we are creating a RowDraggingComp for the first time\n        const rowDragComp = new RowDragComp(() => this.value, this.rowNode, this.column, customElement, dragStartPixels, suppressVisibilityChange);\n        this.beans.context.createBean(rowDragComp);\n        return rowDragComp;\n    }\n}\nCellCtrl.DOM_DATA_KEY_CELL_CTRL = 'cellCtrl';\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar RowType$1;\n(function (RowType) {\n    RowType[\"Normal\"] = \"Normal\";\n    RowType[\"FullWidth\"] = \"FullWidth\";\n    RowType[\"FullWidthLoading\"] = \"FullWidthLoading\";\n    RowType[\"FullWidthGroup\"] = \"FullWidthGroup\";\n    RowType[\"FullWidthDetail\"] = \"FullWidthDetail\";\n})(RowType$1 || (RowType$1 = {}));\nlet instanceIdSequence$2 = 0;\nclass RowCtrl extends BeanStub {\n    constructor(rowNode, beans, animateIn, useAnimationFrameForCreate, printLayout) {\n        super();\n        this.allRowGuis = [];\n        this.active = true;\n        this.centerCellCtrls = { list: [], map: {} };\n        this.leftCellCtrls = { list: [], map: {} };\n        this.rightCellCtrls = { list: [], map: {} };\n        this.slideInAnimation = {\n            left: false,\n            center: false,\n            right: false,\n            fullWidth: false\n        };\n        this.fadeInAnimation = {\n            left: false,\n            center: false,\n            right: false,\n            fullWidth: false\n        };\n        this.lastMouseDownOnDragger = false;\n        this.updateColumnListsPending = false;\n        this.businessKeySanitised = null;\n        this.beans = beans;\n        this.gridOptionsService = beans.gridOptionsService;\n        this.rowNode = rowNode;\n        this.paginationPage = beans.paginationProxy.getCurrentPage();\n        this.useAnimationFrameForCreate = useAnimationFrameForCreate;\n        this.printLayout = printLayout;\n        this.instanceId = rowNode.id + '-' + instanceIdSequence$2++;\n        this.setAnimateFlags(animateIn);\n        this.initRowBusinessKey();\n        this.rowFocused = beans.focusService.isRowFocused(this.rowNode.rowIndex, this.rowNode.rowPinned);\n        this.rowLevel = beans.rowCssClassCalculator.calculateRowLevel(this.rowNode);\n        this.setRowType();\n        this.addListeners();\n    }\n    initRowBusinessKey() {\n        this.businessKeyForNodeFunc = this.gridOptionsService.get('getBusinessKeyForNode');\n        this.updateRowBusinessKey();\n    }\n    updateRowBusinessKey() {\n        if (typeof this.businessKeyForNodeFunc !== 'function') {\n            return;\n        }\n        const businessKey = this.businessKeyForNodeFunc(this.rowNode);\n        this.businessKeySanitised = escapeString(businessKey);\n    }\n    isSticky() {\n        return this.rowNode.sticky;\n    }\n    getBeans() {\n        return this.beans;\n    }\n    getInstanceId() {\n        return this.instanceId;\n    }\n    setComp(rowComp, element, containerType) {\n        const gui = { rowComp, element, containerType };\n        this.allRowGuis.push(gui);\n        if (containerType === RowContainerType.LEFT) {\n            this.leftGui = gui;\n        }\n        else if (containerType === RowContainerType.RIGHT) {\n            this.rightGui = gui;\n        }\n        else if (containerType === RowContainerType.FULL_WIDTH) {\n            this.fullWidthGui = gui;\n        }\n        else {\n            this.centerGui = gui;\n        }\n        this.initialiseRowComp(gui);\n        // pinned rows render before the main grid body in the SSRM, only fire the event after the main body has rendered.\n        if (this.rowType !== 'FullWidthLoading' && !this.rowNode.rowPinned) {\n            // this is fired within setComp as we know that the component renderer is now trying to render.\n            // linked with the fact the function implementation queues behind requestAnimationFrame should allow\n            // us to be certain that all rendering is done by the time the event fires.\n            this.beans.rowRenderer.dispatchFirstDataRenderedEvent();\n        }\n    }\n    unsetComp(containerType) {\n        this.allRowGuis = this.allRowGuis\n            .filter(rowGui => rowGui.containerType !== containerType);\n        if (containerType === RowContainerType.LEFT) {\n            this.leftGui = undefined;\n        }\n        else if (containerType === RowContainerType.RIGHT) {\n            this.rightGui = undefined;\n        }\n        else if (containerType === RowContainerType.FULL_WIDTH) {\n            this.fullWidthGui = undefined;\n        }\n    }\n    isCacheable() {\n        return this.rowType === RowType$1.FullWidthDetail\n            && this.gridOptionsService.is('keepDetailRows');\n    }\n    setCached(cached) {\n        const displayValue = cached ? 'none' : '';\n        this.allRowGuis.forEach(rg => rg.element.style.display = displayValue);\n    }\n    initialiseRowComp(gui) {\n        const gos = this.gridOptionsService;\n        this.listenOnDomOrder(gui);\n        this.onRowHeightChanged(gui);\n        this.updateRowIndexes(gui);\n        this.setFocusedClasses(gui);\n        this.setStylesFromGridOptions(gui);\n        if (gos.isRowSelection() && this.rowNode.selectable) {\n            this.onRowSelected(gui);\n        }\n        this.updateColumnLists(!this.useAnimationFrameForCreate);\n        const comp = gui.rowComp;\n        comp.setRole('row');\n        const initialRowClasses = this.getInitialRowClasses(gui.containerType);\n        initialRowClasses.forEach(name => comp.addOrRemoveCssClass(name, true));\n        this.executeSlideAndFadeAnimations(gui);\n        if (this.rowNode.group) {\n            setAriaExpanded(gui.element, this.rowNode.expanded == true);\n        }\n        this.setRowCompRowId(comp);\n        this.setRowCompRowBusinessKey(comp);\n        if (this.isFullWidth() && !this.gridOptionsService.is('suppressCellFocus')) {\n            comp.setTabIndex(-1);\n        }\n        // DOM DATA\n        gos.setDomData(gui.element, RowCtrl.DOM_DATA_KEY_ROW_CTRL, this);\n        this.addDestroyFunc(() => gos.setDomData(gui.element, RowCtrl.DOM_DATA_KEY_ROW_CTRL, null));\n        // adding hover functionality adds listener to this row, so we\n        // do it lazily in an animation frame\n        if (this.useAnimationFrameForCreate) {\n            this.beans.animationFrameService.createTask(this.addHoverFunctionality.bind(this, gui.element), this.rowNode.rowIndex, 'createTasksP2');\n        }\n        else {\n            this.addHoverFunctionality(gui.element);\n        }\n        if (this.isFullWidth()) {\n            this.setupFullWidth(gui);\n        }\n        if (gos.is('rowDragEntireRow')) {\n            this.addRowDraggerToRow(gui);\n        }\n        if (this.useAnimationFrameForCreate) {\n            // the height animation we only want active after the row is alive for 1 second.\n            // this stops the row animation working when rows are initially created. otherwise\n            // auto-height rows get inserted into the dom and resized immediately, which gives\n            // very bad UX (eg 10 rows get inserted, then all 10 expand, look particularly bad\n            // when scrolling). so this makes sure when rows are shown for the first time, they\n            // are resized immediately without animation.\n            this.beans.animationFrameService.addDestroyTask(() => {\n                if (!this.isAlive()) {\n                    return;\n                }\n                gui.rowComp.addOrRemoveCssClass('ag-after-created', true);\n            });\n        }\n        this.executeProcessRowPostCreateFunc();\n    }\n    setRowCompRowBusinessKey(comp) {\n        if (this.businessKeySanitised == null) {\n            return;\n        }\n        comp.setRowBusinessKey(this.businessKeySanitised);\n    }\n    setRowCompRowId(comp) {\n        const rowId = escapeString(this.rowNode.id);\n        if (rowId == null) {\n            return;\n        }\n        comp.setRowId(rowId);\n    }\n    executeSlideAndFadeAnimations(gui) {\n        const { containerType } = gui;\n        const shouldSlide = this.slideInAnimation[containerType];\n        if (shouldSlide) {\n            executeNextVMTurn(() => {\n                this.onTopChanged();\n            });\n            this.slideInAnimation[containerType] = false;\n        }\n        const shouldFade = this.fadeInAnimation[containerType];\n        if (shouldFade) {\n            executeNextVMTurn(() => {\n                gui.rowComp.addOrRemoveCssClass('ag-opacity-zero', false);\n            });\n            this.fadeInAnimation[containerType] = false;\n        }\n    }\n    addRowDraggerToRow(gui) {\n        if (this.gridOptionsService.isEnableRangeSelection()) {\n            doOnce(() => {\n                console.warn('AG Grid: Setting `rowDragEntireRow: true` in the gridOptions doesn\\'t work with `enableRangeSelection: true`');\n            }, 'rowDragAndRangeSelectionEnabled');\n            return;\n        }\n        const translate = this.beans.localeService.getLocaleTextFunc();\n        const rowDragComp = new RowDragComp(() => `1 ${translate('rowDragRow', 'row')}`, this.rowNode, undefined, gui.element, undefined, true);\n        this.createManagedBean(rowDragComp, this.beans.context);\n    }\n    setupFullWidth(gui) {\n        const pinned = this.getPinnedForContainer(gui.containerType);\n        const params = this.createFullWidthParams(gui.element, pinned);\n        if (this.rowType == RowType$1.FullWidthDetail) {\n            if (!ModuleRegistry.assertRegistered(ModuleNames.MasterDetailModule, \"cell renderer 'agDetailCellRenderer' (for master detail)\", this.beans.context.getGridId())) {\n                return;\n            }\n        }\n        let compDetails;\n        switch (this.rowType) {\n            case RowType$1.FullWidthDetail:\n                compDetails = this.beans.userComponentFactory.getFullWidthDetailCellRendererDetails(params);\n                break;\n            case RowType$1.FullWidthGroup:\n                compDetails = this.beans.userComponentFactory.getFullWidthGroupCellRendererDetails(params);\n                break;\n            case RowType$1.FullWidthLoading:\n                compDetails = this.beans.userComponentFactory.getFullWidthLoadingCellRendererDetails(params);\n                break;\n            default:\n                compDetails = this.beans.userComponentFactory.getFullWidthCellRendererDetails(params);\n                break;\n        }\n        gui.rowComp.showFullWidth(compDetails);\n    }\n    isPrintLayout() {\n        return this.printLayout;\n    }\n    getFullWidthCellRenderer() {\n        var _a, _b;\n        return (_b = (_a = this.fullWidthGui) === null || _a === void 0 ? void 0 : _a.rowComp) === null || _b === void 0 ? void 0 : _b.getFullWidthCellRenderer();\n    }\n    // use by autoWidthCalculator, as it clones the elements\n    getCellElement(column) {\n        const cellCtrl = this.getCellCtrl(column);\n        return cellCtrl ? cellCtrl.getGui() : null;\n    }\n    executeProcessRowPostCreateFunc() {\n        var _a;\n        const func = this.gridOptionsService.getCallback('processRowPostCreate');\n        if (!func || !this.areAllContainersReady()) {\n            return;\n        }\n        const params = {\n            eRow: (_a = this.centerGui) === null || _a === void 0 ? void 0 : _a.element,\n            ePinnedLeftRow: this.leftGui ? this.leftGui.element : undefined,\n            ePinnedRightRow: this.rightGui ? this.rightGui.element : undefined,\n            node: this.rowNode,\n            rowIndex: this.rowNode.rowIndex,\n            addRenderedRowListener: this.addEventListener.bind(this),\n        };\n        func(params);\n    }\n    areAllContainersReady() {\n        const isLeftReady = !!this.leftGui || !this.beans.columnModel.isPinningLeft();\n        const isCenterReady = !!this.centerGui;\n        const isRightReady = !!this.rightGui || !this.beans.columnModel.isPinningRight();\n        return isLeftReady && isCenterReady && isRightReady;\n    }\n    setRowType() {\n        const isStub = this.rowNode.stub;\n        const isFullWidthCell = this.rowNode.isFullWidthCell();\n        const isDetailCell = this.beans.doingMasterDetail && this.rowNode.detail;\n        const pivotMode = this.beans.columnModel.isPivotMode();\n        // we only use full width for groups, not footers. it wouldn't make sense to include footers if not looking\n        // for totals. if users complain about this, then we should introduce a new property 'footerUseEntireRow'\n        // so each can be set independently (as a customer complained about footers getting full width, hence\n        // introducing this logic)\n        const isGroupRow = !!this.rowNode.group && !this.rowNode.footer;\n        const isFullWidthGroup = isGroupRow && this.gridOptionsService.isGroupUseEntireRow(pivotMode);\n        if (isStub) {\n            this.rowType = RowType$1.FullWidthLoading;\n        }\n        else if (isDetailCell) {\n            this.rowType = RowType$1.FullWidthDetail;\n        }\n        else if (isFullWidthCell) {\n            this.rowType = RowType$1.FullWidth;\n        }\n        else if (isFullWidthGroup) {\n            this.rowType = RowType$1.FullWidthGroup;\n        }\n        else {\n            this.rowType = RowType$1.Normal;\n        }\n    }\n    updateColumnLists(suppressAnimationFrame = false, useFlushSync = false) {\n        if (this.isFullWidth()) {\n            return;\n        }\n        const noAnimation = suppressAnimationFrame\n            || this.gridOptionsService.is('suppressAnimationFrame')\n            || this.printLayout;\n        if (noAnimation) {\n            this.updateColumnListsImpl(useFlushSync);\n            return;\n        }\n        if (this.updateColumnListsPending) {\n            return;\n        }\n        this.beans.animationFrameService.createTask(() => {\n            if (!this.active) {\n                return;\n            }\n            this.updateColumnListsImpl(true);\n        }, this.rowNode.rowIndex, 'createTasksP1');\n        this.updateColumnListsPending = true;\n    }\n    createCellCtrls(prev, cols, pinned = null) {\n        const res = {\n            list: [],\n            map: {}\n        };\n        const addCell = (colInstanceId, cellCtrl) => {\n            res.list.push(cellCtrl);\n            res.map[colInstanceId] = cellCtrl;\n        };\n        cols.forEach(col => {\n            // we use instanceId's rather than colId as it's possible there is a Column with same Id,\n            // but it's referring to a different column instance. Happens a lot with pivot, as pivot col id's are\n            // reused eg pivot_0, pivot_1 etc\n            const colInstanceId = col.getInstanceId();\n            let cellCtrl = prev.map[colInstanceId];\n            if (!cellCtrl) {\n                cellCtrl = new CellCtrl(col, this.rowNode, this.beans, this);\n            }\n            addCell(colInstanceId, cellCtrl);\n        });\n        prev.list.forEach(prevCellCtrl => {\n            const cellInResult = res.map[prevCellCtrl.getColumn().getInstanceId()] != null;\n            if (cellInResult) {\n                return;\n            }\n            const keepCell = !this.isCellEligibleToBeRemoved(prevCellCtrl, pinned);\n            if (keepCell) {\n                addCell(prevCellCtrl.getColumn().getInstanceId(), prevCellCtrl);\n                return;\n            }\n            prevCellCtrl.destroy();\n        });\n        return res;\n    }\n    updateColumnListsImpl(useFlushSync = false) {\n        this.updateColumnListsPending = false;\n        const columnModel = this.beans.columnModel;\n        if (this.printLayout) {\n            this.centerCellCtrls = this.createCellCtrls(this.centerCellCtrls, columnModel.getAllDisplayedColumns());\n            this.leftCellCtrls = { list: [], map: {} };\n            this.rightCellCtrls = { list: [], map: {} };\n        }\n        else {\n            const centerCols = columnModel.getViewportCenterColumnsForRow(this.rowNode);\n            this.centerCellCtrls = this.createCellCtrls(this.centerCellCtrls, centerCols);\n            const leftCols = columnModel.getDisplayedLeftColumnsForRow(this.rowNode);\n            this.leftCellCtrls = this.createCellCtrls(this.leftCellCtrls, leftCols, 'left');\n            const rightCols = columnModel.getDisplayedRightColumnsForRow(this.rowNode);\n            this.rightCellCtrls = this.createCellCtrls(this.rightCellCtrls, rightCols, 'right');\n        }\n        this.allRowGuis.forEach(item => {\n            const cellControls = item.containerType === RowContainerType.LEFT ? this.leftCellCtrls :\n                item.containerType === RowContainerType.RIGHT ? this.rightCellCtrls : this.centerCellCtrls;\n            item.rowComp.setCellCtrls(cellControls.list, useFlushSync);\n        });\n    }\n    isCellEligibleToBeRemoved(cellCtrl, nextContainerPinned) {\n        const REMOVE_CELL = true;\n        const KEEP_CELL = false;\n        // always remove the cell if it's not rendered or if it's in the wrong pinned location\n        const column = cellCtrl.getColumn();\n        if (column.getPinned() != nextContainerPinned) {\n            return REMOVE_CELL;\n        }\n        // we want to try and keep editing and focused cells\n        const editing = cellCtrl.isEditing();\n        const focused = this.beans.focusService.isCellFocused(cellCtrl.getCellPosition());\n        const mightWantToKeepCell = editing || focused;\n        if (mightWantToKeepCell) {\n            const column = cellCtrl.getColumn();\n            const displayedColumns = this.beans.columnModel.getAllDisplayedColumns();\n            const cellStillDisplayed = displayedColumns.indexOf(column) >= 0;\n            return cellStillDisplayed ? KEEP_CELL : REMOVE_CELL;\n        }\n        return REMOVE_CELL;\n    }\n    listenOnDomOrder(gui) {\n        const listener = () => {\n            const isEnsureDomOrder = this.gridOptionsService.is('ensureDomOrder');\n            const isPrintLayout = this.gridOptionsService.isDomLayout('print');\n            gui.rowComp.setDomOrder(isEnsureDomOrder || isPrintLayout);\n        };\n        this.addManagedPropertyListener('domLayout', listener);\n        listener();\n    }\n    setAnimateFlags(animateIn) {\n        if (this.isSticky() || !animateIn) {\n            return;\n        }\n        const oldRowTopExists = exists(this.rowNode.oldRowTop);\n        const pinningLeft = this.beans.columnModel.isPinningLeft();\n        const pinningRight = this.beans.columnModel.isPinningRight();\n        if (oldRowTopExists) {\n            // if the row had a previous position, we slide it in\n            this.slideInAnimation.center = true;\n            this.slideInAnimation.left = pinningLeft;\n            this.slideInAnimation.right = pinningRight;\n        }\n        else {\n            // if the row had no previous position, we fade it in\n            this.fadeInAnimation.center = true;\n            this.fadeInAnimation.left = pinningLeft;\n            this.fadeInAnimation.right = pinningRight;\n        }\n    }\n    isEditing() {\n        return this.editingRow;\n    }\n    stopRowEditing(cancel) {\n        this.stopEditing(cancel);\n    }\n    isFullWidth() {\n        return this.rowType !== RowType$1.Normal;\n    }\n    getRowType() {\n        return this.rowType;\n    }\n    refreshFullWidth() {\n        // returns 'true' if refresh succeeded\n        const tryRefresh = (gui, pinned) => {\n            if (!gui) {\n                return true;\n            } // no refresh needed\n            const cellRenderer = gui.rowComp.getFullWidthCellRenderer();\n            // no cell renderer, either means comp not yet ready, or comp ready but now reference\n            // to it (happens in react when comp is stateless). if comp not ready, we don't need to\n            // refresh, however we don't know which one, so we refresh to cover the case where it's\n            // react comp without reference so need to force a refresh\n            if (!cellRenderer) {\n                return false;\n            }\n            // no refresh method present, so can't refresh, hard refresh needed\n            if (!cellRenderer.refresh) {\n                return false;\n            }\n            const params = this.createFullWidthParams(gui.element, pinned);\n            const refreshSucceeded = cellRenderer.refresh(params);\n            return refreshSucceeded;\n        };\n        const fullWidthSuccess = tryRefresh(this.fullWidthGui, null);\n        const centerSuccess = tryRefresh(this.centerGui, null);\n        const leftSuccess = tryRefresh(this.leftGui, 'left');\n        const rightSuccess = tryRefresh(this.rightGui, 'right');\n        const allFullWidthRowsRefreshed = fullWidthSuccess && centerSuccess && leftSuccess && rightSuccess;\n        return allFullWidthRowsRefreshed;\n    }\n    addListeners() {\n        this.addManagedListener(this.rowNode, RowNode.EVENT_HEIGHT_CHANGED, () => this.onRowHeightChanged());\n        this.addManagedListener(this.rowNode, RowNode.EVENT_ROW_SELECTED, () => this.onRowSelected());\n        this.addManagedListener(this.rowNode, RowNode.EVENT_ROW_INDEX_CHANGED, this.onRowIndexChanged.bind(this));\n        this.addManagedListener(this.rowNode, RowNode.EVENT_TOP_CHANGED, this.onTopChanged.bind(this));\n        this.addManagedListener(this.rowNode, RowNode.EVENT_EXPANDED_CHANGED, this.updateExpandedCss.bind(this));\n        this.addManagedListener(this.rowNode, RowNode.EVENT_HAS_CHILDREN_CHANGED, this.updateExpandedCss.bind(this));\n        this.addManagedListener(this.rowNode, RowNode.EVENT_DATA_CHANGED, this.onRowNodeDataChanged.bind(this));\n        this.addManagedListener(this.rowNode, RowNode.EVENT_CELL_CHANGED, this.onRowNodeCellChanged.bind(this));\n        this.addManagedListener(this.rowNode, RowNode.EVENT_HIGHLIGHT_CHANGED, this.onRowNodeHighlightChanged.bind(this));\n        this.addManagedListener(this.rowNode, RowNode.EVENT_DRAGGING_CHANGED, this.onRowNodeDraggingChanged.bind(this));\n        this.addManagedListener(this.rowNode, RowNode.EVENT_UI_LEVEL_CHANGED, this.onUiLevelChanged.bind(this));\n        const eventService = this.beans.eventService;\n        this.addManagedListener(eventService, Events.EVENT_PAGINATION_PIXEL_OFFSET_CHANGED, this.onPaginationPixelOffsetChanged.bind(this));\n        this.addManagedListener(eventService, Events.EVENT_HEIGHT_SCALE_CHANGED, this.onTopChanged.bind(this));\n        this.addManagedListener(eventService, Events.EVENT_DISPLAYED_COLUMNS_CHANGED, this.onDisplayedColumnsChanged.bind(this));\n        this.addManagedListener(eventService, Events.EVENT_VIRTUAL_COLUMNS_CHANGED, this.onVirtualColumnsChanged.bind(this));\n        this.addManagedListener(eventService, Events.EVENT_CELL_FOCUSED, this.onCellFocused.bind(this));\n        this.addManagedListener(eventService, Events.EVENT_CELL_FOCUS_CLEARED, this.onCellFocusCleared.bind(this));\n        this.addManagedListener(eventService, Events.EVENT_PAGINATION_CHANGED, this.onPaginationChanged.bind(this));\n        this.addManagedListener(eventService, Events.EVENT_MODEL_UPDATED, this.onModelUpdated.bind(this));\n        this.addManagedListener(eventService, Events.EVENT_COLUMN_MOVED, this.onColumnMoved.bind(this));\n        this.addListenersForCellComps();\n    }\n    onColumnMoved() {\n        this.updateColumnLists();\n    }\n    addListenersForCellComps() {\n        this.addManagedListener(this.rowNode, RowNode.EVENT_ROW_INDEX_CHANGED, () => {\n            this.getAllCellCtrls().forEach(cellCtrl => cellCtrl.onRowIndexChanged());\n        });\n        this.addManagedListener(this.rowNode, RowNode.EVENT_CELL_CHANGED, event => {\n            this.getAllCellCtrls().forEach(cellCtrl => cellCtrl.onCellChanged(event));\n        });\n    }\n    onRowNodeDataChanged(event) {\n        // if master row has updated, then need to also try to refresh the detail node\n        if (this.rowNode.detailNode) {\n            this.beans.rowRenderer.refreshFullWidthRow(this.rowNode.detailNode);\n        }\n        if (this.isFullWidth()) {\n            this.beans.rowRenderer.refreshFullWidthRow(this.rowNode);\n            return;\n        }\n        // if this is an update, we want to refresh, as this will allow the user to put in a transition\n        // into the cellRenderer refresh method. otherwise this might be completely new data, in which case\n        // we will want to completely replace the cells\n        this.getAllCellCtrls().forEach(cellCtrl => cellCtrl.refreshCell({\n            suppressFlash: !event.update,\n            newData: !event.update\n        }));\n        // as data has changed update the dom row id attributes\n        this.allRowGuis.forEach(gui => {\n            this.setRowCompRowId(gui.rowComp);\n            this.updateRowBusinessKey();\n            this.setRowCompRowBusinessKey(gui.rowComp);\n        });\n        // check for selected also, as this could be after lazy loading of the row data, in which case\n        // the id might of just gotten set inside the row and the row selected state may of changed\n        // as a result. this is what happens when selected rows are loaded in virtual pagination.\n        // - niall note - since moving to the stub component, this may no longer be true, as replacing\n        // the stub component now replaces the entire row\n        this.onRowSelected();\n        // as data has changed, then the style and class needs to be recomputed\n        this.postProcessCss();\n    }\n    onRowNodeCellChanged() {\n        // as data has changed, then the style and class needs to be recomputed\n        this.postProcessCss();\n    }\n    postProcessCss() {\n        this.setStylesFromGridOptions();\n        this.postProcessClassesFromGridOptions();\n        this.postProcessRowClassRules();\n        this.postProcessRowDragging();\n    }\n    onRowNodeHighlightChanged() {\n        const highlighted = this.rowNode.highlighted;\n        this.allRowGuis.forEach(gui => {\n            const aboveOn = highlighted === RowHighlightPosition.Above;\n            const belowOn = highlighted === RowHighlightPosition.Below;\n            gui.rowComp.addOrRemoveCssClass('ag-row-highlight-above', aboveOn);\n            gui.rowComp.addOrRemoveCssClass('ag-row-highlight-below', belowOn);\n        });\n    }\n    onRowNodeDraggingChanged() {\n        this.postProcessRowDragging();\n    }\n    postProcessRowDragging() {\n        const dragging = this.rowNode.dragging;\n        this.allRowGuis.forEach(gui => gui.rowComp.addOrRemoveCssClass('ag-row-dragging', dragging));\n    }\n    updateExpandedCss() {\n        const expandable = this.rowNode.isExpandable();\n        const expanded = this.rowNode.expanded == true;\n        this.allRowGuis.forEach(gui => {\n            gui.rowComp.addOrRemoveCssClass('ag-row-group', expandable);\n            gui.rowComp.addOrRemoveCssClass('ag-row-group-expanded', expandable && expanded);\n            gui.rowComp.addOrRemoveCssClass('ag-row-group-contracted', expandable && !expanded);\n            setAriaExpanded(gui.element, expandable && expanded);\n        });\n    }\n    onDisplayedColumnsChanged() {\n        // we skip animations for onDisplayedColumnChanged, as otherwise the client could remove columns and\n        // then set data, and any old valueGetter's (ie from cols that were removed) would still get called.\n        this.updateColumnLists(true);\n        if (this.beans.columnModel.wasAutoRowHeightEverActive()) {\n            this.rowNode.checkAutoHeights();\n        }\n    }\n    onVirtualColumnsChanged() {\n        this.updateColumnLists(false, true);\n    }\n    getRowPosition() {\n        return {\n            rowPinned: makeNull(this.rowNode.rowPinned),\n            rowIndex: this.rowNode.rowIndex\n        };\n    }\n    onKeyboardNavigate(keyboardEvent) {\n        const currentFullWidthComp = this.allRowGuis.find(c => c.element.contains(keyboardEvent.target));\n        const currentFullWidthContainer = currentFullWidthComp ? currentFullWidthComp.element : null;\n        const isFullWidthContainerFocused = currentFullWidthContainer === keyboardEvent.target;\n        if (!isFullWidthContainerFocused) {\n            return;\n        }\n        const node = this.rowNode;\n        const lastFocusedCell = this.beans.focusService.getFocusedCell();\n        const cellPosition = {\n            rowIndex: node.rowIndex,\n            rowPinned: node.rowPinned,\n            column: (lastFocusedCell && lastFocusedCell.column)\n        };\n        this.beans.navigationService.navigateToNextCell(keyboardEvent, keyboardEvent.key, cellPosition, true);\n        keyboardEvent.preventDefault();\n    }\n    onTabKeyDown(keyboardEvent) {\n        if (keyboardEvent.defaultPrevented || isStopPropagationForAgGrid(keyboardEvent)) {\n            return;\n        }\n        const currentFullWidthComp = this.allRowGuis.find(c => c.element.contains(keyboardEvent.target));\n        const currentFullWidthContainer = currentFullWidthComp ? currentFullWidthComp.element : null;\n        const isFullWidthContainerFocused = currentFullWidthContainer === keyboardEvent.target;\n        let nextEl = null;\n        if (!isFullWidthContainerFocused) {\n            nextEl = this.beans.focusService.findNextFocusableElement(currentFullWidthContainer, false, keyboardEvent.shiftKey);\n        }\n        if ((this.isFullWidth() && isFullWidthContainerFocused) || !nextEl) {\n            this.beans.navigationService.onTabKeyDown(this, keyboardEvent);\n        }\n    }\n    onFullWidthRowFocused(event) {\n        var _a;\n        const node = this.rowNode;\n        const isFocused = !event ? false : this.isFullWidth() && event.rowIndex === node.rowIndex && event.rowPinned == node.rowPinned;\n        const element = this.fullWidthGui ? this.fullWidthGui.element : (_a = this.centerGui) === null || _a === void 0 ? void 0 : _a.element;\n        if (!element) {\n            return;\n        } // can happen with react ui, comp not yet ready\n        element.classList.toggle('ag-full-width-focus', isFocused);\n        if (isFocused) {\n            // we don't scroll normal rows into view when we focus them, so we don't want\n            // to scroll Full Width rows either.\n            element.focus({ preventScroll: true });\n        }\n    }\n    refreshCell(cellCtrl) {\n        this.centerCellCtrls = this.removeCellCtrl(this.centerCellCtrls, cellCtrl);\n        this.leftCellCtrls = this.removeCellCtrl(this.leftCellCtrls, cellCtrl);\n        this.rightCellCtrls = this.removeCellCtrl(this.rightCellCtrls, cellCtrl);\n        this.updateColumnLists();\n    }\n    removeCellCtrl(prev, cellCtrlToRemove) {\n        const res = {\n            list: [],\n            map: {}\n        };\n        prev.list.forEach(cellCtrl => {\n            if (cellCtrl === cellCtrlToRemove) {\n                return;\n            }\n            res.list.push(cellCtrl);\n            res.map[cellCtrl.getInstanceId()] = cellCtrl;\n        });\n        return res;\n    }\n    onMouseEvent(eventName, mouseEvent) {\n        switch (eventName) {\n            case 'dblclick':\n                this.onRowDblClick(mouseEvent);\n                break;\n            case 'click':\n                this.onRowClick(mouseEvent);\n                break;\n            case 'touchstart':\n            case 'mousedown':\n                this.onRowMouseDown(mouseEvent);\n                break;\n        }\n    }\n    createRowEvent(type, domEvent) {\n        return {\n            type: type,\n            node: this.rowNode,\n            data: this.rowNode.data,\n            rowIndex: this.rowNode.rowIndex,\n            rowPinned: this.rowNode.rowPinned,\n            context: this.gridOptionsService.context,\n            api: this.gridOptionsService.api,\n            columnApi: this.gridOptionsService.columnApi,\n            event: domEvent\n        };\n    }\n    createRowEventWithSource(type, domEvent) {\n        const event = this.createRowEvent(type, domEvent);\n        // when first developing this, we included the rowComp in the event.\n        // this seems very weird. so when introducing the event types, i left the 'source'\n        // out of the type, and just include the source in the two places where this event\n        // was fired (rowClicked and rowDoubleClicked). it doesn't make sense for any\n        // users to be using this, as the rowComp isn't an object we expose, so would be\n        // very surprising if a user was using it.\n        event.source = this;\n        return event;\n    }\n    onRowDblClick(mouseEvent) {\n        if (isStopPropagationForAgGrid(mouseEvent)) {\n            return;\n        }\n        const agEvent = this.createRowEventWithSource(Events.EVENT_ROW_DOUBLE_CLICKED, mouseEvent);\n        this.beans.eventService.dispatchEvent(agEvent);\n    }\n    onRowMouseDown(mouseEvent) {\n        this.lastMouseDownOnDragger = isElementChildOfClass(mouseEvent.target, 'ag-row-drag', 3);\n        if (!this.isFullWidth()) {\n            return;\n        }\n        const node = this.rowNode;\n        const columnModel = this.beans.columnModel;\n        if (this.beans.rangeService) {\n            this.beans.rangeService.removeAllCellRanges();\n        }\n        this.beans.focusService.setFocusedCell({\n            rowIndex: node.rowIndex,\n            column: columnModel.getAllDisplayedColumns()[0],\n            rowPinned: node.rowPinned,\n            forceBrowserFocus: true\n        });\n    }\n    onRowClick(mouseEvent) {\n        const stop = isStopPropagationForAgGrid(mouseEvent) || this.lastMouseDownOnDragger;\n        if (stop) {\n            return;\n        }\n        const agEvent = this.createRowEventWithSource(Events.EVENT_ROW_CLICKED, mouseEvent);\n        this.beans.eventService.dispatchEvent(agEvent);\n        // ctrlKey for windows, metaKey for Apple\n        const isMultiKey = mouseEvent.ctrlKey || mouseEvent.metaKey;\n        const isShiftKey = mouseEvent.shiftKey;\n        // we do not allow selecting the group by clicking, when groupSelectChildren, as the logic to\n        // handle this is broken. to observe, change the logic below and allow groups to be selected.\n        // you will see the group gets selected, then all children get selected, then the grid unselects\n        // the children (as the default behaviour when clicking is to unselect other rows) which results\n        // in the group getting unselected (as all children are unselected). the correct thing would be\n        // to change this, so that children of the selected group are not then subsequently un-selected.\n        const groupSelectsChildren = this.gridOptionsService.is('groupSelectsChildren');\n        if (\n        // we do not allow selecting groups by clicking (as the click here expands the group), or if it's a detail row,\n        // so return if it's a group row\n        (groupSelectsChildren && this.rowNode.group) ||\n            // this is needed so we don't unselect other rows when we click this row, eg if this row is not selectable,\n            // and we click it, the selection should not change (ie any currently selected row should stay selected)\n            !this.rowNode.selectable ||\n            // we also don't allow selection of pinned rows\n            this.rowNode.rowPinned ||\n            // if no selection method enabled, do nothing\n            !this.gridOptionsService.isRowSelection() ||\n            // if click selection suppressed, do nothing\n            this.gridOptionsService.is('suppressRowClickSelection')) {\n            return;\n        }\n        const multiSelectOnClick = this.gridOptionsService.is('rowMultiSelectWithClick');\n        const rowDeselectionWithCtrl = !this.gridOptionsService.is('suppressRowDeselection');\n        const source = 'rowClicked';\n        if (this.rowNode.isSelected()) {\n            if (multiSelectOnClick) {\n                this.rowNode.setSelectedParams({ newValue: false, event: mouseEvent, source });\n            }\n            else if (isMultiKey) {\n                if (rowDeselectionWithCtrl) {\n                    this.rowNode.setSelectedParams({ newValue: false, event: mouseEvent, source });\n                }\n            }\n            else {\n                // selected with no multi key, must make sure anything else is unselected\n                this.rowNode.setSelectedParams({ newValue: true, clearSelection: !isShiftKey, rangeSelect: isShiftKey, event: mouseEvent, source });\n            }\n        }\n        else {\n            const clearSelection = multiSelectOnClick ? false : !isMultiKey;\n            this.rowNode.setSelectedParams({ newValue: true, clearSelection: clearSelection, rangeSelect: isShiftKey, event: mouseEvent, source });\n        }\n    }\n    setupDetailRowAutoHeight(eDetailGui) {\n        if (this.rowType !== RowType$1.FullWidthDetail) {\n            return;\n        }\n        if (!this.gridOptionsService.is('detailRowAutoHeight')) {\n            return;\n        }\n        const checkRowSizeFunc = () => {\n            const clientHeight = eDetailGui.clientHeight;\n            // if the UI is not ready, the height can be 0, which we ignore, as otherwise a flicker will occur\n            // as UI goes from the default height, to 0, then to the real height as UI becomes ready. this means\n            // it's not possible for have 0 as auto-height, however this is an improbable use case, as even an\n            // empty detail grid would still have some styling around it giving at least a few pixels.\n            if (clientHeight != null && clientHeight > 0) {\n                // we do the update in a timeout, to make sure we are not calling from inside the grid\n                // doing another update\n                const updateRowHeightFunc = () => {\n                    this.rowNode.setRowHeight(clientHeight);\n                    if (this.beans.clientSideRowModel) {\n                        this.beans.clientSideRowModel.onRowHeightChanged();\n                    }\n                    else if (this.beans.serverSideRowModel) {\n                        this.beans.serverSideRowModel.onRowHeightChanged();\n                    }\n                };\n                this.beans.frameworkOverrides.setTimeout(updateRowHeightFunc, 0);\n            }\n        };\n        const resizeObserverDestroyFunc = this.beans.resizeObserverService.observeResize(eDetailGui, checkRowSizeFunc);\n        this.addDestroyFunc(resizeObserverDestroyFunc);\n        checkRowSizeFunc();\n    }\n    createFullWidthParams(eRow, pinned) {\n        const params = {\n            fullWidth: true,\n            data: this.rowNode.data,\n            node: this.rowNode,\n            value: this.rowNode.key,\n            valueFormatted: this.rowNode.key,\n            rowIndex: this.rowNode.rowIndex,\n            api: this.gridOptionsService.api,\n            columnApi: this.gridOptionsService.columnApi,\n            context: this.gridOptionsService.context,\n            // these need to be taken out, as part of 'afterAttached' now\n            eGridCell: eRow,\n            eParentOfValue: eRow,\n            pinned: pinned,\n            addRenderedRowListener: this.addEventListener.bind(this),\n            registerRowDragger: (rowDraggerElement, dragStartPixels, value, suppressVisibilityChange) => this.addFullWidthRowDragging(rowDraggerElement, dragStartPixels, value, suppressVisibilityChange)\n        };\n        return params;\n    }\n    addFullWidthRowDragging(rowDraggerElement, dragStartPixels, value = '', suppressVisibilityChange) {\n        if (!this.isFullWidth()) {\n            return;\n        }\n        const rowDragComp = new RowDragComp(() => value, this.rowNode, undefined, rowDraggerElement, dragStartPixels, suppressVisibilityChange);\n        this.createManagedBean(rowDragComp, this.beans.context);\n    }\n    onUiLevelChanged() {\n        const newLevel = this.beans.rowCssClassCalculator.calculateRowLevel(this.rowNode);\n        if (this.rowLevel != newLevel) {\n            const classToAdd = 'ag-row-level-' + newLevel;\n            const classToRemove = 'ag-row-level-' + this.rowLevel;\n            this.allRowGuis.forEach(gui => {\n                gui.rowComp.addOrRemoveCssClass(classToAdd, true);\n                gui.rowComp.addOrRemoveCssClass(classToRemove, false);\n            });\n        }\n        this.rowLevel = newLevel;\n    }\n    isFirstRowOnPage() {\n        return this.rowNode.rowIndex === this.beans.paginationProxy.getPageFirstRow();\n    }\n    isLastRowOnPage() {\n        return this.rowNode.rowIndex === this.beans.paginationProxy.getPageLastRow();\n    }\n    onModelUpdated() {\n        this.refreshFirstAndLastRowStyles();\n    }\n    refreshFirstAndLastRowStyles() {\n        const newFirst = this.isFirstRowOnPage();\n        const newLast = this.isLastRowOnPage();\n        if (this.firstRowOnPage !== newFirst) {\n            this.firstRowOnPage = newFirst;\n            this.allRowGuis.forEach(gui => gui.rowComp.addOrRemoveCssClass('ag-row-first', newFirst));\n        }\n        if (this.lastRowOnPage !== newLast) {\n            this.lastRowOnPage = newLast;\n            this.allRowGuis.forEach(gui => gui.rowComp.addOrRemoveCssClass('ag-row-last', newLast));\n        }\n    }\n    stopEditing(cancel = false) {\n        // if we are already stopping row edit, there is\n        // no need to start this process again.\n        if (this.stoppingRowEdit) {\n            return;\n        }\n        const cellControls = this.getAllCellCtrls();\n        const isRowEdit = this.editingRow;\n        this.stoppingRowEdit = true;\n        let fireRowEditEvent = false;\n        for (const ctrl of cellControls) {\n            const valueChanged = ctrl.stopEditing(cancel);\n            if (isRowEdit && !cancel && !fireRowEditEvent && valueChanged) {\n                fireRowEditEvent = true;\n            }\n        }\n        if (fireRowEditEvent) {\n            const event = this.createRowEvent(Events.EVENT_ROW_VALUE_CHANGED);\n            this.beans.eventService.dispatchEvent(event);\n        }\n        if (isRowEdit) {\n            this.setEditingRow(false);\n        }\n        this.stoppingRowEdit = false;\n    }\n    setInlineEditingCss(editing) {\n        this.allRowGuis.forEach(gui => {\n            gui.rowComp.addOrRemoveCssClass(\"ag-row-inline-editing\", editing);\n            gui.rowComp.addOrRemoveCssClass(\"ag-row-not-inline-editing\", !editing);\n        });\n    }\n    setEditingRow(value) {\n        this.editingRow = value;\n        this.allRowGuis.forEach(gui => gui.rowComp.addOrRemoveCssClass('ag-row-editing', value));\n        const event = value ?\n            this.createRowEvent(Events.EVENT_ROW_EDITING_STARTED)\n            : this.createRowEvent(Events.EVENT_ROW_EDITING_STOPPED);\n        this.beans.eventService.dispatchEvent(event);\n    }\n    startRowEditing(key = null, sourceRenderedCell = null, event = null) {\n        // don't do it if already editing\n        if (this.editingRow) {\n            return;\n        }\n        const atLeastOneEditing = this.getAllCellCtrls().reduce((prev, cellCtrl) => {\n            const cellStartedEdit = cellCtrl === sourceRenderedCell;\n            if (cellStartedEdit) {\n                cellCtrl.startEditing(key, cellStartedEdit, event);\n            }\n            else {\n                cellCtrl.startEditing(null, cellStartedEdit, event);\n            }\n            if (prev) {\n                return true;\n            }\n            return cellCtrl.isEditing();\n        }, false);\n        if (atLeastOneEditing) {\n            this.setEditingRow(true);\n        }\n    }\n    getAllCellCtrls() {\n        if (this.leftCellCtrls.list.length === 0 && this.rightCellCtrls.list.length === 0) {\n            return this.centerCellCtrls.list;\n        }\n        const res = [...this.centerCellCtrls.list, ...this.leftCellCtrls.list, ...this.rightCellCtrls.list];\n        return res;\n    }\n    postProcessClassesFromGridOptions() {\n        const cssClasses = this.beans.rowCssClassCalculator.processClassesFromGridOptions(this.rowNode);\n        if (!cssClasses || !cssClasses.length) {\n            return;\n        }\n        cssClasses.forEach(classStr => {\n            this.allRowGuis.forEach(c => c.rowComp.addOrRemoveCssClass(classStr, true));\n        });\n    }\n    postProcessRowClassRules() {\n        this.beans.rowCssClassCalculator.processRowClassRules(this.rowNode, (className) => {\n            this.allRowGuis.forEach(gui => gui.rowComp.addOrRemoveCssClass(className, true));\n        }, (className) => {\n            this.allRowGuis.forEach(gui => gui.rowComp.addOrRemoveCssClass(className, false));\n        });\n    }\n    setStylesFromGridOptions(gui) {\n        const rowStyles = this.processStylesFromGridOptions();\n        this.forEachGui(gui, gui => gui.rowComp.setUserStyles(rowStyles));\n    }\n    getPinnedForContainer(rowContainerType) {\n        const pinned = rowContainerType === RowContainerType.LEFT\n            ? 'left'\n            : rowContainerType === RowContainerType.RIGHT\n                ? 'right'\n                : null;\n        return pinned;\n    }\n    getInitialRowClasses(rowContainerType) {\n        const pinned = this.getPinnedForContainer(rowContainerType);\n        const params = {\n            rowNode: this.rowNode,\n            rowFocused: this.rowFocused,\n            fadeRowIn: this.fadeInAnimation[rowContainerType],\n            rowIsEven: this.rowNode.rowIndex % 2 === 0,\n            rowLevel: this.rowLevel,\n            fullWidthRow: this.isFullWidth(),\n            firstRowOnPage: this.isFirstRowOnPage(),\n            lastRowOnPage: this.isLastRowOnPage(),\n            printLayout: this.printLayout,\n            expandable: this.rowNode.isExpandable(),\n            pinned: pinned\n        };\n        return this.beans.rowCssClassCalculator.getInitialRowClasses(params);\n    }\n    processStylesFromGridOptions() {\n        // part 1 - rowStyle\n        const rowStyle = this.gridOptionsService.get('rowStyle');\n        if (rowStyle && typeof rowStyle === 'function') {\n            console.warn('AG Grid: rowStyle should be an object of key/value styles, not be a function, use getRowStyle() instead');\n            return;\n        }\n        // part 1 - rowStyleFunc\n        const rowStyleFunc = this.gridOptionsService.getCallback('getRowStyle');\n        let rowStyleFuncResult;\n        if (rowStyleFunc) {\n            const params = {\n                data: this.rowNode.data,\n                node: this.rowNode,\n                rowIndex: this.rowNode.rowIndex\n            };\n            rowStyleFuncResult = rowStyleFunc(params);\n        }\n        return Object.assign({}, rowStyle, rowStyleFuncResult);\n    }\n    onRowSelected(gui) {\n        // Treat undefined as false, if we pass undefined down it gets treated as toggle class, rather than explicitly\n        // setting the required value\n        const selected = !!this.rowNode.isSelected();\n        this.forEachGui(gui, gui => {\n            gui.rowComp.addOrRemoveCssClass('ag-row-selected', selected);\n            setAriaSelected(gui.element, selected ? true : undefined);\n            const ariaLabel = this.createAriaLabel();\n            setAriaLabel(gui.element, ariaLabel == null ? '' : ariaLabel);\n        });\n    }\n    createAriaLabel() {\n        const selected = this.rowNode.isSelected();\n        if (selected && this.gridOptionsService.is('suppressRowDeselection')) {\n            return undefined;\n        }\n        const translate = this.beans.localeService.getLocaleTextFunc();\n        const label = translate(selected ? 'ariaRowDeselect' : 'ariaRowSelect', `Press SPACE to ${selected ? 'deselect' : 'select'} this row.`);\n        return label;\n    }\n    isUseAnimationFrameForCreate() {\n        return this.useAnimationFrameForCreate;\n    }\n    addHoverFunctionality(eRow) {\n        // because we use animation frames to do this, it's possible the row no longer exists\n        // by the time we get to add it\n        if (!this.active) {\n            return;\n        }\n        // because mouseenter and mouseleave do not propagate, we cannot listen on the gridPanel\n        // like we do for all the other mouse events.\n        // because of the pinning, we cannot simply add / remove the class based on the eRow. we\n        // have to check all eRow's (body & pinned). so the trick is if any of the rows gets a\n        // mouse hover, it sets such in the rowNode, and then all three reflect the change as\n        // all are listening for event on the row node.\n        // step 1 - add listener, to set flag on row node\n        this.addManagedListener(eRow, 'mouseenter', () => this.rowNode.onMouseEnter());\n        this.addManagedListener(eRow, 'mouseleave', () => this.rowNode.onMouseLeave());\n        // step 2 - listen for changes on row node (which any eRow can trigger)\n        this.addManagedListener(this.rowNode, RowNode.EVENT_MOUSE_ENTER, () => {\n            // if hover turned off, we don't add the class. we do this here so that if the application\n            // toggles this property mid way, we remove the hover form the last row, but we stop\n            // adding hovers from that point onwards. Also, do not highlight while dragging elements around.\n            if (!this.beans.dragService.isDragging() &&\n                !this.gridOptionsService.is('suppressRowHoverHighlight')) {\n                eRow.classList.add('ag-row-hover');\n                this.rowNode.setHovered(true);\n            }\n        });\n        this.addManagedListener(this.rowNode, RowNode.EVENT_MOUSE_LEAVE, () => {\n            eRow.classList.remove('ag-row-hover');\n            this.rowNode.setHovered(false);\n        });\n    }\n    // for animation, we don't want to animate entry or exit to a very far away pixel,\n    // otherwise the row would move so fast, it would appear to disappear. so this method\n    // moves the row closer to the viewport if it is far away, so the row slide in / out\n    // at a speed the user can see.\n    roundRowTopToBounds(rowTop) {\n        const gridBodyCon = this.beans.ctrlsService.getGridBodyCtrl();\n        const range = gridBodyCon.getScrollFeature().getVScrollPosition();\n        const minPixel = this.applyPaginationOffset(range.top, true) - 100;\n        const maxPixel = this.applyPaginationOffset(range.bottom, true) + 100;\n        return Math.min(Math.max(minPixel, rowTop), maxPixel);\n    }\n    getFrameworkOverrides() {\n        return this.beans.frameworkOverrides;\n    }\n    forEachGui(gui, callback) {\n        const list = gui ? [gui] : this.allRowGuis;\n        list.forEach(callback);\n    }\n    onRowHeightChanged(gui) {\n        // check for exists first - if the user is resetting the row height, then\n        // it will be null (or undefined) momentarily until the next time the flatten\n        // stage is called where the row will then update again with a new height\n        if (this.rowNode.rowHeight == null) {\n            return;\n        }\n        const rowHeight = this.rowNode.rowHeight;\n        const defaultRowHeight = this.beans.environment.getDefaultRowHeight();\n        const isHeightFromFunc = this.gridOptionsService.isGetRowHeightFunction();\n        const heightFromFunc = isHeightFromFunc ? this.gridOptionsService.getRowHeightForNode(this.rowNode).height : undefined;\n        const lineHeight = heightFromFunc ? `${Math.min(defaultRowHeight, heightFromFunc) - 2}px` : undefined;\n        this.forEachGui(gui, gui => {\n            gui.element.style.height = `${rowHeight}px`;\n            // If the row height is coming from a function, this means some rows can\n            // be smaller than the theme had intended. so we set --ag-line-height on\n            // the row, which is picked up by the theme CSS and is used in a calc\n            // for the CSS line-height property, which makes sure the line-height is\n            // not bigger than the row height, otherwise the row text would not fit.\n            // We do not use rowNode.rowHeight here, as this could be the result of autoHeight,\n            // and we found using the autoHeight result causes a loop, where changing the\n            // line-height them impacts the cell height, resulting in a new autoHeight,\n            // resulting in a new line-height and so on loop.\n            // const heightFromFunc = this.gridOptionsService.getRowHeightForNode(this.rowNode).height;\n            if (lineHeight) {\n                gui.element.style.setProperty('--ag-line-height', lineHeight);\n            }\n        });\n    }\n    addEventListener(eventType, listener) {\n        super.addEventListener(eventType, listener);\n    }\n    removeEventListener(eventType, listener) {\n        super.removeEventListener(eventType, listener);\n    }\n    // note - this is NOT called by context, as we don't wire / unwire the CellComp for performance reasons.\n    destroyFirstPass() {\n        this.active = false;\n        // why do we have this method? shouldn't everything below be added as a destroy func beside\n        // the corresponding create logic?\n        if (this.gridOptionsService.isAnimateRows()) {\n            this.setupRemoveAnimation();\n        }\n        this.rowNode.setHovered(false);\n        const event = this.createRowEvent(Events.EVENT_VIRTUAL_ROW_REMOVED);\n        this.dispatchEvent(event);\n        this.beans.eventService.dispatchEvent(event);\n        super.destroy();\n    }\n    setupRemoveAnimation() {\n        // we don't animate sticky rows\n        if (this.isSticky()) {\n            return;\n        }\n        const rowStillVisibleJustNotInViewport = this.rowNode.rowTop != null;\n        if (rowStillVisibleJustNotInViewport) {\n            // if the row is not rendered, but in viewport, it means it has moved,\n            // so we animate the row out. if the new location is very far away,\n            // the animation will be so fast the row will look like it's just disappeared,\n            // so instead we animate to a position just outside the viewport.\n            const rowTop = this.roundRowTopToBounds(this.rowNode.rowTop);\n            this.setRowTop(rowTop);\n        }\n        else {\n            this.allRowGuis.forEach(gui => gui.rowComp.addOrRemoveCssClass('ag-opacity-zero', true));\n        }\n    }\n    destroySecondPass() {\n        this.allRowGuis.length = 0;\n        const destroyCellCtrls = (ctrls) => {\n            ctrls.list.forEach(c => c.destroy());\n            return { list: [], map: {} };\n        };\n        this.centerCellCtrls = destroyCellCtrls(this.centerCellCtrls);\n        this.leftCellCtrls = destroyCellCtrls(this.leftCellCtrls);\n        this.rightCellCtrls = destroyCellCtrls(this.rightCellCtrls);\n    }\n    setFocusedClasses(gui) {\n        this.forEachGui(gui, gui => {\n            gui.rowComp.addOrRemoveCssClass('ag-row-focus', this.rowFocused);\n            gui.rowComp.addOrRemoveCssClass('ag-row-no-focus', !this.rowFocused);\n        });\n    }\n    onCellFocused() {\n        this.onCellFocusChanged();\n    }\n    onCellFocusCleared() {\n        this.onCellFocusChanged();\n    }\n    onCellFocusChanged() {\n        const rowFocused = this.beans.focusService.isRowFocused(this.rowNode.rowIndex, this.rowNode.rowPinned);\n        if (rowFocused !== this.rowFocused) {\n            this.rowFocused = rowFocused;\n            this.setFocusedClasses();\n        }\n        // if we are editing, then moving the focus out of a row will stop editing\n        if (!rowFocused && this.editingRow) {\n            this.stopEditing(false);\n        }\n    }\n    onPaginationChanged() {\n        const currentPage = this.beans.paginationProxy.getCurrentPage();\n        // it is possible this row is in the new page, but the page number has changed, which means\n        // it needs to reposition itself relative to the new page\n        if (this.paginationPage !== currentPage) {\n            this.paginationPage = currentPage;\n            this.onTopChanged();\n        }\n        this.refreshFirstAndLastRowStyles();\n    }\n    onTopChanged() {\n        this.setRowTop(this.rowNode.rowTop);\n    }\n    onPaginationPixelOffsetChanged() {\n        // the pixel offset is used when calculating rowTop to set on the row DIV\n        this.onTopChanged();\n    }\n    // applies pagination offset, eg if on second page, and page height is 500px, then removes\n    // 500px from the top position, so a row with rowTop 600px is displayed at location 100px.\n    // reverse will take the offset away rather than add.\n    applyPaginationOffset(topPx, reverse = false) {\n        if (this.rowNode.isRowPinned()) {\n            return topPx;\n        }\n        const pixelOffset = this.beans.paginationProxy.getPixelOffset();\n        const multiplier = reverse ? 1 : -1;\n        return topPx + (pixelOffset * multiplier);\n    }\n    setRowTop(pixels) {\n        // print layout uses normal flow layout for row positioning\n        if (this.printLayout) {\n            return;\n        }\n        // need to make sure rowTop is not null, as this can happen if the node was once\n        // visible (ie parent group was expanded) but is now not visible\n        if (exists(pixels)) {\n            const afterPaginationPixels = this.applyPaginationOffset(pixels);\n            const afterScalingPixels = this.rowNode.isRowPinned() ? afterPaginationPixels : this.beans.rowContainerHeightService.getRealPixelPosition(afterPaginationPixels);\n            const topPx = `${afterScalingPixels}px`;\n            this.setRowTopStyle(topPx);\n        }\n    }\n    // the top needs to be set into the DOM element when the element is created, not updated afterwards.\n    // otherwise the transition would not work, as it would be transitioning from zero (the unset value).\n    // for example, suppose a row that is outside the viewport, then user does a filter to remove other rows\n    // and this row now appears in the viewport, and the row moves up (ie it was under the viewport and not rendered,\n    // but now is in the viewport) then a new RowComp is created, however it should have it's position initialised\n    // to below the viewport, so the row will appear to animate up. if we didn't set the initial position at creation\n    // time, the row would animate down (ie from position zero).\n    getInitialRowTop(rowContainerType) {\n        const suppressRowTransform = this.gridOptionsService.is('suppressRowTransform');\n        return suppressRowTransform ? this.getInitialRowTopShared(rowContainerType) : undefined;\n    }\n    getInitialTransform(rowContainerType) {\n        const suppressRowTransform = this.gridOptionsService.is('suppressRowTransform');\n        return suppressRowTransform ? undefined : `translateY(${this.getInitialRowTopShared(rowContainerType)})`;\n    }\n    getInitialRowTopShared(rowContainerType) {\n        // print layout uses normal flow layout for row positioning\n        if (this.printLayout) {\n            return '';\n        }\n        let rowTop;\n        if (this.isSticky()) {\n            rowTop = this.rowNode.stickyRowTop;\n        }\n        else {\n            // if sliding in, we take the old row top. otherwise we just set the current row top.\n            const pixels = this.slideInAnimation[rowContainerType] ? this.roundRowTopToBounds(this.rowNode.oldRowTop) : this.rowNode.rowTop;\n            const afterPaginationPixels = this.applyPaginationOffset(pixels);\n            // we don't apply scaling if row is pinned\n            rowTop = this.rowNode.isRowPinned() ? afterPaginationPixels : this.beans.rowContainerHeightService.getRealPixelPosition(afterPaginationPixels);\n        }\n        return rowTop + 'px';\n    }\n    setRowTopStyle(topPx) {\n        const suppressRowTransform = this.gridOptionsService.is('suppressRowTransform');\n        this.allRowGuis.forEach(gui => suppressRowTransform ?\n            gui.rowComp.setTop(topPx) :\n            gui.rowComp.setTransform(`translateY(${topPx})`));\n    }\n    getRowNode() {\n        return this.rowNode;\n    }\n    getCellCtrl(column) {\n        // first up, check for cell directly linked to this column\n        let res = null;\n        this.getAllCellCtrls().forEach(cellCtrl => {\n            if (cellCtrl.getColumn() == column) {\n                res = cellCtrl;\n            }\n        });\n        if (res != null) {\n            return res;\n        }\n        // second up, if not found, then check for spanned cols.\n        // we do this second (and not at the same time) as this is\n        // more expensive, as spanning cols is a\n        // infrequently used feature so we don't need to do this most\n        // of the time\n        this.getAllCellCtrls().forEach(cellCtrl => {\n            if (cellCtrl.getColSpanningList().indexOf(column) >= 0) {\n                res = cellCtrl;\n            }\n        });\n        return res;\n    }\n    onRowIndexChanged() {\n        // we only bother updating if the rowIndex is present. if it is not present, it means this row\n        // is child of a group node, and the group node was closed, it's the only way to have no row index.\n        // when this happens, row is about to be de-rendered, so we don't care, rowComp is about to die!\n        if (this.rowNode.rowIndex != null) {\n            this.onCellFocusChanged();\n            this.updateRowIndexes();\n            this.postProcessCss();\n        }\n    }\n    updateRowIndexes(gui) {\n        const rowIndexStr = this.rowNode.getRowIndexString();\n        const headerRowCount = this.beans.headerNavigationService.getHeaderRowCount();\n        const rowIsEven = this.rowNode.rowIndex % 2 === 0;\n        const ariaRowIndex = headerRowCount + this.rowNode.rowIndex + 1;\n        this.forEachGui(gui, c => {\n            c.rowComp.setRowIndex(rowIndexStr);\n            c.rowComp.addOrRemoveCssClass('ag-row-even', rowIsEven);\n            c.rowComp.addOrRemoveCssClass('ag-row-odd', !rowIsEven);\n            setAriaRowIndex(c.element, ariaRowIndex);\n        });\n    }\n    // returns the pinned left container, either the normal one, or the embedded full with one if exists\n    getPinnedLeftRowElement() {\n        return this.leftGui ? this.leftGui.element : undefined;\n    }\n    // returns the pinned right container, either the normal one, or the embedded full with one if exists\n    getPinnedRightRowElement() {\n        return this.rightGui ? this.rightGui.element : undefined;\n    }\n    // returns the body container, either the normal one, or the embedded full with one if exists\n    getBodyRowElement() {\n        return this.centerGui ? this.centerGui.element : undefined;\n    }\n    // returns the full width container\n    getFullWidthRowElement() {\n        return this.fullWidthGui ? this.fullWidthGui.element : undefined;\n    }\n}\nRowCtrl.DOM_DATA_KEY_ROW_CTRL = 'renderedRow';\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1M = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass RowContainerEventsFeature extends BeanStub {\n    constructor(element) {\n        super();\n        this.element = element;\n    }\n    postConstruct() {\n        this.addKeyboardListeners();\n        this.addMouseListeners();\n        this.mockContextMenuForIPad();\n    }\n    addKeyboardListeners() {\n        const eventName = 'keydown';\n        const listener = this.processKeyboardEvent.bind(this, eventName);\n        this.addManagedListener(this.element, eventName, listener);\n    }\n    addMouseListeners() {\n        const mouseDownEvent = isEventSupported('touchstart') ? 'touchstart' : 'mousedown';\n        const eventNames = ['dblclick', 'contextmenu', 'mouseover', 'mouseout', 'click', mouseDownEvent];\n        eventNames.forEach(eventName => {\n            const listener = this.processMouseEvent.bind(this, eventName);\n            this.addManagedListener(this.element, eventName, listener);\n        });\n    }\n    processMouseEvent(eventName, mouseEvent) {\n        if (!this.mouseEventService.isEventFromThisGrid(mouseEvent) ||\n            isStopPropagationForAgGrid(mouseEvent)) {\n            return;\n        }\n        const rowComp = this.getRowForEvent(mouseEvent);\n        const cellCtrl = this.mouseEventService.getRenderedCellForEvent(mouseEvent);\n        if (eventName === \"contextmenu\") {\n            this.handleContextMenuMouseEvent(mouseEvent, null, rowComp, cellCtrl);\n        }\n        else {\n            if (cellCtrl) {\n                cellCtrl.onMouseEvent(eventName, mouseEvent);\n            }\n            if (rowComp) {\n                rowComp.onMouseEvent(eventName, mouseEvent);\n            }\n        }\n    }\n    mockContextMenuForIPad() {\n        // we do NOT want this when not in iPad, otherwise we will be doing\n        if (!isIOSUserAgent()) {\n            return;\n        }\n        const touchListener = new TouchListener(this.element);\n        const longTapListener = (event) => {\n            const rowComp = this.getRowForEvent(event.touchEvent);\n            const cellComp = this.mouseEventService.getRenderedCellForEvent(event.touchEvent);\n            this.handleContextMenuMouseEvent(null, event.touchEvent, rowComp, cellComp);\n        };\n        this.addManagedListener(touchListener, TouchListener.EVENT_LONG_TAP, longTapListener);\n        this.addDestroyFunc(() => touchListener.destroy());\n    }\n    getRowForEvent(event) {\n        let sourceElement = event.target;\n        while (sourceElement) {\n            const rowCon = this.gridOptionsService.getDomData(sourceElement, RowCtrl.DOM_DATA_KEY_ROW_CTRL);\n            if (rowCon) {\n                return rowCon;\n            }\n            sourceElement = sourceElement.parentElement;\n        }\n        return null;\n    }\n    handleContextMenuMouseEvent(mouseEvent, touchEvent, rowComp, cellCtrl) {\n        const rowNode = rowComp ? rowComp.getRowNode() : null;\n        const column = cellCtrl ? cellCtrl.getColumn() : null;\n        let value = null;\n        if (column) {\n            const event = mouseEvent ? mouseEvent : touchEvent;\n            cellCtrl.dispatchCellContextMenuEvent(event);\n            value = this.valueService.getValue(column, rowNode);\n        }\n        // if user clicked on a cell, anchor to that cell, otherwise anchor to the grid panel\n        const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n        const anchorToElement = cellCtrl ? cellCtrl.getGui() : gridBodyCon.getGridBodyElement();\n        if (this.contextMenuFactory) {\n            this.contextMenuFactory.onContextMenu(mouseEvent, touchEvent, rowNode, column, value, anchorToElement);\n        }\n    }\n    getControlsForEventTarget(target) {\n        return {\n            cellCtrl: getCtrlForEventTarget(this.gridOptionsService, target, CellCtrl.DOM_DATA_KEY_CELL_CTRL),\n            rowCtrl: getCtrlForEventTarget(this.gridOptionsService, target, RowCtrl.DOM_DATA_KEY_ROW_CTRL)\n        };\n    }\n    processKeyboardEvent(eventName, keyboardEvent) {\n        const { cellCtrl, rowCtrl } = this.getControlsForEventTarget(keyboardEvent.target);\n        if (keyboardEvent.defaultPrevented) {\n            return;\n        }\n        if (cellCtrl) {\n            this.processCellKeyboardEvent(cellCtrl, eventName, keyboardEvent);\n        }\n        else if (rowCtrl && rowCtrl.isFullWidth()) {\n            this.processFullWidthRowKeyboardEvent(rowCtrl, eventName, keyboardEvent);\n        }\n    }\n    processCellKeyboardEvent(cellCtrl, eventName, keyboardEvent) {\n        const rowNode = cellCtrl.getRowNode();\n        const column = cellCtrl.getColumn();\n        const editing = cellCtrl.isEditing();\n        const gridProcessingAllowed = !isUserSuppressingKeyboardEvent(this.gridOptionsService, keyboardEvent, rowNode, column, editing);\n        if (gridProcessingAllowed) {\n            if (eventName === 'keydown') {\n                // first see if it's a scroll key, page up / down, home / end etc\n                const wasScrollKey = !editing && this.navigationService.handlePageScrollingKey(keyboardEvent);\n                // if not a scroll key, then we pass onto cell\n                if (!wasScrollKey) {\n                    cellCtrl.onKeyDown(keyboardEvent);\n                }\n                // perform clipboard and undo / redo operations\n                this.doGridOperations(keyboardEvent, cellCtrl.isEditing());\n                if (isEventFromPrintableCharacter(keyboardEvent)) {\n                    cellCtrl.processCharacter(keyboardEvent);\n                }\n            }\n        }\n        if (eventName === 'keydown') {\n            const cellKeyDownEvent = cellCtrl.createEvent(keyboardEvent, Events.EVENT_CELL_KEY_DOWN);\n            this.eventService.dispatchEvent(cellKeyDownEvent);\n        }\n    }\n    processFullWidthRowKeyboardEvent(rowComp, eventName, keyboardEvent) {\n        const rowNode = rowComp.getRowNode();\n        const focusedCell = this.focusService.getFocusedCell();\n        const column = (focusedCell && focusedCell.column);\n        const gridProcessingAllowed = !isUserSuppressingKeyboardEvent(this.gridOptionsService, keyboardEvent, rowNode, column, false);\n        if (gridProcessingAllowed) {\n            const key = keyboardEvent.key;\n            if (eventName === 'keydown') {\n                switch (key) {\n                    case KeyCode.PAGE_HOME:\n                    case KeyCode.PAGE_END:\n                        this.navigationService.handlePageScrollingKey(keyboardEvent);\n                        break;\n                    case KeyCode.UP:\n                    case KeyCode.DOWN:\n                        rowComp.onKeyboardNavigate(keyboardEvent);\n                        break;\n                    case KeyCode.TAB:\n                        rowComp.onTabKeyDown(keyboardEvent);\n                        break;\n                }\n            }\n        }\n        if (eventName === 'keydown') {\n            const cellKeyDownEvent = rowComp.createRowEvent(Events.EVENT_CELL_KEY_DOWN, keyboardEvent);\n            this.eventService.dispatchEvent(cellKeyDownEvent);\n        }\n    }\n    doGridOperations(keyboardEvent, editing) {\n        // check if ctrl or meta key pressed\n        if (!keyboardEvent.ctrlKey && !keyboardEvent.metaKey) {\n            return;\n        }\n        // if the cell the event came from is editing, then we do not\n        // want to do the default shortcut keys, otherwise the editor\n        // (eg a text field) would not be able to do the normal cut/copy/paste\n        if (editing) {\n            return;\n        }\n        // for copy / paste, we don't want to execute when the event\n        // was from a child grid (happens in master detail)\n        if (!this.mouseEventService.isEventFromThisGrid(keyboardEvent)) {\n            return;\n        }\n        const keyCode = normaliseQwertyAzerty(keyboardEvent);\n        if (keyCode === KeyCode.A) {\n            return this.onCtrlAndA(keyboardEvent);\n        }\n        if (keyCode === KeyCode.C) {\n            return this.onCtrlAndC(keyboardEvent);\n        }\n        if (keyCode === KeyCode.D) {\n            return this.onCtrlAndD(keyboardEvent);\n        }\n        if (keyCode === KeyCode.V) {\n            return this.onCtrlAndV(keyboardEvent);\n        }\n        if (keyCode === KeyCode.X) {\n            return this.onCtrlAndX(keyboardEvent);\n        }\n        if (keyCode === KeyCode.Y) {\n            return this.onCtrlAndY();\n        }\n        if (keyCode === KeyCode.Z) {\n            return this.onCtrlAndZ(keyboardEvent);\n        }\n    }\n    onCtrlAndA(event) {\n        const { pinnedRowModel, paginationProxy, rangeService } = this;\n        if (rangeService && paginationProxy.isRowsToRender()) {\n            const [isEmptyPinnedTop, isEmptyPinnedBottom] = [\n                pinnedRowModel.isEmpty('top'),\n                pinnedRowModel.isEmpty('bottom')\n            ];\n            const floatingStart = isEmptyPinnedTop ? null : 'top';\n            let floatingEnd;\n            let rowEnd;\n            if (isEmptyPinnedBottom) {\n                floatingEnd = null;\n                rowEnd = this.paginationProxy.getRowCount() - 1;\n            }\n            else {\n                floatingEnd = 'bottom';\n                rowEnd = pinnedRowModel.getPinnedBottomRowData().length - 1;\n            }\n            const allDisplayedColumns = this.columnModel.getAllDisplayedColumns();\n            if (missingOrEmpty(allDisplayedColumns)) {\n                return;\n            }\n            rangeService.setCellRange({\n                rowStartIndex: 0,\n                rowStartPinned: floatingStart,\n                rowEndIndex: rowEnd,\n                rowEndPinned: floatingEnd,\n                columnStart: allDisplayedColumns[0],\n                columnEnd: last(allDisplayedColumns)\n            });\n        }\n        event.preventDefault();\n    }\n    onCtrlAndC(event) {\n        if (!this.clipboardService || this.gridOptionsService.is('enableCellTextSelection')) {\n            return;\n        }\n        const { cellCtrl, rowCtrl } = this.getControlsForEventTarget(event.target);\n        if ((cellCtrl === null || cellCtrl === void 0 ? void 0 : cellCtrl.isEditing()) || (rowCtrl === null || rowCtrl === void 0 ? void 0 : rowCtrl.isEditing())) {\n            return;\n        }\n        event.preventDefault();\n        this.clipboardService.copyToClipboard();\n    }\n    onCtrlAndX(event) {\n        if (!this.clipboardService ||\n            this.gridOptionsService.is('enableCellTextSelection') ||\n            this.gridOptionsService.is('suppressCutToClipboard')) {\n            return;\n        }\n        const { cellCtrl, rowCtrl } = this.getControlsForEventTarget(event.target);\n        if ((cellCtrl === null || cellCtrl === void 0 ? void 0 : cellCtrl.isEditing()) || (rowCtrl === null || rowCtrl === void 0 ? void 0 : rowCtrl.isEditing())) {\n            return;\n        }\n        event.preventDefault();\n        this.clipboardService.cutToClipboard(undefined, 'ui');\n    }\n    onCtrlAndV(event) {\n        const { cellCtrl, rowCtrl } = this.getControlsForEventTarget(event.target);\n        if ((cellCtrl === null || cellCtrl === void 0 ? void 0 : cellCtrl.isEditing()) || (rowCtrl === null || rowCtrl === void 0 ? void 0 : rowCtrl.isEditing())) {\n            return;\n        }\n        if (this.clipboardService && !this.gridOptionsService.is('suppressClipboardPaste')) {\n            this.clipboardService.pasteFromClipboard();\n        }\n    }\n    onCtrlAndD(event) {\n        if (this.clipboardService && !this.gridOptionsService.is('suppressClipboardPaste')) {\n            this.clipboardService.copyRangeDown();\n        }\n        event.preventDefault();\n    }\n    onCtrlAndZ(event) {\n        if (!this.gridOptionsService.is('undoRedoCellEditing')) {\n            return;\n        }\n        event.preventDefault();\n        if (event.shiftKey) {\n            this.undoRedoService.redo('ui');\n        }\n        else {\n            this.undoRedoService.undo('ui');\n        }\n    }\n    onCtrlAndY() {\n        this.undoRedoService.redo('ui');\n    }\n}\n__decorate$1M([\n    Autowired('mouseEventService')\n], RowContainerEventsFeature.prototype, \"mouseEventService\", void 0);\n__decorate$1M([\n    Autowired('valueService')\n], RowContainerEventsFeature.prototype, \"valueService\", void 0);\n__decorate$1M([\n    Optional('contextMenuFactory')\n], RowContainerEventsFeature.prototype, \"contextMenuFactory\", void 0);\n__decorate$1M([\n    Autowired('ctrlsService')\n], RowContainerEventsFeature.prototype, \"ctrlsService\", void 0);\n__decorate$1M([\n    Autowired('navigationService')\n], RowContainerEventsFeature.prototype, \"navigationService\", void 0);\n__decorate$1M([\n    Autowired('focusService')\n], RowContainerEventsFeature.prototype, \"focusService\", void 0);\n__decorate$1M([\n    Autowired('undoRedoService')\n], RowContainerEventsFeature.prototype, \"undoRedoService\", void 0);\n__decorate$1M([\n    Autowired('columnModel')\n], RowContainerEventsFeature.prototype, \"columnModel\", void 0);\n__decorate$1M([\n    Autowired('paginationProxy')\n], RowContainerEventsFeature.prototype, \"paginationProxy\", void 0);\n__decorate$1M([\n    Autowired('pinnedRowModel')\n], RowContainerEventsFeature.prototype, \"pinnedRowModel\", void 0);\n__decorate$1M([\n    Optional('rangeService')\n], RowContainerEventsFeature.prototype, \"rangeService\", void 0);\n__decorate$1M([\n    Optional('clipboardService')\n], RowContainerEventsFeature.prototype, \"clipboardService\", void 0);\n__decorate$1M([\n    PostConstruct\n], RowContainerEventsFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1L = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// listens to changes in the center viewport size, for column and row virtualisation,\n// and adjusts grid as necessary. there are two viewports, one for horizontal and one for\n// vertical scrolling.\nclass ViewportSizeFeature extends BeanStub {\n    constructor(centerContainerCtrl) {\n        super();\n        this.centerContainerCtrl = centerContainerCtrl;\n    }\n    postConstruct() {\n        this.ctrlsService.whenReady(() => {\n            this.gridBodyCtrl = this.ctrlsService.getGridBodyCtrl();\n            this.listenForResize();\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_SCROLLBAR_WIDTH_CHANGED, this.onScrollbarWidthChanged.bind(this));\n    }\n    listenForResize() {\n        const listener = () => this.onCenterViewportResized();\n        // centerContainer gets horizontal resizes\n        this.centerContainerCtrl.registerViewportResizeListener(listener);\n        // eBodyViewport gets vertical resizes\n        this.gridBodyCtrl.registerBodyViewportResizeListener(listener);\n    }\n    onScrollbarWidthChanged() {\n        this.checkViewportAndScrolls();\n    }\n    onCenterViewportResized() {\n        if (this.centerContainerCtrl.isViewportVisible()) {\n            this.checkViewportAndScrolls();\n            const newWidth = this.centerContainerCtrl.getCenterWidth();\n            if (newWidth !== this.centerWidth) {\n                this.centerWidth = newWidth;\n                this.columnModel.refreshFlexedColumns({ viewportWidth: this.centerWidth, updateBodyWidths: true, fireResizedEvent: true });\n            }\n        }\n        else {\n            this.bodyHeight = 0;\n        }\n    }\n    // gets called every time the viewport size changes. we use this to check visibility of scrollbars\n    // in the grid panel, and also to check size and position of viewport for row and column virtualisation.\n    checkViewportAndScrolls() {\n        // results in updating anything that depends on scroll showing\n        this.updateScrollVisibleService();\n        // fires event if height changes, used by PaginationService, HeightScalerService, RowRenderer\n        this.checkBodyHeight();\n        // check for virtual columns for ColumnController\n        this.onHorizontalViewportChanged();\n        this.gridBodyCtrl.getScrollFeature().checkScrollLeft();\n    }\n    getBodyHeight() {\n        return this.bodyHeight;\n    }\n    checkBodyHeight() {\n        const eBodyViewport = this.gridBodyCtrl.getBodyViewportElement();\n        const bodyHeight = getInnerHeight(eBodyViewport);\n        if (this.bodyHeight !== bodyHeight) {\n            this.bodyHeight = bodyHeight;\n            const event = {\n                type: Events.EVENT_BODY_HEIGHT_CHANGED\n            };\n            this.eventService.dispatchEvent(event);\n        }\n    }\n    updateScrollVisibleService() {\n        // because of column animation (which takes 200ms), we have to do this twice.\n        // eg if user removes cols anywhere except at the RHS, then the cols on the RHS\n        // will animate to the left to fill the gap. this animation means just after\n        // the cols are removed, the remaining cols are still in the original location\n        // at the start of the animation, so pre animation the H scrollbar is still needed,\n        // but post animation it is not.\n        this.updateScrollVisibleServiceImpl();\n        setTimeout(this.updateScrollVisibleServiceImpl.bind(this), 500);\n    }\n    updateScrollVisibleServiceImpl() {\n        const params = {\n            horizontalScrollShowing: this.isHorizontalScrollShowing(),\n            verticalScrollShowing: this.gridBodyCtrl.isVerticalScrollShowing()\n        };\n        this.scrollVisibleService.setScrollsVisible(params);\n    }\n    isHorizontalScrollShowing() {\n        return this.centerContainerCtrl.isHorizontalScrollShowing();\n    }\n    // this gets called whenever a change in the viewport, so we can inform column controller it has to work\n    // out the virtual columns again. gets called from following locations:\n    // + ensureColVisible, scroll, init, layoutChanged, displayedColumnsChanged\n    onHorizontalViewportChanged() {\n        const scrollWidth = this.centerContainerCtrl.getCenterWidth();\n        const scrollPosition = this.centerContainerCtrl.getViewportScrollLeft();\n        this.columnModel.setViewportPosition(scrollWidth, scrollPosition);\n    }\n}\n__decorate$1L([\n    Autowired('ctrlsService')\n], ViewportSizeFeature.prototype, \"ctrlsService\", void 0);\n__decorate$1L([\n    Autowired('columnModel')\n], ViewportSizeFeature.prototype, \"columnModel\", void 0);\n__decorate$1L([\n    Autowired('scrollVisibleService')\n], ViewportSizeFeature.prototype, \"scrollVisibleService\", void 0);\n__decorate$1L([\n    PostConstruct\n], ViewportSizeFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1K = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass SetPinnedLeftWidthFeature extends BeanStub {\n    constructor(element) {\n        super();\n        this.element = element;\n    }\n    postConstruct() {\n        this.addManagedListener(this.eventService, Events.EVENT_LEFT_PINNED_WIDTH_CHANGED, this.onPinnedLeftWidthChanged.bind(this));\n    }\n    onPinnedLeftWidthChanged() {\n        const leftWidth = this.pinnedWidthService.getPinnedLeftWidth();\n        const displayed = leftWidth > 0;\n        setDisplayed(this.element, displayed);\n        setFixedWidth(this.element, leftWidth);\n    }\n    getWidth() {\n        return this.pinnedWidthService.getPinnedLeftWidth();\n    }\n}\n__decorate$1K([\n    Autowired('pinnedWidthService')\n], SetPinnedLeftWidthFeature.prototype, \"pinnedWidthService\", void 0);\n__decorate$1K([\n    PostConstruct\n], SetPinnedLeftWidthFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1J = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass SetPinnedRightWidthFeature extends BeanStub {\n    constructor(element) {\n        super();\n        this.element = element;\n    }\n    postConstruct() {\n        this.addManagedListener(this.eventService, Events.EVENT_RIGHT_PINNED_WIDTH_CHANGED, this.onPinnedRightWidthChanged.bind(this));\n    }\n    onPinnedRightWidthChanged() {\n        const rightWidth = this.pinnedWidthService.getPinnedRightWidth();\n        const displayed = rightWidth > 0;\n        setDisplayed(this.element, displayed);\n        setFixedWidth(this.element, rightWidth);\n    }\n    getWidth() {\n        return this.pinnedWidthService.getPinnedRightWidth();\n    }\n}\n__decorate$1J([\n    Autowired('pinnedWidthService')\n], SetPinnedRightWidthFeature.prototype, \"pinnedWidthService\", void 0);\n__decorate$1J([\n    PostConstruct\n], SetPinnedRightWidthFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1I = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass SetHeightFeature extends BeanStub {\n    constructor(eContainer, eWrapper) {\n        super();\n        this.eContainer = eContainer;\n        this.eWrapper = eWrapper;\n    }\n    postConstruct() {\n        this.addManagedListener(this.eventService, Events.EVENT_ROW_CONTAINER_HEIGHT_CHANGED, this.onHeightChanged.bind(this));\n    }\n    onHeightChanged() {\n        const height = this.maxDivHeightScaler.getUiContainerHeight();\n        const heightString = height != null ? `${height}px` : ``;\n        this.eContainer.style.height = heightString;\n        if (this.eWrapper) {\n            this.eWrapper.style.height = heightString;\n        }\n    }\n}\n__decorate$1I([\n    Autowired(\"rowContainerHeightService\")\n], SetHeightFeature.prototype, \"maxDivHeightScaler\", void 0);\n__decorate$1I([\n    PostConstruct\n], SetHeightFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1H = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass DragListenerFeature extends BeanStub {\n    constructor(eContainer) {\n        super();\n        this.eContainer = eContainer;\n    }\n    postConstruct() {\n        if (!this.gridOptionsService.isEnableRangeSelection() || // no range selection if no property\n            missing(this.rangeService) // no range selection if not enterprise version\n        ) {\n            return;\n        }\n        const params = {\n            eElement: this.eContainer,\n            onDragStart: this.rangeService.onDragStart.bind(this.rangeService),\n            onDragStop: this.rangeService.onDragStop.bind(this.rangeService),\n            onDragging: this.rangeService.onDragging.bind(this.rangeService)\n        };\n        this.dragService.addDragSource(params);\n        this.addDestroyFunc(() => this.dragService.removeDragSource(params));\n    }\n}\n__decorate$1H([\n    Optional('rangeService')\n], DragListenerFeature.prototype, \"rangeService\", void 0);\n__decorate$1H([\n    Autowired('dragService')\n], DragListenerFeature.prototype, \"dragService\", void 0);\n__decorate$1H([\n    PostConstruct\n], DragListenerFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1G = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass CenterWidthFeature extends BeanStub {\n    constructor(callback, addSpacer = false) {\n        super();\n        this.callback = callback;\n        this.addSpacer = addSpacer;\n    }\n    postConstruct() {\n        const listener = this.setWidth.bind(this);\n        this.addManagedPropertyListener('domLayout', listener);\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_CHANGED, listener);\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED, listener);\n        this.addManagedListener(this.eventService, Events.EVENT_LEFT_PINNED_WIDTH_CHANGED, listener);\n        if (this.addSpacer) {\n            this.addManagedListener(this.eventService, Events.EVENT_RIGHT_PINNED_WIDTH_CHANGED, listener);\n            this.addManagedListener(this.eventService, Events.EVENT_SCROLL_VISIBILITY_CHANGED, listener);\n            this.addManagedListener(this.eventService, Events.EVENT_SCROLLBAR_WIDTH_CHANGED, listener);\n        }\n        this.setWidth();\n    }\n    setWidth() {\n        const { columnModel } = this;\n        const printLayout = this.gridOptionsService.isDomLayout('print');\n        const centerWidth = columnModel.getBodyContainerWidth();\n        const leftWidth = columnModel.getDisplayedColumnsLeftWidth();\n        const rightWidth = columnModel.getDisplayedColumnsRightWidth();\n        let totalWidth;\n        if (printLayout) {\n            totalWidth = centerWidth + leftWidth + rightWidth;\n        }\n        else {\n            totalWidth = centerWidth;\n            if (this.addSpacer) {\n                const relevantWidth = this.gridOptionsService.is('enableRtl') ? leftWidth : rightWidth;\n                if (relevantWidth === 0 && this.scrollVisibleService.isVerticalScrollShowing()) {\n                    totalWidth += this.gridOptionsService.getScrollbarWidth();\n                }\n            }\n        }\n        this.callback(totalWidth);\n    }\n}\n__decorate$1G([\n    Autowired('columnModel')\n], CenterWidthFeature.prototype, \"columnModel\", void 0);\n__decorate$1G([\n    Autowired('scrollVisibleService')\n], CenterWidthFeature.prototype, \"scrollVisibleService\", void 0);\n__decorate$1G([\n    PostConstruct\n], CenterWidthFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1F = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar RowContainerName;\n(function (RowContainerName) {\n    RowContainerName[\"LEFT\"] = \"left\";\n    RowContainerName[\"RIGHT\"] = \"right\";\n    RowContainerName[\"CENTER\"] = \"center\";\n    RowContainerName[\"FULL_WIDTH\"] = \"fullWidth\";\n    RowContainerName[\"TOP_LEFT\"] = \"topLeft\";\n    RowContainerName[\"TOP_RIGHT\"] = \"topRight\";\n    RowContainerName[\"TOP_CENTER\"] = \"topCenter\";\n    RowContainerName[\"TOP_FULL_WIDTH\"] = \"topFullWidth\";\n    RowContainerName[\"STICKY_TOP_LEFT\"] = \"stickyTopLeft\";\n    RowContainerName[\"STICKY_TOP_RIGHT\"] = \"stickyTopRight\";\n    RowContainerName[\"STICKY_TOP_CENTER\"] = \"stickyTopCenter\";\n    RowContainerName[\"STICKY_TOP_FULL_WIDTH\"] = \"stickyTopFullWidth\";\n    RowContainerName[\"BOTTOM_LEFT\"] = \"bottomLeft\";\n    RowContainerName[\"BOTTOM_RIGHT\"] = \"bottomRight\";\n    RowContainerName[\"BOTTOM_CENTER\"] = \"bottomCenter\";\n    RowContainerName[\"BOTTOM_FULL_WIDTH\"] = \"bottomFullWidth\";\n})(RowContainerName || (RowContainerName = {}));\nvar RowContainerType;\n(function (RowContainerType) {\n    RowContainerType[\"LEFT\"] = \"left\";\n    RowContainerType[\"RIGHT\"] = \"right\";\n    RowContainerType[\"CENTER\"] = \"center\";\n    RowContainerType[\"FULL_WIDTH\"] = \"fullWidth\";\n})(RowContainerType || (RowContainerType = {}));\nfunction getRowContainerTypeForName(name) {\n    switch (name) {\n        case RowContainerName.CENTER:\n        case RowContainerName.TOP_CENTER:\n        case RowContainerName.STICKY_TOP_CENTER:\n        case RowContainerName.BOTTOM_CENTER:\n            return RowContainerType.CENTER;\n        case RowContainerName.LEFT:\n        case RowContainerName.TOP_LEFT:\n        case RowContainerName.STICKY_TOP_LEFT:\n        case RowContainerName.BOTTOM_LEFT:\n            return RowContainerType.LEFT;\n        case RowContainerName.RIGHT:\n        case RowContainerName.TOP_RIGHT:\n        case RowContainerName.STICKY_TOP_RIGHT:\n        case RowContainerName.BOTTOM_RIGHT:\n            return RowContainerType.RIGHT;\n        case RowContainerName.FULL_WIDTH:\n        case RowContainerName.TOP_FULL_WIDTH:\n        case RowContainerName.STICKY_TOP_FULL_WIDTH:\n        case RowContainerName.BOTTOM_FULL_WIDTH:\n            return RowContainerType.FULL_WIDTH;\n        default:\n            throw Error('Invalid Row Container Type');\n    }\n}\nconst ContainerCssClasses = convertToMap([\n    [RowContainerName.CENTER, 'ag-center-cols-container'],\n    [RowContainerName.LEFT, 'ag-pinned-left-cols-container'],\n    [RowContainerName.RIGHT, 'ag-pinned-right-cols-container'],\n    [RowContainerName.FULL_WIDTH, 'ag-full-width-container'],\n    [RowContainerName.TOP_CENTER, 'ag-floating-top-container'],\n    [RowContainerName.TOP_LEFT, 'ag-pinned-left-floating-top'],\n    [RowContainerName.TOP_RIGHT, 'ag-pinned-right-floating-top'],\n    [RowContainerName.TOP_FULL_WIDTH, 'ag-floating-top-full-width-container'],\n    [RowContainerName.STICKY_TOP_CENTER, 'ag-sticky-top-container'],\n    [RowContainerName.STICKY_TOP_LEFT, 'ag-pinned-left-sticky-top'],\n    [RowContainerName.STICKY_TOP_RIGHT, 'ag-pinned-right-sticky-top'],\n    [RowContainerName.STICKY_TOP_FULL_WIDTH, 'ag-sticky-top-full-width-container'],\n    [RowContainerName.BOTTOM_CENTER, 'ag-floating-bottom-container'],\n    [RowContainerName.BOTTOM_LEFT, 'ag-pinned-left-floating-bottom'],\n    [RowContainerName.BOTTOM_RIGHT, 'ag-pinned-right-floating-bottom'],\n    [RowContainerName.BOTTOM_FULL_WIDTH, 'ag-floating-bottom-full-width-container'],\n]);\nconst ViewportCssClasses = convertToMap([\n    [RowContainerName.CENTER, 'ag-center-cols-viewport'],\n    [RowContainerName.TOP_CENTER, 'ag-floating-top-viewport'],\n    [RowContainerName.STICKY_TOP_CENTER, 'ag-sticky-top-viewport'],\n    [RowContainerName.BOTTOM_CENTER, 'ag-floating-bottom-viewport'],\n]);\nconst WrapperCssClasses = convertToMap([\n    [RowContainerName.CENTER, 'ag-center-cols-clipper'],\n]);\nclass RowContainerCtrl extends BeanStub {\n    constructor(name) {\n        super();\n        this.visible = true;\n        // Maintaining a constant reference enables optimization in React.\n        this.EMPTY_CTRLS = [];\n        this.name = name;\n        this.isFullWithContainer =\n            this.name === RowContainerName.TOP_FULL_WIDTH\n                || this.name === RowContainerName.STICKY_TOP_FULL_WIDTH\n                || this.name === RowContainerName.BOTTOM_FULL_WIDTH\n                || this.name === RowContainerName.FULL_WIDTH;\n    }\n    static getRowContainerCssClasses(name) {\n        const containerClass = ContainerCssClasses.get(name);\n        const viewportClass = ViewportCssClasses.get(name);\n        const wrapperClass = WrapperCssClasses.get(name);\n        return { container: containerClass, viewport: viewportClass, wrapper: wrapperClass };\n    }\n    static getPinned(name) {\n        switch (name) {\n            case RowContainerName.BOTTOM_LEFT:\n            case RowContainerName.TOP_LEFT:\n            case RowContainerName.STICKY_TOP_LEFT:\n            case RowContainerName.LEFT:\n                return 'left';\n            case RowContainerName.BOTTOM_RIGHT:\n            case RowContainerName.TOP_RIGHT:\n            case RowContainerName.STICKY_TOP_RIGHT:\n            case RowContainerName.RIGHT:\n                return 'right';\n            default:\n                return null;\n        }\n    }\n    postConstruct() {\n        this.enableRtl = this.gridOptionsService.is('enableRtl');\n        this.embedFullWidthRows = this.gridOptionsService.is('embedFullWidthRows');\n        this.forContainers([RowContainerName.CENTER], () => this.viewportSizeFeature = this.createManagedBean(new ViewportSizeFeature(this)));\n    }\n    registerWithCtrlsService() {\n        switch (this.name) {\n            case RowContainerName.CENTER:\n                this.ctrlsService.registerCenterRowContainerCtrl(this);\n                break;\n            case RowContainerName.LEFT:\n                this.ctrlsService.registerLeftRowContainerCtrl(this);\n                break;\n            case RowContainerName.RIGHT:\n                this.ctrlsService.registerRightRowContainerCtrl(this);\n                break;\n            case RowContainerName.TOP_CENTER:\n                this.ctrlsService.registerTopCenterRowContainerCtrl(this);\n                break;\n            case RowContainerName.TOP_LEFT:\n                this.ctrlsService.registerTopLeftRowContainerCon(this);\n                break;\n            case RowContainerName.TOP_RIGHT:\n                this.ctrlsService.registerTopRightRowContainerCtrl(this);\n                break;\n            case RowContainerName.STICKY_TOP_CENTER:\n                this.ctrlsService.registerStickyTopCenterRowContainerCtrl(this);\n                break;\n            case RowContainerName.STICKY_TOP_LEFT:\n                this.ctrlsService.registerStickyTopLeftRowContainerCon(this);\n                break;\n            case RowContainerName.STICKY_TOP_RIGHT:\n                this.ctrlsService.registerStickyTopRightRowContainerCtrl(this);\n                break;\n            case RowContainerName.BOTTOM_CENTER:\n                this.ctrlsService.registerBottomCenterRowContainerCtrl(this);\n                break;\n            case RowContainerName.BOTTOM_LEFT:\n                this.ctrlsService.registerBottomLeftRowContainerCtrl(this);\n                break;\n            case RowContainerName.BOTTOM_RIGHT:\n                this.ctrlsService.registerBottomRightRowContainerCtrl(this);\n                break;\n        }\n    }\n    forContainers(names, callback) {\n        if (names.indexOf(this.name) >= 0) {\n            callback();\n        }\n    }\n    getContainerElement() {\n        return this.eContainer;\n    }\n    getViewportSizeFeature() {\n        return this.viewportSizeFeature;\n    }\n    setComp(view, eContainer, eViewport, eWrapper) {\n        this.comp = view;\n        this.eContainer = eContainer;\n        this.eViewport = eViewport;\n        this.eWrapper = eWrapper;\n        this.createManagedBean(new RowContainerEventsFeature(this.eContainer));\n        this.addPreventScrollWhileDragging();\n        this.listenOnDomOrder();\n        this.stopHScrollOnPinnedRows();\n        const allTopNoFW = [RowContainerName.TOP_CENTER, RowContainerName.TOP_LEFT, RowContainerName.TOP_RIGHT];\n        const allStickyTopNoFW = [RowContainerName.STICKY_TOP_CENTER, RowContainerName.STICKY_TOP_LEFT, RowContainerName.STICKY_TOP_RIGHT];\n        const allBottomNoFW = [RowContainerName.BOTTOM_CENTER, RowContainerName.BOTTOM_LEFT, RowContainerName.BOTTOM_RIGHT];\n        const allMiddleNoFW = [RowContainerName.CENTER, RowContainerName.LEFT, RowContainerName.RIGHT];\n        const allNoFW = [...allTopNoFW, ...allBottomNoFW, ...allMiddleNoFW, ...allStickyTopNoFW];\n        const allMiddle = [RowContainerName.CENTER, RowContainerName.LEFT, RowContainerName.RIGHT, RowContainerName.FULL_WIDTH];\n        const allCenter = [RowContainerName.CENTER, RowContainerName.TOP_CENTER, RowContainerName.STICKY_TOP_CENTER, RowContainerName.BOTTOM_CENTER];\n        const allLeft = [RowContainerName.LEFT, RowContainerName.BOTTOM_LEFT, RowContainerName.TOP_LEFT, RowContainerName.STICKY_TOP_LEFT];\n        const allRight = [RowContainerName.RIGHT, RowContainerName.BOTTOM_RIGHT, RowContainerName.TOP_RIGHT, RowContainerName.STICKY_TOP_RIGHT];\n        this.forContainers(allLeft, () => {\n            this.pinnedWidthFeature = this.createManagedBean(new SetPinnedLeftWidthFeature(this.eContainer));\n            this.addManagedListener(this.eventService, Events.EVENT_LEFT_PINNED_WIDTH_CHANGED, () => this.onPinnedWidthChanged());\n        });\n        this.forContainers(allRight, () => {\n            this.pinnedWidthFeature = this.createManagedBean(new SetPinnedRightWidthFeature(this.eContainer));\n            this.addManagedListener(this.eventService, Events.EVENT_RIGHT_PINNED_WIDTH_CHANGED, () => this.onPinnedWidthChanged());\n        });\n        this.forContainers(allMiddle, () => this.createManagedBean(new SetHeightFeature(this.eContainer, this.eWrapper)));\n        this.forContainers(allNoFW, () => this.createManagedBean(new DragListenerFeature(this.eContainer)));\n        this.forContainers(allCenter, () => this.createManagedBean(new CenterWidthFeature(width => this.comp.setContainerWidth(`${width}px`))));\n        if (isInvisibleScrollbar()) {\n            this.forContainers([RowContainerName.CENTER], () => {\n                const pinnedWidthChangedEvent = this.enableRtl ? Events.EVENT_LEFT_PINNED_WIDTH_CHANGED : Events.EVENT_RIGHT_PINNED_WIDTH_CHANGED;\n                this.addManagedListener(this.eventService, pinnedWidthChangedEvent, () => this.refreshPaddingForFakeScrollbar());\n            });\n            this.refreshPaddingForFakeScrollbar();\n        }\n        this.addListeners();\n        this.registerWithCtrlsService();\n    }\n    refreshPaddingForFakeScrollbar() {\n        const { enableRtl, columnModel, name, eWrapper, eContainer } = this;\n        const sideToCheck = enableRtl ? RowContainerName.LEFT : RowContainerName.RIGHT;\n        this.forContainers([RowContainerName.CENTER, sideToCheck], () => {\n            const pinnedWidth = columnModel.getContainerWidth(sideToCheck);\n            const marginSide = enableRtl ? 'marginLeft' : 'marginRight';\n            if (name === RowContainerName.CENTER) {\n                eWrapper.style[marginSide] = pinnedWidth ? '0px' : '16px';\n            }\n            else {\n                eContainer.style[marginSide] = pinnedWidth ? '16px' : '0px';\n            }\n        });\n    }\n    addListeners() {\n        this.addManagedListener(this.eventService, Events.EVENT_SCROLL_VISIBILITY_CHANGED, () => this.onScrollVisibilityChanged());\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_CHANGED, () => this.onDisplayedColumnsChanged());\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED, () => this.onDisplayedColumnsWidthChanged());\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_ROWS_CHANGED, (params) => this.onDisplayedRowsChanged(params.afterScroll));\n        this.onScrollVisibilityChanged();\n        this.onDisplayedColumnsChanged();\n        this.onDisplayedColumnsWidthChanged();\n        this.onDisplayedRowsChanged();\n    }\n    listenOnDomOrder() {\n        // sticky section must show rows in set order\n        const allStickyContainers = [RowContainerName.STICKY_TOP_CENTER, RowContainerName.STICKY_TOP_LEFT, RowContainerName.STICKY_TOP_RIGHT, RowContainerName.STICKY_TOP_FULL_WIDTH];\n        const isStickContainer = allStickyContainers.indexOf(this.name) >= 0;\n        if (isStickContainer) {\n            this.comp.setDomOrder(true);\n            return;\n        }\n        const listener = () => {\n            const isEnsureDomOrder = this.gridOptionsService.is('ensureDomOrder');\n            const isPrintLayout = this.gridOptionsService.isDomLayout('print');\n            this.comp.setDomOrder(isEnsureDomOrder || isPrintLayout);\n        };\n        this.addManagedPropertyListener('domLayout', listener);\n        listener();\n    }\n    // when editing a pinned row, if the cell is half outside the scrollable area, the browser can\n    // scroll the column into view. we do not want this, the pinned sections should never scroll.\n    // so we listen to scrolls on these containers and reset the scroll if we find one.\n    stopHScrollOnPinnedRows() {\n        this.forContainers([RowContainerName.TOP_CENTER, RowContainerName.STICKY_TOP_CENTER, RowContainerName.BOTTOM_CENTER], () => {\n            const resetScrollLeft = () => this.eViewport.scrollLeft = 0;\n            this.addManagedListener(this.eViewport, 'scroll', resetScrollLeft);\n        });\n    }\n    onDisplayedColumnsChanged() {\n        this.forContainers([RowContainerName.CENTER], () => this.onHorizontalViewportChanged());\n    }\n    onDisplayedColumnsWidthChanged() {\n        this.forContainers([RowContainerName.CENTER], () => this.onHorizontalViewportChanged());\n    }\n    onScrollVisibilityChanged() {\n        const scrollWidth = this.gridOptionsService.getScrollbarWidth() || 0;\n        if (this.name === RowContainerName.CENTER) {\n            const visible = this.scrollVisibleService.isHorizontalScrollShowing();\n            const scrollbarWidth = visible ? scrollWidth : 0;\n            const size = scrollbarWidth == 0 ? '100%' : `calc(100% + ${scrollbarWidth}px)`;\n            this.animationFrameService.requestAnimationFrame(() => this.comp.setViewportHeight(size));\n        }\n        if (this.name === RowContainerName.FULL_WIDTH) {\n            const pad = isInvisibleScrollbar() ? 16 : 0;\n            const size = `calc(100% - ${pad}px)`;\n            this.eContainer.style.setProperty('width', size);\n        }\n    }\n    // this methods prevents the grid views from being scrolled while the dragService is being used\n    // eg. the view should not scroll up and down while dragging rows using the rowDragComp.\n    addPreventScrollWhileDragging() {\n        const preventScroll = (e) => {\n            if (this.dragService.isDragging()) {\n                if (e.cancelable) {\n                    e.preventDefault();\n                }\n            }\n        };\n        this.eContainer.addEventListener('touchmove', preventScroll, { passive: false });\n        this.addDestroyFunc(() => this.eContainer.removeEventListener('touchmove', preventScroll));\n    }\n    // this gets called whenever a change in the viewport, so we can inform column controller it has to work\n    // out the virtual columns again. gets called from following locations:\n    // + ensureColVisible, scroll, init, layoutChanged, displayedColumnsChanged\n    onHorizontalViewportChanged() {\n        const scrollWidth = this.getCenterWidth();\n        const scrollPosition = this.getCenterViewportScrollLeft();\n        this.columnModel.setViewportPosition(scrollWidth, scrollPosition);\n    }\n    getCenterWidth() {\n        return getInnerWidth(this.eViewport);\n    }\n    getCenterViewportScrollLeft() {\n        // we defer to a util, as how you calculated scrollLeft when doing RTL depends on the browser\n        return getScrollLeft(this.eViewport, this.enableRtl);\n    }\n    registerViewportResizeListener(listener) {\n        const unsubscribeFromResize = this.resizeObserverService.observeResize(this.eViewport, listener);\n        this.addDestroyFunc(() => unsubscribeFromResize());\n    }\n    isViewportVisible() {\n        return isVisible(this.eViewport);\n    }\n    getViewportScrollLeft() {\n        return getScrollLeft(this.eViewport, this.enableRtl);\n    }\n    isHorizontalScrollShowing() {\n        const isAlwaysShowHorizontalScroll = this.gridOptionsService.is('alwaysShowHorizontalScroll');\n        return isAlwaysShowHorizontalScroll || isHorizontalScrollShowing(this.eViewport);\n    }\n    getViewportElement() {\n        return this.eViewport;\n    }\n    setContainerTranslateX(amount) {\n        this.eContainer.style.transform = `translateX(${amount}px)`;\n    }\n    getHScrollPosition() {\n        const res = {\n            left: this.eViewport.scrollLeft,\n            right: this.eViewport.scrollLeft + this.eViewport.offsetWidth\n        };\n        return res;\n    }\n    setCenterViewportScrollLeft(value) {\n        // we defer to a util, as how you calculated scrollLeft when doing RTL depends on the browser\n        setScrollLeft(this.eViewport, value, this.enableRtl);\n    }\n    isContainerVisible() {\n        const pinned = RowContainerCtrl.getPinned(this.name);\n        return !pinned || (!!this.pinnedWidthFeature && this.pinnedWidthFeature.getWidth() > 0);\n    }\n    onPinnedWidthChanged() {\n        const visible = this.isContainerVisible();\n        if (this.visible != visible) {\n            this.visible = visible;\n            this.onDisplayedRowsChanged();\n        }\n        if (isInvisibleScrollbar()) {\n            this.refreshPaddingForFakeScrollbar();\n        }\n    }\n    onDisplayedRowsChanged(useFlushSync = false) {\n        if (this.visible) {\n            const printLayout = this.gridOptionsService.isDomLayout('print');\n            // this just justifies if the ctrl is in the correct place, this will be fed with zombie rows by the\n            // row renderer, so should not block them as they still need to animate -  the row renderer\n            // will clean these up when they finish animating\n            const doesRowMatch = (rowCtrl) => {\n                const fullWidthRow = rowCtrl.isFullWidth();\n                const embedFW = this.embedFullWidthRows || printLayout;\n                const match = this.isFullWithContainer ?\n                    !embedFW && fullWidthRow\n                    : embedFW || !fullWidthRow;\n                return match;\n            };\n            // this list contains either all pinned top, center or pinned bottom rows\n            // this filters out rows not for this container, eg if it's a full with row, but we are not full with container\n            const rowsThisContainer = this.getRowCtrls().filter(doesRowMatch);\n            this.comp.setRowCtrls(rowsThisContainer, useFlushSync);\n        }\n        else {\n            this.comp.setRowCtrls(this.EMPTY_CTRLS, false);\n        }\n    }\n    getRowCtrls() {\n        switch (this.name) {\n            case RowContainerName.TOP_CENTER:\n            case RowContainerName.TOP_LEFT:\n            case RowContainerName.TOP_RIGHT:\n            case RowContainerName.TOP_FULL_WIDTH:\n                return this.rowRenderer.getTopRowCtrls();\n            case RowContainerName.STICKY_TOP_CENTER:\n            case RowContainerName.STICKY_TOP_LEFT:\n            case RowContainerName.STICKY_TOP_RIGHT:\n            case RowContainerName.STICKY_TOP_FULL_WIDTH:\n                return this.rowRenderer.getStickyTopRowCtrls();\n            case RowContainerName.BOTTOM_CENTER:\n            case RowContainerName.BOTTOM_LEFT:\n            case RowContainerName.BOTTOM_RIGHT:\n            case RowContainerName.BOTTOM_FULL_WIDTH:\n                return this.rowRenderer.getBottomRowCtrls();\n            default:\n                return this.rowRenderer.getRowCtrls();\n        }\n    }\n}\n__decorate$1F([\n    Autowired('scrollVisibleService')\n], RowContainerCtrl.prototype, \"scrollVisibleService\", void 0);\n__decorate$1F([\n    Autowired('dragService')\n], RowContainerCtrl.prototype, \"dragService\", void 0);\n__decorate$1F([\n    Autowired('ctrlsService')\n], RowContainerCtrl.prototype, \"ctrlsService\", void 0);\n__decorate$1F([\n    Autowired('columnModel')\n], RowContainerCtrl.prototype, \"columnModel\", void 0);\n__decorate$1F([\n    Autowired('resizeObserverService')\n], RowContainerCtrl.prototype, \"resizeObserverService\", void 0);\n__decorate$1F([\n    Autowired('animationFrameService')\n], RowContainerCtrl.prototype, \"animationFrameService\", void 0);\n__decorate$1F([\n    Autowired('rowRenderer')\n], RowContainerCtrl.prototype, \"rowRenderer\", void 0);\n__decorate$1F([\n    PostConstruct\n], RowContainerCtrl.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1E = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst GRID_BODY_TEMPLATE = /* html */ `<div class=\"ag-root ag-unselectable\" role=\"treegrid\">\n        <ag-header-root ref=\"gridHeader\"></ag-header-root>\n        <div class=\"ag-floating-top\" ref=\"eTop\" role=\"presentation\">\n            <ag-row-container ref=\"topLeftContainer\" name=\"${RowContainerName.TOP_LEFT}\"></ag-row-container>\n            <ag-row-container ref=\"topCenterContainer\" name=\"${RowContainerName.TOP_CENTER}\"></ag-row-container>\n            <ag-row-container ref=\"topRightContainer\" name=\"${RowContainerName.TOP_RIGHT}\"></ag-row-container>\n            <ag-row-container ref=\"topFullWidthContainer\" name=\"${RowContainerName.TOP_FULL_WIDTH}\"></ag-row-container>\n        </div>\n        <div class=\"ag-body\" ref=\"eBody\" role=\"presentation\">\n            <div class=\"ag-body-clipper\" ref=\"eBodyClipper\" role=\"presentation\">\n                <div class=\"ag-body-viewport\" ref=\"eBodyViewport\" role=\"presentation\">\n                    <ag-row-container ref=\"leftContainer\" name=\"${RowContainerName.LEFT}\"></ag-row-container>\n                    <ag-row-container ref=\"centerContainer\" name=\"${RowContainerName.CENTER}\"></ag-row-container>\n                    <ag-row-container ref=\"rightContainer\" name=\"${RowContainerName.RIGHT}\"></ag-row-container>\n                    <ag-row-container ref=\"fullWidthContainer\" name=\"${RowContainerName.FULL_WIDTH}\"></ag-row-container>\n                </div>\n            </div>\n            <ag-fake-vertical-scroll></ag-fake-vertical-scroll>\n        </div>\n        <div class=\"ag-sticky-top\" ref=\"eStickyTop\" role=\"presentation\">\n            <ag-row-container ref=\"stickyTopLeftContainer\" name=\"${RowContainerName.STICKY_TOP_LEFT}\"></ag-row-container>\n            <ag-row-container ref=\"stickyTopCenterContainer\" name=\"${RowContainerName.STICKY_TOP_CENTER}\"></ag-row-container>\n            <ag-row-container ref=\"stickyTopRightContainer\" name=\"${RowContainerName.STICKY_TOP_RIGHT}\"></ag-row-container>\n            <ag-row-container ref=\"stickyTopFullWidthContainer\" name=\"${RowContainerName.STICKY_TOP_FULL_WIDTH}\"></ag-row-container>\n        </div>\n        <div class=\"ag-floating-bottom\" ref=\"eBottom\" role=\"presentation\">\n            <ag-row-container ref=\"bottomLeftContainer\" name=\"${RowContainerName.BOTTOM_LEFT}\"></ag-row-container>\n            <ag-row-container ref=\"bottomCenterContainer\" name=\"${RowContainerName.BOTTOM_CENTER}\"></ag-row-container>\n            <ag-row-container ref=\"bottomRightContainer\" name=\"${RowContainerName.BOTTOM_RIGHT}\"></ag-row-container>\n            <ag-row-container ref=\"bottomFullWidthContainer\" name=\"${RowContainerName.BOTTOM_FULL_WIDTH}\"></ag-row-container>\n        </div>\n        <ag-fake-horizontal-scroll></ag-fake-horizontal-scroll>\n        <ag-overlay-wrapper></ag-overlay-wrapper>\n    </div>`;\nclass GridBodyComp extends Component {\n    constructor() {\n        super(GRID_BODY_TEMPLATE);\n    }\n    init() {\n        const setHeight = (height, element) => {\n            const heightString = `${height}px`;\n            element.style.minHeight = heightString;\n            element.style.height = heightString;\n        };\n        const compProxy = {\n            setRowAnimationCssOnBodyViewport: (cssClass, animate) => this.setRowAnimationCssOnBodyViewport(cssClass, animate),\n            setColumnCount: count => setAriaColCount(this.getGui(), count),\n            setRowCount: count => setAriaRowCount(this.getGui(), count),\n            setTopHeight: height => setHeight(height, this.eTop),\n            setBottomHeight: height => setHeight(height, this.eBottom),\n            setTopDisplay: display => this.eTop.style.display = display,\n            setBottomDisplay: display => this.eBottom.style.display = display,\n            setStickyTopHeight: height => this.eStickyTop.style.height = height,\n            setStickyTopTop: top => this.eStickyTop.style.top = top,\n            setStickyTopWidth: width => this.eStickyTop.style.width = width,\n            setColumnMovingCss: (cssClass, flag) => this.addOrRemoveCssClass(cssClass, flag),\n            updateLayoutClasses: (cssClass, params) => {\n                const classLists = [\n                    this.eBodyViewport.classList,\n                    this.eBodyClipper.classList,\n                    this.eBody.classList\n                ];\n                classLists.forEach(classList => {\n                    classList.toggle(LayoutCssClasses.AUTO_HEIGHT, params.autoHeight);\n                    classList.toggle(LayoutCssClasses.NORMAL, params.normal);\n                    classList.toggle(LayoutCssClasses.PRINT, params.print);\n                });\n                this.addOrRemoveCssClass(LayoutCssClasses.AUTO_HEIGHT, params.autoHeight);\n                this.addOrRemoveCssClass(LayoutCssClasses.NORMAL, params.normal);\n                this.addOrRemoveCssClass(LayoutCssClasses.PRINT, params.print);\n            },\n            setAlwaysVerticalScrollClass: (cssClass, on) => this.eBodyViewport.classList.toggle(CSS_CLASS_FORCE_VERTICAL_SCROLL, on),\n            registerBodyViewportResizeListener: listener => {\n                const unsubscribeFromResize = this.resizeObserverService.observeResize(this.eBodyViewport, listener);\n                this.addDestroyFunc(() => unsubscribeFromResize());\n            },\n            setPinnedTopBottomOverflowY: overflow => this.eTop.style.overflowY = this.eBottom.style.overflowY = overflow,\n            setCellSelectableCss: (cssClass, selectable) => {\n                [this.eTop, this.eBodyViewport, this.eBottom]\n                    .forEach(ct => ct.classList.toggle(cssClass, selectable));\n            },\n            setBodyViewportWidth: width => this.eBodyViewport.style.width = width\n        };\n        this.ctrl = this.createManagedBean(new GridBodyCtrl());\n        this.ctrl.setComp(compProxy, this.getGui(), this.eBodyViewport, this.eTop, this.eBottom, this.eStickyTop);\n        if (this.rangeService || this.gridOptionsService.get('rowSelection') === 'multiple') {\n            setAriaMultiSelectable(this.getGui(), true);\n        }\n    }\n    setRowAnimationCssOnBodyViewport(cssClass, animateRows) {\n        const bodyViewportClassList = this.eBodyViewport.classList;\n        bodyViewportClassList.toggle(RowAnimationCssClasses.ANIMATION_ON, animateRows);\n        bodyViewportClassList.toggle(RowAnimationCssClasses.ANIMATION_OFF, !animateRows);\n    }\n    getFloatingTopBottom() {\n        return [this.eTop, this.eBottom];\n    }\n}\n__decorate$1E([\n    Autowired('resizeObserverService')\n], GridBodyComp.prototype, \"resizeObserverService\", void 0);\n__decorate$1E([\n    Optional('rangeService')\n], GridBodyComp.prototype, \"rangeService\", void 0);\n__decorate$1E([\n    RefSelector('eBodyViewport')\n], GridBodyComp.prototype, \"eBodyViewport\", void 0);\n__decorate$1E([\n    RefSelector('eStickyTop')\n], GridBodyComp.prototype, \"eStickyTop\", void 0);\n__decorate$1E([\n    RefSelector('eTop')\n], GridBodyComp.prototype, \"eTop\", void 0);\n__decorate$1E([\n    RefSelector('eBottom')\n], GridBodyComp.prototype, \"eBottom\", void 0);\n__decorate$1E([\n    RefSelector('gridHeader')\n], GridBodyComp.prototype, \"headerRootComp\", void 0);\n__decorate$1E([\n    RefSelector('eBodyClipper')\n], GridBodyComp.prototype, \"eBodyClipper\", void 0);\n__decorate$1E([\n    RefSelector('eBody')\n], GridBodyComp.prototype, \"eBody\", void 0);\n__decorate$1E([\n    PostConstruct\n], GridBodyComp.prototype, \"init\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1D = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ScrollVisibleService = class ScrollVisibleService extends BeanStub {\n    postConstruct() {\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_CHANGED, this.onDisplayedColumnsChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED, this.onDisplayedColumnsWidthChanged.bind(this));\n    }\n    onDisplayedColumnsChanged() {\n        this.update();\n    }\n    onDisplayedColumnsWidthChanged() {\n        this.update();\n    }\n    update() {\n        // because of column animation (which takes 200ms), we have to do this twice.\n        // eg if user removes cols anywhere except at the RHS, then the cols on the RHS\n        // will animate to the left to fill the gap. this animation means just after\n        // the cols are removed, the remaining cols are still in the original location\n        // at the start of the animation, so pre animation the H scrollbar is still needed,\n        // but post animation it is not.\n        this.updateImpl();\n        setTimeout(this.updateImpl.bind(this), 500);\n    }\n    updateImpl() {\n        const centerRowCtrl = this.ctrlsService.getCenterRowContainerCtrl();\n        if (!centerRowCtrl) {\n            return;\n        }\n        const params = {\n            horizontalScrollShowing: centerRowCtrl.isHorizontalScrollShowing(),\n            verticalScrollShowing: this.isVerticalScrollShowing()\n        };\n        this.setScrollsVisible(params);\n    }\n    setScrollsVisible(params) {\n        const atLeastOneDifferent = this.horizontalScrollShowing !== params.horizontalScrollShowing ||\n            this.verticalScrollShowing !== params.verticalScrollShowing;\n        if (atLeastOneDifferent) {\n            this.horizontalScrollShowing = params.horizontalScrollShowing;\n            this.verticalScrollShowing = params.verticalScrollShowing;\n            const event = {\n                type: Events.EVENT_SCROLL_VISIBILITY_CHANGED\n            };\n            this.eventService.dispatchEvent(event);\n        }\n    }\n    // used by pagination service - to know page height\n    isHorizontalScrollShowing() {\n        return this.horizontalScrollShowing;\n    }\n    // used by header container\n    isVerticalScrollShowing() {\n        return this.verticalScrollShowing;\n    }\n};\n__decorate$1D([\n    Autowired('ctrlsService')\n], ScrollVisibleService.prototype, \"ctrlsService\", void 0);\n__decorate$1D([\n    PostConstruct\n], ScrollVisibleService.prototype, \"postConstruct\", null);\nScrollVisibleService = __decorate$1D([\n    Bean('scrollVisibleService')\n], ScrollVisibleService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1C = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar MouseEventService_1;\nlet MouseEventService = MouseEventService_1 = class MouseEventService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.gridInstanceId = MouseEventService_1.gridInstanceSequence.next();\n    }\n    // we put the instance id onto the main DOM element. this is used for events, when grids are inside grids,\n    // so the grid can work out if the even came from this grid or a grid inside this one. see the ctrl+v logic\n    // for where this is used.\n    stampTopLevelGridCompWithGridInstance(eGridDiv) {\n        eGridDiv[MouseEventService_1.GRID_DOM_KEY] = this.gridInstanceId;\n    }\n    getRenderedCellForEvent(event) {\n        return getCtrlForEventTarget(this.gridOptionsService, event.target, CellCtrl.DOM_DATA_KEY_CELL_CTRL);\n    }\n    // walks the path of the event, and returns true if this grid is the first one that it finds. if doing\n    // master / detail grids, and a child grid is found, then it returns false. this stops things like copy/paste\n    // getting executed on many grids at the same time.\n    isEventFromThisGrid(event) {\n        const res = this.isElementInThisGrid(event.target);\n        return res;\n    }\n    isElementInThisGrid(element) {\n        let pointer = element;\n        while (pointer) {\n            const instanceId = pointer[MouseEventService_1.GRID_DOM_KEY];\n            if (exists(instanceId)) {\n                const eventFromThisGrid = instanceId === this.gridInstanceId;\n                return eventFromThisGrid;\n            }\n            pointer = pointer.parentElement;\n        }\n        return false;\n    }\n    getCellPositionForEvent(event) {\n        const cellComp = this.getRenderedCellForEvent(event);\n        return cellComp ? cellComp.getCellPosition() : null;\n    }\n    getNormalisedPosition(event) {\n        const gridPanelHasScrolls = this.gridOptionsService.isDomLayout('normal');\n        const e = event;\n        let x;\n        let y;\n        if (e.clientX != null || e.clientY != null) {\n            x = e.clientX;\n            y = e.clientY;\n        }\n        else {\n            x = e.x;\n            y = e.y;\n        }\n        if (gridPanelHasScrolls) {\n            const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n            const vRange = gridBodyCon.getScrollFeature().getVScrollPosition();\n            const hRange = gridBodyCon.getScrollFeature().getHScrollPosition();\n            x += hRange.left;\n            y += vRange.top;\n        }\n        return { x, y };\n    }\n};\nMouseEventService.gridInstanceSequence = new NumberSequence();\nMouseEventService.GRID_DOM_KEY = '__ag_grid_instance';\n__decorate$1C([\n    Autowired('ctrlsService')\n], MouseEventService.prototype, \"ctrlsService\", void 0);\nMouseEventService = MouseEventService_1 = __decorate$1C([\n    Bean('mouseEventService')\n], MouseEventService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1B = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet NavigationService = class NavigationService extends BeanStub {\n    constructor() {\n        super();\n        this.onPageDown = throttle(this.onPageDown, 100);\n        this.onPageUp = throttle(this.onPageUp, 100);\n    }\n    postConstruct() {\n        this.ctrlsService.whenReady(p => {\n            this.gridBodyCon = p.gridBodyCtrl;\n        });\n    }\n    handlePageScrollingKey(event) {\n        const key = event.key;\n        const alt = event.altKey;\n        const ctrl = event.ctrlKey || event.metaKey;\n        const rangeServiceShouldHandleShift = !!this.rangeService && event.shiftKey;\n        // home and end can be processed without knowing the currently selected cell, this can occur for full width rows.\n        const currentCell = this.mouseEventService.getCellPositionForEvent(event);\n        let processed = false;\n        switch (key) {\n            case KeyCode.PAGE_HOME:\n            case KeyCode.PAGE_END:\n                // handle home and end when ctrl & alt are NOT pressed\n                if (!ctrl && !alt) {\n                    this.onHomeOrEndKey(key);\n                    processed = true;\n                }\n                break;\n            case KeyCode.LEFT:\n            case KeyCode.RIGHT:\n            case KeyCode.UP:\n            case KeyCode.DOWN:\n                if (!currentCell) {\n                    return false;\n                }\n                // handle when ctrl is pressed only, if shift is pressed\n                // it will be handled by the rangeService\n                if (ctrl && !alt && !rangeServiceShouldHandleShift) {\n                    this.onCtrlUpDownLeftRight(key, currentCell);\n                    processed = true;\n                }\n                break;\n            case KeyCode.PAGE_DOWN:\n                if (!currentCell) {\n                    return false;\n                }\n                // handle page up and page down when ctrl & alt are NOT pressed\n                if (!ctrl && !alt) {\n                    this.onPageDown(currentCell);\n                    processed = true;\n                }\n                break;\n            case KeyCode.PAGE_UP:\n                if (!currentCell) {\n                    return false;\n                }\n                // handle page up and page down when ctrl & alt are NOT pressed\n                if (!ctrl && !alt) {\n                    this.onPageUp(currentCell);\n                    processed = true;\n                }\n                break;\n        }\n        if (processed) {\n            event.preventDefault();\n        }\n        return processed;\n    }\n    navigateTo(navigateParams) {\n        const { scrollIndex, scrollType, scrollColumn, focusIndex, focusColumn } = navigateParams;\n        if (exists(scrollColumn) && !scrollColumn.isPinned()) {\n            this.gridBodyCon.getScrollFeature().ensureColumnVisible(scrollColumn);\n        }\n        if (exists(scrollIndex)) {\n            this.gridBodyCon.getScrollFeature().ensureIndexVisible(scrollIndex, scrollType);\n        }\n        // setFocusedCell relies on the browser default focus behavior to scroll the focused cell into view,\n        // however, this behavior will cause the cell border to be cut off, or if we have sticky rows, the\n        // cell will be completely hidden, so we call ensureIndexVisible without a position to guarantee\n        // minimal scroll to get the row into view.\n        if (!navigateParams.isAsync) {\n            this.gridBodyCon.getScrollFeature().ensureIndexVisible(focusIndex);\n        }\n        // if we don't do this, the range will be left on the last cell, which will leave the last focused cell\n        // highlighted.\n        this.focusService.setFocusedCell({ rowIndex: focusIndex, column: focusColumn, rowPinned: null, forceBrowserFocus: true });\n        if (this.rangeService) {\n            const cellPosition = { rowIndex: focusIndex, rowPinned: null, column: focusColumn };\n            this.rangeService.setRangeToCell(cellPosition);\n        }\n    }\n    // this method is throttled, see the `constructor`\n    onPageDown(gridCell) {\n        const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n        const scrollPosition = gridBodyCon.getScrollFeature().getVScrollPosition();\n        const pixelsInOnePage = this.getViewportHeight();\n        const pagingPixelOffset = this.paginationProxy.getPixelOffset();\n        const currentPageBottomPixel = scrollPosition.top + pixelsInOnePage;\n        const currentPageBottomRow = this.paginationProxy.getRowIndexAtPixel(currentPageBottomPixel + pagingPixelOffset);\n        if (this.columnModel.isAutoRowHeightActive()) {\n            this.navigateToNextPageWithAutoHeight(gridCell, currentPageBottomRow);\n        }\n        else {\n            this.navigateToNextPage(gridCell, currentPageBottomRow);\n        }\n    }\n    // this method is throttled, see the `constructor`\n    onPageUp(gridCell) {\n        const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n        const scrollPosition = gridBodyCon.getScrollFeature().getVScrollPosition();\n        const pagingPixelOffset = this.paginationProxy.getPixelOffset();\n        const currentPageTopPixel = scrollPosition.top;\n        const currentPageTopRow = this.paginationProxy.getRowIndexAtPixel(currentPageTopPixel + pagingPixelOffset);\n        if (this.columnModel.isAutoRowHeightActive()) {\n            this.navigateToNextPageWithAutoHeight(gridCell, currentPageTopRow, true);\n        }\n        else {\n            this.navigateToNextPage(gridCell, currentPageTopRow, true);\n        }\n    }\n    navigateToNextPage(gridCell, scrollIndex, up = false) {\n        const pixelsInOnePage = this.getViewportHeight();\n        const firstRow = this.paginationProxy.getPageFirstRow();\n        const lastRow = this.paginationProxy.getPageLastRow();\n        const pagingPixelOffset = this.paginationProxy.getPixelOffset();\n        const currentRowNode = this.paginationProxy.getRow(gridCell.rowIndex);\n        const rowPixelDiff = up\n            ? ((currentRowNode === null || currentRowNode === void 0 ? void 0 : currentRowNode.rowHeight) - pixelsInOnePage - pagingPixelOffset)\n            : (pixelsInOnePage - pagingPixelOffset);\n        const nextCellPixel = (currentRowNode === null || currentRowNode === void 0 ? void 0 : currentRowNode.rowTop) + rowPixelDiff;\n        let focusIndex = this.paginationProxy.getRowIndexAtPixel(nextCellPixel + pagingPixelOffset);\n        if (focusIndex === gridCell.rowIndex) {\n            const diff = up ? -1 : 1;\n            scrollIndex = focusIndex = gridCell.rowIndex + diff;\n        }\n        let scrollType;\n        if (up) {\n            scrollType = 'bottom';\n            if (focusIndex < firstRow) {\n                focusIndex = firstRow;\n            }\n            if (scrollIndex < firstRow) {\n                scrollIndex = firstRow;\n            }\n        }\n        else {\n            scrollType = 'top';\n            if (focusIndex > lastRow) {\n                focusIndex = lastRow;\n            }\n            if (scrollIndex > lastRow) {\n                scrollIndex = lastRow;\n            }\n        }\n        if (this.isRowTallerThanView(focusIndex)) {\n            scrollIndex = focusIndex;\n            scrollType = 'top';\n        }\n        this.navigateTo({\n            scrollIndex,\n            scrollType,\n            scrollColumn: null,\n            focusIndex,\n            focusColumn: gridCell.column\n        });\n    }\n    navigateToNextPageWithAutoHeight(gridCell, scrollIndex, up = false) {\n        // because autoHeight will calculate the height of rows after scroll\n        // first we scroll towards the required point, then we add a small\n        // delay to allow the height to be recalculated, check which index\n        // should be focused and then finally navigate to that index.\n        // TODO: we should probably have an event fired once to scrollbar has\n        // settled and all rowHeights have been calculated instead of relying\n        // on a setTimeout of 50ms.\n        this.navigateTo({\n            scrollIndex: scrollIndex,\n            scrollType: up ? 'bottom' : 'top',\n            scrollColumn: null,\n            focusIndex: scrollIndex,\n            focusColumn: gridCell.column\n        });\n        setTimeout(() => {\n            const focusIndex = this.getNextFocusIndexForAutoHeight(gridCell, up);\n            this.navigateTo({\n                scrollIndex: scrollIndex,\n                scrollType: up ? 'bottom' : 'top',\n                scrollColumn: null,\n                focusIndex: focusIndex,\n                focusColumn: gridCell.column,\n                isAsync: true\n            });\n        }, 50);\n    }\n    getNextFocusIndexForAutoHeight(gridCell, up = false) {\n        var _a;\n        const step = up ? -1 : 1;\n        const pixelsInOnePage = this.getViewportHeight();\n        const lastRowIndex = this.paginationProxy.getPageLastRow();\n        let pixelSum = 0;\n        let currentIndex = gridCell.rowIndex;\n        while (currentIndex >= 0 && currentIndex <= lastRowIndex) {\n            const currentCell = this.paginationProxy.getRow(currentIndex);\n            if (currentCell) {\n                const currentCellHeight = (_a = currentCell.rowHeight) !== null && _a !== void 0 ? _a : 0;\n                if (pixelSum + currentCellHeight > pixelsInOnePage) {\n                    break;\n                }\n                pixelSum += currentCellHeight;\n            }\n            currentIndex += step;\n        }\n        return Math.max(0, Math.min(currentIndex, lastRowIndex));\n    }\n    getViewportHeight() {\n        const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n        const scrollPosition = gridBodyCon.getScrollFeature().getVScrollPosition();\n        const scrollbarWidth = this.gridOptionsService.getScrollbarWidth();\n        let pixelsInOnePage = scrollPosition.bottom - scrollPosition.top;\n        if (this.ctrlsService.getCenterRowContainerCtrl().isHorizontalScrollShowing()) {\n            pixelsInOnePage -= scrollbarWidth;\n        }\n        return pixelsInOnePage;\n    }\n    isRowTallerThanView(rowIndex) {\n        const rowNode = this.paginationProxy.getRow(rowIndex);\n        if (!rowNode) {\n            return false;\n        }\n        const rowHeight = rowNode.rowHeight;\n        if (typeof rowHeight !== 'number') {\n            return false;\n        }\n        return rowHeight > this.getViewportHeight();\n    }\n    onCtrlUpDownLeftRight(key, gridCell) {\n        const cellToFocus = this.cellNavigationService.getNextCellToFocus(key, gridCell, true);\n        const { rowIndex, column } = cellToFocus;\n        this.navigateTo({\n            scrollIndex: rowIndex,\n            scrollType: null,\n            scrollColumn: column,\n            focusIndex: rowIndex,\n            focusColumn: column\n        });\n    }\n    // home brings focus to top left cell, end brings focus to bottom right, grid scrolled to bring\n    // same cell into view (which means either scroll all the way up, or all the way down).\n    onHomeOrEndKey(key) {\n        const homeKey = key === KeyCode.PAGE_HOME;\n        const allColumns = this.columnModel.getAllDisplayedColumns();\n        const columnToSelect = homeKey ? allColumns[0] : last(allColumns);\n        const scrollIndex = homeKey ? this.paginationProxy.getPageFirstRow() : this.paginationProxy.getPageLastRow();\n        this.navigateTo({\n            scrollIndex: scrollIndex,\n            scrollType: null,\n            scrollColumn: columnToSelect,\n            focusIndex: scrollIndex,\n            focusColumn: columnToSelect\n        });\n    }\n    // result of keyboard event\n    onTabKeyDown(previous, keyboardEvent) {\n        const backwards = keyboardEvent.shiftKey;\n        const movedToNextCell = this.tabToNextCellCommon(previous, backwards, keyboardEvent);\n        if (movedToNextCell) {\n            // only prevent default if we found a cell. so if user is on last cell and hits tab, then we default\n            // to the normal tabbing so user can exit the grid.\n            keyboardEvent.preventDefault();\n            return;\n        }\n        // if we didn't move to next cell, then need to tab out of the cells, ie to the header (if going\n        // backwards)\n        if (backwards) {\n            const { rowIndex, rowPinned } = previous.getRowPosition();\n            const firstRow = rowPinned ? rowIndex === 0 : rowIndex === this.paginationProxy.getPageFirstRow();\n            if (firstRow) {\n                if (this.gridOptionsService.getNum('headerHeight') === 0) {\n                    this.focusService.focusNextGridCoreContainer(true, true);\n                }\n                else {\n                    keyboardEvent.preventDefault();\n                    this.focusService.focusLastHeader(keyboardEvent);\n                }\n            }\n        }\n        else {\n            // if the case it's a popup editor, the focus is on the editor and not the previous cell.\n            // in order for the tab navigation to work, we need to focus the browser back onto the\n            // previous cell.\n            if (previous instanceof CellCtrl) {\n                previous.focusCell(true);\n            }\n            if (this.focusService.focusNextGridCoreContainer(backwards)) {\n                keyboardEvent.preventDefault();\n            }\n        }\n    }\n    // comes from API\n    tabToNextCell(backwards, event) {\n        const focusedCell = this.focusService.getFocusedCell();\n        // if no focus, then cannot navigate\n        if (!focusedCell) {\n            return false;\n        }\n        let cellOrRow = this.getCellByPosition(focusedCell);\n        // if cell is not rendered, means user has scrolled away from the cell\n        // or that the focusedCell is a Full Width Row\n        if (!cellOrRow) {\n            cellOrRow = this.rowRenderer.getRowByPosition(focusedCell);\n            if (!cellOrRow || !cellOrRow.isFullWidth()) {\n                return false;\n            }\n        }\n        return this.tabToNextCellCommon(cellOrRow, backwards, event);\n    }\n    tabToNextCellCommon(previous, backwards, event) {\n        let editing = previous.isEditing();\n        // if cell is not editing, there is still chance row is editing if it's Full Row Editing\n        if (!editing && previous instanceof CellCtrl) {\n            const cell = previous;\n            const row = cell.getRowCtrl();\n            if (row) {\n                editing = row.isEditing();\n            }\n        }\n        let res;\n        if (editing) {\n            // if we are editing, we know it's not a Full Width Row (RowComp)\n            if (this.gridOptionsService.get('editType') === 'fullRow') {\n                res = this.moveToNextEditingRow(previous, backwards, event);\n            }\n            else {\n                res = this.moveToNextEditingCell(previous, backwards, event);\n            }\n        }\n        else {\n            res = this.moveToNextCellNotEditing(previous, backwards);\n        }\n        // if a cell wasn't found, it's possible that focus was moved to the header\n        return res || !!this.focusService.getFocusedHeader();\n    }\n    moveToNextEditingCell(previousCell, backwards, event = null) {\n        const previousPos = previousCell.getCellPosition();\n        // before we stop editing, we need to focus the cell element\n        // so the grid doesn't detect that focus has left the grid\n        previousCell.getGui().focus();\n        // need to do this before getting next cell to edit, in case the next cell\n        // has editable function (eg colDef.editable=func() ) and it depends on the\n        // result of this cell, so need to save updates from the first edit, in case\n        // the value is referenced in the function.\n        previousCell.stopEditing();\n        // find the next cell to start editing\n        const nextCell = this.findNextCellToFocusOn(previousPos, backwards, true);\n        if (nextCell == null) {\n            return false;\n        }\n        // only prevent default if we found a cell. so if user is on last cell and hits tab, then we default\n        // to the normal tabbing so user can exit the grid.\n        nextCell.startEditing(null, true, event);\n        nextCell.focusCell(false);\n        return true;\n    }\n    moveToNextEditingRow(previousCell, backwards, event = null) {\n        const previousPos = previousCell.getCellPosition();\n        // find the next cell to start editing\n        const nextCell = this.findNextCellToFocusOn(previousPos, backwards, true);\n        if (nextCell == null) {\n            return false;\n        }\n        const nextPos = nextCell.getCellPosition();\n        const previousEditable = this.isCellEditable(previousPos);\n        const nextEditable = this.isCellEditable(nextPos);\n        const rowsMatch = nextPos && previousPos.rowIndex === nextPos.rowIndex && previousPos.rowPinned === nextPos.rowPinned;\n        if (previousEditable) {\n            previousCell.setFocusOutOnEditor();\n        }\n        if (!rowsMatch) {\n            const pRow = previousCell.getRowCtrl();\n            pRow.stopEditing();\n            const nRow = nextCell.getRowCtrl();\n            nRow.startRowEditing(undefined, undefined, event);\n        }\n        if (nextEditable) {\n            nextCell.setFocusInOnEditor();\n            nextCell.focusCell();\n        }\n        else {\n            nextCell.focusCell(true);\n        }\n        return true;\n    }\n    moveToNextCellNotEditing(previousCell, backwards) {\n        const displayedColumns = this.columnModel.getAllDisplayedColumns();\n        let cellPos;\n        if (previousCell instanceof RowCtrl) {\n            cellPos = Object.assign(Object.assign({}, previousCell.getRowPosition()), { column: backwards ? displayedColumns[0] : last(displayedColumns) });\n        }\n        else {\n            cellPos = previousCell.getCellPosition();\n        }\n        // find the next cell to start editing\n        const nextCell = this.findNextCellToFocusOn(cellPos, backwards, false);\n        // only prevent default if we found a cell. so if user is on last cell and hits tab, then we default\n        // to the normal tabbing so user can exit the grid.\n        if (nextCell instanceof CellCtrl) {\n            nextCell.focusCell(true);\n        }\n        else if (nextCell) {\n            return this.tryToFocusFullWidthRow(nextCell.getRowPosition(), backwards);\n        }\n        return exists(nextCell);\n    }\n    // called by the cell, when tab is pressed while editing.\n    // @return: RenderedCell when navigation successful, otherwise null\n    findNextCellToFocusOn(previousPosition, backwards, startEditing) {\n        let nextPosition = previousPosition;\n        while (true) {\n            if (previousPosition !== nextPosition) {\n                previousPosition = nextPosition;\n            }\n            if (!backwards) {\n                nextPosition = this.getLastCellOfColSpan(nextPosition);\n            }\n            nextPosition = this.cellNavigationService.getNextTabbedCell(nextPosition, backwards);\n            // allow user to override what cell to go to next\n            const userFunc = this.gridOptionsService.getCallback('tabToNextCell');\n            if (exists(userFunc)) {\n                const params = {\n                    backwards: backwards,\n                    editing: startEditing,\n                    previousCellPosition: previousPosition,\n                    nextCellPosition: nextPosition ? nextPosition : null\n                };\n                const userCell = userFunc(params);\n                if (exists(userCell)) {\n                    if (userCell.floating) {\n                        doOnce(() => { console.warn(`AG Grid: tabToNextCellFunc return type should have attributes: rowIndex, rowPinned, column. However you had 'floating', maybe you meant 'rowPinned'?`); }, 'no floating in userCell');\n                        userCell.rowPinned = userCell.floating;\n                    }\n                    nextPosition = {\n                        rowIndex: userCell.rowIndex,\n                        column: userCell.column,\n                        rowPinned: userCell.rowPinned\n                    };\n                }\n                else {\n                    nextPosition = null;\n                }\n            }\n            // if no 'next cell', means we have got to last cell of grid, so nothing to move to,\n            // so bottom right cell going forwards, or top left going backwards\n            if (!nextPosition) {\n                return null;\n            }\n            if (nextPosition.rowIndex < 0) {\n                const headerLen = this.headerNavigationService.getHeaderRowCount();\n                this.focusService.focusHeaderPosition({\n                    headerPosition: {\n                        headerRowIndex: headerLen + (nextPosition.rowIndex),\n                        column: nextPosition.column\n                    }\n                });\n                return null;\n            }\n            // if editing, but cell not editable, skip cell. we do this before we do all of\n            // the 'ensure index visible' and 'flush all frames', otherwise if we are skipping\n            // a bunch of cells (eg 10 rows) then all the work on ensuring cell visible is useless\n            // (except for the last one) which causes grid to stall for a while.\n            // note - for full row edit, we do focus non-editable cells, as the row stays in edit mode.\n            const fullRowEdit = this.gridOptionsService.get('editType') === 'fullRow';\n            if (startEditing && !fullRowEdit) {\n                const cellIsEditable = this.isCellEditable(nextPosition);\n                if (!cellIsEditable) {\n                    continue;\n                }\n            }\n            this.ensureCellVisible(nextPosition);\n            // we have to call this after ensureColumnVisible - otherwise it could be a virtual column\n            // or row that is not currently in view, hence the renderedCell would not exist\n            const nextCell = this.getCellByPosition(nextPosition);\n            // if next cell is fullWidth row, then no rendered cell,\n            // as fullWidth rows have no cells, so we skip it\n            if (!nextCell) {\n                const row = this.rowRenderer.getRowByPosition(nextPosition);\n                if (!row || !row.isFullWidth() || startEditing) {\n                    continue;\n                }\n                return row;\n            }\n            if (nextCell.isSuppressNavigable()) {\n                continue;\n            }\n            // by default, when we click a cell, it gets selected into a range, so to keep keyboard navigation\n            // consistent, we set into range here also.\n            if (this.rangeService) {\n                this.rangeService.setRangeToCell(nextPosition);\n            }\n            // we successfully tabbed onto a grid cell, so return true\n            return nextCell;\n        }\n    }\n    isCellEditable(cell) {\n        const rowNode = this.lookupRowNodeForCell(cell);\n        if (rowNode) {\n            return cell.column.isCellEditable(rowNode);\n        }\n        return false;\n    }\n    getCellByPosition(cellPosition) {\n        const rowCtrl = this.rowRenderer.getRowByPosition(cellPosition);\n        if (!rowCtrl) {\n            return null;\n        }\n        return rowCtrl.getCellCtrl(cellPosition.column);\n    }\n    lookupRowNodeForCell(cell) {\n        if (cell.rowPinned === 'top') {\n            return this.pinnedRowModel.getPinnedTopRow(cell.rowIndex);\n        }\n        if (cell.rowPinned === 'bottom') {\n            return this.pinnedRowModel.getPinnedBottomRow(cell.rowIndex);\n        }\n        return this.paginationProxy.getRow(cell.rowIndex);\n    }\n    // we use index for rows, but column object for columns, as the next column (by index) might not\n    // be visible (header grouping) so it's not reliable, so using the column object instead.\n    navigateToNextCell(event, key, currentCell, allowUserOverride) {\n        // we keep searching for a next cell until we find one. this is how the group rows get skipped\n        let nextCell = currentCell;\n        let hitEdgeOfGrid = false;\n        while (nextCell && (nextCell === currentCell || !this.isValidNavigateCell(nextCell))) {\n            // if the current cell is spanning across multiple columns, we need to move\n            // our current position to be the last cell on the right before finding the\n            // the next target.\n            if (this.gridOptionsService.is('enableRtl')) {\n                if (key === KeyCode.LEFT) {\n                    nextCell = this.getLastCellOfColSpan(nextCell);\n                }\n            }\n            else if (key === KeyCode.RIGHT) {\n                nextCell = this.getLastCellOfColSpan(nextCell);\n            }\n            nextCell = this.cellNavigationService.getNextCellToFocus(key, nextCell);\n            // eg if going down, and nextCell=undefined, means we are gone past the last row\n            hitEdgeOfGrid = missing(nextCell);\n        }\n        if (hitEdgeOfGrid && event && event.key === KeyCode.UP) {\n            nextCell = {\n                rowIndex: -1,\n                rowPinned: null,\n                column: currentCell.column\n            };\n        }\n        // allow user to override what cell to go to next. when doing normal cell navigation (with keys)\n        // we allow this, however if processing 'enter after edit' we don't allow override\n        if (allowUserOverride) {\n            const userFunc = this.gridOptionsService.getCallback('navigateToNextCell');\n            if (exists(userFunc)) {\n                const params = {\n                    key: key,\n                    previousCellPosition: currentCell,\n                    nextCellPosition: nextCell ? nextCell : null,\n                    event: event\n                };\n                const userCell = userFunc(params);\n                if (exists(userCell)) {\n                    if (userCell.floating) {\n                        doOnce(() => { console.warn(`AG Grid: tabToNextCellFunc return type should have attributes: rowIndex, rowPinned, column. However you had 'floating', maybe you meant 'rowPinned'?`); }, 'no floating in userCell');\n                        userCell.rowPinned = userCell.floating;\n                    }\n                    nextCell = {\n                        rowPinned: userCell.rowPinned,\n                        rowIndex: userCell.rowIndex,\n                        column: userCell.column\n                    };\n                }\n                else {\n                    nextCell = null;\n                }\n            }\n        }\n        // no next cell means we have reached a grid boundary, eg left, right, top or bottom of grid\n        if (!nextCell) {\n            return;\n        }\n        if (nextCell.rowIndex < 0) {\n            const headerLen = this.headerNavigationService.getHeaderRowCount();\n            this.focusService.focusHeaderPosition({\n                headerPosition: { headerRowIndex: headerLen + (nextCell.rowIndex), column: currentCell.column },\n                event: event || undefined\n            });\n            return;\n        }\n        // in case we have col spanning we get the cellComp and use it to get the\n        // position. This was we always focus the first cell inside the spanning.\n        const normalisedPosition = this.getNormalisedPosition(nextCell);\n        if (normalisedPosition) {\n            this.focusPosition(normalisedPosition);\n        }\n        else {\n            this.tryToFocusFullWidthRow(nextCell);\n        }\n    }\n    getNormalisedPosition(cellPosition) {\n        // ensureCellVisible first, to make sure cell at position is rendered.\n        this.ensureCellVisible(cellPosition);\n        const cellCtrl = this.getCellByPosition(cellPosition);\n        // not guaranteed to have a cellComp when using the SSRM as blocks are loading.\n        if (!cellCtrl) {\n            return null;\n        }\n        cellPosition = cellCtrl.getCellPosition();\n        // we call this again, as nextCell can be different to it's previous value due to Column Spanning\n        // (ie if cursor moving from right to left, and cell is spanning columns, then nextCell was the\n        // last column in the group, however now it's the first column in the group). if we didn't do\n        // ensureCellVisible again, then we could only be showing the last portion (last column) of the\n        // merged cells.\n        this.ensureCellVisible(cellPosition);\n        return cellPosition;\n    }\n    tryToFocusFullWidthRow(position, backwards = false) {\n        const displayedColumns = this.columnModel.getAllDisplayedColumns();\n        const rowComp = this.rowRenderer.getRowByPosition(position);\n        if (!rowComp || !rowComp.isFullWidth()) {\n            return false;\n        }\n        const currentCellFocused = this.focusService.getFocusedCell();\n        const cellPosition = {\n            rowIndex: position.rowIndex,\n            rowPinned: position.rowPinned,\n            column: position.column || (backwards ? last(displayedColumns) : displayedColumns[0])\n        };\n        this.focusPosition(cellPosition);\n        const fromBelow = currentCellFocused != null ? this.rowPositionUtils.before(cellPosition, currentCellFocused) : false;\n        const focusEvent = {\n            type: Events.EVENT_FULL_WIDTH_ROW_FOCUSED,\n            rowIndex: cellPosition.rowIndex,\n            rowPinned: cellPosition.rowPinned,\n            column: cellPosition.column,\n            isFullWidthCell: true,\n            floating: cellPosition.rowPinned,\n            fromBelow\n        };\n        this.eventService.dispatchEvent(focusEvent);\n        return true;\n    }\n    focusPosition(cellPosition) {\n        this.focusService.setFocusedCell({\n            rowIndex: cellPosition.rowIndex,\n            column: cellPosition.column,\n            rowPinned: cellPosition.rowPinned,\n            forceBrowserFocus: true\n        });\n        if (this.rangeService) {\n            this.rangeService.setRangeToCell(cellPosition);\n        }\n    }\n    isValidNavigateCell(cell) {\n        const rowNode = this.rowPositionUtils.getRowNode(cell);\n        // we do not allow focusing on detail rows and full width rows\n        return !!rowNode;\n    }\n    getLastCellOfColSpan(cell) {\n        const cellCtrl = this.getCellByPosition(cell);\n        if (!cellCtrl) {\n            return cell;\n        }\n        const colSpanningList = cellCtrl.getColSpanningList();\n        if (colSpanningList.length === 1) {\n            return cell;\n        }\n        return {\n            rowIndex: cell.rowIndex,\n            column: last(colSpanningList),\n            rowPinned: cell.rowPinned\n        };\n    }\n    ensureCellVisible(gridCell) {\n        const isGroupStickyEnabled = this.gridOptionsService.isGroupRowsSticky();\n        const rowNode = this.rowModel.getRow(gridCell.rowIndex);\n        // sticky rows are always visible, so the grid shouldn't scroll to focus them.\n        const skipScrollToRow = isGroupStickyEnabled && (rowNode === null || rowNode === void 0 ? void 0 : rowNode.sticky);\n        // this scrolls the row into view\n        if (!skipScrollToRow && missing(gridCell.rowPinned)) {\n            this.gridBodyCon.getScrollFeature().ensureIndexVisible(gridCell.rowIndex);\n        }\n        if (!gridCell.column.isPinned()) {\n            this.gridBodyCon.getScrollFeature().ensureColumnVisible(gridCell.column);\n        }\n    }\n};\n__decorate$1B([\n    Autowired('mouseEventService')\n], NavigationService.prototype, \"mouseEventService\", void 0);\n__decorate$1B([\n    Autowired('paginationProxy')\n], NavigationService.prototype, \"paginationProxy\", void 0);\n__decorate$1B([\n    Autowired('focusService')\n], NavigationService.prototype, \"focusService\", void 0);\n__decorate$1B([\n    Optional('rangeService')\n], NavigationService.prototype, \"rangeService\", void 0);\n__decorate$1B([\n    Autowired('columnModel')\n], NavigationService.prototype, \"columnModel\", void 0);\n__decorate$1B([\n    Autowired('rowModel')\n], NavigationService.prototype, \"rowModel\", void 0);\n__decorate$1B([\n    Autowired('ctrlsService')\n], NavigationService.prototype, \"ctrlsService\", void 0);\n__decorate$1B([\n    Autowired('rowRenderer')\n], NavigationService.prototype, \"rowRenderer\", void 0);\n__decorate$1B([\n    Autowired('headerNavigationService')\n], NavigationService.prototype, \"headerNavigationService\", void 0);\n__decorate$1B([\n    Autowired(\"rowPositionUtils\")\n], NavigationService.prototype, \"rowPositionUtils\", void 0);\n__decorate$1B([\n    Autowired(\"cellNavigationService\")\n], NavigationService.prototype, \"cellNavigationService\", void 0);\n__decorate$1B([\n    Autowired(\"pinnedRowModel\")\n], NavigationService.prototype, \"pinnedRowModel\", void 0);\n__decorate$1B([\n    PostConstruct\n], NavigationService.prototype, \"postConstruct\", null);\nNavigationService = __decorate$1B([\n    Bean('navigationService')\n], NavigationService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1A = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass PopupEditorWrapper extends PopupComponent {\n    constructor(params) {\n        super(/* html */ `<div class=\"ag-popup-editor\" tabindex=\"-1\"/>`);\n        this.params = params;\n    }\n    postConstruct() {\n        this.gridOptionsService.setDomData(this.getGui(), PopupEditorWrapper.DOM_KEY_POPUP_EDITOR_WRAPPER, true);\n        this.addKeyDownListener();\n    }\n    addKeyDownListener() {\n        const eGui = this.getGui();\n        const params = this.params;\n        const listener = (event) => {\n            if (!isUserSuppressingKeyboardEvent(this.gridOptionsService, event, params.node, params.column, true)) {\n                params.onKeyDown(event);\n            }\n        };\n        this.addManagedListener(eGui, 'keydown', listener);\n    }\n}\nPopupEditorWrapper.DOM_KEY_POPUP_EDITOR_WRAPPER = 'popupEditorWrapper';\n__decorate$1A([\n    PostConstruct\n], PopupEditorWrapper.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass CellComp extends Component {\n    constructor(beans, cellCtrl, printLayout, eRow, editingRow) {\n        super();\n        // every time we go into edit mode, or back again, this gets incremented.\n        // it's the components way of dealing with the async nature of framework components,\n        // so if a framework component takes a while to be created, we know if the object\n        // is still relevant when creating is finished. eg we could click edit / un-edit 20\n        // times before the first React edit component comes back - we should discard\n        // the first 19.\n        this.rendererVersion = 0;\n        this.editorVersion = 0;\n        this.beans = beans;\n        this.column = cellCtrl.getColumn();\n        this.rowNode = cellCtrl.getRowNode();\n        this.rowCtrl = cellCtrl.getRowCtrl();\n        this.eRow = eRow;\n        this.setTemplate(/* html */ `<div comp-id=\"${this.getCompId()}\"/>`);\n        const eGui = this.getGui();\n        this.forceWrapper = cellCtrl.isForceWrapper();\n        this.refreshWrapper(false);\n        const setAttribute = (name, value, element) => {\n            const actualElement = element ? element : eGui;\n            if (value != null && value != '') {\n                actualElement.setAttribute(name, value);\n            }\n            else {\n                actualElement.removeAttribute(name);\n            }\n        };\n        const compProxy = {\n            addOrRemoveCssClass: (cssClassName, on) => this.addOrRemoveCssClass(cssClassName, on),\n            setUserStyles: (styles) => addStylesToElement(eGui, styles),\n            getFocusableElement: () => this.getFocusableElement(),\n            setTabIndex: tabIndex => setAttribute('tabindex', tabIndex.toString()),\n            setRole: role => setAriaRole(eGui, role),\n            setColId: colId => setAttribute('col-id', colId),\n            setTitle: title => setAttribute('title', title),\n            setIncludeSelection: include => this.includeSelection = include,\n            setIncludeRowDrag: include => this.includeRowDrag = include,\n            setIncludeDndSource: include => this.includeDndSource = include,\n            setRenderDetails: (compDetails, valueToDisplay, force) => this.setRenderDetails(compDetails, valueToDisplay, force),\n            setEditDetails: (compDetails, popup, position) => this.setEditDetails(compDetails, popup, position),\n            getCellEditor: () => this.cellEditor || null,\n            getCellRenderer: () => this.cellRenderer || null,\n            getParentOfValue: () => this.getParentOfValue()\n        };\n        this.cellCtrl = cellCtrl;\n        cellCtrl.setComp(compProxy, this.getGui(), this.eCellWrapper, printLayout, editingRow);\n    }\n    getParentOfValue() {\n        if (this.eCellValue) {\n            // if not editing, and using wrapper, then value goes in eCellValue\n            return this.eCellValue;\n        }\n        if (this.eCellWrapper) {\n            // if editing, and using wrapper, value (cell editor) goes in eCellWrapper\n            return this.eCellWrapper;\n        }\n        // if editing or rendering, and not using wrapper, value (or comp) is directly inside cell\n        return this.getGui();\n    }\n    setRenderDetails(compDetails, valueToDisplay, forceNewCellRendererInstance) {\n        // this can happen if the users asks for the cell to refresh, but we are not showing the vale as we are editing\n        const isInlineEditing = this.cellEditor && !this.cellEditorPopupWrapper;\n        if (isInlineEditing) {\n            return;\n        }\n        // this means firstRender will be true for one pass only, as it's initialised to undefined\n        this.firstRender = this.firstRender == null;\n        // if display template has changed, means any previous Cell Renderer is in the wrong location\n        const controlWrapperChanged = this.refreshWrapper(false);\n        this.refreshEditStyles(false);\n        // all of these have dependencies on the eGui, so only do them after eGui is set\n        if (compDetails) {\n            const neverRefresh = forceNewCellRendererInstance || controlWrapperChanged;\n            const cellRendererRefreshSuccessful = neverRefresh ? false : this.refreshCellRenderer(compDetails);\n            if (!cellRendererRefreshSuccessful) {\n                this.destroyRenderer();\n                this.createCellRendererInstance(compDetails);\n            }\n        }\n        else {\n            this.destroyRenderer();\n            this.insertValueWithoutCellRenderer(valueToDisplay);\n        }\n    }\n    setEditDetails(compDetails, popup, position) {\n        if (compDetails) {\n            this.createCellEditorInstance(compDetails, popup, position);\n        }\n        else {\n            this.destroyEditor();\n        }\n    }\n    removeControls() {\n        this.checkboxSelectionComp = this.beans.context.destroyBean(this.checkboxSelectionComp);\n        this.dndSourceComp = this.beans.context.destroyBean(this.dndSourceComp);\n        this.rowDraggingComp = this.beans.context.destroyBean(this.rowDraggingComp);\n    }\n    // returns true if wrapper was changed\n    refreshWrapper(editing) {\n        const providingControls = this.includeRowDrag || this.includeDndSource || this.includeSelection;\n        const usingWrapper = providingControls || this.forceWrapper;\n        const putWrapperIn = usingWrapper && this.eCellWrapper == null;\n        if (putWrapperIn) {\n            this.eCellWrapper = loadTemplate(/* html */ `<div class=\"ag-cell-wrapper\" role=\"presentation\"></div>`);\n            this.getGui().appendChild(this.eCellWrapper);\n        }\n        const takeWrapperOut = !usingWrapper && this.eCellWrapper != null;\n        if (takeWrapperOut) {\n            removeFromParent(this.eCellWrapper);\n            this.eCellWrapper = undefined;\n        }\n        this.addOrRemoveCssClass('ag-cell-value', !usingWrapper);\n        const usingCellValue = !editing && usingWrapper;\n        const putCellValueIn = usingCellValue && this.eCellValue == null;\n        if (putCellValueIn) {\n            this.eCellValue = loadTemplate(/* html */ `<span class=\"ag-cell-value\" role=\"presentation\"></span>`);\n            this.eCellWrapper.appendChild(this.eCellValue);\n        }\n        const takeCellValueOut = !usingCellValue && this.eCellValue != null;\n        if (takeCellValueOut) {\n            removeFromParent(this.eCellValue);\n            this.eCellValue = undefined;\n        }\n        const templateChanged = putWrapperIn || takeWrapperOut || putCellValueIn || takeCellValueOut;\n        if (templateChanged) {\n            this.removeControls();\n        }\n        if (!editing) {\n            if (providingControls) {\n                this.addControls();\n            }\n        }\n        return templateChanged;\n    }\n    addControls() {\n        if (this.includeRowDrag) {\n            if (this.rowDraggingComp == null) {\n                this.rowDraggingComp = this.cellCtrl.createRowDragComp();\n                if (this.rowDraggingComp) {\n                    // put the checkbox in before the value\n                    this.eCellWrapper.insertBefore(this.rowDraggingComp.getGui(), this.eCellValue);\n                }\n            }\n        }\n        if (this.includeDndSource) {\n            if (this.dndSourceComp == null) {\n                this.dndSourceComp = this.cellCtrl.createDndSource();\n                // put the checkbox in before the value\n                this.eCellWrapper.insertBefore(this.dndSourceComp.getGui(), this.eCellValue);\n            }\n        }\n        if (this.includeSelection) {\n            if (this.checkboxSelectionComp == null) {\n                this.checkboxSelectionComp = this.cellCtrl.createSelectionCheckbox();\n                this.eCellWrapper.insertBefore(this.checkboxSelectionComp.getGui(), this.eCellValue);\n            }\n        }\n    }\n    createCellEditorInstance(compDetails, popup, position) {\n        const versionCopy = this.editorVersion;\n        const cellEditorPromise = compDetails.newAgStackInstance();\n        if (!cellEditorPromise) {\n            return;\n        } // if empty, userComponentFactory already did a console message\n        const { params } = compDetails;\n        cellEditorPromise.then(c => this.afterCellEditorCreated(versionCopy, c, params, popup, position));\n        // if we don't do this, and editor component is async, then there will be a period\n        // when the component isn't present and keyboard navigation won't work - so example\n        // of user hitting tab quickly (more quickly than renderers getting created) won't work\n        const cellEditorAsync = missing(this.cellEditor);\n        if (cellEditorAsync && params.cellStartedEdit) {\n            this.cellCtrl.focusCell(true);\n        }\n    }\n    insertValueWithoutCellRenderer(valueToDisplay) {\n        const eParent = this.getParentOfValue();\n        clearElement(eParent);\n        const escapedValue = valueToDisplay != null ? escapeString(valueToDisplay) : null;\n        if (escapedValue != null) {\n            eParent.innerHTML = escapedValue;\n        }\n    }\n    destroyEditorAndRenderer() {\n        this.destroyRenderer();\n        this.destroyEditor();\n    }\n    destroyRenderer() {\n        const { context } = this.beans;\n        this.cellRenderer = context.destroyBean(this.cellRenderer);\n        removeFromParent(this.cellRendererGui);\n        this.cellRendererGui = null;\n        this.rendererVersion++;\n    }\n    destroyEditor() {\n        const { context } = this.beans;\n        if (this.hideEditorPopup) {\n            this.hideEditorPopup();\n        }\n        this.hideEditorPopup = undefined;\n        this.cellEditor = context.destroyBean(this.cellEditor);\n        this.cellEditorPopupWrapper = context.destroyBean(this.cellEditorPopupWrapper);\n        removeFromParent(this.cellEditorGui);\n        this.cellEditorGui = null;\n        this.editorVersion++;\n    }\n    refreshCellRenderer(compClassAndParams) {\n        if (this.cellRenderer == null || this.cellRenderer.refresh == null) {\n            return false;\n        }\n        // if different Cell Renderer configured this time (eg user is using selector, and\n        // returns different component) then don't refresh, force recreate of Cell Renderer\n        if (this.cellRendererClass !== compClassAndParams.componentClass) {\n            return false;\n        }\n        // take any custom params off of the user\n        const result = this.cellRenderer.refresh(compClassAndParams.params);\n        // NOTE on undefined: previous version of the cellRenderer.refresh() interface\n        // returned nothing, if the method existed, we assumed it refreshed. so for\n        // backwards compatibility, we assume if method exists and returns nothing,\n        // that it was successful.\n        return result === true || result === undefined;\n    }\n    createCellRendererInstance(compDetails) {\n        // never use task service if animation frame service is turned off.\n        // and lastly we never use it if doing auto-height, as the auto-height service checks the\n        // row height directly after the cell is created, it doesn't wait around for the tasks to complete        \n        const suppressAnimationFrame = this.beans.gridOptionsService.is('suppressAnimationFrame');\n        const useTaskService = !suppressAnimationFrame;\n        const displayComponentVersionCopy = this.rendererVersion;\n        const { componentClass } = compDetails;\n        const createCellRendererFunc = () => {\n            const staleTask = this.rendererVersion !== displayComponentVersionCopy || !this.isAlive();\n            if (staleTask) {\n                return;\n            }\n            // this can return null in the event that the user has switched from a renderer component to nothing, for example\n            // when using a cellRendererSelect to return a component or null depending on row data etc\n            const componentPromise = compDetails.newAgStackInstance();\n            const callback = this.afterCellRendererCreated.bind(this, displayComponentVersionCopy, componentClass);\n            if (componentPromise) {\n                componentPromise.then(callback);\n            }\n        };\n        // we only use task service when rendering for first time, which means it is not used when doing edits.\n        // if we changed this (always use task service) would make sense, however it would break tests, possibly\n        // test of users.\n        if (useTaskService && this.firstRender) {\n            this.beans.animationFrameService.createTask(createCellRendererFunc, this.rowNode.rowIndex, 'createTasksP2');\n        }\n        else {\n            createCellRendererFunc();\n        }\n    }\n    getCtrl() {\n        return this.cellCtrl;\n    }\n    getRowCtrl() {\n        return this.rowCtrl;\n    }\n    getCellRenderer() {\n        return this.cellRenderer;\n    }\n    getCellEditor() {\n        return this.cellEditor;\n    }\n    afterCellRendererCreated(cellRendererVersion, cellRendererClass, cellRenderer) {\n        const staleTask = !this.isAlive() || cellRendererVersion !== this.rendererVersion;\n        if (staleTask) {\n            this.beans.context.destroyBean(cellRenderer);\n            return;\n        }\n        this.cellRenderer = cellRenderer;\n        this.cellRendererClass = cellRendererClass;\n        this.cellRendererGui = this.cellRenderer.getGui();\n        if (this.cellRendererGui != null) {\n            const eParent = this.getParentOfValue();\n            clearElement(eParent);\n            eParent.appendChild(this.cellRendererGui);\n        }\n    }\n    afterCellEditorCreated(requestVersion, cellEditor, params, popup, position) {\n        // if editingCell=false, means user cancelled the editor before component was ready.\n        // if versionMismatch, then user cancelled the edit, then started the edit again, and this\n        //   is the first editor which is now stale.\n        const staleComp = requestVersion !== this.editorVersion;\n        if (staleComp) {\n            this.beans.context.destroyBean(cellEditor);\n            return;\n        }\n        const editingCancelledByUserComp = cellEditor.isCancelBeforeStart && cellEditor.isCancelBeforeStart();\n        if (editingCancelledByUserComp) {\n            this.beans.context.destroyBean(cellEditor);\n            this.cellCtrl.stopEditing(true);\n            return;\n        }\n        if (!cellEditor.getGui) {\n            console.warn(`AG Grid: cellEditor for column ${this.column.getId()} is missing getGui() method`);\n            this.beans.context.destroyBean(cellEditor);\n            return;\n        }\n        this.cellEditor = cellEditor;\n        this.cellEditorGui = cellEditor.getGui();\n        const cellEditorInPopup = popup || (cellEditor.isPopup !== undefined && cellEditor.isPopup());\n        if (cellEditorInPopup) {\n            this.addPopupCellEditor(params, position);\n        }\n        else {\n            this.addInCellEditor();\n        }\n        this.refreshEditStyles(true, cellEditorInPopup);\n        if (cellEditor.afterGuiAttached) {\n            cellEditor.afterGuiAttached();\n        }\n    }\n    refreshEditStyles(editing, isPopup) {\n        var _a;\n        this.addOrRemoveCssClass('ag-cell-inline-editing', editing && !isPopup);\n        this.addOrRemoveCssClass('ag-cell-popup-editing', editing && !!isPopup);\n        this.addOrRemoveCssClass('ag-cell-not-inline-editing', !editing || !!isPopup);\n        (_a = this.rowCtrl) === null || _a === void 0 ? void 0 : _a.setInlineEditingCss(editing);\n    }\n    addInCellEditor() {\n        const eGui = this.getGui();\n        // if focus is inside the cell, we move focus to the cell itself\n        // before removing it's contents, otherwise errors could be thrown.\n        const eDocument = this.beans.gridOptionsService.getDocument();\n        if (eGui.contains(eDocument.activeElement)) {\n            eGui.focus();\n        }\n        this.destroyRenderer();\n        this.refreshWrapper(true);\n        this.clearParentOfValue();\n        if (this.cellEditorGui) {\n            const eParent = this.getParentOfValue();\n            eParent.appendChild(this.cellEditorGui);\n        }\n    }\n    addPopupCellEditor(params, position) {\n        if (this.beans.gridOptionsService.get('editType') === 'fullRow') {\n            console.warn('AG Grid: popup cellEditor does not work with fullRowEdit - you cannot use them both ' +\n                '- either turn off fullRowEdit, or stop using popup editors.');\n        }\n        const cellEditor = this.cellEditor;\n        // if a popup, then we wrap in a popup editor and return the popup\n        this.cellEditorPopupWrapper = this.beans.context.createBean(new PopupEditorWrapper(params));\n        const ePopupGui = this.cellEditorPopupWrapper.getGui();\n        if (this.cellEditorGui) {\n            ePopupGui.appendChild(this.cellEditorGui);\n        }\n        const popupService = this.beans.popupService;\n        const useModelPopup = this.beans.gridOptionsService.is('stopEditingWhenCellsLoseFocus');\n        // see if position provided by colDef, if not then check old way of method on cellComp\n        const positionToUse = position != null\n            ? position\n            : cellEditor.getPopupPosition\n                ? cellEditor.getPopupPosition()\n                : 'over';\n        const isRtl = this.beans.gridOptionsService.is('enableRtl');\n        const positionParams = {\n            ePopup: ePopupGui,\n            column: this.column,\n            rowNode: this.rowNode,\n            type: 'popupCellEditor',\n            eventSource: this.getGui(),\n            position: positionToUse,\n            alignSide: isRtl ? 'right' : 'left',\n            keepWithinBounds: true\n        };\n        const positionCallback = popupService.positionPopupByComponent.bind(popupService, positionParams);\n        const translate = this.beans.localeService.getLocaleTextFunc();\n        const addPopupRes = popupService.addPopup({\n            modal: useModelPopup,\n            eChild: ePopupGui,\n            closeOnEsc: true,\n            closedCallback: () => { this.cellCtrl.onPopupEditorClosed(); },\n            anchorToElement: this.getGui(),\n            positionCallback,\n            ariaLabel: translate('ariaLabelCellEditor', 'Cell Editor')\n        });\n        if (addPopupRes) {\n            this.hideEditorPopup = addPopupRes.hideFunc;\n        }\n    }\n    detach() {\n        this.eRow.removeChild(this.getGui());\n    }\n    // if the row is also getting destroyed, then we don't need to remove from dom,\n    // as the row will also get removed, so no need to take out the cells from the row\n    // if the row is going (removing is an expensive operation, so only need to remove\n    // the top part)\n    //\n    // note - this is NOT called by context, as we don't wire / unwire the CellComp for performance reasons.\n    destroy() {\n        this.cellCtrl.stopEditing();\n        this.destroyEditorAndRenderer();\n        this.removeControls();\n        super.destroy();\n    }\n    clearParentOfValue() {\n        const eGui = this.getGui();\n        // if focus is inside the cell, we move focus to the cell itself\n        // before removing it's contents, otherwise errors could be thrown.\n        const eDocument = this.beans.gridOptionsService.getDocument();\n        if (eGui.contains(eDocument.activeElement) && browserSupportsPreventScroll()) {\n            eGui.focus({ preventScroll: true });\n        }\n        clearElement(this.getParentOfValue());\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass RowComp extends Component {\n    constructor(ctrl, beans, containerType) {\n        super();\n        this.cellComps = {};\n        this.beans = beans;\n        this.rowCtrl = ctrl;\n        this.setTemplate(/* html */ `<div comp-id=\"${this.getCompId()}\" style=\"${this.getInitialStyle(containerType)}\"/>`);\n        const eGui = this.getGui();\n        const style = eGui.style;\n        const compProxy = {\n            setDomOrder: domOrder => this.domOrder = domOrder,\n            setCellCtrls: cellCtrls => this.setCellCtrls(cellCtrls),\n            showFullWidth: compDetails => this.showFullWidth(compDetails),\n            getFullWidthCellRenderer: () => this.getFullWidthCellRenderer(),\n            addOrRemoveCssClass: (name, on) => this.addOrRemoveCssClass(name, on),\n            setUserStyles: (styles) => addStylesToElement(eGui, styles),\n            setTop: top => style.top = top,\n            setTransform: transform => style.transform = transform,\n            setRowIndex: rowIndex => eGui.setAttribute('row-index', rowIndex),\n            setRole: role => setAriaRole(eGui, role),\n            setRowId: (rowId) => eGui.setAttribute('row-id', rowId),\n            setRowBusinessKey: businessKey => eGui.setAttribute('row-business-key', businessKey),\n            setTabIndex: tabIndex => eGui.setAttribute('tabindex', tabIndex.toString())\n        };\n        ctrl.setComp(compProxy, this.getGui(), containerType);\n        this.addDestroyFunc(() => {\n            ctrl.unsetComp(containerType);\n        });\n    }\n    getInitialStyle(containerType) {\n        const transform = this.rowCtrl.getInitialTransform(containerType);\n        const top = this.rowCtrl.getInitialRowTop(containerType);\n        return transform ? `transform: ${transform}` : `top: ${top}`;\n    }\n    showFullWidth(compDetails) {\n        const callback = (cellRenderer) => {\n            if (this.isAlive()) {\n                const eGui = cellRenderer.getGui();\n                this.getGui().appendChild(eGui);\n                this.rowCtrl.setupDetailRowAutoHeight(eGui);\n                this.setFullWidthRowComp(cellRenderer);\n            }\n            else {\n                this.beans.context.destroyBean(cellRenderer);\n            }\n        };\n        // if not in cache, create new one\n        const res = compDetails.newAgStackInstance();\n        if (!res) {\n            return;\n        }\n        res.then(callback);\n    }\n    setCellCtrls(cellCtrls) {\n        const cellsToRemove = Object.assign({}, this.cellComps);\n        cellCtrls.forEach(cellCtrl => {\n            const key = cellCtrl.getInstanceId();\n            const existingCellComp = this.cellComps[key];\n            if (existingCellComp == null) {\n                this.newCellComp(cellCtrl);\n            }\n            else {\n                cellsToRemove[key] = null;\n            }\n        });\n        const cellCompsToRemove = getAllValuesInObject(cellsToRemove)\n            .filter(cellComp => cellComp != null);\n        this.destroyCells(cellCompsToRemove);\n        this.ensureDomOrder(cellCtrls);\n    }\n    ensureDomOrder(cellCtrls) {\n        if (!this.domOrder) {\n            return;\n        }\n        const elementsInOrder = [];\n        cellCtrls.forEach(cellCtrl => {\n            const cellComp = this.cellComps[cellCtrl.getInstanceId()];\n            if (cellComp) {\n                elementsInOrder.push(cellComp.getGui());\n            }\n        });\n        setDomChildOrder(this.getGui(), elementsInOrder);\n    }\n    newCellComp(cellCtrl) {\n        const cellComp = new CellComp(this.beans, cellCtrl, this.rowCtrl.isPrintLayout(), this.getGui(), this.rowCtrl.isEditing());\n        this.cellComps[cellCtrl.getInstanceId()] = cellComp;\n        this.getGui().appendChild(cellComp.getGui());\n    }\n    destroy() {\n        super.destroy();\n        this.destroyAllCells();\n    }\n    destroyAllCells() {\n        const cellsToDestroy = getAllValuesInObject(this.cellComps).filter(cp => cp != null);\n        this.destroyCells(cellsToDestroy);\n    }\n    setFullWidthRowComp(fullWidthRowComponent) {\n        if (this.fullWidthCellRenderer) {\n            console.error('AG Grid - should not be setting fullWidthRowComponent twice');\n        }\n        this.fullWidthCellRenderer = fullWidthRowComponent;\n        this.addDestroyFunc(() => {\n            this.fullWidthCellRenderer = this.beans.context.destroyBean(this.fullWidthCellRenderer);\n        });\n    }\n    getFullWidthCellRenderer() {\n        return this.fullWidthCellRenderer;\n    }\n    destroyCells(cellComps) {\n        cellComps.forEach(cellComp => {\n            // could be old reference, ie removed cell\n            if (!cellComp) {\n                return;\n            }\n            // check cellComp belongs in this container\n            const instanceId = cellComp.getCtrl().getInstanceId();\n            if (this.cellComps[instanceId] !== cellComp) {\n                return;\n            }\n            cellComp.detach();\n            cellComp.destroy();\n            this.cellComps[instanceId] = null;\n        });\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1z = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nfunction templateFactory() {\n    const name = Component.elementGettingCreated.getAttribute('name');\n    const cssClasses = RowContainerCtrl.getRowContainerCssClasses(name);\n    let res;\n    const template1 = name === RowContainerName.CENTER;\n    const template2 = name === RowContainerName.TOP_CENTER\n        || name === RowContainerName.STICKY_TOP_CENTER\n        || name === RowContainerName.BOTTOM_CENTER;\n    if (template1) {\n        res = /* html */\n            `<div class=\"${cssClasses.wrapper}\" ref=\"eWrapper\" role=\"presentation\">\n                <div class=\"${cssClasses.viewport}\" ref=\"eViewport\" role=\"presentation\">\n                    <div class=\"${cssClasses.container}\" ref=\"eContainer\"></div>\n                </div>\n            </div>`;\n    }\n    else if (template2) {\n        res = /* html */\n            `<div class=\"${cssClasses.viewport}\" ref=\"eViewport\" role=\"presentation\">\n                <div class=\"${cssClasses.container}\" ref=\"eContainer\"></div>\n            </div>`;\n    }\n    else {\n        res = /* html */\n            `<div class=\"${cssClasses.container}\" ref=\"eContainer\"></div>`;\n    }\n    return res;\n}\nclass RowContainerComp extends Component {\n    constructor() {\n        super(templateFactory());\n        this.rowComps = {};\n        this.name = Component.elementGettingCreated.getAttribute('name');\n        this.type = getRowContainerTypeForName(this.name);\n    }\n    postConstruct() {\n        const compProxy = {\n            setViewportHeight: height => this.eViewport.style.height = height,\n            setRowCtrls: rowCtrls => this.setRowCtrls(rowCtrls),\n            setDomOrder: domOrder => {\n                this.domOrder = domOrder;\n            },\n            setContainerWidth: width => this.eContainer.style.width = width\n        };\n        const ctrl = this.createManagedBean(new RowContainerCtrl(this.name));\n        ctrl.setComp(compProxy, this.eContainer, this.eViewport, this.eWrapper);\n    }\n    preDestroy() {\n        // destroys all row comps\n        this.setRowCtrls([]);\n    }\n    setRowCtrls(rowCtrls) {\n        const oldRows = Object.assign({}, this.rowComps);\n        this.rowComps = {};\n        this.lastPlacedElement = null;\n        const processRow = (rowCon) => {\n            const instanceId = rowCon.getInstanceId();\n            const existingRowComp = oldRows[instanceId];\n            if (existingRowComp) {\n                this.rowComps[instanceId] = existingRowComp;\n                delete oldRows[instanceId];\n                this.ensureDomOrder(existingRowComp.getGui());\n            }\n            else {\n                const rowComp = new RowComp(rowCon, this.beans, this.type);\n                this.rowComps[instanceId] = rowComp;\n                this.appendRow(rowComp.getGui());\n            }\n        };\n        rowCtrls.forEach(processRow);\n        getAllValuesInObject(oldRows).forEach(oldRowComp => {\n            this.eContainer.removeChild(oldRowComp.getGui());\n            oldRowComp.destroy();\n        });\n        setAriaRole(this.eContainer, rowCtrls.length ? \"rowgroup\" : \"presentation\");\n    }\n    appendRow(element) {\n        if (this.domOrder) {\n            insertWithDomOrder(this.eContainer, element, this.lastPlacedElement);\n        }\n        else {\n            this.eContainer.appendChild(element);\n        }\n        this.lastPlacedElement = element;\n    }\n    ensureDomOrder(eRow) {\n        if (this.domOrder) {\n            ensureDomOrder(this.eContainer, eRow, this.lastPlacedElement);\n            this.lastPlacedElement = eRow;\n        }\n    }\n}\n__decorate$1z([\n    Autowired('beans')\n], RowContainerComp.prototype, \"beans\", void 0);\n__decorate$1z([\n    RefSelector('eViewport')\n], RowContainerComp.prototype, \"eViewport\", void 0);\n__decorate$1z([\n    RefSelector('eContainer')\n], RowContainerComp.prototype, \"eContainer\", void 0);\n__decorate$1z([\n    RefSelector('eWrapper')\n], RowContainerComp.prototype, \"eWrapper\", void 0);\n__decorate$1z([\n    PostConstruct\n], RowContainerComp.prototype, \"postConstruct\", null);\n__decorate$1z([\n    PreDestroy\n], RowContainerComp.prototype, \"preDestroy\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1y = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass BodyDropPivotTarget {\n    constructor(pinned) {\n        this.columnsToAggregate = [];\n        this.columnsToGroup = [];\n        this.columnsToPivot = [];\n        this.pinned = pinned;\n    }\n    /** Callback for when drag enters */\n    onDragEnter(draggingEvent) {\n        this.clearColumnsList();\n        // in pivot mode, we don't accept any drops if functions are read only\n        if (this.gridOptionsService.is('functionsReadOnly')) {\n            return;\n        }\n        const dragColumns = draggingEvent.dragItem.columns;\n        if (!dragColumns) {\n            return;\n        }\n        dragColumns.forEach(column => {\n            // we don't allow adding secondary columns\n            if (!column.isPrimary()) {\n                return;\n            }\n            if (column.isAnyFunctionActive()) {\n                return;\n            }\n            if (column.isAllowValue()) {\n                this.columnsToAggregate.push(column);\n            }\n            else if (column.isAllowRowGroup()) {\n                this.columnsToGroup.push(column);\n            }\n            else if (column.isAllowPivot()) {\n                this.columnsToPivot.push(column);\n            }\n        });\n    }\n    getIconName() {\n        const totalColumns = this.columnsToAggregate.length + this.columnsToGroup.length + this.columnsToPivot.length;\n        if (totalColumns > 0) {\n            return this.pinned ? DragAndDropService.ICON_PINNED : DragAndDropService.ICON_MOVE;\n        }\n        return null;\n    }\n    /** Callback for when drag leaves */\n    onDragLeave(draggingEvent) {\n        // if we are taking columns out of the center, then we remove them from the report\n        this.clearColumnsList();\n    }\n    clearColumnsList() {\n        this.columnsToAggregate.length = 0;\n        this.columnsToGroup.length = 0;\n        this.columnsToPivot.length = 0;\n    }\n    /** Callback for when dragging */\n    onDragging(draggingEvent) {\n    }\n    /** Callback for when drag stops */\n    onDragStop(draggingEvent) {\n        if (this.columnsToAggregate.length > 0) {\n            this.columnModel.addValueColumns(this.columnsToAggregate, \"toolPanelDragAndDrop\");\n        }\n        if (this.columnsToGroup.length > 0) {\n            this.columnModel.addRowGroupColumns(this.columnsToGroup, \"toolPanelDragAndDrop\");\n        }\n        if (this.columnsToPivot.length > 0) {\n            this.columnModel.addPivotColumns(this.columnsToPivot, \"toolPanelDragAndDrop\");\n        }\n    }\n}\n__decorate$1y([\n    Autowired('columnModel')\n], BodyDropPivotTarget.prototype, \"columnModel\", void 0);\n__decorate$1y([\n    Autowired('gridOptionsService')\n], BodyDropPivotTarget.prototype, \"gridOptionsService\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1x = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass MoveColumnFeature {\n    constructor(pinned, eContainer) {\n        this.needToMoveLeft = false;\n        this.needToMoveRight = false;\n        this.lastMovedInfo = null;\n        this.pinned = pinned;\n        this.eContainer = eContainer;\n        this.centerContainer = !exists(pinned);\n    }\n    init() {\n        this.ctrlsService.whenReady(() => {\n            this.gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n        });\n    }\n    getIconName() {\n        return this.pinned ? DragAndDropService.ICON_PINNED : DragAndDropService.ICON_MOVE;\n    }\n    onDragEnter(draggingEvent) {\n        // we do dummy drag, so make sure column appears in the right location when first placed\n        const columns = draggingEvent.dragItem.columns;\n        const dragCameFromToolPanel = draggingEvent.dragSource.type === DragSourceType.ToolPanel;\n        if (dragCameFromToolPanel) {\n            // the if statement doesn't work if drag leaves grid, then enters again\n            this.setColumnsVisible(columns, true, \"uiColumnDragged\");\n        }\n        else {\n            // restore previous state of visible columns upon re-entering. this means if the user drags\n            // a group out, and then drags the group back in, only columns that were originally visible\n            // will be visible again. otherwise a group with three columns (but only two visible) could\n            // be dragged out, then when it's dragged in again, all three are visible. this stops that.\n            const visibleState = draggingEvent.dragItem.visibleState;\n            const visibleColumns = (columns || []).filter(column => visibleState[column.getId()]);\n            this.setColumnsVisible(visibleColumns, true, \"uiColumnDragged\");\n        }\n        this.setColumnsPinned(columns, this.pinned, \"uiColumnDragged\");\n        this.onDragging(draggingEvent, true, true);\n    }\n    onDragLeave() {\n        this.ensureIntervalCleared();\n        this.lastMovedInfo = null;\n    }\n    setColumnsVisible(columns, visible, source = \"api\") {\n        if (columns) {\n            const allowedCols = columns.filter(c => !c.getColDef().lockVisible);\n            this.columnModel.setColumnsVisible(allowedCols, visible, source);\n        }\n    }\n    setColumnsPinned(columns, pinned, source = \"api\") {\n        if (columns) {\n            const allowedCols = columns.filter(c => !c.getColDef().lockPinned);\n            this.columnModel.setColumnsPinned(allowedCols, pinned, source);\n        }\n    }\n    onDragStop() {\n        this.onDragging(this.lastDraggingEvent, false, true, true);\n        this.ensureIntervalCleared();\n        this.lastMovedInfo = null;\n    }\n    normaliseX(x) {\n        // flip the coordinate if doing RTL\n        if (this.gridOptionsService.is('enableRtl')) {\n            const clientWidth = this.eContainer.clientWidth;\n            x = clientWidth - x;\n        }\n        // adjust for scroll only if centre container (the pinned containers don't scroll)\n        if (this.centerContainer) {\n            x += this.ctrlsService.getCenterRowContainerCtrl().getCenterViewportScrollLeft();\n        }\n        return x;\n    }\n    checkCenterForScrolling(xAdjustedForScroll) {\n        if (this.centerContainer) {\n            // scroll if the mouse has gone outside the grid (or just outside the scrollable part if pinning)\n            // putting in 50 buffer, so even if user gets to edge of grid, a scroll will happen\n            const firstVisiblePixel = this.ctrlsService.getCenterRowContainerCtrl().getCenterViewportScrollLeft();\n            const lastVisiblePixel = firstVisiblePixel + this.ctrlsService.getCenterRowContainerCtrl().getCenterWidth();\n            if (this.gridOptionsService.is('enableRtl')) {\n                this.needToMoveRight = xAdjustedForScroll < (firstVisiblePixel + 50);\n                this.needToMoveLeft = xAdjustedForScroll > (lastVisiblePixel - 50);\n            }\n            else {\n                this.needToMoveLeft = xAdjustedForScroll < (firstVisiblePixel + 50);\n                this.needToMoveRight = xAdjustedForScroll > (lastVisiblePixel - 50);\n            }\n            if (this.needToMoveLeft || this.needToMoveRight) {\n                this.ensureIntervalStarted();\n            }\n            else {\n                this.ensureIntervalCleared();\n            }\n        }\n    }\n    onDragging(draggingEvent = this.lastDraggingEvent, fromEnter = false, fakeEvent = false, finished = false) {\n        var _a;\n        if (finished) {\n            if (this.lastMovedInfo) {\n                const { columns, toIndex } = this.lastMovedInfo;\n                this.moveColumns(columns, toIndex, 'uiColumnMoved', true);\n            }\n            return;\n        }\n        this.lastDraggingEvent = draggingEvent;\n        // if moving up or down (ie not left or right) then do nothing\n        if (missing(draggingEvent.hDirection)) {\n            return;\n        }\n        const mouseX = this.normaliseX(draggingEvent.x);\n        // if the user is dragging into the panel, ie coming from the side panel into the main grid,\n        // we don't want to scroll the grid this time, it would appear like the table is jumping\n        // each time a column is dragged in.\n        if (!fromEnter) {\n            this.checkCenterForScrolling(mouseX);\n        }\n        const hDirection = this.normaliseDirection(draggingEvent.hDirection);\n        const dragSourceType = draggingEvent.dragSource.type;\n        const allMovingColumns = ((_a = draggingEvent.dragSource.getDragItem().columns) === null || _a === void 0 ? void 0 : _a.filter(col => {\n            if (col.getColDef().lockPinned) {\n                // if locked return true only if both col and container are same pin type.\n                // double equals (==) here on purpose so that null==undefined is true (for not pinned options)\n                return col.getPinned() == this.pinned;\n            }\n            // if not pin locked, then always allowed to be in this container\n            return true;\n        })) || [];\n        this.attemptMoveColumns({ dragSourceType, allMovingColumns, hDirection, mouseX, fromEnter, fakeEvent });\n    }\n    normaliseDirection(hDirection) {\n        if (this.gridOptionsService.is('enableRtl')) {\n            switch (hDirection) {\n                case HorizontalDirection.Left: return HorizontalDirection.Right;\n                case HorizontalDirection.Right: return HorizontalDirection.Left;\n                default: console.error(`AG Grid: Unknown direction ${hDirection}`);\n            }\n        }\n        else {\n            return hDirection;\n        }\n    }\n    attemptMoveColumns(params) {\n        const { dragSourceType, hDirection, mouseX, fromEnter, fakeEvent } = params;\n        const draggingLeft = hDirection === HorizontalDirection.Left;\n        const draggingRight = hDirection === HorizontalDirection.Right;\n        let { allMovingColumns } = params;\n        if (dragSourceType === DragSourceType.HeaderCell) {\n            // If the columns we're dragging are the only visible columns of their group, move the hidden ones too\n            let newCols = [];\n            allMovingColumns.forEach((col) => {\n                let movingGroup = null;\n                let parent = col.getParent();\n                while (parent != null && parent.getDisplayedLeafColumns().length === 1) {\n                    movingGroup = parent;\n                    parent = parent.getParent();\n                }\n                if (movingGroup != null) {\n                    const providedColumnGroup = movingGroup.getProvidedColumnGroup();\n                    providedColumnGroup.getLeafColumns().forEach((newCol) => {\n                        if (!newCols.includes(newCol)) {\n                            newCols.push(newCol);\n                        }\n                    });\n                }\n                else if (!newCols.includes(col)) {\n                    newCols.push(col);\n                }\n            });\n            allMovingColumns = newCols;\n        }\n        // it is important to sort the moving columns as they are in grid columns, as the list of moving columns\n        // could themselves be part of 'married children' groups, which means we need to maintain the order within\n        // the moving list.\n        const allMovingColumnsOrdered = allMovingColumns.slice();\n        this.columnModel.sortColumnsLikeGridColumns(allMovingColumnsOrdered);\n        const validMoves = this.calculateValidMoves(allMovingColumnsOrdered, draggingRight, mouseX);\n        // if cols are not adjacent, then this returns null. when moving, we constrain the direction of the move\n        // (ie left or right) to the mouse direction. however\n        const oldIndex = this.calculateOldIndex(allMovingColumnsOrdered);\n        if (validMoves.length === 0) {\n            return;\n        }\n        const firstValidMove = validMoves[0];\n        // the two check below stop an error when the user grabs a group my a middle column, then\n        // it is possible the mouse pointer is to the right of a column while been dragged left.\n        // so we need to make sure that the mouse pointer is actually left of the left most column\n        // if moving left, and right of the right most column if moving right\n        // we check 'fromEnter' below so we move the column to the new spot if the mouse is coming from\n        // outside the grid, eg if the column is moving from side panel, mouse is moving left, then we should\n        // place the column to the RHS even if the mouse is moving left and the column is already on\n        // the LHS. otherwise we stick to the rule described above.\n        let constrainDirection = oldIndex !== null && !fromEnter;\n        // don't consider 'fromEnter' when dragging header cells, otherwise group can jump to opposite direction of drag\n        if (dragSourceType == DragSourceType.HeaderCell) {\n            constrainDirection = oldIndex !== null;\n        }\n        // if the event was faked by a change in column pin state, then the original location of the column\n        // is not reliable for dictating where the column may now be placed.\n        if (constrainDirection && !fakeEvent) {\n            // only allow left drag if this column is moving left\n            if (draggingLeft && firstValidMove >= oldIndex) {\n                return;\n            }\n            // only allow right drag if this column is moving right\n            if (draggingRight && firstValidMove <= oldIndex) {\n                return;\n            }\n        }\n        // From when we find a move that passes all the rules\n        // Remember what that move would look like in terms of displayed cols\n        // keep going with further moves until we find a different result in displayed output\n        // In this way potentialMoves contains all potential moves over 'hidden' columns\n        const displayedCols = this.columnModel.getAllDisplayedColumns();\n        let potentialMoves = [];\n        let targetOrder = null;\n        for (let i = 0; i < validMoves.length; i++) {\n            const move = validMoves[i];\n            const order = this.columnModel.getProposedColumnOrder(allMovingColumnsOrdered, move);\n            if (!this.columnModel.doesOrderPassRules(order)) {\n                continue;\n            }\n            const displayedOrder = order.filter((col) => displayedCols.includes(col));\n            if (targetOrder === null) {\n                targetOrder = displayedOrder;\n            }\n            else if (!_.areEqual(displayedOrder, targetOrder)) {\n                break; // Stop looking for potential moves if the displayed result changes from the target\n            }\n            const fragCount = this.groupFragCount(order);\n            potentialMoves.push({ move, fragCount });\n        }\n        if (potentialMoves.length === 0) {\n            return;\n        }\n        // The best move is the move with least group fragmentation\n        potentialMoves.sort((a, b) => a.fragCount - b.fragCount);\n        this.moveColumns(allMovingColumns, potentialMoves[0].move, 'uiColumnMoved', false);\n    }\n    // returns the index of the first column in the list ONLY if the cols are all beside\n    // each other. if the cols are not beside each other, then returns null\n    calculateOldIndex(movingCols) {\n        const gridCols = this.columnModel.getAllGridColumns();\n        const indexes = sortNumerically(movingCols.map(col => gridCols.indexOf(col)));\n        const firstIndex = indexes[0];\n        const lastIndex = last(indexes);\n        const spread = lastIndex - firstIndex;\n        const gapsExist = spread !== indexes.length - 1;\n        return gapsExist ? null : firstIndex;\n    }\n    moveColumns(columns, toIndex, source, finished) {\n        this.columnModel.moveColumns(columns, toIndex, source, finished);\n        this.lastMovedInfo = finished ? null : { columns, toIndex };\n    }\n    // A measure of how fragmented in terms of groups an order of columns is\n    groupFragCount(columns) {\n        function parents(col) {\n            let result = [];\n            let parent = col.getOriginalParent();\n            while (parent != null) {\n                result.push(parent);\n                parent = parent.getOriginalParent();\n            }\n            return result;\n        }\n        let count = 0;\n        for (let i = 0; i < columns.length - 1; i++) {\n            let a = parents(columns[i]);\n            let b = parents(columns[i + 1]);\n            // iterate over the longest one\n            [a, b] = a.length > b.length ? [a, b] : [b, a];\n            a.forEach((parent) => {\n                if (b.indexOf(parent) === -1) {\n                    count++; // More fragmented if other column doesn't share the parent\n                }\n            });\n        }\n        return count;\n    }\n    calculateValidMoves(movingCols, draggingRight, mouseX) {\n        const isMoveBlocked = this.gridOptionsService.is('suppressMovableColumns') || movingCols.some(col => col.getColDef().suppressMovable);\n        if (isMoveBlocked) {\n            return [];\n        }\n        // this is the list of cols on the screen, so it's these we use when comparing the x mouse position\n        const allDisplayedCols = this.columnModel.getDisplayedColumns(this.pinned);\n        // but this list is the list of all cols, when we move a col it's the index within this list that gets used,\n        // so the result we return has to be and index location for this list\n        const allGridCols = this.columnModel.getAllGridColumns();\n        const movingDisplayedCols = allDisplayedCols.filter(col => includes(movingCols, col));\n        const otherDisplayedCols = allDisplayedCols.filter(col => !includes(movingCols, col));\n        const otherGridCols = allGridCols.filter(col => !includes(movingCols, col));\n        // work out how many DISPLAYED columns fit before the 'x' position. this gives us the displayIndex.\n        // for example, if cols are a,b,c,d and we find a,b fit before 'x', then we want to place the moving\n        // col between b and c (so that it is under the mouse position).\n        let displayIndex = 0;\n        let availableWidth = mouseX;\n        // if we are dragging right, then the columns will be to the left of the mouse, so we also want to\n        // include the width of the moving columns\n        if (draggingRight) {\n            let widthOfMovingDisplayedCols = 0;\n            movingDisplayedCols.forEach(col => widthOfMovingDisplayedCols += col.getActualWidth());\n            availableWidth -= widthOfMovingDisplayedCols;\n        }\n        if (availableWidth > 0) {\n            // now count how many of the displayed columns will fit to the left\n            for (let i = 0; i < otherDisplayedCols.length; i++) {\n                const col = otherDisplayedCols[i];\n                availableWidth -= col.getActualWidth();\n                if (availableWidth < 0) {\n                    break;\n                }\n                displayIndex++;\n            }\n            // trial and error, if going right, we adjust by one, i didn't manage to quantify why, but it works\n            if (draggingRight) {\n                displayIndex++;\n            }\n        }\n        // the display index is with respect to all the showing columns, however when we move, it's with\n        // respect to all grid columns, so we need to translate from display index to grid index\n        let firstValidMove;\n        if (displayIndex > 0) {\n            const leftColumn = otherDisplayedCols[displayIndex - 1];\n            firstValidMove = otherGridCols.indexOf(leftColumn) + 1;\n        }\n        else {\n            firstValidMove = otherGridCols.indexOf(otherDisplayedCols[0]);\n            if (firstValidMove === -1) {\n                firstValidMove = 0;\n            }\n        }\n        const validMoves = [firstValidMove];\n        const numberComparator = (a, b) => a - b;\n        // add in other valid moves due to hidden columns and married children. for example, a particular\n        // move might break a group that has married children (so move isn't valid), however there could\n        // be hidden columns (not displayed) that we could jump over to make the move valid. because\n        // they are hidden, user doesn't see any different, however it allows moves that would otherwise\n        // not work. for example imagine a group with 9 columns and all columns are hidden except the\n        // middle one (so 4 hidden to left, 4 hidden to right), then when moving 'firstValidMove' will\n        // be relative to the not-shown column, however we need to consider the move jumping over all the\n        // hidden children. if we didn't do this, then if the group just described was at the end (RHS) of the\n        // grid, there would be no way to put a column after it (as the grid would only consider beside the\n        // visible column, which would fail valid move rules).\n        if (draggingRight) {\n            // if dragging right, then we add all the additional moves to the right. so in other words\n            // if the next move is not valid, find the next move to the right that is valid.\n            let pointer = firstValidMove + 1;\n            const lastIndex = allGridCols.length - 1;\n            while (pointer <= lastIndex) {\n                validMoves.push(pointer);\n                pointer++;\n            }\n            // adding columns here means the order is now messed up\n            validMoves.sort(numberComparator);\n        }\n        else {\n            // if dragging left we do the reverse of dragging right, we add in all the valid moves to the\n            // left. however we also have to consider moves to the right for all hidden columns first.\n            // (this logic is hard to reason with, it was worked out with trial and error,\n            // more observation rather than science).\n            // add moves to the right\n            let pointer = firstValidMove;\n            const lastIndex = allGridCols.length - 1;\n            let displacedCol = allGridCols[pointer];\n            while (pointer <= lastIndex && this.isColumnHidden(allDisplayedCols, displacedCol)) {\n                pointer++;\n                validMoves.push(pointer);\n                displacedCol = allGridCols[pointer];\n            }\n            // add moves to the left\n            pointer = firstValidMove - 1;\n            const firstDisplayIndex = 0;\n            while (pointer >= firstDisplayIndex) {\n                validMoves.push(pointer);\n                pointer--;\n            }\n            // adding columns here means the order is now messed up\n            validMoves.sort(numberComparator).reverse();\n        }\n        return validMoves;\n    }\n    // isHidden takes into account visible=false and group=closed, ie it is not displayed\n    isColumnHidden(displayedColumns, col) {\n        return displayedColumns.indexOf(col) < 0;\n    }\n    ensureIntervalStarted() {\n        if (!this.movingIntervalId) {\n            this.intervalCount = 0;\n            this.failedMoveAttempts = 0;\n            this.movingIntervalId = window.setInterval(this.moveInterval.bind(this), 100);\n            if (this.needToMoveLeft) {\n                this.dragAndDropService.setGhostIcon(DragAndDropService.ICON_LEFT, true);\n            }\n            else {\n                this.dragAndDropService.setGhostIcon(DragAndDropService.ICON_RIGHT, true);\n            }\n        }\n    }\n    ensureIntervalCleared() {\n        if (this.movingIntervalId) {\n            window.clearInterval(this.movingIntervalId);\n            this.movingIntervalId = null;\n            this.dragAndDropService.setGhostIcon(DragAndDropService.ICON_MOVE);\n        }\n    }\n    moveInterval() {\n        // the amounts we move get bigger at each interval, so the speed accelerates, starting a bit slow\n        // and getting faster. this is to give smoother user experience. we max at 100px to limit the speed.\n        let pixelsToMove;\n        this.intervalCount++;\n        pixelsToMove = 10 + (this.intervalCount * 5);\n        if (pixelsToMove > 100) {\n            pixelsToMove = 100;\n        }\n        let pixelsMoved = null;\n        const scrollFeature = this.gridBodyCon.getScrollFeature();\n        if (this.needToMoveLeft) {\n            pixelsMoved = scrollFeature.scrollHorizontally(-pixelsToMove);\n        }\n        else if (this.needToMoveRight) {\n            pixelsMoved = scrollFeature.scrollHorizontally(pixelsToMove);\n        }\n        if (pixelsMoved !== 0) {\n            this.onDragging(this.lastDraggingEvent);\n            this.failedMoveAttempts = 0;\n        }\n        else {\n            // we count the failed move attempts. if we fail to move 7 times, then we pin the column.\n            // this is how we achieve pining by dragging the column to the edge of the grid.\n            this.failedMoveAttempts++;\n            const columns = this.lastDraggingEvent.dragItem.columns;\n            const columnsThatCanPin = columns.filter(c => !c.getColDef().lockPinned);\n            if (columnsThatCanPin.length > 0) {\n                this.dragAndDropService.setGhostIcon(DragAndDropService.ICON_PINNED);\n                if (this.failedMoveAttempts > 7) {\n                    const pinType = this.needToMoveLeft ? 'left' : 'right';\n                    this.setColumnsPinned(columnsThatCanPin, pinType, \"uiColumnDragged\");\n                    this.dragAndDropService.nudge();\n                }\n            }\n        }\n    }\n}\n__decorate$1x([\n    Autowired('columnModel')\n], MoveColumnFeature.prototype, \"columnModel\", void 0);\n__decorate$1x([\n    Autowired('dragAndDropService')\n], MoveColumnFeature.prototype, \"dragAndDropService\", void 0);\n__decorate$1x([\n    Autowired('gridOptionsService')\n], MoveColumnFeature.prototype, \"gridOptionsService\", void 0);\n__decorate$1x([\n    Autowired('ctrlsService')\n], MoveColumnFeature.prototype, \"ctrlsService\", void 0);\n__decorate$1x([\n    PostConstruct\n], MoveColumnFeature.prototype, \"init\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1w = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass BodyDropTarget extends BeanStub {\n    constructor(pinned, eContainer) {\n        super();\n        this.pinned = pinned;\n        this.eContainer = eContainer;\n    }\n    postConstruct() {\n        this.ctrlsService.whenReady(p => {\n            switch (this.pinned) {\n                case 'left':\n                    this.eSecondaryContainers = [\n                        [p.gridBodyCtrl.getBodyViewportElement(), p.leftRowContainerCtrl.getContainerElement()],\n                        [p.bottomLeftRowContainerCtrl.getContainerElement()],\n                        [p.topLeftRowContainerCtrl.getContainerElement()]\n                    ];\n                    break;\n                case 'right':\n                    this.eSecondaryContainers = [\n                        [p.gridBodyCtrl.getBodyViewportElement(), p.rightRowContainerCtrl.getContainerElement()],\n                        [p.bottomRightRowContainerCtrl.getContainerElement()],\n                        [p.topRightRowContainerCtrl.getContainerElement()]\n                    ];\n                    break;\n                default:\n                    this.eSecondaryContainers = [\n                        [p.gridBodyCtrl.getBodyViewportElement(), p.centerRowContainerCtrl.getViewportElement()],\n                        [p.bottomCenterRowContainerCtrl.getViewportElement()],\n                        [p.topCenterRowContainerCtrl.getViewportElement()]\n                    ];\n                    break;\n            }\n        });\n    }\n    isInterestedIn(type) {\n        return type === DragSourceType.HeaderCell ||\n            (type === DragSourceType.ToolPanel && this.gridOptionsService.is('allowDragFromColumnsToolPanel'));\n    }\n    getSecondaryContainers() {\n        return this.eSecondaryContainers;\n    }\n    getContainer() {\n        return this.eContainer;\n    }\n    init() {\n        this.moveColumnFeature = this.createManagedBean(new MoveColumnFeature(this.pinned, this.eContainer));\n        this.bodyDropPivotTarget = this.createManagedBean(new BodyDropPivotTarget(this.pinned));\n        this.dragAndDropService.addDropTarget(this);\n    }\n    getIconName() {\n        return this.currentDropListener.getIconName();\n    }\n    // we want to use the bodyPivotTarget if the user is dragging columns in from the toolPanel\n    // and we are in pivot mode, as it has to logic to set pivot/value/group on the columns when\n    // dropped into the grid's body.\n    isDropColumnInPivotMode(draggingEvent) {\n        // in pivot mode, then if moving a column (ie didn't come from toolpanel) then it's\n        // a standard column move, however if it came from the toolpanel, then we are introducing\n        // dimensions or values to the grid\n        return this.columnModel.isPivotMode() && draggingEvent.dragSource.type === DragSourceType.ToolPanel;\n    }\n    onDragEnter(draggingEvent) {\n        // we pick the drop listener depending on whether we are in pivot mode are not. if we are\n        // in pivot mode, then dropping cols changes the row group, pivot, value stats. otherwise\n        // we change visibility state and position.\n        this.currentDropListener = this.isDropColumnInPivotMode(draggingEvent) ? this.bodyDropPivotTarget : this.moveColumnFeature;\n        this.currentDropListener.onDragEnter(draggingEvent);\n    }\n    onDragLeave(params) {\n        this.currentDropListener.onDragLeave(params);\n    }\n    onDragging(params) {\n        this.currentDropListener.onDragging(params);\n    }\n    onDragStop(params) {\n        this.currentDropListener.onDragStop(params);\n    }\n}\n__decorate$1w([\n    Autowired('dragAndDropService')\n], BodyDropTarget.prototype, \"dragAndDropService\", void 0);\n__decorate$1w([\n    Autowired('columnModel')\n], BodyDropTarget.prototype, \"columnModel\", void 0);\n__decorate$1w([\n    Autowired('ctrlsService')\n], BodyDropTarget.prototype, \"ctrlsService\", void 0);\n__decorate$1w([\n    PostConstruct\n], BodyDropTarget.prototype, \"postConstruct\", null);\n__decorate$1w([\n    PostConstruct\n], BodyDropTarget.prototype, \"init\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass CssClassApplier {\n    static getHeaderClassesFromColDef(abstractColDef, gridOptionsService, column, columnGroup) {\n        if (missing(abstractColDef)) {\n            return [];\n        }\n        return this.getColumnClassesFromCollDef(abstractColDef.headerClass, abstractColDef, gridOptionsService, column, columnGroup);\n    }\n    static getToolPanelClassesFromColDef(abstractColDef, gridOptionsService, column, columnGroup) {\n        if (missing(abstractColDef)) {\n            return [];\n        }\n        return this.getColumnClassesFromCollDef(abstractColDef.toolPanelClass, abstractColDef, gridOptionsService, column, columnGroup);\n    }\n    static getClassParams(abstractColDef, gridOptionsService, column, columnGroup) {\n        return {\n            // bad naming, as colDef here can be a group or a column,\n            // however most people won't appreciate the difference,\n            // so keeping it as colDef to avoid confusion.\n            colDef: abstractColDef,\n            column: column,\n            columnGroup: columnGroup,\n            api: gridOptionsService.api,\n            columnApi: gridOptionsService.columnApi,\n            context: gridOptionsService.context\n        };\n    }\n    static getColumnClassesFromCollDef(classesOrFunc, abstractColDef, gridOptionsService, column, columnGroup) {\n        if (missing(classesOrFunc)) {\n            return [];\n        }\n        let classToUse;\n        if (typeof classesOrFunc === 'function') {\n            const params = this.getClassParams(abstractColDef, gridOptionsService, column, columnGroup);\n            classToUse = classesOrFunc(params);\n        }\n        else {\n            classToUse = classesOrFunc;\n        }\n        if (typeof classToUse === 'string') {\n            return [classToUse];\n        }\n        if (Array.isArray(classToUse)) {\n            return [...classToUse];\n        }\n        return [];\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1v = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass HeaderCellComp extends AbstractHeaderCellComp {\n    constructor(ctrl) {\n        super(HeaderCellComp.TEMPLATE, ctrl);\n        this.headerCompVersion = 0;\n        this.column = ctrl.getColumnGroupChild();\n        this.pinned = ctrl.getPinned();\n    }\n    postConstruct() {\n        const eGui = this.getGui();\n        const setAttribute = (name, value, element) => {\n            const actualElement = element ? element : eGui;\n            if (value != null && value != '') {\n                actualElement.setAttribute(name, value);\n            }\n            else {\n                actualElement.removeAttribute(name);\n            }\n        };\n        const compProxy = {\n            setWidth: width => eGui.style.width = width,\n            addOrRemoveCssClass: (cssClassName, on) => this.addOrRemoveCssClass(cssClassName, on),\n            setColId: id => setAttribute('col-id', id),\n            setTitle: title => setAttribute('title', title),\n            setAriaDescription: label => setAriaDescription(eGui, label),\n            setAriaSort: sort => sort ? setAriaSort(eGui, sort) : removeAriaSort(eGui),\n            setUserCompDetails: compDetails => this.setUserCompDetails(compDetails),\n            getUserCompInstance: () => this.headerComp\n        };\n        this.ctrl.setComp(compProxy, this.getGui(), this.eResize, this.eHeaderCompWrapper);\n        const selectAllGui = this.ctrl.getSelectAllGui();\n        this.eResize.insertAdjacentElement('afterend', selectAllGui);\n    }\n    destroyHeaderComp() {\n        if (this.headerComp) {\n            this.eHeaderCompWrapper.removeChild(this.headerCompGui);\n            this.headerComp = this.destroyBean(this.headerComp);\n            this.headerCompGui = undefined;\n        }\n    }\n    setUserCompDetails(compDetails) {\n        this.headerCompVersion++;\n        const versionCopy = this.headerCompVersion;\n        compDetails.newAgStackInstance().then(comp => this.afterCompCreated(versionCopy, comp));\n    }\n    afterCompCreated(version, headerComp) {\n        if (version != this.headerCompVersion || !this.isAlive()) {\n            this.destroyBean(headerComp);\n            return;\n        }\n        this.destroyHeaderComp();\n        this.headerComp = headerComp;\n        this.headerCompGui = headerComp.getGui();\n        this.eHeaderCompWrapper.appendChild(this.headerCompGui);\n        this.ctrl.setDragSource(this.getGui());\n    }\n}\nHeaderCellComp.TEMPLATE = `<div class=\"ag-header-cell\" role=\"columnheader\" tabindex=\"-1\">\n            <div ref=\"eResize\" class=\"ag-header-cell-resize\" role=\"presentation\"></div>\n            <div ref=\"eHeaderCompWrapper\" class=\"ag-header-cell-comp-wrapper\" role=\"presentation\"></div>\n        </div>`;\n__decorate$1v([\n    RefSelector('eResize')\n], HeaderCellComp.prototype, \"eResize\", void 0);\n__decorate$1v([\n    RefSelector('eHeaderCompWrapper')\n], HeaderCellComp.prototype, \"eHeaderCompWrapper\", void 0);\n__decorate$1v([\n    PostConstruct\n], HeaderCellComp.prototype, \"postConstruct\", null);\n__decorate$1v([\n    PreDestroy\n], HeaderCellComp.prototype, \"destroyHeaderComp\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1u = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass HeaderGroupCellComp extends AbstractHeaderCellComp {\n    constructor(ctrl) {\n        super(HeaderGroupCellComp.TEMPLATE, ctrl);\n    }\n    postConstruct() {\n        const eGui = this.getGui();\n        const setAttribute = (key, value) => value != undefined ? eGui.setAttribute(key, value) : eGui.removeAttribute(key);\n        const compProxy = {\n            addOrRemoveCssClass: (cssClassName, on) => this.addOrRemoveCssClass(cssClassName, on),\n            setResizableDisplayed: (displayed) => setDisplayed(this.eResize, displayed),\n            setWidth: width => eGui.style.width = width,\n            setColId: id => eGui.setAttribute(\"col-id\", id),\n            setAriaExpanded: expanded => setAttribute('aria-expanded', expanded),\n            setTitle: title => setAttribute(\"title\", title),\n            setUserCompDetails: details => this.setUserCompDetails(details)\n        };\n        this.ctrl.setComp(compProxy, eGui, this.eResize);\n    }\n    setUserCompDetails(details) {\n        details.newAgStackInstance().then(comp => this.afterHeaderCompCreated(comp));\n    }\n    afterHeaderCompCreated(headerGroupComp) {\n        const destroyFunc = () => this.destroyBean(headerGroupComp);\n        if (!this.isAlive()) {\n            destroyFunc();\n            return;\n        }\n        const eGui = this.getGui();\n        const eHeaderGroupGui = headerGroupComp.getGui();\n        eGui.appendChild(eHeaderGroupGui);\n        this.addDestroyFunc(destroyFunc);\n        this.ctrl.setDragSource(eGui);\n    }\n}\nHeaderGroupCellComp.TEMPLATE = `<div class=\"ag-header-group-cell\" role=\"columnheader\" tabindex=\"-1\">\n            <div ref=\"eResize\" class=\"ag-header-cell-resize\" role=\"presentation\"></div>\n        </div>`;\n__decorate$1u([\n    Autowired('userComponentFactory')\n], HeaderGroupCellComp.prototype, \"userComponentFactory\", void 0);\n__decorate$1u([\n    RefSelector('eResize')\n], HeaderGroupCellComp.prototype, \"eResize\", void 0);\n__decorate$1u([\n    PostConstruct\n], HeaderGroupCellComp.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1t = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar HeaderRowType;\n(function (HeaderRowType) {\n    HeaderRowType[\"COLUMN_GROUP\"] = \"group\";\n    HeaderRowType[\"COLUMN\"] = \"column\";\n    HeaderRowType[\"FLOATING_FILTER\"] = \"filter\";\n})(HeaderRowType || (HeaderRowType = {}));\nclass HeaderRowComp extends Component {\n    constructor(ctrl) {\n        super();\n        this.headerComps = {};\n        const extraClass = ctrl.getType() == HeaderRowType.COLUMN_GROUP ? `ag-header-row-column-group` :\n            ctrl.getType() == HeaderRowType.FLOATING_FILTER ? `ag-header-row-column-filter` : `ag-header-row-column`;\n        this.setTemplate(/* html */ `<div class=\"ag-header-row ${extraClass}\" role=\"row\"></div>`);\n        this.ctrl = ctrl;\n    }\n    //noinspection JSUnusedLocalSymbols\n    init() {\n        const compProxy = {\n            setTransform: transform => this.getGui().style.transform = transform,\n            setHeight: height => this.getGui().style.height = height,\n            setTop: top => this.getGui().style.top = top,\n            setHeaderCtrls: ctrls => this.setHeaderCtrls(ctrls),\n            setWidth: width => this.getGui().style.width = width,\n            setAriaRowIndex: rowIndex => setAriaRowIndex(this.getGui(), rowIndex)\n        };\n        this.ctrl.setComp(compProxy);\n    }\n    destroyHeaderCtrls() {\n        this.setHeaderCtrls([]);\n    }\n    setHeaderCtrls(ctrls) {\n        if (!this.isAlive()) {\n            return;\n        }\n        const oldComps = this.headerComps;\n        this.headerComps = {};\n        ctrls.forEach(ctrl => {\n            const id = ctrl.getInstanceId();\n            let comp = oldComps[id];\n            delete oldComps[id];\n            if (comp == null) {\n                comp = this.createHeaderComp(ctrl);\n                this.getGui().appendChild(comp.getGui());\n            }\n            this.headerComps[id] = comp;\n        });\n        iterateObject(oldComps, (id, comp) => {\n            this.getGui().removeChild(comp.getGui());\n            this.destroyBean(comp);\n        });\n        const isEnsureDomOrder = this.gridOptionsService.is('ensureDomOrder');\n        const isPrintLayout = this.gridOptionsService.isDomLayout('print');\n        if (isEnsureDomOrder || isPrintLayout) {\n            const comps = getAllValuesInObject(this.headerComps);\n            // ordering the columns by left position orders them in the order they appear on the screen\n            comps.sort((a, b) => {\n                const leftA = a.getCtrl().getColumnGroupChild().getLeft();\n                const leftB = b.getCtrl().getColumnGroupChild().getLeft();\n                return leftA - leftB;\n            });\n            const elementsInOrder = comps.map(c => c.getGui());\n            setDomChildOrder(this.getGui(), elementsInOrder);\n        }\n    }\n    createHeaderComp(headerCtrl) {\n        let result;\n        switch (this.ctrl.getType()) {\n            case HeaderRowType.COLUMN_GROUP:\n                result = new HeaderGroupCellComp(headerCtrl);\n                break;\n            case HeaderRowType.FLOATING_FILTER:\n                result = new HeaderFilterCellComp(headerCtrl);\n                break;\n            default:\n                result = new HeaderCellComp(headerCtrl);\n                break;\n        }\n        this.createBean(result);\n        result.setParentComponent(this);\n        return result;\n    }\n}\n__decorate$1t([\n    PostConstruct\n], HeaderRowComp.prototype, \"init\", null);\n__decorate$1t([\n    PreDestroy\n], HeaderRowComp.prototype, \"destroyHeaderCtrls\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1s = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet instanceIdSequence$1 = 0;\nclass AbstractHeaderCellCtrl extends BeanStub {\n    constructor(columnGroupChild, parentRowCtrl) {\n        super();\n        this.lastFocusEvent = null;\n        this.columnGroupChild = columnGroupChild;\n        this.parentRowCtrl = parentRowCtrl;\n        // unique id to this instance, including the column ID to help with debugging in React as it's used in 'key'\n        this.instanceId = columnGroupChild.getUniqueId() + '-' + instanceIdSequence$1++;\n    }\n    shouldStopEventPropagation(e) {\n        const { headerRowIndex, column } = this.focusService.getFocusedHeader();\n        return isUserSuppressingHeaderKeyboardEvent(this.gridOptionsService, e, headerRowIndex, column);\n    }\n    getWrapperHasFocus() {\n        const eDocument = this.gridOptionsService.getDocument();\n        const activeEl = eDocument.activeElement;\n        return activeEl === this.eGui;\n    }\n    setGui(eGui) {\n        this.eGui = eGui;\n        this.addDomData();\n    }\n    handleKeyDown(e) {\n        const wrapperHasFocus = this.getWrapperHasFocus();\n        switch (e.key) {\n            case KeyCode.PAGE_DOWN:\n            case KeyCode.PAGE_UP:\n            case KeyCode.PAGE_HOME:\n            case KeyCode.PAGE_END:\n                if (wrapperHasFocus) {\n                    e.preventDefault();\n                }\n        }\n    }\n    addDomData() {\n        const key = AbstractHeaderCellCtrl.DOM_DATA_KEY_HEADER_CTRL;\n        this.gridOptionsService.setDomData(this.eGui, key, this);\n        this.addDestroyFunc(() => this.gridOptionsService.setDomData(this.eGui, key, null));\n    }\n    getGui() {\n        return this.eGui;\n    }\n    focus(event) {\n        if (!this.eGui) {\n            return false;\n        }\n        this.lastFocusEvent = event || null;\n        this.eGui.focus();\n        return true;\n    }\n    getRowIndex() {\n        return this.parentRowCtrl.getRowIndex();\n    }\n    getParentRowCtrl() {\n        return this.parentRowCtrl;\n    }\n    getPinned() {\n        return this.parentRowCtrl.getPinned();\n    }\n    getInstanceId() {\n        return this.instanceId;\n    }\n    getColumnGroupChild() {\n        return this.columnGroupChild;\n    }\n}\nAbstractHeaderCellCtrl.DOM_DATA_KEY_HEADER_CTRL = 'headerCtrl';\n__decorate$1s([\n    Autowired('focusService')\n], AbstractHeaderCellCtrl.prototype, \"focusService\", void 0);\n__decorate$1s([\n    Autowired('beans')\n], AbstractHeaderCellCtrl.prototype, \"beans\", void 0);\n__decorate$1s([\n    Autowired('userComponentFactory')\n], AbstractHeaderCellCtrl.prototype, \"userComponentFactory\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1r = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass SetLeftFeature extends BeanStub {\n    constructor(columnOrGroup, eCell, beans, colsSpanning) {\n        super();\n        this.columnOrGroup = columnOrGroup;\n        this.eCell = eCell;\n        this.ariaEl = this.eCell.querySelector('[role=columnheader]') || this.eCell;\n        this.colsSpanning = colsSpanning;\n        this.beans = beans;\n    }\n    setColsSpanning(colsSpanning) {\n        this.colsSpanning = colsSpanning;\n        this.onLeftChanged();\n    }\n    getColumnOrGroup() {\n        if (this.beans.gridOptionsService.is('enableRtl') && this.colsSpanning) {\n            return last(this.colsSpanning);\n        }\n        return this.columnOrGroup;\n    }\n    postConstruct() {\n        this.addManagedListener(this.columnOrGroup, Column.EVENT_LEFT_CHANGED, this.onLeftChanged.bind(this));\n        this.setLeftFirstTime();\n        // when in print layout, the left position is also dependent on the width of the pinned sections.\n        // so additionally update left if any column width changes.\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED, this.onLeftChanged.bind(this));\n        // setting left has a dependency on print layout\n        this.addManagedPropertyListener('domLayout', this.onLeftChanged.bind(this));\n    }\n    setLeftFirstTime() {\n        const suppressMoveAnimation = this.beans.gridOptionsService.is('suppressColumnMoveAnimation');\n        const oldLeftExists = exists(this.columnOrGroup.getOldLeft());\n        const animateColumnMove = this.beans.columnAnimationService.isActive() && oldLeftExists && !suppressMoveAnimation;\n        if (animateColumnMove) {\n            this.animateInLeft();\n        }\n        else {\n            this.onLeftChanged();\n        }\n    }\n    animateInLeft() {\n        const colOrGroup = this.getColumnOrGroup();\n        const left = colOrGroup.getLeft();\n        const oldLeft = colOrGroup.getOldLeft();\n        const oldActualLeft = this.modifyLeftForPrintLayout(colOrGroup, oldLeft);\n        const actualLeft = this.modifyLeftForPrintLayout(colOrGroup, left);\n        this.setLeft(oldActualLeft);\n        // we must keep track of the left we want to set to, as this would otherwise lead to a race\n        // condition, if the user changed the left value many times in one VM turn, then we want to make\n        // make sure the actualLeft we set in the timeout below (in the next VM turn) is the correct left\n        // position. eg if user changes column position twice, then setLeft() below executes twice in next\n        // VM turn, but only one (the correct one) should get applied.\n        this.actualLeft = actualLeft;\n        this.beans.columnAnimationService.executeNextVMTurn(() => {\n            // test this left value is the latest one to be applied, and if not, do nothing\n            if (this.actualLeft === actualLeft) {\n                this.setLeft(actualLeft);\n            }\n        });\n    }\n    onLeftChanged() {\n        const colOrGroup = this.getColumnOrGroup();\n        const left = colOrGroup.getLeft();\n        this.actualLeft = this.modifyLeftForPrintLayout(colOrGroup, left);\n        this.setLeft(this.actualLeft);\n    }\n    modifyLeftForPrintLayout(colOrGroup, leftPosition) {\n        const printLayout = this.beans.gridOptionsService.isDomLayout('print');\n        if (!printLayout) {\n            return leftPosition;\n        }\n        if (colOrGroup.getPinned() === 'left') {\n            return leftPosition;\n        }\n        const leftWidth = this.beans.columnModel.getDisplayedColumnsLeftWidth();\n        if (colOrGroup.getPinned() === 'right') {\n            const bodyWidth = this.beans.columnModel.getBodyContainerWidth();\n            return leftWidth + bodyWidth + leftPosition;\n        }\n        // is in body\n        return leftWidth + leftPosition;\n    }\n    setLeft(value) {\n        // if the value is null, then that means the column is no longer\n        // displayed. there is logic in the rendering to fade these columns\n        // out, so we don't try and change their left positions.\n        if (exists(value)) {\n            this.eCell.style.left = `${value}px`;\n        }\n        let indexColumn;\n        if (this.columnOrGroup instanceof Column) {\n            indexColumn = this.columnOrGroup;\n        }\n        else {\n            const columnGroup = this.columnOrGroup;\n            const children = columnGroup.getLeafColumns();\n            if (!children.length) {\n                return;\n            }\n            if (children.length > 1) {\n                setAriaColSpan(this.ariaEl, children.length);\n            }\n            indexColumn = children[0];\n        }\n        const index = this.beans.columnModel.getAriaColumnIndex(indexColumn);\n        setAriaColIndex(this.ariaEl, index);\n    }\n}\n__decorate$1r([\n    PostConstruct\n], SetLeftFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1q = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass HoverFeature extends BeanStub {\n    constructor(columns, element) {\n        super();\n        this.columns = columns;\n        this.element = element;\n    }\n    postConstruct() {\n        if (this.gridOptionsService.is('columnHoverHighlight')) {\n            this.addMouseHoverListeners();\n        }\n    }\n    addMouseHoverListeners() {\n        this.addManagedListener(this.element, 'mouseout', this.onMouseOut.bind(this));\n        this.addManagedListener(this.element, 'mouseover', this.onMouseOver.bind(this));\n    }\n    onMouseOut() {\n        this.columnHoverService.clearMouseOver();\n    }\n    onMouseOver() {\n        this.columnHoverService.setMouseOver(this.columns);\n    }\n}\n__decorate$1q([\n    Autowired('columnHoverService')\n], HoverFeature.prototype, \"columnHoverService\", void 0);\n__decorate$1q([\n    PostConstruct\n], HoverFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1p = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass HeaderFilterCellCtrl extends AbstractHeaderCellCtrl {\n    constructor(column, parentRowCtrl) {\n        super(column, parentRowCtrl);\n        this.iconCreated = false;\n        this.column = column;\n    }\n    setComp(comp, eGui, eButtonShowMainFilter, eFloatingFilterBody) {\n        super.setGui(eGui);\n        this.comp = comp;\n        this.eButtonShowMainFilter = eButtonShowMainFilter;\n        this.eFloatingFilterBody = eFloatingFilterBody;\n        this.setupActive();\n        this.setupWidth();\n        this.setupLeft();\n        this.setupHover();\n        this.setupFocus();\n        this.setupAria();\n        this.setupFilterButton();\n        this.setupUserComp();\n        this.setupSyncWithFilter();\n        this.setupUi();\n        this.addManagedListener(this.eButtonShowMainFilter, 'click', this.showParentFilter.bind(this));\n        this.setupFilterChangedListener();\n        this.addManagedListener(this.column, Column.EVENT_COL_DEF_CHANGED, this.onColDefChanged.bind(this));\n    }\n    setupActive() {\n        const colDef = this.column.getColDef();\n        const filterExists = !!colDef.filter;\n        const floatingFilterExists = !!colDef.floatingFilter;\n        this.active = filterExists && floatingFilterExists;\n    }\n    setupUi() {\n        this.comp.setButtonWrapperDisplayed(!this.suppressFilterButton && this.active);\n        this.comp.addOrRemoveBodyCssClass('ag-floating-filter-full-body', this.suppressFilterButton);\n        this.comp.addOrRemoveBodyCssClass('ag-floating-filter-body', !this.suppressFilterButton);\n        if (!this.active || this.iconCreated) {\n            return;\n        }\n        const eMenuIcon = createIconNoSpan('filter', this.gridOptionsService, this.column);\n        if (eMenuIcon) {\n            this.iconCreated = true;\n            this.eButtonShowMainFilter.appendChild(eMenuIcon);\n        }\n    }\n    setupFocus() {\n        this.createManagedBean(new ManagedFocusFeature(this.eGui, {\n            shouldStopEventPropagation: this.shouldStopEventPropagation.bind(this),\n            onTabKeyDown: this.onTabKeyDown.bind(this),\n            handleKeyDown: this.handleKeyDown.bind(this),\n            onFocusIn: this.onFocusIn.bind(this)\n        }));\n    }\n    setupAria() {\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        setAriaLabel(this.eButtonShowMainFilter, localeTextFunc('ariaFilterMenuOpen', 'Open Filter Menu'));\n    }\n    onTabKeyDown(e) {\n        const eDocument = this.gridOptionsService.getDocument();\n        const activeEl = eDocument.activeElement;\n        const wrapperHasFocus = activeEl === this.eGui;\n        if (wrapperHasFocus) {\n            return;\n        }\n        const nextFocusableEl = this.focusService.findNextFocusableElement(this.eGui, null, e.shiftKey);\n        if (nextFocusableEl) {\n            this.beans.headerNavigationService.scrollToColumn(this.column);\n            e.preventDefault();\n            nextFocusableEl.focus();\n            return;\n        }\n        const nextFocusableColumn = this.findNextColumnWithFloatingFilter(e.shiftKey);\n        if (!nextFocusableColumn) {\n            return;\n        }\n        if (this.focusService.focusHeaderPosition({\n            headerPosition: {\n                headerRowIndex: this.getParentRowCtrl().getRowIndex(),\n                column: nextFocusableColumn\n            },\n            event: e\n        })) {\n            e.preventDefault();\n        }\n    }\n    findNextColumnWithFloatingFilter(backwards) {\n        const columModel = this.beans.columnModel;\n        let nextCol = this.column;\n        do {\n            nextCol = backwards\n                ? columModel.getDisplayedColBefore(nextCol)\n                : columModel.getDisplayedColAfter(nextCol);\n            if (!nextCol) {\n                break;\n            }\n        } while (!nextCol.getColDef().filter || !nextCol.getColDef().floatingFilter);\n        return nextCol;\n    }\n    handleKeyDown(e) {\n        super.handleKeyDown(e);\n        const wrapperHasFocus = this.getWrapperHasFocus();\n        switch (e.key) {\n            case KeyCode.UP:\n            case KeyCode.DOWN:\n                if (!wrapperHasFocus) {\n                    e.preventDefault();\n                }\n            case KeyCode.LEFT:\n            case KeyCode.RIGHT:\n                if (wrapperHasFocus) {\n                    return;\n                }\n                e.stopPropagation();\n            case KeyCode.ENTER:\n                if (wrapperHasFocus) {\n                    if (this.focusService.focusInto(this.eGui)) {\n                        e.preventDefault();\n                    }\n                }\n                break;\n            case KeyCode.ESCAPE:\n                if (!wrapperHasFocus) {\n                    this.eGui.focus();\n                }\n        }\n    }\n    onFocusIn(e) {\n        const isRelatedWithin = this.eGui.contains(e.relatedTarget);\n        // when the focus is already within the component,\n        // we default to the browser's behavior\n        if (isRelatedWithin) {\n            return;\n        }\n        const notFromHeaderWrapper = !!e.relatedTarget && !e.relatedTarget.classList.contains('ag-floating-filter');\n        const fromWithinHeader = !!e.relatedTarget && isElementChildOfClass(e.relatedTarget, 'ag-floating-filter');\n        if (notFromHeaderWrapper && fromWithinHeader && e.target === this.eGui) {\n            const lastFocusEvent = this.lastFocusEvent;\n            const fromTab = !!(lastFocusEvent && lastFocusEvent.key === KeyCode.TAB);\n            if (lastFocusEvent && fromTab) {\n                const shouldFocusLast = lastFocusEvent.shiftKey;\n                this.focusService.focusInto(this.eGui, shouldFocusLast);\n            }\n        }\n        const rowIndex = this.getRowIndex();\n        this.beans.focusService.setFocusedHeader(rowIndex, this.column);\n    }\n    setupHover() {\n        this.createManagedBean(new HoverFeature([this.column], this.eGui));\n        const listener = () => {\n            if (!this.gridOptionsService.is('columnHoverHighlight')) {\n                return;\n            }\n            const hovered = this.columnHoverService.isHovered(this.column);\n            this.comp.addOrRemoveCssClass('ag-column-hover', hovered);\n        };\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_HOVER_CHANGED, listener);\n        listener();\n    }\n    setupLeft() {\n        const setLeftFeature = new SetLeftFeature(this.column, this.eGui, this.beans);\n        this.createManagedBean(setLeftFeature);\n    }\n    setupFilterButton() {\n        const colDef = this.column.getColDef();\n        // this is unusual - we need a params value OUTSIDE the component the params are for.\n        // the params are for the floating filter component, but this property is actually for the wrapper.\n        this.suppressFilterButton = colDef.floatingFilterComponentParams ? !!colDef.floatingFilterComponentParams.suppressFilterButton : false;\n    }\n    setupUserComp() {\n        if (!this.active) {\n            return;\n        }\n        const compDetails = this.filterManager.getFloatingFilterCompDetails(this.column, () => this.showParentFilter());\n        if (compDetails) {\n            this.setCompDetails(compDetails);\n        }\n    }\n    setCompDetails(compDetails) {\n        this.userCompDetails = compDetails;\n        this.comp.setCompDetails(compDetails);\n    }\n    showParentFilter() {\n        const eventSource = this.suppressFilterButton ? this.eFloatingFilterBody : this.eButtonShowMainFilter;\n        this.menuFactory.showMenuAfterButtonClick(this.column, eventSource, 'floatingFilter', 'filterMenuTab', ['filterMenuTab']);\n    }\n    setupSyncWithFilter() {\n        if (!this.active) {\n            return;\n        }\n        const syncWithFilter = (filterChangedEvent) => {\n            const compPromise = this.comp.getFloatingFilterComp();\n            if (!compPromise) {\n                return;\n            }\n            compPromise.then(comp => {\n                if (comp) {\n                    const parentModel = this.filterManager.getCurrentFloatingFilterParentModel(this.column);\n                    comp.onParentModelChanged(parentModel, filterChangedEvent);\n                }\n            });\n        };\n        this.destroySyncListener = this.addManagedListener(this.column, Column.EVENT_FILTER_CHANGED, syncWithFilter);\n        if (this.filterManager.isFilterActive(this.column)) {\n            syncWithFilter(null);\n        }\n    }\n    setupWidth() {\n        const listener = () => {\n            const width = `${this.column.getActualWidth()}px`;\n            this.comp.setWidth(width);\n        };\n        this.addManagedListener(this.column, Column.EVENT_WIDTH_CHANGED, listener);\n        listener();\n    }\n    setupFilterChangedListener() {\n        if (this.active) {\n            this.destroyFilterChangedListener = this.addManagedListener(this.column, Column.EVENT_FILTER_CHANGED, this.updateFilterButton.bind(this));\n        }\n    }\n    updateFilterButton() {\n        if (!this.suppressFilterButton && this.comp) {\n            this.comp.setButtonWrapperDisplayed(this.filterManager.isFilterAllowed(this.column));\n        }\n    }\n    onColDefChanged() {\n        var _a, _b;\n        const wasActive = this.active;\n        this.setupActive();\n        const becomeActive = !wasActive && this.active;\n        if (wasActive && !this.active) {\n            (_a = this.destroySyncListener) === null || _a === void 0 ? void 0 : _a.call(this);\n            (_b = this.destroyFilterChangedListener) === null || _b === void 0 ? void 0 : _b.call(this);\n        }\n        const newCompDetails = this.active\n            ? this.filterManager.getFloatingFilterCompDetails(this.column, () => this.showParentFilter())\n            : null;\n        const compPromise = this.comp.getFloatingFilterComp();\n        if (!compPromise || !newCompDetails) {\n            this.updateCompDetails(newCompDetails, becomeActive);\n        }\n        else {\n            compPromise.then(compInstance => {\n                var _a;\n                if (!compInstance || ((_a = this.userCompDetails) === null || _a === void 0 ? void 0 : _a.componentClass) !== newCompDetails.componentClass) {\n                    this.updateCompDetails(newCompDetails, becomeActive);\n                }\n            });\n        }\n    }\n    updateCompDetails(compDetails, becomeActive) {\n        this.setCompDetails(compDetails);\n        // filter button and UI can change based on params, so always want to update\n        this.setupFilterButton();\n        this.setupUi();\n        if (becomeActive) {\n            this.setupSyncWithFilter();\n            this.setupFilterChangedListener();\n        }\n    }\n}\n__decorate$1p([\n    Autowired('filterManager')\n], HeaderFilterCellCtrl.prototype, \"filterManager\", void 0);\n__decorate$1p([\n    Autowired('columnHoverService')\n], HeaderFilterCellCtrl.prototype, \"columnHoverService\", void 0);\n__decorate$1p([\n    Autowired('menuFactory')\n], HeaderFilterCellCtrl.prototype, \"menuFactory\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1o = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ResizeFeature extends BeanStub {\n    constructor(pinned, column, eResize, comp, ctrl) {\n        super();\n        this.pinned = pinned;\n        this.column = column;\n        this.eResize = eResize;\n        this.comp = comp;\n        this.ctrl = ctrl;\n    }\n    postConstruct() {\n        const colDef = this.column.getColDef();\n        const destroyResizeFuncs = [];\n        let canResize;\n        let canAutosize;\n        const addResize = () => {\n            setDisplayed(this.eResize, canResize);\n            if (!canResize) {\n                return;\n            }\n            const finishedWithResizeFunc = this.horizontalResizeService.addResizeBar({\n                eResizeBar: this.eResize,\n                onResizeStart: this.onResizeStart.bind(this),\n                onResizing: this.onResizing.bind(this, false),\n                onResizeEnd: this.onResizing.bind(this, true)\n            });\n            destroyResizeFuncs.push(finishedWithResizeFunc);\n            if (canAutosize) {\n                const skipHeaderOnAutoSize = this.gridOptionsService.is('skipHeaderOnAutoSize');\n                const autoSizeColListener = () => {\n                    this.columnModel.autoSizeColumn(this.column, skipHeaderOnAutoSize, \"uiColumnResized\");\n                };\n                this.eResize.addEventListener('dblclick', autoSizeColListener);\n                const touchListener = new TouchListener(this.eResize);\n                touchListener.addEventListener(TouchListener.EVENT_DOUBLE_TAP, autoSizeColListener);\n                this.addDestroyFunc(() => {\n                    this.eResize.removeEventListener('dblclick', autoSizeColListener);\n                    touchListener.removeEventListener(TouchListener.EVENT_DOUBLE_TAP, autoSizeColListener);\n                    touchListener.destroy();\n                });\n            }\n        };\n        const removeResize = () => {\n            destroyResizeFuncs.forEach(f => f());\n            destroyResizeFuncs.length = 0;\n        };\n        const refresh = () => {\n            const resize = this.column.isResizable();\n            const autoSize = !this.gridOptionsService.is('suppressAutoSize') && !colDef.suppressAutoSize;\n            const propertyChange = resize !== canResize || autoSize !== canAutosize;\n            if (propertyChange) {\n                canResize = resize;\n                canAutosize = autoSize;\n                removeResize();\n                addResize();\n            }\n        };\n        refresh();\n        this.addDestroyFunc(removeResize);\n        this.ctrl.addRefreshFunction(refresh);\n    }\n    onResizing(finished, resizeAmount) {\n        const resizeAmountNormalised = this.normaliseResizeAmount(resizeAmount);\n        const columnWidths = [{ key: this.column, newWidth: this.resizeStartWidth + resizeAmountNormalised }];\n        this.columnModel.setColumnWidths(columnWidths, this.resizeWithShiftKey, finished, \"uiColumnResized\");\n        if (finished) {\n            this.comp.addOrRemoveCssClass('ag-column-resizing', false);\n        }\n    }\n    onResizeStart(shiftKey) {\n        this.resizeStartWidth = this.column.getActualWidth();\n        this.resizeWithShiftKey = shiftKey;\n        this.comp.addOrRemoveCssClass('ag-column-resizing', true);\n    }\n    // optionally inverts the drag, depending on pinned and RTL\n    // note - this method is duplicated in RenderedHeaderGroupCell - should refactor out?\n    normaliseResizeAmount(dragChange) {\n        let result = dragChange;\n        const notPinningLeft = this.pinned !== 'left';\n        const pinningRight = this.pinned === 'right';\n        if (this.gridOptionsService.is('enableRtl')) {\n            // for RTL, dragging left makes the col bigger, except when pinning left\n            if (notPinningLeft) {\n                result *= -1;\n            }\n        }\n        else {\n            // for LTR (ie normal), dragging left makes the col smaller, except when pinning right\n            if (pinningRight) {\n                result *= -1;\n            }\n        }\n        return result;\n    }\n}\n__decorate$1o([\n    Autowired('horizontalResizeService')\n], ResizeFeature.prototype, \"horizontalResizeService\", void 0);\n__decorate$1o([\n    Autowired('columnModel')\n], ResizeFeature.prototype, \"columnModel\", void 0);\n__decorate$1o([\n    PostConstruct\n], ResizeFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1n = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass SelectAllFeature extends BeanStub {\n    constructor(column) {\n        super();\n        this.cbSelectAllVisible = false;\n        this.processingEventFromCheckbox = false;\n        this.column = column;\n        const colDef = column.getColDef();\n        this.filteredOnly = !!(colDef === null || colDef === void 0 ? void 0 : colDef.headerCheckboxSelectionFilteredOnly);\n        this.currentPageOnly = !!(colDef === null || colDef === void 0 ? void 0 : colDef.headerCheckboxSelectionCurrentPageOnly);\n    }\n    onSpaceKeyDown(e) {\n        const checkbox = this.cbSelectAll;\n        const eDocument = this.gridOptionsService.getDocument();\n        if (checkbox.isDisplayed() && !checkbox.getGui().contains(eDocument.activeElement)) {\n            e.preventDefault();\n            checkbox.setValue(!checkbox.getValue());\n        }\n    }\n    getCheckboxGui() {\n        return this.cbSelectAll.getGui();\n    }\n    setComp(ctrl) {\n        this.headerCellCtrl = ctrl;\n        this.cbSelectAll = this.createManagedBean(new AgCheckbox());\n        this.cbSelectAll.addCssClass('ag-header-select-all');\n        setAriaRole(this.cbSelectAll.getGui(), 'presentation');\n        this.showOrHideSelectAll();\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, this.showOrHideSelectAll.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_CHANGED, this.showOrHideSelectAll.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_SELECTION_CHANGED, this.onSelectionChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_PAGINATION_CHANGED, this.onSelectionChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_MODEL_UPDATED, this.onModelChanged.bind(this));\n        this.addManagedListener(this.cbSelectAll, AgCheckbox.EVENT_CHANGED, this.onCbSelectAll.bind(this));\n        setAriaHidden(this.cbSelectAll.getGui(), true);\n        this.cbSelectAll.getInputElement().setAttribute('tabindex', '-1');\n        this.refreshSelectAllLabel();\n    }\n    showOrHideSelectAll() {\n        this.cbSelectAllVisible = this.isCheckboxSelection();\n        this.cbSelectAll.setDisplayed(this.cbSelectAllVisible, { skipAriaHidden: true });\n        if (this.cbSelectAllVisible) {\n            // in case user is trying this feature with the wrong model type\n            this.checkRightRowModelType('selectAllCheckbox');\n            // make sure checkbox is showing the right state\n            this.updateStateOfCheckbox();\n        }\n        this.refreshSelectAllLabel();\n    }\n    onModelChanged() {\n        if (!this.cbSelectAllVisible) {\n            return;\n        }\n        this.updateStateOfCheckbox();\n    }\n    onSelectionChanged() {\n        if (!this.cbSelectAllVisible) {\n            return;\n        }\n        this.updateStateOfCheckbox();\n    }\n    updateStateOfCheckbox() {\n        if (this.processingEventFromCheckbox) {\n            return;\n        }\n        this.processingEventFromCheckbox = true;\n        const allSelected = this.selectionService.getSelectAllState(this.filteredOnly, this.currentPageOnly);\n        this.cbSelectAll.setValue(allSelected);\n        this.refreshSelectAllLabel();\n        this.processingEventFromCheckbox = false;\n    }\n    refreshSelectAllLabel() {\n        const translate = this.localeService.getLocaleTextFunc();\n        const checked = this.cbSelectAll.getValue();\n        const ariaStatus = checked ? translate('ariaChecked', 'checked') : translate('ariaUnchecked', 'unchecked');\n        const ariaLabel = translate('ariaRowSelectAll', 'Press Space to toggle all rows selection');\n        if (!this.cbSelectAllVisible) {\n            this.headerCellCtrl.setAriaDescriptionProperty('selectAll', null);\n        }\n        else {\n            this.headerCellCtrl.setAriaDescriptionProperty('selectAll', `${ariaLabel} (${ariaStatus})`);\n        }\n        this.cbSelectAll.setInputAriaLabel(`${ariaLabel} (${ariaStatus})`);\n        this.headerCellCtrl.refreshAriaDescription();\n    }\n    checkRightRowModelType(feature) {\n        const rowModelType = this.rowModel.getType();\n        const rowModelMatches = rowModelType === 'clientSide' || rowModelType === 'serverSide';\n        if (!rowModelMatches) {\n            console.warn(`AG Grid: ${feature} is only available if using 'clientSide' or 'serverSide' rowModelType, you are using ${rowModelType}.`);\n            return false;\n        }\n        return true;\n    }\n    onCbSelectAll() {\n        if (this.processingEventFromCheckbox) {\n            return;\n        }\n        if (!this.cbSelectAllVisible) {\n            return;\n        }\n        const value = this.cbSelectAll.getValue();\n        let source = 'uiSelectAll';\n        if (this.currentPageOnly)\n            source = 'uiSelectAllCurrentPage';\n        else if (this.filteredOnly)\n            source = 'uiSelectAllFiltered';\n        const params = {\n            source,\n            justFiltered: this.filteredOnly,\n            justCurrentPage: this.currentPageOnly,\n        };\n        if (value) {\n            this.selectionService.selectAllRowNodes(params);\n        }\n        else {\n            this.selectionService.deselectAllRowNodes(params);\n        }\n    }\n    isCheckboxSelection() {\n        let result = this.column.getColDef().headerCheckboxSelection;\n        if (typeof result === 'function') {\n            const func = result;\n            const params = {\n                column: this.column,\n                colDef: this.column.getColDef(),\n                columnApi: this.columnApi,\n                api: this.gridApi,\n                context: this.gridOptionsService.context\n            };\n            result = func(params);\n        }\n        if (result) {\n            return this.checkRightRowModelType('headerCheckboxSelection');\n        }\n        return false;\n    }\n}\n__decorate$1n([\n    Autowired('gridApi')\n], SelectAllFeature.prototype, \"gridApi\", void 0);\n__decorate$1n([\n    Autowired('columnApi')\n], SelectAllFeature.prototype, \"columnApi\", void 0);\n__decorate$1n([\n    Autowired('rowModel')\n], SelectAllFeature.prototype, \"rowModel\", void 0);\n__decorate$1n([\n    Autowired('selectionService')\n], SelectAllFeature.prototype, \"selectionService\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1m = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass HeaderCellCtrl extends AbstractHeaderCellCtrl {\n    constructor(column, parentRowCtrl) {\n        super(column, parentRowCtrl);\n        this.refreshFunctions = [];\n        this.userHeaderClasses = new Set();\n        this.ariaDescriptionProperties = new Map();\n        this.column = column;\n    }\n    setComp(comp, eGui, eResize, eHeaderCompWrapper) {\n        super.setGui(eGui);\n        this.comp = comp;\n        this.updateState();\n        this.setupWidth();\n        this.setupMovingCss();\n        this.setupMenuClass();\n        this.setupSortableClass();\n        this.setupWrapTextClass();\n        this.refreshSpanHeaderHeight();\n        this.setupAutoHeight(eHeaderCompWrapper);\n        this.addColumnHoverListener();\n        this.setupFilterCss();\n        this.setupColId();\n        this.setupClassesFromColDef();\n        this.setupTooltip();\n        this.addActiveHeaderMouseListeners();\n        this.setupSelectAll();\n        this.setupUserComp();\n        this.refreshAria();\n        this.createManagedBean(new ResizeFeature(this.getPinned(), this.column, eResize, comp, this));\n        this.createManagedBean(new HoverFeature([this.column], eGui));\n        this.createManagedBean(new SetLeftFeature(this.column, eGui, this.beans));\n        this.createManagedBean(new ManagedFocusFeature(eGui, {\n            shouldStopEventPropagation: e => this.shouldStopEventPropagation(e),\n            onTabKeyDown: () => null,\n            handleKeyDown: this.handleKeyDown.bind(this),\n            onFocusIn: this.onFocusIn.bind(this),\n            onFocusOut: this.onFocusOut.bind(this)\n        }));\n        this.addManagedListener(this.column, Column.EVENT_COL_DEF_CHANGED, this.onColDefChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_VALUE_CHANGED, this.onColumnValueChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, this.onColumnRowGroupChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_CHANGED, this.onColumnPivotChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_HEADER_HEIGHT_CHANGED, this.onHeaderHeightChanged.bind(this));\n    }\n    setupUserComp() {\n        const compDetails = this.lookupUserCompDetails();\n        this.setCompDetails(compDetails);\n    }\n    setCompDetails(compDetails) {\n        this.userCompDetails = compDetails;\n        this.comp.setUserCompDetails(compDetails);\n    }\n    lookupUserCompDetails() {\n        const params = this.createParams();\n        const colDef = this.column.getColDef();\n        return this.userComponentFactory.getHeaderCompDetails(colDef, params);\n    }\n    createParams() {\n        const colDef = this.column.getColDef();\n        const params = {\n            column: this.column,\n            displayName: this.displayName,\n            enableSorting: colDef.sortable,\n            enableMenu: this.menuEnabled,\n            showColumnMenu: (source) => {\n                this.gridApi.showColumnMenuAfterButtonClick(this.column, source);\n            },\n            progressSort: (multiSort) => {\n                this.sortController.progressSort(this.column, !!multiSort, \"uiColumnSorted\");\n            },\n            setSort: (sort, multiSort) => {\n                this.sortController.setSortForColumn(this.column, sort, !!multiSort, \"uiColumnSorted\");\n            },\n            api: this.gridApi,\n            columnApi: this.columnApi,\n            context: this.gridOptionsService.context,\n            eGridHeader: this.getGui()\n        };\n        return params;\n    }\n    setupSelectAll() {\n        this.selectAllFeature = this.createManagedBean(new SelectAllFeature(this.column));\n        this.selectAllFeature.setComp(this);\n    }\n    getSelectAllGui() {\n        return this.selectAllFeature.getCheckboxGui();\n    }\n    handleKeyDown(e) {\n        super.handleKeyDown(e);\n        if (e.key === KeyCode.SPACE) {\n            this.selectAllFeature.onSpaceKeyDown(e);\n        }\n        if (e.key === KeyCode.ENTER) {\n            this.onEnterKeyDown(e);\n        }\n    }\n    onEnterKeyDown(e) {\n        /// THIS IS BAD - we are assuming the header is not a user provided comp\n        const headerComp = this.comp.getUserCompInstance();\n        if (!headerComp) {\n            return;\n        }\n        if (e.ctrlKey || e.metaKey) {\n            if (this.menuEnabled && headerComp.showMenu) {\n                e.preventDefault();\n                headerComp.showMenu();\n            }\n        }\n        else if (this.sortable) {\n            const multiSort = e.shiftKey;\n            this.sortController.progressSort(this.column, multiSort, \"uiColumnSorted\");\n        }\n    }\n    isMenuEnabled() {\n        return this.menuEnabled;\n    }\n    onFocusIn(e) {\n        if (!this.getGui().contains(e.relatedTarget)) {\n            const rowIndex = this.getRowIndex();\n            this.focusService.setFocusedHeader(rowIndex, this.column);\n        }\n        this.setActiveHeader(true);\n    }\n    onFocusOut(e) {\n        if (this.getGui().contains(e.relatedTarget)) {\n            return;\n        }\n        this.setActiveHeader(false);\n    }\n    setupTooltip() {\n        const tooltipCtrl = {\n            getColumn: () => this.column,\n            getColDef: () => this.column.getColDef(),\n            getGui: () => this.eGui,\n            getLocation: () => 'header',\n            getTooltipValue: () => {\n                const res = this.column.getColDef().headerTooltip;\n                return res;\n            },\n        };\n        const tooltipFeature = this.createManagedBean(new TooltipFeature(tooltipCtrl, this.beans));\n        tooltipFeature.setComp(this.comp);\n        this.refreshFunctions.push(() => tooltipFeature.refreshToolTip());\n    }\n    setupClassesFromColDef() {\n        const refreshHeaderClasses = () => {\n            const colDef = this.column.getColDef();\n            const classes = CssClassApplier.getHeaderClassesFromColDef(colDef, this.gridOptionsService, this.column, null);\n            const oldClasses = this.userHeaderClasses;\n            this.userHeaderClasses = new Set(classes);\n            classes.forEach(c => {\n                if (oldClasses.has(c)) {\n                    // class already added, no need to apply it, but remove from old set\n                    oldClasses.delete(c);\n                }\n                else {\n                    // class new since last time, so apply it\n                    this.comp.addOrRemoveCssClass(c, true);\n                }\n            });\n            // now old set only has classes that were applied last time, but not this time, so remove them\n            oldClasses.forEach(c => this.comp.addOrRemoveCssClass(c, false));\n        };\n        this.refreshFunctions.push(refreshHeaderClasses);\n        refreshHeaderClasses();\n    }\n    setDragSource(eSource) {\n        this.dragSourceElement = eSource;\n        this.removeDragSource();\n        if (!eSource) {\n            return;\n        }\n        if (!this.draggable) {\n            return;\n        }\n        const hideColumnOnExit = !this.gridOptionsService.is('suppressDragLeaveHidesColumns');\n        this.moveDragSource = {\n            type: DragSourceType.HeaderCell,\n            eElement: eSource,\n            defaultIconName: hideColumnOnExit ? DragAndDropService.ICON_HIDE : DragAndDropService.ICON_NOT_ALLOWED,\n            getDragItem: () => this.createDragItem(),\n            dragItemName: this.displayName,\n            onDragStarted: () => this.column.setMoving(true, \"uiColumnMoved\"),\n            onDragStopped: () => this.column.setMoving(false, \"uiColumnMoved\"),\n            onGridEnter: (dragItem) => {\n                var _a;\n                if (hideColumnOnExit) {\n                    const unlockedColumns = ((_a = dragItem === null || dragItem === void 0 ? void 0 : dragItem.columns) === null || _a === void 0 ? void 0 : _a.filter(col => !col.getColDef().lockVisible)) || [];\n                    this.columnModel.setColumnsVisible(unlockedColumns, true, \"uiColumnMoved\");\n                }\n            },\n            onGridExit: (dragItem) => {\n                var _a;\n                if (hideColumnOnExit) {\n                    const unlockedColumns = ((_a = dragItem === null || dragItem === void 0 ? void 0 : dragItem.columns) === null || _a === void 0 ? void 0 : _a.filter(col => !col.getColDef().lockVisible)) || [];\n                    this.columnModel.setColumnsVisible(unlockedColumns, false, \"uiColumnMoved\");\n                }\n            },\n        };\n        this.dragAndDropService.addDragSource(this.moveDragSource, true);\n    }\n    createDragItem() {\n        const visibleState = {};\n        visibleState[this.column.getId()] = this.column.isVisible();\n        return {\n            columns: [this.column],\n            visibleState: visibleState\n        };\n    }\n    removeDragSource() {\n        if (this.moveDragSource) {\n            this.dragAndDropService.removeDragSource(this.moveDragSource);\n            this.moveDragSource = undefined;\n        }\n    }\n    onColDefChanged() {\n        this.refresh();\n    }\n    updateState() {\n        const colDef = this.column.getColDef();\n        this.menuEnabled = this.menuFactory.isMenuEnabled(this.column) && !colDef.suppressMenu;\n        this.sortable = colDef.sortable;\n        this.displayName = this.calculateDisplayName();\n        this.draggable = this.workOutDraggable();\n    }\n    addRefreshFunction(func) {\n        this.refreshFunctions.push(func);\n    }\n    refresh() {\n        this.updateState();\n        this.refreshHeaderComp();\n        this.refreshAria();\n        this.refreshFunctions.forEach(f => f());\n    }\n    refreshHeaderComp() {\n        const newCompDetails = this.lookupUserCompDetails();\n        const compInstance = this.comp.getUserCompInstance();\n        // only try refresh if old comp exists adn it is the correct type\n        const attemptRefresh = compInstance != null && this.userCompDetails.componentClass == newCompDetails.componentClass;\n        const headerCompRefreshed = attemptRefresh ? this.attemptHeaderCompRefresh(newCompDetails.params) : false;\n        if (headerCompRefreshed) {\n            // we do this as a refresh happens after colDefs change, and it's possible the column has had it's\n            // draggable property toggled. no need to call this if not refreshing, as setDragSource is done\n            // as part of appendHeaderComp\n            this.setDragSource(this.dragSourceElement);\n        }\n        else {\n            this.setCompDetails(newCompDetails);\n        }\n    }\n    attemptHeaderCompRefresh(params) {\n        const headerComp = this.comp.getUserCompInstance();\n        if (!headerComp) {\n            return false;\n        }\n        // if no refresh method, then we want to replace the headerComp\n        if (!headerComp.refresh) {\n            return false;\n        }\n        const res = headerComp.refresh(params);\n        return res;\n    }\n    calculateDisplayName() {\n        return this.columnModel.getDisplayNameForColumn(this.column, 'header', true);\n    }\n    checkDisplayName() {\n        // display name can change if aggFunc different, eg sum(Gold) is now max(Gold)\n        if (this.displayName !== this.calculateDisplayName()) {\n            this.refresh();\n        }\n    }\n    workOutDraggable() {\n        const colDef = this.column.getColDef();\n        const isSuppressMovableColumns = this.gridOptionsService.is('suppressMovableColumns');\n        const colCanMove = !isSuppressMovableColumns && !colDef.suppressMovable && !colDef.lockPosition;\n        // we should still be allowed drag the column, even if it can't be moved, if the column\n        // can be dragged to a rowGroup or pivot drop zone\n        return !!colCanMove || !!colDef.enableRowGroup || !!colDef.enablePivot;\n    }\n    onColumnRowGroupChanged() {\n        this.checkDisplayName();\n    }\n    onColumnPivotChanged() {\n        this.checkDisplayName();\n    }\n    onColumnValueChanged() {\n        this.checkDisplayName();\n    }\n    setupWidth() {\n        const listener = () => {\n            const columnWidth = this.column.getActualWidth();\n            this.comp.setWidth(`${columnWidth}px`);\n        };\n        this.addManagedListener(this.column, Column.EVENT_WIDTH_CHANGED, listener);\n        listener();\n    }\n    setupMovingCss() {\n        const listener = () => {\n            // this is what makes the header go dark when it is been moved (gives impression to\n            // user that the column was picked up).\n            this.comp.addOrRemoveCssClass('ag-header-cell-moving', this.column.isMoving());\n        };\n        this.addManagedListener(this.column, Column.EVENT_MOVING_CHANGED, listener);\n        listener();\n    }\n    setupMenuClass() {\n        const listener = () => {\n            this.comp.addOrRemoveCssClass('ag-column-menu-visible', this.column.isMenuVisible());\n        };\n        this.addManagedListener(this.column, Column.EVENT_MENU_VISIBLE_CHANGED, listener);\n        listener();\n    }\n    setupSortableClass() {\n        const updateSortableCssClass = () => {\n            this.comp.addOrRemoveCssClass('ag-header-cell-sortable', !!this.sortable);\n        };\n        updateSortableCssClass();\n        this.addRefreshFunction(updateSortableCssClass);\n        this.addManagedListener(this.eventService, Column.EVENT_SORT_CHANGED, this.refreshAriaSort.bind(this));\n    }\n    setupWrapTextClass() {\n        const listener = () => {\n            const wrapText = !!this.column.getColDef().wrapHeaderText;\n            this.comp.addOrRemoveCssClass('ag-header-cell-wrap-text', wrapText);\n        };\n        listener();\n        this.addRefreshFunction(listener);\n    }\n    onHeaderHeightChanged() {\n        this.refreshSpanHeaderHeight();\n    }\n    refreshSpanHeaderHeight() {\n        const { eGui, column, comp, columnModel, gridOptionsService } = this;\n        if (!column.isSpanHeaderHeight()) {\n            return;\n        }\n        const { numberOfParents, isSpanningTotal } = this.getColumnGroupPaddingInfo();\n        comp.addOrRemoveCssClass('ag-header-span-height', numberOfParents > 0);\n        if (numberOfParents === 0) {\n            return;\n        }\n        comp.addOrRemoveCssClass('ag-header-span-total', isSpanningTotal);\n        const pivotMode = gridOptionsService.is('pivotMode');\n        const groupHeaderHeight = pivotMode\n            ? columnModel.getPivotGroupHeaderHeight()\n            : columnModel.getGroupHeaderHeight();\n        const headerHeight = columnModel.getColumnHeaderRowHeight();\n        const extraHeight = numberOfParents * groupHeaderHeight;\n        eGui.style.setProperty('top', `${-extraHeight}px`);\n        eGui.style.setProperty('height', `${headerHeight + extraHeight}px`);\n    }\n    getColumnGroupPaddingInfo() {\n        let parent = this.column.getParent();\n        if (!parent || !parent.isPadding()) {\n            return { numberOfParents: 0, isSpanningTotal: false };\n        }\n        const numberOfParents = parent.getPaddingLevel() + 1;\n        let isSpanningTotal = true;\n        while (parent) {\n            if (!parent.isPadding()) {\n                isSpanningTotal = false;\n                break;\n            }\n            parent = parent.getParent();\n        }\n        return { numberOfParents, isSpanningTotal };\n    }\n    setupAutoHeight(wrapperElement) {\n        const measureHeight = (timesCalled) => {\n            if (!this.isAlive()) {\n                return;\n            }\n            const { paddingTop, paddingBottom, borderBottomWidth, borderTopWidth } = getElementSize(this.getGui());\n            const extraHeight = paddingTop + paddingBottom + borderBottomWidth + borderTopWidth;\n            const wrapperHeight = wrapperElement.offsetHeight;\n            const autoHeight = wrapperHeight + extraHeight;\n            if (timesCalled < 5) {\n                // if not in doc yet, means framework not yet inserted, so wait for next VM turn,\n                // maybe it will be ready next VM turn\n                const doc = this.beans.gridOptionsService.getDocument();\n                const notYetInDom = !doc || !doc.contains(wrapperElement);\n                // this happens in React, where React hasn't put any content in. we say 'possibly'\n                // as a) may not be React and b) the cell could be empty anyway\n                const possiblyNoContentYet = autoHeight == 0;\n                if (notYetInDom || possiblyNoContentYet) {\n                    this.beans.frameworkOverrides.setTimeout(() => measureHeight(timesCalled + 1), 0);\n                    return;\n                }\n            }\n            this.columnModel.setColumnHeaderHeight(this.column, autoHeight);\n        };\n        let isMeasuring = false;\n        let stopResizeObserver;\n        const checkMeasuring = () => {\n            const newValue = this.column.isAutoHeaderHeight();\n            if (newValue && !isMeasuring) {\n                startMeasuring();\n            }\n            if (!newValue && isMeasuring) {\n                stopMeasuring();\n            }\n        };\n        const startMeasuring = () => {\n            isMeasuring = true;\n            measureHeight(0);\n            this.comp.addOrRemoveCssClass('ag-header-cell-auto-height', true);\n            stopResizeObserver = this.resizeObserverService.observeResize(wrapperElement, () => measureHeight(0));\n        };\n        const stopMeasuring = () => {\n            isMeasuring = false;\n            if (stopResizeObserver) {\n                stopResizeObserver();\n            }\n            this.comp.addOrRemoveCssClass('ag-header-cell-auto-height', false);\n            stopResizeObserver = undefined;\n        };\n        checkMeasuring();\n        this.addDestroyFunc(() => stopMeasuring());\n        // In theory we could rely on the resize observer for everything - but since it's debounced\n        // it can be a little janky for smooth movement. in this case its better to react to our own events\n        // And unfortunately we cant _just_ rely on our own events, since custom components can change whenever\n        this.addManagedListener(this.column, Column.EVENT_WIDTH_CHANGED, () => isMeasuring && measureHeight(0));\n        // Displaying the sort icon changes the available area for text, so sort changes can affect height\n        this.addManagedListener(this.eventService, Column.EVENT_SORT_CHANGED, () => {\n            // Rendering changes for sort, happen after the event... not ideal\n            if (isMeasuring) {\n                this.beans.frameworkOverrides.setTimeout(() => measureHeight(0));\n            }\n        });\n        this.addRefreshFunction(checkMeasuring);\n    }\n    refreshAriaSort() {\n        if (this.sortable) {\n            const translate = this.localeService.getLocaleTextFunc();\n            const sort = this.sortController.getDisplaySortForColumn(this.column) || null;\n            this.comp.setAriaSort(getAriaSortState(sort));\n            this.setAriaDescriptionProperty('sort', translate('ariaSortableColumn', 'Press ENTER to sort.'));\n        }\n        else {\n            this.comp.setAriaSort();\n            this.setAriaDescriptionProperty('sort', null);\n        }\n    }\n    refreshAriaMenu() {\n        if (this.menuEnabled) {\n            const translate = this.localeService.getLocaleTextFunc();\n            this.setAriaDescriptionProperty('menu', translate('ariaMenuColumn', 'Press CTRL ENTER to open column menu.'));\n        }\n        else {\n            this.setAriaDescriptionProperty('menu', null);\n        }\n    }\n    setAriaDescriptionProperty(property, value) {\n        if (value != null) {\n            this.ariaDescriptionProperties.set(property, value);\n        }\n        else {\n            this.ariaDescriptionProperties.delete(property);\n        }\n    }\n    refreshAriaDescription() {\n        const descriptionArray = Array.from(this.ariaDescriptionProperties.values());\n        this.comp.setAriaDescription(descriptionArray.length ? descriptionArray.join(' ') : undefined);\n    }\n    refreshAria() {\n        this.refreshAriaSort();\n        this.refreshAriaMenu();\n        this.refreshAriaDescription();\n    }\n    addColumnHoverListener() {\n        const listener = () => {\n            if (!this.gridOptionsService.is('columnHoverHighlight')) {\n                return;\n            }\n            const isHovered = this.columnHoverService.isHovered(this.column);\n            this.comp.addOrRemoveCssClass('ag-column-hover', isHovered);\n        };\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_HOVER_CHANGED, listener);\n        listener();\n    }\n    setupFilterCss() {\n        const listener = () => {\n            this.comp.addOrRemoveCssClass('ag-header-cell-filtered', this.column.isFilterActive());\n        };\n        this.addManagedListener(this.column, Column.EVENT_FILTER_ACTIVE_CHANGED, listener);\n        listener();\n    }\n    setupColId() {\n        this.comp.setColId(this.column.getColId());\n    }\n    addActiveHeaderMouseListeners() {\n        const listener = (e) => this.setActiveHeader(e.type === 'mouseenter');\n        this.addManagedListener(this.getGui(), 'mouseenter', listener);\n        this.addManagedListener(this.getGui(), 'mouseleave', listener);\n    }\n    setActiveHeader(active) {\n        this.comp.addOrRemoveCssClass('ag-header-active', active);\n    }\n}\n__decorate$1m([\n    Autowired('columnModel')\n], HeaderCellCtrl.prototype, \"columnModel\", void 0);\n__decorate$1m([\n    Autowired('columnHoverService')\n], HeaderCellCtrl.prototype, \"columnHoverService\", void 0);\n__decorate$1m([\n    Autowired('sortController')\n], HeaderCellCtrl.prototype, \"sortController\", void 0);\n__decorate$1m([\n    Autowired('menuFactory')\n], HeaderCellCtrl.prototype, \"menuFactory\", void 0);\n__decorate$1m([\n    Autowired('dragAndDropService')\n], HeaderCellCtrl.prototype, \"dragAndDropService\", void 0);\n__decorate$1m([\n    Autowired('resizeObserverService')\n], HeaderCellCtrl.prototype, \"resizeObserverService\", void 0);\n__decorate$1m([\n    Autowired('gridApi')\n], HeaderCellCtrl.prototype, \"gridApi\", void 0);\n__decorate$1m([\n    Autowired('columnApi')\n], HeaderCellCtrl.prototype, \"columnApi\", void 0);\n__decorate$1m([\n    PreDestroy\n], HeaderCellCtrl.prototype, \"removeDragSource\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1l = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass GroupResizeFeature extends BeanStub {\n    constructor(comp, eResize, pinned, columnGroup) {\n        super();\n        this.eResize = eResize;\n        this.comp = comp;\n        this.pinned = pinned;\n        this.columnGroup = columnGroup;\n    }\n    postConstruct() {\n        if (!this.columnGroup.isResizable()) {\n            this.comp.setResizableDisplayed(false);\n            return;\n        }\n        const finishedWithResizeFunc = this.horizontalResizeService.addResizeBar({\n            eResizeBar: this.eResize,\n            onResizeStart: this.onResizeStart.bind(this),\n            onResizing: this.onResizing.bind(this, false),\n            onResizeEnd: this.onResizing.bind(this, true)\n        });\n        this.addDestroyFunc(finishedWithResizeFunc);\n        if (!this.gridOptionsService.is('suppressAutoSize')) {\n            const skipHeaderOnAutoSize = this.gridOptionsService.is('skipHeaderOnAutoSize');\n            this.eResize.addEventListener('dblclick', () => {\n                // get list of all the column keys we are responsible for\n                const keys = [];\n                const leafCols = this.columnGroup.getDisplayedLeafColumns();\n                leafCols.forEach((column) => {\n                    // not all cols in the group may be participating with auto-resize\n                    if (!column.getColDef().suppressAutoSize) {\n                        keys.push(column.getColId());\n                    }\n                });\n                if (keys.length > 0) {\n                    this.columnModel.autoSizeColumns({\n                        columns: keys,\n                        skipHeader: skipHeaderOnAutoSize,\n                        stopAtGroup: this.columnGroup,\n                        source: 'uiColumnResized'\n                    });\n                }\n                this.resizeLeafColumnsToFit('uiColumnResized');\n            });\n        }\n    }\n    onResizeStart(shiftKey) {\n        this.calculateInitialValues();\n        let takeFromGroup = null;\n        if (shiftKey) {\n            takeFromGroup = this.columnModel.getDisplayedGroupAfter(this.columnGroup);\n        }\n        if (takeFromGroup) {\n            const takeFromLeafCols = takeFromGroup.getDisplayedLeafColumns();\n            this.resizeTakeFromCols = takeFromLeafCols.filter(col => col.isResizable());\n            this.resizeTakeFromStartWidth = 0;\n            this.resizeTakeFromCols.forEach(col => this.resizeTakeFromStartWidth += col.getActualWidth());\n            this.resizeTakeFromRatios = [];\n            this.resizeTakeFromCols.forEach(col => this.resizeTakeFromRatios.push(col.getActualWidth() / this.resizeTakeFromStartWidth));\n        }\n        else {\n            this.resizeTakeFromCols = null;\n            this.resizeTakeFromStartWidth = null;\n            this.resizeTakeFromRatios = null;\n        }\n        this.comp.addOrRemoveCssClass('ag-column-resizing', true);\n    }\n    onResizing(finished, resizeAmount, source = 'uiColumnResized') {\n        const resizeAmountNormalised = this.normaliseDragChange(resizeAmount);\n        const width = this.resizeStartWidth + resizeAmountNormalised;\n        this.resizeColumns(width, source, finished);\n    }\n    resizeLeafColumnsToFit(source) {\n        const preferredSize = this.autoWidthCalculator.getPreferredWidthForColumnGroup(this.columnGroup);\n        this.calculateInitialValues();\n        if (preferredSize > this.resizeStartWidth) {\n            this.resizeColumns(preferredSize, source, true);\n        }\n    }\n    resizeColumns(totalWidth, source, finished = true) {\n        const resizeSets = [];\n        resizeSets.push({\n            columns: this.resizeCols,\n            ratios: this.resizeRatios,\n            width: totalWidth\n        });\n        if (this.resizeTakeFromCols) {\n            const diff = totalWidth - this.resizeStartWidth;\n            resizeSets.push({\n                columns: this.resizeTakeFromCols,\n                ratios: this.resizeTakeFromRatios,\n                width: this.resizeTakeFromStartWidth - diff\n            });\n        }\n        this.columnModel.resizeColumnSets({\n            resizeSets,\n            finished,\n            source: source\n        });\n        if (finished) {\n            this.comp.addOrRemoveCssClass('ag-column-resizing', false);\n        }\n    }\n    calculateInitialValues() {\n        const leafCols = this.columnGroup.getDisplayedLeafColumns();\n        this.resizeCols = leafCols.filter(col => col.isResizable());\n        this.resizeStartWidth = 0;\n        this.resizeCols.forEach(col => this.resizeStartWidth += col.getActualWidth());\n        this.resizeRatios = [];\n        this.resizeCols.forEach(col => this.resizeRatios.push(col.getActualWidth() / this.resizeStartWidth));\n    }\n    // optionally inverts the drag, depending on pinned and RTL\n    // note - this method is duplicated in RenderedHeaderCell - should refactor out?\n    normaliseDragChange(dragChange) {\n        let result = dragChange;\n        if (this.gridOptionsService.is('enableRtl')) {\n            // for RTL, dragging left makes the col bigger, except when pinning left\n            if (this.pinned !== 'left') {\n                result *= -1;\n            }\n        }\n        else if (this.pinned === 'right') {\n            // for LTR (ie normal), dragging left makes the col smaller, except when pinning right\n            result *= -1;\n        }\n        return result;\n    }\n}\n__decorate$1l([\n    Autowired('horizontalResizeService')\n], GroupResizeFeature.prototype, \"horizontalResizeService\", void 0);\n__decorate$1l([\n    Autowired('autoWidthCalculator')\n], GroupResizeFeature.prototype, \"autoWidthCalculator\", void 0);\n__decorate$1l([\n    Autowired('columnModel')\n], GroupResizeFeature.prototype, \"columnModel\", void 0);\n__decorate$1l([\n    PostConstruct\n], GroupResizeFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1k = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass GroupWidthFeature extends BeanStub {\n    constructor(comp, columnGroup) {\n        super();\n        // the children can change, we keep destroy functions related to listening to the children here\n        this.removeChildListenersFuncs = [];\n        this.columnGroup = columnGroup;\n        this.comp = comp;\n    }\n    postConstruct() {\n        // we need to listen to changes in child columns, as they impact our width\n        this.addListenersToChildrenColumns();\n        // the children belonging to this group can change, so we need to add and remove listeners as they change\n        this.addManagedListener(this.columnGroup, ColumnGroup.EVENT_DISPLAYED_CHILDREN_CHANGED, this.onDisplayedChildrenChanged.bind(this));\n        this.onWidthChanged();\n        // the child listeners are not tied to this components life-cycle, as children can get added and removed\n        // to the group - hence they are on a different life-cycle. so we must make sure the existing children\n        // listeners are removed when we finally get destroyed\n        this.addDestroyFunc(this.removeListenersOnChildrenColumns.bind(this));\n    }\n    addListenersToChildrenColumns() {\n        // first destroy any old listeners\n        this.removeListenersOnChildrenColumns();\n        // now add new listeners to the new set of children\n        const widthChangedListener = this.onWidthChanged.bind(this);\n        this.columnGroup.getLeafColumns().forEach(column => {\n            column.addEventListener('widthChanged', widthChangedListener);\n            column.addEventListener('visibleChanged', widthChangedListener);\n            this.removeChildListenersFuncs.push(() => {\n                column.removeEventListener('widthChanged', widthChangedListener);\n                column.removeEventListener('visibleChanged', widthChangedListener);\n            });\n        });\n    }\n    removeListenersOnChildrenColumns() {\n        this.removeChildListenersFuncs.forEach(func => func());\n        this.removeChildListenersFuncs = [];\n    }\n    onDisplayedChildrenChanged() {\n        this.addListenersToChildrenColumns();\n        this.onWidthChanged();\n    }\n    onWidthChanged() {\n        const columnWidth = this.columnGroup.getActualWidth();\n        this.comp.setWidth(`${columnWidth}px`);\n        this.comp.addOrRemoveCssClass('ag-hidden', columnWidth === 0);\n    }\n}\n__decorate$1k([\n    PostConstruct\n], GroupWidthFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1j = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass HeaderGroupCellCtrl extends AbstractHeaderCellCtrl {\n    constructor(columnGroup, parentRowCtrl) {\n        super(columnGroup, parentRowCtrl);\n        this.columnGroup = columnGroup;\n    }\n    setComp(comp, eGui, eResize) {\n        super.setGui(eGui);\n        this.comp = comp;\n        this.displayName = this.columnModel.getDisplayNameForColumnGroup(this.columnGroup, 'header');\n        this.addClasses();\n        this.addAttributes();\n        this.setupMovingCss();\n        this.setupExpandable();\n        this.setupTooltip();\n        this.setupUserComp();\n        const pinned = this.getParentRowCtrl().getPinned();\n        const leafCols = this.columnGroup.getProvidedColumnGroup().getLeafColumns();\n        this.createManagedBean(new HoverFeature(leafCols, eGui));\n        this.createManagedBean(new SetLeftFeature(this.columnGroup, eGui, this.beans));\n        this.createManagedBean(new GroupWidthFeature(comp, this.columnGroup));\n        this.groupResizeFeature = this.createManagedBean(new GroupResizeFeature(comp, eResize, pinned, this.columnGroup));\n        this.createManagedBean(new ManagedFocusFeature(eGui, {\n            shouldStopEventPropagation: this.shouldStopEventPropagation.bind(this),\n            onTabKeyDown: () => undefined,\n            handleKeyDown: this.handleKeyDown.bind(this),\n            onFocusIn: this.onFocusIn.bind(this)\n        }));\n    }\n    resizeLeafColumnsToFit(source) {\n        // check to avoid throwing when a component has not been setup yet (React 18)\n        if (!this.groupResizeFeature) {\n            return;\n        }\n        this.groupResizeFeature.resizeLeafColumnsToFit(source);\n    }\n    setupUserComp() {\n        let displayName = this.displayName;\n        const params = {\n            displayName: this.displayName,\n            columnGroup: this.columnGroup,\n            setExpanded: (expanded) => {\n                this.columnModel.setColumnGroupOpened(this.columnGroup.getProvidedColumnGroup(), expanded, \"gridInitializing\");\n            },\n            api: this.gridApi,\n            columnApi: this.columnApi,\n            context: this.gridOptionsService.context\n        };\n        if (!displayName) {\n            let columnGroup = this.columnGroup;\n            const leafCols = columnGroup.getLeafColumns();\n            // find the top most column group that represents the same columns. so if we are dragging a group, we also\n            // want to visually show the parent groups dragging for the same column set. for example imaging 5 levels\n            // of grouping, with each group only containing the next group, and the last group containing three columns,\n            // then when you move any group (even the lowest level group) you are in-fact moving all the groups, as all\n            // the groups represent the same column set.\n            while (columnGroup.getParent() && columnGroup.getParent().getLeafColumns().length === leafCols.length) {\n                columnGroup = columnGroup.getParent();\n            }\n            const colGroupDef = columnGroup.getColGroupDef();\n            if (colGroupDef) {\n                displayName = colGroupDef.headerName;\n            }\n            if (!displayName) {\n                displayName = leafCols ? this.columnModel.getDisplayNameForColumn(leafCols[0], 'header', true) : '';\n            }\n        }\n        const compDetails = this.userComponentFactory.getHeaderGroupCompDetails(params);\n        this.comp.setUserCompDetails(compDetails);\n    }\n    setupTooltip() {\n        const colGroupDef = this.columnGroup.getColGroupDef();\n        const tooltipCtrl = {\n            getColumn: () => this.columnGroup,\n            getGui: () => this.eGui,\n            getLocation: () => 'headerGroup',\n            getTooltipValue: () => colGroupDef && colGroupDef.headerTooltip\n        };\n        if (colGroupDef) {\n            tooltipCtrl.getColDef = () => colGroupDef;\n        }\n        const tooltipFeature = this.createManagedBean(new TooltipFeature(tooltipCtrl, this.beans));\n        tooltipFeature.setComp(this.comp);\n    }\n    setupExpandable() {\n        const providedColGroup = this.columnGroup.getProvidedColumnGroup();\n        this.refreshExpanded();\n        this.addManagedListener(providedColGroup, ProvidedColumnGroup.EVENT_EXPANDABLE_CHANGED, this.refreshExpanded.bind(this));\n        this.addManagedListener(providedColGroup, ProvidedColumnGroup.EVENT_EXPANDED_CHANGED, this.refreshExpanded.bind(this));\n    }\n    refreshExpanded() {\n        const column = this.columnGroup;\n        this.expandable = column.isExpandable();\n        const expanded = column.isExpanded();\n        if (this.expandable) {\n            this.comp.setAriaExpanded(expanded ? 'true' : 'false');\n        }\n        else {\n            this.comp.setAriaExpanded(undefined);\n        }\n    }\n    addAttributes() {\n        this.comp.setColId(this.columnGroup.getUniqueId());\n    }\n    addClasses() {\n        const colGroupDef = this.columnGroup.getColGroupDef();\n        const classes = CssClassApplier.getHeaderClassesFromColDef(colGroupDef, this.gridOptionsService, null, this.columnGroup);\n        // having different classes below allows the style to not have a bottom border\n        // on the group header, if no group is specified\n        if (this.columnGroup.isPadding()) {\n            classes.push('ag-header-group-cell-no-group');\n            const leafCols = this.columnGroup.getLeafColumns();\n            if (leafCols.every(col => col.isSpanHeaderHeight())) {\n                classes.push('ag-header-span-height');\n            }\n        }\n        else {\n            classes.push('ag-header-group-cell-with-group');\n        }\n        classes.forEach(c => this.comp.addOrRemoveCssClass(c, true));\n    }\n    setupMovingCss() {\n        const providedColumnGroup = this.columnGroup.getProvidedColumnGroup();\n        const leafColumns = providedColumnGroup.getLeafColumns();\n        // this function adds or removes the moving css, based on if the col is moving.\n        // this is what makes the header go dark when it is been moved (gives impression to\n        // user that the column was picked up).\n        const listener = () => this.comp.addOrRemoveCssClass('ag-header-cell-moving', this.columnGroup.isMoving());\n        leafColumns.forEach(col => {\n            this.addManagedListener(col, Column.EVENT_MOVING_CHANGED, listener);\n        });\n        listener();\n    }\n    onFocusIn(e) {\n        if (!this.eGui.contains(e.relatedTarget)) {\n            const rowIndex = this.getRowIndex();\n            this.beans.focusService.setFocusedHeader(rowIndex, this.columnGroup);\n        }\n    }\n    handleKeyDown(e) {\n        super.handleKeyDown(e);\n        const wrapperHasFocus = this.getWrapperHasFocus();\n        if (!this.expandable || !wrapperHasFocus) {\n            return;\n        }\n        if (e.key === KeyCode.ENTER) {\n            const column = this.columnGroup;\n            const newExpandedValue = !column.isExpanded();\n            this.columnModel.setColumnGroupOpened(column.getProvidedColumnGroup(), newExpandedValue, \"uiColumnExpanded\");\n        }\n    }\n    // unlike columns, this will only get called once, as we don't react on props on column groups\n    // (we will always destroy and recreate this comp if something changes)\n    setDragSource(eHeaderGroup) {\n        if (this.isSuppressMoving()) {\n            return;\n        }\n        const allLeafColumns = this.columnGroup.getProvidedColumnGroup().getLeafColumns();\n        const hideColumnOnExit = !this.gridOptionsService.is('suppressDragLeaveHidesColumns');\n        const dragSource = {\n            type: DragSourceType.HeaderCell,\n            eElement: eHeaderGroup,\n            defaultIconName: hideColumnOnExit ? DragAndDropService.ICON_HIDE : DragAndDropService.ICON_NOT_ALLOWED,\n            dragItemName: this.displayName,\n            // we add in the original group leaf columns, so we move both visible and non-visible items\n            getDragItem: this.getDragItemForGroup.bind(this),\n            onDragStarted: () => allLeafColumns.forEach(col => col.setMoving(true, \"uiColumnDragged\")),\n            onDragStopped: () => allLeafColumns.forEach(col => col.setMoving(false, \"uiColumnDragged\")),\n            onGridEnter: (dragItem) => {\n                var _a;\n                if (hideColumnOnExit) {\n                    const unlockedColumns = ((_a = dragItem === null || dragItem === void 0 ? void 0 : dragItem.columns) === null || _a === void 0 ? void 0 : _a.filter(col => !col.getColDef().lockVisible)) || [];\n                    this.columnModel.setColumnsVisible(unlockedColumns, true, \"uiColumnMoved\");\n                }\n            },\n            onGridExit: (dragItem) => {\n                var _a;\n                if (hideColumnOnExit) {\n                    const unlockedColumns = ((_a = dragItem === null || dragItem === void 0 ? void 0 : dragItem.columns) === null || _a === void 0 ? void 0 : _a.filter(col => !col.getColDef().lockVisible)) || [];\n                    this.columnModel.setColumnsVisible(unlockedColumns, false, \"uiColumnMoved\");\n                }\n            },\n        };\n        this.dragAndDropService.addDragSource(dragSource, true);\n        this.addDestroyFunc(() => this.dragAndDropService.removeDragSource(dragSource));\n    }\n    // when moving the columns, we want to move all the columns (contained within the DragItem) in this group in one go,\n    // and in the order they are currently in the screen.\n    getDragItemForGroup() {\n        const allColumnsOriginalOrder = this.columnGroup.getProvidedColumnGroup().getLeafColumns();\n        // capture visible state, used when re-entering grid to dictate which columns should be visible\n        const visibleState = {};\n        allColumnsOriginalOrder.forEach(column => visibleState[column.getId()] = column.isVisible());\n        const allColumnsCurrentOrder = [];\n        this.columnModel.getAllDisplayedColumns().forEach(column => {\n            if (allColumnsOriginalOrder.indexOf(column) >= 0) {\n                allColumnsCurrentOrder.push(column);\n                removeFromArray(allColumnsOriginalOrder, column);\n            }\n        });\n        // we are left with non-visible columns, stick these in at the end\n        allColumnsOriginalOrder.forEach(column => allColumnsCurrentOrder.push(column));\n        // create and return dragItem\n        return {\n            columns: allColumnsCurrentOrder,\n            visibleState: visibleState\n        };\n    }\n    isSuppressMoving() {\n        // if any child is fixed, then don't allow moving\n        let childSuppressesMoving = false;\n        this.columnGroup.getLeafColumns().forEach((column) => {\n            if (column.getColDef().suppressMovable || column.getColDef().lockPosition) {\n                childSuppressesMoving = true;\n            }\n        });\n        const result = childSuppressesMoving || this.gridOptionsService.is('suppressMovableColumns');\n        return result;\n    }\n}\n__decorate$1j([\n    Autowired('columnModel')\n], HeaderGroupCellCtrl.prototype, \"columnModel\", void 0);\n__decorate$1j([\n    Autowired('dragAndDropService')\n], HeaderGroupCellCtrl.prototype, \"dragAndDropService\", void 0);\n__decorate$1j([\n    Autowired('gridApi')\n], HeaderGroupCellCtrl.prototype, \"gridApi\", void 0);\n__decorate$1j([\n    Autowired('columnApi')\n], HeaderGroupCellCtrl.prototype, \"columnApi\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1i = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet instanceIdSequence = 0;\nclass HeaderRowCtrl extends BeanStub {\n    constructor(rowIndex, pinned, type) {\n        super();\n        this.instanceId = instanceIdSequence++;\n        this.headerCellCtrls = {};\n        this.rowIndex = rowIndex;\n        this.pinned = pinned;\n        this.type = type;\n    }\n    getInstanceId() {\n        return this.instanceId;\n    }\n    setComp(comp) {\n        this.comp = comp;\n        this.onRowHeightChanged();\n        this.onVirtualColumnsChanged();\n        this.setWidth();\n        this.addEventListeners();\n        if (isBrowserSafari()) {\n            // fix for a Safari rendering bug that caused the header to flicker above chart panels\n            // as you move the mouse over the header\n            this.comp.setTransform('translateZ(0)');\n        }\n        comp.setAriaRowIndex(this.rowIndex + 1);\n    }\n    addEventListeners() {\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_RESIZED, this.onColumnResized.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_CHANGED, this.onDisplayedColumnsChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_VIRTUAL_COLUMNS_CHANGED, this.onVirtualColumnsChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_HEADER_HEIGHT_CHANGED, this.onRowHeightChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_GRID_STYLES_CHANGED, this.onRowHeightChanged.bind(this));\n        // when print layout changes, it changes what columns are in what section\n        this.addManagedPropertyListener('domLayout', this.onDisplayedColumnsChanged.bind(this));\n        this.addManagedPropertyListener('headerHeight', this.onRowHeightChanged.bind(this));\n        this.addManagedPropertyListener('pivotHeaderHeight', this.onRowHeightChanged.bind(this));\n        this.addManagedPropertyListener('groupHeaderHeight', this.onRowHeightChanged.bind(this));\n        this.addManagedPropertyListener('pivotGroupHeaderHeight', this.onRowHeightChanged.bind(this));\n        this.addManagedPropertyListener('floatingFiltersHeight', this.onRowHeightChanged.bind(this));\n    }\n    getHeaderCellCtrl(column) {\n        return values(this.headerCellCtrls).find(cellCtrl => cellCtrl.getColumnGroupChild() === column);\n    }\n    onDisplayedColumnsChanged() {\n        this.onVirtualColumnsChanged();\n        this.setWidth();\n        this.onRowHeightChanged();\n    }\n    getType() {\n        return this.type;\n    }\n    onColumnResized() {\n        this.setWidth();\n    }\n    setWidth() {\n        const width = this.getWidthForRow();\n        this.comp.setWidth(`${width}px`);\n    }\n    getWidthForRow() {\n        const printLayout = this.gridOptionsService.isDomLayout('print');\n        if (printLayout) {\n            const pinned = this.pinned != null;\n            if (pinned) {\n                return 0;\n            }\n            return this.columnModel.getContainerWidth('right')\n                + this.columnModel.getContainerWidth('left')\n                + this.columnModel.getContainerWidth(null);\n        }\n        // if not printing, just return the width as normal\n        return this.columnModel.getContainerWidth(this.pinned);\n    }\n    onRowHeightChanged() {\n        let headerRowCount = this.columnModel.getHeaderRowCount();\n        const sizes = [];\n        let numberOfFloating = 0;\n        if (this.columnModel.hasFloatingFilters()) {\n            headerRowCount++;\n            numberOfFloating = 1;\n        }\n        const groupHeight = this.columnModel.getColumnGroupHeaderRowHeight();\n        const headerHeight = this.columnModel.getColumnHeaderRowHeight();\n        const numberOfNonGroups = 1 + numberOfFloating;\n        const numberOfGroups = headerRowCount - numberOfNonGroups;\n        for (let i = 0; i < numberOfGroups; i++) {\n            sizes.push(groupHeight);\n        }\n        sizes.push(headerHeight);\n        for (let i = 0; i < numberOfFloating; i++) {\n            sizes.push(this.columnModel.getFloatingFiltersHeight());\n        }\n        let topOffset = 0;\n        for (let i = 0; i < this.rowIndex; i++) {\n            topOffset += sizes[i];\n        }\n        const thisRowHeight = sizes[this.rowIndex] + 'px';\n        this.comp.setTop(topOffset + 'px');\n        this.comp.setHeight(thisRowHeight);\n    }\n    getPinned() {\n        return this.pinned;\n    }\n    getRowIndex() {\n        return this.rowIndex;\n    }\n    onVirtualColumnsChanged() {\n        const oldCtrls = this.headerCellCtrls;\n        this.headerCellCtrls = {};\n        const columns = this.getColumnsInViewport();\n        columns.forEach(child => {\n            // skip groups that have no displayed children. this can happen when the group is broken,\n            // and this section happens to have nothing to display for the open / closed state.\n            // (a broken group is one that is split, ie columns in the group have a non-group column\n            // in between them)\n            if (child.isEmptyGroup()) {\n                return;\n            }\n            const idOfChild = child.getUniqueId();\n            // if we already have this cell rendered, do nothing\n            let headerCtrl = oldCtrls[idOfChild];\n            delete oldCtrls[idOfChild];\n            // it's possible there is a new Column with the same ID, but it's for a different Column.\n            // this is common with pivoting, where the pivot cols change, but the id's are still pivot_0,\n            // pivot_1 etc. so if new col but same ID, need to remove the old col here first as we are\n            // about to replace it in the this.headerComps map.\n            const forOldColumn = headerCtrl && headerCtrl.getColumnGroupChild() != child;\n            if (forOldColumn) {\n                this.destroyBean(headerCtrl);\n                headerCtrl = undefined;\n            }\n            if (headerCtrl == null) {\n                switch (this.type) {\n                    case HeaderRowType.FLOATING_FILTER:\n                        headerCtrl = this.createBean(new HeaderFilterCellCtrl(child, this));\n                        break;\n                    case HeaderRowType.COLUMN_GROUP:\n                        headerCtrl = this.createBean(new HeaderGroupCellCtrl(child, this));\n                        break;\n                    default:\n                        headerCtrl = this.createBean(new HeaderCellCtrl(child, this));\n                        break;\n                }\n            }\n            this.headerCellCtrls[idOfChild] = headerCtrl;\n        });\n        // we want to keep columns that are focused, otherwise keyboard navigation breaks\n        const isFocusedAndDisplayed = (ctrl) => {\n            const isFocused = this.focusService.isHeaderWrapperFocused(ctrl);\n            if (!isFocused) {\n                return false;\n            }\n            const isDisplayed = this.columnModel.isDisplayed(ctrl.getColumnGroupChild());\n            return isDisplayed;\n        };\n        iterateObject(oldCtrls, (id, oldCtrl) => {\n            const keepCtrl = isFocusedAndDisplayed(oldCtrl);\n            if (keepCtrl) {\n                this.headerCellCtrls[id] = oldCtrl;\n            }\n            else {\n                this.destroyBean(oldCtrl);\n            }\n        });\n        const ctrlsToDisplay = getAllValuesInObject(this.headerCellCtrls);\n        this.comp.setHeaderCtrls(ctrlsToDisplay);\n    }\n    getColumnsInViewport() {\n        const printLayout = this.gridOptionsService.isDomLayout('print');\n        return printLayout ? this.getColumnsInViewportPrintLayout() : this.getColumnsInViewportNormalLayout();\n    }\n    getColumnsInViewportPrintLayout() {\n        // for print layout, we add all columns into the center\n        if (this.pinned != null) {\n            return [];\n        }\n        let viewportColumns = [];\n        const actualDepth = this.getActualDepth();\n        ['left', null, 'right'].forEach(pinned => {\n            const items = this.columnModel.getVirtualHeaderGroupRow(pinned, actualDepth);\n            viewportColumns = viewportColumns.concat(items);\n        });\n        return viewportColumns;\n    }\n    getActualDepth() {\n        return this.type == HeaderRowType.FLOATING_FILTER ? this.rowIndex - 1 : this.rowIndex;\n    }\n    getColumnsInViewportNormalLayout() {\n        // when in normal layout, we add the columns for that container only\n        return this.columnModel.getVirtualHeaderGroupRow(this.pinned, this.getActualDepth());\n    }\n    focusHeader(column, event) {\n        const allCtrls = getAllValuesInObject(this.headerCellCtrls);\n        const ctrl = allCtrls.find(ctrl => ctrl.getColumnGroupChild() == column);\n        if (!ctrl) {\n            return false;\n        }\n        ctrl.focus(event);\n        return true;\n    }\n    destroy() {\n        iterateObject(this.headerCellCtrls, (key, ctrl) => {\n            this.destroyBean(ctrl);\n        });\n        this.headerCellCtrls = {};\n        super.destroy();\n    }\n}\n__decorate$1i([\n    Autowired('columnModel')\n], HeaderRowCtrl.prototype, \"columnModel\", void 0);\n__decorate$1i([\n    Autowired('focusService')\n], HeaderRowCtrl.prototype, \"focusService\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1h = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass HeaderRowContainerCtrl extends BeanStub {\n    constructor(pinned) {\n        super();\n        this.hidden = false;\n        this.includeFloatingFilter = false;\n        this.groupsRowCtrls = [];\n        this.pinned = pinned;\n    }\n    setComp(comp, eGui) {\n        this.comp = comp;\n        this.eViewport = eGui;\n        this.setupCenterWidth();\n        this.setupPinnedWidth();\n        this.setupDragAndDrop(this.eViewport);\n        this.addManagedListener(this.eventService, Events.EVENT_GRID_COLUMNS_CHANGED, this.onGridColumnsChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_CHANGED, this.onDisplayedColumnsChanged.bind(this));\n        this.ctrlsService.registerHeaderContainer(this, this.pinned);\n        if (this.columnModel.isReady()) {\n            this.refresh();\n        }\n    }\n    setupDragAndDrop(dropContainer) {\n        const bodyDropTarget = new BodyDropTarget(this.pinned, dropContainer);\n        this.createManagedBean(bodyDropTarget);\n    }\n    refresh(keepColumns = false) {\n        const sequence = new NumberSequence();\n        const focusedHeaderPosition = this.focusService.getFocusHeaderToUseAfterRefresh();\n        const refreshColumnGroups = () => {\n            const groupRowCount = this.columnModel.getHeaderRowCount() - 1;\n            this.groupsRowCtrls = this.destroyBeans(this.groupsRowCtrls);\n            for (let i = 0; i < groupRowCount; i++) {\n                const ctrl = this.createBean(new HeaderRowCtrl(sequence.next(), this.pinned, HeaderRowType.COLUMN_GROUP));\n                this.groupsRowCtrls.push(ctrl);\n            }\n        };\n        const refreshColumns = () => {\n            const rowIndex = sequence.next();\n            const needNewInstance = !this.hidden && (this.columnsRowCtrl == null || !keepColumns || this.columnsRowCtrl.getRowIndex() !== rowIndex);\n            const shouldDestroyInstance = needNewInstance || this.hidden;\n            if (shouldDestroyInstance) {\n                this.columnsRowCtrl = this.destroyBean(this.columnsRowCtrl);\n            }\n            if (needNewInstance) {\n                this.columnsRowCtrl = this.createBean(new HeaderRowCtrl(rowIndex, this.pinned, HeaderRowType.COLUMN));\n            }\n        };\n        const refreshFilters = () => {\n            this.includeFloatingFilter = this.columnModel.hasFloatingFilters() && !this.hidden;\n            const destroyPreviousComp = () => {\n                this.filtersRowCtrl = this.destroyBean(this.filtersRowCtrl);\n            };\n            if (!this.includeFloatingFilter) {\n                destroyPreviousComp();\n                return;\n            }\n            const rowIndex = sequence.next();\n            if (this.filtersRowCtrl) {\n                const rowIndexMismatch = this.filtersRowCtrl.getRowIndex() !== rowIndex;\n                if (!keepColumns || rowIndexMismatch) {\n                    destroyPreviousComp();\n                }\n            }\n            if (!this.filtersRowCtrl) {\n                this.filtersRowCtrl = this.createBean(new HeaderRowCtrl(rowIndex, this.pinned, HeaderRowType.FLOATING_FILTER));\n            }\n        };\n        refreshColumnGroups();\n        refreshColumns();\n        refreshFilters();\n        const allCtrls = this.getAllCtrls();\n        this.comp.setCtrls(allCtrls);\n        this.restoreFocusOnHeader(focusedHeaderPosition);\n    }\n    restoreFocusOnHeader(position) {\n        if (position == null || position.column.getPinned() != this.pinned) {\n            return;\n        }\n        this.focusService.focusHeaderPosition({ headerPosition: position });\n    }\n    getAllCtrls() {\n        const res = [...this.groupsRowCtrls];\n        if (this.columnsRowCtrl) {\n            res.push(this.columnsRowCtrl);\n        }\n        if (this.filtersRowCtrl) {\n            res.push(this.filtersRowCtrl);\n        }\n        return res;\n    }\n    // grid cols have changed - this also means the number of rows in the header can have\n    // changed. so we remove all the old rows and insert new ones for a complete refresh\n    onGridColumnsChanged() {\n        this.refresh(true);\n    }\n    onDisplayedColumnsChanged() {\n        const includeFloatingFilter = this.columnModel.hasFloatingFilters() && !this.hidden;\n        if (this.includeFloatingFilter !== includeFloatingFilter) {\n            this.refresh(true);\n        }\n    }\n    setupCenterWidth() {\n        if (this.pinned != null) {\n            return;\n        }\n        this.createManagedBean(new CenterWidthFeature(width => this.comp.setCenterWidth(`${width}px`), true));\n    }\n    setHorizontalScroll(offset) {\n        this.comp.setViewportScrollLeft(offset);\n    }\n    setupPinnedWidth() {\n        if (this.pinned == null) {\n            return;\n        }\n        const pinningLeft = this.pinned === 'left';\n        const pinningRight = this.pinned === 'right';\n        this.hidden = true;\n        const listener = () => {\n            const width = pinningLeft ? this.pinnedWidthService.getPinnedLeftWidth() : this.pinnedWidthService.getPinnedRightWidth();\n            if (width == null) {\n                return;\n            } // can happen at initialisation, width not yet set\n            const hidden = (width == 0);\n            const hiddenChanged = this.hidden !== hidden;\n            const isRtl = this.gridOptionsService.is('enableRtl');\n            const scrollbarWidth = this.gridOptionsService.getScrollbarWidth();\n            // if there is a scroll showing (and taking up space, so Windows, and not iOS)\n            // in the body, then we add extra space to keep header aligned with the body,\n            // as body width fits the cols and the scrollbar\n            const addPaddingForScrollbar = this.scrollVisibleService.isVerticalScrollShowing() && ((isRtl && pinningLeft) || (!isRtl && pinningRight));\n            const widthWithPadding = addPaddingForScrollbar ? width + scrollbarWidth : width;\n            this.comp.setPinnedContainerWidth(`${widthWithPadding}px`);\n            this.comp.setDisplayed(!hidden);\n            if (hiddenChanged) {\n                this.hidden = hidden;\n                this.refresh();\n            }\n        };\n        this.addManagedListener(this.eventService, Events.EVENT_LEFT_PINNED_WIDTH_CHANGED, listener);\n        this.addManagedListener(this.eventService, Events.EVENT_RIGHT_PINNED_WIDTH_CHANGED, listener);\n        this.addManagedListener(this.eventService, Events.EVENT_SCROLL_VISIBILITY_CHANGED, listener);\n        this.addManagedListener(this.eventService, Events.EVENT_SCROLLBAR_WIDTH_CHANGED, listener);\n    }\n    getHeaderCtrlForColumn(column) {\n        if (column instanceof Column) {\n            if (!this.columnsRowCtrl) {\n                return;\n            }\n            return this.columnsRowCtrl.getHeaderCellCtrl(column);\n        }\n        if (this.groupsRowCtrls.length === 0) {\n            return;\n        }\n        for (let i = 0; i < this.groupsRowCtrls.length; i++) {\n            const ctrl = this.groupsRowCtrls[i].getHeaderCellCtrl(column);\n            if (ctrl) {\n                return ctrl;\n            }\n        }\n    }\n    getHtmlElementForColumnHeader(column) {\n        /* tslint:enable */\n        const cellCtrl = this.getHeaderCtrlForColumn(column);\n        if (!cellCtrl) {\n            return null;\n        }\n        return cellCtrl.getGui();\n    }\n    getRowType(rowIndex) {\n        const allCtrls = this.getAllCtrls();\n        const ctrl = allCtrls[rowIndex];\n        return ctrl ? ctrl.getType() : undefined;\n    }\n    focusHeader(rowIndex, column, event) {\n        const allCtrls = this.getAllCtrls();\n        const ctrl = allCtrls[rowIndex];\n        if (!ctrl) {\n            return false;\n        }\n        return ctrl.focusHeader(column, event);\n    }\n    getRowCount() {\n        return this.groupsRowCtrls.length + (this.columnsRowCtrl ? 1 : 0) + (this.filtersRowCtrl ? 1 : 0);\n    }\n    destroy() {\n        if (this.filtersRowCtrl) {\n            this.filtersRowCtrl = this.destroyBean(this.filtersRowCtrl);\n        }\n        if (this.columnsRowCtrl) {\n            this.columnsRowCtrl = this.destroyBean(this.columnsRowCtrl);\n        }\n        if (this.groupsRowCtrls && this.groupsRowCtrls.length) {\n            this.groupsRowCtrls = this.destroyBeans(this.groupsRowCtrls);\n        }\n        super.destroy();\n    }\n}\n__decorate$1h([\n    Autowired('ctrlsService')\n], HeaderRowContainerCtrl.prototype, \"ctrlsService\", void 0);\n__decorate$1h([\n    Autowired('scrollVisibleService')\n], HeaderRowContainerCtrl.prototype, \"scrollVisibleService\", void 0);\n__decorate$1h([\n    Autowired('pinnedWidthService')\n], HeaderRowContainerCtrl.prototype, \"pinnedWidthService\", void 0);\n__decorate$1h([\n    Autowired('columnModel')\n], HeaderRowContainerCtrl.prototype, \"columnModel\", void 0);\n__decorate$1h([\n    Autowired('focusService')\n], HeaderRowContainerCtrl.prototype, \"focusService\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1g = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass HeaderRowContainerComp extends Component {\n    constructor(pinned) {\n        super();\n        this.headerRowComps = {};\n        this.rowCompsList = [];\n        this.pinned = pinned;\n    }\n    init() {\n        this.selectAndSetTemplate();\n        const compProxy = {\n            setDisplayed: displayed => this.setDisplayed(displayed),\n            setCtrls: ctrls => this.setCtrls(ctrls),\n            // only gets called for center section\n            setCenterWidth: width => this.eCenterContainer.style.width = width,\n            setViewportScrollLeft: left => this.getGui().scrollLeft = left,\n            // only gets called for pinned sections\n            setPinnedContainerWidth: width => {\n                const eGui = this.getGui();\n                eGui.style.width = width;\n                eGui.style.maxWidth = width;\n                eGui.style.minWidth = width;\n            }\n        };\n        const ctrl = this.createManagedBean(new HeaderRowContainerCtrl(this.pinned));\n        ctrl.setComp(compProxy, this.getGui());\n    }\n    selectAndSetTemplate() {\n        const pinnedLeft = this.pinned == 'left';\n        const pinnedRight = this.pinned == 'right';\n        const template = pinnedLeft ? HeaderRowContainerComp.PINNED_LEFT_TEMPLATE :\n            pinnedRight ? HeaderRowContainerComp.PINNED_RIGHT_TEMPLATE : HeaderRowContainerComp.CENTER_TEMPLATE;\n        this.setTemplate(template);\n        // for left and right, we add rows directly to the root element,\n        // but for center container we add elements to the child container.\n        this.eRowContainer = this.eCenterContainer ? this.eCenterContainer : this.getGui();\n    }\n    destroyRowComps() {\n        this.setCtrls([]);\n    }\n    destroyRowComp(rowComp) {\n        this.destroyBean(rowComp);\n        this.eRowContainer.removeChild(rowComp.getGui());\n    }\n    setCtrls(ctrls) {\n        const oldRowComps = this.headerRowComps;\n        this.headerRowComps = {};\n        this.rowCompsList = [];\n        let prevGui;\n        const appendEnsuringDomOrder = (rowComp) => {\n            const eGui = rowComp.getGui();\n            const notAlreadyIn = eGui.parentElement != this.eRowContainer;\n            if (notAlreadyIn) {\n                this.eRowContainer.appendChild(eGui);\n            }\n            if (prevGui) {\n                ensureDomOrder(this.eRowContainer, eGui, prevGui);\n            }\n            prevGui = eGui;\n        };\n        ctrls.forEach(ctrl => {\n            const ctrlId = ctrl.getInstanceId();\n            const existingComp = oldRowComps[ctrlId];\n            delete oldRowComps[ctrlId];\n            const rowComp = existingComp ? existingComp : this.createBean(new HeaderRowComp(ctrl));\n            this.headerRowComps[ctrlId] = rowComp;\n            this.rowCompsList.push(rowComp);\n            appendEnsuringDomOrder(rowComp);\n        });\n        getAllValuesInObject(oldRowComps).forEach(c => this.destroyRowComp(c));\n    }\n}\nHeaderRowContainerComp.PINNED_LEFT_TEMPLATE = `<div class=\"ag-pinned-left-header\" role=\"presentation\"></div>`;\nHeaderRowContainerComp.PINNED_RIGHT_TEMPLATE = `<div class=\"ag-pinned-right-header\" role=\"presentation\"></div>`;\nHeaderRowContainerComp.CENTER_TEMPLATE = `<div class=\"ag-header-viewport\" role=\"presentation\">\n            <div class=\"ag-header-container\" ref=\"eCenterContainer\" role=\"rowgroup\"></div>\n        </div>`;\n__decorate$1g([\n    RefSelector('eCenterContainer')\n], HeaderRowContainerComp.prototype, \"eCenterContainer\", void 0);\n__decorate$1g([\n    PostConstruct\n], HeaderRowContainerComp.prototype, \"init\", null);\n__decorate$1g([\n    PreDestroy\n], HeaderRowContainerComp.prototype, \"destroyRowComps\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1f = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar HeaderNavigationDirection;\n(function (HeaderNavigationDirection) {\n    HeaderNavigationDirection[HeaderNavigationDirection[\"UP\"] = 0] = \"UP\";\n    HeaderNavigationDirection[HeaderNavigationDirection[\"DOWN\"] = 1] = \"DOWN\";\n    HeaderNavigationDirection[HeaderNavigationDirection[\"LEFT\"] = 2] = \"LEFT\";\n    HeaderNavigationDirection[HeaderNavigationDirection[\"RIGHT\"] = 3] = \"RIGHT\";\n})(HeaderNavigationDirection || (HeaderNavigationDirection = {}));\nlet HeaderNavigationService = class HeaderNavigationService extends BeanStub {\n    postConstruct() {\n        this.ctrlsService.whenReady(p => {\n            this.gridBodyCon = p.gridBodyCtrl;\n        });\n    }\n    getHeaderRowCount() {\n        const centerHeaderContainer = this.ctrlsService.getHeaderRowContainerCtrl();\n        return centerHeaderContainer ? centerHeaderContainer.getRowCount() : 0;\n    }\n    /*\n     * This method navigates grid header vertically\n     * @return {boolean} true to preventDefault on the event that caused this navigation.\n     */\n    navigateVertically(direction, fromHeader, event) {\n        if (!fromHeader) {\n            fromHeader = this.focusService.getFocusedHeader();\n        }\n        if (!fromHeader) {\n            return false;\n        }\n        const { headerRowIndex, column } = fromHeader;\n        const rowLen = this.getHeaderRowCount();\n        const isUp = direction === HeaderNavigationDirection.UP;\n        let { nextRow, nextFocusColumn } = isUp\n            ? this.headerPositionUtils.getColumnVisibleParent(column, headerRowIndex)\n            : this.headerPositionUtils.getColumnVisibleChild(column, headerRowIndex);\n        let skipColumn = false;\n        if (nextRow < 0) {\n            nextRow = 0;\n            nextFocusColumn = column;\n            skipColumn = true;\n        }\n        if (nextRow >= rowLen) {\n            nextRow = -1; // -1 indicates the focus should move to grid rows.\n        }\n        if (!skipColumn && !nextFocusColumn) {\n            return false;\n        }\n        return this.focusService.focusHeaderPosition({\n            headerPosition: { headerRowIndex: nextRow, column: nextFocusColumn },\n            allowUserOverride: true,\n            event\n        });\n    }\n    /*\n     * This method navigates grid header horizontally\n     * @return {boolean} true to preventDefault on the event that caused this navigation.\n     */\n    navigateHorizontally(direction, fromTab = false, event) {\n        const focusedHeader = this.focusService.getFocusedHeader();\n        const isLeft = direction === HeaderNavigationDirection.LEFT;\n        const isRtl = this.gridOptionsService.is('enableRtl');\n        let nextHeader;\n        let normalisedDirection;\n        // either navigating to the left or isRtl (cannot be both)\n        if (isLeft !== isRtl) {\n            normalisedDirection = 'Before';\n            nextHeader = this.headerPositionUtils.findHeader(focusedHeader, normalisedDirection);\n        }\n        else {\n            normalisedDirection = 'After';\n            nextHeader = this.headerPositionUtils.findHeader(focusedHeader, normalisedDirection);\n        }\n        if (nextHeader || !fromTab) {\n            return this.focusService.focusHeaderPosition({\n                headerPosition: nextHeader,\n                direction: normalisedDirection,\n                fromTab,\n                allowUserOverride: true,\n                event\n            });\n        }\n        return this.focusNextHeaderRow(focusedHeader, normalisedDirection, event);\n    }\n    focusNextHeaderRow(focusedHeader, direction, event) {\n        const currentIndex = focusedHeader.headerRowIndex;\n        let nextPosition = null;\n        let nextRowIndex;\n        if (direction === 'Before') {\n            if (currentIndex > 0) {\n                nextRowIndex = currentIndex - 1;\n                nextPosition = this.headerPositionUtils.findColAtEdgeForHeaderRow(nextRowIndex, 'end');\n            }\n        }\n        else {\n            nextRowIndex = currentIndex + 1;\n            nextPosition = this.headerPositionUtils.findColAtEdgeForHeaderRow(nextRowIndex, 'start');\n        }\n        return this.focusService.focusHeaderPosition({\n            headerPosition: nextPosition,\n            direction,\n            fromTab: true,\n            allowUserOverride: true,\n            event\n        });\n    }\n    scrollToColumn(column, direction = 'After') {\n        if (column.getPinned()) {\n            return;\n        }\n        let columnToScrollTo;\n        if (column instanceof ColumnGroup) {\n            const columns = column.getDisplayedLeafColumns();\n            columnToScrollTo = direction === 'Before' ? last(columns) : columns[0];\n        }\n        else {\n            columnToScrollTo = column;\n        }\n        this.gridBodyCon.getScrollFeature().ensureColumnVisible(columnToScrollTo);\n    }\n};\n__decorate$1f([\n    Autowired('focusService')\n], HeaderNavigationService.prototype, \"focusService\", void 0);\n__decorate$1f([\n    Autowired('headerPositionUtils')\n], HeaderNavigationService.prototype, \"headerPositionUtils\", void 0);\n__decorate$1f([\n    Autowired('ctrlsService')\n], HeaderNavigationService.prototype, \"ctrlsService\", void 0);\n__decorate$1f([\n    PostConstruct\n], HeaderNavigationService.prototype, \"postConstruct\", null);\nHeaderNavigationService = __decorate$1f([\n    Bean('headerNavigationService')\n], HeaderNavigationService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1e = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass GridHeaderCtrl extends BeanStub {\n    setComp(comp, eGui, eFocusableElement) {\n        this.comp = comp;\n        this.eGui = eGui;\n        this.createManagedBean(new ManagedFocusFeature(eFocusableElement, {\n            onTabKeyDown: this.onTabKeyDown.bind(this),\n            handleKeyDown: this.handleKeyDown.bind(this),\n            onFocusOut: this.onFocusOut.bind(this)\n        }));\n        // for setting ag-pivot-on / ag-pivot-off CSS classes\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, this.onPivotModeChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_CHANGED, this.onDisplayedColumnsChanged.bind(this));\n        this.onPivotModeChanged();\n        this.setupHeaderHeight();\n        this.ctrlsService.registerGridHeaderCtrl(this);\n    }\n    setupHeaderHeight() {\n        const listener = this.setHeaderHeight.bind(this);\n        listener();\n        this.addManagedPropertyListener('headerHeight', listener);\n        this.addManagedPropertyListener('pivotHeaderHeight', listener);\n        this.addManagedPropertyListener('groupHeaderHeight', listener);\n        this.addManagedPropertyListener('pivotGroupHeaderHeight', listener);\n        this.addManagedPropertyListener('floatingFiltersHeight', listener);\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_CHANGED, listener);\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_HEADER_HEIGHT_CHANGED, listener);\n        this.addManagedListener(this.eventService, Events.EVENT_GRID_STYLES_CHANGED, listener);\n    }\n    getHeaderHeight() {\n        return this.headerHeight;\n    }\n    setHeaderHeight() {\n        const { columnModel } = this;\n        let numberOfFloating = 0;\n        let headerRowCount = columnModel.getHeaderRowCount();\n        let totalHeaderHeight;\n        const hasFloatingFilters = columnModel.hasFloatingFilters();\n        if (hasFloatingFilters) {\n            headerRowCount++;\n            numberOfFloating = 1;\n        }\n        const groupHeight = this.columnModel.getColumnGroupHeaderRowHeight();\n        const headerHeight = this.columnModel.getColumnHeaderRowHeight();\n        const numberOfNonGroups = 1 + numberOfFloating;\n        const numberOfGroups = headerRowCount - numberOfNonGroups;\n        totalHeaderHeight = numberOfFloating * columnModel.getFloatingFiltersHeight();\n        totalHeaderHeight += numberOfGroups * groupHeight;\n        totalHeaderHeight += headerHeight;\n        if (this.headerHeight === totalHeaderHeight) {\n            return;\n        }\n        this.headerHeight = totalHeaderHeight;\n        // one extra pixel is needed here to account for the\n        // height of the border\n        const px = `${totalHeaderHeight + 1}px`;\n        this.comp.setHeightAndMinHeight(px);\n        this.eventService.dispatchEvent({\n            type: Events.EVENT_HEADER_HEIGHT_CHANGED\n        });\n    }\n    onPivotModeChanged() {\n        const pivotMode = this.columnModel.isPivotMode();\n        this.comp.addOrRemoveCssClass('ag-pivot-on', pivotMode);\n        this.comp.addOrRemoveCssClass('ag-pivot-off', !pivotMode);\n    }\n    onDisplayedColumnsChanged() {\n        const columns = this.columnModel.getAllDisplayedColumns();\n        const shouldAllowOverflow = columns.some(col => col.isSpanHeaderHeight());\n        this.comp.addOrRemoveCssClass('ag-header-allow-overflow', shouldAllowOverflow);\n    }\n    onTabKeyDown(e) {\n        const isRtl = this.gridOptionsService.is('enableRtl');\n        const direction = e.shiftKey !== isRtl\n            ? HeaderNavigationDirection.LEFT\n            : HeaderNavigationDirection.RIGHT;\n        if (this.headerNavigationService.navigateHorizontally(direction, true, e) ||\n            this.focusService.focusNextGridCoreContainer(e.shiftKey)) {\n            e.preventDefault();\n        }\n    }\n    handleKeyDown(e) {\n        let direction = null;\n        switch (e.key) {\n            case KeyCode.LEFT:\n                direction = HeaderNavigationDirection.LEFT;\n            case KeyCode.RIGHT:\n                if (!exists(direction)) {\n                    direction = HeaderNavigationDirection.RIGHT;\n                }\n                this.headerNavigationService.navigateHorizontally(direction, false, e);\n                break;\n            case KeyCode.UP:\n                direction = HeaderNavigationDirection.UP;\n            case KeyCode.DOWN:\n                if (!exists(direction)) {\n                    direction = HeaderNavigationDirection.DOWN;\n                }\n                if (this.headerNavigationService.navigateVertically(direction, null, e)) {\n                    e.preventDefault();\n                }\n                break;\n            default:\n                return;\n        }\n    }\n    onFocusOut(e) {\n        const eDocument = this.gridOptionsService.getDocument();\n        const { relatedTarget } = e;\n        if (!relatedTarget && this.eGui.contains(eDocument.activeElement)) {\n            return;\n        }\n        if (!this.eGui.contains(relatedTarget)) {\n            this.focusService.clearFocusedHeader();\n        }\n    }\n}\n__decorate$1e([\n    Autowired('headerNavigationService')\n], GridHeaderCtrl.prototype, \"headerNavigationService\", void 0);\n__decorate$1e([\n    Autowired('focusService')\n], GridHeaderCtrl.prototype, \"focusService\", void 0);\n__decorate$1e([\n    Autowired('columnModel')\n], GridHeaderCtrl.prototype, \"columnModel\", void 0);\n__decorate$1e([\n    Autowired('ctrlsService')\n], GridHeaderCtrl.prototype, \"ctrlsService\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1d = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass GridHeaderComp extends Component {\n    constructor() {\n        super(GridHeaderComp.TEMPLATE);\n    }\n    postConstruct() {\n        const compProxy = {\n            addOrRemoveCssClass: (cssClassName, on) => this.addOrRemoveCssClass(cssClassName, on),\n            setHeightAndMinHeight: height => {\n                this.getGui().style.height = height;\n                this.getGui().style.minHeight = height;\n            }\n        };\n        const ctrl = this.createManagedBean(new GridHeaderCtrl());\n        ctrl.setComp(compProxy, this.getGui(), this.getFocusableElement());\n        const addContainer = (container) => {\n            this.createManagedBean(container);\n            this.appendChild(container);\n        };\n        addContainer(new HeaderRowContainerComp('left'));\n        addContainer(new HeaderRowContainerComp(null));\n        addContainer(new HeaderRowContainerComp('right'));\n    }\n}\nGridHeaderComp.TEMPLATE = `<div class=\"ag-header\" role=\"presentation\"/>`;\n__decorate$1d([\n    PostConstruct\n], GridHeaderComp.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1c = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet HorizontalResizeService = class HorizontalResizeService extends BeanStub {\n    addResizeBar(params) {\n        const dragSource = {\n            dragStartPixels: params.dragStartPixels || 0,\n            eElement: params.eResizeBar,\n            onDragStart: this.onDragStart.bind(this, params),\n            onDragStop: this.onDragStop.bind(this, params),\n            onDragging: this.onDragging.bind(this, params)\n        };\n        this.dragService.addDragSource(dragSource, true);\n        // we pass remove func back to the caller, so call can tell us when they\n        // are finished, and then we remove the listener from the drag source\n        const finishedWithResizeFunc = () => this.dragService.removeDragSource(dragSource);\n        return finishedWithResizeFunc;\n    }\n    onDragStart(params, mouseEvent) {\n        this.dragStartX = mouseEvent.clientX;\n        this.setResizeIcons();\n        const shiftKey = mouseEvent instanceof MouseEvent && mouseEvent.shiftKey === true;\n        params.onResizeStart(shiftKey);\n    }\n    setResizeIcons() {\n        const ctrl = this.ctrlsService.getGridCtrl();\n        // change the body cursor, so when drag moves out of the drag bar, the cursor is still 'resize' (or 'move'\n        ctrl.setResizeCursor(true);\n        // we don't want text selection outside the grid (otherwise it looks weird as text highlights when we move)\n        ctrl.disableUserSelect(true);\n    }\n    onDragStop(params, mouseEvent) {\n        params.onResizeEnd(this.resizeAmount);\n        this.resetIcons();\n    }\n    resetIcons() {\n        const ctrl = this.ctrlsService.getGridCtrl();\n        ctrl.setResizeCursor(false);\n        ctrl.disableUserSelect(false);\n    }\n    onDragging(params, mouseEvent) {\n        this.resizeAmount = mouseEvent.clientX - this.dragStartX;\n        params.onResizing(this.resizeAmount);\n    }\n};\n__decorate$1c([\n    Autowired('dragService')\n], HorizontalResizeService.prototype, \"dragService\", void 0);\n__decorate$1c([\n    Autowired('ctrlsService')\n], HorizontalResizeService.prototype, \"ctrlsService\", void 0);\nHorizontalResizeService = __decorate$1c([\n    Bean('horizontalResizeService')\n], HorizontalResizeService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1b = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet StandardMenuFactory = class StandardMenuFactory extends BeanStub {\n    hideActiveMenu() {\n        if (this.hidePopup) {\n            this.hidePopup();\n        }\n    }\n    showMenuAfterMouseEvent(column, mouseEvent) {\n        this.showPopup(column, eMenu => {\n            this.popupService.positionPopupUnderMouseEvent({\n                column,\n                type: 'columnMenu',\n                mouseEvent,\n                ePopup: eMenu\n            });\n        }, 'columnMenu', mouseEvent.target);\n    }\n    showMenuAfterButtonClick(column, eventSource, containerType) {\n        this.showPopup(column, eMenu => {\n            this.popupService.positionPopupByComponent({\n                type: containerType,\n                eventSource,\n                ePopup: eMenu,\n                keepWithinBounds: true,\n                position: 'under',\n                column,\n            });\n        }, containerType, eventSource);\n    }\n    showPopup(column, positionCallback, containerType, eventSource) {\n        const filterWrapper = this.filterManager.getOrCreateFilterWrapper(column, 'COLUMN_MENU');\n        if (!filterWrapper) {\n            throw new Error('AG Grid - unable to show popup filter, filter instantiation failed');\n        }\n        const eMenu = document.createElement('div');\n        setAriaRole(eMenu, 'presentation');\n        eMenu.classList.add('ag-menu');\n        this.tabListener = this.addManagedListener(eMenu, 'keydown', (e) => this.trapFocusWithin(e, eMenu));\n        filterWrapper.guiPromise.then(gui => eMenu.appendChild(gui));\n        let hidePopup;\n        const afterGuiDetached = () => { var _a; return (_a = filterWrapper.filterPromise) === null || _a === void 0 ? void 0 : _a.then(filter => { var _a; return (_a = filter === null || filter === void 0 ? void 0 : filter.afterGuiDetached) === null || _a === void 0 ? void 0 : _a.call(filter); }); };\n        const anchorToElement = eventSource || this.ctrlsService.getGridBodyCtrl().getGui();\n        const closedCallback = (e) => {\n            column.setMenuVisible(false, 'contextMenu');\n            const isKeyboardEvent = e instanceof KeyboardEvent;\n            if (this.tabListener) {\n                this.tabListener = this.tabListener();\n            }\n            if (isKeyboardEvent && eventSource && isVisible(eventSource)) {\n                const focusableEl = this.focusService.findTabbableParent(eventSource);\n                if (focusableEl) {\n                    focusableEl.focus();\n                }\n            }\n            afterGuiDetached();\n        };\n        const translate = this.localeService.getLocaleTextFunc();\n        const addPopupRes = this.popupService.addPopup({\n            modal: true,\n            eChild: eMenu,\n            closeOnEsc: true,\n            closedCallback,\n            positionCallback: () => positionCallback(eMenu),\n            anchorToElement,\n            ariaLabel: translate('ariaLabelColumnMenu', 'Column Menu')\n        });\n        if (addPopupRes) {\n            this.hidePopup = hidePopup = addPopupRes.hideFunc;\n        }\n        filterWrapper.filterPromise.then(filter => {\n            // need to make sure the filter is present before positioning, as only\n            // after filter it is visible can we find out what the width of it is\n            positionCallback(eMenu);\n            if (filter.afterGuiAttached) {\n                filter.afterGuiAttached({ container: containerType, hidePopup });\n            }\n        });\n        column.setMenuVisible(true, 'contextMenu');\n    }\n    trapFocusWithin(e, menu) {\n        if (e.key !== KeyCode.TAB ||\n            e.defaultPrevented ||\n            this.focusService.findNextFocusableElement(menu, false, e.shiftKey)) {\n            return;\n        }\n        e.preventDefault();\n        this.focusService.focusInto(menu, e.shiftKey);\n    }\n    isMenuEnabled(column) {\n        // for standard, we show menu if filter is enabled, and the menu is not suppressed by passing an empty array\n        return column.isFilterAllowed() && column.getMenuTabs(['filterMenuTab']).includes('filterMenuTab');\n    }\n};\n__decorate$1b([\n    Autowired('filterManager')\n], StandardMenuFactory.prototype, \"filterManager\", void 0);\n__decorate$1b([\n    Autowired('popupService')\n], StandardMenuFactory.prototype, \"popupService\", void 0);\n__decorate$1b([\n    Autowired('focusService')\n], StandardMenuFactory.prototype, \"focusService\", void 0);\n__decorate$1b([\n    Autowired('ctrlsService')\n], StandardMenuFactory.prototype, \"ctrlsService\", void 0);\nStandardMenuFactory = __decorate$1b([\n    Bean('menuFactory')\n], StandardMenuFactory);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$1a = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass TabbedLayout extends Component {\n    constructor(params) {\n        super(TabbedLayout.getTemplate(params.cssClass));\n        this.items = [];\n        this.tabbedItemScrollMap = new Map();\n        this.params = params;\n        if (params.items) {\n            params.items.forEach(item => this.addItem(item));\n        }\n    }\n    postConstruct() {\n        this.createManagedBean(new ManagedFocusFeature(this.getFocusableElement(), {\n            onTabKeyDown: this.onTabKeyDown.bind(this),\n            handleKeyDown: this.handleKeyDown.bind(this)\n        }));\n        this.addDestroyFunc(() => { var _a, _b, _c; return (_c = (_b = (_a = this.activeItem) === null || _a === void 0 ? void 0 : _a.tabbedItem) === null || _b === void 0 ? void 0 : _b.afterDetachedCallback) === null || _c === void 0 ? void 0 : _c.call(_b); });\n    }\n    static getTemplate(cssClass) {\n        return /* html */ `<div class=\"ag-tabs ${cssClass}\">\n            <div ref=\"eHeader\" role=\"tablist\" class=\"ag-tabs-header ${cssClass ? `${cssClass}-header` : ''}\"></div>\n            <div ref=\"eBody\" role=\"presentation\" class=\"ag-tabs-body ${cssClass ? `${cssClass}-body` : ''}\"></div>\n        </div>`;\n    }\n    handleKeyDown(e) {\n        const eDocument = this.gridOptionsService.getDocument();\n        switch (e.key) {\n            case KeyCode.RIGHT:\n            case KeyCode.LEFT:\n                if (!this.eHeader.contains(eDocument.activeElement)) {\n                    return;\n                }\n                const isRightKey = e.key === KeyCode.RIGHT;\n                const isRtl = this.gridOptionsService.is('enableRtl');\n                const currentPosition = this.items.indexOf(this.activeItem);\n                const nextPosition = isRightKey !== isRtl ? Math.min(currentPosition + 1, this.items.length - 1) : Math.max(currentPosition - 1, 0);\n                if (currentPosition === nextPosition) {\n                    return;\n                }\n                e.preventDefault();\n                const nextItem = this.items[nextPosition];\n                this.showItemWrapper(nextItem);\n                nextItem.eHeaderButton.focus();\n                break;\n            case KeyCode.UP:\n            case KeyCode.DOWN:\n                e.stopPropagation();\n                break;\n        }\n    }\n    onTabKeyDown(e) {\n        if (e.defaultPrevented) {\n            return;\n        }\n        const { focusService, eHeader, eBody, activeItem } = this;\n        const eDocument = this.gridOptionsService.getDocument();\n        const activeElement = eDocument.activeElement;\n        const target = e.target;\n        e.preventDefault();\n        if (eHeader.contains(activeElement)) {\n            // focus is in header, move into body of popup\n            focusService.focusInto(eBody, e.shiftKey);\n            return;\n        }\n        let nextEl = null;\n        if (focusService.isTargetUnderManagedComponent(eBody, target)) {\n            if (e.shiftKey) {\n                nextEl = this.focusService.findFocusableElementBeforeTabGuard(eBody, target);\n            }\n            if (!nextEl) {\n                nextEl = activeItem.eHeaderButton;\n            }\n        }\n        if (!nextEl && eBody.contains(activeElement)) {\n            nextEl = focusService.findNextFocusableElement(eBody, false, e.shiftKey);\n            if (!nextEl) {\n                nextEl = activeItem.eHeaderButton;\n            }\n        }\n        if (nextEl) {\n            nextEl.focus();\n        }\n    }\n    setAfterAttachedParams(params) {\n        this.afterAttachedParams = params;\n    }\n    showFirstItem() {\n        if (this.items.length > 0) {\n            this.showItemWrapper(this.items[0]);\n        }\n    }\n    addItem(item) {\n        const eHeaderButton = document.createElement('span');\n        setAriaRole(eHeaderButton, 'tab');\n        eHeaderButton.setAttribute('tabIndex', '-1');\n        eHeaderButton.appendChild(item.title);\n        eHeaderButton.classList.add('ag-tab');\n        this.eHeader.appendChild(eHeaderButton);\n        setAriaLabel(eHeaderButton, item.titleLabel);\n        const wrapper = {\n            tabbedItem: item,\n            eHeaderButton: eHeaderButton\n        };\n        this.items.push(wrapper);\n        eHeaderButton.addEventListener('click', this.showItemWrapper.bind(this, wrapper));\n    }\n    showItem(tabbedItem) {\n        const itemWrapper = this.items.find(wrapper => wrapper.tabbedItem === tabbedItem);\n        if (itemWrapper) {\n            this.showItemWrapper(itemWrapper);\n        }\n    }\n    showItemWrapper(wrapper) {\n        var _a, _b;\n        const { tabbedItem, eHeaderButton } = wrapper;\n        if (this.params.onItemClicked) {\n            this.params.onItemClicked({ item: tabbedItem });\n        }\n        if (this.activeItem === wrapper) {\n            callIfPresent(this.params.onActiveItemClicked);\n            return;\n        }\n        if (this.lastScrollListener) {\n            this.lastScrollListener = this.lastScrollListener();\n        }\n        clearElement(this.eBody);\n        tabbedItem.bodyPromise.then((body) => {\n            this.eBody.appendChild(body);\n            const onlyUnmanaged = !this.focusService.isKeyboardMode();\n            this.focusService.focusInto(this.eBody, false, onlyUnmanaged);\n            if (tabbedItem.afterAttachedCallback) {\n                tabbedItem.afterAttachedCallback(this.afterAttachedParams);\n            }\n            if (this.params.keepScrollPosition) {\n                const scrollableContainer = (tabbedItem.getScrollableContainer && tabbedItem.getScrollableContainer()) || body;\n                this.lastScrollListener = this.addManagedListener(scrollableContainer, 'scroll', () => {\n                    this.tabbedItemScrollMap.set(tabbedItem.name, scrollableContainer.scrollTop);\n                });\n                const scrollPosition = this.tabbedItemScrollMap.get(tabbedItem.name);\n                if (scrollPosition !== undefined) {\n                    // Safari needs a small timeout or it will fire a scroll event to position 0\n                    setTimeout(() => {\n                        scrollableContainer.scrollTop = scrollPosition;\n                    }, 0);\n                }\n            }\n        });\n        if (this.activeItem) {\n            this.activeItem.eHeaderButton.classList.remove('ag-tab-selected');\n            (_b = (_a = this.activeItem.tabbedItem).afterDetachedCallback) === null || _b === void 0 ? void 0 : _b.call(_a);\n        }\n        eHeaderButton.classList.add('ag-tab-selected');\n        this.activeItem = wrapper;\n    }\n}\n__decorate$1a([\n    Autowired('focusService')\n], TabbedLayout.prototype, \"focusService\", void 0);\n__decorate$1a([\n    RefSelector('eHeader')\n], TabbedLayout.prototype, \"eHeader\", void 0);\n__decorate$1a([\n    RefSelector('eBody')\n], TabbedLayout.prototype, \"eBody\", void 0);\n__decorate$1a([\n    PostConstruct\n], TabbedLayout.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n/**\n * @deprecated Since v29 simpleHttpRequest has been deprecated as it was only meant for use in internal AG Grid documentation examples. Please use the browser fetch api directly.\n */\nfunction simpleHttpRequest(params) {\n    doOnce(() => console.warn(`AG Grid: Since v29 simpleHttpRequest has been deprecated as it was only meant for use in internal AG Grid documentation examples. Please use the browser fetch api directly.`), 'simpleHttpRequest');\n    return new AgPromise(resolve => {\n        const httpRequest = new XMLHttpRequest();\n        httpRequest.open('GET', params.url);\n        httpRequest.send();\n        httpRequest.onreadystatechange = function () {\n            if (httpRequest.readyState === 4 && httpRequest.status === 200) {\n                resolve(JSON.parse(httpRequest.responseText));\n            }\n        };\n    });\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$19 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst DEBOUNCE_DELAY = 50;\nlet ResizeObserverService = class ResizeObserverService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.polyfillFunctions = [];\n    }\n    observeResize(element, callback) {\n        const win = this.gridOptionsService.getWindow();\n        const useBrowserResizeObserver = () => {\n            const resizeObserver = new win.ResizeObserver(callback);\n            resizeObserver.observe(element);\n            return () => resizeObserver.disconnect();\n        };\n        const usePolyfill = () => {\n            // initialise to the current width and height, so first call will have no changes\n            let widthLastTime = offsetWidth(element);\n            let heightLastTime = offsetHeight(element);\n            // when finished, this gets turned to false.\n            let running = true;\n            const periodicallyCheckWidthAndHeight = () => {\n                if (running) {\n                    const newWidth = offsetWidth(element);\n                    const newHeight = offsetHeight(element);\n                    const changed = newWidth !== widthLastTime || newHeight !== heightLastTime;\n                    if (changed) {\n                        widthLastTime = newWidth;\n                        heightLastTime = newHeight;\n                        callback();\n                    }\n                    this.doNextPolyfillTurn(periodicallyCheckWidthAndHeight);\n                }\n            };\n            periodicallyCheckWidthAndHeight();\n            // the callback function we return sets running to false\n            return () => running = false;\n        };\n        const suppressResize = this.gridOptionsService.is('suppressBrowserResizeObserver');\n        const resizeObserverExists = !!win.ResizeObserver;\n        if (resizeObserverExists && !suppressResize) {\n            return useBrowserResizeObserver();\n        }\n        return usePolyfill();\n    }\n    doNextPolyfillTurn(func) {\n        this.polyfillFunctions.push(func);\n        this.schedulePolyfill();\n    }\n    schedulePolyfill() {\n        if (this.polyfillScheduled) {\n            return;\n        }\n        const executeAllFuncs = () => {\n            const funcs = this.polyfillFunctions;\n            // make sure set scheduled to false and clear clear array\n            // before executing the funcs, as the funcs could add more funcs\n            this.polyfillScheduled = false;\n            this.polyfillFunctions = [];\n            funcs.forEach(f => f());\n        };\n        this.polyfillScheduled = true;\n        this.getFrameworkOverrides().setTimeout(executeAllFuncs, DEBOUNCE_DELAY);\n    }\n};\nResizeObserverService = __decorate$19([\n    Bean('resizeObserverService')\n], ResizeObserverService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$18 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet AnimationFrameService = class AnimationFrameService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        // p1 and p2 are create tasks are to do with row and cell creation.\n        // for them we want to execute according to row order, so we use\n        // TaskItem so we know what index the item is for.\n        this.createTasksP1 = { list: [], sorted: false }; // eg drawing back-ground of rows\n        this.createTasksP2 = { list: [], sorted: false }; // eg cell renderers, adding hover functionality\n        // destroy tasks are to do with row removal. they are done after row creation as the user will need to see new\n        // rows first (as blank is scrolled into view), when we remove the old rows (no longer in view) is not as\n        // important.\n        this.destroyTasks = [];\n        this.ticking = false;\n        // we need to know direction of scroll, to build up rows in the direction of\n        // the scroll. eg if user scrolls down, we extend the rows by building down.\n        this.scrollGoingDown = true;\n        this.lastPage = 0;\n        this.lastScrollTop = 0;\n        this.taskCount = 0;\n        this.cancelledTasks = new Set();\n    }\n    setScrollTop(scrollTop) {\n        const isPaginationActive = this.gridOptionsService.is('pagination');\n        this.scrollGoingDown = scrollTop >= this.lastScrollTop;\n        if (isPaginationActive && scrollTop === 0) {\n            const currentPage = this.paginationProxy.getCurrentPage();\n            if (currentPage !== this.lastPage) {\n                this.lastPage = currentPage;\n                this.scrollGoingDown = true;\n            }\n        }\n        this.lastScrollTop = scrollTop;\n    }\n    init() {\n        this.useAnimationFrame = !this.gridOptionsService.is('suppressAnimationFrame');\n    }\n    isOn() {\n        return this.useAnimationFrame;\n    }\n    // this method is for our AG Grid sanity only - if animation frames are turned off,\n    // then no place in the code should be looking to add any work to be done in animation\n    // frames. this stops bugs - where some code is asking for a frame to be executed\n    // when it should not.\n    verifyAnimationFrameOn(methodName) {\n        if (this.useAnimationFrame === false) {\n            console.warn(`AG Grid: AnimationFrameService.${methodName} called but animation frames are off`);\n        }\n    }\n    createTask(task, index, list) {\n        this.verifyAnimationFrameOn(list);\n        const taskItem = { task, index, createOrder: ++this.taskCount };\n        this.addTaskToList(this[list], taskItem);\n        this.schedule();\n    }\n    cancelTask(task) {\n        this.cancelledTasks.add(task);\n    }\n    addTaskToList(taskList, task) {\n        taskList.list.push(task);\n        taskList.sorted = false;\n    }\n    sortTaskList(taskList) {\n        if (taskList.sorted) {\n            return;\n        }\n        const sortDirection = this.scrollGoingDown ? 1 : -1;\n        // sort first by row index (taking into account scroll direction), then by\n        // order of task creation (always ascending, so cells will render left-to-right)\n        taskList.list.sort((a, b) => a.index !== b.index ? sortDirection * (b.index - a.index) : b.createOrder - a.createOrder);\n        taskList.sorted = true;\n    }\n    addDestroyTask(task) {\n        this.verifyAnimationFrameOn('createTasksP3');\n        this.destroyTasks.push(task);\n        this.schedule();\n    }\n    executeFrame(millis) {\n        this.verifyAnimationFrameOn('executeFrame');\n        const p1TaskList = this.createTasksP1;\n        const p1Tasks = p1TaskList.list;\n        const p2TaskList = this.createTasksP2;\n        const p2Tasks = p2TaskList.list;\n        const destroyTasks = this.destroyTasks;\n        const frameStart = new Date().getTime();\n        let duration = (new Date().getTime()) - frameStart;\n        // 16ms is 60 fps\n        const noMaxMillis = millis <= 0;\n        const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n        while (noMaxMillis || duration < millis) {\n            const gridBodyDidSomething = gridBodyCon.getScrollFeature().scrollGridIfNeeded();\n            if (!gridBodyDidSomething) {\n                let task;\n                if (p1Tasks.length) {\n                    this.sortTaskList(p1TaskList);\n                    task = p1Tasks.pop().task;\n                }\n                else if (p2Tasks.length) {\n                    this.sortTaskList(p2TaskList);\n                    task = p2Tasks.pop().task;\n                }\n                else if (destroyTasks.length) {\n                    task = destroyTasks.pop();\n                }\n                else {\n                    this.cancelledTasks.clear();\n                    break;\n                }\n                if (!this.cancelledTasks.has(task)) {\n                    task();\n                }\n            }\n            duration = (new Date().getTime()) - frameStart;\n        }\n        if (p1Tasks.length || p2Tasks.length || destroyTasks.length) {\n            this.requestFrame();\n        }\n        else {\n            this.stopTicking();\n        }\n    }\n    stopTicking() {\n        this.ticking = false;\n    }\n    flushAllFrames() {\n        if (!this.useAnimationFrame) {\n            return;\n        }\n        this.executeFrame(-1);\n    }\n    schedule() {\n        if (!this.useAnimationFrame) {\n            return;\n        }\n        if (!this.ticking) {\n            this.ticking = true;\n            this.requestFrame();\n        }\n    }\n    requestFrame() {\n        // check for the existence of requestAnimationFrame, and if\n        // it's missing, then we polyfill it with setTimeout()\n        const callback = this.executeFrame.bind(this, 60);\n        this.requestAnimationFrame(callback);\n    }\n    requestAnimationFrame(callback) {\n        const win = this.gridOptionsService.getWindow();\n        if (win.requestAnimationFrame) {\n            win.requestAnimationFrame(callback);\n        }\n        else if (win.webkitRequestAnimationFrame) {\n            win.webkitRequestAnimationFrame(callback);\n        }\n        else {\n            win.setTimeout(callback, 0);\n        }\n    }\n    isQueueEmpty() {\n        return !this.ticking;\n    }\n    // a debounce utility used for parts of the app involved with rendering.\n    // the advantage over normal debounce is the client can call flushAllFrames()\n    // to make sure all rendering is complete. we don't wait any milliseconds,\n    // as this is intended to batch calls in one VM turn.\n    debounce(func) {\n        let pending = false;\n        return () => {\n            if (!this.isOn()) {\n                this.getFrameworkOverrides().setTimeout(func, 0);\n                return;\n            }\n            if (pending) {\n                return;\n            }\n            pending = true;\n            this.addDestroyTask(() => {\n                pending = false;\n                func();\n            });\n        };\n    }\n};\n__decorate$18([\n    Autowired('ctrlsService')\n], AnimationFrameService.prototype, \"ctrlsService\", void 0);\n__decorate$18([\n    Autowired('paginationProxy')\n], AnimationFrameService.prototype, \"paginationProxy\", void 0);\n__decorate$18([\n    PostConstruct\n], AnimationFrameService.prototype, \"init\", null);\nAnimationFrameService = __decorate$18([\n    Bean('animationFrameService')\n], AnimationFrameService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$17 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet AutoWidthCalculator = class AutoWidthCalculator extends BeanStub {\n    postConstruct() {\n        this.ctrlsService.whenReady(p => {\n            this.centerRowContainerCtrl = p.centerRowContainerCtrl;\n        });\n    }\n    // this is the trick: we create a dummy container and clone all the cells\n    // into the dummy, then check the dummy's width. then destroy the dummy\n    // as we don't need it any more.\n    // drawback: only the cells visible on the screen are considered\n    getPreferredWidthForColumn(column, skipHeader) {\n        const eHeaderCell = this.getHeaderCellForColumn(column);\n        // cell isn't visible\n        if (!eHeaderCell) {\n            return -1;\n        }\n        const elements = this.rowRenderer.getAllCellsForColumn(column);\n        if (!skipHeader) {\n            // we only consider the lowest level cell, not the group cell. in 99% of the time, this\n            // will be enough. if we consider groups, then it gets too complicated for what it's worth,\n            // as the groups can span columns and this class only considers one column at a time.\n            elements.push(eHeaderCell);\n        }\n        return this.addElementsToContainerAndGetWidth(elements);\n    }\n    getPreferredWidthForColumnGroup(columnGroup) {\n        const eHeaderCell = this.getHeaderCellForColumn(columnGroup);\n        if (!eHeaderCell) {\n            return -1;\n        }\n        return this.addElementsToContainerAndGetWidth([eHeaderCell]);\n    }\n    addElementsToContainerAndGetWidth(elements) {\n        // this element has to be a form, otherwise form elements within a cell\n        // will be validated while being cloned. This can cause issues such as \n        // radio buttons being reset and losing their values.\n        const eDummyContainer = document.createElement('form');\n        // position fixed, so it isn't restricted to the boundaries of the parent\n        eDummyContainer.style.position = 'fixed';\n        // we put the dummy into the body container, so it will inherit all the\n        // css styles that the real cells are inheriting\n        const eBodyContainer = this.centerRowContainerCtrl.getContainerElement();\n        eBodyContainer.appendChild(eDummyContainer);\n        elements.forEach(el => this.cloneItemIntoDummy(el, eDummyContainer));\n        // at this point, all the clones are lined up vertically with natural widths. the dummy\n        // container will have a width wide enough just to fit the largest.\n        const dummyContainerWidth = eDummyContainer.offsetWidth;\n        // we are finished with the dummy container, so get rid of it\n        eBodyContainer.removeChild(eDummyContainer);\n        // we add padding as I found sometimes the gui still put '...' after some of the texts. so the\n        // user can configure the grid to add a few more pixels after the calculated width\n        const autoSizePadding = this.getAutoSizePadding();\n        return dummyContainerWidth + autoSizePadding;\n    }\n    getAutoSizePadding() {\n        const value = this.gridOptionsService.getNum('autoSizePadding');\n        return value != null && value >= 0 ? value : 20;\n    }\n    getHeaderCellForColumn(column) {\n        /* tslint:enable */\n        let element = null;\n        this.ctrlsService.getHeaderRowContainerCtrls().forEach(container => {\n            const res = container.getHtmlElementForColumnHeader(column);\n            if (res != null) {\n                element = res;\n            }\n        });\n        return element;\n    }\n    cloneItemIntoDummy(eCell, eDummyContainer) {\n        // make a deep clone of the cell\n        const eCellClone = eCell.cloneNode(true);\n        // the original has a fixed width, we remove this to allow the natural width based on content\n        eCellClone.style.width = '';\n        // the original has position = absolute, we need to remove this so it's positioned normally\n        eCellClone.style.position = 'static';\n        eCellClone.style.left = '';\n        // we put the cell into a containing div, as otherwise the cells would just line up\n        // on the same line, standard flow layout, by putting them into divs, they are laid\n        // out one per line\n        const eCloneParent = document.createElement('div');\n        const eCloneParentClassList = eCloneParent.classList;\n        const isHeader = ['ag-header-cell', 'ag-header-group-cell'].some(cls => eCellClone.classList.contains(cls));\n        if (isHeader) {\n            eCloneParentClassList.add('ag-header', 'ag-header-row');\n            eCloneParent.style.position = 'static';\n        }\n        else {\n            eCloneParentClassList.add('ag-row');\n        }\n        // find parent using classes (headers have ag-header-cell, rows have ag-row), and copy classes from it.\n        // if we didn't do this, things like ag-row-level-2 would be missing if present, which sets indents\n        // onto group items.\n        let pointer = eCell.parentElement;\n        while (pointer) {\n            const isRow = ['ag-header-row', 'ag-row'].some(cls => pointer.classList.contains(cls));\n            if (isRow) {\n                for (let i = 0; i < pointer.classList.length; i++) {\n                    const item = pointer.classList[i];\n                    // we skip ag-row-position-absolute, as this has structural CSS applied that stops the\n                    // element from fitting into it's parent, and we need the element to stretch the parent\n                    // as we are measuring the parents width\n                    if (item != 'ag-row-position-absolute') {\n                        eCloneParentClassList.add(item);\n                    }\n                }\n                break;\n            }\n            pointer = pointer.parentElement;\n        }\n        // the twig on the branch, the branch on the tree, the tree in the hole,\n        // the hole in the bog, the bog in the clone, the clone in the parent,\n        // the parent in the dummy, and the dummy down in the vall-e-ooo, OOOOOOOOO! Oh row the rattling bog....\n        eCloneParent.appendChild(eCellClone);\n        eDummyContainer.appendChild(eCloneParent);\n    }\n};\n__decorate$17([\n    Autowired('rowRenderer')\n], AutoWidthCalculator.prototype, \"rowRenderer\", void 0);\n__decorate$17([\n    Autowired('ctrlsService')\n], AutoWidthCalculator.prototype, \"ctrlsService\", void 0);\n__decorate$17([\n    Autowired('rowCssClassCalculator')\n], AutoWidthCalculator.prototype, \"rowCssClassCalculator\", void 0);\n__decorate$17([\n    PostConstruct\n], AutoWidthCalculator.prototype, \"postConstruct\", null);\nAutoWidthCalculator = __decorate$17([\n    Bean('autoWidthCalculator')\n], AutoWidthCalculator);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$16 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass StickyRowFeature extends BeanStub {\n    constructor(createRowCon, destroyRowCtrls) {\n        super();\n        this.createRowCon = createRowCon;\n        this.destroyRowCtrls = destroyRowCtrls;\n        this.stickyRowCtrls = [];\n        this.containerHeight = 0;\n    }\n    postConstruct() {\n        this.isClientSide = this.rowModel.getType() === 'clientSide';\n        this.ctrlsService.whenReady(params => {\n            this.gridBodyCtrl = params.gridBodyCtrl;\n        });\n    }\n    getStickyRowCtrls() {\n        return this.stickyRowCtrls;\n    }\n    checkStickyRows() {\n        let height = 0;\n        if (!this.gridOptionsService.isGroupRowsSticky()) {\n            this.refreshNodesAndContainerHeight([], height);\n            return;\n        }\n        const stickyRows = [];\n        const firstPixel = this.rowRenderer.getFirstVisibleVerticalPixel();\n        const addStickyRow = (stickyRow) => {\n            var _a, _b, _c;\n            stickyRows.push(stickyRow);\n            let lastChildBottom;\n            if (this.isClientSide) {\n                let lastAncestor = stickyRow;\n                while (lastAncestor.expanded) {\n                    if (lastAncestor.master) {\n                        lastAncestor = lastAncestor.detailNode;\n                    }\n                    else if (lastAncestor.childrenAfterSort) {\n                        // Tree Data will have `childrenAfterSort` without any nodes, but\n                        // the current node will still be marked as expansible.\n                        if (lastAncestor.childrenAfterSort.length === 0) {\n                            break;\n                        }\n                        lastAncestor = last(lastAncestor.childrenAfterSort);\n                    }\n                }\n                lastChildBottom = lastAncestor.rowTop + lastAncestor.rowHeight;\n            }\n            // if the rowModel is `serverSide` as only `clientSide` and `serverSide` create this feature.\n            else {\n                if (stickyRow.master) {\n                    lastChildBottom = stickyRow.detailNode.rowTop + stickyRow.detailNode.rowHeight;\n                }\n                else {\n                    const storeBounds = (_a = stickyRow.childStore) === null || _a === void 0 ? void 0 : _a.getStoreBounds();\n                    lastChildBottom = ((_b = storeBounds === null || storeBounds === void 0 ? void 0 : storeBounds.heightPx) !== null && _b !== void 0 ? _b : 0) + ((_c = storeBounds === null || storeBounds === void 0 ? void 0 : storeBounds.topPx) !== null && _c !== void 0 ? _c : 0);\n                }\n            }\n            const stickRowBottom = firstPixel + height + stickyRow.rowHeight;\n            if (lastChildBottom < stickRowBottom) {\n                stickyRow.stickyRowTop = height + (lastChildBottom - stickRowBottom);\n            }\n            else {\n                stickyRow.stickyRowTop = height;\n            }\n            height = 0;\n            stickyRows.forEach(rowNode => {\n                const thisRowLastPx = rowNode.stickyRowTop + rowNode.rowHeight;\n                if (height < thisRowLastPx) {\n                    height = thisRowLastPx;\n                }\n            });\n        };\n        while (true) {\n            const firstPixelAfterStickyRows = firstPixel + height;\n            const firstIndex = this.rowModel.getRowIndexAtPixel(firstPixelAfterStickyRows);\n            const firstRow = this.rowModel.getRow(firstIndex);\n            if (firstRow == null) {\n                break;\n            }\n            // only happens when pivoting, and we are showing root node\n            if (firstRow.level < 0) {\n                break;\n            }\n            const parents = [];\n            let p = firstRow.parent;\n            while (p.level >= 0) {\n                parents.push(p);\n                p = p.parent;\n            }\n            const firstMissingParent = parents.reverse().find(parent => stickyRows.indexOf(parent) < 0 && parent.displayed);\n            if (firstMissingParent) {\n                addStickyRow(firstMissingParent);\n                continue;\n            }\n            // if first row is an open group, and practically shown, it needs\n            // to be stuck\n            if (firstRow.isExpandable() && firstRow.expanded && firstRow.rowTop < firstPixelAfterStickyRows) {\n                addStickyRow(firstRow);\n                continue;\n            }\n            break;\n        }\n        this.refreshNodesAndContainerHeight(stickyRows, height);\n    }\n    refreshStickyNode(stickRowNode) {\n        const allStickyNodes = [];\n        for (let i = 0; i < this.stickyRowCtrls.length; i++) {\n            const currentNode = this.stickyRowCtrls[i].getRowNode();\n            if (currentNode !== stickRowNode) {\n                allStickyNodes.push(currentNode);\n            }\n        }\n        this.refreshNodesAndContainerHeight(allStickyNodes, this.containerHeight);\n        this.checkStickyRows();\n    }\n    refreshNodesAndContainerHeight(allStickyNodes, height) {\n        const removedCtrls = this.stickyRowCtrls.filter(ctrl => allStickyNodes.indexOf(ctrl.getRowNode()) === -1);\n        const addedNodes = allStickyNodes.filter(rowNode => this.stickyRowCtrls.findIndex(ctrl => ctrl.getRowNode() === rowNode) === -1);\n        const ctrlsToDestroy = {};\n        removedCtrls.forEach(removedCtrl => {\n            ctrlsToDestroy[removedCtrl.getRowNode().id] = removedCtrl;\n            this.stickyRowCtrls = this.stickyRowCtrls.filter(ctrl => ctrl !== removedCtrl);\n        });\n        for (const ctrl of Object.values(ctrlsToDestroy)) {\n            ctrl.getRowNode().sticky = false;\n        }\n        this.destroyRowCtrls(ctrlsToDestroy, false);\n        const newCtrls = addedNodes.map(rowNode => {\n            rowNode.sticky = true;\n            return this.createRowCon(rowNode, false, false);\n        });\n        this.stickyRowCtrls.push(...newCtrls);\n        this.stickyRowCtrls.forEach(ctrl => ctrl.setRowTop(ctrl.getRowNode().stickyRowTop));\n        this.stickyRowCtrls.sort((a, b) => b.getRowNode().rowIndex - a.getRowNode().rowIndex);\n        if (this.containerHeight !== height) {\n            this.containerHeight = height;\n            this.gridBodyCtrl.setStickyTopHeight(height);\n        }\n    }\n}\n__decorate$16([\n    Autowired(\"rowModel\")\n], StickyRowFeature.prototype, \"rowModel\", void 0);\n__decorate$16([\n    Autowired(\"rowRenderer\")\n], StickyRowFeature.prototype, \"rowRenderer\", void 0);\n__decorate$16([\n    Autowired(\"ctrlsService\")\n], StickyRowFeature.prototype, \"ctrlsService\", void 0);\n__decorate$16([\n    PostConstruct\n], StickyRowFeature.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$15 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst DEFAULT_KEEP_DETAIL_ROW_COUNT = 10;\nlet RowRenderer = class RowRenderer extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.destroyFuncsForColumnListeners = [];\n        // map of row ids to row objects. keeps track of which elements\n        // are rendered for which rows in the dom.\n        this.rowCtrlsByRowIndex = {};\n        this.zombieRowCtrls = {};\n        this.allRowCtrls = [];\n        this.topRowCtrls = [];\n        this.bottomRowCtrls = [];\n        // we only allow one refresh at a time, otherwise the internal memory structure here\n        // will get messed up. this can happen if the user has a cellRenderer, and inside the\n        // renderer they call an API method that results in another pass of the refresh,\n        // then it will be trying to draw rows in the middle of a refresh.\n        this.refreshInProgress = false;\n        this.dataFirstRenderedFired = false;\n    }\n    postConstruct() {\n        this.ctrlsService.whenReady(() => {\n            this.gridBodyCtrl = this.ctrlsService.getGridBodyCtrl();\n            this.initialise();\n        });\n    }\n    initialise() {\n        this.addManagedListener(this.eventService, Events.EVENT_PAGINATION_CHANGED, this.onPageLoaded.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_PINNED_ROW_DATA_CHANGED, this.onPinnedRowDataChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_CHANGED, this.onDisplayedColumnsChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_BODY_SCROLL, this.onBodyScroll.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_BODY_HEIGHT_CHANGED, this.redrawAfterScroll.bind(this));\n        this.addManagedPropertyListener('domLayout', this.onDomLayoutChanged.bind(this));\n        this.addManagedPropertyListener('rowClass', this.redrawRows.bind(this));\n        if (this.gridOptionsService.isGroupRowsSticky()) {\n            const rowModelType = this.rowModel.getType();\n            if (rowModelType === 'clientSide' || rowModelType === 'serverSide') {\n                this.stickyRowFeature = this.createManagedBean(new StickyRowFeature(this.createRowCon.bind(this), this.destroyRowCtrls.bind(this)));\n            }\n        }\n        this.registerCellEventListeners();\n        this.initialiseCache();\n        this.printLayout = this.gridOptionsService.isDomLayout('print');\n        this.embedFullWidthRows = this.printLayout || this.gridOptionsService.is('embedFullWidthRows');\n        this.redrawAfterModelUpdate();\n    }\n    initialiseCache() {\n        if (this.gridOptionsService.is('keepDetailRows')) {\n            const countProp = this.getKeepDetailRowsCount();\n            const count = countProp != null ? countProp : 3;\n            this.cachedRowCtrls = new RowCtrlCache(count);\n        }\n    }\n    getKeepDetailRowsCount() {\n        const keepDetailRowsCount = this.gridOptionsService.getNum('keepDetailRowsCount');\n        if (exists(keepDetailRowsCount) && keepDetailRowsCount > 0) {\n            return keepDetailRowsCount;\n        }\n        return DEFAULT_KEEP_DETAIL_ROW_COUNT;\n    }\n    getRowCtrls() {\n        return this.allRowCtrls;\n    }\n    getStickyTopRowCtrls() {\n        if (!this.stickyRowFeature) {\n            return [];\n        }\n        return this.stickyRowFeature.getStickyRowCtrls();\n    }\n    updateAllRowCtrls() {\n        const liveList = getAllValuesInObject(this.rowCtrlsByRowIndex);\n        const isEnsureDomOrder = this.gridOptionsService.is('ensureDomOrder');\n        const isPrintLayout = this.gridOptionsService.isDomLayout('print');\n        if (isEnsureDomOrder || isPrintLayout) {\n            liveList.sort((a, b) => a.getRowNode().rowIndex - b.getRowNode.rowIndex);\n        }\n        const zombieList = getAllValuesInObject(this.zombieRowCtrls);\n        const cachedList = this.cachedRowCtrls ? this.cachedRowCtrls.getEntries() : [];\n        this.allRowCtrls = [...liveList, ...zombieList, ...cachedList];\n    }\n    onCellFocusChanged(event) {\n        this.getAllCellCtrls().forEach(cellCtrl => cellCtrl.onCellFocused(event));\n        this.getFullWidthRowCtrls().forEach(rowCtrl => rowCtrl.onFullWidthRowFocused(event));\n    }\n    // in a clean design, each cell would register for each of these events. however when scrolling, all the cells\n    // registering and de-registering for events is a performance bottleneck. so we register here once and inform\n    // all active cells.\n    registerCellEventListeners() {\n        this.addManagedListener(this.eventService, Events.EVENT_CELL_FOCUSED, (event) => {\n            this.onCellFocusChanged(event);\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_CELL_FOCUS_CLEARED, () => {\n            this.onCellFocusChanged();\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_FLASH_CELLS, event => {\n            this.getAllCellCtrls().forEach(cellCtrl => cellCtrl.onFlashCells(event));\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_HOVER_CHANGED, () => {\n            this.getAllCellCtrls().forEach(cellCtrl => cellCtrl.onColumnHover());\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_CHANGED, () => {\n            this.getAllCellCtrls().forEach(cellCtrl => cellCtrl.onDisplayedColumnsChanged());\n        });\n        // only for printLayout - because we are rendering all the cells in the same row, regardless of pinned state,\n        // then changing the width of the containers will impact left position. eg the center cols all have their\n        // left position adjusted by the width of the left pinned column, so if the pinned left column width changes,\n        // all the center cols need to be shifted to accommodate this. when in normal layout, the pinned cols are\n        // in different containers so doesn't impact.\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED, () => {\n            if (this.printLayout) {\n                this.getAllCellCtrls().forEach(cellCtrl => cellCtrl.onLeftChanged());\n            }\n        });\n        const rangeSelectionEnabled = this.gridOptionsService.isEnableRangeSelection();\n        if (rangeSelectionEnabled) {\n            this.addManagedListener(this.eventService, Events.EVENT_RANGE_SELECTION_CHANGED, () => {\n                this.getAllCellCtrls().forEach(cellCtrl => cellCtrl.onRangeSelectionChanged());\n            });\n            this.addManagedListener(this.eventService, Events.EVENT_COLUMN_MOVED, () => {\n                this.getAllCellCtrls().forEach(cellCtrl => cellCtrl.updateRangeBordersIfRangeCount());\n            });\n            this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PINNED, () => {\n                this.getAllCellCtrls().forEach(cellCtrl => cellCtrl.updateRangeBordersIfRangeCount());\n            });\n            this.addManagedListener(this.eventService, Events.EVENT_COLUMN_VISIBLE, () => {\n                this.getAllCellCtrls().forEach(cellCtrl => cellCtrl.updateRangeBordersIfRangeCount());\n            });\n        }\n        // add listeners to the grid columns\n        this.refreshListenersToColumnsForCellComps();\n        // if the grid columns change, then refresh the listeners again\n        this.addManagedListener(this.eventService, Events.EVENT_GRID_COLUMNS_CHANGED, this.refreshListenersToColumnsForCellComps.bind(this));\n        this.addDestroyFunc(this.removeGridColumnListeners.bind(this));\n    }\n    // executes all functions in destroyFuncsForColumnListeners and then clears the list\n    removeGridColumnListeners() {\n        this.destroyFuncsForColumnListeners.forEach(func => func());\n        this.destroyFuncsForColumnListeners.length = 0;\n    }\n    // this function adds listeners onto all the grid columns, which are the column that we could have cellComps for.\n    // when the grid columns change, we add listeners again. in an ideal design, each CellComp would just register to\n    // the column it belongs to on creation, however this was a bottleneck with the number of cells, so do it here\n    // once instead.\n    refreshListenersToColumnsForCellComps() {\n        this.removeGridColumnListeners();\n        const cols = this.columnModel.getAllGridColumns();\n        if (!cols) {\n            return;\n        }\n        cols.forEach(col => {\n            const forEachCellWithThisCol = (callback) => {\n                this.getAllCellCtrls().forEach(cellCtrl => {\n                    if (cellCtrl.getColumn() === col) {\n                        callback(cellCtrl);\n                    }\n                });\n            };\n            const leftChangedListener = () => {\n                forEachCellWithThisCol(cellCtrl => cellCtrl.onLeftChanged());\n            };\n            const widthChangedListener = () => {\n                forEachCellWithThisCol(cellCtrl => cellCtrl.onWidthChanged());\n            };\n            const firstRightPinnedChangedListener = () => {\n                forEachCellWithThisCol(cellCtrl => cellCtrl.onFirstRightPinnedChanged());\n            };\n            const lastLeftPinnedChangedListener = () => {\n                forEachCellWithThisCol(cellCtrl => cellCtrl.onLastLeftPinnedChanged());\n            };\n            const colDefChangedListener = () => {\n                forEachCellWithThisCol(cellCtrl => cellCtrl.onColDefChanged());\n            };\n            col.addEventListener('leftChanged', leftChangedListener);\n            col.addEventListener('widthChanged', widthChangedListener);\n            col.addEventListener('firstRightPinnedChanged', firstRightPinnedChangedListener);\n            col.addEventListener('lastLeftPinnedChanged', lastLeftPinnedChangedListener);\n            col.addEventListener('colDefChanged', colDefChangedListener);\n            this.destroyFuncsForColumnListeners.push(() => {\n                col.removeEventListener('leftChanged', leftChangedListener);\n                col.removeEventListener('widthChanged', widthChangedListener);\n                col.removeEventListener('firstRightPinnedChanged', firstRightPinnedChangedListener);\n                col.removeEventListener('lastLeftPinnedChanged', lastLeftPinnedChangedListener);\n                col.removeEventListener('colDefChanged', colDefChangedListener);\n            });\n        });\n    }\n    onDomLayoutChanged() {\n        const printLayout = this.gridOptionsService.isDomLayout('print');\n        const embedFullWidthRows = printLayout || this.gridOptionsService.is('embedFullWidthRows');\n        // if moving towards or away from print layout, means we need to destroy all rows, as rows are not laid\n        // out using absolute positioning when doing print layout\n        const destroyRows = embedFullWidthRows !== this.embedFullWidthRows || this.printLayout !== printLayout;\n        this.printLayout = printLayout;\n        this.embedFullWidthRows = embedFullWidthRows;\n        if (destroyRows) {\n            this.redrawAfterModelUpdate({ domLayoutChanged: true });\n        }\n    }\n    // for row models that have datasources, when we update the datasource, we need to force the rowRenderer\n    // to redraw all rows. otherwise the old rows from the old datasource will stay displayed.\n    datasourceChanged() {\n        this.firstRenderedRow = 0;\n        this.lastRenderedRow = -1;\n        const rowIndexesToRemove = Object.keys(this.rowCtrlsByRowIndex);\n        this.removeRowCtrls(rowIndexesToRemove);\n    }\n    onPageLoaded(event) {\n        const params = {\n            recycleRows: event.keepRenderedRows,\n            animate: event.animate,\n            newData: event.newData,\n            newPage: event.newPage,\n            // because this is a model updated event (not pinned rows), we\n            // can skip updating the pinned rows. this is needed so that if user\n            // is doing transaction updates, the pinned rows are not getting constantly\n            // trashed - or editing cells in pinned rows are not refreshed and put into read mode\n            onlyBody: true\n        };\n        this.redrawAfterModelUpdate(params);\n    }\n    getAllCellsForColumn(column) {\n        const res = [];\n        this.getAllRowCtrls().forEach(rowCtrl => {\n            const eCell = rowCtrl.getCellElement(column);\n            if (eCell) {\n                res.push(eCell);\n            }\n        });\n        return res;\n    }\n    refreshFloatingRowComps() {\n        this.refreshFloatingRows(this.topRowCtrls, this.pinnedRowModel.getPinnedTopRowData());\n        this.refreshFloatingRows(this.bottomRowCtrls, this.pinnedRowModel.getPinnedBottomRowData());\n    }\n    getTopRowCtrls() {\n        return this.topRowCtrls;\n    }\n    getBottomRowCtrls() {\n        return this.bottomRowCtrls;\n    }\n    refreshFloatingRows(rowComps, rowNodes) {\n        rowComps.forEach((row) => {\n            row.destroyFirstPass();\n            row.destroySecondPass();\n        });\n        rowComps.length = 0;\n        if (!rowNodes) {\n            return;\n        }\n        rowNodes.forEach(rowNode => {\n            const rowCtrl = new RowCtrl(rowNode, this.beans, false, false, this.printLayout);\n            rowComps.push(rowCtrl);\n        });\n    }\n    onPinnedRowDataChanged() {\n        // recycling rows in order to ensure cell editing is not cancelled\n        const params = {\n            recycleRows: true\n        };\n        this.redrawAfterModelUpdate(params);\n    }\n    // if the row nodes are not rendered, no index is returned\n    getRenderedIndexesForRowNodes(rowNodes) {\n        const result = [];\n        if (missing(rowNodes)) {\n            return result;\n        }\n        iterateObject(this.rowCtrlsByRowIndex, (index, renderedRow) => {\n            const rowNode = renderedRow.getRowNode();\n            if (rowNodes.indexOf(rowNode) >= 0) {\n                result.push(index);\n            }\n        });\n        return result;\n    }\n    redrawRows(rowNodes) {\n        // if no row nodes provided, then refresh everything\n        const partialRefresh = rowNodes != null && rowNodes.length > 0;\n        if (partialRefresh) {\n            const indexesToRemove = this.getRenderedIndexesForRowNodes(rowNodes);\n            // remove the rows\n            this.removeRowCtrls(indexesToRemove);\n        }\n        // add draw them again\n        this.redrawAfterModelUpdate({\n            recycleRows: partialRefresh\n        });\n    }\n    getCellToRestoreFocusToAfterRefresh(params) {\n        const focusedCell = (params === null || params === void 0 ? void 0 : params.suppressKeepFocus) ? null : this.focusService.getFocusCellToUseAfterRefresh();\n        if (focusedCell == null) {\n            return null;\n        }\n        // if the dom is not actually focused on a cell, then we don't try to refocus. the problem this\n        // solves is with editing - if the user is editing, eg focus is on a text field, and not on the\n        // cell itself, then the cell can be registered as having focus, however it's the text field that\n        // has the focus and not the cell div. therefore, when the refresh is finished, the grid will focus\n        // the cell, and not the textfield. that means if the user is in a text field, and the grid refreshes,\n        // the focus is lost from the text field. we do not want this.\n        const eDocument = this.gridOptionsService.getDocument();\n        const activeElement = eDocument.activeElement;\n        const cellDomData = this.gridOptionsService.getDomData(activeElement, CellCtrl.DOM_DATA_KEY_CELL_CTRL);\n        const rowDomData = this.gridOptionsService.getDomData(activeElement, RowCtrl.DOM_DATA_KEY_ROW_CTRL);\n        const gridElementFocused = cellDomData || rowDomData;\n        return gridElementFocused ? focusedCell : null;\n    }\n    // gets called from:\n    // +) initialisation (in registerGridComp) params = null\n    // +) onDomLayoutChanged, params = null\n    // +) onPageLoaded, recycleRows, animate, newData, newPage from event, onlyBody=true\n    // +) onPinnedRowDataChanged, recycleRows = true\n    // +) redrawRows (from Grid API), recycleRows = true/false\n    redrawAfterModelUpdate(params = {}) {\n        this.getLockOnRefresh();\n        const focusedCell = this.getCellToRestoreFocusToAfterRefresh(params);\n        this.updateContainerHeights();\n        this.scrollToTopIfNewData(params);\n        // never recycle rows on layout change as rows could change from normal DOM layout\n        // back to the grid's row positioning.\n        const recycleRows = !params.domLayoutChanged && !!params.recycleRows;\n        const animate = params.animate && this.gridOptionsService.isAnimateRows();\n        // after modelUpdate, row indexes can change, so we clear out the rowsByIndex map,\n        // however we can reuse the rows, so we keep them but index by rowNode.id\n        const rowsToRecycle = recycleRows ? this.recycleRows() : null;\n        if (!recycleRows) {\n            this.removeAllRowComps();\n        }\n        this.redraw(rowsToRecycle, animate);\n        this.gridBodyCtrl.updateRowCount();\n        if (!params.onlyBody) {\n            this.refreshFloatingRowComps();\n        }\n        this.dispatchDisplayedRowsChanged();\n        // if a cell was focused before, ensure focus now.\n        if (focusedCell != null) {\n            this.restoreFocusedCell(focusedCell);\n        }\n        this.releaseLockOnRefresh();\n    }\n    scrollToTopIfNewData(params) {\n        const scrollToTop = params.newData || params.newPage;\n        const suppressScrollToTop = this.gridOptionsService.is('suppressScrollOnNewData');\n        if (scrollToTop && !suppressScrollToTop) {\n            this.gridBodyCtrl.getScrollFeature().scrollToTop();\n        }\n    }\n    updateContainerHeights() {\n        // when doing print layout, we don't explicitly set height on the containers\n        if (this.printLayout) {\n            this.rowContainerHeightService.setModelHeight(null);\n            return;\n        }\n        let containerHeight = this.paginationProxy.getCurrentPageHeight();\n        // we need at least 1 pixel for the horizontal scroll to work. so if there are now rows,\n        // we still want the scroll to be present, otherwise there would be no way to scroll the header\n        // which might be needed us user wants to access columns\n        // on the RHS - and if that was where the filter was that cause no rows to be presented, there\n        // is no way to remove the filter.\n        if (containerHeight === 0) {\n            containerHeight = 1;\n        }\n        this.rowContainerHeightService.setModelHeight(containerHeight);\n    }\n    getLockOnRefresh() {\n        if (this.refreshInProgress) {\n            throw new Error(\"AG Grid: cannot get grid to draw rows when it is in the middle of drawing rows. \" +\n                \"Your code probably called a grid API method while the grid was in the render stage. To overcome \" +\n                \"this, put the API call into a timeout, e.g. instead of api.redrawRows(), \" +\n                \"call setTimeout(function() { api.redrawRows(); }, 0). To see what part of your code \" +\n                \"that caused the refresh check this stacktrace.\");\n        }\n        this.refreshInProgress = true;\n    }\n    releaseLockOnRefresh() {\n        this.refreshInProgress = false;\n    }\n    isRefreshInProgress() {\n        return this.refreshInProgress;\n    }\n    // sets the focus to the provided cell, if the cell is provided. this way, the user can call refresh without\n    // worry about the focus been lost. this is important when the user is using keyboard navigation to do edits\n    // and the cellEditor is calling 'refresh' to get other cells to update (as other cells might depend on the\n    // edited cell).\n    restoreFocusedCell(cellPosition) {\n        if (cellPosition) {\n            // we don't wish to dispatch an event as the rowRenderer is not capable of changing the selected cell,\n            // so we mock a change event for the full width rows and cells to ensure they update to the newly selected\n            // state\n            this.onCellFocusChanged({\n                rowIndex: cellPosition.rowIndex,\n                column: cellPosition.column,\n                rowPinned: cellPosition.rowPinned,\n                forceBrowserFocus: true,\n                preventScrollOnBrowserFocus: true,\n                api: this.beans.gridApi,\n                columnApi: this.beans.columnApi,\n                context: this.beans.gridOptionsService.context,\n                type: 'mock',\n            });\n        }\n    }\n    stopEditing(cancel = false) {\n        this.getAllRowCtrls().forEach(rowCtrl => {\n            rowCtrl.stopEditing(cancel);\n        });\n    }\n    getAllCellCtrls() {\n        const res = [];\n        const rowCtrls = this.getAllRowCtrls();\n        const rowCtrlsLength = rowCtrls.length;\n        for (let i = 0; i < rowCtrlsLength; i++) {\n            const cellCtrls = rowCtrls[i].getAllCellCtrls();\n            const cellCtrlsLength = cellCtrls.length;\n            for (let j = 0; j < cellCtrlsLength; j++) {\n                res.push(cellCtrls[j]);\n            }\n        }\n        return res;\n    }\n    getAllRowCtrls() {\n        const stickyRowCtrls = (this.stickyRowFeature && this.stickyRowFeature.getStickyRowCtrls()) || [];\n        const res = [...this.topRowCtrls, ...this.bottomRowCtrls, ...stickyRowCtrls];\n        for (const key of Object.keys(this.rowCtrlsByRowIndex)) {\n            res.push(this.rowCtrlsByRowIndex[key]);\n        }\n        return res;\n    }\n    addRenderedRowListener(eventName, rowIndex, callback) {\n        const rowComp = this.rowCtrlsByRowIndex[rowIndex];\n        if (rowComp) {\n            rowComp.addEventListener(eventName, callback);\n        }\n    }\n    flashCells(params = {}) {\n        const { flashDelay, fadeDelay } = params;\n        this.getCellCtrls(params.rowNodes, params.columns)\n            .forEach(cellCtrl => cellCtrl.flashCell({ flashDelay, fadeDelay }));\n    }\n    refreshCells(params = {}) {\n        const refreshCellParams = {\n            forceRefresh: params.force,\n            newData: false,\n            suppressFlash: params.suppressFlash\n        };\n        this.getCellCtrls(params.rowNodes, params.columns)\n            .forEach(cellCtrl => {\n            if (cellCtrl.refreshShouldDestroy()) {\n                const rowCtrl = cellCtrl.getRowCtrl();\n                if (rowCtrl) {\n                    rowCtrl.refreshCell(cellCtrl);\n                }\n            }\n            else {\n                cellCtrl.refreshCell(refreshCellParams);\n            }\n        });\n        this.refreshFullWidthRows(params.rowNodes);\n    }\n    getCellRendererInstances(params) {\n        var _a;\n        const cellRenderers = this.getCellCtrls(params.rowNodes, params.columns)\n            .map(cellCtrl => cellCtrl.getCellRenderer())\n            .filter(renderer => renderer != null);\n        if ((_a = params.columns) === null || _a === void 0 ? void 0 : _a.length) {\n            return cellRenderers;\n        }\n        const fullWidthRenderers = [];\n        const rowIdMap = this.mapRowNodes(params.rowNodes);\n        this.getAllRowCtrls().forEach(rowCtrl => {\n            if (rowIdMap && !this.isRowInMap(rowCtrl.getRowNode(), rowIdMap)) {\n                return;\n            }\n            if (!rowCtrl.isFullWidth()) {\n                return;\n            }\n            const fullWidthRenderer = rowCtrl.getFullWidthCellRenderer();\n            if (fullWidthRenderer) {\n                fullWidthRenderers.push(fullWidthRenderer);\n            }\n        });\n        return [...fullWidthRenderers, ...cellRenderers];\n    }\n    getCellEditorInstances(params) {\n        const res = [];\n        this.getCellCtrls(params.rowNodes, params.columns).forEach(cellCtrl => {\n            const cellEditor = cellCtrl.getCellEditor();\n            if (cellEditor) {\n                res.push(cellEditor);\n            }\n        });\n        return res;\n    }\n    getEditingCells() {\n        const res = [];\n        this.getAllCellCtrls().forEach(cellCtrl => {\n            if (cellCtrl.isEditing()) {\n                const cellPosition = cellCtrl.getCellPosition();\n                res.push(cellPosition);\n            }\n        });\n        return res;\n    }\n    mapRowNodes(rowNodes) {\n        if (!rowNodes) {\n            return;\n        }\n        const res = {\n            top: {},\n            bottom: {},\n            normal: {}\n        };\n        rowNodes.forEach(rowNode => {\n            const id = rowNode.id;\n            if (rowNode.rowPinned === 'top') {\n                res.top[id] = rowNode;\n            }\n            else if (rowNode.rowPinned === 'bottom') {\n                res.bottom[id] = rowNode;\n            }\n            else {\n                res.normal[id] = rowNode;\n            }\n        });\n        return res;\n    }\n    isRowInMap(rowNode, rowIdsMap) {\n        // skip this row if it is missing from the provided list\n        const id = rowNode.id;\n        const floating = rowNode.rowPinned;\n        if (floating === 'bottom') {\n            return rowIdsMap.bottom[id] != null;\n        }\n        if (floating === 'top') {\n            return rowIdsMap.top[id] != null;\n        }\n        return rowIdsMap.normal[id] != null;\n    }\n    // returns CellCtrl's that match the provided rowNodes and columns. eg if one row node\n    // and two columns provided, that identifies 4 cells, so 4 CellCtrl's returned.\n    getCellCtrls(rowNodes, columns) {\n        const rowIdsMap = this.mapRowNodes(rowNodes);\n        const res = [];\n        let colIdsMap;\n        if (exists(columns)) {\n            colIdsMap = {};\n            columns.forEach((colKey) => {\n                const column = this.columnModel.getGridColumn(colKey);\n                if (exists(column)) {\n                    colIdsMap[column.getId()] = true;\n                }\n            });\n        }\n        const processRow = (rowCtrl) => {\n            const rowNode = rowCtrl.getRowNode();\n            // skip this row if it is missing from the provided list\n            if (rowIdsMap != null && !this.isRowInMap(rowNode, rowIdsMap)) {\n                return;\n            }\n            rowCtrl.getAllCellCtrls().forEach(cellCtrl => {\n                const colId = cellCtrl.getColumn().getId();\n                const excludeColFromRefresh = colIdsMap && !colIdsMap[colId];\n                if (excludeColFromRefresh) {\n                    return;\n                }\n                res.push(cellCtrl);\n            });\n        };\n        this.getAllRowCtrls().forEach(row => processRow(row));\n        return res;\n    }\n    destroy() {\n        this.removeAllRowComps();\n        super.destroy();\n    }\n    removeAllRowComps() {\n        const rowIndexesToRemove = Object.keys(this.rowCtrlsByRowIndex);\n        this.removeRowCtrls(rowIndexesToRemove);\n    }\n    recycleRows() {\n        // remove all stub nodes, they can't be reused, as no rowNode id\n        const stubNodeIndexes = [];\n        iterateObject(this.rowCtrlsByRowIndex, (index, rowComp) => {\n            const stubNode = rowComp.getRowNode().id == null;\n            if (stubNode) {\n                stubNodeIndexes.push(index);\n            }\n        });\n        this.removeRowCtrls(stubNodeIndexes);\n        // then clear out rowCompsByIndex, but before that take a copy, but index by id, not rowIndex\n        const ctrlsByIdMap = {};\n        iterateObject(this.rowCtrlsByRowIndex, (index, rowComp) => {\n            const rowNode = rowComp.getRowNode();\n            ctrlsByIdMap[rowNode.id] = rowComp;\n        });\n        this.rowCtrlsByRowIndex = {};\n        return ctrlsByIdMap;\n    }\n    // takes array of row indexes\n    removeRowCtrls(rowsToRemove) {\n        // if no fromIndex then set to -1, which will refresh everything\n        // let realFromIndex = -1;\n        rowsToRemove.forEach(indexToRemove => {\n            const rowCtrl = this.rowCtrlsByRowIndex[indexToRemove];\n            if (rowCtrl) {\n                rowCtrl.destroyFirstPass();\n                rowCtrl.destroySecondPass();\n            }\n            delete this.rowCtrlsByRowIndex[indexToRemove];\n        });\n    }\n    onBodyScroll(e) {\n        if (e.direction !== 'vertical') {\n            return;\n        }\n        this.redrawAfterScroll();\n    }\n    // gets called when rows don't change, but viewport does, so after:\n    // 1) height of grid body changes, ie number of displayed rows has changed\n    // 2) grid scrolled to new position\n    // 3) ensure index visible (which is a scroll)\n    redrawAfterScroll() {\n        let cellFocused;\n        // only try to refocus cells shifting in and out of sticky container\n        // if the browser supports focus ({ preventScroll })\n        if (this.stickyRowFeature && browserSupportsPreventScroll()) {\n            cellFocused = this.getCellToRestoreFocusToAfterRefresh() || undefined;\n        }\n        this.getLockOnRefresh();\n        this.redraw(null, false, true);\n        this.releaseLockOnRefresh();\n        this.dispatchDisplayedRowsChanged(true);\n        if (cellFocused != null) {\n            const newFocusedCell = this.getCellToRestoreFocusToAfterRefresh();\n            if (cellFocused != null && newFocusedCell == null) {\n                this.animationFrameService.flushAllFrames();\n                this.restoreFocusedCell(cellFocused);\n            }\n        }\n    }\n    removeRowCompsNotToDraw(indexesToDraw) {\n        // for speedy lookup, dump into map\n        const indexesToDrawMap = {};\n        indexesToDraw.forEach(index => (indexesToDrawMap[index] = true));\n        const existingIndexes = Object.keys(this.rowCtrlsByRowIndex);\n        const indexesNotToDraw = existingIndexes.filter(index => !indexesToDrawMap[index]);\n        this.removeRowCtrls(indexesNotToDraw);\n    }\n    calculateIndexesToDraw(rowsToRecycle) {\n        // all in all indexes in the viewport\n        let indexesToDraw = createArrayOfNumbers(this.firstRenderedRow, this.lastRenderedRow);\n        const checkRowToDraw = (indexStr, rowComp) => {\n            const index = rowComp.getRowNode().rowIndex;\n            if (index == null) {\n                return;\n            }\n            if (index < this.firstRenderedRow || index > this.lastRenderedRow) {\n                if (this.doNotUnVirtualiseRow(rowComp)) {\n                    indexesToDraw.push(index);\n                }\n            }\n        };\n        // if we are redrawing due to scrolling change, then old rows are in this.rowCompsByIndex\n        iterateObject(this.rowCtrlsByRowIndex, checkRowToDraw);\n        // if we are redrawing due to model update, then old rows are in rowsToRecycle\n        iterateObject(rowsToRecycle, checkRowToDraw);\n        indexesToDraw.sort((a, b) => a - b);\n        indexesToDraw = indexesToDraw.filter(index => {\n            const rowNode = this.paginationProxy.getRow(index);\n            return rowNode && !rowNode.sticky;\n        });\n        return indexesToDraw;\n    }\n    redraw(rowsToRecycle, animate = false, afterScroll = false) {\n        this.rowContainerHeightService.updateOffset();\n        this.workOutFirstAndLastRowsToRender();\n        if (this.stickyRowFeature) {\n            this.stickyRowFeature.checkStickyRows();\n        }\n        // the row can already exist and be in the following:\n        // rowsToRecycle -> if model change, then the index may be different, however row may\n        //                         exist here from previous time (mapped by id).\n        // this.rowCompsByIndex -> if just a scroll, then this will contain what is currently in the viewport\n        // this is all the indexes we want, including those that already exist, so this method\n        // will end up going through each index and drawing only if the row doesn't already exist\n        const indexesToDraw = this.calculateIndexesToDraw(rowsToRecycle);\n        this.removeRowCompsNotToDraw(indexesToDraw);\n        // never animate when doing print layout - as we want to get things ready to print as quickly as possible,\n        // otherwise we risk the printer printing a row that's half faded (half way through fading in)\n        if (this.printLayout) {\n            animate = false;\n        }\n        indexesToDraw.forEach(rowIndex => {\n            this.createOrUpdateRowCtrl(rowIndex, rowsToRecycle, animate, afterScroll);\n        });\n        if (rowsToRecycle) {\n            const useAnimationFrame = afterScroll && !this.gridOptionsService.is('suppressAnimationFrame') && !this.printLayout;\n            if (useAnimationFrame) {\n                this.beans.animationFrameService.addDestroyTask(() => {\n                    this.destroyRowCtrls(rowsToRecycle, animate);\n                    this.updateAllRowCtrls();\n                    this.dispatchDisplayedRowsChanged();\n                });\n            }\n            else {\n                this.destroyRowCtrls(rowsToRecycle, animate);\n            }\n        }\n        this.updateAllRowCtrls();\n    }\n    dispatchDisplayedRowsChanged(afterScroll = false) {\n        const event = { type: Events.EVENT_DISPLAYED_ROWS_CHANGED, afterScroll };\n        this.eventService.dispatchEvent(event);\n    }\n    onDisplayedColumnsChanged() {\n        const pinningLeft = this.columnModel.isPinningLeft();\n        const pinningRight = this.columnModel.isPinningRight();\n        const atLeastOneChanged = this.pinningLeft !== pinningLeft || pinningRight !== this.pinningRight;\n        if (atLeastOneChanged) {\n            this.pinningLeft = pinningLeft;\n            this.pinningRight = pinningRight;\n            if (this.embedFullWidthRows) {\n                this.redrawFullWidthEmbeddedRows();\n            }\n        }\n    }\n    // when embedding, what gets showed in each section depends on what is pinned. eg if embedding group expand / collapse,\n    // then it should go into the pinned left area if pinning left, or the center area if not pinning.\n    redrawFullWidthEmbeddedRows() {\n        // if either of the pinned panels has shown / hidden, then need to redraw the fullWidth bits when\n        // embedded, as what appears in each section depends on whether we are pinned or not\n        const rowsToRemove = [];\n        this.getFullWidthRowCtrls().forEach(fullWidthCtrl => {\n            const rowIndex = fullWidthCtrl.getRowNode().rowIndex;\n            rowsToRemove.push(rowIndex.toString());\n        });\n        this.refreshFloatingRowComps();\n        this.removeRowCtrls(rowsToRemove);\n        this.redrawAfterScroll();\n    }\n    getFullWidthRowCtrls(rowNodes) {\n        const rowNodesMap = this.mapRowNodes(rowNodes);\n        return this.getAllRowCtrls().filter((rowCtrl) => {\n            // include just full width\n            if (!rowCtrl.isFullWidth()) {\n                return false;\n            }\n            // if Row Nodes provided, we exclude where Row Node is missing\n            const rowNode = rowCtrl.getRowNode();\n            if (rowNodesMap != null && !this.isRowInMap(rowNode, rowNodesMap)) {\n                return false;\n            }\n            return true;\n        });\n    }\n    refreshFullWidthRow(rowNode) {\n        this.refreshFullWidthRows([rowNode]);\n    }\n    refreshFullWidthRows(rowNodes) {\n        const fullWidthCtrls = this.getFullWidthRowCtrls(rowNodes);\n        let redraw = false;\n        const indicesToForce = [];\n        fullWidthCtrls.forEach(fullWidthCtrl => {\n            const refreshed = fullWidthCtrl.refreshFullWidth();\n            if (refreshed) {\n                return;\n            }\n            const node = fullWidthCtrl.getRowNode();\n            if (node.sticky) {\n                this.stickyRowFeature.refreshStickyNode(node);\n            }\n            else {\n                indicesToForce.push(node.rowIndex);\n            }\n            redraw = true;\n        });\n        if (indicesToForce.length > 0) {\n            this.removeRowCtrls(indicesToForce);\n        }\n        if (redraw) {\n            this.redrawAfterScroll();\n        }\n    }\n    createOrUpdateRowCtrl(rowIndex, rowsToRecycle, animate, afterScroll) {\n        let rowNode;\n        let rowCtrl = this.rowCtrlsByRowIndex[rowIndex];\n        // if no row comp, see if we can get it from the previous rowComps\n        if (!rowCtrl) {\n            rowNode = this.paginationProxy.getRow(rowIndex);\n            if (exists(rowNode) && exists(rowsToRecycle) && rowsToRecycle[rowNode.id] && rowNode.alreadyRendered) {\n                rowCtrl = rowsToRecycle[rowNode.id];\n                rowsToRecycle[rowNode.id] = null;\n            }\n        }\n        const creatingNewRowCtrl = !rowCtrl;\n        if (creatingNewRowCtrl) {\n            // create a new one\n            if (!rowNode) {\n                rowNode = this.paginationProxy.getRow(rowIndex);\n            }\n            if (exists(rowNode)) {\n                rowCtrl = this.createRowCon(rowNode, animate, afterScroll);\n            }\n            else {\n                // this should never happen - if somehow we are trying to create\n                // a row for a rowNode that does not exist.\n                return;\n            }\n        }\n        if (rowNode) {\n            // set node as 'alreadyRendered' to ensure we only recycle rowComps that have been rendered, this ensures\n            // we don't reuse rowComps that have been removed and then re-added in the same batch transaction.\n            rowNode.alreadyRendered = true;\n        }\n        this.rowCtrlsByRowIndex[rowIndex] = rowCtrl;\n        return rowCtrl;\n    }\n    destroyRowCtrls(rowCtrlsMap, animate) {\n        const executeInAWhileFuncs = [];\n        iterateObject(rowCtrlsMap, (nodeId, rowCtrl) => {\n            // if row was used, then it's null\n            if (!rowCtrl) {\n                return;\n            }\n            if (this.cachedRowCtrls && rowCtrl.isCacheable()) {\n                this.cachedRowCtrls.addRow(rowCtrl);\n                return;\n            }\n            rowCtrl.destroyFirstPass();\n            if (animate) {\n                this.zombieRowCtrls[rowCtrl.getInstanceId()] = rowCtrl;\n                executeInAWhileFuncs.push(() => {\n                    rowCtrl.destroySecondPass();\n                    delete this.zombieRowCtrls[rowCtrl.getInstanceId()];\n                });\n            }\n            else {\n                rowCtrl.destroySecondPass();\n            }\n        });\n        if (animate) {\n            // this ensures we fire displayedRowsChanged AFTER all the 'executeInAWhileFuncs' get\n            // executed, as we added it to the end of the list.\n            executeInAWhileFuncs.push(() => {\n                this.updateAllRowCtrls();\n                this.dispatchDisplayedRowsChanged();\n            });\n            executeInAWhile(executeInAWhileFuncs);\n        }\n    }\n    getRowBuffer() {\n        let rowBuffer = this.gridOptionsService.getNum('rowBuffer');\n        if (typeof rowBuffer === 'number') {\n            if (rowBuffer < 0) {\n                doOnce(() => console.warn(`AG Grid: rowBuffer should not be negative`), 'warn rowBuffer negative');\n                rowBuffer = 0;\n                this.gridOptionsService.set('rowBuffer', 0);\n            }\n        }\n        else {\n            rowBuffer = 10;\n        }\n        return rowBuffer;\n    }\n    getRowBufferInPixels() {\n        const rowsToBuffer = this.getRowBuffer();\n        const defaultRowHeight = this.gridOptionsService.getRowHeightAsNumber();\n        return rowsToBuffer * defaultRowHeight;\n    }\n    workOutFirstAndLastRowsToRender() {\n        let newFirst;\n        let newLast;\n        if (!this.paginationProxy.isRowsToRender()) {\n            newFirst = 0;\n            newLast = -1; // setting to -1 means nothing in range\n        }\n        else if (this.printLayout) {\n            newFirst = this.paginationProxy.getPageFirstRow();\n            newLast = this.paginationProxy.getPageLastRow();\n        }\n        else {\n            const bufferPixels = this.getRowBufferInPixels();\n            const gridBodyCtrl = this.ctrlsService.getGridBodyCtrl();\n            const suppressRowVirtualisation = this.gridOptionsService.is('suppressRowVirtualisation');\n            let rowHeightsChanged = false;\n            let firstPixel;\n            let lastPixel;\n            do {\n                const paginationOffset = this.paginationProxy.getPixelOffset();\n                const { pageFirstPixel, pageLastPixel } = this.paginationProxy.getCurrentPagePixelRange();\n                const divStretchOffset = this.rowContainerHeightService.getDivStretchOffset();\n                const bodyVRange = gridBodyCtrl.getScrollFeature().getVScrollPosition();\n                const bodyTopPixel = bodyVRange.top;\n                const bodyBottomPixel = bodyVRange.bottom;\n                if (suppressRowVirtualisation) {\n                    firstPixel = pageFirstPixel + divStretchOffset;\n                    lastPixel = pageLastPixel + divStretchOffset;\n                }\n                else {\n                    firstPixel = Math.max(bodyTopPixel + paginationOffset - bufferPixels, pageFirstPixel) + divStretchOffset;\n                    lastPixel = Math.min(bodyBottomPixel + paginationOffset + bufferPixels, pageLastPixel) + divStretchOffset;\n                }\n                this.firstVisibleVPixel = Math.max(bodyTopPixel + paginationOffset, pageFirstPixel) + divStretchOffset;\n                // if the rows we are about to display get their heights changed, then that upsets the calcs from above.\n                rowHeightsChanged = this.ensureAllRowsInRangeHaveHeightsCalculated(firstPixel, lastPixel);\n            } while (rowHeightsChanged);\n            let firstRowIndex = this.paginationProxy.getRowIndexAtPixel(firstPixel);\n            let lastRowIndex = this.paginationProxy.getRowIndexAtPixel(lastPixel);\n            const pageFirstRow = this.paginationProxy.getPageFirstRow();\n            const pageLastRow = this.paginationProxy.getPageLastRow();\n            // adjust, in case buffer extended actual size\n            if (firstRowIndex < pageFirstRow) {\n                firstRowIndex = pageFirstRow;\n            }\n            if (lastRowIndex > pageLastRow) {\n                lastRowIndex = pageLastRow;\n            }\n            newFirst = firstRowIndex;\n            newLast = lastRowIndex;\n        }\n        // sometimes user doesn't set CSS right and ends up with grid with no height and grid ends up\n        // trying to render all the rows, eg 10,000+ rows. this will kill the browser. so instead of\n        // killing the browser, we limit the number of rows. just in case some use case we didn't think\n        // of, we also have a property to not do this operation.\n        const rowLayoutNormal = this.gridOptionsService.isDomLayout('normal');\n        const suppressRowCountRestriction = this.gridOptionsService.is('suppressMaxRenderedRowRestriction');\n        const rowBufferMaxSize = Math.max(this.getRowBuffer(), 500);\n        if (rowLayoutNormal && !suppressRowCountRestriction) {\n            if (newLast - newFirst > rowBufferMaxSize) {\n                newLast = newFirst + rowBufferMaxSize;\n            }\n        }\n        const firstDiffers = newFirst !== this.firstRenderedRow;\n        const lastDiffers = newLast !== this.lastRenderedRow;\n        if (firstDiffers || lastDiffers) {\n            this.firstRenderedRow = newFirst;\n            this.lastRenderedRow = newLast;\n            const event = {\n                type: Events.EVENT_VIEWPORT_CHANGED,\n                firstRow: newFirst,\n                lastRow: newLast\n            };\n            this.eventService.dispatchEvent(event);\n        }\n    }\n    /**\n     * This event will only be fired once, and is queued until after the browser next renders.\n     * This allows us to fire an event during the start of the render cycle, when we first see data being rendered\n     * but not execute the event until all of the data has finished being rendered to the dom.\n     */\n    dispatchFirstDataRenderedEvent() {\n        if (this.dataFirstRenderedFired) {\n            return;\n        }\n        this.dataFirstRenderedFired = true;\n        const event = {\n            type: Events.EVENT_FIRST_DATA_RENDERED,\n            firstRow: this.firstRenderedRow,\n            lastRow: this.lastRenderedRow,\n        };\n        // See AG-7018\n        window.requestAnimationFrame(() => {\n            this.beans.eventService.dispatchEvent(event);\n        });\n    }\n    ensureAllRowsInRangeHaveHeightsCalculated(topPixel, bottomPixel) {\n        // ensureRowHeightsVisible only works with CSRM, as it's the only row model that allows lazy row height calcs.\n        // all the other row models just hard code so the method just returns back false\n        const res = this.paginationProxy.ensureRowHeightsValid(topPixel, bottomPixel, -1, -1);\n        if (res) {\n            this.updateContainerHeights();\n        }\n        return res;\n    }\n    getFirstVisibleVerticalPixel() {\n        return this.firstVisibleVPixel;\n    }\n    getFirstVirtualRenderedRow() {\n        return this.firstRenderedRow;\n    }\n    getLastVirtualRenderedRow() {\n        return this.lastRenderedRow;\n    }\n    // check that none of the rows to remove are editing or focused as:\n    // a) if editing, we want to keep them, otherwise the user will loose the context of the edit,\n    //    eg user starts editing, enters some text, then scrolls down and then up, next time row rendered\n    //    the edit is reset - so we want to keep it rendered.\n    // b) if focused, we want ot keep keyboard focus, so if user ctrl+c, it goes to clipboard,\n    //    otherwise the user can range select and drag (with focus cell going out of the viewport)\n    //    and then ctrl+c, nothing will happen if cell is removed from dom.\n    // c) if detail record of master detail, as users complained that the context of detail rows\n    //    was getting lost when detail row out of view. eg user expands to show detail row,\n    //    then manipulates the detail panel (eg sorts the detail grid), then context is lost\n    //    after detail panel is scrolled out of / into view.\n    doNotUnVirtualiseRow(rowComp) {\n        const REMOVE_ROW = false;\n        const KEEP_ROW = true;\n        const rowNode = rowComp.getRowNode();\n        const rowHasFocus = this.focusService.isRowNodeFocused(rowNode);\n        const rowIsEditing = rowComp.isEditing();\n        const rowIsDetail = rowNode.detail;\n        const mightWantToKeepRow = rowHasFocus || rowIsEditing || rowIsDetail;\n        // if we deffo don't want to keep it,\n        if (!mightWantToKeepRow) {\n            return REMOVE_ROW;\n        }\n        // editing row, only remove if it is no longer rendered, eg filtered out or new data set.\n        // the reason we want to keep is if user is scrolling up and down, we don't want to loose\n        // the context of the editing in process.\n        const rowNodePresent = this.paginationProxy.isRowPresent(rowNode);\n        return rowNodePresent ? KEEP_ROW : REMOVE_ROW;\n    }\n    createRowCon(rowNode, animate, afterScroll) {\n        const rowCtrlFromCache = this.cachedRowCtrls ? this.cachedRowCtrls.getRow(rowNode) : null;\n        if (rowCtrlFromCache) {\n            return rowCtrlFromCache;\n        }\n        // we don't use animations frames for printing, so the user can put the grid into print mode\n        // and immediately print - otherwise the user would have to wait for the rows to draw in the background\n        // (via the animation frames) which is awkward to do from code.\n        // we only do the animation frames after scrolling, as this is where we want the smooth user experience.\n        // having animation frames for other times makes the grid look 'jumpy'.\n        const suppressAnimationFrame = this.gridOptionsService.is('suppressAnimationFrame');\n        const useAnimationFrameForCreate = afterScroll && !suppressAnimationFrame && !this.printLayout;\n        const res = new RowCtrl(rowNode, this.beans, animate, useAnimationFrameForCreate, this.printLayout);\n        return res;\n    }\n    getRenderedNodes() {\n        const renderedRows = this.rowCtrlsByRowIndex;\n        return Object.keys(renderedRows).map(key => renderedRows[key].getRowNode());\n    }\n    getRowByPosition(rowPosition) {\n        let rowCtrl;\n        const { rowIndex } = rowPosition;\n        switch (rowPosition.rowPinned) {\n            case 'top':\n                rowCtrl = this.topRowCtrls[rowIndex];\n                break;\n            case 'bottom':\n                rowCtrl = this.bottomRowCtrls[rowIndex];\n                break;\n            default:\n                rowCtrl = this.rowCtrlsByRowIndex[rowIndex];\n                if (!rowCtrl) {\n                    rowCtrl = this.getStickyTopRowCtrls().find(ctrl => ctrl.getRowNode().rowIndex === rowIndex) || null;\n                }\n                break;\n        }\n        return rowCtrl;\n    }\n    getRowNode(gridRow) {\n        switch (gridRow.rowPinned) {\n            case 'top':\n                return this.pinnedRowModel.getPinnedTopRowData()[gridRow.rowIndex];\n            case 'bottom':\n                return this.pinnedRowModel.getPinnedBottomRowData()[gridRow.rowIndex];\n            default:\n                return this.rowModel.getRow(gridRow.rowIndex);\n        }\n    }\n    // returns true if any row between startIndex and endIndex is rendered. used by\n    // SSRM or IRM, as they don't want to purge visible blocks from cache.\n    isRangeInRenderedViewport(startIndex, endIndex) {\n        // parent closed means the parent node is not expanded, thus these blocks are not visible\n        const parentClosed = startIndex == null || endIndex == null;\n        if (parentClosed) {\n            return false;\n        }\n        const blockAfterViewport = startIndex > this.lastRenderedRow;\n        const blockBeforeViewport = endIndex < this.firstRenderedRow;\n        const blockInsideViewport = !blockBeforeViewport && !blockAfterViewport;\n        return blockInsideViewport;\n    }\n};\n__decorate$15([\n    Autowired(\"animationFrameService\")\n], RowRenderer.prototype, \"animationFrameService\", void 0);\n__decorate$15([\n    Autowired(\"paginationProxy\")\n], RowRenderer.prototype, \"paginationProxy\", void 0);\n__decorate$15([\n    Autowired(\"columnModel\")\n], RowRenderer.prototype, \"columnModel\", void 0);\n__decorate$15([\n    Autowired(\"pinnedRowModel\")\n], RowRenderer.prototype, \"pinnedRowModel\", void 0);\n__decorate$15([\n    Autowired(\"rowModel\")\n], RowRenderer.prototype, \"rowModel\", void 0);\n__decorate$15([\n    Autowired(\"focusService\")\n], RowRenderer.prototype, \"focusService\", void 0);\n__decorate$15([\n    Autowired(\"beans\")\n], RowRenderer.prototype, \"beans\", void 0);\n__decorate$15([\n    Autowired(\"rowContainerHeightService\")\n], RowRenderer.prototype, \"rowContainerHeightService\", void 0);\n__decorate$15([\n    Autowired(\"ctrlsService\")\n], RowRenderer.prototype, \"ctrlsService\", void 0);\n__decorate$15([\n    PostConstruct\n], RowRenderer.prototype, \"postConstruct\", null);\nRowRenderer = __decorate$15([\n    Bean(\"rowRenderer\")\n], RowRenderer);\nclass RowCtrlCache {\n    constructor(maxCount) {\n        // map for fast access\n        this.entriesMap = {};\n        // list for keeping order\n        this.entriesList = [];\n        this.maxCount = maxCount;\n    }\n    addRow(rowCtrl) {\n        this.entriesMap[rowCtrl.getRowNode().id] = rowCtrl;\n        this.entriesList.push(rowCtrl);\n        rowCtrl.setCached(true);\n        if (this.entriesList.length > this.maxCount) {\n            const rowCtrlToDestroy = this.entriesList[0];\n            rowCtrlToDestroy.destroyFirstPass();\n            rowCtrlToDestroy.destroySecondPass();\n            this.removeFromCache(rowCtrlToDestroy);\n        }\n    }\n    getRow(rowNode) {\n        if (rowNode == null || rowNode.id == null) {\n            return null;\n        }\n        const res = this.entriesMap[rowNode.id];\n        if (!res) {\n            return null;\n        }\n        this.removeFromCache(res);\n        res.setCached(false);\n        // this can happen if user reloads data, and a new RowNode is reusing\n        // the same ID as the old one\n        const rowNodeMismatch = res.getRowNode() != rowNode;\n        return rowNodeMismatch ? null : res;\n    }\n    removeFromCache(rowCtrl) {\n        const rowNodeId = rowCtrl.getRowNode().id;\n        delete this.entriesMap[rowNodeId];\n        removeFromArray(this.entriesList, rowCtrl);\n    }\n    getEntries() {\n        return this.entriesList;\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$14 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ValueFormatterService = class ValueFormatterService extends BeanStub {\n    formatValue(column, node, value, suppliedFormatter, useFormatterFromColumn = true) {\n        let result = null;\n        let formatter;\n        const colDef = column.getColDef();\n        if (suppliedFormatter) {\n            // use supplied formatter if provided, e.g. set filter items can have their own value formatters\n            formatter = suppliedFormatter;\n        }\n        else if (useFormatterFromColumn) {\n            formatter = colDef.valueFormatter;\n        }\n        if (formatter) {\n            const params = {\n                value,\n                node,\n                data: node ? node.data : null,\n                colDef,\n                column,\n                api: this.gridOptionsService.api,\n                columnApi: this.gridOptionsService.columnApi,\n                context: this.gridOptionsService.context\n            };\n            if (typeof formatter === 'function') {\n                result = formatter(params);\n            }\n            else {\n                result = this.expressionService.evaluate(formatter, params);\n            }\n        }\n        else if (colDef.refData) {\n            return colDef.refData[value] || '';\n        }\n        // if we don't do this, then arrays get displayed as 1,2,3, but we want 1, 2, 3 (i.e. with spaces)\n        if (result == null && Array.isArray(value)) {\n            result = value.join(', ');\n        }\n        return result;\n    }\n};\n__decorate$14([\n    Autowired('expressionService')\n], ValueFormatterService.prototype, \"expressionService\", void 0);\nValueFormatterService = __decorate$14([\n    Bean('valueFormatterService')\n], ValueFormatterService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$13 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet PinnedRowModel = class PinnedRowModel extends BeanStub {\n    init() {\n        this.setPinnedTopRowData(this.gridOptionsService.get('pinnedTopRowData'));\n        this.setPinnedBottomRowData(this.gridOptionsService.get('pinnedBottomRowData'));\n    }\n    isEmpty(floating) {\n        const rows = floating === 'top' ? this.pinnedTopRows : this.pinnedBottomRows;\n        return missingOrEmpty(rows);\n    }\n    isRowsToRender(floating) {\n        return !this.isEmpty(floating);\n    }\n    getRowAtPixel(pixel, floating) {\n        const rows = floating === 'top' ? this.pinnedTopRows : this.pinnedBottomRows;\n        if (missingOrEmpty(rows)) {\n            return 0; // this should never happen, just in case, 0 is graceful failure\n        }\n        for (let i = 0; i < rows.length; i++) {\n            const rowNode = rows[i];\n            const rowTopPixel = rowNode.rowTop + rowNode.rowHeight - 1;\n            // only need to range check against the top pixel, as we are going through the list\n            // in order, first row to hit the pixel wins\n            if (rowTopPixel >= pixel) {\n                return i;\n            }\n        }\n        return rows.length - 1;\n    }\n    setPinnedTopRowData(rowData) {\n        this.pinnedTopRows = this.createNodesFromData(rowData, true);\n        const event = {\n            type: Events.EVENT_PINNED_ROW_DATA_CHANGED\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    setPinnedBottomRowData(rowData) {\n        this.pinnedBottomRows = this.createNodesFromData(rowData, false);\n        const event = {\n            type: Events.EVENT_PINNED_ROW_DATA_CHANGED\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    createNodesFromData(allData, isTop) {\n        const rowNodes = [];\n        if (allData) {\n            let nextRowTop = 0;\n            allData.forEach((dataItem, index) => {\n                const rowNode = new RowNode(this.beans);\n                rowNode.data = dataItem;\n                const idPrefix = isTop ? RowNode.ID_PREFIX_TOP_PINNED : RowNode.ID_PREFIX_BOTTOM_PINNED;\n                rowNode.id = idPrefix + index;\n                rowNode.rowPinned = isTop ? 'top' : 'bottom';\n                rowNode.setRowTop(nextRowTop);\n                rowNode.setRowHeight(this.gridOptionsService.getRowHeightForNode(rowNode).height);\n                rowNode.setRowIndex(index);\n                nextRowTop += rowNode.rowHeight;\n                rowNodes.push(rowNode);\n            });\n        }\n        return rowNodes;\n    }\n    getPinnedTopRowData() {\n        return this.pinnedTopRows;\n    }\n    getPinnedBottomRowData() {\n        return this.pinnedBottomRows;\n    }\n    getPinnedTopTotalHeight() {\n        return this.getTotalHeight(this.pinnedTopRows);\n    }\n    getPinnedTopRowCount() {\n        return this.pinnedTopRows ? this.pinnedTopRows.length : 0;\n    }\n    getPinnedBottomRowCount() {\n        return this.pinnedBottomRows ? this.pinnedBottomRows.length : 0;\n    }\n    getPinnedTopRow(index) {\n        return this.pinnedTopRows[index];\n    }\n    getPinnedBottomRow(index) {\n        return this.pinnedBottomRows[index];\n    }\n    forEachPinnedTopRow(callback) {\n        if (missingOrEmpty(this.pinnedTopRows)) {\n            return;\n        }\n        this.pinnedTopRows.forEach(callback);\n    }\n    forEachPinnedBottomRow(callback) {\n        if (missingOrEmpty(this.pinnedBottomRows)) {\n            return;\n        }\n        this.pinnedBottomRows.forEach(callback);\n    }\n    getPinnedBottomTotalHeight() {\n        return this.getTotalHeight(this.pinnedBottomRows);\n    }\n    getTotalHeight(rowNodes) {\n        if (!rowNodes || rowNodes.length === 0) {\n            return 0;\n        }\n        const lastNode = last(rowNodes);\n        return lastNode.rowTop + lastNode.rowHeight;\n    }\n};\n__decorate$13([\n    Autowired('beans')\n], PinnedRowModel.prototype, \"beans\", void 0);\n__decorate$13([\n    PostConstruct\n], PinnedRowModel.prototype, \"init\", null);\nPinnedRowModel = __decorate$13([\n    Bean('pinnedRowModel')\n], PinnedRowModel);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar ServerSideTransactionResultStatus;\n(function (ServerSideTransactionResultStatus) {\n    /** Transaction was successfully applied */\n    ServerSideTransactionResultStatus[\"Applied\"] = \"Applied\";\n    /**\n     * Store was not found, transaction not applied.\n     * Either invalid route, or the parent row has not yet been expanded.\n     */\n    ServerSideTransactionResultStatus[\"StoreNotFound\"] = \"StoreNotFound\";\n    /**\n     * Store is loading, transaction not applied.\n     */\n    ServerSideTransactionResultStatus[\"StoreLoading\"] = \"StoreLoading\";\n    /**\n     * Store is loading (as max loads exceeded), transaction not applied.\n     */\n    ServerSideTransactionResultStatus[\"StoreWaitingToLoad\"] = \"StoreWaitingToLoad\";\n    /**\n     * Store load attempt failed, transaction not applied.\n     */\n    ServerSideTransactionResultStatus[\"StoreLoadingFailed\"] = \"StoreLoadingFailed\";\n    /**\n     * Store is type Partial, which doesn't accept transactions\n     */\n    ServerSideTransactionResultStatus[\"StoreWrongType\"] = \"StoreWrongType\";\n    /**\n     * Transaction was cancelled, due to grid.\n     * Callback isApplyServerSideTransaction() returning false\n     */\n    ServerSideTransactionResultStatus[\"Cancelled\"] = \"Cancelled\";\n})(ServerSideTransactionResultStatus || (ServerSideTransactionResultStatus = {}));\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n// when doing transactions, or change detection, and grouping is present\n// in the data, there is no need for the ClientSideRowModel to update each\n// group after an update, ony parts that were impacted by the change.\n// this class keeps track of all groups that were impacted by a transaction.\n// the the different CSRM operations (filter, sort etc) use the forEach method\n// to visit each group that was changed.\nclass ChangedPath {\n    constructor(keepingColumns, rootNode) {\n        // whether changed path is active of not. it is active when a) doing\n        // a transaction update or b) doing change detection. if we are doing\n        // a CSRM refresh for other reasons (after sort or filter, or user calling\n        // setRowData() without delta mode) then we are not active. we are also\n        // marked as not active if secondary columns change in pivot (as this impacts\n        // aggregations)\n        this.active = true;\n        // for each node in the change path, we also store which columns need\n        // to be re-aggregated.\n        this.nodeIdsToColumns = {};\n        // for quick lookup, all items in the change path are mapped by nodeId\n        this.mapToItems = {};\n        this.keepingColumns = keepingColumns;\n        this.pathRoot = {\n            rowNode: rootNode,\n            children: null\n        };\n        this.mapToItems[rootNode.id] = this.pathRoot;\n    }\n    // can be set inactive by:\n    // a) ClientSideRowModel, if no transactions or\n    // b) PivotService, if secondary columns changed\n    setInactive() {\n        this.active = false;\n    }\n    isActive() {\n        return this.active;\n    }\n    depthFirstSearchChangedPath(pathItem, callback) {\n        if (pathItem.children) {\n            for (let i = 0; i < pathItem.children.length; i++) {\n                this.depthFirstSearchChangedPath(pathItem.children[i], callback);\n            }\n        }\n        callback(pathItem.rowNode);\n    }\n    depthFirstSearchEverything(rowNode, callback, traverseEverything) {\n        if (rowNode.childrenAfterGroup) {\n            for (let i = 0; i < rowNode.childrenAfterGroup.length; i++) {\n                const childNode = rowNode.childrenAfterGroup[i];\n                if (childNode.childrenAfterGroup) {\n                    this.depthFirstSearchEverything(rowNode.childrenAfterGroup[i], callback, traverseEverything);\n                }\n                else if (traverseEverything) {\n                    callback(childNode);\n                }\n            }\n        }\n        callback(rowNode);\n    }\n    // traverseLeafNodes -> used when NOT doing changed path, ie traversing everything. the callback\n    // will be called for child nodes in addition to parent nodes.\n    forEachChangedNodeDepthFirst(callback, traverseLeafNodes = false, includeUnchangedNodes = false) {\n        if (this.active && !includeUnchangedNodes) {\n            // if we are active, then use the change path to callback\n            // only for updated groups\n            this.depthFirstSearchChangedPath(this.pathRoot, callback);\n        }\n        else {\n            // we are not active, so callback for everything, walk the entire path\n            this.depthFirstSearchEverything(this.pathRoot.rowNode, callback, traverseLeafNodes);\n        }\n    }\n    executeFromRootNode(callback) {\n        callback(this.pathRoot.rowNode);\n    }\n    createPathItems(rowNode) {\n        let pointer = rowNode;\n        let newEntryCount = 0;\n        while (!this.mapToItems[pointer.id]) {\n            const newEntry = {\n                rowNode: pointer,\n                children: null\n            };\n            this.mapToItems[pointer.id] = newEntry;\n            newEntryCount++;\n            pointer = pointer.parent;\n        }\n        return newEntryCount;\n    }\n    populateColumnsMap(rowNode, columns) {\n        if (!this.keepingColumns || !columns) {\n            return;\n        }\n        let pointer = rowNode;\n        while (pointer) {\n            // if columns, add the columns in all the way to parent, merging\n            // in any other columns that might be there already\n            if (!this.nodeIdsToColumns[pointer.id]) {\n                this.nodeIdsToColumns[pointer.id] = {};\n            }\n            columns.forEach(col => this.nodeIdsToColumns[pointer.id][col.getId()] = true);\n            pointer = pointer.parent;\n        }\n    }\n    linkPathItems(rowNode, newEntryCount) {\n        let pointer = rowNode;\n        for (let i = 0; i < newEntryCount; i++) {\n            const thisItem = this.mapToItems[pointer.id];\n            const parentItem = this.mapToItems[pointer.parent.id];\n            if (!parentItem.children) {\n                parentItem.children = [];\n            }\n            parentItem.children.push(thisItem);\n            pointer = pointer.parent;\n        }\n    }\n    // called by\n    // 1) change detection (provides cols) and\n    // 2) groupStage if doing transaction update (doesn't provide cols)\n    addParentNode(rowNode, columns) {\n        if (!rowNode || rowNode.isRowPinned()) {\n            return;\n        }\n        // we cannot do  both steps below in the same loop as\n        // the second loop has a dependency on the first loop.\n        // ie the hierarchy cannot be stitched up yet because\n        // we don't have it built yet\n        // create the new PathItem objects.\n        const newEntryCount = this.createPathItems(rowNode);\n        // link in the node items\n        this.linkPathItems(rowNode, newEntryCount);\n        // update columns\n        this.populateColumnsMap(rowNode, columns);\n    }\n    canSkip(rowNode) {\n        return this.active && !this.mapToItems[rowNode.id];\n    }\n    getValueColumnsForNode(rowNode, valueColumns) {\n        if (!this.keepingColumns) {\n            return valueColumns;\n        }\n        const colsForThisNode = this.nodeIdsToColumns[rowNode.id];\n        const result = valueColumns.filter(col => colsForThisNode[col.getId()]);\n        return result;\n    }\n    getNotValueColumnsForNode(rowNode, valueColumns) {\n        if (!this.keepingColumns) {\n            return null;\n        }\n        const colsForThisNode = this.nodeIdsToColumns[rowNode.id];\n        const result = valueColumns.filter(col => !colsForThisNode[col.getId()]);\n        return result;\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass RowNodeBlock extends BeanStub {\n    constructor(id) {\n        super();\n        this.state = RowNodeBlock.STATE_WAITING_TO_LOAD;\n        this.version = 0;\n        this.id = id;\n    }\n    getId() {\n        return this.id;\n    }\n    load() {\n        this.state = RowNodeBlock.STATE_LOADING;\n        this.loadFromDatasource();\n    }\n    getVersion() {\n        return this.version;\n    }\n    setStateWaitingToLoad() {\n        // in case any current loads in progress, this will have their results ignored\n        this.version++;\n        this.state = RowNodeBlock.STATE_WAITING_TO_LOAD;\n    }\n    getState() {\n        return this.state;\n    }\n    pageLoadFailed(version) {\n        const requestMostRecentAndLive = this.isRequestMostRecentAndLive(version);\n        if (requestMostRecentAndLive) {\n            this.state = RowNodeBlock.STATE_FAILED;\n            this.processServerFail();\n        }\n        this.dispatchLoadCompleted(false);\n    }\n    success(version, params) {\n        this.successCommon(version, params);\n    }\n    pageLoaded(version, rows, lastRow) {\n        this.successCommon(version, { rowData: rows, rowCount: lastRow });\n    }\n    isRequestMostRecentAndLive(version) {\n        // thisIsMostRecentRequest - if block was refreshed, then another request\n        // could of been sent after this one.\n        const thisIsMostRecentRequest = version === this.version;\n        // weAreNotDestroyed - if InfiniteStore is purged, then blocks are destroyed\n        // and new blocks created. so data loads of old blocks are discarded.\n        const weAreNotDestroyed = this.isAlive();\n        return thisIsMostRecentRequest && weAreNotDestroyed;\n    }\n    successCommon(version, params) {\n        // need to dispatch load complete before processing the data, as PaginationComp checks\n        // RowNodeBlockLoader to see if it is still loading, so the RowNodeBlockLoader needs to\n        // be updated first (via LoadComplete event) before PaginationComp updates (via processServerResult method)\n        this.dispatchLoadCompleted();\n        const requestMostRecentAndLive = this.isRequestMostRecentAndLive(version);\n        if (requestMostRecentAndLive) {\n            this.state = RowNodeBlock.STATE_LOADED;\n            this.processServerResult(params);\n        }\n    }\n    dispatchLoadCompleted(success = true) {\n        // we fire event regardless of processing data or now, as we want\n        // the concurrentLoadRequests count to be reduced in BlockLoader\n        const event = {\n            type: RowNodeBlock.EVENT_LOAD_COMPLETE,\n            success: success,\n            block: this\n        };\n        this.dispatchEvent(event);\n    }\n}\nRowNodeBlock.EVENT_LOAD_COMPLETE = 'loadComplete';\nRowNodeBlock.STATE_WAITING_TO_LOAD = 'needsLoading';\nRowNodeBlock.STATE_LOADING = 'loading';\nRowNodeBlock.STATE_LOADED = 'loaded';\nRowNodeBlock.STATE_FAILED = 'failed';\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$12 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param$7 = (undefined && undefined.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar RowNodeBlockLoader_1;\nlet RowNodeBlockLoader = RowNodeBlockLoader_1 = class RowNodeBlockLoader extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.activeBlockLoadsCount = 0;\n        this.blocks = [];\n        this.active = true;\n    }\n    postConstruct() {\n        this.maxConcurrentRequests = this.getMaxConcurrentDatasourceRequests();\n        const blockLoadDebounceMillis = this.gridOptionsService.getNum('blockLoadDebounceMillis');\n        if (blockLoadDebounceMillis && blockLoadDebounceMillis > 0) {\n            this.checkBlockToLoadDebounce = _.debounce(this.performCheckBlocksToLoad.bind(this), blockLoadDebounceMillis);\n        }\n    }\n    setBeans(loggerFactory) {\n        this.logger = loggerFactory.create('RowNodeBlockLoader');\n    }\n    getMaxConcurrentDatasourceRequests() {\n        const res = this.gridOptionsService.getNum('maxConcurrentDatasourceRequests');\n        if (res == null) {\n            return 2;\n        } // 2 is the default\n        if (res <= 0) {\n            return;\n        } // negative number, eg -1, means no max restriction\n        return res;\n    }\n    addBlock(block) {\n        this.blocks.push(block);\n        // note that we do not remove this listener when removing the block. this is because the\n        // cache can get destroyed (and containing blocks) when a block is loading. however the loading block\n        // is still counted as an active loading block and we must decrement activeBlockLoadsCount when it finishes.\n        block.addEventListener(RowNodeBlock.EVENT_LOAD_COMPLETE, this.loadComplete.bind(this));\n        this.checkBlockToLoad();\n    }\n    removeBlock(block) {\n        _.removeFromArray(this.blocks, block);\n    }\n    destroy() {\n        super.destroy();\n        this.active = false;\n    }\n    loadComplete() {\n        this.activeBlockLoadsCount--;\n        this.checkBlockToLoad();\n        this.dispatchEvent({ type: RowNodeBlockLoader_1.BLOCK_LOADED_EVENT });\n        if (this.activeBlockLoadsCount == 0) {\n            this.dispatchEvent({ type: RowNodeBlockLoader_1.BLOCK_LOADER_FINISHED_EVENT });\n        }\n    }\n    checkBlockToLoad() {\n        if (this.checkBlockToLoadDebounce) {\n            this.checkBlockToLoadDebounce();\n        }\n        else {\n            this.performCheckBlocksToLoad();\n        }\n    }\n    performCheckBlocksToLoad() {\n        if (!this.active) {\n            return;\n        }\n        this.printCacheStatus();\n        if (this.maxConcurrentRequests != null && this.activeBlockLoadsCount >= this.maxConcurrentRequests) {\n            this.logger.log(`checkBlockToLoad: max loads exceeded`);\n            return;\n        }\n        const loadAvailability = this.getAvailableLoadingCount();\n        const blocksToLoad = this.blocks.filter(block => (block.getState() === RowNodeBlock.STATE_WAITING_TO_LOAD)).slice(0, loadAvailability);\n        this.registerLoads(blocksToLoad.length);\n        blocksToLoad.forEach(block => block.load());\n        this.printCacheStatus();\n    }\n    getBlockState() {\n        if (this.gridOptionsService.isRowModelType('serverSide')) {\n            const ssrm = this.rowModel;\n            return ssrm.getBlockStates();\n        }\n        const result = {};\n        this.blocks.forEach((block) => {\n            const { id, state } = block.getBlockStateJson();\n            result[id] = state;\n        });\n        return result;\n    }\n    printCacheStatus() {\n        if (this.logger.isLogging()) {\n            this.logger.log(`printCacheStatus: activePageLoadsCount = ${this.activeBlockLoadsCount},`\n                + ` blocks = ${JSON.stringify(this.getBlockState())}`);\n        }\n    }\n    isLoading() {\n        return this.activeBlockLoadsCount > 0;\n    }\n    registerLoads(count) {\n        this.activeBlockLoadsCount += count;\n    }\n    getAvailableLoadingCount() {\n        return this.maxConcurrentRequests !== undefined ? this.maxConcurrentRequests - this.activeBlockLoadsCount : undefined;\n    }\n};\nRowNodeBlockLoader.BLOCK_LOADED_EVENT = 'blockLoaded';\nRowNodeBlockLoader.BLOCK_LOADER_FINISHED_EVENT = 'blockLoaderFinished';\n__decorate$12([\n    Autowired('rowModel')\n], RowNodeBlockLoader.prototype, \"rowModel\", void 0);\n__decorate$12([\n    PostConstruct\n], RowNodeBlockLoader.prototype, \"postConstruct\", null);\n__decorate$12([\n    __param$7(0, Qualifier('loggerFactory'))\n], RowNodeBlockLoader.prototype, \"setBeans\", null);\nRowNodeBlockLoader = RowNodeBlockLoader_1 = __decorate$12([\n    Bean('rowNodeBlockLoader')\n], RowNodeBlockLoader);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$11 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet PaginationProxy = class PaginationProxy extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.currentPage = 0;\n        this.topDisplayedRowIndex = 0;\n        this.bottomDisplayedRowIndex = 0;\n        this.pixelOffset = 0;\n        this.masterRowCount = 0;\n    }\n    postConstruct() {\n        this.active = this.gridOptionsService.is('pagination');\n        this.paginateChildRows = this.isPaginateChildRows();\n        this.addManagedListener(this.eventService, Events.EVENT_MODEL_UPDATED, this.onModelUpdated.bind(this));\n        this.addManagedPropertyListener('pagination', this.onPaginationPageSizeChanged.bind(this));\n        this.addManagedPropertyListener('paginationPageSize', this.onPaginationPageSizeChanged.bind(this));\n        this.onModelUpdated();\n    }\n    ensureRowHeightsValid(startPixel, endPixel, startLimitIndex, endLimitIndex) {\n        const res = this.rowModel.ensureRowHeightsValid(startPixel, endPixel, this.getPageFirstRow(), this.getPageLastRow());\n        if (res) {\n            this.calculatePages();\n        }\n        return res;\n    }\n    isPaginateChildRows() {\n        const shouldPaginate = this.gridOptionsService.is('groupRemoveSingleChildren') || this.gridOptionsService.is('groupRemoveLowestSingleChildren');\n        if (shouldPaginate) {\n            return true;\n        }\n        return this.gridOptionsService.is('paginateChildRows');\n    }\n    onModelUpdated(modelUpdatedEvent) {\n        this.calculatePages();\n        const paginationChangedEvent = {\n            type: Events.EVENT_PAGINATION_CHANGED,\n            animate: modelUpdatedEvent ? modelUpdatedEvent.animate : false,\n            newData: modelUpdatedEvent ? modelUpdatedEvent.newData : false,\n            newPage: modelUpdatedEvent ? modelUpdatedEvent.newPage : false,\n            keepRenderedRows: modelUpdatedEvent ? modelUpdatedEvent.keepRenderedRows : false\n        };\n        this.eventService.dispatchEvent(paginationChangedEvent);\n    }\n    onPaginationPageSizeChanged() {\n        this.active = this.gridOptionsService.is('pagination');\n        this.calculatePages();\n        const paginationChangedEvent = {\n            type: Events.EVENT_PAGINATION_CHANGED,\n            animate: false,\n            newData: false,\n            newPage: false,\n            // important to keep rendered rows, otherwise every time grid is resized,\n            // we would destroy all the rows.\n            keepRenderedRows: true\n        };\n        this.eventService.dispatchEvent(paginationChangedEvent);\n    }\n    goToPage(page) {\n        if (!this.active || this.currentPage === page || typeof this.currentPage !== 'number') {\n            return;\n        }\n        this.currentPage = page;\n        const event = {\n            type: Events.EVENT_MODEL_UPDATED,\n            animate: false,\n            keepRenderedRows: false,\n            newData: false,\n            newPage: true\n        };\n        this.onModelUpdated(event);\n    }\n    getPixelOffset() {\n        return this.pixelOffset;\n    }\n    getRow(index) {\n        return this.rowModel.getRow(index);\n    }\n    getRowNode(id) {\n        return this.rowModel.getRowNode(id);\n    }\n    getRowIndexAtPixel(pixel) {\n        return this.rowModel.getRowIndexAtPixel(pixel);\n    }\n    getCurrentPageHeight() {\n        if (missing(this.topRowBounds) || missing(this.bottomRowBounds)) {\n            return 0;\n        }\n        return Math.max(this.bottomRowBounds.rowTop + this.bottomRowBounds.rowHeight - this.topRowBounds.rowTop, 0);\n    }\n    getCurrentPagePixelRange() {\n        const pageFirstPixel = this.topRowBounds ? this.topRowBounds.rowTop : 0;\n        const pageLastPixel = this.bottomRowBounds ? this.bottomRowBounds.rowTop + this.bottomRowBounds.rowHeight : 0;\n        return { pageFirstPixel, pageLastPixel };\n    }\n    isRowPresent(rowNode) {\n        if (!this.rowModel.isRowPresent(rowNode)) {\n            return false;\n        }\n        const nodeIsInPage = rowNode.rowIndex >= this.topDisplayedRowIndex && rowNode.rowIndex <= this.bottomDisplayedRowIndex;\n        return nodeIsInPage;\n    }\n    isEmpty() {\n        return this.rowModel.isEmpty();\n    }\n    isRowsToRender() {\n        return this.rowModel.isRowsToRender();\n    }\n    forEachNode(callback) {\n        return this.rowModel.forEachNode(callback);\n    }\n    forEachNodeOnPage(callback) {\n        const firstRow = this.getPageFirstRow();\n        const lastRow = this.getPageLastRow();\n        for (let i = firstRow; i <= lastRow; i++) {\n            const node = this.getRow(i);\n            if (node) {\n                callback(node);\n            }\n        }\n    }\n    getType() {\n        return this.rowModel.getType();\n    }\n    getRowBounds(index) {\n        const res = this.rowModel.getRowBounds(index);\n        res.rowIndex = index;\n        return res;\n    }\n    getPageFirstRow() {\n        return this.topRowBounds ? this.topRowBounds.rowIndex : -1;\n    }\n    getPageLastRow() {\n        return this.bottomRowBounds ? this.bottomRowBounds.rowIndex : -1;\n    }\n    getRowCount() {\n        return this.rowModel.getRowCount();\n    }\n    getPageForIndex(index) {\n        return Math.floor(index / this.pageSize);\n    }\n    goToPageWithIndex(index) {\n        if (!this.active) {\n            return;\n        }\n        const pageNumber = this.getPageForIndex(index);\n        this.goToPage(pageNumber);\n    }\n    isRowInPage(row) {\n        if (!this.active) {\n            return true;\n        }\n        const rowPage = this.getPageForIndex(row.rowIndex);\n        return rowPage === this.currentPage;\n    }\n    isLastPageFound() {\n        return this.rowModel.isLastRowIndexKnown();\n    }\n    getCurrentPage() {\n        return this.currentPage;\n    }\n    goToNextPage() {\n        this.goToPage(this.currentPage + 1);\n    }\n    goToPreviousPage() {\n        this.goToPage(this.currentPage - 1);\n    }\n    goToFirstPage() {\n        this.goToPage(0);\n    }\n    goToLastPage() {\n        const rowCount = this.rowModel.getRowCount();\n        const lastPage = Math.floor(rowCount / this.pageSize);\n        this.goToPage(lastPage);\n    }\n    getPageSize() {\n        return this.pageSize;\n    }\n    getTotalPages() {\n        return this.totalPages;\n    }\n    setPageSize() {\n        // show put this into super class\n        this.pageSize = this.gridOptionsService.getNum('paginationPageSize');\n        if (this.pageSize == null || this.pageSize < 1) {\n            this.pageSize = 100;\n        }\n    }\n    calculatePages() {\n        if (this.active) {\n            this.setPageSize();\n            if (this.paginateChildRows) {\n                this.calculatePagesAllRows();\n            }\n            else {\n                this.calculatePagesMasterRowsOnly();\n            }\n        }\n        else {\n            this.calculatedPagesNotActive();\n        }\n        this.topRowBounds = this.rowModel.getRowBounds(this.topDisplayedRowIndex);\n        if (this.topRowBounds) {\n            this.topRowBounds.rowIndex = this.topDisplayedRowIndex;\n        }\n        this.bottomRowBounds = this.rowModel.getRowBounds(this.bottomDisplayedRowIndex);\n        if (this.bottomRowBounds) {\n            this.bottomRowBounds.rowIndex = this.bottomDisplayedRowIndex;\n        }\n        this.setPixelOffset(exists(this.topRowBounds) ? this.topRowBounds.rowTop : 0);\n    }\n    setPixelOffset(value) {\n        if (this.pixelOffset === value) {\n            return;\n        }\n        this.pixelOffset = value;\n        this.eventService.dispatchEvent({ type: Events.EVENT_PAGINATION_PIXEL_OFFSET_CHANGED });\n    }\n    setZeroRows() {\n        this.masterRowCount = 0;\n        this.topDisplayedRowIndex = 0;\n        this.bottomDisplayedRowIndex = -1;\n        this.currentPage = 0;\n        this.totalPages = 0;\n    }\n    adjustCurrentPageIfInvalid() {\n        if (this.currentPage >= this.totalPages) {\n            this.currentPage = this.totalPages - 1;\n        }\n        if (!isFinite(this.currentPage) || isNaN(this.currentPage) || this.currentPage < 0) {\n            this.currentPage = 0;\n        }\n    }\n    calculatePagesMasterRowsOnly() {\n        // const csrm = <ClientSideRowModel> this.rowModel;\n        // const rootNode = csrm.getRootNode();\n        // const masterRows = rootNode.childrenAfterSort;\n        this.masterRowCount = this.rowModel.getTopLevelRowCount();\n        // we say <=0 (rather than =0) as viewport returns -1 when no rows\n        if (this.masterRowCount <= 0) {\n            this.setZeroRows();\n            return;\n        }\n        const masterLastRowIndex = this.masterRowCount - 1;\n        this.totalPages = Math.floor((masterLastRowIndex) / this.pageSize) + 1;\n        this.adjustCurrentPageIfInvalid();\n        const masterPageStartIndex = this.pageSize * this.currentPage;\n        let masterPageEndIndex = (this.pageSize * (this.currentPage + 1)) - 1;\n        if (masterPageEndIndex > masterLastRowIndex) {\n            masterPageEndIndex = masterLastRowIndex;\n        }\n        this.topDisplayedRowIndex = this.rowModel.getTopLevelRowDisplayedIndex(masterPageStartIndex);\n        // masterRows[masterPageStartIndex].rowIndex;\n        if (masterPageEndIndex === masterLastRowIndex) {\n            // if showing the last master row, then we want to show the very last row of the model\n            this.bottomDisplayedRowIndex = this.rowModel.getRowCount() - 1;\n        }\n        else {\n            const firstIndexNotToShow = this.rowModel.getTopLevelRowDisplayedIndex(masterPageEndIndex + 1);\n            //masterRows[masterPageEndIndex + 1].rowIndex;\n            // this gets the index of the last child - eg current row is open, we want to display all children,\n            // the index of the last child is one less than the index of the next parent row.\n            this.bottomDisplayedRowIndex = firstIndexNotToShow - 1;\n        }\n    }\n    getMasterRowCount() {\n        return this.masterRowCount;\n    }\n    calculatePagesAllRows() {\n        this.masterRowCount = this.rowModel.getRowCount();\n        if (this.masterRowCount === 0) {\n            this.setZeroRows();\n            return;\n        }\n        const maxRowIndex = this.masterRowCount - 1;\n        this.totalPages = Math.floor((maxRowIndex) / this.pageSize) + 1;\n        this.adjustCurrentPageIfInvalid();\n        this.topDisplayedRowIndex = this.pageSize * this.currentPage;\n        this.bottomDisplayedRowIndex = (this.pageSize * (this.currentPage + 1)) - 1;\n        if (this.bottomDisplayedRowIndex > maxRowIndex) {\n            this.bottomDisplayedRowIndex = maxRowIndex;\n        }\n    }\n    calculatedPagesNotActive() {\n        this.pageSize = this.rowModel.getRowCount();\n        this.totalPages = 1;\n        this.currentPage = 0;\n        this.topDisplayedRowIndex = 0;\n        this.bottomDisplayedRowIndex = this.rowModel.getRowCount() - 1;\n    }\n};\n__decorate$11([\n    Autowired('rowModel')\n], PaginationProxy.prototype, \"rowModel\", void 0);\n__decorate$11([\n    PostConstruct\n], PaginationProxy.prototype, \"postConstruct\", null);\nPaginationProxy = __decorate$11([\n    Bean('paginationProxy')\n], PaginationProxy);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$10 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet StylingService = class StylingService extends BeanStub {\n    processAllCellClasses(colDef, params, onApplicableClass, onNotApplicableClass) {\n        this.processClassRules(colDef.cellClassRules, params, onApplicableClass, onNotApplicableClass);\n        this.processStaticCellClasses(colDef, params, onApplicableClass);\n    }\n    processClassRules(classRules, params, onApplicableClass, onNotApplicableClass) {\n        if (classRules == null) {\n            return;\n        }\n        const classNames = Object.keys(classRules);\n        const classesToApply = {};\n        const classesToRemove = {};\n        for (let i = 0; i < classNames.length; i++) {\n            const className = classNames[i];\n            const rule = classRules[className];\n            let resultOfRule;\n            if (typeof rule === 'string') {\n                resultOfRule = this.expressionService.evaluate(rule, params);\n            }\n            else if (typeof rule === 'function') {\n                resultOfRule = rule(params);\n            }\n            // in case className = 'my-class1 my-class2', we need to split into individual class names\n            className.split(' ').forEach(singleClass => {\n                if (singleClass == null || singleClass.trim() == '') {\n                    return;\n                }\n                resultOfRule ? classesToApply[singleClass] = true : classesToRemove[singleClass] = true;\n            });\n        }\n        // we remove all classes first, then add all classes second,\n        // in case a class appears in more than one rule, this means it will be added\n        // if appears in at least one truthy rule\n        if (onNotApplicableClass) {\n            Object.keys(classesToRemove).forEach(onNotApplicableClass);\n        }\n        Object.keys(classesToApply).forEach(onApplicableClass);\n    }\n    getStaticCellClasses(colDef, params) {\n        const { cellClass } = colDef;\n        if (!cellClass) {\n            return [];\n        }\n        let classOrClasses;\n        if (typeof cellClass === 'function') {\n            const cellClassFunc = cellClass;\n            classOrClasses = cellClassFunc(params);\n        }\n        else {\n            classOrClasses = cellClass;\n        }\n        if (typeof classOrClasses === 'string') {\n            classOrClasses = [classOrClasses];\n        }\n        return classOrClasses || [];\n    }\n    processStaticCellClasses(colDef, params, onApplicableClass) {\n        const classOrClasses = this.getStaticCellClasses(colDef, params);\n        classOrClasses.forEach((cssClassItem) => {\n            onApplicableClass(cssClassItem);\n        });\n    }\n};\n__decorate$10([\n    Autowired('expressionService')\n], StylingService.prototype, \"expressionService\", void 0);\nStylingService = __decorate$10([\n    Bean('stylingService')\n], StylingService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass AgToggleButton extends AgCheckbox {\n    constructor(config) {\n        super(config, 'ag-toggle-button');\n    }\n    setValue(value, silent) {\n        super.setValue(value, silent);\n        this.addOrRemoveCssClass('ag-selected', this.getValue());\n        return this;\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass AgInputTextArea extends AgAbstractInputField {\n    constructor(config) {\n        super(config, 'ag-text-area', null, 'textarea');\n    }\n    setValue(value, silent) {\n        const ret = super.setValue(value, silent);\n        this.eInput.value = value;\n        return ret;\n    }\n    setCols(cols) {\n        this.eInput.cols = cols;\n        return this;\n    }\n    setRows(rows) {\n        this.eInput.rows = rows;\n        return this;\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass AgInputDateField extends AgInputTextField {\n    constructor(config) {\n        super(config, 'ag-date-field', 'date');\n    }\n    postConstruct() {\n        super.postConstruct();\n        this.addManagedListener(this.eInput, 'wheel', this.onWheel.bind(this));\n        // ensures that the input element is focussed when a clear button is clicked,\n        // unless using safari as there is no clear button and focus does not work properly\n        const usingSafari = isBrowserSafari();\n        this.addManagedListener(this.eInput, 'mousedown', () => {\n            if (this.isDisabled() || usingSafari) {\n                return;\n            }\n            this.eInput.focus();\n        });\n        this.eInput.step = 'any';\n    }\n    onWheel(e) {\n        // Prevent default scroll events from incrementing / decrementing the input, since its inconsistent between browsers\n        if (document.activeElement === this.eInput) {\n            e.preventDefault();\n        }\n    }\n    setMin(minDate) {\n        var _a;\n        const min = minDate instanceof Date ? (_a = serialiseDate(minDate !== null && minDate !== void 0 ? minDate : null, false)) !== null && _a !== void 0 ? _a : undefined : minDate;\n        if (this.min === min) {\n            return this;\n        }\n        this.min = min;\n        addOrRemoveAttribute(this.eInput, 'min', min);\n        return this;\n    }\n    setMax(maxDate) {\n        var _a;\n        const max = maxDate instanceof Date ? (_a = serialiseDate(maxDate !== null && maxDate !== void 0 ? maxDate : null, false)) !== null && _a !== void 0 ? _a : undefined : maxDate;\n        if (this.max === max) {\n            return this;\n        }\n        this.max = max;\n        addOrRemoveAttribute(this.eInput, 'max', max);\n        return this;\n    }\n    setStep(step) {\n        if (this.step === step) {\n            return this;\n        }\n        this.step = step;\n        addOrRemoveAttribute(this.eInput, 'step', step);\n        return this;\n    }\n    getDate() {\n        var _a;\n        if (!this.eInput.validity.valid) {\n            return undefined;\n        }\n        return (_a = parseDateTimeFromString(this.getValue())) !== null && _a !== void 0 ? _a : undefined;\n    }\n    setDate(date, silent) {\n        this.setValue(serialiseDate(date !== null && date !== void 0 ? date : null, false), silent);\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass AgInputRange extends AgAbstractInputField {\n    constructor(config) {\n        super(config, 'ag-range-field', 'range');\n    }\n    postConstruct() {\n        super.postConstruct();\n        const { min, max, step } = this.config;\n        if (min != null) {\n            this.setMinValue(min);\n        }\n        if (max != null) {\n            this.setMaxValue(max);\n        }\n        this.setStep(step || 1);\n    }\n    addInputListeners() {\n        this.addManagedListener(this.eInput, 'input', (e) => {\n            const value = e.target.value;\n            this.setValue(value);\n        });\n    }\n    setMinValue(value) {\n        this.min = value;\n        this.eInput.setAttribute('min', value.toString());\n        return this;\n    }\n    setMaxValue(value) {\n        this.max = value;\n        this.eInput.setAttribute('max', value.toString());\n        return this;\n    }\n    setStep(value) {\n        this.eInput.setAttribute('step', value.toString());\n        return this;\n    }\n    setValue(value, silent) {\n        if (this.min != null) {\n            value = Math.max(parseFloat(value), this.min).toString();\n        }\n        if (this.max != null) {\n            value = Math.min(parseFloat(value), this.max).toString();\n        }\n        const ret = super.setValue(value, silent);\n        this.eInput.value = value;\n        return ret;\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$$ = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AgSlider extends AgAbstractLabel {\n    constructor(config) {\n        super(config, AgSlider.TEMPLATE);\n        this.labelAlignment = 'top';\n    }\n    init() {\n        this.eSlider.addCssClass('ag-slider-field');\n    }\n    onValueChange(callbackFn) {\n        const eventChanged = AgAbstractField.EVENT_CHANGED;\n        this.addManagedListener(this.eText, eventChanged, () => {\n            const textValue = parseFloat(this.eText.getValue());\n            this.eSlider.setValue(textValue.toString(), true);\n            callbackFn(textValue || 0);\n        });\n        this.addManagedListener(this.eSlider, eventChanged, () => {\n            const sliderValue = this.eSlider.getValue();\n            this.eText.setValue(sliderValue, true);\n            callbackFn(parseFloat(sliderValue));\n        });\n        return this;\n    }\n    setSliderWidth(width) {\n        this.eSlider.setWidth(width);\n        return this;\n    }\n    setTextFieldWidth(width) {\n        this.eText.setWidth(width);\n        return this;\n    }\n    setMinValue(minValue) {\n        this.eSlider.setMinValue(minValue);\n        this.eText.setMin(minValue);\n        return this;\n    }\n    setMaxValue(maxValue) {\n        this.eSlider.setMaxValue(maxValue);\n        this.eText.setMax(maxValue);\n        return this;\n    }\n    getValue() {\n        return this.eText.getValue();\n    }\n    setValue(value) {\n        if (this.getValue() === value) {\n            return this;\n        }\n        this.eText.setValue(value, true);\n        this.eSlider.setValue(value, true);\n        this.dispatchEvent({ type: AgAbstractField.EVENT_CHANGED });\n        return this;\n    }\n    setStep(step) {\n        this.eSlider.setStep(step);\n        this.eText.setStep(step);\n        return this;\n    }\n}\nAgSlider.TEMPLATE = `<div class=\"ag-slider\">\n            <label ref=\"eLabel\"></label>\n            <div class=\"ag-wrapper ag-slider-wrapper\">\n                <ag-input-range ref=\"eSlider\"></ag-input-range>\n                <ag-input-number-field ref=\"eText\"></ag-input-number-field>\n            </div>\n        </div>`;\n__decorate$$([\n    RefSelector('eLabel')\n], AgSlider.prototype, \"eLabel\", void 0);\n__decorate$$([\n    RefSelector('eSlider')\n], AgSlider.prototype, \"eSlider\", void 0);\n__decorate$$([\n    RefSelector('eText')\n], AgSlider.prototype, \"eText\", void 0);\n__decorate$$([\n    PostConstruct\n], AgSlider.prototype, \"init\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$_ = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AgGroupComponent extends Component {\n    constructor(params = {}) {\n        super(AgGroupComponent.getTemplate(params));\n        this.suppressEnabledCheckbox = true;\n        this.suppressOpenCloseIcons = false;\n        const { title, enabled, items, suppressEnabledCheckbox, suppressOpenCloseIcons } = params;\n        this.title = title;\n        this.cssIdentifier = params.cssIdentifier || 'default';\n        this.enabled = enabled != null ? enabled : true;\n        this.items = items || [];\n        this.alignItems = params.alignItems || 'center';\n        if (suppressEnabledCheckbox != null) {\n            this.suppressEnabledCheckbox = suppressEnabledCheckbox;\n        }\n        if (suppressOpenCloseIcons != null) {\n            this.suppressOpenCloseIcons = suppressOpenCloseIcons;\n        }\n    }\n    static getTemplate(params) {\n        const cssIdentifier = params.cssIdentifier || 'default';\n        const direction = params.direction || 'vertical';\n        return /* html */ `<div class=\"ag-group ag-${cssIdentifier}-group\" role=\"presentation\">\n            <div class=\"ag-group-title-bar ag-${cssIdentifier}-group-title-bar ag-unselectable\" ref=\"eTitleBar\" role=\"button\">\n                <span class=\"ag-group-title-bar-icon ag-${cssIdentifier}-group-title-bar-icon\" ref=\"eGroupOpenedIcon\" role=\"presentation\"></span>\n                <span class=\"ag-group-title-bar-icon ag-${cssIdentifier}-group-title-bar-icon\" ref=\"eGroupClosedIcon\" role=\"presentation\"></span>\n                <span ref=\"eTitle\" class=\"ag-group-title ag-${cssIdentifier}-group-title\"></span>\n            </div>\n            <div ref=\"eToolbar\" class=\"ag-group-toolbar ag-${cssIdentifier}-group-toolbar\">\n                <ag-checkbox ref=\"cbGroupEnabled\"></ag-checkbox>\n            </div>\n            <div ref=\"eContainer\" class=\"ag-group-container ag-group-container-${direction} ag-${cssIdentifier}-group-container\"></div>\n        </div>`;\n    }\n    postConstruct() {\n        if (this.items.length) {\n            const initialItems = this.items;\n            this.items = [];\n            this.addItems(initialItems);\n        }\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        this.cbGroupEnabled.setLabel(localeTextFunc('enabled', 'Enabled'));\n        if (this.title) {\n            this.setTitle(this.title);\n        }\n        if (this.enabled) {\n            this.setEnabled(this.enabled);\n        }\n        this.setAlignItems(this.alignItems);\n        this.hideEnabledCheckbox(this.suppressEnabledCheckbox);\n        this.hideOpenCloseIcons(this.suppressOpenCloseIcons);\n        this.setupExpandContract();\n        this.refreshAriaStatus();\n        this.refreshChildDisplay();\n    }\n    setupExpandContract() {\n        this.eGroupClosedIcon.appendChild(createIcon('columnSelectClosed', this.gridOptionsService, null));\n        this.eGroupOpenedIcon.appendChild(createIcon('columnSelectOpen', this.gridOptionsService, null));\n        this.addManagedListener(this.eTitleBar, 'click', () => this.toggleGroupExpand());\n        this.addManagedListener(this.eTitleBar, 'keydown', (e) => {\n            switch (e.key) {\n                case KeyCode.ENTER:\n                case KeyCode.SPACE:\n                    e.preventDefault();\n                    this.toggleGroupExpand();\n                    break;\n                case KeyCode.RIGHT:\n                case KeyCode.LEFT:\n                    e.preventDefault();\n                    this.toggleGroupExpand(e.key === KeyCode.RIGHT);\n                    break;\n            }\n        });\n    }\n    refreshAriaStatus() {\n        if (!this.suppressOpenCloseIcons) {\n            setAriaExpanded(this.eTitleBar, this.expanded);\n        }\n    }\n    refreshChildDisplay() {\n        const showIcon = !this.suppressOpenCloseIcons;\n        setDisplayed(this.eToolbar, this.expanded && !this.suppressEnabledCheckbox);\n        setDisplayed(this.eGroupOpenedIcon, showIcon && this.expanded);\n        setDisplayed(this.eGroupClosedIcon, showIcon && !this.expanded);\n    }\n    isExpanded() {\n        return this.expanded;\n    }\n    setAlignItems(alignment) {\n        if (this.alignItems !== alignment) {\n            this.removeCssClass(`ag-group-item-alignment-${this.alignItems}`);\n        }\n        this.alignItems = alignment;\n        const newCls = `ag-group-item-alignment-${this.alignItems}`;\n        this.addCssClass(newCls);\n        return this;\n    }\n    toggleGroupExpand(expanded) {\n        if (this.suppressOpenCloseIcons) {\n            this.expanded = true;\n            this.refreshChildDisplay();\n            setDisplayed(this.eContainer, true);\n            return this;\n        }\n        expanded = expanded != null ? expanded : !this.expanded;\n        if (this.expanded === expanded) {\n            return this;\n        }\n        this.expanded = expanded;\n        this.refreshAriaStatus();\n        this.refreshChildDisplay();\n        setDisplayed(this.eContainer, expanded);\n        this.dispatchEvent({ type: this.expanded ? AgGroupComponent.EVENT_EXPANDED : AgGroupComponent.EVENT_COLLAPSED });\n        return this;\n    }\n    addItems(items) {\n        items.forEach(item => this.addItem(item));\n    }\n    addItem(item) {\n        const container = this.eContainer;\n        const el = item instanceof Component ? item.getGui() : item;\n        el.classList.add('ag-group-item', `ag-${this.cssIdentifier}-group-item`);\n        container.appendChild(el);\n        this.items.push(el);\n    }\n    hideItem(hide, index) {\n        const itemToHide = this.items[index];\n        setDisplayed(itemToHide, !hide);\n    }\n    setTitle(title) {\n        this.eTitle.innerText = title;\n        return this;\n    }\n    addCssClassToTitleBar(cssClass) {\n        this.eTitleBar.classList.add(cssClass);\n    }\n    setEnabled(enabled, skipToggle) {\n        this.enabled = enabled;\n        this.refreshDisabledStyles();\n        this.toggleGroupExpand(enabled);\n        if (!skipToggle) {\n            this.cbGroupEnabled.setValue(enabled);\n        }\n        return this;\n    }\n    isEnabled() {\n        return this.enabled;\n    }\n    onEnableChange(callbackFn) {\n        this.cbGroupEnabled.onValueChange((newSelection) => {\n            this.setEnabled(newSelection, true);\n            callbackFn(newSelection);\n        });\n        return this;\n    }\n    hideEnabledCheckbox(hide) {\n        this.suppressEnabledCheckbox = hide;\n        this.refreshChildDisplay();\n        this.refreshDisabledStyles();\n        return this;\n    }\n    hideOpenCloseIcons(hide) {\n        this.suppressOpenCloseIcons = hide;\n        if (hide) {\n            this.toggleGroupExpand(true);\n        }\n        return this;\n    }\n    refreshDisabledStyles() {\n        this.addOrRemoveCssClass('ag-disabled', !this.enabled);\n        if (this.suppressEnabledCheckbox && !this.enabled) {\n            this.eTitleBar.classList.add('ag-disabled-group-title-bar');\n            this.eTitleBar.removeAttribute('tabindex');\n        }\n        else {\n            this.eTitleBar.classList.remove('ag-disabled-group-title-bar');\n            this.eTitleBar.setAttribute('tabindex', '0');\n        }\n        this.eContainer.classList.toggle('ag-disabled-group-container', !this.enabled);\n    }\n}\nAgGroupComponent.EVENT_EXPANDED = 'expanded';\nAgGroupComponent.EVENT_COLLAPSED = 'collapsed';\n__decorate$_([\n    RefSelector('eTitleBar')\n], AgGroupComponent.prototype, \"eTitleBar\", void 0);\n__decorate$_([\n    RefSelector('eGroupOpenedIcon')\n], AgGroupComponent.prototype, \"eGroupOpenedIcon\", void 0);\n__decorate$_([\n    RefSelector('eGroupClosedIcon')\n], AgGroupComponent.prototype, \"eGroupClosedIcon\", void 0);\n__decorate$_([\n    RefSelector('eToolbar')\n], AgGroupComponent.prototype, \"eToolbar\", void 0);\n__decorate$_([\n    RefSelector('cbGroupEnabled')\n], AgGroupComponent.prototype, \"cbGroupEnabled\", void 0);\n__decorate$_([\n    RefSelector('eTitle')\n], AgGroupComponent.prototype, \"eTitle\", void 0);\n__decorate$_([\n    RefSelector('eContainer')\n], AgGroupComponent.prototype, \"eContainer\", void 0);\n__decorate$_([\n    PostConstruct\n], AgGroupComponent.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$Z = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar TabGuardClassNames;\n(function (TabGuardClassNames) {\n    TabGuardClassNames[\"TAB_GUARD\"] = \"ag-tab-guard\";\n    TabGuardClassNames[\"TAB_GUARD_TOP\"] = \"ag-tab-guard-top\";\n    TabGuardClassNames[\"TAB_GUARD_BOTTOM\"] = \"ag-tab-guard-bottom\";\n})(TabGuardClassNames || (TabGuardClassNames = {}));\nclass TabGuardCtrl extends BeanStub {\n    constructor(params) {\n        super();\n        this.skipTabGuardFocus = false;\n        const { comp, eTopGuard, eBottomGuard, focusInnerElement, onFocusIn, onFocusOut, shouldStopEventPropagation, onTabKeyDown, handleKeyDown, eFocusableElement } = params;\n        this.comp = comp;\n        this.eTopGuard = eTopGuard;\n        this.eBottomGuard = eBottomGuard;\n        this.providedFocusInnerElement = focusInnerElement;\n        this.eFocusableElement = eFocusableElement;\n        this.providedFocusIn = onFocusIn;\n        this.providedFocusOut = onFocusOut;\n        this.providedShouldStopEventPropagation = shouldStopEventPropagation;\n        this.providedOnTabKeyDown = onTabKeyDown;\n        this.providedHandleKeyDown = handleKeyDown;\n    }\n    postConstruct() {\n        this.createManagedBean(new ManagedFocusFeature(this.eFocusableElement, {\n            shouldStopEventPropagation: () => this.shouldStopEventPropagation(),\n            onTabKeyDown: e => this.onTabKeyDown(e),\n            handleKeyDown: e => this.handleKeyDown(e),\n            onFocusIn: e => this.onFocusIn(e),\n            onFocusOut: e => this.onFocusOut(e)\n        }));\n        this.activateTabGuards();\n        [this.eTopGuard, this.eBottomGuard].forEach(guard => this.addManagedListener(guard, 'focus', this.onFocus.bind(this)));\n    }\n    handleKeyDown(e) {\n        if (this.providedHandleKeyDown) {\n            this.providedHandleKeyDown(e);\n        }\n    }\n    tabGuardsAreActive() {\n        return !!this.eTopGuard && this.eTopGuard.hasAttribute('tabIndex');\n    }\n    shouldStopEventPropagation() {\n        if (this.providedShouldStopEventPropagation) {\n            return this.providedShouldStopEventPropagation();\n        }\n        return false;\n    }\n    activateTabGuards() {\n        this.comp.setTabIndex(this.getGridTabIndex());\n    }\n    deactivateTabGuards() {\n        this.comp.setTabIndex();\n    }\n    onFocus(e) {\n        if (this.skipTabGuardFocus) {\n            this.skipTabGuardFocus = false;\n            return;\n        }\n        const fromBottom = e.target === this.eBottomGuard;\n        if (this.providedFocusInnerElement) {\n            this.providedFocusInnerElement(fromBottom);\n        }\n        else {\n            this.focusInnerElement(fromBottom);\n        }\n    }\n    onFocusIn(e) {\n        if (this.providedFocusIn && this.providedFocusIn(e)) {\n            return;\n        }\n        this.deactivateTabGuards();\n    }\n    onFocusOut(e) {\n        if (this.providedFocusOut && this.providedFocusOut(e)) {\n            return;\n        }\n        if (!this.eFocusableElement.contains(e.relatedTarget)) {\n            this.activateTabGuards();\n        }\n    }\n    onTabKeyDown(e) {\n        if (this.providedOnTabKeyDown) {\n            this.providedOnTabKeyDown(e);\n            return;\n        }\n        if (e.defaultPrevented) {\n            return;\n        }\n        const tabGuardsAreActive = this.tabGuardsAreActive();\n        if (tabGuardsAreActive) {\n            this.deactivateTabGuards();\n        }\n        const nextRoot = this.getNextFocusableElement(e.shiftKey);\n        if (tabGuardsAreActive) {\n            // ensure the tab guards are only re-instated once the event has finished processing, to avoid the browser\n            // tabbing to the tab guard from inside the component\n            setTimeout(() => this.activateTabGuards(), 0);\n        }\n        if (!nextRoot) {\n            return;\n        }\n        nextRoot.focus();\n        e.preventDefault();\n    }\n    getGridTabIndex() {\n        return (this.gridOptionsService.getNum('tabIndex') || 0).toString();\n    }\n    focusInnerElement(fromBottom = false) {\n        const focusable = this.focusService.findFocusableElements(this.eFocusableElement);\n        if (this.tabGuardsAreActive()) {\n            // remove tab guards from this component from list of focusable elements\n            focusable.splice(0, 1);\n            focusable.splice(focusable.length - 1, 1);\n        }\n        if (!focusable.length) {\n            return;\n        }\n        focusable[fromBottom ? focusable.length - 1 : 0].focus({ preventScroll: true });\n    }\n    getNextFocusableElement(backwards) {\n        return this.focusService.findNextFocusableElement(this.eFocusableElement, false, backwards);\n    }\n    forceFocusOutOfContainer(up = false) {\n        const tabGuardToFocus = up ? this.eTopGuard : this.eBottomGuard;\n        this.activateTabGuards();\n        this.skipTabGuardFocus = true;\n        tabGuardToFocus.focus();\n    }\n}\n__decorate$Z([\n    Autowired('focusService')\n], TabGuardCtrl.prototype, \"focusService\", void 0);\n__decorate$Z([\n    PostConstruct\n], TabGuardCtrl.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass TabGuardComp extends Component {\n    initialiseTabGuard(params) {\n        this.eTopGuard = this.createTabGuard('top');\n        this.eBottomGuard = this.createTabGuard('bottom');\n        this.eFocusableElement = this.getFocusableElement();\n        const tabGuards = [this.eTopGuard, this.eBottomGuard];\n        const compProxy = {\n            setTabIndex: tabIndex => {\n                tabGuards.forEach(tabGuard => tabIndex != null ? tabGuard.setAttribute('tabIndex', tabIndex) : tabGuard.removeAttribute('tabIndex'));\n            }\n        };\n        this.addTabGuards(this.eTopGuard, this.eBottomGuard);\n        this.tabGuardCtrl = this.createManagedBean(new TabGuardCtrl({\n            comp: compProxy,\n            eTopGuard: this.eTopGuard,\n            eBottomGuard: this.eBottomGuard,\n            eFocusableElement: this.eFocusableElement,\n            onFocusIn: params.onFocusIn,\n            onFocusOut: params.onFocusOut,\n            focusInnerElement: params.focusInnerElement,\n            handleKeyDown: params.handleKeyDown,\n            onTabKeyDown: params.onTabKeyDown,\n            shouldStopEventPropagation: params.shouldStopEventPropagation\n        }));\n    }\n    createTabGuard(side) {\n        const tabGuard = document.createElement('div');\n        const cls = side === 'top' ? TabGuardClassNames.TAB_GUARD_TOP : TabGuardClassNames.TAB_GUARD_BOTTOM;\n        tabGuard.classList.add(TabGuardClassNames.TAB_GUARD, cls);\n        setAriaRole(tabGuard, 'presentation');\n        return tabGuard;\n    }\n    addTabGuards(topTabGuard, bottomTabGuard) {\n        this.eFocusableElement.insertAdjacentElement('afterbegin', topTabGuard);\n        this.eFocusableElement.insertAdjacentElement('beforeend', bottomTabGuard);\n    }\n    removeAllChildrenExceptTabGuards() {\n        const tabGuards = [this.eTopGuard, this.eBottomGuard];\n        clearElement(this.getFocusableElement());\n        this.addTabGuards(...tabGuards);\n    }\n    forceFocusOutOfContainer(up = false) {\n        this.tabGuardCtrl.forceFocusOutOfContainer(up);\n    }\n    appendChild(newChild, container) {\n        if (!isNodeOrElement(newChild)) {\n            newChild = newChild.getGui();\n        }\n        const { eBottomGuard: bottomTabGuard } = this;\n        if (bottomTabGuard) {\n            bottomTabGuard.insertAdjacentElement('beforebegin', newChild);\n        }\n        else {\n            super.appendChild(newChild, container);\n        }\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$Y = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AgMenuList extends TabGuardComp {\n    constructor(level = 1) {\n        super(/* html */ `<div class=\"ag-menu-list\" role=\"tree\"></div>`);\n        this.level = level;\n        this.menuItems = [];\n    }\n    postConstruct() {\n        this.initialiseTabGuard({\n            onTabKeyDown: e => this.onTabKeyDown(e),\n            handleKeyDown: e => this.handleKeyDown(e)\n        });\n    }\n    onTabKeyDown(e) {\n        const parent = this.getParentComponent();\n        const parentGui = parent && parent.getGui();\n        const isManaged = parentGui && parentGui.classList.contains('ag-focus-managed');\n        if (!isManaged) {\n            e.preventDefault();\n        }\n        if (e.shiftKey) {\n            this.closeIfIsChild(e);\n        }\n    }\n    handleKeyDown(e) {\n        switch (e.key) {\n            case KeyCode.UP:\n            case KeyCode.RIGHT:\n            case KeyCode.DOWN:\n            case KeyCode.LEFT:\n                e.preventDefault();\n                this.handleNavKey(e.key);\n                break;\n            case KeyCode.ESCAPE:\n                const topMenu = this.findTopMenu();\n                if (topMenu) {\n                    this.focusService.focusInto(topMenu.getGui());\n                }\n                break;\n        }\n    }\n    clearActiveItem() {\n        if (this.activeMenuItem) {\n            this.activeMenuItem.deactivate();\n            this.activeMenuItem = null;\n        }\n    }\n    addMenuItems(menuItems) {\n        if (menuItems == null) {\n            return;\n        }\n        menuItems.forEach(menuItemOrString => {\n            if (menuItemOrString === 'separator') {\n                this.addSeparator();\n            }\n            else if (typeof menuItemOrString === 'string') {\n                console.warn(`AG Grid: unrecognised menu item ${menuItemOrString}`);\n            }\n            else {\n                this.addItem(menuItemOrString);\n            }\n        });\n    }\n    addItem(menuItemDef) {\n        const menuItem = this.createManagedBean(new AgMenuItemComponent(Object.assign(Object.assign({}, menuItemDef), { isAnotherSubMenuOpen: () => this.menuItems.some(m => m.isSubMenuOpen()) })));\n        menuItem.setParentComponent(this);\n        setAriaLevel(menuItem.getGui(), this.level);\n        this.menuItems.push(menuItem);\n        this.appendChild(menuItem.getGui());\n        this.addManagedListener(menuItem, AgMenuItemComponent.EVENT_MENU_ITEM_SELECTED, (event) => {\n            this.dispatchEvent(event);\n        });\n        this.addManagedListener(menuItem, AgMenuItemComponent.EVENT_MENU_ITEM_ACTIVATED, (event) => {\n            if (this.activeMenuItem && this.activeMenuItem !== event.menuItem) {\n                this.activeMenuItem.deactivate();\n            }\n            this.activeMenuItem = event.menuItem;\n        });\n    }\n    activateFirstItem() {\n        const item = this.menuItems.filter(currentItem => !currentItem.isDisabled())[0];\n        if (!item) {\n            return;\n        }\n        item.activate();\n    }\n    addSeparator() {\n        const separatorHtml = /* html */ `\n            <div class=\"ag-menu-separator\" aria-hidden=\"true\">\n                <div class=\"ag-menu-separator-part\"></div>\n                <div class=\"ag-menu-separator-part\"></div>\n                <div class=\"ag-menu-separator-part\"></div>\n                <div class=\"ag-menu-separator-part\"></div>\n            </div>`;\n        this.appendChild(loadTemplate(separatorHtml));\n    }\n    findTopMenu() {\n        let parent = this.getParentComponent();\n        if (!parent && this instanceof AgMenuList) {\n            return this;\n        }\n        while (true) {\n            const nextParent = parent && parent.getParentComponent && parent.getParentComponent();\n            if (!nextParent || (!(nextParent instanceof AgMenuList || nextParent instanceof AgMenuItemComponent))) {\n                break;\n            }\n            parent = nextParent;\n        }\n        return parent instanceof AgMenuList ? parent : undefined;\n    }\n    handleNavKey(key) {\n        switch (key) {\n            case KeyCode.UP:\n            case KeyCode.DOWN:\n                const nextItem = this.findNextItem(key === KeyCode.UP);\n                if (nextItem && nextItem !== this.activeMenuItem) {\n                    nextItem.activate();\n                }\n                return;\n        }\n        const left = this.gridOptionsService.is('enableRtl') ? KeyCode.RIGHT : KeyCode.LEFT;\n        if (key === left) {\n            this.closeIfIsChild();\n        }\n        else {\n            this.openChild();\n        }\n    }\n    closeIfIsChild(e) {\n        const parentItem = this.getParentComponent();\n        if (parentItem && parentItem instanceof AgMenuItemComponent) {\n            if (e) {\n                e.preventDefault();\n            }\n            parentItem.closeSubMenu();\n            parentItem.getGui().focus();\n        }\n    }\n    openChild() {\n        if (this.activeMenuItem) {\n            this.activeMenuItem.openSubMenu(true);\n        }\n    }\n    findNextItem(up) {\n        const items = this.menuItems.filter(item => !item.isDisabled());\n        if (!items.length) {\n            return;\n        }\n        if (!this.activeMenuItem) {\n            return up ? last(items) : items[0];\n        }\n        if (up) {\n            items.reverse();\n        }\n        let nextItem;\n        let foundCurrent = false;\n        for (let i = 0; i < items.length; i++) {\n            const item = items[i];\n            if (!foundCurrent) {\n                if (item === this.activeMenuItem) {\n                    foundCurrent = true;\n                }\n                continue;\n            }\n            nextItem = item;\n            break;\n        }\n        return nextItem || this.activeMenuItem;\n    }\n    destroy() {\n        this.clearActiveItem();\n        super.destroy();\n    }\n}\n__decorate$Y([\n    Autowired('focusService')\n], AgMenuList.prototype, \"focusService\", void 0);\n__decorate$Y([\n    PostConstruct\n], AgMenuList.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$X = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AgMenuPanel extends TabGuardComp {\n    constructor(wrappedComponent) {\n        super();\n        this.wrappedComponent = wrappedComponent;\n        this.setTemplateFromElement(wrappedComponent.getGui());\n    }\n    postConstruct() {\n        this.initialiseTabGuard({\n            onTabKeyDown: e => this.onTabKeyDown(e),\n            handleKeyDown: e => this.handleKeyDown(e)\n        });\n    }\n    handleKeyDown(e) {\n        if (e.key === KeyCode.ESCAPE) {\n            this.closePanel();\n        }\n    }\n    onTabKeyDown(e) {\n        if (e.defaultPrevented) {\n            return;\n        }\n        this.closePanel();\n        e.preventDefault();\n    }\n    closePanel() {\n        const menuItem = this.parentComponent;\n        menuItem.closeSubMenu();\n        setTimeout(() => menuItem.getGui().focus(), 0);\n    }\n}\n__decorate$X([\n    PostConstruct\n], AgMenuPanel.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$W = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AgMenuItemComponent extends Component {\n    constructor(params) {\n        super();\n        this.params = params;\n        this.isActive = false;\n        this.subMenuIsOpen = false;\n        this.setTemplate(/* html */ `<div class=\"${this.getClassName()}\" tabindex=\"-1\" role=\"treeitem\"></div>`);\n    }\n    init() {\n        this.addIcon();\n        this.addName();\n        this.addShortcut();\n        this.addSubMenu();\n        this.addTooltip();\n        const eGui = this.getGui();\n        if (this.params.disabled) {\n            this.addCssClass(this.getClassName('disabled'));\n            setAriaDisabled(eGui, true);\n        }\n        else {\n            this.addGuiEventListener('click', e => this.onItemSelected(e));\n            this.addGuiEventListener('keydown', (e) => {\n                if (e.key === KeyCode.ENTER || e.key === KeyCode.SPACE) {\n                    e.preventDefault();\n                    this.onItemSelected(e);\n                }\n            });\n            this.addGuiEventListener('mousedown', e => {\n                // Prevent event bubbling to other event handlers such as PopupService triggering\n                // premature closing of any open sub-menu popup.\n                e.stopPropagation();\n                e.preventDefault();\n            });\n            this.addGuiEventListener('mouseenter', () => this.onMouseEnter());\n            this.addGuiEventListener('mouseleave', () => this.onMouseLeave());\n        }\n        if (this.params.cssClasses) {\n            this.params.cssClasses.forEach(it => this.addCssClass(it));\n        }\n    }\n    isDisabled() {\n        return !!this.params.disabled;\n    }\n    openSubMenu(activateFirstItem = false) {\n        this.closeSubMenu();\n        if (!this.params.subMenu) {\n            return;\n        }\n        const ePopup = loadTemplate(/* html */ `<div class=\"ag-menu\" role=\"presentation\"></div>`);\n        let destroySubMenu;\n        if (this.params.subMenu instanceof Array) {\n            const currentLevel = getAriaLevel(this.getGui());\n            const nextLevel = isNaN(currentLevel) ? 1 : (currentLevel + 1);\n            const childMenu = this.createBean(new AgMenuList(nextLevel));\n            childMenu.setParentComponent(this);\n            childMenu.addMenuItems(this.params.subMenu);\n            ePopup.appendChild(childMenu.getGui());\n            // bubble menu item selected events\n            this.addManagedListener(childMenu, AgMenuItemComponent.EVENT_MENU_ITEM_SELECTED, e => this.dispatchEvent(e));\n            childMenu.addGuiEventListener('mouseenter', () => this.cancelDeactivate());\n            destroySubMenu = () => this.destroyBean(childMenu);\n            if (activateFirstItem) {\n                setTimeout(() => childMenu.activateFirstItem(), 0);\n            }\n        }\n        else {\n            const { subMenu } = this.params;\n            const menuPanel = this.createBean(new AgMenuPanel(subMenu));\n            menuPanel.setParentComponent(this);\n            const subMenuGui = menuPanel.getGui();\n            const mouseEvent = 'mouseenter';\n            const mouseEnterListener = () => this.cancelDeactivate();\n            subMenuGui.addEventListener(mouseEvent, mouseEnterListener);\n            destroySubMenu = () => subMenuGui.removeEventListener(mouseEvent, mouseEnterListener);\n            ePopup.appendChild(subMenuGui);\n            if (subMenu.afterGuiAttached) {\n                setTimeout(() => subMenu.afterGuiAttached(), 0);\n            }\n        }\n        const eGui = this.getGui();\n        const positionCallback = this.popupService.positionPopupForMenu.bind(this.popupService, { eventSource: eGui, ePopup });\n        const translate = this.localeService.getLocaleTextFunc();\n        const addPopupRes = this.popupService.addPopup({\n            modal: true,\n            eChild: ePopup,\n            positionCallback: positionCallback,\n            anchorToElement: eGui,\n            ariaLabel: translate('ariaLabelSubMenu', 'SubMenu')\n        });\n        this.subMenuIsOpen = true;\n        setAriaExpanded(eGui, true);\n        this.hideSubMenu = () => {\n            if (addPopupRes) {\n                addPopupRes.hideFunc();\n            }\n            this.subMenuIsOpen = false;\n            setAriaExpanded(eGui, false);\n            destroySubMenu();\n        };\n    }\n    closeSubMenu() {\n        if (!this.hideSubMenu) {\n            return;\n        }\n        this.hideSubMenu();\n        this.hideSubMenu = null;\n        setAriaExpanded(this.getGui(), false);\n    }\n    isSubMenuOpen() {\n        return this.subMenuIsOpen;\n    }\n    activate(openSubMenu) {\n        this.cancelActivate();\n        if (this.params.disabled) {\n            return;\n        }\n        this.isActive = true;\n        this.addCssClass(this.getClassName('active'));\n        this.getGui().focus();\n        if (openSubMenu && this.params.subMenu) {\n            window.setTimeout(() => {\n                if (this.isAlive() && this.isActive) {\n                    this.openSubMenu();\n                }\n            }, 300);\n        }\n        this.onItemActivated();\n    }\n    deactivate() {\n        this.cancelDeactivate();\n        this.removeCssClass(this.getClassName('active'));\n        this.isActive = false;\n        if (this.subMenuIsOpen) {\n            this.hideSubMenu();\n        }\n    }\n    addIcon() {\n        if (!this.params.checked && !this.params.icon && this.params.isCompact) {\n            return;\n        }\n        const icon = loadTemplate(/* html */ `<span ref=\"eIcon\" class=\"${this.getClassName('part')} ${this.getClassName('icon')}\" role=\"presentation\"></span>`);\n        if (this.params.checked) {\n            icon.appendChild(createIconNoSpan('check', this.gridOptionsService));\n        }\n        else if (this.params.icon) {\n            if (isNodeOrElement(this.params.icon)) {\n                icon.appendChild(this.params.icon);\n            }\n            else if (typeof this.params.icon === 'string') {\n                icon.innerHTML = this.params.icon;\n            }\n            else {\n                console.warn('AG Grid: menu item icon must be DOM node or string');\n            }\n        }\n        this.getGui().appendChild(icon);\n    }\n    addName() {\n        if (!this.params.name && this.params.isCompact) {\n            return;\n        }\n        const name = loadTemplate(/* html */ `<span ref=\"eName\" class=\"${this.getClassName('part')} ${this.getClassName('text')}\">${this.params.name || ''}</span>`);\n        this.getGui().appendChild(name);\n    }\n    addTooltip() {\n        if (!this.params.tooltip) {\n            return;\n        }\n        this.tooltip = this.params.tooltip;\n        if (this.gridOptionsService.is('enableBrowserTooltips')) {\n            this.getGui().setAttribute('title', this.tooltip);\n        }\n        else {\n            this.createManagedBean(new CustomTooltipFeature(this));\n        }\n    }\n    getTooltipParams() {\n        return {\n            location: 'menu',\n            value: this.tooltip\n        };\n    }\n    addShortcut() {\n        if (!this.params.shortcut && this.params.isCompact) {\n            return;\n        }\n        const shortcut = loadTemplate(/* html */ `<span ref=\"eShortcut\" class=\"${this.getClassName('part')} ${this.getClassName('shortcut')}\">${this.params.shortcut || ''}</span>`);\n        this.getGui().appendChild(shortcut);\n    }\n    addSubMenu() {\n        if (!this.params.subMenu && this.params.isCompact) {\n            return;\n        }\n        const pointer = loadTemplate(/* html */ `<span ref=\"ePopupPointer\" class=\"${this.getClassName('part')} ${this.getClassName('popup-pointer')}\"></span>`);\n        const eGui = this.getGui();\n        if (this.params.subMenu) {\n            const iconName = this.gridOptionsService.is('enableRtl') ? 'smallLeft' : 'smallRight';\n            setAriaExpanded(eGui, false);\n            pointer.appendChild(createIconNoSpan(iconName, this.gridOptionsService));\n        }\n        eGui.appendChild(pointer);\n    }\n    onItemSelected(event) {\n        if (this.params.action) {\n            this.params.action();\n        }\n        else {\n            this.openSubMenu(event && event.type === 'keydown');\n        }\n        if (this.params.subMenu && !this.params.action) {\n            return;\n        }\n        const e = {\n            type: AgMenuItemComponent.EVENT_MENU_ITEM_SELECTED,\n            action: this.params.action,\n            checked: this.params.checked,\n            cssClasses: this.params.cssClasses,\n            disabled: this.params.disabled,\n            icon: this.params.icon,\n            name: this.params.name,\n            shortcut: this.params.shortcut,\n            subMenu: this.params.subMenu,\n            tooltip: this.params.tooltip,\n            event\n        };\n        this.dispatchEvent(e);\n    }\n    onItemActivated() {\n        const event = {\n            type: AgMenuItemComponent.EVENT_MENU_ITEM_ACTIVATED,\n            menuItem: this,\n        };\n        this.dispatchEvent(event);\n    }\n    cancelActivate() {\n        if (this.activateTimeoutId) {\n            window.clearTimeout(this.activateTimeoutId);\n            this.activateTimeoutId = 0;\n        }\n    }\n    cancelDeactivate() {\n        if (this.deactivateTimeoutId) {\n            window.clearTimeout(this.deactivateTimeoutId);\n            this.deactivateTimeoutId = 0;\n        }\n    }\n    onMouseEnter() {\n        this.cancelDeactivate();\n        if (this.params.isAnotherSubMenuOpen()) {\n            // wait to see if the user enters the open sub-menu\n            this.activateTimeoutId = window.setTimeout(() => this.activate(true), AgMenuItemComponent.ACTIVATION_DELAY);\n        }\n        else {\n            // activate immediately\n            this.activate(true);\n        }\n    }\n    onMouseLeave() {\n        this.cancelActivate();\n        if (this.isSubMenuOpen()) {\n            // wait to see if the user enters the sub-menu\n            this.deactivateTimeoutId = window.setTimeout(() => this.deactivate(), AgMenuItemComponent.ACTIVATION_DELAY);\n        }\n        else {\n            // de-activate immediately\n            this.deactivate();\n        }\n    }\n    getClassName(suffix) {\n        const prefix = this.params.isCompact ? 'ag-compact-menu-option' : 'ag-menu-option';\n        return suffix ? `${prefix}-${suffix}` : prefix;\n    }\n}\nAgMenuItemComponent.EVENT_MENU_ITEM_SELECTED = 'menuItemSelected';\nAgMenuItemComponent.EVENT_MENU_ITEM_ACTIVATED = 'menuItemActivated';\nAgMenuItemComponent.ACTIVATION_DELAY = 80;\n__decorate$W([\n    Autowired('popupService')\n], AgMenuItemComponent.prototype, \"popupService\", void 0);\n__decorate$W([\n    PostConstruct\n], AgMenuItemComponent.prototype, \"init\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$V = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AgPanel extends Component {\n    constructor(config) {\n        super(AgPanel.getTemplate(config));\n        this.closable = true;\n        this.config = config;\n    }\n    static getTemplate(config) {\n        const cssIdentifier = (config && config.cssIdentifier) || 'default';\n        return /* html */ `<div class=\"ag-panel ag-${cssIdentifier}-panel\" tabindex=\"-1\">\n            <div ref=\"eTitleBar\" class=\"ag-panel-title-bar ag-${cssIdentifier}-panel-title-bar ag-unselectable\">\n                <span ref=\"eTitle\" class=\"ag-panel-title-bar-title ag-${cssIdentifier}-panel-title-bar-title\"></span>\n                <div ref=\"eTitleBarButtons\" class=\"ag-panel-title-bar-buttons ag-${cssIdentifier}-panel-title-bar-buttons\"></div>\n            </div>\n            <div ref=\"eContentWrapper\" class=\"ag-panel-content-wrapper ag-${cssIdentifier}-panel-content-wrapper\"></div>\n        </div>`;\n    }\n    postConstruct() {\n        const { component, closable, hideTitleBar, title, minWidth = 250, width, minHeight = 250, height, centered, popup, x, y } = this.config;\n        this.positionableFeature = new PositionableFeature(this.getGui(), {\n            minWidth, width, minHeight, height, centered, x, y, popup,\n            calculateTopBuffer: () => this.positionableFeature.getHeight() - this.getBodyHeight()\n        });\n        this.createManagedBean(this.positionableFeature);\n        const eGui = this.getGui();\n        if (component) {\n            this.setBodyComponent(component);\n        }\n        if (!hideTitleBar) {\n            if (title) {\n                this.setTitle(title);\n            }\n            this.setClosable(closable != null ? closable : this.closable);\n        }\n        else {\n            setDisplayed(this.eTitleBar, false);\n        }\n        this.addManagedListener(this.eTitleBar, 'mousedown', (e) => {\n            const eDocument = this.gridOptionsService.getDocument();\n            if (eGui.contains(e.relatedTarget) ||\n                eGui.contains(eDocument.activeElement) ||\n                this.eTitleBarButtons.contains(e.target)) {\n                e.preventDefault();\n                return;\n            }\n            const focusEl = this.eContentWrapper.querySelector('button, [href], input, select, textarea, [tabindex]');\n            if (focusEl) {\n                focusEl.focus();\n            }\n        });\n        if (popup && this.positionableFeature.isPositioned()) {\n            return;\n        }\n        if (this.renderComponent) {\n            this.renderComponent();\n        }\n        this.positionableFeature.initialisePosition();\n        this.eContentWrapper.style.height = '0';\n    }\n    renderComponent() {\n        const eGui = this.getGui();\n        eGui.focus();\n        this.close = () => {\n            eGui.parentElement.removeChild(eGui);\n            this.destroy();\n        };\n    }\n    getHeight() {\n        return this.positionableFeature.getHeight();\n    }\n    setHeight(height) {\n        this.positionableFeature.setHeight(height);\n    }\n    getWidth() {\n        return this.positionableFeature.getWidth();\n    }\n    setWidth(width) {\n        this.positionableFeature.setWidth(width);\n    }\n    setClosable(closable) {\n        if (closable !== this.closable) {\n            this.closable = closable;\n        }\n        if (closable) {\n            const closeButtonComp = this.closeButtonComp = new Component(AgPanel.CLOSE_BTN_TEMPLATE);\n            this.getContext().createBean(closeButtonComp);\n            const eGui = closeButtonComp.getGui();\n            const child = createIconNoSpan('close', this.gridOptionsService);\n            child.classList.add('ag-panel-title-bar-button-icon');\n            eGui.appendChild(child);\n            this.addTitleBarButton(closeButtonComp);\n            closeButtonComp.addManagedListener(eGui, 'click', this.onBtClose.bind(this));\n        }\n        else if (this.closeButtonComp) {\n            const eGui = this.closeButtonComp.getGui();\n            eGui.parentElement.removeChild(eGui);\n            this.closeButtonComp = this.destroyBean(this.closeButtonComp);\n        }\n    }\n    setBodyComponent(bodyComponent) {\n        bodyComponent.setParentComponent(this);\n        this.eContentWrapper.appendChild(bodyComponent.getGui());\n    }\n    addTitleBarButton(button, position) {\n        const eTitleBarButtons = this.eTitleBarButtons;\n        const buttons = eTitleBarButtons.children;\n        const len = buttons.length;\n        if (position == null) {\n            position = len;\n        }\n        position = Math.max(0, Math.min(position, len));\n        button.addCssClass('ag-panel-title-bar-button');\n        const eGui = button.getGui();\n        if (position === 0) {\n            eTitleBarButtons.insertAdjacentElement('afterbegin', eGui);\n        }\n        else if (position === len) {\n            eTitleBarButtons.insertAdjacentElement('beforeend', eGui);\n        }\n        else {\n            buttons[position - 1].insertAdjacentElement('afterend', eGui);\n        }\n        button.setParentComponent(this);\n    }\n    getBodyHeight() {\n        return getInnerHeight(this.eContentWrapper);\n    }\n    getBodyWidth() {\n        return getInnerWidth(this.eContentWrapper);\n    }\n    setTitle(title) {\n        this.eTitle.innerText = title;\n    }\n    // called when user hits the 'x' in the top right\n    onBtClose() {\n        this.close();\n    }\n    destroy() {\n        if (this.closeButtonComp) {\n            this.closeButtonComp = this.destroyBean(this.closeButtonComp);\n        }\n        const eGui = this.getGui();\n        if (eGui && eGui.offsetParent) {\n            this.close();\n        }\n        super.destroy();\n    }\n}\nAgPanel.CLOSE_BTN_TEMPLATE = `<div class=\"ag-button\"></div>`;\n__decorate$V([\n    RefSelector('eContentWrapper')\n], AgPanel.prototype, \"eContentWrapper\", void 0);\n__decorate$V([\n    RefSelector('eTitleBar')\n], AgPanel.prototype, \"eTitleBar\", void 0);\n__decorate$V([\n    RefSelector('eTitleBarButtons')\n], AgPanel.prototype, \"eTitleBarButtons\", void 0);\n__decorate$V([\n    RefSelector('eTitle')\n], AgPanel.prototype, \"eTitle\", void 0);\n__decorate$V([\n    PostConstruct\n], AgPanel.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$U = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AgDialog extends AgPanel {\n    constructor(config) {\n        super(Object.assign(Object.assign({}, config), { popup: true }));\n        this.isMaximizable = false;\n        this.isMaximized = false;\n        this.maximizeListeners = [];\n        this.resizeListenerDestroy = null;\n        this.lastPosition = {\n            x: 0,\n            y: 0,\n            width: 0,\n            height: 0\n        };\n    }\n    postConstruct() {\n        const eGui = this.getGui();\n        const { movable, resizable, maximizable } = this.config;\n        this.addCssClass('ag-dialog');\n        super.postConstruct();\n        this.addManagedListener(eGui, 'focusin', (e) => {\n            if (eGui.contains(e.relatedTarget)) {\n                return;\n            }\n            this.popupService.bringPopupToFront(eGui);\n        });\n        if (movable) {\n            this.setMovable(movable);\n        }\n        if (maximizable) {\n            this.setMaximizable(maximizable);\n        }\n        if (resizable) {\n            this.setResizable(resizable);\n        }\n    }\n    renderComponent() {\n        const eGui = this.getGui();\n        const { alwaysOnTop, modal, title } = this.config;\n        const translate = this.localeService.getLocaleTextFunc();\n        const addPopupRes = this.popupService.addPopup({\n            modal,\n            eChild: eGui,\n            closeOnEsc: true,\n            closedCallback: this.destroy.bind(this),\n            alwaysOnTop,\n            ariaLabel: title || translate('ariaLabelDialog', 'Dialog')\n        });\n        if (addPopupRes) {\n            this.close = addPopupRes.hideFunc;\n        }\n    }\n    toggleMaximize() {\n        const position = this.positionableFeature.getPosition();\n        if (this.isMaximized) {\n            const { x, y, width, height } = this.lastPosition;\n            this.setWidth(width);\n            this.setHeight(height);\n            this.positionableFeature.offsetElement(x, y);\n        }\n        else {\n            this.lastPosition.width = this.getWidth();\n            this.lastPosition.height = this.getHeight();\n            this.lastPosition.x = position.x;\n            this.lastPosition.y = position.y;\n            this.positionableFeature.offsetElement(0, 0);\n            this.setHeight('100%');\n            this.setWidth('100%');\n        }\n        this.isMaximized = !this.isMaximized;\n        this.refreshMaximizeIcon();\n    }\n    refreshMaximizeIcon() {\n        setDisplayed(this.maximizeIcon, !this.isMaximized);\n        setDisplayed(this.minimizeIcon, this.isMaximized);\n    }\n    clearMaximizebleListeners() {\n        if (this.maximizeListeners.length) {\n            this.maximizeListeners.forEach(destroyListener => destroyListener());\n            this.maximizeListeners.length = 0;\n        }\n        if (this.resizeListenerDestroy) {\n            this.resizeListenerDestroy();\n            this.resizeListenerDestroy = null;\n        }\n    }\n    destroy() {\n        this.maximizeButtonComp = this.destroyBean(this.maximizeButtonComp);\n        this.clearMaximizebleListeners();\n        super.destroy();\n    }\n    setResizable(resizable) {\n        this.positionableFeature.setResizable(resizable);\n    }\n    setMovable(movable) {\n        this.positionableFeature.setMovable(movable, this.eTitleBar);\n    }\n    setMaximizable(maximizable) {\n        if (!maximizable) {\n            this.clearMaximizebleListeners();\n            if (this.maximizeButtonComp) {\n                this.destroyBean(this.maximizeButtonComp);\n                this.maximizeButtonComp = this.maximizeIcon = this.minimizeIcon = undefined;\n            }\n            return;\n        }\n        const eTitleBar = this.eTitleBar;\n        if (!eTitleBar || maximizable === this.isMaximizable) {\n            return;\n        }\n        const maximizeButtonComp = this.buildMaximizeAndMinimizeElements();\n        this.refreshMaximizeIcon();\n        maximizeButtonComp.addManagedListener(maximizeButtonComp.getGui(), 'click', this.toggleMaximize.bind(this));\n        this.addTitleBarButton(maximizeButtonComp, 0);\n        this.maximizeListeners.push(this.addManagedListener(eTitleBar, 'dblclick', this.toggleMaximize.bind(this)));\n        this.resizeListenerDestroy = this.addManagedListener(this, 'resize', () => {\n            this.isMaximized = false;\n            this.refreshMaximizeIcon();\n        });\n    }\n    buildMaximizeAndMinimizeElements() {\n        const maximizeButtonComp = this.maximizeButtonComp =\n            this.createBean(new Component(/* html */ `<div class=\"ag-dialog-button\"></span>`));\n        const eGui = maximizeButtonComp.getGui();\n        this.maximizeIcon = createIconNoSpan('maximize', this.gridOptionsService);\n        eGui.appendChild(this.maximizeIcon);\n        this.maximizeIcon.classList.add('ag-panel-title-bar-button-icon');\n        this.minimizeIcon = createIconNoSpan('minimize', this.gridOptionsService);\n        eGui.appendChild(this.minimizeIcon);\n        this.minimizeIcon.classList.add('ag-panel-title-bar-button-icon');\n        return maximizeButtonComp;\n    }\n}\n__decorate$U([\n    Autowired('popupService')\n], AgDialog.prototype, \"popupService\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$T = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar FocusService_1;\nlet FocusService = FocusService_1 = class FocusService extends BeanStub {\n    /**\n     * Adds a gridCore to the list of the gridCores monitoring Keyboard Mode\n     * in a specific HTMLDocument.\n     *\n     * @param doc {Document} - The Document containing the gridCore.\n     * @param gridCore {GridComp} - The GridCore to be monitored.\n     */\n    static addKeyboardModeEvents(doc, controller) {\n        const docControllers = FocusService_1.instancesMonitored.get(doc);\n        if (docControllers && docControllers.length > 0) {\n            if (docControllers.indexOf(controller) === -1) {\n                docControllers.push(controller);\n            }\n        }\n        else {\n            FocusService_1.instancesMonitored.set(doc, [controller]);\n            doc.addEventListener('keydown', FocusService_1.toggleKeyboardMode);\n            doc.addEventListener('mousedown', FocusService_1.toggleKeyboardMode);\n        }\n    }\n    /**\n     * Removes a gridCore from the list of the gridCores monitoring Keyboard Mode\n     * in a specific HTMLDocument.\n     *\n     * @param doc {Document} - The Document containing the gridCore.\n     * @param gridCore {GridComp} - The GridCore to be removed.\n     */\n    static removeKeyboardModeEvents(doc, controller) {\n        const docControllers = FocusService_1.instancesMonitored.get(doc);\n        let newControllers = [];\n        if (docControllers && docControllers.length) {\n            newControllers = [...docControllers].filter(currentGridCore => currentGridCore !== controller);\n            FocusService_1.instancesMonitored.set(doc, newControllers);\n        }\n        if (newControllers.length === 0) {\n            doc.removeEventListener('keydown', FocusService_1.toggleKeyboardMode);\n            doc.removeEventListener('mousedown', FocusService_1.toggleKeyboardMode);\n        }\n    }\n    /**\n     * This method will be called by `keydown` and `mousedown` events on all Documents monitoring\n     * KeyboardMode. It will then fire a KEYBOARD_FOCUS, MOUSE_FOCUS on each gridCore present in\n     * the Document allowing each gridCore to maintain a state for KeyboardMode.\n     *\n     * @param event {KeyboardEvent | MouseEvent | TouchEvent} - The event triggered.\n     */\n    static toggleKeyboardMode(event) {\n        const isKeyboardActive = FocusService_1.keyboardModeActive;\n        const isKeyboardEvent = event.type === 'keydown';\n        if (isKeyboardEvent) {\n            // the following keys should not toggle keyboard mode.\n            if (event.ctrlKey || event.metaKey || event.altKey) {\n                return;\n            }\n        }\n        if (isKeyboardActive && isKeyboardEvent || !isKeyboardActive && !isKeyboardEvent) {\n            return;\n        }\n        FocusService_1.keyboardModeActive = isKeyboardEvent;\n        const doc = event.target.ownerDocument;\n        if (!doc) {\n            return;\n        }\n        const controllersForDoc = FocusService_1.instancesMonitored.get(doc);\n        if (controllersForDoc) {\n            controllersForDoc.forEach(controller => {\n                controller.dispatchEvent({ type: isKeyboardEvent ? Events.EVENT_KEYBOARD_FOCUS : Events.EVENT_MOUSE_FOCUS });\n            });\n        }\n    }\n    init() {\n        const clearFocusedCellListener = this.clearFocusedCell.bind(this);\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, clearFocusedCellListener);\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, this.onColumnEverythingChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_GROUP_OPENED, clearFocusedCellListener);\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, clearFocusedCellListener);\n        this.ctrlsService.whenReady(p => {\n            this.gridCtrl = p.gridCtrl;\n            const doc = this.gridOptionsService.getDocument();\n            FocusService_1.addKeyboardModeEvents(doc, this.gridCtrl);\n            this.addDestroyFunc(() => this.unregisterGridCompController(this.gridCtrl));\n        });\n    }\n    unregisterGridCompController(gridCompController) {\n        const doc = this.gridOptionsService.getDocument();\n        FocusService_1.removeKeyboardModeEvents(doc, gridCompController);\n    }\n    onColumnEverythingChanged() {\n        // if the columns change, check and see if this column still exists. if it does, then\n        // we can keep the focused cell. if it doesn't, then we need to drop the focused cell.\n        if (!this.focusedCellPosition) {\n            return;\n        }\n        const col = this.focusedCellPosition.column;\n        const colFromColumnModel = this.columnModel.getGridColumn(col.getId());\n        if (col !== colFromColumnModel) {\n            this.clearFocusedCell();\n        }\n    }\n    isKeyboardMode() {\n        return FocusService_1.keyboardModeActive;\n    }\n    // we check if the browser is focusing something, and if it is, and\n    // it's the cell we think is focused, then return the cell. so this\n    // methods returns the cell if a) we think it has focus and b) the\n    // browser thinks it has focus. this then returns nothing if we\n    // first focus a cell, then second click outside the grid, as then the\n    // grid cell will still be focused as far as the grid is concerned,\n    // however the browser focus will have moved somewhere else.\n    getFocusCellToUseAfterRefresh() {\n        const eDocument = this.gridOptionsService.getDocument();\n        if (this.gridOptionsService.is('suppressFocusAfterRefresh') || !this.focusedCellPosition) {\n            return null;\n        }\n        // we check that the browser is actually focusing on the grid, if it is not, then\n        // we have nothing to worry about. we check for ROW data, as this covers both focused Rows (for Full Width Rows)\n        // and Cells (covers cells as cells live in rows)\n        if (this.isDomDataMissingInHierarchy(eDocument.activeElement, RowCtrl.DOM_DATA_KEY_ROW_CTRL)) {\n            return null;\n        }\n        return this.focusedCellPosition;\n    }\n    getFocusHeaderToUseAfterRefresh() {\n        const eDocument = this.gridOptionsService.getDocument();\n        if (this.gridOptionsService.is('suppressFocusAfterRefresh') || !this.focusedHeaderPosition) {\n            return null;\n        }\n        // we check that the browser is actually focusing on the grid, if it is not, then\n        // we have nothing to worry about\n        if (this.isDomDataMissingInHierarchy(eDocument.activeElement, AbstractHeaderCellCtrl.DOM_DATA_KEY_HEADER_CTRL)) {\n            return null;\n        }\n        return this.focusedHeaderPosition;\n    }\n    isDomDataMissingInHierarchy(eBrowserCell, key) {\n        let ePointer = eBrowserCell;\n        while (ePointer) {\n            const data = this.gridOptionsService.getDomData(ePointer, key);\n            if (data) {\n                return false;\n            }\n            ePointer = ePointer.parentNode;\n        }\n        return true;\n    }\n    getFocusedCell() {\n        return this.focusedCellPosition;\n    }\n    getFocusEventParams() {\n        const { rowIndex, rowPinned, column } = this.focusedCellPosition;\n        const params = {\n            rowIndex: rowIndex,\n            rowPinned: rowPinned,\n            column: column,\n            isFullWidthCell: false\n        };\n        const rowCtrl = this.rowRenderer.getRowByPosition({ rowIndex, rowPinned });\n        if (rowCtrl) {\n            params.isFullWidthCell = rowCtrl.isFullWidth();\n        }\n        return params;\n    }\n    clearFocusedCell() {\n        if (this.focusedCellPosition == null) {\n            return;\n        }\n        const event = Object.assign({ type: Events.EVENT_CELL_FOCUS_CLEARED }, this.getFocusEventParams());\n        this.focusedCellPosition = null;\n        this.eventService.dispatchEvent(event);\n    }\n    setFocusedCell(params) {\n        const { column, rowIndex, rowPinned, forceBrowserFocus = false, preventScrollOnBrowserFocus = false } = params;\n        const gridColumn = this.columnModel.getGridColumn(column);\n        // if column doesn't exist, then blank the focused cell and return. this can happen when user sets new columns,\n        // and the focused cell is in a column that no longer exists. after columns change, the grid refreshes and tries\n        // to re-focus the focused cell.\n        if (!gridColumn) {\n            this.focusedCellPosition = null;\n            return;\n        }\n        this.focusedCellPosition = gridColumn ? {\n            rowIndex: rowIndex,\n            rowPinned: makeNull(rowPinned),\n            column: gridColumn\n        } : null;\n        const event = Object.assign(Object.assign({ type: Events.EVENT_CELL_FOCUSED }, this.getFocusEventParams()), { forceBrowserFocus,\n            preventScrollOnBrowserFocus, floating: null });\n        this.eventService.dispatchEvent(event);\n    }\n    isCellFocused(cellPosition) {\n        if (this.focusedCellPosition == null) {\n            return false;\n        }\n        return this.focusedCellPosition.column === cellPosition.column &&\n            this.isRowFocused(cellPosition.rowIndex, cellPosition.rowPinned);\n    }\n    isRowNodeFocused(rowNode) {\n        return this.isRowFocused(rowNode.rowIndex, rowNode.rowPinned);\n    }\n    isHeaderWrapperFocused(headerCtrl) {\n        if (this.focusedHeaderPosition == null) {\n            return false;\n        }\n        const column = headerCtrl.getColumnGroupChild();\n        const headerRowIndex = headerCtrl.getRowIndex();\n        const pinned = headerCtrl.getPinned();\n        const { column: focusedColumn, headerRowIndex: focusedHeaderRowIndex } = this.focusedHeaderPosition;\n        return column === focusedColumn &&\n            headerRowIndex === focusedHeaderRowIndex &&\n            pinned == focusedColumn.getPinned();\n    }\n    clearFocusedHeader() {\n        this.focusedHeaderPosition = null;\n    }\n    getFocusedHeader() {\n        return this.focusedHeaderPosition;\n    }\n    setFocusedHeader(headerRowIndex, column) {\n        this.focusedHeaderPosition = { headerRowIndex, column };\n    }\n    focusHeaderPosition(params) {\n        const { direction, fromTab, allowUserOverride, event } = params;\n        let { headerPosition } = params;\n        if (allowUserOverride) {\n            const currentPosition = this.getFocusedHeader();\n            const headerRowCount = this.headerNavigationService.getHeaderRowCount();\n            if (fromTab) {\n                const userFunc = this.gridOptionsService.getCallback('tabToNextHeader');\n                if (userFunc) {\n                    const params = {\n                        backwards: direction === 'Before',\n                        previousHeaderPosition: currentPosition,\n                        nextHeaderPosition: headerPosition,\n                        headerRowCount,\n                    };\n                    headerPosition = userFunc(params);\n                }\n            }\n            else {\n                const userFunc = this.gridOptionsService.getCallback('navigateToNextHeader');\n                if (userFunc && event) {\n                    const params = {\n                        key: event.key,\n                        previousHeaderPosition: currentPosition,\n                        nextHeaderPosition: headerPosition,\n                        headerRowCount,\n                        event,\n                    };\n                    headerPosition = userFunc(params);\n                }\n            }\n        }\n        if (!headerPosition) {\n            return false;\n        }\n        if (headerPosition.headerRowIndex === -1) {\n            return this.focusGridView(headerPosition.column);\n        }\n        this.headerNavigationService.scrollToColumn(headerPosition.column, direction);\n        const headerRowContainerCtrl = this.ctrlsService.getHeaderRowContainerCtrl(headerPosition.column.getPinned());\n        // this will automatically call the setFocusedHeader method above\n        const focusSuccess = headerRowContainerCtrl.focusHeader(headerPosition.headerRowIndex, headerPosition.column, event);\n        return focusSuccess;\n    }\n    focusFirstHeader() {\n        let firstColumn = this.columnModel.getAllDisplayedColumns()[0];\n        if (!firstColumn) {\n            return false;\n        }\n        if (firstColumn.getParent()) {\n            firstColumn = this.columnModel.getColumnGroupAtLevel(firstColumn, 0);\n        }\n        return this.focusHeaderPosition({\n            headerPosition: { headerRowIndex: 0, column: firstColumn }\n        });\n    }\n    focusLastHeader(event) {\n        const headerRowIndex = this.headerNavigationService.getHeaderRowCount() - 1;\n        const column = last(this.columnModel.getAllDisplayedColumns());\n        return this.focusHeaderPosition({\n            headerPosition: { headerRowIndex, column },\n            event\n        });\n    }\n    isAnyCellFocused() {\n        return !!this.focusedCellPosition;\n    }\n    isRowFocused(rowIndex, floating) {\n        if (this.focusedCellPosition == null) {\n            return false;\n        }\n        return this.focusedCellPosition.rowIndex === rowIndex && this.focusedCellPosition.rowPinned === makeNull(floating);\n    }\n    findFocusableElements(rootNode, exclude, onlyUnmanaged = false) {\n        const focusableString = FOCUSABLE_SELECTOR;\n        let excludeString = FOCUSABLE_EXCLUDE;\n        if (exclude) {\n            excludeString += ', ' + exclude;\n        }\n        if (onlyUnmanaged) {\n            excludeString += ', [tabindex=\"-1\"]';\n        }\n        const nodes = Array.prototype.slice.apply(rootNode.querySelectorAll(focusableString));\n        const excludeNodes = Array.prototype.slice.apply(rootNode.querySelectorAll(excludeString));\n        if (!excludeNodes.length) {\n            return nodes;\n        }\n        const diff = (a, b) => a.filter(element => b.indexOf(element) === -1);\n        return diff(nodes, excludeNodes);\n    }\n    focusInto(rootNode, up = false, onlyUnmanaged = false) {\n        const focusableElements = this.findFocusableElements(rootNode, null, onlyUnmanaged);\n        const toFocus = up ? last(focusableElements) : focusableElements[0];\n        if (toFocus) {\n            toFocus.focus({ preventScroll: true });\n            return true;\n        }\n        return false;\n    }\n    findFocusableElementBeforeTabGuard(rootNode, referenceElement) {\n        if (!referenceElement) {\n            return null;\n        }\n        const focusableElements = this.findFocusableElements(rootNode);\n        const referenceIndex = focusableElements.indexOf(referenceElement);\n        if (referenceIndex === -1) {\n            return null;\n        }\n        let lastTabGuardIndex = -1;\n        for (let i = referenceIndex - 1; i >= 0; i--) {\n            if (focusableElements[i].classList.contains(TabGuardClassNames.TAB_GUARD_TOP)) {\n                lastTabGuardIndex = i;\n                break;\n            }\n        }\n        if (lastTabGuardIndex <= 0) {\n            return null;\n        }\n        return focusableElements[lastTabGuardIndex - 1];\n    }\n    findNextFocusableElement(rootNode = this.eGridDiv, onlyManaged, backwards) {\n        const focusable = this.findFocusableElements(rootNode, onlyManaged ? ':not([tabindex=\"-1\"])' : null);\n        const eDocument = this.gridOptionsService.getDocument();\n        const activeEl = eDocument.activeElement;\n        let currentIndex;\n        if (onlyManaged) {\n            currentIndex = focusable.findIndex(el => el.contains(activeEl));\n        }\n        else {\n            currentIndex = focusable.indexOf(activeEl);\n        }\n        const nextIndex = currentIndex + (backwards ? -1 : 1);\n        if (nextIndex < 0 || nextIndex >= focusable.length) {\n            return null;\n        }\n        return focusable[nextIndex];\n    }\n    isTargetUnderManagedComponent(rootNode, target) {\n        if (!target) {\n            return false;\n        }\n        const managedContainers = rootNode.querySelectorAll(`.${ManagedFocusFeature.FOCUS_MANAGED_CLASS}`);\n        if (!managedContainers.length) {\n            return false;\n        }\n        for (let i = 0; i < managedContainers.length; i++) {\n            if (managedContainers[i].contains(target)) {\n                return true;\n            }\n        }\n        return false;\n    }\n    findTabbableParent(node, limit = 5) {\n        let counter = 0;\n        while (node && getTabIndex(node) === null && ++counter <= limit) {\n            node = node.parentElement;\n        }\n        if (getTabIndex(node) === null) {\n            return null;\n        }\n        return node;\n    }\n    focusGridView(column, backwards) {\n        // if suppressCellFocus is `true`, it means the user does not want to\n        // navigate between the cells using tab. Instead, we put focus on either\n        // the header or after the grid, depending on whether tab or shift-tab was pressed.\n        if (this.gridOptionsService.is('suppressCellFocus')) {\n            if (backwards) {\n                return this.focusLastHeader();\n            }\n            return this.focusNextGridCoreContainer(false);\n        }\n        const nextRow = backwards\n            ? this.rowPositionUtils.getLastRow()\n            : this.rowPositionUtils.getFirstRow();\n        if (!nextRow) {\n            return false;\n        }\n        const { rowIndex, rowPinned } = nextRow;\n        const focusedHeader = this.getFocusedHeader();\n        if (!column && focusedHeader) {\n            column = focusedHeader.column;\n        }\n        if (rowIndex == null || !column) {\n            return false;\n        }\n        this.navigationService.ensureCellVisible({ rowIndex, column, rowPinned });\n        this.setFocusedCell({\n            rowIndex,\n            column,\n            rowPinned: makeNull(rowPinned),\n            forceBrowserFocus: true\n        });\n        if (this.rangeService) {\n            const cellPosition = { rowIndex, rowPinned, column };\n            this.rangeService.setRangeToCell(cellPosition);\n        }\n        return true;\n    }\n    focusNextGridCoreContainer(backwards, forceOut = false) {\n        if (!forceOut && this.gridCtrl.focusNextInnerContainer(backwards)) {\n            return true;\n        }\n        if (forceOut || (!backwards && !this.gridCtrl.isDetailGrid())) {\n            this.gridCtrl.forceFocusOutOfContainer(backwards);\n        }\n        return false;\n    }\n};\nFocusService.AG_KEYBOARD_FOCUS = 'ag-keyboard-focus';\nFocusService.keyboardModeActive = false;\nFocusService.instancesMonitored = new Map();\n__decorate$T([\n    Autowired('eGridDiv')\n], FocusService.prototype, \"eGridDiv\", void 0);\n__decorate$T([\n    Autowired('columnModel')\n], FocusService.prototype, \"columnModel\", void 0);\n__decorate$T([\n    Autowired('headerNavigationService')\n], FocusService.prototype, \"headerNavigationService\", void 0);\n__decorate$T([\n    Autowired('rowRenderer')\n], FocusService.prototype, \"rowRenderer\", void 0);\n__decorate$T([\n    Autowired('rowPositionUtils')\n], FocusService.prototype, \"rowPositionUtils\", void 0);\n__decorate$T([\n    Optional('rangeService')\n], FocusService.prototype, \"rangeService\", void 0);\n__decorate$T([\n    Autowired('navigationService')\n], FocusService.prototype, \"navigationService\", void 0);\n__decorate$T([\n    Autowired('ctrlsService')\n], FocusService.prototype, \"ctrlsService\", void 0);\n__decorate$T([\n    PostConstruct\n], FocusService.prototype, \"init\", null);\nFocusService = FocusService_1 = __decorate$T([\n    Bean('focusService')\n], FocusService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$S = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PopupService_1;\nvar DIRECTION;\n(function (DIRECTION) {\n    DIRECTION[DIRECTION[\"vertical\"] = 0] = \"vertical\";\n    DIRECTION[DIRECTION[\"horizontal\"] = 1] = \"horizontal\";\n})(DIRECTION || (DIRECTION = {}));\nlet instanceIdSeq = 0;\nlet PopupService = PopupService_1 = class PopupService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.popupList = [];\n    }\n    postConstruct() {\n        this.ctrlsService.whenReady(p => {\n            this.gridCtrl = p.gridCtrl;\n            this.addManagedListener(this.gridCtrl, Events.EVENT_KEYBOARD_FOCUS, () => {\n                this.popupList.forEach(popup => popup.element.classList.add(FocusService.AG_KEYBOARD_FOCUS));\n            });\n            this.addManagedListener(this.gridCtrl, Events.EVENT_MOUSE_FOCUS, () => {\n                this.popupList.forEach(popup => popup.element.classList.remove(FocusService.AG_KEYBOARD_FOCUS));\n            });\n        });\n    }\n    getPopupParent() {\n        const ePopupParent = this.gridOptionsService.get('popupParent');\n        if (ePopupParent) {\n            return ePopupParent;\n        }\n        return this.gridCtrl.getGui();\n    }\n    positionPopupForMenu(params) {\n        const sourceRect = params.eventSource.getBoundingClientRect();\n        const parentRect = this.getParentRect();\n        const y = this.keepXYWithinBounds(params.ePopup, sourceRect.top - parentRect.top, DIRECTION.vertical);\n        const minWidth = (params.ePopup.clientWidth > 0) ? params.ePopup.clientWidth : 200;\n        params.ePopup.style.minWidth = `${minWidth}px`;\n        const widthOfParent = parentRect.right - parentRect.left;\n        const maxX = widthOfParent - minWidth;\n        // the x position of the popup depends on RTL or LTR. for normal cases, LTR, we put the child popup\n        // to the right, unless it doesn't fit and we then put it to the left. for RTL it's the other way around,\n        // we try place it first to the left, and then if not to the right.\n        let x;\n        if (this.gridOptionsService.is('enableRtl')) {\n            // for RTL, try left first\n            x = xLeftPosition();\n            if (x < 0) {\n                x = xRightPosition();\n            }\n            if (x > maxX) {\n                x = 0;\n            }\n        }\n        else {\n            // for LTR, try right first\n            x = xRightPosition();\n            if (x > maxX) {\n                x = xLeftPosition();\n            }\n            if (x < 0) {\n                x = 0;\n            }\n        }\n        params.ePopup.style.left = `${x}px`;\n        params.ePopup.style.top = `${y}px`;\n        function xRightPosition() {\n            return sourceRect.right - parentRect.left - 2;\n        }\n        function xLeftPosition() {\n            return sourceRect.left - parentRect.left - minWidth;\n        }\n    }\n    positionPopupUnderMouseEvent(params) {\n        const { ePopup, nudgeX, nudgeY, skipObserver } = params;\n        this.positionPopup({\n            ePopup: ePopup,\n            nudgeX,\n            nudgeY,\n            keepWithinBounds: true,\n            skipObserver,\n            updatePosition: () => this.calculatePointerAlign(params.mouseEvent),\n            postProcessCallback: () => this.callPostProcessPopup(params.type, params.ePopup, null, params.mouseEvent, params.column, params.rowNode)\n        });\n    }\n    calculatePointerAlign(e) {\n        const parentRect = this.getParentRect();\n        return {\n            x: e.clientX - parentRect.left,\n            y: e.clientY - parentRect.top\n        };\n    }\n    positionPopupByComponent(params) {\n        const sourceRect = params.eventSource.getBoundingClientRect();\n        const alignSide = params.alignSide || 'left';\n        const position = params.position || 'over';\n        const parentRect = this.getParentRect();\n        const updatePosition = () => {\n            let x = sourceRect.left - parentRect.left;\n            if (alignSide === 'right') {\n                x -= (params.ePopup.offsetWidth - sourceRect.width);\n            }\n            const y = position === 'over'\n                ? (sourceRect.top - parentRect.top)\n                : (sourceRect.top - parentRect.top + sourceRect.height);\n            return { x, y };\n        };\n        this.positionPopup({\n            ePopup: params.ePopup,\n            nudgeX: params.nudgeX,\n            nudgeY: params.nudgeY,\n            keepWithinBounds: params.keepWithinBounds,\n            updatePosition,\n            postProcessCallback: () => this.callPostProcessPopup(params.type, params.ePopup, params.eventSource, null, params.column, params.rowNode)\n        });\n    }\n    callPostProcessPopup(type, ePopup, eventSource, mouseEvent, column, rowNode) {\n        const callback = this.gridOptionsService.getCallback('postProcessPopup');\n        if (callback) {\n            const params = {\n                column: column,\n                rowNode: rowNode,\n                ePopup: ePopup,\n                type: type,\n                eventSource: eventSource,\n                mouseEvent: mouseEvent\n            };\n            callback(params);\n        }\n    }\n    positionPopup(params) {\n        const { ePopup, keepWithinBounds, nudgeX, nudgeY, skipObserver, updatePosition } = params;\n        const lastSize = { width: 0, height: 0 };\n        const updatePopupPosition = (fromResizeObserver = false) => {\n            let { x, y } = updatePosition();\n            if (fromResizeObserver &&\n                ePopup.clientWidth === lastSize.width &&\n                ePopup.clientHeight === lastSize.height) {\n                return;\n            }\n            lastSize.width = ePopup.clientWidth;\n            lastSize.height = ePopup.clientHeight;\n            if (nudgeX) {\n                x += nudgeX;\n            }\n            if (nudgeY) {\n                y += nudgeY;\n            }\n            // if popup is overflowing to the bottom, move it up\n            if (keepWithinBounds) {\n                x = this.keepXYWithinBounds(ePopup, x, DIRECTION.horizontal);\n                y = this.keepXYWithinBounds(ePopup, y, DIRECTION.vertical);\n            }\n            ePopup.style.left = `${x}px`;\n            ePopup.style.top = `${y}px`;\n            if (params.postProcessCallback) {\n                params.postProcessCallback();\n            }\n        };\n        updatePopupPosition();\n        // Mouse tracking will recalculate positioning when moving, so won't need to recalculate here\n        if (!skipObserver) {\n            // Since rendering popup contents can be asynchronous, use a resize observer to\n            // reposition the popup after initial updates to the size of the contents\n            const resizeObserverDestroyFunc = this.resizeObserverService.observeResize(ePopup, () => updatePopupPosition(true));\n            // Only need to reposition when first open, so can clean up after a bit of time\n            setTimeout(() => resizeObserverDestroyFunc(), PopupService_1.WAIT_FOR_POPUP_CONTENT_RESIZE);\n        }\n    }\n    getActivePopups() {\n        return this.popupList.map((popup) => popup.element);\n    }\n    getPopupList() {\n        return this.popupList;\n    }\n    getParentRect() {\n        // subtract the popup parent borders, because popupParent.getBoundingClientRect\n        // returns the rect outside the borders, but the 0,0 coordinate for absolute\n        // positioning is inside the border, leading the popup to be off by the width\n        // of the border\n        const eDocument = this.gridOptionsService.getDocument();\n        let popupParent = this.getPopupParent();\n        if (popupParent === eDocument.body) {\n            popupParent = eDocument.documentElement;\n        }\n        else if (getComputedStyle(popupParent).position === 'static') {\n            popupParent = popupParent.offsetParent;\n        }\n        const style = getComputedStyle(popupParent);\n        const bounds = popupParent.getBoundingClientRect();\n        return {\n            top: bounds.top + parseFloat(style.borderTopWidth) || 0,\n            left: bounds.left + parseFloat(style.borderLeftWidth) || 0,\n            right: bounds.right + parseFloat(style.borderRightWidth) || 0,\n            bottom: bounds.bottom + parseFloat(style.borderBottomWidth) || 0,\n        };\n    }\n    keepXYWithinBounds(ePopup, position, direction) {\n        const isVertical = direction === DIRECTION.vertical;\n        const sizeProperty = isVertical ? 'clientHeight' : 'clientWidth';\n        const anchorProperty = isVertical ? 'top' : 'left';\n        const offsetProperty = isVertical ? 'offsetHeight' : 'offsetWidth';\n        const scrollPositionProperty = isVertical ? 'scrollTop' : 'scrollLeft';\n        const eDocument = this.gridOptionsService.getDocument();\n        const docElement = eDocument.documentElement;\n        const popupParent = this.getPopupParent();\n        const parentRect = popupParent.getBoundingClientRect();\n        const documentRect = eDocument.documentElement.getBoundingClientRect();\n        const isBody = popupParent === eDocument.body;\n        const offsetSize = ePopup[offsetProperty];\n        const getSize = isVertical ? getAbsoluteHeight : getAbsoluteWidth;\n        let sizeOfParent = isBody ? (getSize(docElement) + docElement[scrollPositionProperty]) : popupParent[sizeProperty];\n        if (isBody) {\n            sizeOfParent -= Math.abs(documentRect[anchorProperty] - parentRect[anchorProperty]);\n        }\n        const max = sizeOfParent - offsetSize;\n        return Math.min(Math.max(position, 0), Math.abs(max));\n    }\n    addPopup(params) {\n        const eDocument = this.gridOptionsService.getDocument();\n        const { eChild, ariaLabel, alwaysOnTop, positionCallback, anchorToElement } = params;\n        if (!eDocument) {\n            console.warn('AG Grid: could not find the document, document is empty');\n            return { hideFunc: () => { } };\n        }\n        const pos = this.popupList.findIndex(popup => popup.element === eChild);\n        if (pos !== -1) {\n            const popup = this.popupList[pos];\n            return { hideFunc: popup.hideFunc };\n        }\n        this.initialisePopupPosition(eChild);\n        const wrapperEl = this.createPopupWrapper(eChild, ariaLabel, !!alwaysOnTop);\n        const removeListeners = this.addEventListenersToPopup(Object.assign(Object.assign({}, params), { wrapperEl }));\n        if (positionCallback) {\n            positionCallback();\n        }\n        this.addPopupToPopupList(eChild, wrapperEl, removeListeners, anchorToElement);\n        return {\n            hideFunc: removeListeners\n        };\n    }\n    initialisePopupPosition(element) {\n        const ePopupParent = this.getPopupParent();\n        const ePopupParentRect = ePopupParent.getBoundingClientRect();\n        if (!exists(element.style.top)) {\n            element.style.top = `${ePopupParentRect.top * -1}px`;\n        }\n        if (!exists(element.style.left)) {\n            element.style.left = `${ePopupParentRect.left * -1}px`;\n        }\n    }\n    createPopupWrapper(element, ariaLabel, alwaysOnTop) {\n        const ePopupParent = this.getPopupParent();\n        // add env CSS class to child, in case user provided a popup parent, which means\n        // theme class may be missing\n        const eWrapper = document.createElement('div');\n        const { allThemes } = this.environment.getTheme();\n        if (allThemes.length) {\n            eWrapper.classList.add(...allThemes);\n        }\n        eWrapper.classList.add('ag-popup');\n        element.classList.add(this.gridOptionsService.is('enableRtl') ? 'ag-rtl' : 'ag-ltr', 'ag-popup-child');\n        if (!element.hasAttribute('role')) {\n            setAriaRole(element, 'dialog');\n        }\n        setAriaLabel(element, ariaLabel);\n        if (this.focusService.isKeyboardMode()) {\n            element.classList.add(FocusService.AG_KEYBOARD_FOCUS);\n        }\n        eWrapper.appendChild(element);\n        ePopupParent.appendChild(eWrapper);\n        if (alwaysOnTop) {\n            this.setAlwaysOnTop(element, true);\n        }\n        else {\n            this.bringPopupToFront(element);\n        }\n        return eWrapper;\n    }\n    addEventListenersToPopup(params) {\n        const eDocument = this.gridOptionsService.getDocument();\n        const ePopupParent = this.getPopupParent();\n        const { wrapperEl, eChild: popupEl, click: pointerEvent, closedCallback, afterGuiAttached, closeOnEsc, modal } = params;\n        let popupHidden = false;\n        const hidePopupOnKeyboardEvent = (event) => {\n            if (!wrapperEl.contains(eDocument.activeElement)) {\n                return;\n            }\n            const key = event.key;\n            if (key === KeyCode.ESCAPE) {\n                removeListeners({ keyboardEvent: event });\n            }\n        };\n        const hidePopupOnMouseEvent = (event) => removeListeners({ mouseEvent: event });\n        const hidePopupOnTouchEvent = (event) => removeListeners({ touchEvent: event });\n        const removeListeners = (popupParams = {}) => {\n            const { mouseEvent, touchEvent, keyboardEvent } = popupParams;\n            if (\n            // we don't hide popup if the event was on the child, or any\n            // children of this child\n            this.isEventFromCurrentPopup({ mouseEvent, touchEvent }, popupEl) ||\n                // if the event to close is actually the open event, then ignore it\n                this.isEventSameChainAsOriginalEvent({ originalMouseEvent: pointerEvent, mouseEvent, touchEvent }) ||\n                // this method should only be called once. the client can have different\n                // paths, each one wanting to close, so this method may be called multiple times.\n                popupHidden) {\n                return;\n            }\n            popupHidden = true;\n            ePopupParent.removeChild(wrapperEl);\n            eDocument.removeEventListener('keydown', hidePopupOnKeyboardEvent);\n            eDocument.removeEventListener('mousedown', hidePopupOnMouseEvent);\n            eDocument.removeEventListener('touchstart', hidePopupOnTouchEvent);\n            eDocument.removeEventListener('contextmenu', hidePopupOnMouseEvent);\n            this.eventService.removeEventListener(Events.EVENT_DRAG_STARTED, hidePopupOnMouseEvent);\n            if (closedCallback) {\n                closedCallback(mouseEvent || touchEvent || keyboardEvent);\n            }\n            this.removePopupFromPopupList(popupEl);\n        };\n        if (afterGuiAttached) {\n            afterGuiAttached({ hidePopup: removeListeners });\n        }\n        // if we add these listeners now, then the current mouse\n        // click will be included, which we don't want\n        window.setTimeout(() => {\n            if (closeOnEsc) {\n                eDocument.addEventListener('keydown', hidePopupOnKeyboardEvent);\n            }\n            if (modal) {\n                eDocument.addEventListener('mousedown', hidePopupOnMouseEvent);\n                this.eventService.addEventListener(Events.EVENT_DRAG_STARTED, hidePopupOnMouseEvent);\n                eDocument.addEventListener('touchstart', hidePopupOnTouchEvent);\n                eDocument.addEventListener('contextmenu', hidePopupOnMouseEvent);\n            }\n        }, 0);\n        return removeListeners;\n    }\n    addPopupToPopupList(element, wrapperEl, removeListeners, anchorToElement) {\n        this.popupList.push({\n            element: element,\n            wrapper: wrapperEl,\n            hideFunc: removeListeners,\n            instanceId: instanceIdSeq++,\n            isAnchored: !!anchorToElement\n        });\n        if (anchorToElement) {\n            this.setPopupPositionRelatedToElement(element, anchorToElement);\n        }\n    }\n    setPopupPositionRelatedToElement(popupEl, relativeElement) {\n        const popup = this.popupList.find(p => p.element === popupEl);\n        if (!popup) {\n            return;\n        }\n        if (popup.stopAnchoringPromise) {\n            popup.stopAnchoringPromise.then(destroyFunc => destroyFunc && destroyFunc());\n        }\n        popup.stopAnchoringPromise = undefined;\n        if (!relativeElement) {\n            return;\n        }\n        // keeps popup positioned under created, eg if context menu, if user scrolls\n        // using touchpad and the cell moves, it moves the popup to keep it with the cell.\n        const destroyPositionTracker = this.keepPopupPositionedRelativeTo({\n            element: relativeElement,\n            ePopup: popupEl,\n            hidePopup: popup.hideFunc\n        });\n        popup.stopAnchoringPromise = destroyPositionTracker;\n        return destroyPositionTracker;\n    }\n    removePopupFromPopupList(element) {\n        this.setPopupPositionRelatedToElement(element, null);\n        this.popupList = this.popupList.filter(p => p.element !== element);\n    }\n    keepPopupPositionedRelativeTo(params) {\n        const eParent = this.getPopupParent();\n        const parentRect = eParent.getBoundingClientRect();\n        const { element, ePopup } = params;\n        const sourceRect = element.getBoundingClientRect();\n        const initialDiffTop = parentRect.top - sourceRect.top;\n        const initialDiffLeft = parentRect.left - sourceRect.left;\n        let lastDiffTop = initialDiffTop;\n        let lastDiffLeft = initialDiffLeft;\n        const topPx = ePopup.style.top;\n        const top = parseInt(topPx.substring(0, topPx.length - 1), 10);\n        const leftPx = ePopup.style.left;\n        const left = parseInt(leftPx.substring(0, leftPx.length - 1), 10);\n        return new AgPromise(resolve => {\n            this.getFrameworkOverrides().setInterval(() => {\n                const pRect = eParent.getBoundingClientRect();\n                const sRect = element.getBoundingClientRect();\n                const elementNotInDom = sRect.top == 0 && sRect.left == 0 && sRect.height == 0 && sRect.width == 0;\n                if (elementNotInDom) {\n                    params.hidePopup();\n                    return;\n                }\n                const currentDiffTop = pRect.top - sRect.top;\n                if (currentDiffTop != lastDiffTop) {\n                    const newTop = this.keepXYWithinBounds(ePopup, top + initialDiffTop - currentDiffTop, DIRECTION.vertical);\n                    ePopup.style.top = `${newTop}px`;\n                }\n                lastDiffTop = currentDiffTop;\n                const currentDiffLeft = pRect.left - sRect.left;\n                if (currentDiffLeft != lastDiffLeft) {\n                    const newLeft = this.keepXYWithinBounds(ePopup, left + initialDiffLeft - currentDiffLeft, DIRECTION.horizontal);\n                    ePopup.style.left = `${newLeft}px`;\n                }\n                lastDiffLeft = currentDiffLeft;\n            }, 200).then(intervalId => {\n                const result = () => {\n                    if (intervalId != null) {\n                        window.clearInterval(intervalId);\n                    }\n                };\n                resolve(result);\n            });\n        });\n    }\n    hasAnchoredPopup() {\n        return this.popupList.some(popup => popup.isAnchored);\n    }\n    isEventFromCurrentPopup(params, target) {\n        const { mouseEvent, touchEvent } = params;\n        const event = mouseEvent ? mouseEvent : touchEvent;\n        if (!event) {\n            return false;\n        }\n        const indexOfThisChild = this.popupList.findIndex(popup => popup.element === target);\n        if (indexOfThisChild === -1) {\n            return false;\n        }\n        for (let i = indexOfThisChild; i < this.popupList.length; i++) {\n            const popup = this.popupList[i];\n            if (isElementInEventPath(popup.element, event)) {\n                return true;\n            }\n        }\n        // if the user did not write their own Custom Element to be rendered as popup\n        // and this component has an additional popup element, they should have the\n        // `ag-custom-component-popup` class to be detected as part of the Custom Component\n        return this.isElementWithinCustomPopup(event.target);\n    }\n    isElementWithinCustomPopup(el) {\n        const eDocument = this.gridOptionsService.getDocument();\n        while (el && el !== eDocument.body) {\n            if (el.classList.contains('ag-custom-component-popup') || el.parentElement === null) {\n                return true;\n            }\n            el = el.parentElement;\n        }\n        return false;\n    }\n    // in some browsers, the context menu event can be fired before the click event, which means\n    // the context menu event could open the popup, but then the click event closes it straight away.\n    isEventSameChainAsOriginalEvent(params) {\n        const { originalMouseEvent, mouseEvent, touchEvent } = params;\n        // we check the coordinates of the event, to see if it's the same event. there is a 1 / 1000 chance that\n        // the event is a different event, however that is an edge case that is not very relevant (the user clicking\n        // twice on the same location isn't a normal path).\n        // event could be mouse event or touch event.\n        let mouseEventOrTouch = null;\n        if (mouseEvent) {\n            // mouse event can be used direction, it has coordinates\n            mouseEventOrTouch = mouseEvent;\n        }\n        else if (touchEvent) {\n            // touch event doesn't have coordinates, need it's touch object\n            mouseEventOrTouch = touchEvent.touches[0];\n        }\n        if (mouseEventOrTouch && originalMouseEvent) {\n            // for x, allow 4px margin, to cover iPads, where touch (which opens menu) is followed\n            // by browser click (when you finger up, touch is interrupted as click in browser)\n            const screenX = mouseEvent ? mouseEvent.screenX : 0;\n            const screenY = mouseEvent ? mouseEvent.screenY : 0;\n            const xMatch = Math.abs(originalMouseEvent.screenX - screenX) < 5;\n            const yMatch = Math.abs(originalMouseEvent.screenY - screenY) < 5;\n            if (xMatch && yMatch) {\n                return true;\n            }\n        }\n        return false;\n    }\n    getWrapper(ePopup) {\n        while (!ePopup.classList.contains('ag-popup') && ePopup.parentElement) {\n            ePopup = ePopup.parentElement;\n        }\n        return ePopup.classList.contains('ag-popup') ? ePopup : null;\n    }\n    setAlwaysOnTop(ePopup, alwaysOnTop) {\n        const eWrapper = this.getWrapper(ePopup);\n        if (!eWrapper) {\n            return;\n        }\n        eWrapper.classList.toggle('ag-always-on-top', !!alwaysOnTop);\n        if (alwaysOnTop) {\n            this.bringPopupToFront(eWrapper);\n        }\n    }\n    bringPopupToFront(ePopup) {\n        const parent = this.getPopupParent();\n        const popupList = Array.prototype.slice.call(parent.querySelectorAll('.ag-popup'));\n        const popupLen = popupList.length;\n        const alwaysOnTopList = Array.prototype.slice.call(parent.querySelectorAll('.ag-popup.ag-always-on-top'));\n        const onTopLength = alwaysOnTopList.length;\n        const eWrapper = this.getWrapper(ePopup);\n        if (!eWrapper || popupLen <= 1 || !parent.contains(ePopup)) {\n            return;\n        }\n        const pos = popupList.indexOf(eWrapper);\n        const innerEls = eWrapper.querySelectorAll('div');\n        const innerElsScrollMap = [];\n        innerEls.forEach(el => {\n            if (el.scrollTop !== 0) {\n                innerElsScrollMap.push([el, el.scrollTop]);\n            }\n        });\n        if (onTopLength) {\n            const isPopupAlwaysOnTop = eWrapper.classList.contains('ag-always-on-top');\n            if (isPopupAlwaysOnTop) {\n                if (pos !== popupLen - 1) {\n                    last(alwaysOnTopList).insertAdjacentElement('afterend', eWrapper);\n                }\n            }\n            else if (pos !== popupLen - onTopLength - 1) {\n                alwaysOnTopList[0].insertAdjacentElement('beforebegin', eWrapper);\n            }\n        }\n        else if (pos !== popupLen - 1) {\n            last(popupList).insertAdjacentElement('afterend', eWrapper);\n        }\n        while (innerElsScrollMap.length) {\n            const currentEl = innerElsScrollMap.pop();\n            currentEl[0].scrollTop = currentEl[1];\n        }\n        const params = {\n            type: 'popupToFront',\n            api: this.gridOptionsService.api,\n            columnApi: this.gridOptionsService.columnApi,\n            eWrapper\n        };\n        this.eventService.dispatchEvent(params);\n    }\n};\nPopupService.WAIT_FOR_POPUP_CONTENT_RESIZE = 200;\n__decorate$S([\n    Autowired('focusService')\n], PopupService.prototype, \"focusService\", void 0);\n__decorate$S([\n    Autowired('ctrlsService')\n], PopupService.prototype, \"ctrlsService\", void 0);\n__decorate$S([\n    Autowired('resizeObserverService')\n], PopupService.prototype, \"resizeObserverService\", void 0);\n__decorate$S([\n    PostConstruct\n], PopupService.prototype, \"postConstruct\", null);\nPopupService = PopupService_1 = __decorate$S([\n    Bean('popupService')\n], PopupService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$R = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass VirtualList extends TabGuardComp {\n    constructor(cssIdentifier = 'default', ariaRole = 'listbox', listName) {\n        super(VirtualList.getTemplate(cssIdentifier));\n        this.cssIdentifier = cssIdentifier;\n        this.ariaRole = ariaRole;\n        this.listName = listName;\n        this.renderedRows = new Map();\n        this.rowHeight = 20;\n    }\n    postConstruct() {\n        this.addScrollListener();\n        this.rowHeight = this.getItemHeight();\n        this.addResizeObserver();\n        this.initialiseTabGuard({\n            onFocusIn: (e) => this.onFocusIn(e),\n            onFocusOut: (e) => this.onFocusOut(e),\n            focusInnerElement: (fromBottom) => this.focusInnerElement(fromBottom),\n            onTabKeyDown: e => this.onTabKeyDown(e),\n            handleKeyDown: e => this.handleKeyDown(e)\n        });\n        this.setAriaProperties();\n        this.addManagedListener(this.eventService, Events.EVENT_GRID_STYLES_CHANGED, this.onGridStylesChanged.bind(this));\n    }\n    onGridStylesChanged() {\n        this.rowHeight = this.getItemHeight();\n        this.refresh();\n    }\n    setAriaProperties() {\n        const translate = this.localeService.getLocaleTextFunc();\n        const listName = translate('ariaDefaultListName', this.listName || 'List');\n        const ariaEl = this.eContainer;\n        setAriaRole(ariaEl, this.ariaRole);\n        setAriaLabel(ariaEl, listName);\n    }\n    addResizeObserver() {\n        const listener = () => this.drawVirtualRows();\n        const destroyObserver = this.resizeObserverService.observeResize(this.getGui(), listener);\n        this.addDestroyFunc(destroyObserver);\n    }\n    focusInnerElement(fromBottom) {\n        this.focusRow(fromBottom ? this.model.getRowCount() - 1 : 0);\n    }\n    onFocusIn(e) {\n        const target = e.target;\n        if (target.classList.contains('ag-virtual-list-item')) {\n            this.lastFocusedRowIndex = getAriaPosInSet(target) - 1;\n        }\n        return false;\n    }\n    onFocusOut(e) {\n        if (!this.getFocusableElement().contains(e.relatedTarget)) {\n            this.lastFocusedRowIndex = null;\n        }\n        return false;\n    }\n    handleKeyDown(e) {\n        switch (e.key) {\n            case KeyCode.UP:\n            case KeyCode.DOWN:\n                if (this.navigate(e.key === KeyCode.UP)) {\n                    e.preventDefault();\n                }\n                break;\n        }\n    }\n    onTabKeyDown(e) {\n        if (this.navigate(e.shiftKey)) {\n            e.preventDefault();\n        }\n        else {\n            stopPropagationForAgGrid(e);\n            this.forceFocusOutOfContainer(e.shiftKey);\n        }\n    }\n    navigate(up) {\n        if (this.lastFocusedRowIndex == null) {\n            return false;\n        }\n        const nextRow = this.lastFocusedRowIndex + (up ? -1 : 1);\n        if (nextRow < 0 || nextRow >= this.model.getRowCount()) {\n            return false;\n        }\n        this.focusRow(nextRow);\n        return true;\n    }\n    getLastFocusedRow() {\n        return this.lastFocusedRowIndex;\n    }\n    focusRow(rowNumber) {\n        this.ensureIndexVisible(rowNumber);\n        window.setTimeout(() => {\n            if (!this.isAlive()) {\n                return;\n            }\n            const renderedRow = this.renderedRows.get(rowNumber);\n            if (renderedRow) {\n                renderedRow.eDiv.focus();\n            }\n        }, 10);\n    }\n    getComponentAt(rowIndex) {\n        const comp = this.renderedRows.get(rowIndex);\n        return comp && comp.rowComponent;\n    }\n    forEachRenderedRow(func) {\n        this.renderedRows.forEach((value, key) => func(value.rowComponent, key));\n    }\n    static getTemplate(cssIdentifier) {\n        return /* html */ `\n            <div class=\"ag-virtual-list-viewport ag-${cssIdentifier}-virtual-list-viewport\" role=\"presentation\">\n                <div class=\"ag-virtual-list-container ag-${cssIdentifier}-virtual-list-container\" ref=\"eContainer\"></div>\n            </div>`;\n    }\n    getItemHeight() {\n        return this.environment.getListItemHeight();\n    }\n    ensureIndexVisible(index) {\n        const lastRow = this.model.getRowCount();\n        if (typeof index !== 'number' || index < 0 || index >= lastRow) {\n            console.warn('AG Grid: invalid row index for ensureIndexVisible: ' + index);\n            return;\n        }\n        const rowTopPixel = index * this.rowHeight;\n        const rowBottomPixel = rowTopPixel + this.rowHeight;\n        const eGui = this.getGui();\n        const viewportTopPixel = eGui.scrollTop;\n        const viewportHeight = eGui.offsetHeight;\n        const viewportBottomPixel = viewportTopPixel + viewportHeight;\n        const viewportScrolledPastRow = viewportTopPixel > rowTopPixel;\n        const viewportScrolledBeforeRow = viewportBottomPixel < rowBottomPixel;\n        if (viewportScrolledPastRow) {\n            // if row is before, scroll up with row at top\n            eGui.scrollTop = rowTopPixel;\n        }\n        else if (viewportScrolledBeforeRow) {\n            // if row is below, scroll down with row at bottom\n            const newScrollPosition = rowBottomPixel - viewportHeight;\n            eGui.scrollTop = newScrollPosition;\n        }\n    }\n    setComponentCreator(componentCreator) {\n        this.componentCreator = componentCreator;\n    }\n    setComponentUpdater(componentUpdater) {\n        this.componentUpdater = componentUpdater;\n    }\n    getRowHeight() {\n        return this.rowHeight;\n    }\n    getScrollTop() {\n        return this.getGui().scrollTop;\n    }\n    setRowHeight(rowHeight) {\n        this.rowHeight = rowHeight;\n        this.refresh();\n    }\n    refresh(softRefresh) {\n        if (this.model == null || !this.isAlive()) {\n            return;\n        }\n        const rowCount = this.model.getRowCount();\n        this.eContainer.style.height = `${rowCount * this.rowHeight}px`;\n        // ensure height is applied before attempting to redraw rows\n        waitUntil(() => this.eContainer.clientHeight >= rowCount * this.rowHeight, () => {\n            if (!this.isAlive()) {\n                return;\n            }\n            if (this.canSoftRefresh(softRefresh)) {\n                this.drawVirtualRows(true);\n            }\n            else {\n                this.clearVirtualRows();\n                this.drawVirtualRows();\n            }\n        });\n    }\n    canSoftRefresh(softRefresh) {\n        return !!(softRefresh && this.renderedRows.size && typeof this.model.areRowsEqual === 'function' && this.componentUpdater);\n    }\n    clearVirtualRows() {\n        this.renderedRows.forEach((_, rowIndex) => this.removeRow(rowIndex));\n    }\n    drawVirtualRows(softRefresh) {\n        if (!this.isAlive()) {\n            return;\n        }\n        const gui = this.getGui();\n        const topPixel = gui.scrollTop;\n        const bottomPixel = topPixel + gui.offsetHeight;\n        const firstRow = Math.floor(topPixel / this.rowHeight);\n        const lastRow = Math.floor(bottomPixel / this.rowHeight);\n        this.ensureRowsRendered(firstRow, lastRow, softRefresh);\n    }\n    ensureRowsRendered(start, finish, softRefresh) {\n        // remove any rows that are no longer required\n        this.renderedRows.forEach((_, rowIndex) => {\n            if ((rowIndex < start || rowIndex > finish) && rowIndex !== this.lastFocusedRowIndex) {\n                this.removeRow(rowIndex);\n            }\n        });\n        if (softRefresh) {\n            // refresh any existing rows\n            this.refreshRows();\n        }\n        // insert any required new rows\n        for (let rowIndex = start; rowIndex <= finish; rowIndex++) {\n            if (this.renderedRows.has(rowIndex)) {\n                continue;\n            }\n            // check this row actually exists (in case overflow buffer window exceeds real data)\n            if (rowIndex < this.model.getRowCount()) {\n                this.insertRow(rowIndex);\n            }\n        }\n    }\n    insertRow(rowIndex) {\n        const value = this.model.getRow(rowIndex);\n        const eDiv = document.createElement('div');\n        eDiv.classList.add('ag-virtual-list-item', `ag-${this.cssIdentifier}-virtual-list-item`);\n        setAriaRole(eDiv, this.ariaRole === 'tree' ? 'treeitem' : 'option');\n        setAriaSetSize(eDiv, this.model.getRowCount());\n        setAriaPosInSet(eDiv, rowIndex + 1);\n        eDiv.setAttribute('tabindex', '-1');\n        if (typeof this.model.isRowSelected === 'function') {\n            const isSelected = this.model.isRowSelected(rowIndex);\n            setAriaSelected(eDiv, !!isSelected);\n            setAriaChecked(eDiv, isSelected);\n        }\n        eDiv.style.height = `${this.rowHeight}px`;\n        eDiv.style.top = `${this.rowHeight * rowIndex}px`;\n        const rowComponent = this.componentCreator(value, eDiv);\n        rowComponent.addGuiEventListener('focusin', () => this.lastFocusedRowIndex = rowIndex);\n        eDiv.appendChild(rowComponent.getGui());\n        // keep the DOM order consistent with the order of the rows\n        if (this.renderedRows.has(rowIndex - 1)) {\n            this.renderedRows.get(rowIndex - 1).eDiv.insertAdjacentElement('afterend', eDiv);\n        }\n        else if (this.renderedRows.has(rowIndex + 1)) {\n            this.renderedRows.get(rowIndex + 1).eDiv.insertAdjacentElement('beforebegin', eDiv);\n        }\n        else {\n            this.eContainer.appendChild(eDiv);\n        }\n        this.renderedRows.set(rowIndex, { rowComponent, eDiv, value });\n    }\n    removeRow(rowIndex) {\n        const component = this.renderedRows.get(rowIndex);\n        this.eContainer.removeChild(component.eDiv);\n        this.destroyBean(component.rowComponent);\n        this.renderedRows.delete(rowIndex);\n    }\n    refreshRows() {\n        const rowCount = this.model.getRowCount();\n        this.renderedRows.forEach((row, rowIndex) => {\n            var _a, _b;\n            if (rowIndex >= rowCount) {\n                this.removeRow(rowIndex);\n            }\n            else {\n                const newValue = this.model.getRow(rowIndex);\n                if ((_b = (_a = this.model).areRowsEqual) === null || _b === void 0 ? void 0 : _b.call(_a, row.value, newValue)) {\n                    this.componentUpdater(newValue, row.rowComponent);\n                }\n                else {\n                    // to be replaced later\n                    this.removeRow(rowIndex);\n                }\n            }\n        });\n    }\n    addScrollListener() {\n        this.addGuiEventListener('scroll', () => this.drawVirtualRows(), { passive: true });\n    }\n    setModel(model) {\n        this.model = model;\n    }\n    destroy() {\n        if (!this.isAlive()) {\n            return;\n        }\n        this.clearVirtualRows();\n        super.destroy();\n    }\n}\n__decorate$R([\n    Autowired('resizeObserverService')\n], VirtualList.prototype, \"resizeObserverService\", void 0);\n__decorate$R([\n    RefSelector('eContainer')\n], VirtualList.prototype, \"eContainer\", void 0);\n__decorate$R([\n    PostConstruct\n], VirtualList.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nconst OUTSIDE_ANGULAR_EVENTS = ['mouseover', 'mouseout', 'mouseenter', 'mouseleave'];\nconst PASSIVE_EVENTS = ['touchstart', 'touchend', 'touchmove', 'touchcancel'];\n/** The base frameworks, eg React & Angular, override this bean with implementations specific to their requirement. */\nclass VanillaFrameworkOverrides {\n    constructor() {\n        this.isOutsideAngular = (eventType) => includes(OUTSIDE_ANGULAR_EVENTS, eventType);\n    }\n    // for Vanilla JS, we use simple timeout\n    setTimeout(action, timeout) {\n        window.setTimeout(action, timeout);\n    }\n    setInterval(action, timeout) {\n        return new AgPromise(resolve => {\n            resolve(window.setInterval(action, timeout));\n        });\n    }\n    // for Vanilla JS, we just add the event to the element\n    addEventListener(element, type, listener, useCapture) {\n        const isPassive = includes(PASSIVE_EVENTS, type);\n        element.addEventListener(type, listener, { capture: !!useCapture, passive: isPassive });\n    }\n    // for Vanilla JS, we just execute the listener\n    dispatchEvent(eventType, listener, global = false) {\n        listener();\n    }\n    frameworkComponent(name) {\n        return null;\n    }\n    isFrameworkComponent(comp) {\n        return false;\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$Q = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet CellNavigationService = class CellNavigationService extends BeanStub {\n    // returns null if no cell to focus on, ie at the end of the grid\n    getNextCellToFocus(key, focusedCell, ctrlPressed = false) {\n        if (ctrlPressed) {\n            return this.getNextCellToFocusWithCtrlPressed(key, focusedCell);\n        }\n        return this.getNextCellToFocusWithoutCtrlPressed(key, focusedCell);\n    }\n    getNextCellToFocusWithCtrlPressed(key, focusedCell) {\n        const upKey = key === KeyCode.UP;\n        const downKey = key === KeyCode.DOWN;\n        const leftKey = key === KeyCode.LEFT;\n        let column;\n        let rowIndex;\n        if (upKey || downKey) {\n            rowIndex = upKey ? this.paginationProxy.getPageFirstRow() : this.paginationProxy.getPageLastRow();\n            column = focusedCell.column;\n        }\n        else {\n            const allColumns = this.columnModel.getAllDisplayedColumns();\n            const isRtl = this.gridOptionsService.is('enableRtl');\n            rowIndex = focusedCell.rowIndex;\n            column = leftKey !== isRtl ? allColumns[0] : last(allColumns);\n        }\n        return {\n            rowIndex,\n            rowPinned: null,\n            column\n        };\n    }\n    getNextCellToFocusWithoutCtrlPressed(key, focusedCell) {\n        // starting with the provided cell, we keep moving until we find a cell we can\n        // focus on.\n        let pointer = focusedCell;\n        let finished = false;\n        // finished will be true when either:\n        // a) cell found that we can focus on\n        // b) run out of cells (ie the method returns null)\n        while (!finished) {\n            switch (key) {\n                case KeyCode.UP:\n                    pointer = this.getCellAbove(pointer);\n                    break;\n                case KeyCode.DOWN:\n                    pointer = this.getCellBelow(pointer);\n                    break;\n                case KeyCode.RIGHT:\n                    if (this.gridOptionsService.is('enableRtl')) {\n                        pointer = this.getCellToLeft(pointer);\n                    }\n                    else {\n                        pointer = this.getCellToRight(pointer);\n                    }\n                    break;\n                case KeyCode.LEFT:\n                    if (this.gridOptionsService.is('enableRtl')) {\n                        pointer = this.getCellToRight(pointer);\n                    }\n                    else {\n                        pointer = this.getCellToLeft(pointer);\n                    }\n                    break;\n                default:\n                    pointer = null;\n                    console.warn('AG Grid: unknown key for navigation ' + key);\n                    break;\n            }\n            if (pointer) {\n                finished = this.isCellGoodToFocusOn(pointer);\n            }\n            else {\n                finished = true;\n            }\n        }\n        return pointer;\n    }\n    isCellGoodToFocusOn(gridCell) {\n        const column = gridCell.column;\n        let rowNode;\n        switch (gridCell.rowPinned) {\n            case 'top':\n                rowNode = this.pinnedRowModel.getPinnedTopRow(gridCell.rowIndex);\n                break;\n            case 'bottom':\n                rowNode = this.pinnedRowModel.getPinnedBottomRow(gridCell.rowIndex);\n                break;\n            default:\n                rowNode = this.rowModel.getRow(gridCell.rowIndex);\n                break;\n        }\n        if (!rowNode) {\n            return false;\n        }\n        const suppressNavigable = column.isSuppressNavigable(rowNode);\n        return !suppressNavigable;\n    }\n    getCellToLeft(lastCell) {\n        if (!lastCell) {\n            return null;\n        }\n        const colToLeft = this.columnModel.getDisplayedColBefore(lastCell.column);\n        if (!colToLeft) {\n            return null;\n        }\n        return {\n            rowIndex: lastCell.rowIndex,\n            column: colToLeft,\n            rowPinned: lastCell.rowPinned\n        };\n    }\n    getCellToRight(lastCell) {\n        if (!lastCell) {\n            return null;\n        }\n        const colToRight = this.columnModel.getDisplayedColAfter(lastCell.column);\n        // if already on right, do nothing\n        if (!colToRight) {\n            return null;\n        }\n        return {\n            rowIndex: lastCell.rowIndex,\n            column: colToRight,\n            rowPinned: lastCell.rowPinned\n        };\n    }\n    getRowBelow(rowPosition) {\n        // if already on top row, do nothing\n        const index = rowPosition.rowIndex;\n        const pinned = rowPosition.rowPinned;\n        if (this.isLastRowInContainer(rowPosition)) {\n            switch (pinned) {\n                case 'bottom':\n                    // never any rows after pinned bottom\n                    return null;\n                case 'top':\n                    // if on last row of pinned top, then next row is main body (if rows exist),\n                    // otherwise it's the pinned bottom\n                    if (this.rowModel.isRowsToRender()) {\n                        return { rowIndex: this.paginationProxy.getPageFirstRow(), rowPinned: null };\n                    }\n                    if (this.pinnedRowModel.isRowsToRender('bottom')) {\n                        return { rowIndex: 0, rowPinned: 'bottom' };\n                    }\n                    return null;\n                default:\n                    // if in the main body, then try pinned bottom, otherwise return nothing\n                    if (this.pinnedRowModel.isRowsToRender('bottom')) {\n                        return { rowIndex: 0, rowPinned: 'bottom' };\n                    }\n                    return null;\n            }\n        }\n        const rowNode = this.rowModel.getRow(rowPosition.rowIndex);\n        const nextStickyPosition = this.getNextStickyPosition(rowNode);\n        if (nextStickyPosition) {\n            return nextStickyPosition;\n        }\n        return { rowIndex: index + 1, rowPinned: pinned };\n    }\n    getNextStickyPosition(rowNode, up) {\n        if (!this.gridOptionsService.isGroupRowsSticky() || !rowNode || !rowNode.sticky) {\n            return;\n        }\n        const stickyRowCtrls = [...this.rowRenderer.getStickyTopRowCtrls()].sort((a, b) => a.getRowNode().rowIndex - b.getRowNode().rowIndex);\n        const diff = up ? -1 : 1;\n        const idx = stickyRowCtrls.findIndex(ctrl => ctrl.getRowNode().rowIndex === rowNode.rowIndex);\n        const nextCtrl = stickyRowCtrls[idx + diff];\n        if (nextCtrl) {\n            return { rowIndex: nextCtrl.getRowNode().rowIndex, rowPinned: null };\n        }\n    }\n    getCellBelow(lastCell) {\n        if (!lastCell) {\n            return null;\n        }\n        const rowBelow = this.getRowBelow(lastCell);\n        if (rowBelow) {\n            return {\n                rowIndex: rowBelow.rowIndex,\n                column: lastCell.column,\n                rowPinned: rowBelow.rowPinned\n            };\n        }\n        return null;\n    }\n    isLastRowInContainer(rowPosition) {\n        const pinned = rowPosition.rowPinned;\n        const index = rowPosition.rowIndex;\n        if (pinned === 'top') {\n            const lastTopIndex = this.pinnedRowModel.getPinnedTopRowData().length - 1;\n            return lastTopIndex <= index;\n        }\n        if (pinned === 'bottom') {\n            const lastBottomIndex = this.pinnedRowModel.getPinnedBottomRowData().length - 1;\n            return lastBottomIndex <= index;\n        }\n        const lastBodyIndex = this.paginationProxy.getPageLastRow();\n        return lastBodyIndex <= index;\n    }\n    getRowAbove(rowPosition) {\n        // if already on top row, do nothing\n        const index = rowPosition.rowIndex;\n        const pinned = rowPosition.rowPinned;\n        const isFirstRow = pinned ? index === 0 : index === this.paginationProxy.getPageFirstRow();\n        // if already on top row, do nothing\n        if (isFirstRow) {\n            if (pinned === 'top') {\n                return null;\n            }\n            if (!pinned) {\n                if (this.pinnedRowModel.isRowsToRender('top')) {\n                    return this.getLastFloatingTopRow();\n                }\n                return null;\n            }\n            // last floating bottom\n            if (this.rowModel.isRowsToRender()) {\n                return this.getLastBodyCell();\n            }\n            if (this.pinnedRowModel.isRowsToRender('top')) {\n                return this.getLastFloatingTopRow();\n            }\n            return null;\n        }\n        const rowNode = this.rowModel.getRow(rowPosition.rowIndex);\n        const nextStickyPosition = this.getNextStickyPosition(rowNode, true);\n        if (nextStickyPosition) {\n            return nextStickyPosition;\n        }\n        return { rowIndex: index - 1, rowPinned: pinned };\n    }\n    getCellAbove(lastCell) {\n        if (!lastCell) {\n            return null;\n        }\n        const rowAbove = this.getRowAbove({ rowIndex: lastCell.rowIndex, rowPinned: lastCell.rowPinned });\n        if (rowAbove) {\n            return {\n                rowIndex: rowAbove.rowIndex,\n                column: lastCell.column,\n                rowPinned: rowAbove.rowPinned\n            };\n        }\n        return null;\n    }\n    getLastBodyCell() {\n        const lastBodyRow = this.paginationProxy.getPageLastRow();\n        return { rowIndex: lastBodyRow, rowPinned: null };\n    }\n    getLastFloatingTopRow() {\n        const lastFloatingRow = this.pinnedRowModel.getPinnedTopRowData().length - 1;\n        return { rowIndex: lastFloatingRow, rowPinned: 'top' };\n    }\n    getNextTabbedCell(gridCell, backwards) {\n        if (backwards) {\n            return this.getNextTabbedCellBackwards(gridCell);\n        }\n        return this.getNextTabbedCellForwards(gridCell);\n    }\n    getNextTabbedCellForwards(gridCell) {\n        const displayedColumns = this.columnModel.getAllDisplayedColumns();\n        let newRowIndex = gridCell.rowIndex;\n        let newFloating = gridCell.rowPinned;\n        // move along to the next cell\n        let newColumn = this.columnModel.getDisplayedColAfter(gridCell.column);\n        // check if end of the row, and if so, go forward a row\n        if (!newColumn) {\n            newColumn = displayedColumns[0];\n            const rowBelow = this.getRowBelow(gridCell);\n            if (missing(rowBelow)) {\n                return null;\n            }\n            // If we are tabbing and there is a paging panel present, tabbing should go\n            // to the paging panel instead of loading the next page.\n            if (!rowBelow.rowPinned && !this.paginationProxy.isRowInPage(rowBelow)) {\n                return null;\n            }\n            newRowIndex = rowBelow ? rowBelow.rowIndex : null;\n            newFloating = rowBelow ? rowBelow.rowPinned : null;\n        }\n        return { rowIndex: newRowIndex, column: newColumn, rowPinned: newFloating };\n    }\n    getNextTabbedCellBackwards(gridCell) {\n        const displayedColumns = this.columnModel.getAllDisplayedColumns();\n        let newRowIndex = gridCell.rowIndex;\n        let newFloating = gridCell.rowPinned;\n        // move along to the next cell\n        let newColumn = this.columnModel.getDisplayedColBefore(gridCell.column);\n        // check if end of the row, and if so, go forward a row\n        if (!newColumn) {\n            newColumn = last(displayedColumns);\n            const rowAbove = this.getRowAbove({ rowIndex: gridCell.rowIndex, rowPinned: gridCell.rowPinned });\n            if (missing(rowAbove)) {\n                return null;\n            }\n            // If we are tabbing and there is a paging panel present, tabbing should go\n            // to the paging panel instead of loading the next page.\n            if (!rowAbove.rowPinned && !this.paginationProxy.isRowInPage(rowAbove)) {\n                return null;\n            }\n            newRowIndex = rowAbove ? rowAbove.rowIndex : null;\n            newFloating = rowAbove ? rowAbove.rowPinned : null;\n        }\n        return { rowIndex: newRowIndex, column: newColumn, rowPinned: newFloating };\n    }\n};\n__decorate$Q([\n    Autowired('columnModel')\n], CellNavigationService.prototype, \"columnModel\", void 0);\n__decorate$Q([\n    Autowired('rowModel')\n], CellNavigationService.prototype, \"rowModel\", void 0);\n__decorate$Q([\n    Autowired('rowRenderer')\n], CellNavigationService.prototype, \"rowRenderer\", void 0);\n__decorate$Q([\n    Autowired('pinnedRowModel')\n], CellNavigationService.prototype, \"pinnedRowModel\", void 0);\n__decorate$Q([\n    Autowired('paginationProxy')\n], CellNavigationService.prototype, \"paginationProxy\", void 0);\nCellNavigationService = __decorate$Q([\n    Bean('cellNavigationService')\n], CellNavigationService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$P = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param$6 = (undefined && undefined.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nlet AlignedGridsService = class AlignedGridsService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        // flag to mark if we are consuming. to avoid cyclic events (ie other grid firing back to master\n        // while processing a master event) we mark this if consuming an event, and if we are, then\n        // we don't fire back any events.\n        this.consuming = false;\n    }\n    setBeans(loggerFactory) {\n        this.logger = loggerFactory.create('AlignedGridsService');\n    }\n    init() {\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_MOVED, this.fireColumnEvent.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_VISIBLE, this.fireColumnEvent.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PINNED, this.fireColumnEvent.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_GROUP_OPENED, this.fireColumnEvent.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_RESIZED, this.fireColumnEvent.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_BODY_SCROLL, this.fireScrollEvent.bind(this));\n    }\n    // common logic across all the fire methods\n    fireEvent(callback) {\n        // if we are already consuming, then we are acting on an event from a master,\n        // so we don't cause a cyclic firing of events\n        if (this.consuming) {\n            return;\n        }\n        // iterate through the aligned grids, and pass each aligned grid service to the callback\n        const otherGrids = this.gridOptionsService.get('alignedGrids');\n        if (otherGrids) {\n            otherGrids.forEach((otherGridOptions) => {\n                if (otherGridOptions.api) {\n                    const alignedGridService = otherGridOptions.api.__getAlignedGridService();\n                    callback(alignedGridService);\n                }\n            });\n        }\n    }\n    // common logic across all consume methods. very little common logic, however extracting\n    // guarantees consistency across the methods.\n    onEvent(callback) {\n        this.consuming = true;\n        callback();\n        this.consuming = false;\n    }\n    fireColumnEvent(event) {\n        this.fireEvent(alignedGridsService => {\n            alignedGridsService.onColumnEvent(event);\n        });\n    }\n    fireScrollEvent(event) {\n        if (event.direction !== 'horizontal') {\n            return;\n        }\n        this.fireEvent(alignedGridsService => {\n            alignedGridsService.onScrollEvent(event);\n        });\n    }\n    onScrollEvent(event) {\n        this.onEvent(() => {\n            const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n            gridBodyCon.getScrollFeature().setHorizontalScrollPosition(event.left);\n        });\n    }\n    getMasterColumns(event) {\n        const result = [];\n        if (event.columns) {\n            event.columns.forEach((column) => {\n                result.push(column);\n            });\n        }\n        else if (event.column) {\n            result.push(event.column);\n        }\n        return result;\n    }\n    getColumnIds(event) {\n        const result = [];\n        if (event.columns) {\n            event.columns.forEach(column => {\n                result.push(column.getColId());\n            });\n        }\n        else if (event.column) {\n            result.push(event.column.getColId());\n        }\n        return result;\n    }\n    onColumnEvent(event) {\n        this.onEvent(() => {\n            switch (event.type) {\n                case Events.EVENT_COLUMN_MOVED:\n                case Events.EVENT_COLUMN_VISIBLE:\n                case Events.EVENT_COLUMN_PINNED:\n                case Events.EVENT_COLUMN_RESIZED:\n                    const colEvent = event;\n                    this.processColumnEvent(colEvent);\n                    break;\n                case Events.EVENT_COLUMN_GROUP_OPENED:\n                    const groupOpenedEvent = event;\n                    this.processGroupOpenedEvent(groupOpenedEvent);\n                    break;\n                case Events.EVENT_COLUMN_PIVOT_CHANGED:\n                    // we cannot support pivoting with aligned grids as the columns will be out of sync as the\n                    // grids will have columns created based on the row data of the grid.\n                    console.warn('AG Grid: pivoting is not supported with aligned grids. ' +\n                        'You can only use one of these features at a time in a grid.');\n                    break;\n            }\n        });\n    }\n    processGroupOpenedEvent(groupOpenedEvent) {\n        // likewise for column group\n        const masterColumnGroup = groupOpenedEvent.columnGroup;\n        let otherColumnGroup = null;\n        if (masterColumnGroup) {\n            const groupId = masterColumnGroup.getGroupId();\n            otherColumnGroup = this.columnModel.getProvidedColumnGroup(groupId);\n        }\n        if (masterColumnGroup && !otherColumnGroup) {\n            return;\n        }\n        this.logger.log('onColumnEvent-> processing ' + groupOpenedEvent + ' expanded = ' + masterColumnGroup.isExpanded());\n        this.columnModel.setColumnGroupOpened(otherColumnGroup, masterColumnGroup.isExpanded(), \"alignedGridChanged\");\n    }\n    processColumnEvent(colEvent) {\n        var _a;\n        // the column in the event is from the master grid. need to\n        // look up the equivalent from this (other) grid\n        const masterColumn = colEvent.column;\n        let otherColumn = null;\n        if (masterColumn) {\n            otherColumn = this.columnModel.getPrimaryColumn(masterColumn.getColId());\n        }\n        // if event was with respect to a master column, that is not present in this\n        // grid, then we ignore the event\n        if (masterColumn && !otherColumn) {\n            return;\n        }\n        // in time, all the methods below should use the column ids, it's a more generic way\n        // of handling columns, and also allows for single or multi column events\n        const masterColumns = this.getMasterColumns(colEvent);\n        switch (colEvent.type) {\n            case Events.EVENT_COLUMN_MOVED:\n                // when the user moves columns via applyColumnState, we can't depend on moving specific columns\n                // to an index, as there maybe be many indexes columns moved to (as wasn't result of a mouse drag).\n                // so only way to be sure is match the order of all columns using Column State.\n                {\n                    const movedEvent = colEvent;\n                    const srcColState = colEvent.columnApi.getColumnState();\n                    const destColState = srcColState.map(s => ({ colId: s.colId }));\n                    this.columnModel.applyColumnState({ state: destColState, applyOrder: true }, \"alignedGridChanged\");\n                    this.logger.log(`onColumnEvent-> processing ${colEvent.type} toIndex = ${movedEvent.toIndex}`);\n                }\n                break;\n            case Events.EVENT_COLUMN_VISIBLE:\n                // when the user changes visibility via applyColumnState, we can't depend on visibility flag in event\n                // as there maybe be mix of true/false (as wasn't result of a mouse click to set visiblity).\n                // so only way to be sure is match the visibility of all columns using Column State.\n                {\n                    const visibleEvent = colEvent;\n                    const srcColState = colEvent.columnApi.getColumnState();\n                    const destColState = srcColState.map(s => ({ colId: s.colId, hide: s.hide }));\n                    this.columnModel.applyColumnState({ state: destColState }, \"alignedGridChanged\");\n                    this.logger.log(`onColumnEvent-> processing ${colEvent.type} visible = ${visibleEvent.visible}`);\n                }\n                break;\n            case Events.EVENT_COLUMN_PINNED:\n                {\n                    const pinnedEvent = colEvent;\n                    const srcColState = colEvent.columnApi.getColumnState();\n                    const destColState = srcColState.map(s => ({ colId: s.colId, pinned: s.pinned }));\n                    this.columnModel.applyColumnState({ state: destColState }, \"alignedGridChanged\");\n                    this.logger.log(`onColumnEvent-> processing ${colEvent.type} pinned = ${pinnedEvent.pinned}`);\n                }\n                break;\n            case Events.EVENT_COLUMN_RESIZED:\n                const resizedEvent = colEvent;\n                const columnWidths = {};\n                masterColumns.forEach((column) => {\n                    this.logger.log(`onColumnEvent-> processing ${colEvent.type} actualWidth = ${column.getActualWidth()}`);\n                    columnWidths[column.getId()] = { key: column.getColId(), newWidth: column.getActualWidth() };\n                });\n                // don't set flex columns width\n                (_a = resizedEvent.flexColumns) === null || _a === void 0 ? void 0 : _a.forEach(col => {\n                    if (columnWidths[col.getId()]) {\n                        delete columnWidths[col.getId()];\n                    }\n                });\n                this.columnModel.setColumnWidths(Object.values(columnWidths), false, resizedEvent.finished, \"alignedGridChanged\");\n                break;\n        }\n        const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n        const isVerticalScrollShowing = gridBodyCon.isVerticalScrollShowing();\n        const alignedGrids = this.gridOptionsService.get('alignedGrids');\n        if (alignedGrids) {\n            alignedGrids.forEach((grid) => {\n                if (grid.api) {\n                    grid.api.setAlwaysShowVerticalScroll(isVerticalScrollShowing);\n                }\n            });\n        }\n    }\n};\n__decorate$P([\n    Autowired('columnModel')\n], AlignedGridsService.prototype, \"columnModel\", void 0);\n__decorate$P([\n    Autowired('ctrlsService')\n], AlignedGridsService.prototype, \"ctrlsService\", void 0);\n__decorate$P([\n    __param$6(0, Qualifier('loggerFactory'))\n], AlignedGridsService.prototype, \"setBeans\", null);\n__decorate$P([\n    PostConstruct\n], AlignedGridsService.prototype, \"init\", null);\nAlignedGridsService = __decorate$P([\n    Bean('alignedGridsService')\n], AlignedGridsService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$O = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param$5 = (undefined && undefined.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nlet SelectionService = class SelectionService extends BeanStub {\n    setBeans(loggerFactory) {\n        this.logger = loggerFactory.create('selectionService');\n        this.reset();\n    }\n    init() {\n        this.groupSelectsChildren = this.gridOptionsService.is('groupSelectsChildren');\n        this.addManagedPropertyListener('groupSelectsChildren', (propChange) => this.groupSelectsChildren = propChange.currentValue);\n        this.rowSelection = this.gridOptionsService.get('rowSelection');\n        this.addManagedPropertyListener('rowSelection', (propChange) => this.rowSelection = propChange.currentValue);\n        this.addManagedListener(this.eventService, Events.EVENT_ROW_SELECTED, this.onRowSelected.bind(this));\n    }\n    isMultiselect() {\n        return this.rowSelection === 'multiple';\n    }\n    setNodesSelected(params) {\n        var _a;\n        if (params.nodes.length === 0)\n            return 0;\n        const { newValue, clearSelection, suppressFinishActions, rangeSelect, event, source = 'api', } = params;\n        if (params.nodes.length > 1 && !this.isMultiselect()) {\n            console.warn(`AG Grid: cannot multi select while rowSelection='single'`);\n            return 0;\n        }\n        // groupSelectsFiltered only makes sense when group selects children\n        const groupSelectsFiltered = this.groupSelectsChildren && (params.groupSelectsFiltered === true);\n        // if node is a footer, we don't do selection, just pass the info\n        // to the sibling (the parent of the group)\n        const nodes = params.nodes.map(node => node.footer ? node.sibling : node);\n        if (rangeSelect) {\n            if (params.nodes.length > 1) {\n                console.warn('AG Grid: cannot range select while selecting multiple rows');\n                return 0;\n            }\n            const lastSelectedNode = this.getLastSelectedNode();\n            if (lastSelectedNode) {\n                // if node is a footer, we don't do selection, just pass the info\n                // to the sibling (the parent of the group)\n                const node = nodes[0];\n                const newRowClicked = lastSelectedNode !== node;\n                if (newRowClicked && this.isMultiselect()) {\n                    const nodesChanged = this.selectRange(node, lastSelectedNode, params.newValue, source);\n                    this.setLastSelectedNode(node);\n                    return nodesChanged;\n                }\n            }\n        }\n        let updatedCount = 0;\n        for (let i = 0; i < nodes.length; i++) {\n            const node = nodes[i];\n            // when groupSelectsFiltered, then this node may end up intermediate despite\n            // trying to set it to true / false. this group will be calculated further on\n            // down when we call calculatedSelectedForAllGroupNodes(). we need to skip it\n            // here, otherwise the updatedCount would include it.\n            const skipThisNode = groupSelectsFiltered && node.group;\n            if (!skipThisNode) {\n                const thisNodeWasSelected = node.selectThisNode(newValue, params.event, source);\n                if (thisNodeWasSelected) {\n                    updatedCount++;\n                }\n            }\n            if (this.groupSelectsChildren && ((_a = node.childrenAfterGroup) === null || _a === void 0 ? void 0 : _a.length)) {\n                updatedCount += this.selectChildren(node, newValue, groupSelectsFiltered, source);\n            }\n        }\n        // clear other nodes if not doing multi select\n        if (!suppressFinishActions) {\n            const clearOtherNodes = newValue && (clearSelection || !this.isMultiselect());\n            if (clearOtherNodes) {\n                updatedCount += this.clearOtherNodes(nodes[0], source);\n            }\n            // only if we selected something, then update groups and fire events\n            if (updatedCount > 0) {\n                this.updateGroupsFromChildrenSelections(source);\n                // this is the very end of the 'action node', so we are finished all the updates,\n                // include any parent / child changes that this method caused\n                const event = {\n                    type: Events.EVENT_SELECTION_CHANGED,\n                    source\n                };\n                this.eventService.dispatchEvent(event);\n            }\n            // so if user next does shift-select, we know where to start the selection from\n            if (newValue) {\n                this.setLastSelectedNode(nodes[nodes.length - 1]);\n            }\n        }\n        return updatedCount;\n    }\n    // selects all rows between this node and the last selected node (or the top if this is the first selection).\n    // not to be mixed up with 'cell range selection' where you drag the mouse, this is row range selection, by\n    // holding down 'shift'.\n    selectRange(fromNode, toNode, value = true, source) {\n        const nodesToSelect = this.rowModel.getNodesInRangeForSelection(fromNode, toNode);\n        let updatedCount = 0;\n        nodesToSelect.forEach(rowNode => {\n            if (rowNode.group && this.groupSelectsChildren || (value === false && fromNode === rowNode)) {\n                return;\n            }\n            const nodeWasSelected = rowNode.selectThisNode(value, undefined, source);\n            if (nodeWasSelected) {\n                updatedCount++;\n            }\n        });\n        this.updateGroupsFromChildrenSelections(source);\n        const event = {\n            type: Events.EVENT_SELECTION_CHANGED,\n            source\n        };\n        this.eventService.dispatchEvent(event);\n        return updatedCount;\n    }\n    selectChildren(node, newValue, groupSelectsFiltered, source) {\n        const children = groupSelectsFiltered ? node.childrenAfterAggFilter : node.childrenAfterGroup;\n        if (_.missing(children)) {\n            return 0;\n        }\n        return this.setNodesSelected({\n            newValue: newValue,\n            clearSelection: false,\n            suppressFinishActions: true,\n            groupSelectsFiltered,\n            source,\n            nodes: children,\n        });\n    }\n    setLastSelectedNode(rowNode) {\n        this.lastSelectedNode = rowNode;\n    }\n    getLastSelectedNode() {\n        return this.lastSelectedNode;\n    }\n    getSelectedNodes() {\n        const selectedNodes = [];\n        iterateObject(this.selectedNodes, (key, rowNode) => {\n            if (rowNode) {\n                selectedNodes.push(rowNode);\n            }\n        });\n        return selectedNodes;\n    }\n    getSelectedRows() {\n        const selectedRows = [];\n        iterateObject(this.selectedNodes, (key, rowNode) => {\n            if (rowNode && rowNode.data) {\n                selectedRows.push(rowNode.data);\n            }\n        });\n        return selectedRows;\n    }\n    getSelectionCount() {\n        return Object.values(this.selectedNodes).length;\n    }\n    /**\n     * This method is used by the CSRM to remove groups which are being disposed of,\n     * events do not need fired in this case\n     */\n    filterFromSelection(predicate) {\n        const newSelectedNodes = {};\n        Object.entries(this.selectedNodes).forEach(([key, node]) => {\n            const passesPredicate = node && predicate(node);\n            if (passesPredicate) {\n                newSelectedNodes[key] = node;\n            }\n        });\n        this.selectedNodes = newSelectedNodes;\n    }\n    // should only be called if groupSelectsChildren=true\n    updateGroupsFromChildrenSelections(source, changedPath) {\n        // we only do this when group selection state depends on selected children\n        if (!this.groupSelectsChildren) {\n            return false;\n        }\n        // also only do it if CSRM (code should never allow this anyway)\n        if (this.rowModel.getType() !== 'clientSide') {\n            return false;\n        }\n        const clientSideRowModel = this.rowModel;\n        const rootNode = clientSideRowModel.getRootNode();\n        if (!changedPath) {\n            changedPath = new ChangedPath(true, rootNode);\n            changedPath.setInactive();\n        }\n        let selectionChanged = false;\n        changedPath.forEachChangedNodeDepthFirst(rowNode => {\n            if (rowNode !== rootNode) {\n                const selected = rowNode.calculateSelectedFromChildren();\n                selectionChanged = rowNode.selectThisNode(selected === null ? false : selected, undefined, source) || selectionChanged;\n            }\n        });\n        return selectionChanged;\n    }\n    clearOtherNodes(rowNodeToKeepSelected, source) {\n        const groupsToRefresh = {};\n        let updatedCount = 0;\n        iterateObject(this.selectedNodes, (key, otherRowNode) => {\n            if (otherRowNode && otherRowNode.id !== rowNodeToKeepSelected.id) {\n                const rowNode = this.selectedNodes[otherRowNode.id];\n                updatedCount += rowNode.setSelectedParams({\n                    newValue: false,\n                    clearSelection: false,\n                    suppressFinishActions: true,\n                    source,\n                });\n                if (this.groupSelectsChildren && otherRowNode.parent) {\n                    groupsToRefresh[otherRowNode.parent.id] = otherRowNode.parent;\n                }\n            }\n        });\n        iterateObject(groupsToRefresh, (key, group) => {\n            const selected = group.calculateSelectedFromChildren();\n            group.selectThisNode(selected === null ? false : selected, undefined, source);\n        });\n        return updatedCount;\n    }\n    onRowSelected(event) {\n        const rowNode = event.node;\n        // we do not store the group rows when the groups select children\n        if (this.groupSelectsChildren && rowNode.group) {\n            return;\n        }\n        if (rowNode.isSelected()) {\n            this.selectedNodes[rowNode.id] = rowNode;\n        }\n        else {\n            delete this.selectedNodes[rowNode.id];\n        }\n    }\n    syncInRowNode(rowNode, oldNode) {\n        this.syncInOldRowNode(rowNode, oldNode);\n        this.syncInNewRowNode(rowNode);\n    }\n    // if the id has changed for the node, then this means the rowNode\n    // is getting used for a different data item, which breaks\n    // our selectedNodes, as the node now is mapped by the old id\n    // which is inconsistent. so to keep the old node as selected,\n    // we swap in the clone (with the old id and old data). this means\n    // the oldNode is effectively a daemon we keep a reference to,\n    // so if client calls api.getSelectedNodes(), it gets the daemon\n    // in the result. when the client un-selects, the reference to the\n    // daemon is removed. the daemon, because it's an oldNode, is not\n    // used by the grid for rendering, it's a copy of what the node used\n    // to be like before the id was changed.\n    syncInOldRowNode(rowNode, oldNode) {\n        const oldNodeHasDifferentId = exists(oldNode) && (rowNode.id !== oldNode.id);\n        if (oldNodeHasDifferentId && oldNode) {\n            const id = oldNode.id;\n            const oldNodeSelected = this.selectedNodes[id] == rowNode;\n            if (oldNodeSelected) {\n                this.selectedNodes[oldNode.id] = oldNode;\n            }\n        }\n    }\n    syncInNewRowNode(rowNode) {\n        if (exists(this.selectedNodes[rowNode.id])) {\n            rowNode.setSelectedInitialValue(true);\n            this.selectedNodes[rowNode.id] = rowNode;\n        }\n        else {\n            rowNode.setSelectedInitialValue(false);\n        }\n    }\n    reset() {\n        this.logger.log('reset');\n        this.selectedNodes = {};\n        this.lastSelectedNode = null;\n    }\n    // returns a list of all nodes at 'best cost' - a feature to be used\n    // with groups / trees. if a group has all it's children selected,\n    // then the group appears in the result, but not the children.\n    // Designed for use with 'children' as the group selection type,\n    // where groups don't actually appear in the selection normally.\n    getBestCostNodeSelection() {\n        if (this.rowModel.getType() !== 'clientSide') {\n            // Error logged as part of gridApi as that is only call point for this method.\n            return;\n        }\n        const clientSideRowModel = this.rowModel;\n        const topLevelNodes = clientSideRowModel.getTopLevelNodes();\n        if (topLevelNodes === null) {\n            return;\n        }\n        const result = [];\n        // recursive function, to find the selected nodes\n        function traverse(nodes) {\n            for (let i = 0, l = nodes.length; i < l; i++) {\n                const node = nodes[i];\n                if (node.isSelected()) {\n                    result.push(node);\n                }\n                else {\n                    // if not selected, then if it's a group, and the group\n                    // has children, continue to search for selections\n                    const maybeGroup = node;\n                    if (maybeGroup.group && maybeGroup.children) {\n                        traverse(maybeGroup.children);\n                    }\n                }\n            }\n        }\n        traverse(topLevelNodes);\n        return result;\n    }\n    isEmpty() {\n        let count = 0;\n        iterateObject(this.selectedNodes, (nodeId, rowNode) => {\n            if (rowNode) {\n                count++;\n            }\n        });\n        return count === 0;\n    }\n    deselectAllRowNodes(params) {\n        const callback = (rowNode) => rowNode.selectThisNode(false, undefined, source);\n        const rowModelClientSide = this.rowModel.getType() === 'clientSide';\n        const { source, justFiltered, justCurrentPage } = params;\n        if (justCurrentPage || justFiltered) {\n            if (!rowModelClientSide) {\n                console.error(\"AG Grid: selecting just filtered only works when gridOptions.rowModelType='clientSide'\");\n                return;\n            }\n            this.getNodesToSelect(justFiltered, justCurrentPage).forEach(callback);\n        }\n        else {\n            iterateObject(this.selectedNodes, (id, rowNode) => {\n                // remember the reference can be to null, as we never 'delete' from the map\n                if (rowNode) {\n                    callback(rowNode);\n                }\n            });\n            // this clears down the map (whereas above only sets the items in map to 'undefined')\n            this.reset();\n        }\n        // the above does not clean up the parent rows if they are selected\n        if (rowModelClientSide && this.groupSelectsChildren) {\n            this.updateGroupsFromChildrenSelections(source);\n        }\n        const event = {\n            type: Events.EVENT_SELECTION_CHANGED,\n            source\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    getSelectAllState(justFiltered, justCurrentPage) {\n        let selectedCount = 0;\n        let notSelectedCount = 0;\n        const callback = (node) => {\n            if (this.groupSelectsChildren && node.group) {\n                return;\n            }\n            if (node.isSelected()) {\n                selectedCount++;\n            }\n            else if (!node.selectable) ;\n            else {\n                notSelectedCount++;\n            }\n        };\n        this.getNodesToSelect(justFiltered, justCurrentPage).forEach(callback);\n        // if no rows, always have it unselected\n        if (selectedCount === 0 && notSelectedCount === 0) {\n            return false;\n        }\n        // if mix of selected and unselected, this is indeterminate\n        if (selectedCount > 0 && notSelectedCount > 0) {\n            return null;\n        }\n        // only selected\n        return selectedCount > 0;\n    }\n    /**\n     * @param justFiltered whether to just include nodes which have passed the filter\n     * @param justCurrentPage whether to just include nodes on the current page\n     * @returns all nodes including unselectable nodes which are the target of this selection attempt\n     */\n    getNodesToSelect(justFiltered = false, justCurrentPage = false) {\n        if (this.rowModel.getType() !== 'clientSide') {\n            throw new Error(`selectAll only available when rowModelType='clientSide', ie not ${this.rowModel.getType()}`);\n        }\n        const nodes = [];\n        if (justCurrentPage) {\n            this.paginationProxy.forEachNodeOnPage((node) => {\n                if (!node.group) {\n                    nodes.push(node);\n                    return;\n                }\n                if (!node.expanded) {\n                    // even with groupSelectsChildren, do this recursively as only the filtered children\n                    // are considered as the current page\n                    const recursivelyAddChildren = (child) => {\n                        var _a;\n                        nodes.push(child);\n                        if ((_a = child.childrenAfterFilter) === null || _a === void 0 ? void 0 : _a.length) {\n                            child.childrenAfterFilter.forEach(recursivelyAddChildren);\n                        }\n                    };\n                    recursivelyAddChildren(node);\n                    return;\n                }\n                // if the group node is expanded, the pagination proxy will include the visible nodes to select\n                if (!this.groupSelectsChildren) {\n                    nodes.push(node);\n                }\n            });\n            return nodes;\n        }\n        const clientSideRowModel = this.rowModel;\n        if (justFiltered) {\n            clientSideRowModel.forEachNodeAfterFilter(node => {\n                nodes.push(node);\n            });\n            return nodes;\n        }\n        clientSideRowModel.forEachNode(node => {\n            nodes.push(node);\n        });\n        return nodes;\n    }\n    selectAllRowNodes(params) {\n        if (this.rowModel.getType() !== 'clientSide') {\n            throw new Error(`selectAll only available when rowModelType='clientSide', ie not ${this.rowModel.getType()}`);\n        }\n        const { source, justFiltered, justCurrentPage } = params;\n        const callback = (rowNode) => rowNode.selectThisNode(true, undefined, source);\n        this.getNodesToSelect(justFiltered, justCurrentPage).forEach(callback);\n        // the above does not clean up the parent rows if they are selected\n        if (this.rowModel.getType() === 'clientSide' && this.groupSelectsChildren) {\n            this.updateGroupsFromChildrenSelections(source);\n        }\n        const event = {\n            type: Events.EVENT_SELECTION_CHANGED,\n            source\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    // Used by SSRM\n    getServerSideSelectionState() {\n        return null;\n    }\n    setServerSideSelectionState(state) { }\n};\n__decorate$O([\n    Autowired('rowModel')\n], SelectionService.prototype, \"rowModel\", void 0);\n__decorate$O([\n    Autowired('paginationProxy')\n], SelectionService.prototype, \"paginationProxy\", void 0);\n__decorate$O([\n    __param$5(0, Qualifier('loggerFactory'))\n], SelectionService.prototype, \"setBeans\", null);\n__decorate$O([\n    PostConstruct\n], SelectionService.prototype, \"init\", null);\nSelectionService = __decorate$O([\n    Bean('selectionService')\n], SelectionService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$N = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ColumnApi = class ColumnApi {\n    /** Gets the grid to size the columns to the specified width in pixels, e.g. `sizeColumnsToFit(900)`. To have the grid fit the columns to the grid's width, use the Grid API `gridApi.sizeColumnsToFit()` instead. */\n    sizeColumnsToFit(gridWidth) {\n        // AG-3403 validate that gridWidth is provided because this method has the same name as\n        // a method on the grid API that takes no arguments, and it's easy to confuse the two\n        if (typeof gridWidth === \"undefined\") {\n            console.error('AG Grid: missing parameter to columnApi.sizeColumnsToFit(gridWidth)');\n        }\n        this.columnModel.sizeColumnsToFit(gridWidth, 'api');\n    }\n    /** Call this if you want to open or close a column group. */\n    setColumnGroupOpened(group, newValue) { this.columnModel.setColumnGroupOpened(group, newValue, 'api'); }\n    /** Returns the column group with the given name. */\n    getColumnGroup(name, instanceId) { return this.columnModel.getColumnGroup(name, instanceId); }\n    /** Returns the provided column group with the given name. */\n    getProvidedColumnGroup(name) { return this.columnModel.getProvidedColumnGroup(name); }\n    /** Returns the display name for a column. Useful if you are doing your own header rendering and want the grid to work out if `headerValueGetter` is used, or if you are doing your own column management GUI, to know what to show as the column name. */\n    getDisplayNameForColumn(column, location) { return this.columnModel.getDisplayNameForColumn(column, location) || ''; }\n    /** Returns the display name for a column group (when grouping columns). */\n    getDisplayNameForColumnGroup(columnGroup, location) { return this.columnModel.getDisplayNameForColumnGroup(columnGroup, location) || ''; }\n    /** Returns the column with the given `colKey`, which can either be the `colId` (a string) or the `colDef` (an object). */\n    getColumn(key) { return this.columnModel.getPrimaryColumn(key); }\n    /** Returns all the columns, regardless of visible or not. */\n    getColumns() { return this.columnModel.getAllPrimaryColumns(); }\n    /** Applies the state of the columns from a previous state. Returns `false` if one or more columns could not be found. */\n    applyColumnState(params) { return this.columnModel.applyColumnState(params, 'api'); }\n    /** Gets the state of the columns. Typically used when saving column state. */\n    getColumnState() { return this.columnModel.getColumnState(); }\n    /** Sets the state back to match the originally provided column definitions. */\n    resetColumnState() { this.columnModel.resetColumnState('api'); }\n    /** Gets the state of the column groups. Typically used when saving column group state. */\n    getColumnGroupState() { return this.columnModel.getColumnGroupState(); }\n    /** Sets the state of the column group state from a previous state. */\n    setColumnGroupState(stateItems) { this.columnModel.setColumnGroupState(stateItems, 'api'); }\n    /** Sets the state back to match the originally provided column definitions. */\n    resetColumnGroupState() { this.columnModel.resetColumnGroupState('api'); }\n    /** Returns `true` if pinning left or right, otherwise `false`. */\n    isPinning() { return this.columnModel.isPinningLeft() || this.columnModel.isPinningRight(); }\n    /** Returns `true` if pinning left, otherwise `false`. */\n    isPinningLeft() { return this.columnModel.isPinningLeft(); }\n    /** Returns `true` if pinning right, otherwise `false`. */\n    isPinningRight() { return this.columnModel.isPinningRight(); }\n    /** Returns the column to the right of the provided column, taking into consideration open / closed column groups and visible columns. This is useful if you need to know what column is beside yours e.g. if implementing your own cell navigation. */\n    getDisplayedColAfter(col) { return this.columnModel.getDisplayedColAfter(col); }\n    /** Same as `getVisibleColAfter` except gives column to the left. */\n    getDisplayedColBefore(col) { return this.columnModel.getDisplayedColBefore(col); }\n    /** Sets the visibility of a column. Key can be the column ID or `Column` object. */\n    setColumnVisible(key, visible) { this.columnModel.setColumnVisible(key, visible, 'api'); }\n    /** Same as `setColumnVisible`, but provide a list of column keys. */\n    setColumnsVisible(keys, visible) { this.columnModel.setColumnsVisible(keys, visible, 'api'); }\n    /** Sets the column pinned / unpinned. Key can be the column ID, field, `ColDef` object or `Column` object. */\n    setColumnPinned(key, pinned) { this.columnModel.setColumnPinned(key, pinned, 'api'); }\n    /** Same as `setColumnPinned`, but provide a list of column keys. */\n    setColumnsPinned(keys, pinned) { this.columnModel.setColumnsPinned(keys, pinned, 'api'); }\n    /**\n     * Returns all the grid columns, same as `getColumns()`, except\n     *\n     *  a) it has the order of the columns that are presented in the grid\n     *\n     *  b) it's after the 'pivot' step, so if pivoting, has the value columns for the pivot.\n     */\n    getAllGridColumns() { return this.columnModel.getAllGridColumns(); }\n    /** Same as `getAllDisplayedColumns` but just for the pinned left portion of the grid. */\n    getDisplayedLeftColumns() { return this.columnModel.getDisplayedLeftColumns(); }\n    /** Same as `getAllDisplayedColumns` but just for the center portion of the grid. */\n    getDisplayedCenterColumns() { return this.columnModel.getDisplayedCenterColumns(); }\n    /** Same as `getAllDisplayedColumns` but just for the pinned right portion of the grid. */\n    getDisplayedRightColumns() { return this.columnModel.getDisplayedRightColumns(); }\n    /** Returns all columns currently displayed (e.g. are visible and if in a group, the group is showing the columns) for the pinned left, centre and pinned right portions of the grid. */\n    getAllDisplayedColumns() { return this.columnModel.getAllDisplayedColumns(); }\n    /** Same as `getAllGridColumns()`, except only returns rendered columns, i.e. columns that are not within the viewport and therefore not rendered, due to column virtualisation, are not displayed. */\n    getAllDisplayedVirtualColumns() { return this.columnModel.getViewportColumns(); }\n    /** Moves a column to `toIndex`. The column is first removed, then added at the `toIndex` location, thus index locations will change to the right of the column after the removal. */\n    moveColumn(key, toIndex) {\n        this.columnModel.moveColumn(key, toIndex, 'api');\n    }\n    /** Same as `moveColumn` but works on index locations. */\n    moveColumnByIndex(fromIndex, toIndex) { this.columnModel.moveColumnByIndex(fromIndex, toIndex, 'api'); }\n    /** Same as `moveColumn` but works on list. */\n    moveColumns(columnsToMoveKeys, toIndex) { this.columnModel.moveColumns(columnsToMoveKeys, toIndex, 'api'); }\n    /** Move the column to a new position in the row grouping order. */\n    moveRowGroupColumn(fromIndex, toIndex) { this.columnModel.moveRowGroupColumn(fromIndex, toIndex); }\n    /** Sets the agg function for a column. `aggFunc` can be one of the built-in aggregations or a custom aggregation by name or direct function. */\n    setColumnAggFunc(key, aggFunc) { this.columnModel.setColumnAggFunc(key, aggFunc); }\n    /** Sets the column width on a single column. The finished flag gets included in the resulting event and not used internally by the grid. The finished flag is intended for dragging, where a dragging action will produce many `columnWidth` events, so the consumer of events knows when it receives the last event in a stream. The finished parameter is optional, and defaults to `true`. */\n    setColumnWidth(key, newWidth, finished = true, source) {\n        this.columnModel.setColumnWidths([{ key, newWidth }], false, finished, source);\n    }\n    /** Sets the column widths on multiple columns. This method offers better performance than calling `setColumnWidth` multiple times. The finished flag gets included in the resulting event and not used internally by the grid. The finished flag is intended for dragging, where a dragging action will produce many `columnWidth` events, so the consumer of events knows when it receives the last event in a stream. The finished parameter is optional, and defaults to `true`. */\n    setColumnWidths(columnWidths, finished = true, source) {\n        this.columnModel.setColumnWidths(columnWidths, false, finished, source);\n    }\n    /** Set the pivot mode. */\n    setPivotMode(pivotMode) { this.columnModel.setPivotMode(pivotMode); }\n    /** Get the pivot mode. */\n    isPivotMode() { return this.columnModel.isPivotMode(); }\n    /** Returns the pivot result column for the given `pivotKeys` and `valueColId`. Useful to then call operations on the pivot column. */\n    getPivotResultColumn(pivotKeys, valueColKey) { return this.columnModel.getSecondaryPivotColumn(pivotKeys, valueColKey); }\n    /** Set the value columns to the provided list of columns. */\n    setValueColumns(colKeys) { this.columnModel.setValueColumns(colKeys, 'api'); }\n    /** Get a list of the existing value columns. */\n    getValueColumns() { return this.columnModel.getValueColumns(); }\n    /** Remove the given column from the existing set of value columns. */\n    removeValueColumn(colKey) { this.columnModel.removeValueColumn(colKey, 'api'); }\n    /** Like `removeValueColumn` but remove the given list of columns from the existing set of value columns. */\n    removeValueColumns(colKeys) { this.columnModel.removeValueColumns(colKeys, 'api'); }\n    /** Add the given column to the set of existing value columns. */\n    addValueColumn(colKey) { this.columnModel.addValueColumn(colKey, 'api'); }\n    /** Like `addValueColumn` but add the given list of columns to the existing set of value columns. */\n    addValueColumns(colKeys) { this.columnModel.addValueColumns(colKeys, 'api'); }\n    /** Set the row group columns. */\n    setRowGroupColumns(colKeys) { this.columnModel.setRowGroupColumns(colKeys, 'api'); }\n    /** Remove a column from the row groups. */\n    removeRowGroupColumn(colKey) { this.columnModel.removeRowGroupColumn(colKey, 'api'); }\n    /** Same as `removeRowGroupColumn` but provide a list of columns. */\n    removeRowGroupColumns(colKeys) { this.columnModel.removeRowGroupColumns(colKeys, 'api'); }\n    /** Add a column to the row groups. */\n    addRowGroupColumn(colKey) { this.columnModel.addRowGroupColumn(colKey, 'api'); }\n    /** Same as `addRowGroupColumn` but provide a list of columns. */\n    addRowGroupColumns(colKeys) { this.columnModel.addRowGroupColumns(colKeys, 'api'); }\n    /** Get row group columns. */\n    getRowGroupColumns() { return this.columnModel.getRowGroupColumns(); }\n    /** Set the pivot columns. */\n    setPivotColumns(colKeys) { this.columnModel.setPivotColumns(colKeys, 'api'); }\n    /** Remove a pivot column. */\n    removePivotColumn(colKey) { this.columnModel.removePivotColumn(colKey, 'api'); }\n    /** Same as `removePivotColumn` but provide a list of columns. */\n    removePivotColumns(colKeys) { this.columnModel.removePivotColumns(colKeys, 'api'); }\n    /** Add a pivot column. */\n    addPivotColumn(colKey) { this.columnModel.addPivotColumn(colKey, 'api'); }\n    /** Same as `addPivotColumn` but provide a list of columns. */\n    addPivotColumns(colKeys) { this.columnModel.addPivotColumns(colKeys, 'api'); }\n    /** Get the pivot columns. */\n    getPivotColumns() { return this.columnModel.getPivotColumns(); }\n    /** Same as `getAllDisplayedColumnGroups` but just for the pinned left portion of the grid. */\n    getLeftDisplayedColumnGroups() { return this.columnModel.getDisplayedTreeLeft(); }\n    /** Same as `getAllDisplayedColumnGroups` but just for the center portion of the grid. */\n    getCenterDisplayedColumnGroups() { return this.columnModel.getDisplayedTreeCentre(); }\n    /** Same as `getAllDisplayedColumnGroups` but just for the pinned right portion of the grid. */\n    getRightDisplayedColumnGroups() { return this.columnModel.getDisplayedTreeRight(); }\n    /** Returns all 'root' column headers. If you are not grouping columns, these return the columns. If you are grouping, these return the top level groups - you can navigate down through each one to get the other lower level headers and finally the columns at the bottom. */\n    getAllDisplayedColumnGroups() { return this.columnModel.getAllDisplayedTrees(); }\n    /** Auto-sizes a column based on its contents. */\n    autoSizeColumn(key, skipHeader) { return this.columnModel.autoSizeColumn(key, skipHeader, 'api'); }\n    /** Same as `autoSizeColumn`, but provide a list of column keys. */\n    autoSizeColumns(keys, skipHeader) {\n        this.columnModel.autoSizeColumns({ columns: keys, skipHeader: skipHeader });\n    }\n    /** Calls `autoSizeColumns` on all displayed columns. */\n    autoSizeAllColumns(skipHeader) { this.columnModel.autoSizeAllColumns(skipHeader, 'api'); }\n    /** Set the pivot result columns. */\n    setPivotResultColumns(colDefs) { this.columnModel.setSecondaryColumns(colDefs, 'api'); }\n    /** Returns the grid's pivot result columns. */\n    getPivotResultColumns() { return this.columnModel.getSecondaryColumns(); }\n    cleanDownReferencesToAvoidMemoryLeakInCaseApplicationIsKeepingReferenceToDestroyedGrid() {\n        // some users were raising support issues with regards memory leaks. the problem was the customers applications\n        // were keeping references to the API. trying to educate them all would be difficult, easier to just remove\n        // all references in the API so at least the core grid can be garbage collected.\n        //\n        // wait about 100ms before clearing down the references, in case user has some cleanup to do,\n        // and needs to deference the API first\n        setTimeout(_.removeAllReferences.bind(window, this, 'Column API'), 100);\n    }\n    /** @deprecated v28 Use `getColumns` instead */\n    getAllColumns() {\n        logDeprecation('28.0', 'getAllColumns', 'getColumns');\n        return this.getColumns();\n    }\n    /** @deprecated v28 Use `getColumns` instead. */\n    getPrimaryColumns() {\n        logDeprecation('28.0', 'getPrimaryColumns', 'getColumns');\n        return this.getColumns();\n    }\n    /** @deprecated v28 Use `getPivotResultColumns` instead. */\n    getSecondaryColumns() {\n        logDeprecation('28.0', 'getSecondaryColumns', 'getPivotResultColumns');\n        return this.getPivotResultColumns();\n    }\n    /** @deprecated v28 Use `setPivotResultColumns` instead. */\n    setSecondaryColumns(colDefs) {\n        logDeprecation('28.0', 'setSecondaryColumns', 'setPivotResultColumns');\n        this.setPivotResultColumns(colDefs);\n    }\n    /** @deprecated v28 Use `getPivotResultColumn` instead */\n    getSecondaryPivotColumn(pivotKeys, valueColKey) {\n        logDeprecation('28.0', 'getSecondaryPivotColumn', 'getPivotResultColumn');\n        return this.getPivotResultColumn(pivotKeys, valueColKey);\n    }\n};\n__decorate$N([\n    Autowired('columnModel')\n], ColumnApi.prototype, \"columnModel\", void 0);\n__decorate$N([\n    PreDestroy\n], ColumnApi.prototype, \"cleanDownReferencesToAvoidMemoryLeakInCaseApplicationIsKeepingReferenceToDestroyedGrid\", null);\nColumnApi = __decorate$N([\n    Bean('columnApi')\n], ColumnApi);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$M = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ValueService = class ValueService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.initialised = false;\n        this.isSsrm = false;\n    }\n    init() {\n        this.isSsrm = this.gridOptionsService.isRowModelType('serverSide');\n        this.cellExpressions = this.gridOptionsService.is('enableCellExpressions');\n        this.isTreeData = this.gridOptionsService.is('treeData');\n        this.initialised = true;\n        // We listen to our own event and use it to call the columnSpecific callback,\n        // this way the handler calls are correctly interleaved with other global events\n        this.eventService.addEventListener(Events.EVENT_CELL_VALUE_CHANGED, (event) => this.callColumnCellValueChangedHandler(event), this.gridOptionsService.useAsyncEvents());\n        this.addManagedPropertyListener('treeData', (propChange) => this.isTreeData = propChange.currentValue);\n    }\n    getValue(column, rowNode, forFilter = false, ignoreAggData = false) {\n        // hack - the grid is getting refreshed before this bean gets initialised, race condition.\n        // really should have a way so they get initialised in the right order???\n        if (!this.initialised) {\n            this.init();\n        }\n        if (!rowNode) {\n            return;\n        }\n        // pull these out to make code below easier to read\n        const colDef = column.getColDef();\n        const field = colDef.field;\n        const colId = column.getColId();\n        const data = rowNode.data;\n        let result;\n        // if there is a value getter, this gets precedence over a field\n        const groupDataExists = rowNode.groupData && rowNode.groupData[colId] !== undefined;\n        const aggDataExists = !ignoreAggData && rowNode.aggData && rowNode.aggData[colId] !== undefined;\n        // SSRM agg data comes from the data attribute, so ignore that instead\n        const ignoreSsrmAggData = this.isSsrm && ignoreAggData && !!column.getColDef().aggFunc;\n        const ssrmFooterGroupCol = this.isSsrm && rowNode.footer && rowNode.field && (column.getColDef().showRowGroup === true || column.getColDef().showRowGroup === rowNode.field);\n        if (forFilter && colDef.filterValueGetter) {\n            result = this.executeFilterValueGetter(colDef.filterValueGetter, data, column, rowNode);\n        }\n        else if (this.isTreeData && aggDataExists) {\n            result = rowNode.aggData[colId];\n        }\n        else if (this.isTreeData && colDef.valueGetter) {\n            result = this.executeValueGetter(colDef.valueGetter, data, column, rowNode);\n        }\n        else if (this.isTreeData && (field && data)) {\n            result = getValueUsingField(data, field, column.isFieldContainsDots());\n        }\n        else if (groupDataExists) {\n            result = rowNode.groupData[colId];\n        }\n        else if (aggDataExists) {\n            result = rowNode.aggData[colId];\n        }\n        else if (colDef.valueGetter) {\n            result = this.executeValueGetter(colDef.valueGetter, data, column, rowNode);\n        }\n        else if (ssrmFooterGroupCol) {\n            // this is for group footers in SSRM, as the SSRM row won't have groupData, need to extract\n            // the group value from the data using the row field\n            result = getValueUsingField(data, rowNode.field, column.isFieldContainsDots());\n        }\n        else if (field && data && !ignoreSsrmAggData) {\n            result = getValueUsingField(data, field, column.isFieldContainsDots());\n        }\n        // the result could be an expression itself, if we are allowing cell values to be expressions\n        if (this.cellExpressions && (typeof result === 'string') && result.indexOf('=') === 0) {\n            const cellValueGetter = result.substring(1);\n            result = this.executeValueGetter(cellValueGetter, data, column, rowNode);\n        }\n        if (result == null) {\n            const openedGroup = this.getOpenedGroup(rowNode, column);\n            if (openedGroup != null) {\n                return openedGroup;\n            }\n        }\n        return result;\n    }\n    getOpenedGroup(rowNode, column) {\n        if (!this.gridOptionsService.is('showOpenedGroup')) {\n            return;\n        }\n        const colDef = column.getColDef();\n        if (!colDef.showRowGroup) {\n            return;\n        }\n        const showRowGroup = column.getColDef().showRowGroup;\n        let pointer = rowNode.parent;\n        while (pointer != null) {\n            if (pointer.rowGroupColumn && (showRowGroup === true || showRowGroup === pointer.rowGroupColumn.getColId())) {\n                return pointer.key;\n            }\n            pointer = pointer.parent;\n        }\n        return undefined;\n    }\n    /**\n     * Sets the value of a GridCell\n     * @param rowNode The `RowNode` to be updated\n     * @param colKey The `Column` to be updated\n     * @param newValue The new value to be set\n     * @param eventSource The event source\n     * @returns `True` if the value has been updated, otherwise`False`.\n     */\n    setValue(rowNode, colKey, newValue, eventSource) {\n        const column = this.columnModel.getPrimaryColumn(colKey);\n        if (!rowNode || !column) {\n            return false;\n        }\n        // this will only happen if user is trying to paste into a group row, which doesn't make sense\n        // the user should not be trying to paste into group rows\n        if (missing(rowNode.data)) {\n            rowNode.data = {};\n        }\n        const { field, valueSetter } = column.getColDef();\n        if (missing(field) && missing(valueSetter)) {\n            console.warn(`AG Grid: you need either field or valueSetter set on colDef for editing to work`);\n            return false;\n        }\n        if (!this.dataTypeService.checkType(column, newValue)) {\n            console.warn(`AG Grid: Data type of the new value does not match the cell data type of the column`);\n            return false;\n        }\n        const params = {\n            node: rowNode,\n            data: rowNode.data,\n            oldValue: this.getValue(column, rowNode),\n            newValue: newValue,\n            colDef: column.getColDef(),\n            column: column,\n            api: this.gridOptionsService.api,\n            columnApi: this.gridOptionsService.columnApi,\n            context: this.gridOptionsService.context\n        };\n        params.newValue = newValue;\n        let valueWasDifferent;\n        if (exists(valueSetter)) {\n            if (typeof valueSetter === 'function') {\n                valueWasDifferent = valueSetter(params);\n            }\n            else {\n                valueWasDifferent = this.expressionService.evaluate(valueSetter, params);\n            }\n        }\n        else {\n            valueWasDifferent = this.setValueUsingField(rowNode.data, field, newValue, column.isFieldContainsDots());\n        }\n        // in case user forgot to return something (possible if they are not using TypeScript\n        // and just forgot we default the return value to true, so we always refresh.\n        if (valueWasDifferent === undefined) {\n            valueWasDifferent = true;\n        }\n        // if no change to the value, then no need to do the updating, or notifying via events.\n        // otherwise the user could be tabbing around the grid, and cellValueChange would get called\n        // all the time.\n        if (!valueWasDifferent) {\n            return false;\n        }\n        // reset quick filter on this row\n        rowNode.resetQuickFilterAggregateText();\n        this.valueCache.onDataChanged();\n        params.newValue = this.getValue(column, rowNode);\n        const event = {\n            type: Events.EVENT_CELL_VALUE_CHANGED,\n            event: null,\n            rowIndex: rowNode.rowIndex,\n            rowPinned: rowNode.rowPinned,\n            column: params.column,\n            api: params.api,\n            columnApi: params.columnApi,\n            colDef: params.colDef,\n            context: params.context,\n            data: rowNode.data,\n            node: rowNode,\n            oldValue: params.oldValue,\n            newValue: params.newValue,\n            value: params.newValue,\n            source: eventSource\n        };\n        this.eventService.dispatchEvent(event);\n        return true;\n    }\n    callColumnCellValueChangedHandler(event) {\n        const onCellValueChanged = event.colDef.onCellValueChanged;\n        if (typeof onCellValueChanged === 'function') {\n            onCellValueChanged({\n                node: event.node,\n                data: event.data,\n                oldValue: event.oldValue,\n                newValue: event.newValue,\n                colDef: event.colDef,\n                column: event.column,\n                api: event.api,\n                columnApi: event.columnApi,\n                context: event.context\n            });\n        }\n    }\n    setValueUsingField(data, field, newValue, isFieldContainsDots) {\n        if (!field) {\n            return false;\n        }\n        // if no '.', then it's not a deep value\n        let valuesAreSame = false;\n        if (!isFieldContainsDots) {\n            // soft comparison to match strings and numbers\n            valuesAreSame = data[field] == newValue;\n            if (!valuesAreSame) {\n                data[field] = newValue;\n            }\n        }\n        else {\n            // otherwise it is a deep value, so need to dig for it\n            const fieldPieces = field.split('.');\n            let currentObject = data;\n            while (fieldPieces.length > 0 && currentObject) {\n                const fieldPiece = fieldPieces.shift();\n                if (fieldPieces.length === 0) {\n                    // soft comparison to match strings and numbers\n                    valuesAreSame = currentObject[fieldPiece] == newValue;\n                    if (!valuesAreSame) {\n                        currentObject[fieldPiece] = newValue;\n                    }\n                }\n                else {\n                    currentObject = currentObject[fieldPiece];\n                }\n            }\n        }\n        return !valuesAreSame;\n    }\n    executeFilterValueGetter(valueGetter, data, column, rowNode) {\n        const params = {\n            data: data,\n            node: rowNode,\n            column: column,\n            colDef: column.getColDef(),\n            api: this.gridOptionsService.api,\n            columnApi: this.gridOptionsService.columnApi,\n            context: this.gridOptionsService.context,\n            getValue: this.getValueCallback.bind(this, rowNode)\n        };\n        if (typeof valueGetter === 'function') {\n            return valueGetter(params);\n        }\n        return this.expressionService.evaluate(valueGetter, params);\n    }\n    executeValueGetter(valueGetter, data, column, rowNode) {\n        const colId = column.getColId();\n        // if inside the same turn, just return back the value we got last time\n        const valueFromCache = this.valueCache.getValue(rowNode, colId);\n        if (valueFromCache !== undefined) {\n            return valueFromCache;\n        }\n        const params = {\n            data: data,\n            node: rowNode,\n            column: column,\n            colDef: column.getColDef(),\n            api: this.gridOptionsService.api,\n            columnApi: this.gridOptionsService.columnApi,\n            context: this.gridOptionsService.context,\n            getValue: this.getValueCallback.bind(this, rowNode)\n        };\n        let result;\n        if (typeof valueGetter === 'function') {\n            result = valueGetter(params);\n        }\n        else {\n            result = this.expressionService.evaluate(valueGetter, params);\n        }\n        // if a turn is active, store the value in case the grid asks for it again\n        this.valueCache.setValue(rowNode, colId, result);\n        return result;\n    }\n    getValueCallback(node, field) {\n        const otherColumn = this.columnModel.getPrimaryColumn(field);\n        if (otherColumn) {\n            return this.getValue(otherColumn, node);\n        }\n        return null;\n    }\n    // used by row grouping and pivot, to get key for a row. col can be a pivot col or a row grouping col\n    getKeyForNode(col, rowNode) {\n        const value = this.getValue(col, rowNode);\n        const keyCreator = col.getColDef().keyCreator;\n        let result = value;\n        if (keyCreator) {\n            const keyParams = {\n                value: value,\n                colDef: col.getColDef(),\n                column: col,\n                node: rowNode,\n                data: rowNode.data,\n                api: this.gridOptionsService.api,\n                columnApi: this.gridOptionsService.columnApi,\n                context: this.gridOptionsService.context\n            };\n            result = keyCreator(keyParams);\n        }\n        // if already a string, or missing, just return it\n        if (typeof result === 'string' || result == null) {\n            return result;\n        }\n        result = String(result);\n        if (result === '[object Object]') {\n            doOnce(() => {\n                console.warn('AG Grid: a column you are grouping or pivoting by has objects as values. If you want to group by complex objects then either a) use a colDef.keyCreator (se AG Grid docs) or b) to toString() on the object to return a key');\n            }, 'getKeyForNode - warn about [object,object]');\n        }\n        return result;\n    }\n};\n__decorate$M([\n    Autowired('expressionService')\n], ValueService.prototype, \"expressionService\", void 0);\n__decorate$M([\n    Autowired('columnModel')\n], ValueService.prototype, \"columnModel\", void 0);\n__decorate$M([\n    Autowired('valueCache')\n], ValueService.prototype, \"valueCache\", void 0);\n__decorate$M([\n    Autowired('dataTypeService')\n], ValueService.prototype, \"dataTypeService\", void 0);\n__decorate$M([\n    PostConstruct\n], ValueService.prototype, \"init\", null);\nValueService = __decorate$M([\n    Bean('valueService')\n], ValueService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$L = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param$4 = (undefined && undefined.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nlet ExpressionService = class ExpressionService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.expressionToFunctionCache = {};\n    }\n    setBeans(loggerFactory) {\n        this.logger = loggerFactory.create('ExpressionService');\n    }\n    evaluate(expression, params) {\n        if (typeof expression === 'string') {\n            // valueGetter is an expression, so execute the expression\n            return this.evaluateExpression(expression, params);\n        }\n        else {\n            console.error('AG Grid: value should be either a string or a function', expression);\n        }\n    }\n    evaluateExpression(expression, params) {\n        try {\n            const javaScriptFunction = this.createExpressionFunction(expression);\n            // the params don't have all these values, rather we add every possible\n            // value a params can have, which makes whatever is in the params available.\n            const result = javaScriptFunction(params.value, params.context, params.oldValue, params.newValue, params.value, params.node, params.data, params.colDef, params.rowIndex, params.api, params.columnApi, params.getValue, params.column, params.columnGroup);\n            return result;\n        }\n        catch (e) {\n            // the expression failed, which can happen, as it's the client that\n            // provides the expression. so print a nice message\n            // tslint:disable-next-line\n            console.log('Processing of the expression failed');\n            // tslint:disable-next-line\n            console.log('Expression = ' + expression);\n            // tslint:disable-next-line\n            console.log('Params =', params);\n            // tslint:disable-next-line\n            console.log('Exception = ' + e);\n            return null;\n        }\n    }\n    createExpressionFunction(expression) {\n        // check cache first\n        if (this.expressionToFunctionCache[expression]) {\n            return this.expressionToFunctionCache[expression];\n        }\n        // if not found in cache, return the function\n        const functionBody = this.createFunctionBody(expression);\n        const theFunction = new Function('x, ctx, oldValue, newValue, value, node, data, colDef, rowIndex, api, columnApi, getValue, column, columnGroup', functionBody);\n        // store in cache\n        this.expressionToFunctionCache[expression] = theFunction;\n        return theFunction;\n    }\n    createFunctionBody(expression) {\n        // if the expression has the 'return' word in it, then use as is,\n        // if not, then wrap it with return and ';' to make a function\n        if (expression.indexOf('return') >= 0) {\n            return expression;\n        }\n        else {\n            return 'return ' + expression + ';';\n        }\n    }\n};\n__decorate$L([\n    __param$4(0, Qualifier('loggerFactory'))\n], ExpressionService.prototype, \"setBeans\", null);\nExpressionService = __decorate$L([\n    Bean('expressionService')\n], ExpressionService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$K = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet TemplateService = class TemplateService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.templateCache = {};\n        this.waitingCallbacks = {};\n    }\n    // returns the template if it is loaded, or null if it is not loaded\n    // but will call the callback when it is loaded\n    getTemplate(url, callback) {\n        const templateFromCache = this.templateCache[url];\n        if (templateFromCache) {\n            return templateFromCache;\n        }\n        let callbackList = this.waitingCallbacks[url];\n        const that = this;\n        if (!callbackList) {\n            // first time this was called, so need a new list for callbacks\n            callbackList = [];\n            this.waitingCallbacks[url] = callbackList;\n            // and also need to do the http request\n            const client = new XMLHttpRequest();\n            client.onload = function () {\n                that.handleHttpResult(this, url);\n            };\n            client.open(\"GET\", url);\n            client.send();\n        }\n        // add this callback\n        if (callback) {\n            callbackList.push(callback);\n        }\n        // caller needs to wait for template to load, so return null\n        return null;\n    }\n    handleHttpResult(httpResult, url) {\n        if (httpResult.status !== 200 || httpResult.response === null) {\n            console.warn(`AG Grid: Unable to get template error ${httpResult.status} - ${url}`);\n            return;\n        }\n        // response success, so process it\n        // in IE9 the response is in - responseText\n        this.templateCache[url] = httpResult.response || httpResult.responseText;\n        // inform all listeners that this is now in the cache\n        const callbacks = this.waitingCallbacks[url];\n        for (let i = 0; i < callbacks.length; i++) {\n            const callback = callbacks[i];\n            // we could pass the callback the response, however we know the client of this code\n            // is the cell renderer, and it passes the 'cellRefresh' method in as the callback\n            // which doesn't take any parameters.\n            callback();\n        }\n    }\n};\nTemplateService = __decorate$K([\n    Bean('templateService')\n], TemplateService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$J = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param$3 = (undefined && undefined.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nlet LoggerFactory = class LoggerFactory extends BeanStub {\n    setBeans(gridOptionsService) {\n        this.logging = gridOptionsService.is('debug');\n    }\n    create(name) {\n        return new Logger(name, this.isLogging.bind(this));\n    }\n    isLogging() {\n        return this.logging;\n    }\n};\n__decorate$J([\n    __param$3(0, Qualifier('gridOptionsService'))\n], LoggerFactory.prototype, \"setBeans\", null);\nLoggerFactory = __decorate$J([\n    Bean('loggerFactory')\n], LoggerFactory);\nclass Logger {\n    constructor(name, isLoggingFunc) {\n        this.name = name;\n        this.isLoggingFunc = isLoggingFunc;\n    }\n    isLogging() {\n        return this.isLoggingFunc();\n    }\n    log(message) {\n        if (this.isLoggingFunc()) {\n            // tslint:disable-next-line\n            console.log('AG Grid.' + this.name + ': ' + message);\n        }\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$I = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass GridCtrl extends BeanStub {\n    setComp(view, eGridDiv, eGui) {\n        this.view = view;\n        this.eGridHostDiv = eGridDiv;\n        this.eGui = eGui;\n        this.eGui.setAttribute('grid-id', this.context.getGridId());\n        // this drop target is just used to see if the drop event is inside the grid\n        this.dragAndDropService.addDropTarget({\n            getContainer: () => this.eGui,\n            isInterestedIn: (type) => type === DragSourceType.HeaderCell || type === DragSourceType.ToolPanel,\n            getIconName: () => DragAndDropService.ICON_NOT_ALLOWED,\n        });\n        this.mouseEventService.stampTopLevelGridCompWithGridInstance(eGridDiv);\n        this.createManagedBean(new LayoutFeature(this.view));\n        this.addRtlSupport();\n        this.addManagedListener(this, Events.EVENT_KEYBOARD_FOCUS, () => {\n            this.view.addOrRemoveKeyboardFocusClass(true);\n        });\n        this.addManagedListener(this, Events.EVENT_MOUSE_FOCUS, () => {\n            this.view.addOrRemoveKeyboardFocusClass(false);\n        });\n        const unsubscribeFromResize = this.resizeObserverService.observeResize(this.eGridHostDiv, this.onGridSizeChanged.bind(this));\n        this.addDestroyFunc(() => unsubscribeFromResize());\n        this.ctrlsService.registerGridCtrl(this);\n    }\n    isDetailGrid() {\n        var _a;\n        const el = this.focusService.findTabbableParent(this.getGui());\n        return ((_a = el === null || el === void 0 ? void 0 : el.getAttribute('row-id')) === null || _a === void 0 ? void 0 : _a.startsWith('detail')) || false;\n    }\n    showDropZones() {\n        return ModuleRegistry.isRegistered(ModuleNames.RowGroupingModule, this.context.getGridId());\n    }\n    showSideBar() {\n        return ModuleRegistry.isRegistered(ModuleNames.SideBarModule, this.context.getGridId());\n    }\n    showStatusBar() {\n        return ModuleRegistry.isRegistered(ModuleNames.StatusBarModule, this.context.getGridId());\n    }\n    showWatermark() {\n        return ModuleRegistry.isRegistered(ModuleNames.EnterpriseCoreModule, this.context.getGridId());\n    }\n    onGridSizeChanged() {\n        const event = {\n            type: Events.EVENT_GRID_SIZE_CHANGED,\n            clientWidth: this.eGridHostDiv.clientWidth,\n            clientHeight: this.eGridHostDiv.clientHeight\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    addRtlSupport() {\n        const cssClass = this.gridOptionsService.is('enableRtl') ? 'ag-rtl' : 'ag-ltr';\n        this.view.setRtlClass(cssClass);\n    }\n    destroyGridUi() {\n        this.view.destroyGridUi();\n    }\n    getGui() {\n        return this.eGui;\n    }\n    setResizeCursor(on) {\n        this.view.setCursor(on ? 'ew-resize' : null);\n    }\n    disableUserSelect(on) {\n        this.view.setUserSelect(on ? 'none' : null);\n    }\n    focusNextInnerContainer(backwards) {\n        const eDocument = this.gridOptionsService.getDocument();\n        const focusableContainers = this.view.getFocusableContainers();\n        const idxWithFocus = focusableContainers.findIndex(container => container.contains(eDocument.activeElement));\n        const nextIdx = idxWithFocus + (backwards ? -1 : 1);\n        if (nextIdx <= 0 || nextIdx >= focusableContainers.length) {\n            return false;\n        }\n        return this.focusService.focusInto(focusableContainers[nextIdx]);\n    }\n    focusInnerElement(fromBottom) {\n        const focusableContainers = this.view.getFocusableContainers();\n        const allColumns = this.columnModel.getAllDisplayedColumns();\n        if (fromBottom) {\n            if (focusableContainers.length > 1) {\n                return this.focusService.focusInto(last(focusableContainers), true);\n            }\n            const lastColumn = last(allColumns);\n            if (this.focusService.focusGridView(lastColumn, true)) {\n                return true;\n            }\n        }\n        if (this.gridOptionsService.getNum('headerHeight') === 0) {\n            return this.focusService.focusGridView(allColumns[0]);\n        }\n        return this.focusService.focusFirstHeader();\n    }\n    forceFocusOutOfContainer(up = false) {\n        this.view.forceFocusOutOfContainer(up);\n    }\n}\n__decorate$I([\n    Autowired('focusService')\n], GridCtrl.prototype, \"focusService\", void 0);\n__decorate$I([\n    Autowired('resizeObserverService')\n], GridCtrl.prototype, \"resizeObserverService\", void 0);\n__decorate$I([\n    Autowired('columnModel')\n], GridCtrl.prototype, \"columnModel\", void 0);\n__decorate$I([\n    Autowired('ctrlsService')\n], GridCtrl.prototype, \"ctrlsService\", void 0);\n__decorate$I([\n    Autowired('mouseEventService')\n], GridCtrl.prototype, \"mouseEventService\", void 0);\n__decorate$I([\n    Autowired('dragAndDropService')\n], GridCtrl.prototype, \"dragAndDropService\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$H = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass GridComp extends TabGuardComp {\n    constructor(eGridDiv) {\n        super();\n        this.eGridDiv = eGridDiv;\n    }\n    postConstruct() {\n        this.logger = this.loggerFactory.create('GridComp');\n        const compProxy = {\n            destroyGridUi: () => this.destroyBean(this),\n            setRtlClass: (cssClass) => this.addCssClass(cssClass),\n            addOrRemoveKeyboardFocusClass: (addOrRemove) => this.addOrRemoveCssClass(FocusService.AG_KEYBOARD_FOCUS, addOrRemove),\n            forceFocusOutOfContainer: this.forceFocusOutOfContainer.bind(this),\n            updateLayoutClasses: this.updateLayoutClasses.bind(this),\n            getFocusableContainers: this.getFocusableContainers.bind(this),\n            setUserSelect: value => {\n                this.getGui().style.userSelect = value != null ? value : '';\n                this.getGui().style.webkitUserSelect = value != null ? value : '';\n            },\n            setCursor: value => {\n                this.getGui().style.cursor = value != null ? value : '';\n            }\n        };\n        this.ctrl = this.createManagedBean(new GridCtrl());\n        const template = this.createTemplate();\n        this.setTemplate(template);\n        this.ctrl.setComp(compProxy, this.eGridDiv, this.getGui());\n        this.insertGridIntoDom();\n        this.initialiseTabGuard({\n            // we want to override the default behaviour to do nothing for onTabKeyDown\n            onTabKeyDown: () => undefined,\n            focusInnerElement: fromBottom => this.ctrl.focusInnerElement(fromBottom)\n        });\n    }\n    insertGridIntoDom() {\n        const eGui = this.getGui();\n        this.eGridDiv.appendChild(eGui);\n        this.addDestroyFunc(() => {\n            this.eGridDiv.removeChild(eGui);\n            this.logger.log('Grid removed from DOM');\n        });\n    }\n    updateLayoutClasses(cssClass, params) {\n        const eRootWrapperBodyClassList = this.eRootWrapperBody.classList;\n        eRootWrapperBodyClassList.toggle(LayoutCssClasses.AUTO_HEIGHT, params.autoHeight);\n        eRootWrapperBodyClassList.toggle(LayoutCssClasses.NORMAL, params.normal);\n        eRootWrapperBodyClassList.toggle(LayoutCssClasses.PRINT, params.print);\n        this.addOrRemoveCssClass(LayoutCssClasses.AUTO_HEIGHT, params.autoHeight);\n        this.addOrRemoveCssClass(LayoutCssClasses.NORMAL, params.normal);\n        this.addOrRemoveCssClass(LayoutCssClasses.PRINT, params.print);\n    }\n    createTemplate() {\n        const dropZones = this.ctrl.showDropZones() ? '<ag-grid-header-drop-zones></ag-grid-header-drop-zones>' : '';\n        const sideBar = this.ctrl.showSideBar() ? '<ag-side-bar ref=\"sideBar\"></ag-side-bar>' : '';\n        const statusBar = this.ctrl.showStatusBar() ? '<ag-status-bar ref=\"statusBar\"></ag-status-bar>' : '';\n        const watermark = this.ctrl.showWatermark() ? '<ag-watermark></ag-watermark>' : '';\n        const template = /* html */ `<div class=\"ag-root-wrapper\" role=\"presentation\">\n                ${dropZones}\n                <div class=\"ag-root-wrapper-body\" ref=\"rootWrapperBody\" role=\"presentation\">\n                    <ag-grid-body ref=\"gridBody\"></ag-grid-body>\n                    ${sideBar}\n                </div>\n                ${statusBar}\n                <ag-pagination></ag-pagination>\n                ${watermark}\n            </div>`;\n        return template;\n    }\n    getFocusableElement() {\n        return this.eRootWrapperBody;\n    }\n    getFocusableContainers() {\n        const focusableContainers = [\n            this.gridBodyComp.getGui()\n        ];\n        if (this.sideBarComp) {\n            focusableContainers.push(this.sideBarComp.getGui());\n        }\n        return focusableContainers.filter(el => isVisible(el));\n    }\n}\n__decorate$H([\n    Autowired('loggerFactory')\n], GridComp.prototype, \"loggerFactory\", void 0);\n__decorate$H([\n    RefSelector('gridBody')\n], GridComp.prototype, \"gridBodyComp\", void 0);\n__decorate$H([\n    RefSelector('sideBar')\n], GridComp.prototype, \"sideBarComp\", void 0);\n__decorate$H([\n    RefSelector('rootWrapperBody')\n], GridComp.prototype, \"eRootWrapperBody\", void 0);\n__decorate$H([\n    PostConstruct\n], GridComp.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$G = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar SortController_1;\nlet SortController = SortController_1 = class SortController extends BeanStub {\n    progressSort(column, multiSort, source) {\n        const nextDirection = this.getNextSortDirection(column);\n        this.setSortForColumn(column, nextDirection, multiSort, source);\n    }\n    setSortForColumn(column, sort, multiSort, source) {\n        // auto correct - if sort not legal value, then set it to 'no sort' (which is null)\n        if (sort !== 'asc' && sort !== 'desc') {\n            sort = null;\n        }\n        const isColumnsSortingCoupledToGroup = this.gridOptionsService.isColumnsSortingCoupledToGroup();\n        let columnsToUpdate = [column];\n        if (isColumnsSortingCoupledToGroup) {\n            if (column.getColDef().showRowGroup) {\n                const rowGroupColumns = this.columnModel.getSourceColumnsForGroupColumn(column);\n                const sortableRowGroupColumns = rowGroupColumns === null || rowGroupColumns === void 0 ? void 0 : rowGroupColumns.filter(col => col.getColDef().sortable);\n                if (sortableRowGroupColumns) {\n                    columnsToUpdate = [column, ...sortableRowGroupColumns];\n                }\n            }\n        }\n        columnsToUpdate.forEach(col => col.setSort(sort, source));\n        const doingMultiSort = (multiSort || this.gridOptionsService.is('alwaysMultiSort')) && !this.gridOptionsService.is('suppressMultiSort');\n        // clear sort on all columns except those changed, and update the icons\n        if (!doingMultiSort) {\n            this.clearSortBarTheseColumns(columnsToUpdate, source);\n        }\n        // sortIndex used for knowing order of cols when multi-col sort\n        this.updateSortIndex(column);\n        this.dispatchSortChangedEvents(source);\n    }\n    updateSortIndex(lastColToChange) {\n        const isCoupled = this.gridOptionsService.isColumnsSortingCoupledToGroup();\n        const groupParent = this.columnModel.getGroupDisplayColumnForGroup(lastColToChange.getId());\n        const lastSortIndexCol = isCoupled ? groupParent || lastColToChange : lastColToChange;\n        const allSortedCols = this.getColumnsWithSortingOrdered();\n        // reset sort index on everything\n        this.columnModel.getPrimaryAndSecondaryAndAutoColumns().forEach(col => col.setSortIndex(null));\n        const allSortedColsWithoutChanges = allSortedCols.filter(col => col !== lastSortIndexCol);\n        const sortedColsWithIndices = !!lastSortIndexCol.getSort() ? [...allSortedColsWithoutChanges, lastSortIndexCol] : allSortedColsWithoutChanges;\n        sortedColsWithIndices.forEach((col, idx) => (col.setSortIndex(idx)));\n    }\n    // gets called by API, so if data changes, use can call this, which will end up\n    // working out the sort order again of the rows.\n    onSortChanged(source) {\n        this.dispatchSortChangedEvents(source);\n    }\n    isSortActive() {\n        // pull out all the columns that have sorting set\n        const allCols = this.columnModel.getPrimaryAndSecondaryAndAutoColumns();\n        const sortedCols = allCols.filter(column => !!column.getSort());\n        return sortedCols && sortedCols.length > 0;\n    }\n    dispatchSortChangedEvents(source) {\n        const event = {\n            type: Events.EVENT_SORT_CHANGED,\n            source\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    clearSortBarTheseColumns(columnsToSkip, source) {\n        this.columnModel.getPrimaryAndSecondaryAndAutoColumns().forEach((columnToClear) => {\n            // Do not clear if either holding shift, or if column in question was clicked\n            if (!columnsToSkip.includes(columnToClear)) {\n                // setting to 'undefined' as null means 'none' rather than cleared, otherwise issue will arise\n                // if sort order is: ['desc', null , 'asc'], as it will start at null rather than 'desc'.\n                columnToClear.setSort(undefined, source);\n            }\n        });\n    }\n    getNextSortDirection(column) {\n        let sortingOrder;\n        if (column.getColDef().sortingOrder) {\n            sortingOrder = column.getColDef().sortingOrder;\n        }\n        else if (this.gridOptionsService.get('sortingOrder')) {\n            sortingOrder = this.gridOptionsService.get('sortingOrder');\n        }\n        else {\n            sortingOrder = SortController_1.DEFAULT_SORTING_ORDER;\n        }\n        if (!Array.isArray(sortingOrder) || sortingOrder.length <= 0) {\n            console.warn(`AG Grid: sortingOrder must be an array with at least one element, currently it\\'s ${sortingOrder}`);\n            return null;\n        }\n        const currentIndex = sortingOrder.indexOf(column.getSort());\n        const notInArray = currentIndex < 0;\n        const lastItemInArray = currentIndex == sortingOrder.length - 1;\n        let result;\n        if (notInArray || lastItemInArray) {\n            result = sortingOrder[0];\n        }\n        else {\n            result = sortingOrder[currentIndex + 1];\n        }\n        // verify the sort type exists, as the user could provide the sortingOrder, need to make sure it's valid\n        if (SortController_1.DEFAULT_SORTING_ORDER.indexOf(result) < 0) {\n            console.warn('AG Grid: invalid sort type ' + result);\n            return null;\n        }\n        return result;\n    }\n    /**\n     * @param includeRedundantColumns whether to include non-grouped, non-secondary, non-aggregated columns when pivot active\n     * @returns a map of sort indexes for every sorted column, if groups sort primaries then they will have equivalent indices\n     */\n    getIndexedSortMap() {\n        // pull out all the columns that have sorting set\n        let allSortedCols = this.columnModel.getPrimaryAndSecondaryAndAutoColumns()\n            .filter(col => !!col.getSort());\n        if (this.columnModel.isPivotMode()) {\n            const isSortingLinked = this.gridOptionsService.isColumnsSortingCoupledToGroup();\n            allSortedCols = allSortedCols.filter(col => {\n                const isAggregated = !!col.getAggFunc();\n                const isSecondary = !col.isPrimary();\n                const isGroup = isSortingLinked ? this.columnModel.getGroupDisplayColumnForGroup(col.getId()) : col.getColDef().showRowGroup;\n                return isAggregated || isSecondary || isGroup;\n            });\n        }\n        const sortedRowGroupCols = this.columnModel.getRowGroupColumns()\n            .filter(col => !!col.getSort());\n        const isSortLinked = this.gridOptionsService.isColumnsSortingCoupledToGroup() && !!sortedRowGroupCols.length;\n        if (isSortLinked) {\n            allSortedCols = [\n                ...new Set(\n                // if linked sorting, replace all columns with the display group column for index purposes, and ensure uniqueness\n                allSortedCols.map(col => { var _a; return (_a = this.columnModel.getGroupDisplayColumnForGroup(col.getId())) !== null && _a !== void 0 ? _a : col; }))\n            ];\n        }\n        // when both cols are missing sortIndex, we use the position of the col in all cols list.\n        // this means if colDefs only have sort, but no sortIndex, we deterministically pick which\n        // cols is sorted by first.\n        const allColsIndexes = {};\n        allSortedCols.forEach((col, index) => allColsIndexes[col.getId()] = index);\n        // put the columns in order of which one got sorted first\n        allSortedCols.sort((a, b) => {\n            const iA = a.getSortIndex();\n            const iB = b.getSortIndex();\n            if (iA != null && iB != null) {\n                return iA - iB; // both present, normal comparison\n            }\n            else if (iA == null && iB == null) {\n                // both missing, compare using column positions\n                const posA = allColsIndexes[a.getId()];\n                const posB = allColsIndexes[b.getId()];\n                return posA > posB ? 1 : -1;\n            }\n            else if (iB == null) {\n                return -1; // iB missing\n            }\n            else {\n                return 1; // iA missing\n            }\n        });\n        const indexMap = new Map();\n        allSortedCols.forEach((col, idx) => indexMap.set(col, idx));\n        // add the row group cols back\n        if (isSortLinked) {\n            sortedRowGroupCols.forEach(col => {\n                const groupDisplayCol = this.columnModel.getGroupDisplayColumnForGroup(col.getId());\n                indexMap.set(col, indexMap.get(groupDisplayCol));\n            });\n        }\n        return indexMap;\n    }\n    getColumnsWithSortingOrdered() {\n        // pull out all the columns that have sorting set\n        return [...this.getIndexedSortMap().entries()]\n            .sort(([col1, idx1], [col2, idx2]) => idx1 - idx2)\n            .map(([col]) => col);\n    }\n    // used by server side row models, to sent sort to server\n    getSortModel() {\n        // because this is used by the SSRM, we include redundant options and let the server decide\n        return this.getColumnsWithSortingOrdered().map(column => ({\n            sort: column.getSort(),\n            colId: column.getId()\n        }));\n    }\n    getSortOptions() {\n        // this is used for client side sorting, as such we can ignore redundant column sorts\n        return this.getColumnsWithSortingOrdered().map(column => ({\n            sort: column.getSort(),\n            column\n        }));\n    }\n    canColumnDisplayMixedSort(column) {\n        const isColumnSortCouplingActive = this.gridOptionsService.isColumnsSortingCoupledToGroup();\n        const isGroupDisplayColumn = !!column.getColDef().showRowGroup;\n        return isColumnSortCouplingActive && isGroupDisplayColumn;\n    }\n    getDisplaySortForColumn(column) {\n        const linkedColumns = this.columnModel.getSourceColumnsForGroupColumn(column);\n        if (!this.canColumnDisplayMixedSort(column) || !(linkedColumns === null || linkedColumns === void 0 ? void 0 : linkedColumns.length)) {\n            return column.getSort();\n        }\n        // if column has unique data, its sorting is independent - but can still be mixed\n        const columnHasUniqueData = !!column.getColDef().field;\n        const sortableColumns = columnHasUniqueData ? [column, ...linkedColumns] : linkedColumns;\n        const firstSort = sortableColumns[0].getSort();\n        // the == is intentional, as null and undefined both represent no sort, which means they are equivalent\n        const allMatch = sortableColumns.every(col => col.getSort() == firstSort);\n        if (!allMatch) {\n            return 'mixed';\n        }\n        return firstSort;\n    }\n    getDisplaySortIndexForColumn(column) {\n        return this.getIndexedSortMap().get(column);\n    }\n};\nSortController.DEFAULT_SORTING_ORDER = ['asc', 'desc', null];\n__decorate$G([\n    Autowired('columnModel')\n], SortController.prototype, \"columnModel\", void 0);\nSortController = SortController_1 = __decorate$G([\n    Bean('sortController')\n], SortController);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$F = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ColumnHoverService = class ColumnHoverService extends BeanStub {\n    setMouseOver(columns) {\n        this.selectedColumns = columns;\n        const event = {\n            type: Events.EVENT_COLUMN_HOVER_CHANGED\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    clearMouseOver() {\n        this.selectedColumns = null;\n        const event = {\n            type: Events.EVENT_COLUMN_HOVER_CHANGED\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    isHovered(column) {\n        return !!this.selectedColumns && this.selectedColumns.indexOf(column) >= 0;\n    }\n};\nColumnHoverService = __decorate$F([\n    Bean('columnHoverService')\n], ColumnHoverService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$E = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ColumnAnimationService = class ColumnAnimationService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.executeNextFuncs = [];\n        this.executeLaterFuncs = [];\n        this.active = false;\n        this.animationThreadCount = 0;\n    }\n    postConstruct() {\n        this.ctrlsService.whenReady(p => this.gridBodyCtrl = p.gridBodyCtrl);\n    }\n    isActive() {\n        return this.active;\n    }\n    start() {\n        if (this.active) {\n            return;\n        }\n        if (this.gridOptionsService.is('suppressColumnMoveAnimation')) {\n            return;\n        }\n        // if doing RTL, we don't animate open / close as due to how the pixels are inverted,\n        // the animation moves all the row the the right rather than to the left (ie it's the static\n        // columns that actually get their coordinates updated)\n        if (this.gridOptionsService.is('enableRtl')) {\n            return;\n        }\n        this.ensureAnimationCssClassPresent();\n        this.active = true;\n    }\n    finish() {\n        if (!this.active) {\n            return;\n        }\n        this.flush();\n        this.active = false;\n    }\n    executeNextVMTurn(func) {\n        if (this.active) {\n            this.executeNextFuncs.push(func);\n        }\n        else {\n            func();\n        }\n    }\n    executeLaterVMTurn(func) {\n        if (this.active) {\n            this.executeLaterFuncs.push(func);\n        }\n        else {\n            func();\n        }\n    }\n    ensureAnimationCssClassPresent() {\n        // up the count, so we can tell if someone else has updated the count\n        // by the time the 'wait' func executes\n        this.animationThreadCount++;\n        const animationThreadCountCopy = this.animationThreadCount;\n        this.gridBodyCtrl.setColumnMovingCss(true);\n        this.executeLaterFuncs.push(() => {\n            // only remove the class if this thread was the last one to update it\n            if (this.animationThreadCount === animationThreadCountCopy) {\n                this.gridBodyCtrl.setColumnMovingCss(false);\n            }\n        });\n    }\n    flush() {\n        const nowFuncs = this.executeNextFuncs;\n        this.executeNextFuncs = [];\n        const waitFuncs = this.executeLaterFuncs;\n        this.executeLaterFuncs = [];\n        if (nowFuncs.length === 0 && waitFuncs.length === 0) {\n            return;\n        }\n        window.setTimeout(() => nowFuncs.forEach(func => func()), 0);\n        window.setTimeout(() => waitFuncs.forEach(func => func()), 300);\n    }\n};\n__decorate$E([\n    Autowired('ctrlsService')\n], ColumnAnimationService.prototype, \"ctrlsService\", void 0);\n__decorate$E([\n    PostConstruct\n], ColumnAnimationService.prototype, \"postConstruct\", null);\nColumnAnimationService = __decorate$E([\n    Bean('columnAnimationService')\n], ColumnAnimationService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$D = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet PaginationAutoPageSizeService = class PaginationAutoPageSizeService extends BeanStub {\n    postConstruct() {\n        this.ctrlsService.whenReady(p => {\n            this.centerRowContainerCon = p.centerRowContainerCtrl;\n            this.addManagedListener(this.eventService, Events.EVENT_BODY_HEIGHT_CHANGED, this.checkPageSize.bind(this));\n            this.addManagedListener(this.eventService, Events.EVENT_SCROLL_VISIBILITY_CHANGED, this.checkPageSize.bind(this));\n            this.checkPageSize();\n        });\n    }\n    notActive() {\n        return !this.gridOptionsService.is('paginationAutoPageSize') || this.centerRowContainerCon == null;\n    }\n    checkPageSize() {\n        if (this.notActive()) {\n            return;\n        }\n        const bodyHeight = this.centerRowContainerCon.getViewportSizeFeature().getBodyHeight();\n        if (bodyHeight > 0) {\n            const update = () => {\n                const rowHeight = this.gridOptionsService.getRowHeightAsNumber();\n                const newPageSize = Math.floor(bodyHeight / rowHeight);\n                this.gridOptionsService.set('paginationPageSize', newPageSize);\n            };\n            if (!this.isBodyRendered) {\n                update();\n                this.isBodyRendered = true;\n            }\n            else {\n                debounce(() => update(), 50)();\n            }\n        }\n        else {\n            this.isBodyRendered = false;\n        }\n    }\n};\n__decorate$D([\n    Autowired('ctrlsService')\n], PaginationAutoPageSizeService.prototype, \"ctrlsService\", void 0);\n__decorate$D([\n    PostConstruct\n], PaginationAutoPageSizeService.prototype, \"postConstruct\", null);\nPaginationAutoPageSizeService = __decorate$D([\n    Bean('paginationAutoPageSizeService')\n], PaginationAutoPageSizeService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$C = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ValueCache = class ValueCache extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.cacheVersion = 0;\n    }\n    init() {\n        this.active = this.gridOptionsService.is('valueCache');\n        this.neverExpires = this.gridOptionsService.is('valueCacheNeverExpires');\n    }\n    onDataChanged() {\n        if (this.neverExpires) {\n            return;\n        }\n        this.expire();\n    }\n    expire() {\n        this.cacheVersion++;\n    }\n    setValue(rowNode, colId, value) {\n        if (this.active) {\n            if (rowNode.__cacheVersion !== this.cacheVersion) {\n                rowNode.__cacheVersion = this.cacheVersion;\n                rowNode.__cacheData = {};\n            }\n            rowNode.__cacheData[colId] = value;\n        }\n    }\n    getValue(rowNode, colId) {\n        if (!this.active || rowNode.__cacheVersion !== this.cacheVersion) {\n            return undefined;\n        }\n        return rowNode.__cacheData[colId];\n    }\n};\n__decorate$C([\n    PostConstruct\n], ValueCache.prototype, \"init\", null);\nValueCache = __decorate$C([\n    Bean('valueCache')\n], ValueCache);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$B = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// Matches value in clipboard module\nconst SOURCE_PASTE = 'paste';\nlet ChangeDetectionService = class ChangeDetectionService extends BeanStub {\n    init() {\n        if (this.rowModel.getType() === 'clientSide') {\n            this.clientSideRowModel = this.rowModel;\n        }\n        this.addManagedListener(this.eventService, Events.EVENT_CELL_VALUE_CHANGED, this.onCellValueChanged.bind(this));\n    }\n    onCellValueChanged(event) {\n        // Clipboard service manages its own change detection, so no need to do it here.\n        // The clipboard manages its own as otherwise this would happen once for every cell\n        // that got updated as part of a paste operation, so e.g. if 100 cells in a paste operation,\n        // this doChangeDetection would get called 100 times (once for each cell), instead clipboard\n        // service executes the logic we have here once (in essence batching up all cell changes\n        // into one change detection).\n        if (event.source === SOURCE_PASTE) {\n            return;\n        }\n        this.doChangeDetection(event.node, event.column);\n    }\n    doChangeDetection(rowNode, column) {\n        if (this.gridOptionsService.is('suppressChangeDetection')) {\n            return;\n        }\n        // step 1 of change detection is to update the aggregated values\n        if (this.clientSideRowModel && !rowNode.isRowPinned()) {\n            const onlyChangedColumns = this.gridOptionsService.is('aggregateOnlyChangedColumns');\n            const changedPath = new ChangedPath(onlyChangedColumns, this.clientSideRowModel.getRootNode());\n            changedPath.addParentNode(rowNode.parent, [column]);\n            this.clientSideRowModel.doAggregate(changedPath);\n        }\n        // step 2 of change detection is to refresh the cells\n        this.rowRenderer.refreshCells();\n    }\n};\n__decorate$B([\n    Autowired('rowModel')\n], ChangeDetectionService.prototype, \"rowModel\", void 0);\n__decorate$B([\n    Autowired('rowRenderer')\n], ChangeDetectionService.prototype, \"rowRenderer\", void 0);\n__decorate$B([\n    PostConstruct\n], ChangeDetectionService.prototype, \"init\", null);\nChangeDetectionService = __decorate$B([\n    Bean('changeDetectionService')\n], ChangeDetectionService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$A = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet AgComponentUtils = class AgComponentUtils extends BeanStub {\n    adaptFunction(propertyName, jsCompFunc) {\n        const metadata = this.componentMetadataProvider.retrieve(propertyName);\n        if (metadata && metadata.functionAdapter) {\n            return metadata.functionAdapter(jsCompFunc);\n        }\n        return null;\n    }\n    adaptCellRendererFunction(callback) {\n        class Adapter {\n            refresh(params) {\n                return false;\n            }\n            getGui() {\n                return this.eGui;\n            }\n            init(params) {\n                const callbackResult = callback(params);\n                const type = typeof callbackResult;\n                if (type === 'string' || type === 'number' || type === 'boolean') {\n                    this.eGui = loadTemplate('<span>' + callbackResult + '</span>');\n                    return;\n                }\n                if (callbackResult == null) {\n                    this.eGui = loadTemplate('<span></span>');\n                    return;\n                }\n                this.eGui = callbackResult;\n            }\n        }\n        return Adapter;\n    }\n    doesImplementIComponent(candidate) {\n        if (!candidate) {\n            return false;\n        }\n        return candidate.prototype && 'getGui' in candidate.prototype;\n    }\n};\n__decorate$A([\n    Autowired(\"componentMetadataProvider\")\n], AgComponentUtils.prototype, \"componentMetadataProvider\", void 0);\nAgComponentUtils = __decorate$A([\n    Bean(\"agComponentUtils\")\n], AgComponentUtils);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$z = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ComponentMetadataProvider = class ComponentMetadataProvider extends BeanStub {\n    postConstruct() {\n        this.componentMetaData = {\n            dateComponent: {\n                mandatoryMethodList: ['getDate', 'setDate'],\n                optionalMethodList: ['afterGuiAttached', 'setInputPlaceholder', 'setInputAriaLabel']\n            },\n            detailCellRenderer: {\n                mandatoryMethodList: [],\n                optionalMethodList: ['refresh'],\n                functionAdapter: this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)\n            },\n            headerComponent: {\n                mandatoryMethodList: [],\n                optionalMethodList: ['refresh']\n            },\n            headerGroupComponent: {\n                mandatoryMethodList: [],\n                optionalMethodList: []\n            },\n            loadingCellRenderer: {\n                mandatoryMethodList: [],\n                optionalMethodList: []\n            },\n            loadingOverlayComponent: {\n                mandatoryMethodList: [],\n                optionalMethodList: []\n            },\n            noRowsOverlayComponent: {\n                mandatoryMethodList: [],\n                optionalMethodList: []\n            },\n            floatingFilterComponent: {\n                mandatoryMethodList: ['onParentModelChanged'],\n                optionalMethodList: ['afterGuiAttached']\n            },\n            floatingFilterWrapperComponent: {\n                mandatoryMethodList: [],\n                optionalMethodList: []\n            },\n            cellRenderer: {\n                mandatoryMethodList: [],\n                optionalMethodList: ['refresh', 'afterGuiAttached'],\n                functionAdapter: this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)\n            },\n            cellEditor: {\n                mandatoryMethodList: ['getValue'],\n                optionalMethodList: ['isPopup', 'isCancelBeforeStart', 'isCancelAfterEnd', 'getPopupPosition', 'focusIn', 'focusOut', 'afterGuiAttached']\n            },\n            innerRenderer: {\n                mandatoryMethodList: [],\n                optionalMethodList: ['afterGuiAttached'],\n                functionAdapter: this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)\n            },\n            fullWidthCellRenderer: {\n                mandatoryMethodList: [],\n                optionalMethodList: ['refresh', 'afterGuiAttached'],\n                functionAdapter: this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)\n            },\n            groupRowRenderer: {\n                mandatoryMethodList: [],\n                optionalMethodList: ['afterGuiAttached'],\n                functionAdapter: this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)\n            },\n            filter: {\n                mandatoryMethodList: ['isFilterActive', 'doesFilterPass', 'getModel', 'setModel'],\n                optionalMethodList: ['afterGuiAttached', 'afterGuiDetached', 'onNewRowsLoaded', 'getModelAsString', 'onFloatingFilterChanged', 'onAnyFilterChanged']\n            },\n            filterComponent: {\n                mandatoryMethodList: ['isFilterActive', 'doesFilterPass', 'getModel', 'setModel'],\n                optionalMethodList: ['afterGuiAttached', 'afterGuiDetached', 'onNewRowsLoaded', 'getModelAsString', 'onFloatingFilterChanged', 'onAnyFilterChanged']\n            },\n            statusPanel: {\n                mandatoryMethodList: [],\n                optionalMethodList: ['afterGuiAttached'],\n            },\n            toolPanel: {\n                mandatoryMethodList: [],\n                optionalMethodList: ['refresh', 'afterGuiAttached']\n            },\n            tooltipComponent: {\n                mandatoryMethodList: [],\n                optionalMethodList: []\n            }\n        };\n    }\n    retrieve(name) {\n        return this.componentMetaData[name];\n    }\n};\n__decorate$z([\n    Autowired(\"agComponentUtils\")\n], ComponentMetadataProvider.prototype, \"agComponentUtils\", void 0);\n__decorate$z([\n    PostConstruct\n], ComponentMetadataProvider.prototype, \"postConstruct\", null);\nComponentMetadataProvider = __decorate$z([\n    Bean(\"componentMetadataProvider\")\n], ComponentMetadataProvider);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$y = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst DEFAULT_ROW_HEIGHT = 25;\nconst MIN_COL_WIDTH = 10;\nconst MAT_GRID_SIZE = 8;\nconst BASE_GRID_SIZE = 4;\nconst BALHAM_GRID_SIZE = 4;\nconst ALPINE_GRID_SIZE = 6;\nconst HARD_CODED_SIZES = {\n    // this item is required for custom themes\n    'ag-theme-custom': {\n        headerHeight: 25,\n        headerCellMinWidth: 24,\n        listItemHeight: BASE_GRID_SIZE * 5,\n        rowHeight: 25,\n        chartMenuPanelWidth: 220\n    },\n    'ag-theme-material': {\n        headerHeight: MAT_GRID_SIZE * 7,\n        headerCellMinWidth: 48,\n        listItemHeight: MAT_GRID_SIZE * 4,\n        rowHeight: MAT_GRID_SIZE * 6,\n        chartMenuPanelWidth: 240\n    },\n    'ag-theme-balham': {\n        headerHeight: BALHAM_GRID_SIZE * 8,\n        headerCellMinWidth: 24,\n        listItemHeight: BALHAM_GRID_SIZE * 6,\n        rowHeight: BALHAM_GRID_SIZE * 7,\n        chartMenuPanelWidth: 220\n    },\n    'ag-theme-alpine': {\n        headerHeight: ALPINE_GRID_SIZE * 8,\n        headerCellMinWidth: 36,\n        listItemHeight: ALPINE_GRID_SIZE * 4,\n        rowHeight: ALPINE_GRID_SIZE * 7,\n        chartMenuPanelWidth: 240\n    }\n};\n/**\n * this object contains a list of Sass variables and an array\n * of CSS styles required to get the correct value.\n * eg. $virtual-item-height requires a structure, so we can get its height.\n * <div class=\"ag-theme-balham\">\n *     <div class=\"ag-virtual-list-container\">\n *         <div class=\"ag-virtual-list-item\"></div>\n *     </div>\n * </div>\n */\nconst SASS_PROPERTY_BUILDER = {\n    headerHeight: ['ag-header-row'],\n    headerCellMinWidth: ['ag-header-cell'],\n    listItemHeight: ['ag-virtual-list-item'],\n    rowHeight: ['ag-row'],\n    chartMenuPanelWidth: ['ag-chart-docked-container']\n};\nlet Environment = class Environment extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.calculatedSizes = {};\n    }\n    postConstruct() {\n        var _a;\n        const el = (_a = this.getTheme().el) !== null && _a !== void 0 ? _a : this.eGridDiv;\n        this.mutationObserver = new MutationObserver(() => {\n            this.calculatedSizes = {};\n            this.fireGridStylesChangedEvent();\n        });\n        this.mutationObserver.observe(el || this.eGridDiv, {\n            attributes: true,\n            attributeFilter: ['class']\n        });\n    }\n    fireGridStylesChangedEvent() {\n        const event = {\n            type: Events.EVENT_GRID_STYLES_CHANGED\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    getSassVariable(key) {\n        const { themeFamily, el } = this.getTheme();\n        if (!themeFamily || themeFamily.indexOf('ag-theme') !== 0) {\n            return;\n        }\n        if (!this.calculatedSizes) {\n            this.calculatedSizes = {};\n        }\n        if (!this.calculatedSizes[themeFamily]) {\n            this.calculatedSizes[themeFamily] = {};\n        }\n        const size = this.calculatedSizes[themeFamily][key];\n        if (size != null) {\n            return size;\n        }\n        this.calculatedSizes[themeFamily][key] = this.calculateValueForSassProperty(key, themeFamily, el);\n        return this.calculatedSizes[themeFamily][key];\n    }\n    calculateValueForSassProperty(property, theme, themeElement) {\n        const useTheme = 'ag-theme-' + (theme.match('material') ? 'material' : theme.match('balham') ? 'balham' : theme.match('alpine') ? 'alpine' : 'custom');\n        const defaultValue = HARD_CODED_SIZES[useTheme][property];\n        const eDocument = this.gridOptionsService.getDocument();\n        if (!themeElement) {\n            themeElement = this.eGridDiv;\n        }\n        if (!SASS_PROPERTY_BUILDER[property]) {\n            return defaultValue;\n        }\n        const classList = SASS_PROPERTY_BUILDER[property];\n        const div = eDocument.createElement('div');\n        // this will apply SASS variables that were manually added to the current theme\n        const classesFromThemeElement = Array.from(themeElement.classList);\n        div.classList.add(theme, ...classesFromThemeElement);\n        div.style.position = 'absolute';\n        const el = classList.reduce((prevEl, currentClass) => {\n            const currentDiv = eDocument.createElement('div');\n            currentDiv.style.position = 'static';\n            currentDiv.classList.add(currentClass);\n            prevEl.appendChild(currentDiv);\n            return currentDiv;\n        }, div);\n        let calculatedValue = 0;\n        if (eDocument.body) {\n            eDocument.body.appendChild(div);\n            const sizeName = property.toLowerCase().indexOf('height') !== -1 ? 'height' : 'width';\n            calculatedValue = parseInt(window.getComputedStyle(el)[sizeName], 10);\n            eDocument.body.removeChild(div);\n        }\n        return calculatedValue || defaultValue;\n    }\n    isThemeDark() {\n        const { theme } = this.getTheme();\n        return !!theme && theme.indexOf('dark') >= 0;\n    }\n    chartMenuPanelWidth() {\n        return this.getSassVariable('chartMenuPanelWidth');\n    }\n    getTheme() {\n        const reg = /\\bag-(material|(?:theme-([\\w\\-]*)))\\b/g;\n        let el = this.eGridDiv;\n        let themeMatch = null;\n        let allThemes = [];\n        while (el) {\n            themeMatch = reg.exec(el.className);\n            if (!themeMatch) {\n                el = el.parentElement || undefined;\n            }\n            else {\n                const matched = el.className.match(reg);\n                if (matched) {\n                    allThemes = matched;\n                }\n                break;\n            }\n        }\n        if (!themeMatch) {\n            return { allThemes };\n        }\n        const theme = themeMatch[0];\n        return { theme, el, themeFamily: theme.replace(/-dark$/, ''), allThemes };\n    }\n    getFromTheme(defaultValue, sassVariableName) {\n        var _a;\n        return (_a = this.getSassVariable(sassVariableName)) !== null && _a !== void 0 ? _a : defaultValue;\n    }\n    getDefaultRowHeight() {\n        return this.getFromTheme(DEFAULT_ROW_HEIGHT, 'rowHeight');\n    }\n    getListItemHeight() {\n        return this.getFromTheme(20, 'listItemHeight');\n    }\n    setRowHeightVariable(height) {\n        const oldRowHeight = this.eGridDiv.style.getPropertyValue('--ag-line-height').trim();\n        const newRowHeight = `${height}px`;\n        if (oldRowHeight != newRowHeight) {\n            this.eGridDiv.style.setProperty('--ag-line-height', newRowHeight);\n        }\n    }\n    getMinColWidth() {\n        const measuredMin = this.getFromTheme(null, 'headerCellMinWidth');\n        return exists(measuredMin) ? Math.max(measuredMin, MIN_COL_WIDTH) : MIN_COL_WIDTH;\n    }\n    destroy() {\n        this.calculatedSizes = null;\n        if (this.mutationObserver) {\n            this.mutationObserver.disconnect();\n        }\n        super.destroy();\n    }\n};\n__decorate$y([\n    Autowired('eGridDiv')\n], Environment.prototype, \"eGridDiv\", void 0);\n__decorate$y([\n    PostConstruct\n], Environment.prototype, \"postConstruct\", null);\nEnvironment = __decorate$y([\n    Bean('environment')\n], Environment);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$x = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param$2 = (undefined && undefined.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\n/**\n * This class solves the 'max height' problem, where the user might want to show more data than\n * the max div height actually allows.\n */\nlet RowContainerHeightService = class RowContainerHeightService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        // the scrollY position\n        this.scrollY = 0;\n        // how tall the body is\n        this.uiBodyHeight = 0;\n    }\n    agWire(loggerFactory) {\n        this.logger = loggerFactory.create(\"RowContainerHeightService\");\n    }\n    postConstruct() {\n        this.addManagedListener(this.eventService, Events.EVENT_BODY_HEIGHT_CHANGED, this.updateOffset.bind(this));\n        this.maxDivHeight = getMaxDivHeight();\n        this.logger.log('maxDivHeight = ' + this.maxDivHeight);\n    }\n    isStretching() {\n        return this.stretching;\n    }\n    getDivStretchOffset() {\n        return this.divStretchOffset;\n    }\n    updateOffset() {\n        if (!this.stretching) {\n            return;\n        }\n        const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n        const newScrollY = gridBodyCon.getScrollFeature().getVScrollPosition().top;\n        const newBodyHeight = this.getUiBodyHeight();\n        const atLeastOneChanged = newScrollY !== this.scrollY || newBodyHeight !== this.uiBodyHeight;\n        if (atLeastOneChanged) {\n            this.scrollY = newScrollY;\n            this.uiBodyHeight = newBodyHeight;\n            this.calculateOffset();\n        }\n    }\n    calculateOffset() {\n        this.setUiContainerHeight(this.maxDivHeight);\n        this.pixelsToShave = this.modelHeight - this.uiContainerHeight;\n        this.maxScrollY = this.uiContainerHeight - this.uiBodyHeight;\n        const scrollPercent = this.scrollY / this.maxScrollY;\n        const divStretchOffset = scrollPercent * this.pixelsToShave;\n        this.logger.log(`Div Stretch Offset = ${divStretchOffset} (${this.pixelsToShave} * ${scrollPercent})`);\n        this.setDivStretchOffset(divStretchOffset);\n    }\n    setUiContainerHeight(height) {\n        if (height !== this.uiContainerHeight) {\n            this.uiContainerHeight = height;\n            this.eventService.dispatchEvent({ type: Events.EVENT_ROW_CONTAINER_HEIGHT_CHANGED });\n        }\n    }\n    clearOffset() {\n        this.setUiContainerHeight(this.modelHeight);\n        this.pixelsToShave = 0;\n        this.setDivStretchOffset(0);\n    }\n    setDivStretchOffset(newOffset) {\n        // because we are talking pixels, no point in confusing things with half numbers\n        const newOffsetFloor = typeof newOffset === 'number' ? Math.floor(newOffset) : null;\n        if (this.divStretchOffset === newOffsetFloor) {\n            return;\n        }\n        this.divStretchOffset = newOffsetFloor;\n        this.eventService.dispatchEvent({ type: Events.EVENT_HEIGHT_SCALE_CHANGED });\n    }\n    setModelHeight(modelHeight) {\n        this.modelHeight = modelHeight;\n        this.stretching = modelHeight != null // null happens when in print layout\n            && this.maxDivHeight > 0\n            && modelHeight > this.maxDivHeight;\n        if (this.stretching) {\n            this.calculateOffset();\n        }\n        else {\n            this.clearOffset();\n        }\n    }\n    getUiContainerHeight() {\n        return this.uiContainerHeight;\n    }\n    getRealPixelPosition(modelPixel) {\n        return modelPixel - this.divStretchOffset;\n    }\n    getUiBodyHeight() {\n        const gridBodyCon = this.ctrlsService.getGridBodyCtrl();\n        const pos = gridBodyCon.getScrollFeature().getVScrollPosition();\n        return pos.bottom - pos.top;\n    }\n    getScrollPositionForPixel(rowTop) {\n        if (this.pixelsToShave <= 0) {\n            return rowTop;\n        }\n        const modelMaxScroll = this.modelHeight - this.getUiBodyHeight();\n        const scrollPercent = rowTop / modelMaxScroll;\n        const scrollPixel = this.maxScrollY * scrollPercent;\n        return scrollPixel;\n    }\n};\n__decorate$x([\n    Autowired('ctrlsService')\n], RowContainerHeightService.prototype, \"ctrlsService\", void 0);\n__decorate$x([\n    __param$2(0, Qualifier(\"loggerFactory\"))\n], RowContainerHeightService.prototype, \"agWire\", null);\n__decorate$x([\n    PostConstruct\n], RowContainerHeightService.prototype, \"postConstruct\", null);\nRowContainerHeightService = __decorate$x([\n    Bean('rowContainerHeightService')\n], RowContainerHeightService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$w = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet SelectableService = class SelectableService extends BeanStub {\n    init() {\n        this.groupSelectsChildren = this.gridOptionsService.is('groupSelectsChildren');\n        this.isRowSelectableFunc = this.gridOptionsService.get('isRowSelectable');\n    }\n    updateSelectableAfterGrouping(rowNode) {\n        if (this.isRowSelectableFunc) {\n            const nextChildrenFunc = (node) => node.childrenAfterGroup;\n            this.recurseDown(rowNode.childrenAfterGroup, nextChildrenFunc);\n        }\n    }\n    recurseDown(children, nextChildrenFunc) {\n        if (!children) {\n            return;\n        }\n        children.forEach((child) => {\n            if (!child.group) {\n                return;\n            } // only interested in groups\n            if (child.hasChildren()) {\n                this.recurseDown(nextChildrenFunc(child), nextChildrenFunc);\n            }\n            let rowSelectable;\n            if (this.groupSelectsChildren) {\n                // have this group selectable if at least one direct child is selectable\n                const firstSelectable = (nextChildrenFunc(child) || []).find(rowNode => rowNode.selectable === true);\n                rowSelectable = exists(firstSelectable);\n            }\n            else {\n                // directly retrieve selectable value from user callback\n                rowSelectable = this.isRowSelectableFunc ? this.isRowSelectableFunc(child) : false;\n            }\n            child.setRowSelectable(rowSelectable);\n        });\n    }\n};\n__decorate$w([\n    PostConstruct\n], SelectableService.prototype, \"init\", null);\nSelectableService = __decorate$w([\n    Bean('selectableService')\n], SelectableService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$v = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass PaginationComp extends Component {\n    constructor() {\n        super();\n        this.previousAndFirstButtonsDisabled = false;\n        this.nextButtonDisabled = false;\n        this.lastButtonDisabled = false;\n        this.areListenersSetup = false;\n    }\n    postConstruct() {\n        const isRtl = this.gridOptionsService.is('enableRtl');\n        this.setTemplate(this.getTemplate());\n        this.btFirst.insertAdjacentElement('afterbegin', createIconNoSpan(isRtl ? 'last' : 'first', this.gridOptionsService));\n        this.btPrevious.insertAdjacentElement('afterbegin', createIconNoSpan(isRtl ? 'next' : 'previous', this.gridOptionsService));\n        this.btNext.insertAdjacentElement('afterbegin', createIconNoSpan(isRtl ? 'previous' : 'next', this.gridOptionsService));\n        this.btLast.insertAdjacentElement('afterbegin', createIconNoSpan(isRtl ? 'first' : 'last', this.gridOptionsService));\n        this.addManagedPropertyListener('pagination', this.onPaginationChanged.bind(this));\n        this.addManagedPropertyListener('suppressPaginationPanel', this.onPaginationChanged.bind(this));\n        this.onPaginationChanged();\n    }\n    onPaginationChanged() {\n        const isPaging = this.gridOptionsService.is('pagination');\n        const paginationPanelEnabled = isPaging && !this.gridOptionsService.is('suppressPaginationPanel');\n        this.setDisplayed(paginationPanelEnabled);\n        if (!paginationPanelEnabled) {\n            return;\n        }\n        this.setupListeners();\n        this.enableOrDisableButtons();\n        this.updateRowLabels();\n        this.setCurrentPageLabel();\n        this.setTotalLabels();\n    }\n    setupListeners() {\n        if (!this.areListenersSetup) {\n            this.addManagedListener(this.eventService, Events.EVENT_PAGINATION_CHANGED, this.onPaginationChanged.bind(this));\n            [\n                { el: this.btFirst, fn: this.onBtFirst.bind(this) },\n                { el: this.btPrevious, fn: this.onBtPrevious.bind(this) },\n                { el: this.btNext, fn: this.onBtNext.bind(this) },\n                { el: this.btLast, fn: this.onBtLast.bind(this) }\n            ].forEach(item => {\n                const { el, fn } = item;\n                this.addManagedListener(el, 'click', fn);\n                this.addManagedListener(el, 'keydown', (e) => {\n                    if (e.key === KeyCode.ENTER || e.key === KeyCode.SPACE) {\n                        e.preventDefault();\n                        fn();\n                    }\n                });\n            });\n            this.areListenersSetup = true;\n        }\n    }\n    onBtFirst() {\n        if (!this.previousAndFirstButtonsDisabled) {\n            this.paginationProxy.goToFirstPage();\n        }\n    }\n    setCurrentPageLabel() {\n        const pagesExist = this.paginationProxy.getTotalPages() > 0;\n        const currentPage = this.paginationProxy.getCurrentPage();\n        const toDisplay = pagesExist ? currentPage + 1 : 0;\n        this.lbCurrent.innerHTML = this.formatNumber(toDisplay);\n    }\n    formatNumber(value) {\n        const userFunc = this.gridOptionsService.getCallback('paginationNumberFormatter');\n        if (userFunc) {\n            const params = { value: value };\n            return userFunc(params);\n        }\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        const thousandSeparator = localeTextFunc('thousandSeparator', ',');\n        const decimalSeparator = localeTextFunc('decimalSeparator', '.');\n        return formatNumberCommas(value, thousandSeparator, decimalSeparator);\n    }\n    getTemplate() {\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        const strPage = localeTextFunc('page', 'Page');\n        const strTo = localeTextFunc('to', 'to');\n        const strOf = localeTextFunc('of', 'of');\n        const strFirst = localeTextFunc('firstPage', 'First Page');\n        const strPrevious = localeTextFunc('previousPage', 'Previous Page');\n        const strNext = localeTextFunc('nextPage', 'Next Page');\n        const strLast = localeTextFunc('lastPage', 'Last Page');\n        const compId = this.getCompId();\n        return /* html */ `<div class=\"ag-paging-panel ag-unselectable\" id=\"ag-${compId}\">\n                <span class=\"ag-paging-row-summary-panel\" role=\"status\">\n                    <span id=\"ag-${compId}-first-row\" ref=\"lbFirstRowOnPage\" class=\"ag-paging-row-summary-panel-number\"></span>\n                    <span id=\"ag-${compId}-to\">${strTo}</span>\n                    <span id=\"ag-${compId}-last-row\" ref=\"lbLastRowOnPage\" class=\"ag-paging-row-summary-panel-number\"></span>\n                    <span id=\"ag-${compId}-of\">${strOf}</span>\n                    <span id=\"ag-${compId}-row-count\" ref=\"lbRecordCount\" class=\"ag-paging-row-summary-panel-number\"></span>\n                </span>\n                <span class=\"ag-paging-page-summary-panel\" role=\"presentation\">\n                    <div ref=\"btFirst\" class=\"ag-paging-button\" role=\"button\" aria-label=\"${strFirst}\"></div>\n                    <div ref=\"btPrevious\" class=\"ag-paging-button\" role=\"button\" aria-label=\"${strPrevious}\"></div>\n                    <span class=\"ag-paging-description\" role=\"status\">\n                        <span id=\"ag-${compId}-start-page\">${strPage}</span>\n                        <span id=\"ag-${compId}-start-page-number\" ref=\"lbCurrent\" class=\"ag-paging-number\"></span>\n                        <span id=\"ag-${compId}-of-page\">${strOf}</span>\n                        <span id=\"ag-${compId}-of-page-number\" ref=\"lbTotal\" class=\"ag-paging-number\"></span>\n                    </span>\n                    <div ref=\"btNext\" class=\"ag-paging-button\" role=\"button\" aria-label=\"${strNext}\"></div>\n                    <div ref=\"btLast\" class=\"ag-paging-button\" role=\"button\" aria-label=\"${strLast}\"></div>\n                </span>\n            </div>`;\n    }\n    onBtNext() {\n        if (!this.nextButtonDisabled) {\n            this.paginationProxy.goToNextPage();\n        }\n    }\n    onBtPrevious() {\n        if (!this.previousAndFirstButtonsDisabled) {\n            this.paginationProxy.goToPreviousPage();\n        }\n    }\n    onBtLast() {\n        if (!this.lastButtonDisabled) {\n            this.paginationProxy.goToLastPage();\n        }\n    }\n    enableOrDisableButtons() {\n        const currentPage = this.paginationProxy.getCurrentPage();\n        const maxRowFound = this.paginationProxy.isLastPageFound();\n        const totalPages = this.paginationProxy.getTotalPages();\n        this.previousAndFirstButtonsDisabled = currentPage === 0;\n        this.toggleButtonDisabled(this.btFirst, this.previousAndFirstButtonsDisabled);\n        this.toggleButtonDisabled(this.btPrevious, this.previousAndFirstButtonsDisabled);\n        const zeroPagesToDisplay = this.isZeroPagesToDisplay();\n        const onLastPage = maxRowFound && currentPage === (totalPages - 1);\n        this.nextButtonDisabled = onLastPage || zeroPagesToDisplay;\n        this.lastButtonDisabled = !maxRowFound || zeroPagesToDisplay || currentPage === (totalPages - 1);\n        this.toggleButtonDisabled(this.btNext, this.nextButtonDisabled);\n        this.toggleButtonDisabled(this.btLast, this.lastButtonDisabled);\n    }\n    toggleButtonDisabled(button, disabled) {\n        setAriaDisabled(button, disabled);\n        button.classList.toggle('ag-disabled', disabled);\n        if (disabled) {\n            button.removeAttribute('tabindex');\n        }\n        else {\n            button.setAttribute('tabindex', '0');\n        }\n    }\n    updateRowLabels() {\n        const currentPage = this.paginationProxy.getCurrentPage();\n        const pageSize = this.paginationProxy.getPageSize();\n        const maxRowFound = this.paginationProxy.isLastPageFound();\n        const rowCount = this.paginationProxy.isLastPageFound() ?\n            this.paginationProxy.getMasterRowCount() : null;\n        let startRow;\n        let endRow;\n        if (this.isZeroPagesToDisplay()) {\n            startRow = endRow = 0;\n        }\n        else {\n            startRow = (pageSize * currentPage) + 1;\n            endRow = startRow + pageSize - 1;\n            if (maxRowFound && endRow > rowCount) {\n                endRow = rowCount;\n            }\n        }\n        this.lbFirstRowOnPage.innerHTML = this.formatNumber(startRow);\n        if (this.rowNodeBlockLoader.isLoading()) {\n            const translate = this.localeService.getLocaleTextFunc();\n            this.lbLastRowOnPage.innerHTML = translate('pageLastRowUnknown', '?');\n        }\n        else {\n            this.lbLastRowOnPage.innerHTML = this.formatNumber(endRow);\n        }\n    }\n    isZeroPagesToDisplay() {\n        const maxRowFound = this.paginationProxy.isLastPageFound();\n        const totalPages = this.paginationProxy.getTotalPages();\n        return maxRowFound && totalPages === 0;\n    }\n    setTotalLabels() {\n        const lastPageFound = this.paginationProxy.isLastPageFound();\n        const totalPages = this.paginationProxy.getTotalPages();\n        const rowCount = lastPageFound ? this.paginationProxy.getMasterRowCount() : null;\n        // When `pivotMode=true` and no grouping or value columns exist, a single 'hidden' group row (root node) is in\n        // the grid and the pagination totals will correctly display total = 1. However this is confusing to users as\n        // they can't see it. To address this UX issue we simply set the totals to zero in the pagination panel.\n        if (rowCount === 1) {\n            const firstRow = this.paginationProxy.getRow(0);\n            // a group node with no group or agg data will not be visible to users\n            const hiddenGroupRow = firstRow && firstRow.group && !(firstRow.groupData || firstRow.aggData);\n            if (hiddenGroupRow) {\n                this.setTotalLabelsToZero();\n                return;\n            }\n        }\n        if (lastPageFound) {\n            this.lbTotal.innerHTML = this.formatNumber(totalPages);\n            this.lbRecordCount.innerHTML = this.formatNumber(rowCount);\n        }\n        else {\n            const moreText = this.localeService.getLocaleTextFunc()('more', 'more');\n            this.lbTotal.innerHTML = moreText;\n            this.lbRecordCount.innerHTML = moreText;\n        }\n    }\n    setTotalLabelsToZero() {\n        this.lbFirstRowOnPage.innerHTML = this.formatNumber(0);\n        this.lbCurrent.innerHTML = this.formatNumber(0);\n        this.lbLastRowOnPage.innerHTML = this.formatNumber(0);\n        this.lbTotal.innerHTML = this.formatNumber(0);\n        this.lbRecordCount.innerHTML = this.formatNumber(0);\n    }\n}\n__decorate$v([\n    Autowired('paginationProxy')\n], PaginationComp.prototype, \"paginationProxy\", void 0);\n__decorate$v([\n    Autowired('rowNodeBlockLoader')\n], PaginationComp.prototype, \"rowNodeBlockLoader\", void 0);\n__decorate$v([\n    RefSelector('btFirst')\n], PaginationComp.prototype, \"btFirst\", void 0);\n__decorate$v([\n    RefSelector('btPrevious')\n], PaginationComp.prototype, \"btPrevious\", void 0);\n__decorate$v([\n    RefSelector('btNext')\n], PaginationComp.prototype, \"btNext\", void 0);\n__decorate$v([\n    RefSelector('btLast')\n], PaginationComp.prototype, \"btLast\", void 0);\n__decorate$v([\n    RefSelector('lbRecordCount')\n], PaginationComp.prototype, \"lbRecordCount\", void 0);\n__decorate$v([\n    RefSelector('lbFirstRowOnPage')\n], PaginationComp.prototype, \"lbFirstRowOnPage\", void 0);\n__decorate$v([\n    RefSelector('lbLastRowOnPage')\n], PaginationComp.prototype, \"lbLastRowOnPage\", void 0);\n__decorate$v([\n    RefSelector('lbCurrent')\n], PaginationComp.prototype, \"lbCurrent\", void 0);\n__decorate$v([\n    RefSelector('lbTotal')\n], PaginationComp.prototype, \"lbTotal\", void 0);\n__decorate$v([\n    PostConstruct\n], PaginationComp.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$u = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar LoadingType;\n(function (LoadingType) {\n    LoadingType[LoadingType[\"Loading\"] = 0] = \"Loading\";\n    LoadingType[LoadingType[\"NoRows\"] = 1] = \"NoRows\";\n})(LoadingType || (LoadingType = {}));\nclass OverlayWrapperComponent extends Component {\n    constructor() {\n        super(OverlayWrapperComponent.TEMPLATE);\n        this.inProgress = false;\n        this.destroyRequested = false;\n        this.manuallyDisplayed = false;\n    }\n    updateLayoutClasses(cssClass, params) {\n        const overlayWrapperClassList = this.eOverlayWrapper.classList;\n        overlayWrapperClassList.toggle(LayoutCssClasses.AUTO_HEIGHT, params.autoHeight);\n        overlayWrapperClassList.toggle(LayoutCssClasses.NORMAL, params.normal);\n        overlayWrapperClassList.toggle(LayoutCssClasses.PRINT, params.print);\n    }\n    postConstruct() {\n        this.createManagedBean(new LayoutFeature(this));\n        this.setDisplayed(false, { skipAriaHidden: true });\n        this.addManagedListener(this.eventService, Events.EVENT_ROW_DATA_UPDATED, this.onRowDataUpdated.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, this.onNewColumnsLoaded.bind(this));\n        if (this.gridOptionsService.isRowModelType('clientSide') && !this.gridOptionsService.get('rowData')) {\n            this.showLoadingOverlay();\n        }\n        this.gridApi.registerOverlayWrapperComp(this);\n    }\n    setWrapperTypeClass(loadingType) {\n        const overlayWrapperClassList = this.eOverlayWrapper.classList;\n        overlayWrapperClassList.toggle('ag-overlay-loading-wrapper', loadingType === LoadingType.Loading);\n        overlayWrapperClassList.toggle('ag-overlay-no-rows-wrapper', loadingType === LoadingType.NoRows);\n    }\n    showLoadingOverlay() {\n        if (this.gridOptionsService.is('suppressLoadingOverlay')) {\n            return;\n        }\n        const params = {};\n        const compDetails = this.userComponentFactory.getLoadingOverlayCompDetails(params);\n        const promise = compDetails.newAgStackInstance();\n        this.showOverlay(promise, LoadingType.Loading);\n    }\n    showNoRowsOverlay() {\n        if (this.gridOptionsService.is('suppressNoRowsOverlay')) {\n            return;\n        }\n        const params = {};\n        const compDetails = this.userComponentFactory.getNoRowsOverlayCompDetails(params);\n        const promise = compDetails.newAgStackInstance();\n        this.showOverlay(promise, LoadingType.NoRows);\n    }\n    showOverlay(workItem, type) {\n        if (this.inProgress) {\n            return;\n        }\n        this.setWrapperTypeClass(type);\n        this.destroyActiveOverlay();\n        this.inProgress = true;\n        if (workItem) {\n            workItem.then(comp => {\n                this.inProgress = false;\n                this.eOverlayWrapper.appendChild(comp.getGui());\n                this.activeOverlay = comp;\n                if (this.destroyRequested) {\n                    this.destroyRequested = false;\n                    this.destroyActiveOverlay();\n                }\n            });\n        }\n        this.manuallyDisplayed = this.columnModel.isReady() && !this.paginationProxy.isEmpty();\n        this.setDisplayed(true, { skipAriaHidden: true });\n    }\n    destroyActiveOverlay() {\n        if (this.inProgress) {\n            this.destroyRequested = true;\n            return;\n        }\n        if (!this.activeOverlay) {\n            return;\n        }\n        this.activeOverlay = this.getContext().destroyBean(this.activeOverlay);\n        clearElement(this.eOverlayWrapper);\n    }\n    hideOverlay() {\n        this.manuallyDisplayed = false;\n        this.destroyActiveOverlay();\n        this.setDisplayed(false, { skipAriaHidden: true });\n    }\n    destroy() {\n        this.destroyActiveOverlay();\n        super.destroy();\n    }\n    showOrHideOverlay() {\n        const isEmpty = this.paginationProxy.isEmpty();\n        const isSuppressNoRowsOverlay = this.gridOptionsService.is('suppressNoRowsOverlay');\n        if (isEmpty && !isSuppressNoRowsOverlay) {\n            this.showNoRowsOverlay();\n        }\n        else {\n            this.hideOverlay();\n        }\n    }\n    onRowDataUpdated() {\n        this.showOrHideOverlay();\n    }\n    onNewColumnsLoaded() {\n        // hide overlay if columns and rows exist, this can happen if columns are loaded after data.\n        // this problem exists before of the race condition between the services (column controller in this case)\n        // and the view (grid panel). if the model beans were all initialised first, and then the view beans second,\n        // this race condition would not happen.\n        if (this.columnModel.isReady() && !this.paginationProxy.isEmpty() && !this.manuallyDisplayed) {\n            this.hideOverlay();\n        }\n    }\n}\n// wrapping in outer div, and wrapper, is needed to center the loading icon\nOverlayWrapperComponent.TEMPLATE = `\n        <div class=\"ag-overlay\" aria-hidden=\"true\">\n            <div class=\"ag-overlay-panel\">\n                <div class=\"ag-overlay-wrapper\" ref=\"eOverlayWrapper\"></div>\n            </div>\n        </div>`;\n__decorate$u([\n    Autowired('userComponentFactory')\n], OverlayWrapperComponent.prototype, \"userComponentFactory\", void 0);\n__decorate$u([\n    Autowired('paginationProxy')\n], OverlayWrapperComponent.prototype, \"paginationProxy\", void 0);\n__decorate$u([\n    Autowired('gridApi')\n], OverlayWrapperComponent.prototype, \"gridApi\", void 0);\n__decorate$u([\n    Autowired('columnModel')\n], OverlayWrapperComponent.prototype, \"columnModel\", void 0);\n__decorate$u([\n    RefSelector('eOverlayWrapper')\n], OverlayWrapperComponent.prototype, \"eOverlayWrapper\", void 0);\n__decorate$u([\n    PostConstruct\n], OverlayWrapperComponent.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$t = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet RowPositionUtils = class RowPositionUtils extends BeanStub {\n    getFirstRow() {\n        let rowIndex = 0;\n        let rowPinned;\n        if (this.pinnedRowModel.getPinnedTopRowCount()) {\n            rowPinned = 'top';\n        }\n        else if (this.rowModel.getRowCount()) {\n            rowPinned = null;\n            rowIndex = this.paginationProxy.getPageFirstRow();\n        }\n        else if (this.pinnedRowModel.getPinnedBottomRowCount()) {\n            rowPinned = 'bottom';\n        }\n        return rowPinned === undefined ? null : { rowIndex, rowPinned };\n    }\n    getLastRow() {\n        let rowIndex;\n        let rowPinned = null;\n        const pinnedBottomCount = this.pinnedRowModel.getPinnedBottomRowCount();\n        const pinnedTopCount = this.pinnedRowModel.getPinnedTopRowCount();\n        if (pinnedBottomCount) {\n            rowPinned = 'bottom';\n            rowIndex = pinnedBottomCount - 1;\n        }\n        else if (this.rowModel.getRowCount()) {\n            rowPinned = null;\n            rowIndex = this.paginationProxy.getPageLastRow();\n        }\n        else if (pinnedTopCount) {\n            rowPinned = 'top';\n            rowIndex = pinnedTopCount - 1;\n        }\n        return rowIndex === undefined ? null : { rowIndex, rowPinned };\n    }\n    getRowNode(gridRow) {\n        switch (gridRow.rowPinned) {\n            case 'top':\n                return this.pinnedRowModel.getPinnedTopRowData()[gridRow.rowIndex];\n            case 'bottom':\n                return this.pinnedRowModel.getPinnedBottomRowData()[gridRow.rowIndex];\n            default:\n                return this.rowModel.getRow(gridRow.rowIndex);\n        }\n    }\n    sameRow(rowA, rowB) {\n        // if both missing\n        if (!rowA && !rowB) {\n            return true;\n        }\n        // if only one missing\n        if ((rowA && !rowB) || (!rowA && rowB)) {\n            return false;\n        }\n        // otherwise compare (use == to compare rowPinned because it can be null or undefined)\n        return rowA.rowIndex === rowB.rowIndex && rowA.rowPinned == rowB.rowPinned;\n    }\n    // tests if this row selection is before the other row selection\n    before(rowA, rowB) {\n        switch (rowA.rowPinned) {\n            case 'top':\n                // we we are floating top, and other isn't, then we are always before\n                if (rowB.rowPinned !== 'top') {\n                    return true;\n                }\n                break;\n            case 'bottom':\n                // if we are floating bottom, and the other isn't, then we are never before\n                if (rowB.rowPinned !== 'bottom') {\n                    return false;\n                }\n                break;\n            default:\n                // if we are not floating, but the other one is floating...\n                if (exists(rowB.rowPinned)) {\n                    return rowB.rowPinned !== 'top';\n                }\n                break;\n        }\n        return rowA.rowIndex < rowB.rowIndex;\n    }\n    rowMax(rows) {\n        let max;\n        rows.forEach((row) => {\n            if (max === undefined || this.before(max, row)) {\n                max = row;\n            }\n        });\n        return max;\n    }\n    rowMin(rows) {\n        let min;\n        rows.forEach((row) => {\n            if (min === undefined || this.before(row, min)) {\n                min = row;\n            }\n        });\n        return min;\n    }\n};\n__decorate$t([\n    Autowired('rowModel')\n], RowPositionUtils.prototype, \"rowModel\", void 0);\n__decorate$t([\n    Autowired('pinnedRowModel')\n], RowPositionUtils.prototype, \"pinnedRowModel\", void 0);\n__decorate$t([\n    Autowired('paginationProxy')\n], RowPositionUtils.prototype, \"paginationProxy\", void 0);\nRowPositionUtils = __decorate$t([\n    Bean('rowPositionUtils')\n], RowPositionUtils);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$s = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet CellPositionUtils = class CellPositionUtils extends BeanStub {\n    createId(cellPosition) {\n        const { rowIndex, rowPinned, column } = cellPosition;\n        return this.createIdFromValues({ rowIndex, column, rowPinned });\n    }\n    createIdFromValues(cellPosition) {\n        const { rowIndex, rowPinned, column } = cellPosition;\n        return `${rowIndex}.${rowPinned == null ? 'null' : rowPinned}.${column.getId()}`;\n    }\n    equals(cellA, cellB) {\n        const colsMatch = cellA.column === cellB.column;\n        const floatingMatch = cellA.rowPinned === cellB.rowPinned;\n        const indexMatch = cellA.rowIndex === cellB.rowIndex;\n        return colsMatch && floatingMatch && indexMatch;\n    }\n};\nCellPositionUtils = __decorate$s([\n    Bean('cellPositionUtils')\n], CellPositionUtils);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass UndoRedoAction {\n    constructor(cellValueChanges) {\n        this.cellValueChanges = cellValueChanges;\n    }\n}\nclass RangeUndoRedoAction extends UndoRedoAction {\n    constructor(cellValueChanges, initialRange, finalRange, ranges) {\n        super(cellValueChanges);\n        this.initialRange = initialRange;\n        this.finalRange = finalRange;\n        this.ranges = ranges;\n    }\n}\nclass UndoRedoStack {\n    constructor(maxStackSize) {\n        this.actionStack = [];\n        this.maxStackSize = maxStackSize ? maxStackSize : UndoRedoStack.DEFAULT_STACK_SIZE;\n        this.actionStack = new Array(this.maxStackSize);\n    }\n    pop() {\n        return this.actionStack.pop();\n    }\n    push(item) {\n        const shouldAddActions = item.cellValueChanges && item.cellValueChanges.length > 0;\n        if (!shouldAddActions) {\n            return;\n        }\n        if (this.actionStack.length === this.maxStackSize) {\n            this.actionStack.shift();\n        }\n        this.actionStack.push(item);\n    }\n    clear() {\n        this.actionStack = [];\n    }\n    getCurrentStackSize() {\n        return this.actionStack.length;\n    }\n}\nUndoRedoStack.DEFAULT_STACK_SIZE = 10;\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$r = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet UndoRedoService = class UndoRedoService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.cellValueChanges = [];\n        this.activeCellEdit = null;\n        this.activeRowEdit = null;\n        this.isPasting = false;\n        this.isRangeInAction = false;\n        this.onCellValueChanged = (event) => {\n            const eventCell = { column: event.column, rowIndex: event.rowIndex, rowPinned: event.rowPinned };\n            const isCellEditing = this.activeCellEdit !== null && this.cellPositionUtils.equals(this.activeCellEdit, eventCell);\n            const isRowEditing = this.activeRowEdit !== null && this.rowPositionUtils.sameRow(this.activeRowEdit, eventCell);\n            const shouldCaptureAction = isCellEditing || isRowEditing || this.isPasting || this.isRangeInAction;\n            if (!shouldCaptureAction) {\n                return;\n            }\n            const { rowPinned, rowIndex, column, oldValue, value } = event;\n            const cellValueChange = {\n                rowPinned,\n                rowIndex: rowIndex,\n                columnId: column.getColId(),\n                newValue: value,\n                oldValue\n            };\n            this.cellValueChanges.push(cellValueChange);\n        };\n        this.clearStacks = () => {\n            this.undoStack.clear();\n            this.redoStack.clear();\n        };\n    }\n    init() {\n        if (!this.gridOptionsService.is('undoRedoCellEditing')) {\n            return;\n        }\n        const undoRedoLimit = this.gridOptionsService.getNum('undoRedoCellEditingLimit');\n        if (undoRedoLimit <= 0) {\n            return;\n        }\n        this.undoStack = new UndoRedoStack(undoRedoLimit);\n        this.redoStack = new UndoRedoStack(undoRedoLimit);\n        this.addRowEditingListeners();\n        this.addCellEditingListeners();\n        this.addPasteListeners();\n        this.addFillListeners();\n        this.addCellKeyListeners();\n        this.addManagedListener(this.eventService, Events.EVENT_CELL_VALUE_CHANGED, this.onCellValueChanged);\n        // undo / redo is restricted to actual editing so we clear the stacks when other operations are\n        // performed that change the order of the row / cols.\n        this.addManagedListener(this.eventService, Events.EVENT_MODEL_UPDATED, e => {\n            if (!e.keepUndoRedoStack) {\n                this.clearStacks();\n            }\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, this.clearStacks);\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, this.clearStacks);\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_GROUP_OPENED, this.clearStacks);\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, this.clearStacks);\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_MOVED, this.clearStacks);\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PINNED, this.clearStacks);\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_VISIBLE, this.clearStacks);\n        this.addManagedListener(this.eventService, Events.EVENT_ROW_DRAG_END, this.clearStacks);\n        this.ctrlsService.whenReady(() => {\n            this.gridBodyCtrl = this.ctrlsService.getGridBodyCtrl();\n        });\n    }\n    getCurrentUndoStackSize() {\n        return this.undoStack ? this.undoStack.getCurrentStackSize() : 0;\n    }\n    getCurrentRedoStackSize() {\n        return this.redoStack ? this.redoStack.getCurrentStackSize() : 0;\n    }\n    undo(source) {\n        const startEvent = {\n            type: Events.EVENT_UNDO_STARTED,\n            source\n        };\n        this.eventService.dispatchEvent(startEvent);\n        const operationPerformed = this.undoRedo(this.undoStack, this.redoStack, 'initialRange', 'oldValue', 'undo');\n        const endEvent = {\n            type: Events.EVENT_UNDO_ENDED,\n            source,\n            operationPerformed\n        };\n        this.eventService.dispatchEvent(endEvent);\n    }\n    redo(source) {\n        const startEvent = {\n            type: Events.EVENT_REDO_STARTED,\n            source\n        };\n        this.eventService.dispatchEvent(startEvent);\n        const operationPerformed = this.undoRedo(this.redoStack, this.undoStack, 'finalRange', 'newValue', 'redo');\n        const endEvent = {\n            type: Events.EVENT_REDO_ENDED,\n            source,\n            operationPerformed\n        };\n        this.eventService.dispatchEvent(endEvent);\n    }\n    undoRedo(undoRedoStack, opposingUndoRedoStack, rangeProperty, cellValueChangeProperty, source) {\n        if (!undoRedoStack) {\n            return false;\n        }\n        const undoRedoAction = undoRedoStack.pop();\n        if (!undoRedoAction || !undoRedoAction.cellValueChanges) {\n            return false;\n        }\n        this.processAction(undoRedoAction, (cellValueChange) => cellValueChange[cellValueChangeProperty], source);\n        if (undoRedoAction instanceof RangeUndoRedoAction) {\n            this.processRange(undoRedoAction.ranges || [undoRedoAction[rangeProperty]]);\n        }\n        else {\n            this.processCell(undoRedoAction.cellValueChanges);\n        }\n        opposingUndoRedoStack.push(undoRedoAction);\n        return true;\n    }\n    processAction(action, valueExtractor, source) {\n        action.cellValueChanges.forEach(cellValueChange => {\n            const { rowIndex, rowPinned, columnId } = cellValueChange;\n            const rowPosition = { rowIndex, rowPinned };\n            const currentRow = this.getRowNode(rowPosition);\n            // checks if the row has been filtered out\n            if (!currentRow.displayed) {\n                return;\n            }\n            currentRow.setDataValue(columnId, valueExtractor(cellValueChange), source);\n        });\n    }\n    processRange(ranges) {\n        let lastFocusedCell;\n        this.rangeService.removeAllCellRanges(true);\n        ranges.forEach((range, idx) => {\n            if (!range) {\n                return;\n            }\n            const startRow = range.startRow;\n            const endRow = range.endRow;\n            if (idx === ranges.length - 1) {\n                lastFocusedCell = {\n                    rowPinned: startRow.rowPinned,\n                    rowIndex: startRow.rowIndex,\n                    columnId: range.startColumn.getColId()\n                };\n                this.setLastFocusedCell(lastFocusedCell);\n            }\n            const cellRangeParams = {\n                rowStartIndex: startRow.rowIndex,\n                rowStartPinned: startRow.rowPinned,\n                rowEndIndex: endRow.rowIndex,\n                rowEndPinned: endRow.rowPinned,\n                columnStart: range.startColumn,\n                columns: range.columns\n            };\n            this.rangeService.addCellRange(cellRangeParams);\n        });\n    }\n    processCell(cellValueChanges) {\n        const cellValueChange = cellValueChanges[0];\n        const { rowIndex, rowPinned } = cellValueChange;\n        const rowPosition = { rowIndex, rowPinned };\n        const row = this.getRowNode(rowPosition);\n        const lastFocusedCell = {\n            rowPinned: cellValueChange.rowPinned,\n            rowIndex: row.rowIndex,\n            columnId: cellValueChange.columnId\n        };\n        // when single cells are being processed, they should be considered\n        // as ranges when the rangeService is present (singleCellRanges).\n        // otherwise focus will be restore but the range will not.\n        this.setLastFocusedCell(lastFocusedCell, !!this.rangeService);\n    }\n    setLastFocusedCell(lastFocusedCell, setRangeToCell) {\n        const { rowIndex, columnId, rowPinned } = lastFocusedCell;\n        const scrollFeature = this.gridBodyCtrl.getScrollFeature();\n        const column = this.columnModel.getGridColumn(columnId);\n        if (!column) {\n            return;\n        }\n        scrollFeature.ensureIndexVisible(rowIndex);\n        scrollFeature.ensureColumnVisible(column);\n        const cellPosition = { rowIndex, column, rowPinned };\n        this.focusService.setFocusedCell(Object.assign(Object.assign({}, cellPosition), { forceBrowserFocus: true }));\n        if (setRangeToCell) {\n            this.rangeService.setRangeToCell(cellPosition);\n        }\n    }\n    addRowEditingListeners() {\n        this.addManagedListener(this.eventService, Events.EVENT_ROW_EDITING_STARTED, (e) => {\n            this.activeRowEdit = { rowIndex: e.rowIndex, rowPinned: e.rowPinned };\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_ROW_EDITING_STOPPED, () => {\n            const action = new UndoRedoAction(this.cellValueChanges);\n            this.pushActionsToUndoStack(action);\n            this.activeRowEdit = null;\n        });\n    }\n    addCellEditingListeners() {\n        this.addManagedListener(this.eventService, Events.EVENT_CELL_EDITING_STARTED, (e) => {\n            this.activeCellEdit = { column: e.column, rowIndex: e.rowIndex, rowPinned: e.rowPinned };\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_CELL_EDITING_STOPPED, (e) => {\n            this.activeCellEdit = null;\n            const shouldPushAction = e.valueChanged && !this.activeRowEdit && !this.isPasting && !this.isRangeInAction;\n            if (shouldPushAction) {\n                const action = new UndoRedoAction(this.cellValueChanges);\n                this.pushActionsToUndoStack(action);\n            }\n        });\n    }\n    addPasteListeners() {\n        this.addManagedListener(this.eventService, Events.EVENT_PASTE_START, () => {\n            this.isPasting = true;\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_PASTE_END, () => {\n            const action = new UndoRedoAction(this.cellValueChanges);\n            this.pushActionsToUndoStack(action);\n            this.isPasting = false;\n        });\n    }\n    addFillListeners() {\n        this.addManagedListener(this.eventService, Events.EVENT_FILL_START, () => {\n            this.isRangeInAction = true;\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_FILL_END, (event) => {\n            const action = new RangeUndoRedoAction(this.cellValueChanges, event.initialRange, event.finalRange);\n            this.pushActionsToUndoStack(action);\n            this.isRangeInAction = false;\n        });\n    }\n    addCellKeyListeners() {\n        this.addManagedListener(this.eventService, Events.EVENT_KEY_SHORTCUT_CHANGED_CELL_START, () => {\n            this.isRangeInAction = true;\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_KEY_SHORTCUT_CHANGED_CELL_END, () => {\n            let action;\n            if (this.rangeService && this.gridOptionsService.isEnableRangeSelection()) {\n                action = new RangeUndoRedoAction(this.cellValueChanges, undefined, undefined, [...this.rangeService.getCellRanges()]);\n            }\n            else {\n                action = new UndoRedoAction(this.cellValueChanges);\n            }\n            this.pushActionsToUndoStack(action);\n            this.isRangeInAction = false;\n        });\n    }\n    pushActionsToUndoStack(action) {\n        this.undoStack.push(action);\n        this.cellValueChanges = [];\n        this.redoStack.clear();\n    }\n    getRowNode(gridRow) {\n        switch (gridRow.rowPinned) {\n            case 'top':\n                return this.pinnedRowModel.getPinnedTopRowData()[gridRow.rowIndex];\n            case 'bottom':\n                return this.pinnedRowModel.getPinnedBottomRowData()[gridRow.rowIndex];\n            default:\n                return this.rowModel.getRow(gridRow.rowIndex);\n        }\n    }\n};\n__decorate$r([\n    Autowired('focusService')\n], UndoRedoService.prototype, \"focusService\", void 0);\n__decorate$r([\n    Autowired('ctrlsService')\n], UndoRedoService.prototype, \"ctrlsService\", void 0);\n__decorate$r([\n    Autowired('rowModel')\n], UndoRedoService.prototype, \"rowModel\", void 0);\n__decorate$r([\n    Autowired('pinnedRowModel')\n], UndoRedoService.prototype, \"pinnedRowModel\", void 0);\n__decorate$r([\n    Autowired('cellPositionUtils')\n], UndoRedoService.prototype, \"cellPositionUtils\", void 0);\n__decorate$r([\n    Autowired('rowPositionUtils')\n], UndoRedoService.prototype, \"rowPositionUtils\", void 0);\n__decorate$r([\n    Autowired('columnModel')\n], UndoRedoService.prototype, \"columnModel\", void 0);\n__decorate$r([\n    Optional('rangeService')\n], UndoRedoService.prototype, \"rangeService\", void 0);\n__decorate$r([\n    PostConstruct\n], UndoRedoService.prototype, \"init\", null);\nUndoRedoService = __decorate$r([\n    Bean('undoRedoService')\n], UndoRedoService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$q = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet HeaderPositionUtils = class HeaderPositionUtils extends BeanStub {\n    findHeader(focusedHeader, direction) {\n        let nextColumn;\n        let getGroupMethod;\n        let getColMethod;\n        if (focusedHeader.column instanceof ColumnGroup) {\n            getGroupMethod = `getDisplayedGroup${direction}`;\n            nextColumn = this.columnModel[getGroupMethod](focusedHeader.column);\n        }\n        else {\n            getColMethod = `getDisplayedCol${direction}`;\n            nextColumn = this.columnModel[getColMethod](focusedHeader.column);\n        }\n        if (!nextColumn) {\n            return;\n        }\n        let { headerRowIndex } = focusedHeader;\n        const currentRowType = this.getHeaderRowType(headerRowIndex);\n        if (currentRowType === HeaderRowType.COLUMN_GROUP) {\n            const columnGroup = nextColumn;\n            if (columnGroup.isPadding() && this.isAnyChildSpanningHeaderHeight(columnGroup)) {\n                const { nextFocusColumn, nextRow } = this.getColumnVisibleChild(columnGroup, headerRowIndex, direction);\n                if (nextFocusColumn) {\n                    nextColumn = nextFocusColumn;\n                    headerRowIndex = nextRow;\n                }\n            }\n        }\n        return {\n            column: nextColumn,\n            headerRowIndex\n        };\n    }\n    isAnyChildSpanningHeaderHeight(columnGroup) {\n        if (!columnGroup) {\n            return false;\n        }\n        return columnGroup.getLeafColumns().some(col => col.isSpanHeaderHeight());\n    }\n    getColumnVisibleParent(currentColumn, currentIndex) {\n        const currentRowType = this.getHeaderRowType(currentIndex);\n        const isFloatingFilter = currentRowType === HeaderRowType.FLOATING_FILTER;\n        const isColumn = currentRowType === HeaderRowType.COLUMN;\n        let nextFocusColumn = isFloatingFilter ? currentColumn : currentColumn.getParent();\n        let nextRow = currentIndex - 1;\n        if (isColumn && this.isAnyChildSpanningHeaderHeight(currentColumn.getParent())) {\n            while (nextFocusColumn && nextFocusColumn.isPadding()) {\n                nextFocusColumn = nextFocusColumn.getParent();\n                nextRow--;\n            }\n            if (nextRow < 0) {\n                nextFocusColumn = currentColumn;\n                nextRow = currentIndex;\n            }\n        }\n        return { nextFocusColumn: nextFocusColumn, nextRow };\n    }\n    getColumnVisibleChild(column, currentIndex, direction = 'After') {\n        const currentRowType = this.getHeaderRowType(currentIndex);\n        let nextFocusColumn = column;\n        let nextRow = currentIndex + 1;\n        if (currentRowType === HeaderRowType.COLUMN_GROUP) {\n            const leafColumns = column.getLeafColumns();\n            const leafChild = direction === 'After' ? leafColumns[0] : last(leafColumns);\n            if (this.isAnyChildSpanningHeaderHeight(leafChild.getParent())) {\n                nextFocusColumn = leafChild;\n                let currentColumn = leafChild.getParent();\n                while (currentColumn && currentColumn !== column) {\n                    currentColumn = currentColumn.getParent();\n                    nextRow++;\n                }\n            }\n            else {\n                nextFocusColumn = column.getDisplayedChildren()[0];\n            }\n        }\n        return { nextFocusColumn, nextRow };\n    }\n    getHeaderRowType(rowIndex) {\n        const centerHeaderContainer = this.ctrlsService.getHeaderRowContainerCtrl();\n        if (centerHeaderContainer) {\n            return centerHeaderContainer.getRowType(rowIndex);\n        }\n    }\n    findColAtEdgeForHeaderRow(level, position) {\n        const displayedColumns = this.columnModel.getAllDisplayedColumns();\n        const column = displayedColumns[position === 'start' ? 0 : displayedColumns.length - 1];\n        if (!column) {\n            return;\n        }\n        const childContainer = this.ctrlsService.getHeaderRowContainerCtrl(column.getPinned());\n        const type = childContainer.getRowType(level);\n        if (type == HeaderRowType.COLUMN_GROUP) {\n            const columnGroup = this.columnModel.getColumnGroupAtLevel(column, level);\n            return {\n                headerRowIndex: level,\n                column: columnGroup\n            };\n        }\n        return {\n            // if type==null, means the header level didn't exist\n            headerRowIndex: type == null ? -1 : level,\n            column\n        };\n    }\n};\n__decorate$q([\n    Autowired('columnModel')\n], HeaderPositionUtils.prototype, \"columnModel\", void 0);\n__decorate$q([\n    Autowired('ctrlsService')\n], HeaderPositionUtils.prototype, \"ctrlsService\", void 0);\nHeaderPositionUtils = __decorate$q([\n    Bean('headerPositionUtils')\n], HeaderPositionUtils);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$p = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ColumnDefFactory = class ColumnDefFactory {\n    buildColumnDefs(cols, rowGroupColumns, pivotColumns) {\n        const res = [];\n        const colGroupDefs = {};\n        cols.forEach(col => {\n            const colDef = this.createDefFromColumn(col, rowGroupColumns, pivotColumns);\n            let addToResult = true;\n            let childDef = colDef;\n            let pointer = col.getOriginalParent();\n            let lastPointer = null;\n            while (pointer) {\n                let parentDef = null;\n                // we don't include padding groups, as the column groups provided\n                // by application didn't have these. the whole point of padding groups\n                // is to balance the column tree that the user provided.\n                if (pointer.isPadding()) {\n                    pointer = pointer.getOriginalParent();\n                    continue;\n                }\n                // if colDef for this group already exists, use it\n                const existingParentDef = colGroupDefs[pointer.getGroupId()];\n                if (existingParentDef) {\n                    existingParentDef.children.push(childDef);\n                    // if we added to result, it would be the second time we did it\n                    addToResult = false;\n                    // we don't want to continue up the tree, as it has already been\n                    // done for this group\n                    break;\n                }\n                parentDef = this.createDefFromGroup(pointer);\n                if (parentDef) {\n                    parentDef.children = [childDef];\n                    colGroupDefs[parentDef.groupId] = parentDef;\n                    childDef = parentDef;\n                    pointer = pointer.getOriginalParent();\n                }\n                if (lastPointer === pointer) {\n                    addToResult = false;\n                    break;\n                }\n                // Ensure we don't get stuck in an infinite loop\n                lastPointer = pointer;\n            }\n            if (addToResult) {\n                res.push(childDef);\n            }\n        });\n        return res;\n    }\n    createDefFromGroup(group) {\n        const defCloned = deepCloneDefinition(group.getColGroupDef(), ['children']);\n        if (defCloned) {\n            defCloned.groupId = group.getGroupId();\n        }\n        return defCloned;\n    }\n    createDefFromColumn(col, rowGroupColumns, pivotColumns) {\n        const colDefCloned = deepCloneDefinition(col.getColDef());\n        colDefCloned.colId = col.getColId();\n        colDefCloned.width = col.getActualWidth();\n        colDefCloned.rowGroup = col.isRowGroupActive();\n        colDefCloned.rowGroupIndex = col.isRowGroupActive() ? rowGroupColumns.indexOf(col) : null;\n        colDefCloned.pivot = col.isPivotActive();\n        colDefCloned.pivotIndex = col.isPivotActive() ? pivotColumns.indexOf(col) : null;\n        colDefCloned.aggFunc = col.isValueActive() ? col.getAggFunc() : null;\n        colDefCloned.hide = col.isVisible() ? undefined : true;\n        colDefCloned.pinned = col.isPinned() ? col.getPinned() : null;\n        colDefCloned.sort = col.getSort() ? col.getSort() : null;\n        colDefCloned.sortIndex = col.getSortIndex() != null ? col.getSortIndex() : null;\n        return colDefCloned;\n    }\n};\nColumnDefFactory = __decorate$p([\n    Bean('columnDefFactory')\n], ColumnDefFactory);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$o = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet RowCssClassCalculator = class RowCssClassCalculator {\n    getInitialRowClasses(params) {\n        const classes = [];\n        if (exists(params.extraCssClass)) {\n            classes.push(params.extraCssClass);\n        }\n        classes.push('ag-row');\n        classes.push(params.rowFocused ? 'ag-row-focus' : 'ag-row-no-focus');\n        if (params.fadeRowIn) {\n            classes.push('ag-opacity-zero');\n        }\n        classes.push(params.rowIsEven ? 'ag-row-even' : 'ag-row-odd');\n        if (params.rowNode.isRowPinned()) {\n            classes.push('ag-row-pinned');\n        }\n        if (params.rowNode.isSelected()) {\n            classes.push('ag-row-selected');\n        }\n        if (params.rowNode.footer) {\n            classes.push('ag-row-footer');\n        }\n        classes.push('ag-row-level-' + params.rowLevel);\n        if (params.rowNode.stub) {\n            classes.push('ag-row-loading');\n        }\n        if (params.fullWidthRow) {\n            classes.push('ag-full-width-row');\n        }\n        if (params.expandable) {\n            classes.push('ag-row-group');\n            classes.push(params.rowNode.expanded ? 'ag-row-group-expanded' : 'ag-row-group-contracted');\n        }\n        if (params.rowNode.dragging) {\n            classes.push('ag-row-dragging');\n        }\n        pushAll(classes, this.processClassesFromGridOptions(params.rowNode));\n        pushAll(classes, this.preProcessRowClassRules(params.rowNode));\n        // we use absolute position unless we are doing print layout\n        classes.push(params.printLayout ? 'ag-row-position-relative' : 'ag-row-position-absolute');\n        if (params.firstRowOnPage) {\n            classes.push('ag-row-first');\n        }\n        if (params.lastRowOnPage) {\n            classes.push('ag-row-last');\n        }\n        if (params.fullWidthRow) {\n            if (params.pinned === 'left') {\n                classes.push('ag-cell-last-left-pinned');\n            }\n            if (params.pinned === 'right') {\n                classes.push('ag-cell-first-right-pinned');\n            }\n        }\n        return classes;\n    }\n    processClassesFromGridOptions(rowNode) {\n        const res = [];\n        const process = (rowCls) => {\n            if (typeof rowCls === 'string') {\n                res.push(rowCls);\n            }\n            else if (Array.isArray(rowCls)) {\n                rowCls.forEach(e => res.push(e));\n            }\n        };\n        // part 1 - rowClass\n        const rowClass = this.gridOptionsService.get('rowClass');\n        if (rowClass) {\n            if (typeof rowClass === 'function') {\n                console.warn('AG Grid: rowClass should not be a function, please use getRowClass instead');\n                return [];\n            }\n            process(rowClass);\n        }\n        // part 2 - rowClassFunc\n        const rowClassFunc = this.gridOptionsService.getCallback('getRowClass');\n        if (rowClassFunc) {\n            const params = {\n                data: rowNode.data,\n                node: rowNode,\n                rowIndex: rowNode.rowIndex\n            };\n            const rowClassFuncResult = rowClassFunc(params);\n            process(rowClassFuncResult);\n        }\n        return res;\n    }\n    preProcessRowClassRules(rowNode) {\n        const res = [];\n        this.processRowClassRules(rowNode, (className) => {\n            res.push(className);\n        }, (className) => {\n            // not catered for, if creating, no need\n            // to remove class as it was never there\n        });\n        return res;\n    }\n    processRowClassRules(rowNode, onApplicableClass, onNotApplicableClass) {\n        const rowClassParams = {\n            data: rowNode.data,\n            node: rowNode,\n            rowIndex: rowNode.rowIndex,\n            api: this.gridOptionsService.api,\n            columnApi: this.gridOptionsService.columnApi,\n            context: this.gridOptionsService.context\n        };\n        this.stylingService.processClassRules(this.gridOptionsService.get('rowClassRules'), rowClassParams, onApplicableClass, onNotApplicableClass);\n    }\n    calculateRowLevel(rowNode) {\n        if (rowNode.group) {\n            return rowNode.level;\n        }\n        // if a leaf, and a parent exists, put a level of the parent, else put level of 0 for top level item\n        return rowNode.parent ? (rowNode.parent.level + 1) : 0;\n    }\n};\n__decorate$o([\n    Autowired('stylingService')\n], RowCssClassCalculator.prototype, \"stylingService\", void 0);\n__decorate$o([\n    Autowired('gridOptionsService')\n], RowCssClassCalculator.prototype, \"gridOptionsService\", void 0);\nRowCssClassCalculator = __decorate$o([\n    Bean('rowCssClassCalculator')\n], RowCssClassCalculator);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$n = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// this logic is used by both SSRM and CSRM\nlet RowNodeSorter = class RowNodeSorter extends BeanStub {\n    init() {\n        this.isAccentedSort = this.gridOptionsService.is('accentedSort');\n        this.primaryColumnsSortGroups = this.gridOptionsService.isColumnsSortingCoupledToGroup();\n        this.addManagedPropertyListener('accentedSort', (propChange) => this.isAccentedSort = propChange.currentValue);\n        this.addManagedPropertyListener('autoGroupColumnDef', () => this.primaryColumnsSortGroups = this.gridOptionsService.isColumnsSortingCoupledToGroup());\n    }\n    doFullSort(rowNodes, sortOptions) {\n        const mapper = (rowNode, pos) => ({ currentPos: pos, rowNode: rowNode });\n        const sortedRowNodes = rowNodes.map(mapper);\n        sortedRowNodes.sort(this.compareRowNodes.bind(this, sortOptions));\n        return sortedRowNodes.map(item => item.rowNode);\n    }\n    compareRowNodes(sortOptions, sortedNodeA, sortedNodeB) {\n        const nodeA = sortedNodeA.rowNode;\n        const nodeB = sortedNodeB.rowNode;\n        // Iterate columns, return the first that doesn't match\n        for (let i = 0, len = sortOptions.length; i < len; i++) {\n            const sortOption = sortOptions[i];\n            const isDescending = sortOption.sort === 'desc';\n            const valueA = this.getValue(nodeA, sortOption.column);\n            const valueB = this.getValue(nodeB, sortOption.column);\n            let comparatorResult;\n            const providedComparator = this.getComparator(sortOption, nodeA);\n            if (providedComparator) {\n                //if comparator provided, use it\n                comparatorResult = providedComparator(valueA, valueB, nodeA, nodeB, isDescending);\n            }\n            else {\n                //otherwise do our own comparison\n                comparatorResult = _.defaultComparator(valueA, valueB, this.isAccentedSort);\n            }\n            // user provided comparators can return 'NaN' if they don't correctly handle 'undefined' values, this\n            // typically occurs when the comparator is used on a group row\n            const validResult = !isNaN(comparatorResult);\n            if (validResult && comparatorResult !== 0) {\n                return sortOption.sort === 'asc' ? comparatorResult : comparatorResult * -1;\n            }\n        }\n        // All matched, we make is so that the original sort order is kept:\n        return sortedNodeA.currentPos - sortedNodeB.currentPos;\n    }\n    getComparator(sortOption, rowNode) {\n        const column = sortOption.column;\n        // comparator on col get preference over everything else\n        const comparatorOnCol = column.getColDef().comparator;\n        if (comparatorOnCol != null) {\n            return comparatorOnCol;\n        }\n        if (!column.getColDef().showRowGroup) {\n            return;\n        }\n        // if a 'field' is supplied on the autoGroupColumnDef we need to use the associated column comparator\n        const groupLeafField = !rowNode.group && column.getColDef().field;\n        if (!groupLeafField) {\n            return;\n        }\n        const primaryColumn = this.columnModel.getPrimaryColumn(groupLeafField);\n        if (!primaryColumn) {\n            return;\n        }\n        return primaryColumn.getColDef().comparator;\n    }\n    getValue(node, column) {\n        var _a, _b;\n        if (!this.primaryColumnsSortGroups) {\n            return this.valueService.getValue(column, node, false, false);\n        }\n        const isNodeGroupedAtLevel = node.rowGroupColumn === column;\n        if (isNodeGroupedAtLevel) {\n            const isGroupRows = this.gridOptionsService.isGroupUseEntireRow(this.columnModel.isPivotActive());\n            if (isGroupRows) {\n                // if the column has a provided a keyCreator, we have to use the key, as the group could be\n                // irrelevant to the column value\n                const keyCreator = column.getColDef().keyCreator;\n                if (keyCreator) {\n                    return node.key;\n                }\n                // if the group was generated from the column data, all the leaf children should return the same\n                // value\n                const leafChild = (_a = node.allLeafChildren) === null || _a === void 0 ? void 0 : _a[0];\n                if (leafChild) {\n                    return this.valueService.getValue(column, leafChild, false, false);\n                }\n                return undefined;\n            }\n            const displayCol = this.columnModel.getGroupDisplayColumnForGroup(column.getId());\n            if (!displayCol) {\n                return undefined;\n            }\n            return (_b = node.groupData) === null || _b === void 0 ? void 0 : _b[displayCol.getId()];\n        }\n        if (node.group && column.getColDef().showRowGroup) {\n            return undefined;\n        }\n        return this.valueService.getValue(column, node, false, false);\n    }\n};\n__decorate$n([\n    Autowired('valueService')\n], RowNodeSorter.prototype, \"valueService\", void 0);\n__decorate$n([\n    Autowired('columnModel')\n], RowNodeSorter.prototype, \"columnModel\", void 0);\n__decorate$n([\n    PostConstruct\n], RowNodeSorter.prototype, \"init\", null);\nRowNodeSorter = __decorate$n([\n    Bean('rowNodeSorter')\n], RowNodeSorter);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$m = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar CtrlsService_1;\nlet CtrlsService = CtrlsService_1 = class CtrlsService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.ready = false;\n        this.readyCallbacks = [];\n    }\n    checkReady() {\n        this.ready =\n            this.gridCtrl != null\n                && this.gridBodyCtrl != null\n                && this.centerRowContainerCtrl != null\n                && this.leftRowContainerCtrl != null\n                && this.rightRowContainerCtrl != null\n                && this.bottomCenterRowContainerCtrl != null\n                && this.bottomLeftRowContainerCtrl != null\n                && this.bottomRightRowContainerCtrl != null\n                && this.topCenterRowContainerCtrl != null\n                && this.topLeftRowContainerCtrl != null\n                && this.topRightRowContainerCtrl != null\n                && this.stickyTopCenterRowContainerCtrl != null\n                && this.stickyTopLeftRowContainerCtrl != null\n                && this.stickyTopRightRowContainerCtrl != null\n                && this.centerHeaderRowContainerCtrl != null\n                && this.leftHeaderRowContainerCtrl != null\n                && this.rightHeaderRowContainerCtrl != null\n                && this.fakeHScrollComp != null\n                && this.fakeVScrollComp != null\n                && this.gridHeaderCtrl != null;\n        if (this.ready) {\n            const p = this.createReadyParams();\n            this.readyCallbacks.forEach(c => c(p));\n            this.readyCallbacks.length = 0;\n        }\n    }\n    whenReady(callback) {\n        if (this.ready) {\n            callback(this.createReadyParams());\n        }\n        else {\n            this.readyCallbacks.push(callback);\n        }\n    }\n    createReadyParams() {\n        return {\n            centerRowContainerCtrl: this.centerRowContainerCtrl,\n            leftRowContainerCtrl: this.leftRowContainerCtrl,\n            rightRowContainerCtrl: this.rightRowContainerCtrl,\n            bottomCenterRowContainerCtrl: this.bottomCenterRowContainerCtrl,\n            bottomLeftRowContainerCtrl: this.bottomLeftRowContainerCtrl,\n            bottomRightRowContainerCtrl: this.bottomRightRowContainerCtrl,\n            topCenterRowContainerCtrl: this.topCenterRowContainerCtrl,\n            topLeftRowContainerCtrl: this.topLeftRowContainerCtrl,\n            topRightRowContainerCtrl: this.topRightRowContainerCtrl,\n            stickyTopCenterRowContainerCtrl: this.stickyTopCenterRowContainerCtrl,\n            stickyTopLeftRowContainerCtrl: this.stickyTopLeftRowContainerCtrl,\n            stickyTopRightRowContainerCtrl: this.stickyTopRightRowContainerCtrl,\n            centerHeaderRowContainerCtrl: this.centerHeaderRowContainerCtrl,\n            leftHeaderRowContainerCtrl: this.leftHeaderRowContainerCtrl,\n            rightHeaderRowContainerCtrl: this.rightHeaderRowContainerCtrl,\n            fakeHScrollComp: this.fakeHScrollComp,\n            fakeVScrollComp: this.fakeVScrollComp,\n            gridBodyCtrl: this.gridBodyCtrl,\n            gridCtrl: this.gridCtrl,\n            gridHeaderCtrl: this.gridHeaderCtrl,\n        };\n    }\n    registerFakeHScrollComp(comp) {\n        this.fakeHScrollComp = comp;\n        this.checkReady();\n    }\n    registerFakeVScrollComp(comp) {\n        this.fakeVScrollComp = comp;\n        this.checkReady();\n    }\n    registerGridHeaderCtrl(gridHeaderCtrl) {\n        this.gridHeaderCtrl = gridHeaderCtrl;\n        this.checkReady();\n    }\n    registerCenterRowContainerCtrl(ctrl) {\n        this.centerRowContainerCtrl = ctrl;\n        this.checkReady();\n    }\n    registerLeftRowContainerCtrl(ctrl) {\n        this.leftRowContainerCtrl = ctrl;\n        this.checkReady();\n    }\n    registerRightRowContainerCtrl(ctrl) {\n        this.rightRowContainerCtrl = ctrl;\n        this.checkReady();\n    }\n    registerTopCenterRowContainerCtrl(ctrl) {\n        this.topCenterRowContainerCtrl = ctrl;\n        this.checkReady();\n    }\n    registerTopLeftRowContainerCon(ctrl) {\n        this.topLeftRowContainerCtrl = ctrl;\n        this.checkReady();\n    }\n    registerTopRightRowContainerCtrl(ctrl) {\n        this.topRightRowContainerCtrl = ctrl;\n        this.checkReady();\n    }\n    registerStickyTopCenterRowContainerCtrl(ctrl) {\n        this.stickyTopCenterRowContainerCtrl = ctrl;\n        this.checkReady();\n    }\n    registerStickyTopLeftRowContainerCon(ctrl) {\n        this.stickyTopLeftRowContainerCtrl = ctrl;\n        this.checkReady();\n    }\n    registerStickyTopRightRowContainerCtrl(ctrl) {\n        this.stickyTopRightRowContainerCtrl = ctrl;\n        this.checkReady();\n    }\n    registerBottomCenterRowContainerCtrl(ctrl) {\n        this.bottomCenterRowContainerCtrl = ctrl;\n        this.checkReady();\n    }\n    registerBottomLeftRowContainerCtrl(ctrl) {\n        this.bottomLeftRowContainerCtrl = ctrl;\n        this.checkReady();\n    }\n    registerBottomRightRowContainerCtrl(ctrl) {\n        this.bottomRightRowContainerCtrl = ctrl;\n        this.checkReady();\n    }\n    registerHeaderContainer(ctrl, pinned) {\n        switch (pinned) {\n            case 'left':\n                this.leftHeaderRowContainerCtrl = ctrl;\n                break;\n            case 'right':\n                this.rightHeaderRowContainerCtrl = ctrl;\n                break;\n            default:\n                this.centerHeaderRowContainerCtrl = ctrl;\n                break;\n        }\n        this.checkReady();\n    }\n    registerGridBodyCtrl(ctrl) {\n        this.gridBodyCtrl = ctrl;\n        this.checkReady();\n    }\n    registerGridCtrl(ctrl) {\n        this.gridCtrl = ctrl;\n        this.checkReady();\n    }\n    getFakeHScrollComp() {\n        return this.fakeHScrollComp;\n    }\n    getFakeVScrollComp() {\n        return this.fakeVScrollComp;\n    }\n    getGridHeaderCtrl() {\n        return this.gridHeaderCtrl;\n    }\n    getGridCtrl() {\n        return this.gridCtrl;\n    }\n    getCenterRowContainerCtrl() {\n        return this.centerRowContainerCtrl;\n    }\n    getTopCenterRowContainerCtrl() {\n        return this.topCenterRowContainerCtrl;\n    }\n    getBottomCenterRowContainerCtrl() {\n        return this.bottomCenterRowContainerCtrl;\n    }\n    getStickyTopCenterRowContainerCtrl() {\n        return this.stickyTopCenterRowContainerCtrl;\n    }\n    getGridBodyCtrl() {\n        return this.gridBodyCtrl;\n    }\n    getHeaderRowContainerCtrls() {\n        return [this.leftHeaderRowContainerCtrl, this.rightHeaderRowContainerCtrl, this.centerHeaderRowContainerCtrl];\n    }\n    getHeaderRowContainerCtrl(pinned) {\n        switch (pinned) {\n            case 'left': return this.leftHeaderRowContainerCtrl;\n            case 'right': return this.rightHeaderRowContainerCtrl;\n            default: return this.centerHeaderRowContainerCtrl;\n        }\n    }\n};\nCtrlsService.NAME = 'ctrlsService';\nCtrlsService = CtrlsService_1 = __decorate$m([\n    Bean(CtrlsService_1.NAME)\n], CtrlsService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$l = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet CtrlsFactory = class CtrlsFactory extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.registry = {};\n    }\n    register(meta) {\n        this.registry[meta.controllerName] = meta.controllerClass;\n    }\n    getInstance(name) {\n        const ControllerClass = this.registry[name];\n        if (ControllerClass == null) {\n            return undefined;\n        }\n        return new ControllerClass();\n    }\n};\nCtrlsFactory = __decorate$l([\n    Bean('ctrlsFactory')\n], CtrlsFactory);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$k = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AbstractFakeScrollComp extends Component {\n    constructor(template, direction) {\n        super(template);\n        this.direction = direction;\n        this.hideTimeout = null;\n    }\n    postConstruct() {\n        this.addManagedListener(this.eventService, Events.EVENT_SCROLL_VISIBILITY_CHANGED, this.onScrollVisibilityChanged.bind(this));\n        this.onScrollVisibilityChanged();\n        this.addOrRemoveCssClass('ag-apple-scrollbar', isMacOsUserAgent() || isIOSUserAgent());\n    }\n    initialiseInvisibleScrollbar() {\n        if (this.invisibleScrollbar !== undefined) {\n            return;\n        }\n        this.invisibleScrollbar = isInvisibleScrollbar();\n        if (this.invisibleScrollbar) {\n            this.hideAndShowInvisibleScrollAsNeeded();\n            this.addActiveListenerToggles();\n        }\n    }\n    addActiveListenerToggles() {\n        const activateEvents = ['mouseenter', 'mousedown', 'touchstart'];\n        const deactivateEvents = ['mouseleave', 'touchend'];\n        const eGui = this.getGui();\n        activateEvents.forEach(eventName => this.addManagedListener(eGui, eventName, () => this.addOrRemoveCssClass('ag-scrollbar-active', true)));\n        deactivateEvents.forEach(eventName => this.addManagedListener(eGui, eventName, () => this.addOrRemoveCssClass('ag-scrollbar-active', false)));\n    }\n    onScrollVisibilityChanged() {\n        // initialiseInvisibleScrollbar should only be called once, but the reason\n        // this can't be inside `setComp` or `PostConstruct` is the DOM might not\n        // be ready, so we call it until eventually, it gets calculated.\n        if (this.invisibleScrollbar === undefined) {\n            this.initialiseInvisibleScrollbar();\n        }\n        this.animationFrameService.requestAnimationFrame(() => this.setScrollVisible());\n    }\n    hideAndShowInvisibleScrollAsNeeded() {\n        this.addManagedListener(this.eventService, Events.EVENT_BODY_SCROLL, (params) => {\n            if (params.direction === this.direction) {\n                if (this.hideTimeout !== null) {\n                    window.clearTimeout(this.hideTimeout);\n                    this.hideTimeout = null;\n                }\n                this.addOrRemoveCssClass('ag-scrollbar-scrolling', true);\n            }\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_BODY_SCROLL_END, () => {\n            this.hideTimeout = window.setTimeout(() => {\n                this.addOrRemoveCssClass('ag-scrollbar-scrolling', false);\n                this.hideTimeout = null;\n            }, 400);\n        });\n    }\n    getViewport() {\n        return this.eViewport;\n    }\n    getContainer() {\n        return this.eContainer;\n    }\n}\n__decorate$k([\n    RefSelector('eViewport')\n], AbstractFakeScrollComp.prototype, \"eViewport\", void 0);\n__decorate$k([\n    RefSelector('eContainer')\n], AbstractFakeScrollComp.prototype, \"eContainer\", void 0);\n__decorate$k([\n    Autowired('scrollVisibleService')\n], AbstractFakeScrollComp.prototype, \"scrollVisibleService\", void 0);\n__decorate$k([\n    Autowired('ctrlsService')\n], AbstractFakeScrollComp.prototype, \"ctrlsService\", void 0);\n__decorate$k([\n    Autowired('animationFrameService')\n], AbstractFakeScrollComp.prototype, \"animationFrameService\", void 0);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$j = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass FakeHScrollComp extends AbstractFakeScrollComp {\n    constructor() {\n        super(FakeHScrollComp.TEMPLATE, 'horizontal');\n    }\n    postConstruct() {\n        super.postConstruct();\n        // When doing printing, this changes whether cols are pinned or not\n        const spacerWidthsListener = this.setFakeHScrollSpacerWidths.bind(this);\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_CHANGED, spacerWidthsListener);\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED, spacerWidthsListener);\n        this.addManagedListener(this.eventService, Events.EVENT_PINNED_ROW_DATA_CHANGED, this.onPinnedRowDataChanged.bind(this));\n        this.addManagedPropertyListener('domLayout', spacerWidthsListener);\n        this.ctrlsService.registerFakeHScrollComp(this);\n        this.createManagedBean(new CenterWidthFeature(width => this.eContainer.style.width = `${width}px`));\n    }\n    initialiseInvisibleScrollbar() {\n        if (this.invisibleScrollbar !== undefined) {\n            return;\n        }\n        this.enableRtl = this.gridOptionsService.is('enableRtl');\n        super.initialiseInvisibleScrollbar();\n        if (this.invisibleScrollbar) {\n            this.refreshCompBottom();\n        }\n    }\n    onPinnedRowDataChanged() {\n        this.refreshCompBottom();\n    }\n    refreshCompBottom() {\n        if (!this.invisibleScrollbar) {\n            return;\n        }\n        const bottomPinnedHeight = this.pinnedRowModel.getPinnedBottomTotalHeight();\n        this.getGui().style.bottom = `${bottomPinnedHeight}px`;\n    }\n    onScrollVisibilityChanged() {\n        super.onScrollVisibilityChanged();\n        this.setFakeHScrollSpacerWidths();\n    }\n    setFakeHScrollSpacerWidths() {\n        const vScrollShowing = this.scrollVisibleService.isVerticalScrollShowing();\n        // we pad the right based on a) if cols are pinned to the right and\n        // b) if v scroll is showing on the right (normal position of scroll)\n        let rightSpacing = this.columnModel.getDisplayedColumnsRightWidth();\n        const scrollOnRight = !this.enableRtl && vScrollShowing;\n        const scrollbarWidth = this.gridOptionsService.getScrollbarWidth();\n        if (scrollOnRight) {\n            rightSpacing += scrollbarWidth;\n        }\n        setFixedWidth(this.eRightSpacer, rightSpacing);\n        this.eRightSpacer.classList.toggle('ag-scroller-corner', rightSpacing <= scrollbarWidth);\n        // we pad the left based on a) if cols are pinned to the left and\n        // b) if v scroll is showing on the left (happens in LTR layout only)\n        let leftSpacing = this.columnModel.getDisplayedColumnsLeftWidth();\n        const scrollOnLeft = this.enableRtl && vScrollShowing;\n        if (scrollOnLeft) {\n            leftSpacing += scrollbarWidth;\n        }\n        setFixedWidth(this.eLeftSpacer, leftSpacing);\n        this.eLeftSpacer.classList.toggle('ag-scroller-corner', leftSpacing <= scrollbarWidth);\n    }\n    setScrollVisible() {\n        const hScrollShowing = this.scrollVisibleService.isHorizontalScrollShowing();\n        const invisibleScrollbar = this.invisibleScrollbar;\n        const isSuppressHorizontalScroll = this.gridOptionsService.is('suppressHorizontalScroll');\n        const scrollbarWidth = hScrollShowing ? (this.gridOptionsService.getScrollbarWidth() || 0) : 0;\n        const adjustedScrollbarWidth = (scrollbarWidth === 0 && invisibleScrollbar) ? 16 : scrollbarWidth;\n        const scrollContainerSize = !isSuppressHorizontalScroll ? adjustedScrollbarWidth : 0;\n        this.addOrRemoveCssClass('ag-scrollbar-invisible', invisibleScrollbar);\n        setFixedHeight(this.getGui(), scrollContainerSize);\n        setFixedHeight(this.eViewport, scrollContainerSize);\n        setFixedHeight(this.eContainer, scrollContainerSize);\n        this.setDisplayed(hScrollShowing, { skipAriaHidden: true });\n    }\n}\nFakeHScrollComp.TEMPLATE = `<div class=\"ag-body-horizontal-scroll\" aria-hidden=\"true\">\n            <div class=\"ag-horizontal-left-spacer\" ref=\"eLeftSpacer\"></div>\n            <div class=\"ag-body-horizontal-scroll-viewport\" ref=\"eViewport\">\n                <div class=\"ag-body-horizontal-scroll-container\" ref=\"eContainer\"></div>\n            </div>\n            <div class=\"ag-horizontal-right-spacer\" ref=\"eRightSpacer\"></div>\n        </div>`;\n__decorate$j([\n    RefSelector('eLeftSpacer')\n], FakeHScrollComp.prototype, \"eLeftSpacer\", void 0);\n__decorate$j([\n    RefSelector('eRightSpacer')\n], FakeHScrollComp.prototype, \"eRightSpacer\", void 0);\n__decorate$j([\n    Autowired('columnModel')\n], FakeHScrollComp.prototype, \"columnModel\", void 0);\n__decorate$j([\n    Autowired('pinnedRowModel')\n], FakeHScrollComp.prototype, \"pinnedRowModel\", void 0);\n__decorate$j([\n    PostConstruct\n], FakeHScrollComp.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$i = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet PinnedWidthService = class PinnedWidthService extends BeanStub {\n    postConstruct() {\n        const listener = this.checkContainerWidths.bind(this);\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_CHANGED, listener);\n        this.addManagedListener(this.eventService, Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED, listener);\n        this.addManagedPropertyListener('domLayout', listener);\n    }\n    checkContainerWidths() {\n        const printLayout = this.gridOptionsService.isDomLayout('print');\n        const newLeftWidth = printLayout ? 0 : this.columnModel.getDisplayedColumnsLeftWidth();\n        const newRightWidth = printLayout ? 0 : this.columnModel.getDisplayedColumnsRightWidth();\n        if (newLeftWidth != this.leftWidth) {\n            this.leftWidth = newLeftWidth;\n            this.eventService.dispatchEvent({ type: Events.EVENT_LEFT_PINNED_WIDTH_CHANGED });\n        }\n        if (newRightWidth != this.rightWidth) {\n            this.rightWidth = newRightWidth;\n            this.eventService.dispatchEvent({ type: Events.EVENT_RIGHT_PINNED_WIDTH_CHANGED });\n        }\n    }\n    getPinnedRightWidth() {\n        return this.rightWidth;\n    }\n    getPinnedLeftWidth() {\n        return this.leftWidth;\n    }\n};\n__decorate$i([\n    Autowired('columnModel')\n], PinnedWidthService.prototype, \"columnModel\", void 0);\n__decorate$i([\n    PostConstruct\n], PinnedWidthService.prototype, \"postConstruct\", null);\nPinnedWidthService = __decorate$i([\n    Bean('pinnedWidthService')\n], PinnedWidthService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$h = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet RowNodeEventThrottle = class RowNodeEventThrottle extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.events = [];\n    }\n    postConstruct() {\n        if (this.rowModel.getType() == 'clientSide') {\n            this.clientSideRowModel = this.rowModel;\n        }\n    }\n    // because the user can call rowNode.setExpanded() many times in one VM turn,\n    // we throttle the calls to ClientSideRowModel using animationFrameService. this means for 100\n    // row nodes getting expanded, we only update the CSRM once, and then we fire all events after\n    // CSRM has updated.\n    //\n    // if we did not do this, then the user could call setExpanded on 100+ rows, causing the grid\n    // to re-render 100+ times, which would be a performance lag.\n    //\n    // we use animationFrameService\n    // rather than _.debounce() so this will get done if anyone flushes the animationFrameService\n    // (eg user calls api.ensureRowVisible(), which in turn flushes ).\n    dispatchExpanded(event) {\n        // if not using CSRM, we don't debounce. otherwise this breaks the SSRM.\n        if (this.clientSideRowModel == null) {\n            this.eventService.dispatchEvent(event);\n            return;\n        }\n        this.events.push(event);\n        const func = () => {\n            if (this.clientSideRowModel) {\n                this.clientSideRowModel.onRowGroupOpened();\n            }\n            this.events.forEach(e => this.eventService.dispatchEvent(e));\n            this.events = [];\n        };\n        if (this.dispatchExpandedDebounced == null) {\n            this.dispatchExpandedDebounced = this.animationFrameService.debounce(func);\n        }\n        this.dispatchExpandedDebounced();\n    }\n};\n__decorate$h([\n    Autowired('animationFrameService')\n], RowNodeEventThrottle.prototype, \"animationFrameService\", void 0);\n__decorate$h([\n    Autowired('rowModel')\n], RowNodeEventThrottle.prototype, \"rowModel\", void 0);\n__decorate$h([\n    PostConstruct\n], RowNodeEventThrottle.prototype, \"postConstruct\", null);\nRowNodeEventThrottle = __decorate$h([\n    Bean('rowNodeEventThrottle')\n], RowNodeEventThrottle);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$g = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param$1 = (undefined && undefined.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nfunction toNumber(value) {\n    if (typeof value == 'number') {\n        return value;\n    }\n    if (typeof value == 'string') {\n        return parseInt(value, 10);\n    }\n}\nfunction isTrue(value) {\n    return value === true || value === 'true';\n}\nlet GridOptionsService = class GridOptionsService {\n    constructor() {\n        this.destroyed = false;\n        this.domDataKey = '__AG_' + Math.random().toString();\n        this.propertyEventService = new EventService();\n    }\n    // This is quicker then having code call gridOptionsService.get('context')\n    get context() {\n        return this.gridOptions['context'];\n    }\n    agWire(gridApi, columnApi) {\n        this.gridOptions.api = gridApi;\n        this.gridOptions.columnApi = columnApi;\n        this.api = gridApi;\n        this.columnApi = columnApi;\n    }\n    init() {\n        this.gridOptionLookup = new Set([...ComponentUtil.ALL_PROPERTIES, ...ComponentUtil.EVENT_CALLBACKS]);\n        const async = !this.is('suppressAsyncEvents');\n        this.eventService.addGlobalListener(this.globalEventHandler.bind(this), async);\n        // sets an initial calculation for the scrollbar width\n        this.getScrollbarWidth();\n    }\n    destroy() {\n        // need to remove these, as we don't own the lifecycle of the gridOptions, we need to\n        // remove the references in case the user keeps the grid options, we want the rest\n        // of the grid to be picked up by the garbage collector\n        this.gridOptions.api = null;\n        this.gridOptions.columnApi = null;\n        this.destroyed = true;\n    }\n    /**\n     * Is the given GridOption property set to true.\n     * @param property GridOption property that has the type `boolean | undefined`\n     */\n    is(property) {\n        return isTrue(this.gridOptions[property]);\n    }\n    /**\n     * Get the raw value of the GridOptions property provided.\n     * @param property\n     */\n    get(property) {\n        return this.gridOptions[property];\n    }\n    /**\n     * Get the GridOption property as a number, raw value is returned via a toNumber coercion function.\n     * @param property GridOption property that has the type `number | undefined`\n     */\n    getNum(property) {\n        return toNumber(this.gridOptions[property]);\n    }\n    /**\n     * Get the GridOption callback but wrapped so that the common params of api,columnApi and context are automatically applied to the params.\n     * @param property GridOption callback properties based on the fact that this property has a callback with params extending AgGridCommon\n     */\n    getCallback(property) {\n        return this.mergeGridCommonParams(this.gridOptions[property]);\n    }\n    /**\n     * Returns `true` if a value has been specified for this GridOption.\n     * @param property GridOption property\n     */\n    exists(property) {\n        return exists(this.gridOptions[property]);\n    }\n    /**\n    * Wrap the user callback and attach the api, columnApi and context to the params object on the way through.\n    * @param callback User provided callback\n    * @returns Wrapped callback where the params object not require api, columnApi and context\n    */\n    mergeGridCommonParams(callback) {\n        if (callback) {\n            const wrapped = (callbackParams) => {\n                const mergedParams = callbackParams;\n                mergedParams.api = this.api;\n                mergedParams.columnApi = this.columnApi;\n                mergedParams.context = this.context;\n                return callback(mergedParams);\n            };\n            return wrapped;\n        }\n        return callback;\n    }\n    /**\n     *\n     * @param key - key of the GridOption property to update\n     * @param newValue - new value for this property\n     * @param force - force the property change Event to be fired even if the value has not changed\n     * @param eventParams - additional params to merge into the property changed event\n     */\n    set(key, newValue, force = false, eventParams = {}) {\n        if (this.gridOptionLookup.has(key)) {\n            const previousValue = this.gridOptions[key];\n            if (force || previousValue !== newValue) {\n                this.gridOptions[key] = newValue;\n                const event = Object.assign({ type: key, currentValue: newValue, previousValue: previousValue }, eventParams);\n                this.propertyEventService.dispatchEvent(event);\n            }\n        }\n    }\n    addEventListener(key, listener) {\n        this.propertyEventService.addEventListener(key, listener);\n    }\n    removeEventListener(key, listener) {\n        this.propertyEventService.removeEventListener(key, listener);\n    }\n    // responsible for calling the onXXX functions on gridOptions\n    globalEventHandler(eventName, event) {\n        // prevent events from being fired _after_ the grid has been destroyed\n        if (this.destroyed) {\n            return;\n        }\n        const callbackMethodName = ComponentUtil.getCallbackForEvent(eventName);\n        if (typeof this.gridOptions[callbackMethodName] === 'function') {\n            this.gridOptions[callbackMethodName](event);\n        }\n    }\n    // *************** Helper methods ************************** //\n    // Methods to share common GridOptions related logic that goes above accessing a single property\n    getGridId() {\n        return this.api.getGridId();\n    }\n    // the user might be using some non-standard scrollbar, eg a scrollbar that has zero\n    // width and overlays (like the Safari scrollbar, but presented in Chrome). so we\n    // allow the user to provide the scroll width before we work it out.\n    getScrollbarWidth() {\n        if (this.scrollbarWidth == null) {\n            const useGridOptions = typeof this.gridOptions.scrollbarWidth === 'number' && this.gridOptions.scrollbarWidth >= 0;\n            const scrollbarWidth = useGridOptions ? this.gridOptions.scrollbarWidth : getScrollbarWidth();\n            if (scrollbarWidth != null) {\n                this.scrollbarWidth = scrollbarWidth;\n                this.eventService.dispatchEvent({\n                    type: Events.EVENT_SCROLLBAR_WIDTH_CHANGED\n                });\n            }\n        }\n        return this.scrollbarWidth;\n    }\n    isRowModelType(rowModelType) {\n        return this.gridOptions.rowModelType === rowModelType ||\n            (rowModelType === 'clientSide' && missing(this.gridOptions.rowModelType));\n    }\n    isDomLayout(domLayout) {\n        var _a;\n        const gridLayout = (_a = this.gridOptions.domLayout) !== null && _a !== void 0 ? _a : 'normal';\n        return gridLayout === domLayout;\n    }\n    isRowSelection() {\n        return this.gridOptions.rowSelection === 'single' || this.gridOptions.rowSelection === 'multiple';\n    }\n    useAsyncEvents() {\n        return !this.is('suppressAsyncEvents');\n    }\n    isGetRowHeightFunction() {\n        return typeof this.gridOptions.getRowHeight === 'function';\n    }\n    getRowHeightForNode(rowNode, allowEstimate = false, defaultRowHeight) {\n        if (defaultRowHeight == null) {\n            defaultRowHeight = this.environment.getDefaultRowHeight();\n        }\n        // check the function first, in case use set both function and\n        // number, when using virtual pagination then function can be\n        // used for pinned rows and the number for the body rows.\n        if (this.isGetRowHeightFunction()) {\n            if (allowEstimate) {\n                return { height: defaultRowHeight, estimated: true };\n            }\n            const params = {\n                node: rowNode,\n                data: rowNode.data\n            };\n            const height = this.getCallback('getRowHeight')(params);\n            if (this.isNumeric(height)) {\n                if (height === 0) {\n                    doOnce(() => console.warn('AG Grid: The return of `getRowHeight` cannot be zero. If the intention is to hide rows, use a filter instead.'), 'invalidRowHeight');\n                }\n                return { height: Math.max(1, height), estimated: false };\n            }\n        }\n        if (rowNode.detail && this.is('masterDetail')) {\n            return this.getMasterDetailRowHeight();\n        }\n        const rowHeight = this.gridOptions.rowHeight && this.isNumeric(this.gridOptions.rowHeight) ? this.gridOptions.rowHeight : defaultRowHeight;\n        return { height: rowHeight, estimated: false };\n    }\n    getMasterDetailRowHeight() {\n        // if autoHeight, we want the height to grow to the new height starting at 1, as otherwise a flicker would happen,\n        // as the detail goes to the default (eg 200px) and then immediately shrink up/down to the new measured height\n        // (due to auto height) which looks bad, especially if doing row animation.\n        if (this.is('detailRowAutoHeight')) {\n            return { height: 1, estimated: false };\n        }\n        if (this.isNumeric(this.gridOptions.detailRowHeight)) {\n            return { height: this.gridOptions.detailRowHeight, estimated: false };\n        }\n        return { height: 300, estimated: false };\n    }\n    // we don't allow dynamic row height for virtual paging\n    getRowHeightAsNumber() {\n        if (!this.gridOptions.rowHeight || missing(this.gridOptions.rowHeight)) {\n            return this.environment.getDefaultRowHeight();\n        }\n        const rowHeight = this.gridOptions.rowHeight;\n        if (rowHeight && this.isNumeric(rowHeight)) {\n            this.environment.setRowHeightVariable(rowHeight);\n            return rowHeight;\n        }\n        console.warn('AG Grid row height must be a number if not using standard row model');\n        return this.environment.getDefaultRowHeight();\n    }\n    isNumeric(value) {\n        return !isNaN(value) && typeof value === 'number' && isFinite(value);\n    }\n    getDomDataKey() {\n        return this.domDataKey;\n    }\n    // returns the dom data, or undefined if not found\n    getDomData(element, key) {\n        const domData = element[this.getDomDataKey()];\n        return domData ? domData[key] : undefined;\n    }\n    setDomData(element, key, value) {\n        const domDataKey = this.getDomDataKey();\n        let domData = element[domDataKey];\n        if (missing(domData)) {\n            domData = {};\n            element[domDataKey] = domData;\n        }\n        domData[key] = value;\n    }\n    getDocument() {\n        // if user is providing document, we use the users one,\n        // otherwise we use the document on the global namespace.\n        let result = null;\n        if (this.gridOptions.getDocument && exists(this.gridOptions.getDocument)) {\n            result = this.gridOptions.getDocument();\n        }\n        else if (this.eGridDiv) {\n            result = this.eGridDiv.ownerDocument;\n        }\n        if (result && exists(result)) {\n            return result;\n        }\n        return document;\n    }\n    getWindow() {\n        const eDocument = this.getDocument();\n        return eDocument.defaultView || window;\n    }\n    getRootNode() {\n        return this.eGridDiv.getRootNode();\n    }\n    getAsyncTransactionWaitMillis() {\n        return exists(this.gridOptions.asyncTransactionWaitMillis) ? this.gridOptions.asyncTransactionWaitMillis : 50;\n    }\n    isAnimateRows() {\n        // never allow animating if enforcing the row order\n        if (this.is('ensureDomOrder')) {\n            return false;\n        }\n        return this.is('animateRows');\n    }\n    isGroupRowsSticky() {\n        if (this.is('suppressGroupRowsSticky') ||\n            this.is('paginateChildRows') ||\n            this.is('groupHideOpenParents')) {\n            return false;\n        }\n        return true;\n    }\n    isTreeData() {\n        return this.is('treeData') && ModuleRegistry.assertRegistered(ModuleNames.RowGroupingModule, 'Tree Data', this.api.getGridId());\n    }\n    isMasterDetail() {\n        return this.is('masterDetail') && ModuleRegistry.assertRegistered(ModuleNames.MasterDetailModule, 'masterDetail', this.api.getGridId());\n    }\n    isEnableRangeSelection() {\n        return this.is('enableRangeSelection') && ModuleRegistry.isRegistered(ModuleNames.RangeSelectionModule, this.api.getGridId());\n    }\n    isColumnsSortingCoupledToGroup() {\n        const autoGroupColumnDef = this.gridOptions.autoGroupColumnDef;\n        const isClientSideRowModel = this.isRowModelType('clientSide');\n        return isClientSideRowModel && !(autoGroupColumnDef === null || autoGroupColumnDef === void 0 ? void 0 : autoGroupColumnDef.comparator) && !this.isTreeData();\n    }\n    getGroupAggFiltering() {\n        const userValue = this.gridOptions.groupAggFiltering;\n        if (typeof userValue === 'function') {\n            return this.getCallback('groupAggFiltering');\n        }\n        if (isTrue(userValue)) {\n            return () => true;\n        }\n        return undefined;\n    }\n    isGroupMultiAutoColumn() {\n        if (this.gridOptions.groupDisplayType) {\n            return matchesGroupDisplayType('multipleColumns', this.gridOptions.groupDisplayType);\n        }\n        // if we are doing hideOpenParents we also show multiple columns, otherwise hideOpenParents would not work\n        return this.is('groupHideOpenParents');\n    }\n    isGroupUseEntireRow(pivotMode) {\n        // we never allow groupDisplayType = 'groupRows' if in pivot mode, otherwise we won't see the pivot values.\n        if (pivotMode) {\n            return false;\n        }\n        return this.gridOptions.groupDisplayType ? matchesGroupDisplayType('groupRows', this.gridOptions.groupDisplayType) : false;\n    }\n};\n__decorate$g([\n    Autowired('gridOptions')\n], GridOptionsService.prototype, \"gridOptions\", void 0);\n__decorate$g([\n    Autowired('eventService')\n], GridOptionsService.prototype, \"eventService\", void 0);\n__decorate$g([\n    Autowired('environment')\n], GridOptionsService.prototype, \"environment\", void 0);\n__decorate$g([\n    Autowired('eGridDiv')\n], GridOptionsService.prototype, \"eGridDiv\", void 0);\n__decorate$g([\n    __param$1(0, Qualifier('gridApi')),\n    __param$1(1, Qualifier('columnApi'))\n], GridOptionsService.prototype, \"agWire\", null);\n__decorate$g([\n    PostConstruct\n], GridOptionsService.prototype, \"init\", null);\n__decorate$g([\n    PreDestroy\n], GridOptionsService.prototype, \"destroy\", null);\nGridOptionsService = __decorate$g([\n    Bean('gridOptionsService')\n], GridOptionsService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$f = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet LocaleService = class LocaleService extends BeanStub {\n    getLocaleTextFunc() {\n        const getLocaleText = this.gridOptionsService.getCallback('getLocaleText');\n        if (getLocaleText) {\n            //key: string, defaultValue: string, variableValues?: string[]\n            return (key, defaultValue, variableValues) => {\n                const params = {\n                    key,\n                    defaultValue,\n                    variableValues\n                };\n                return getLocaleText(params);\n            };\n        }\n        const localeText = this.gridOptionsService.get('localeText');\n        return (key, defaultValue, variableValues) => {\n            let localisedText = localeText && localeText[key];\n            if (localisedText && variableValues && variableValues.length) {\n                let found = 0;\n                while (true) {\n                    if (found >= variableValues.length) {\n                        break;\n                    }\n                    const idx = localisedText.indexOf('${variable}');\n                    if (idx === -1) {\n                        break;\n                    }\n                    localisedText = localisedText.replace('${variable}', variableValues[found++]);\n                }\n            }\n            return localisedText !== null && localisedText !== void 0 ? localisedText : defaultValue;\n        };\n    }\n};\nLocaleService = __decorate$f([\n    Bean('localeService')\n], LocaleService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$e = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass FakeVScrollComp extends AbstractFakeScrollComp {\n    constructor() {\n        super(FakeVScrollComp.TEMPLATE, 'vertical');\n    }\n    postConstruct() {\n        super.postConstruct();\n        this.createManagedBean(new SetHeightFeature(this.eContainer));\n        this.ctrlsService.registerFakeVScrollComp(this);\n        this.addManagedListener(this.eventService, Events.EVENT_ROW_CONTAINER_HEIGHT_CHANGED, this.onRowContainerHeightChanged.bind(this));\n    }\n    setScrollVisible() {\n        const vScrollShowing = this.scrollVisibleService.isVerticalScrollShowing();\n        const invisibleScrollbar = this.invisibleScrollbar;\n        const scrollbarWidth = vScrollShowing ? (this.gridOptionsService.getScrollbarWidth() || 0) : 0;\n        const adjustedScrollbarWidth = (scrollbarWidth === 0 && invisibleScrollbar) ? 16 : scrollbarWidth;\n        this.addOrRemoveCssClass('ag-scrollbar-invisible', invisibleScrollbar);\n        setFixedWidth(this.getGui(), adjustedScrollbarWidth);\n        setFixedWidth(this.eViewport, adjustedScrollbarWidth);\n        setFixedWidth(this.eContainer, adjustedScrollbarWidth);\n        this.setDisplayed(vScrollShowing, { skipAriaHidden: true });\n    }\n    onRowContainerHeightChanged() {\n        const gridBodyCtrl = this.ctrlsService.getGridBodyCtrl();\n        const gridBodyViewportEl = gridBodyCtrl.getBodyViewportElement();\n        if (this.eViewport.scrollTop != gridBodyViewportEl.scrollTop) {\n            this.eViewport.scrollTop = gridBodyViewportEl.scrollTop;\n        }\n    }\n}\nFakeVScrollComp.TEMPLATE = `<div class=\"ag-body-vertical-scroll\" aria-hidden=\"true\">\n            <div class=\"ag-body-vertical-scroll-viewport\" ref=\"eViewport\">\n                <div class=\"ag-body-vertical-scroll-container\" ref=\"eContainer\"></div>\n            </div>\n        </div>`;\n__decorate$e([\n    PostConstruct\n], FakeVScrollComp.prototype, \"postConstruct\", null);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$d = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst MONTH_LOCALE_TEXT = {\n    january: 'January',\n    february: 'February',\n    march: 'March',\n    april: 'April',\n    may: 'May',\n    june: 'June',\n    july: 'July',\n    august: 'August',\n    september: 'September',\n    october: 'October',\n    november: 'November',\n    december: 'December'\n};\nconst MONTH_KEYS = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];\nlet DataTypeService = class DataTypeService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.dataTypeDefinitions = {};\n        this.isWaitingForRowData = false;\n    }\n    init() {\n        this.groupHideOpenParents = this.gridOptionsService.is('groupHideOpenParents');\n        this.addManagedPropertyListener('groupHideOpenParents', () => {\n            this.groupHideOpenParents = this.gridOptionsService.is('groupHideOpenParents');\n        });\n        this.processDataTypeDefinitions();\n        this.addManagedPropertyListener('dataTypeDefinitions', () => {\n            this.processDataTypeDefinitions();\n            this.columnModel.recreateColumnDefs('gridOptionsChanged');\n        });\n    }\n    processDataTypeDefinitions() {\n        var _a;\n        const defaultDataTypes = this.getDefaultDataTypes();\n        this.dataTypeDefinitions = {};\n        Object.entries(defaultDataTypes).forEach(([cellDataType, dataTypeDefinition]) => {\n            this.dataTypeDefinitions[cellDataType] = Object.assign(Object.assign({}, dataTypeDefinition), { groupSafeValueFormatter: this.createGroupSafeValueFormatter(dataTypeDefinition) });\n        });\n        const dataTypeDefinitions = (_a = this.gridOptionsService.get('dataTypeDefinitions')) !== null && _a !== void 0 ? _a : {};\n        this.dataTypeMatchers = {};\n        Object.entries(dataTypeDefinitions).forEach(([cellDataType, dataTypeDefinition]) => {\n            const mergedDataTypeDefinition = this.processDataTypeDefinition(dataTypeDefinition, dataTypeDefinitions, [cellDataType], defaultDataTypes);\n            if (mergedDataTypeDefinition) {\n                this.dataTypeDefinitions[cellDataType] = mergedDataTypeDefinition;\n                if (dataTypeDefinition.dataTypeMatcher) {\n                    this.dataTypeMatchers[cellDataType] = dataTypeDefinition.dataTypeMatcher;\n                }\n            }\n        });\n        this.checkObjectValueHandlers(defaultDataTypes);\n        ['dateString', 'text', 'number', 'boolean', 'date'].forEach((cellDataType) => {\n            const overriddenDataTypeMatcher = this.dataTypeMatchers[cellDataType];\n            if (overriddenDataTypeMatcher) {\n                // remove to maintain correct ordering\n                delete this.dataTypeMatchers[cellDataType];\n            }\n            this.dataTypeMatchers[cellDataType] = overriddenDataTypeMatcher !== null && overriddenDataTypeMatcher !== void 0 ? overriddenDataTypeMatcher : defaultDataTypes[cellDataType].dataTypeMatcher;\n        });\n    }\n    mergeDataTypeDefinitions(parentDataTypeDefinition, childDataTypeDefinition) {\n        const mergedDataTypeDefinition = Object.assign(Object.assign({}, parentDataTypeDefinition), childDataTypeDefinition);\n        if (parentDataTypeDefinition.columnTypes &&\n            childDataTypeDefinition.columnTypes &&\n            childDataTypeDefinition.appendColumnTypes) {\n            mergedDataTypeDefinition.columnTypes = [\n                ...this.convertColumnTypes(parentDataTypeDefinition.columnTypes),\n                ...this.convertColumnTypes(childDataTypeDefinition.columnTypes),\n            ];\n        }\n        return mergedDataTypeDefinition;\n    }\n    processDataTypeDefinition(dataTypeDefinition, dataTypeDefinitions, alreadyProcessedDataTypes, defaultDataTypes) {\n        let mergedDataTypeDefinition;\n        const extendsCellDataType = dataTypeDefinition.extendsDataType;\n        if (dataTypeDefinition.extendsDataType === dataTypeDefinition.baseDataType) {\n            const baseDataTypeDefinition = defaultDataTypes[extendsCellDataType];\n            if (!this.validateDataTypeDefinition(dataTypeDefinition, baseDataTypeDefinition, extendsCellDataType)) {\n                return undefined;\n            }\n            mergedDataTypeDefinition = this.mergeDataTypeDefinitions(baseDataTypeDefinition, dataTypeDefinition);\n        }\n        else {\n            if (alreadyProcessedDataTypes.includes(extendsCellDataType)) {\n                doOnce(() => console.warn('AG Grid: Data type definition hierarchies (via the \"extendsDataType\" property) cannot contain circular references.'), 'dataTypeExtendsCircularRef');\n                return undefined;\n            }\n            const extendedDataTypeDefinition = dataTypeDefinitions[extendsCellDataType];\n            if (!this.validateDataTypeDefinition(dataTypeDefinition, extendedDataTypeDefinition, extendsCellDataType)) {\n                return undefined;\n            }\n            const mergedExtendedDataTypeDefinition = this.processDataTypeDefinition(extendedDataTypeDefinition, dataTypeDefinitions, [...alreadyProcessedDataTypes, extendsCellDataType], defaultDataTypes);\n            if (!mergedExtendedDataTypeDefinition) {\n                return undefined;\n            }\n            mergedDataTypeDefinition = this.mergeDataTypeDefinitions(mergedExtendedDataTypeDefinition, dataTypeDefinition);\n        }\n        return Object.assign(Object.assign({}, mergedDataTypeDefinition), { groupSafeValueFormatter: this.createGroupSafeValueFormatter(mergedDataTypeDefinition) });\n    }\n    validateDataTypeDefinition(dataTypeDefinition, parentDataTypeDefinition, parentCellDataType) {\n        if (!parentDataTypeDefinition) {\n            doOnce(() => console.warn(`AG Grid: The data type definition ${parentCellDataType} does not exist.`), 'dataTypeDefMissing' + parentCellDataType);\n            return false;\n        }\n        if (parentDataTypeDefinition.baseDataType !== dataTypeDefinition.baseDataType) {\n            doOnce(() => console.warn('AG Grid: The \"baseDataType\" property of a data type definition must match that of its parent.'), 'dataTypeBaseTypesMatch');\n            return false;\n        }\n        return true;\n    }\n    createGroupSafeValueFormatter(dataTypeDefinition) {\n        if (!dataTypeDefinition.valueFormatter) {\n            return undefined;\n        }\n        return (params) => {\n            var _a, _b;\n            if ((_a = params.node) === null || _a === void 0 ? void 0 : _a.group) {\n                const aggFunc = params.column.getAggFunc();\n                if (aggFunc) {\n                    // the resulting type of these will be the same, so we call valueFormatter anyway\n                    if (aggFunc === 'first' || aggFunc === 'last') {\n                        return dataTypeDefinition.valueFormatter(params);\n                    }\n                    if (dataTypeDefinition.baseDataType === 'number' && aggFunc !== 'count') {\n                        if (typeof params.value === 'number') {\n                            return dataTypeDefinition.valueFormatter(params);\n                        }\n                        if (typeof params.value === 'object') {\n                            if (!params.value) {\n                                return undefined;\n                            }\n                            if ('toNumber' in params.value) {\n                                return dataTypeDefinition.valueFormatter(Object.assign(Object.assign({}, params), { value: params.value.toNumber() }));\n                            }\n                            if ('value' in params.value) {\n                                return dataTypeDefinition.valueFormatter(Object.assign(Object.assign({}, params), { value: params.value.value }));\n                            }\n                        }\n                    }\n                }\n                return undefined;\n            }\n            else if (this.groupHideOpenParents && params.column.isRowGroupActive()) {\n                // `groupHideOpenParents` passes leaf values in the group column, so need to format still.\n                // If it's not a string, we know it hasn't been formatted. Otherwise check the data type matcher.\n                if (typeof params.value !== 'string' || ((_b = dataTypeDefinition.dataTypeMatcher) === null || _b === void 0 ? void 0 : _b.call(dataTypeDefinition, params.value))) {\n                    return dataTypeDefinition.valueFormatter(params);\n                }\n                return undefined;\n            }\n            return dataTypeDefinition.valueFormatter(params);\n        };\n    }\n    updateColDefAndGetDataTypeDefinitionColumnType(colDef, userColDef, colId) {\n        let { cellDataType } = userColDef;\n        const { field } = userColDef;\n        if (cellDataType === undefined) {\n            cellDataType = colDef.cellDataType;\n        }\n        if ((cellDataType == null || cellDataType === true)) {\n            cellDataType = this.canInferCellDataType(colDef, userColDef) ? this.inferCellDataType(field) : false;\n        }\n        if (!cellDataType) {\n            colDef.cellDataType = false;\n            return undefined;\n        }\n        const dataTypeDefinition = this.dataTypeDefinitions[cellDataType];\n        if (!dataTypeDefinition) {\n            doOnce(() => console.warn(`AG Grid: Missing data type definition - \"${cellDataType}\"`), 'dataTypeMissing' + cellDataType);\n            return undefined;\n        }\n        colDef.cellDataType = cellDataType;\n        if (dataTypeDefinition.groupSafeValueFormatter) {\n            colDef.valueFormatter = dataTypeDefinition.groupSafeValueFormatter;\n        }\n        if (dataTypeDefinition.valueParser) {\n            colDef.valueParser = dataTypeDefinition.valueParser;\n        }\n        if (!dataTypeDefinition.suppressDefaultProperties) {\n            this.setColDefPropertiesForBaseDataType(colDef, dataTypeDefinition, colId);\n        }\n        return dataTypeDefinition.columnTypes;\n    }\n    updateColDefAndGetColumnType(colDef, userColDef, colId) {\n        var _a, _b;\n        const dataTypeDefinitionColumnType = this.updateColDefAndGetDataTypeDefinitionColumnType(colDef, userColDef, colId);\n        const columnTypes = (_b = (_a = userColDef.type) !== null && _a !== void 0 ? _a : dataTypeDefinitionColumnType) !== null && _b !== void 0 ? _b : colDef.type;\n        return columnTypes ? this.convertColumnTypes(columnTypes) : undefined;\n    }\n    canInferCellDataType(colDef, userColDef) {\n        var _a;\n        if (this.rowModel.getType() !== 'clientSide') {\n            return false;\n        }\n        const propsToCheckForInference = { cellRenderer: true, valueGetter: true, valueParser: true, refData: true };\n        if (this.doColDefPropsPreventInference(userColDef, propsToCheckForInference)) {\n            return false;\n        }\n        const columnTypes = userColDef.type === null ? colDef.type : userColDef.type;\n        if (columnTypes) {\n            const columnTypeDefs = (_a = this.gridOptionsService.get('columnTypes')) !== null && _a !== void 0 ? _a : {};\n            const hasPropsPreventingInference = this.convertColumnTypes(columnTypes).some(columnType => {\n                const columnTypeDef = columnTypeDefs[columnType.trim()];\n                return columnTypeDef && this.doColDefPropsPreventInference(columnTypeDef, propsToCheckForInference);\n            });\n            if (hasPropsPreventingInference) {\n                return false;\n            }\n        }\n        return !this.doColDefPropsPreventInference(colDef, propsToCheckForInference);\n    }\n    doColDefPropsPreventInference(colDef, propsToCheckForInference) {\n        return [\n            ['cellRenderer', 'agSparklineCellRenderer'], ['valueGetter', undefined], ['valueParser', undefined], ['refData', undefined]\n        ].some(([prop, comparisonValue]) => this.doesColDefPropPreventInference(colDef, propsToCheckForInference, prop, comparisonValue));\n    }\n    doesColDefPropPreventInference(colDef, checkProps, prop, comparisonValue) {\n        if (!checkProps[prop]) {\n            return false;\n        }\n        const value = colDef[prop];\n        if (value === null) {\n            checkProps[prop] = false;\n            return false;\n        }\n        else {\n            return comparisonValue === undefined ? !!value : value === comparisonValue;\n        }\n    }\n    inferCellDataType(field) {\n        var _a;\n        if (!field) {\n            return undefined;\n        }\n        const rowData = this.gridOptionsService.get('rowData');\n        let value;\n        const fieldContainsDots = field.indexOf('.') >= 0 && !this.gridOptionsService.is('suppressFieldDotNotation');\n        if (rowData === null || rowData === void 0 ? void 0 : rowData.length) {\n            value = getValueUsingField(rowData[0], field, fieldContainsDots);\n        }\n        else {\n            const rowNodes = this.rowModel\n                .getRootNode()\n                .allLeafChildren;\n            if (rowNodes === null || rowNodes === void 0 ? void 0 : rowNodes.length) {\n                value = getValueUsingField(rowNodes[0].data, field, fieldContainsDots);\n            }\n            else {\n                this.initWaitForRowData();\n            }\n        }\n        if (value == null) {\n            return undefined;\n        }\n        const [cellDataType] = (_a = Object.entries(this.dataTypeMatchers).find(([_cellDataType, dataTypeMatcher]) => dataTypeMatcher(value))) !== null && _a !== void 0 ? _a : ['object'];\n        return cellDataType;\n    }\n    initWaitForRowData() {\n        if (this.isWaitingForRowData) {\n            return;\n        }\n        this.isWaitingForRowData = true;\n        const destroyFunc = this.addManagedListener(this.eventService, Events.EVENT_ROW_DATA_UPDATED, () => {\n            destroyFunc === null || destroyFunc === void 0 ? void 0 : destroyFunc();\n            this.isWaitingForRowData = false;\n            setTimeout(() => {\n                // ensure event handled async\n                this.columnModel.recreateColumnDefs('rowDataUpdated');\n            });\n        });\n    }\n    checkObjectValueHandlers(defaultDataTypes) {\n        const resolvedObjectDataTypeDefinition = this.dataTypeDefinitions.object;\n        const defaultObjectDataTypeDefinition = defaultDataTypes.object;\n        this.hasObjectValueParser = resolvedObjectDataTypeDefinition.valueParser !== defaultObjectDataTypeDefinition.valueParser;\n        this.hasObjectValueFormatter = resolvedObjectDataTypeDefinition.valueFormatter !== defaultObjectDataTypeDefinition.valueFormatter;\n    }\n    convertColumnTypes(type) {\n        let typeKeys = [];\n        if (type instanceof Array) {\n            const invalidArray = type.some((a) => typeof a !== 'string');\n            if (invalidArray) {\n                console.warn(\"AG Grid: if colDef.type is supplied an array it should be of type 'string[]'\");\n            }\n            else {\n                typeKeys = type;\n            }\n        }\n        else if (typeof type === 'string') {\n            typeKeys = type.split(',');\n        }\n        else {\n            console.warn(\"AG Grid: colDef.type should be of type 'string' | 'string[]'\");\n        }\n        return typeKeys;\n    }\n    getDateStringTypeDefinition() {\n        return this.dataTypeDefinitions.dateString;\n    }\n    getDateParserFunction() {\n        return this.getDateStringTypeDefinition().dateParser;\n    }\n    getDateFormatterFunction() {\n        return this.getDateStringTypeDefinition().dateFormatter;\n    }\n    checkType(column, value) {\n        var _a;\n        const colDef = column.getColDef();\n        if (!colDef.cellDataType || value == null) {\n            return true;\n        }\n        const dataTypeMatcher = (_a = this.dataTypeDefinitions[colDef.cellDataType]) === null || _a === void 0 ? void 0 : _a.dataTypeMatcher;\n        if (!dataTypeMatcher) {\n            return true;\n        }\n        return dataTypeMatcher(value);\n    }\n    validateColDef(colDef) {\n        if (colDef.cellDataType === 'object') {\n            if (colDef.valueFormatter === this.dataTypeDefinitions.object.groupSafeValueFormatter && !this.hasObjectValueFormatter) {\n                doOnce(() => console.warn('AG Grid: Cell data type is \"object\" but no value formatter has been provided. Please either provide an object data type definition with a value formatter, or set \"colDef.valueFormatter\"'), 'dataTypeObjectValueFormatter');\n            }\n            if (colDef.editable && colDef.valueParser === this.dataTypeDefinitions.object.valueParser && !this.hasObjectValueParser) {\n                doOnce(() => console.warn('AG Grid: Cell data type is \"object\" but no value parser has been provided. Please either provide an object data type definition with a value parser, or set \"colDef.valueParser\"'), 'dataTypeObjectValueParser');\n            }\n        }\n    }\n    setColDefPropertiesForBaseDataType(colDef, dataTypeDefinition, colId) {\n        const formatValue = (column, node, value) => {\n            let valueFormatter = column.getColDef().valueFormatter;\n            if (valueFormatter === dataTypeDefinition.groupSafeValueFormatter) {\n                valueFormatter = dataTypeDefinition.valueFormatter;\n            }\n            return this.valueFormatterService.formatValue(column, node, value, valueFormatter);\n        };\n        const usingSetFilter = ModuleRegistry.isRegistered(ModuleNames.SetFilterModule, this.context.getGridId());\n        const translate = this.localeService.getLocaleTextFunc();\n        colDef.useValueFormatterForExport = true;\n        colDef.useValueParserForImport = true;\n        switch (dataTypeDefinition.baseDataType) {\n            case 'number': {\n                colDef.cellEditor = 'agNumberCellEditor';\n                if (usingSetFilter) {\n                    colDef.filterParams = {\n                        comparator: (a, b) => {\n                            const valA = a == null ? 0 : parseInt(a);\n                            const valB = b == null ? 0 : parseInt(b);\n                            if (valA === valB)\n                                return 0;\n                            return valA > valB ? 1 : -1;\n                        },\n                    };\n                }\n                break;\n            }\n            case 'boolean': {\n                colDef.cellEditor = 'agCheckboxCellEditor';\n                colDef.cellRenderer = 'agCheckboxCellRenderer';\n                colDef.suppressKeyboardEvent = (params) => !!params.colDef.editable && params.event.key === KeyCode.SPACE;\n                if (usingSetFilter) {\n                    colDef.filterParams = {\n                        valueFormatter: (params) => {\n                            if (!exists(params.value)) {\n                                return translate('blanks', '(Blanks)');\n                            }\n                            return translate(String(params.value), params.value ? 'True' : 'False');\n                        }\n                    };\n                }\n                else {\n                    colDef.filterParams = {\n                        maxNumConditions: 1,\n                        filterOptions: [\n                            'empty',\n                            {\n                                displayKey: 'true',\n                                displayName: 'True',\n                                predicate: (_filterValues, cellValue) => cellValue,\n                                numberOfInputs: 0,\n                            },\n                            {\n                                displayKey: 'false',\n                                displayName: 'False',\n                                predicate: (_filterValues, cellValue) => cellValue === false,\n                                numberOfInputs: 0,\n                            },\n                        ]\n                    };\n                }\n                break;\n            }\n            case 'date': {\n                colDef.cellEditor = 'agDateCellEditor';\n                colDef.keyCreator = (params) => formatValue(params.column, params.node, params.value);\n                if (usingSetFilter) {\n                    colDef.filterParams = {\n                        valueFormatter: (params) => {\n                            const valueFormatted = formatValue(params.column, params.node, params.value);\n                            return exists(valueFormatted) ? valueFormatted : translate('blanks', '(Blanks)');\n                        },\n                        treeList: true,\n                        treeListFormatter: (pathKey, level) => {\n                            if (level === 1 && pathKey != null) {\n                                const monthKey = MONTH_KEYS[Number(pathKey) - 1];\n                                return translate(monthKey, MONTH_LOCALE_TEXT[monthKey]);\n                            }\n                            return pathKey !== null && pathKey !== void 0 ? pathKey : translate('blanks', '(Blanks)');\n                        }\n                    };\n                }\n                break;\n            }\n            case 'dateString': {\n                colDef.cellEditor = 'agDateStringCellEditor';\n                colDef.keyCreator = (params) => formatValue(params.column, params.node, params.value);\n                const convertToDate = this.getDateParserFunction();\n                if (usingSetFilter) {\n                    colDef.filterParams = {\n                        valueFormatter: (params) => {\n                            const valueFormatted = formatValue(params.column, params.node, params.value);\n                            return exists(valueFormatted) ? valueFormatted : translate('blanks', '(Blanks)');\n                        },\n                        treeList: true,\n                        treeListPathGetter: (value) => {\n                            const date = convertToDate(value !== null && value !== void 0 ? value : undefined);\n                            return date ? [String(date.getFullYear()), String(date.getMonth() + 1), String(date.getDate())] : null;\n                        },\n                        treeListFormatter: (pathKey, level) => {\n                            if (level === 1 && pathKey != null) {\n                                const monthKey = MONTH_KEYS[Number(pathKey) - 1];\n                                return translate(monthKey, MONTH_LOCALE_TEXT[monthKey]);\n                            }\n                            return pathKey !== null && pathKey !== void 0 ? pathKey : translate('blanks', '(Blanks)');\n                        }\n                    };\n                }\n                else {\n                    colDef.filterParams = {\n                        comparator: (filterDate, cellValue) => {\n                            const cellAsDate = convertToDate(cellValue);\n                            if (cellValue == null || cellAsDate < filterDate) {\n                                return -1;\n                            }\n                            if (cellAsDate > filterDate) {\n                                return 1;\n                            }\n                            return 0;\n                        }\n                    };\n                }\n                break;\n            }\n            case 'object': {\n                colDef.cellEditorParams = {\n                    useFormatter: true,\n                };\n                colDef.comparator = (a, b) => {\n                    const column = this.columnModel.getPrimaryColumn(colId);\n                    const colDef = column === null || column === void 0 ? void 0 : column.getColDef();\n                    if (!column || !colDef) {\n                        return 0;\n                    }\n                    const valA = a == null ? '' : formatValue(column, null, a);\n                    const valB = b == null ? '' : formatValue(column, null, b);\n                    if (valA === valB)\n                        return 0;\n                    return valA > valB ? 1 : -1;\n                };\n                colDef.keyCreator = (params) => formatValue(params.column, params.node, params.value);\n                if (usingSetFilter) {\n                    colDef.filterParams = {\n                        valueFormatter: (params) => {\n                            const valueFormatted = formatValue(params.column, params.node, params.value);\n                            return exists(valueFormatted) ? valueFormatted : translate('blanks', '(Blanks)');\n                        }\n                    };\n                }\n                else {\n                    colDef.filterValueGetter = (params) => formatValue(params.column, params.node, this.valueService.getValue(params.column, params.node));\n                }\n                break;\n            }\n        }\n    }\n    getDefaultDataTypes() {\n        const defaultDateFormatMatcher = (value) => !!value.match('\\\\d{4}-\\\\d{2}-\\\\d{2}');\n        const translate = this.localeService.getLocaleTextFunc();\n        return {\n            number: {\n                baseDataType: 'number',\n                valueParser: (params) => params.newValue === '' ? null : Number(params.newValue),\n                valueFormatter: (params) => {\n                    if (params.value == null) {\n                        return '';\n                    }\n                    if (typeof params.value !== 'number' || isNaN(params.value)) {\n                        return translate('invalidNumber', 'Invalid Number');\n                    }\n                    return String(params.value);\n                },\n                dataTypeMatcher: (value) => typeof value === 'number',\n            },\n            text: {\n                baseDataType: 'text',\n                valueParser: (params) => params.newValue === '' ? null : toStringOrNull(params.newValue),\n                dataTypeMatcher: (value) => typeof value === 'string',\n            },\n            boolean: {\n                baseDataType: 'boolean',\n                valueParser: (params) => params.newValue === '' ? null : String(params.newValue).toLowerCase() === 'true',\n                valueFormatter: (params) => params.value == null ? '' : String(params.value),\n                dataTypeMatcher: (value) => typeof value === 'boolean',\n            },\n            date: {\n                baseDataType: 'date',\n                valueParser: (params) => parseDateTimeFromString(params.newValue == null ? null : String(params.newValue)),\n                valueFormatter: (params) => {\n                    var _a;\n                    if (params.value == null) {\n                        return '';\n                    }\n                    if (!(params.value instanceof Date) || isNaN(params.value.getTime())) {\n                        return translate('invalidDate', 'Invalid Date');\n                    }\n                    return (_a = serialiseDate(params.value, false)) !== null && _a !== void 0 ? _a : '';\n                },\n                dataTypeMatcher: (value) => value instanceof Date,\n            },\n            dateString: {\n                baseDataType: 'dateString',\n                dateParser: (value) => { var _a; return (_a = parseDateTimeFromString(value)) !== null && _a !== void 0 ? _a : undefined; },\n                dateFormatter: (value) => { var _a; return (_a = serialiseDate(value !== null && value !== void 0 ? value : null, false)) !== null && _a !== void 0 ? _a : undefined; },\n                valueParser: (params) => defaultDateFormatMatcher(String(params.newValue)) ? params.newValue : null,\n                valueFormatter: (params) => defaultDateFormatMatcher(String(params.value)) ? params.value : '',\n                dataTypeMatcher: (value) => typeof value === 'string' && defaultDateFormatMatcher(value),\n            },\n            object: {\n                baseDataType: 'object',\n                valueParser: () => null,\n                valueFormatter: (params) => { var _a; return (_a = toStringOrNull(params.value)) !== null && _a !== void 0 ? _a : ''; },\n            }\n        };\n    }\n};\n__decorate$d([\n    Autowired('rowModel')\n], DataTypeService.prototype, \"rowModel\", void 0);\n__decorate$d([\n    Autowired('columnModel')\n], DataTypeService.prototype, \"columnModel\", void 0);\n__decorate$d([\n    Autowired('valueService')\n], DataTypeService.prototype, \"valueService\", void 0);\n__decorate$d([\n    Autowired('valueFormatterService')\n], DataTypeService.prototype, \"valueFormatterService\", void 0);\n__decorate$d([\n    PostConstruct\n], DataTypeService.prototype, \"init\", null);\nDataTypeService = __decorate$d([\n    Bean('dataTypeService')\n], DataTypeService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar __decorate$c = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ValueParserService = class ValueParserService extends BeanStub {\n    parseValue(column, rowNode, newValue, oldValue) {\n        const colDef = column.getColDef();\n        const params = {\n            node: rowNode,\n            data: rowNode === null || rowNode === void 0 ? void 0 : rowNode.data,\n            oldValue,\n            newValue,\n            colDef,\n            column,\n            api: this.gridOptionsService.api,\n            columnApi: this.gridOptionsService.columnApi,\n            context: this.gridOptionsService.context\n        };\n        const valueParser = colDef.valueParser;\n        if (exists(valueParser)) {\n            if (typeof valueParser === 'function') {\n                return valueParser(params);\n            }\n            return this.expressionService.evaluate(valueParser, params);\n        }\n        return newValue;\n    }\n};\n__decorate$c([\n    Autowired('expressionService')\n], ValueParserService.prototype, \"expressionService\", void 0);\nValueParserService = __decorate$c([\n    Bean('valueParserService')\n], ValueParserService);\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n// creates JavaScript vanilla Grid, including JavaScript (ag-stack) components, which can\n// be wrapped by the framework wrappers\nclass Grid {\n    constructor(eGridDiv, gridOptions, params) {\n        if (!gridOptions) {\n            console.error('AG Grid: no gridOptions provided to the grid');\n            return;\n        }\n        this.gridOptions = gridOptions;\n        new GridCoreCreator().create(eGridDiv, gridOptions, context => {\n            const gridComp = new GridComp(eGridDiv);\n            context.createBean(gridComp);\n        }, undefined, params);\n    }\n    destroy() {\n        if (this.gridOptions && this.gridOptions.api) {\n            this.gridOptions.api.destroy();\n        }\n    }\n}\nlet nextGridId = 1;\n// created services of grid only, no UI, so frameworks can use this if providing\n// their own UI\nclass GridCoreCreator {\n    create(eGridDiv, gridOptions, createUi, acceptChanges, params) {\n        var _a;\n        const debug = !!gridOptions.debug;\n        const gridId = (_a = gridOptions.gridId) !== null && _a !== void 0 ? _a : String(nextGridId++);\n        const registeredModules = this.getRegisteredModules(params, gridId);\n        const beanClasses = this.createBeansList(gridOptions.rowModelType, registeredModules, gridId);\n        const providedBeanInstances = this.createProvidedBeans(eGridDiv, gridOptions, params);\n        if (!beanClasses) {\n            return;\n        } // happens when no row model found\n        const contextParams = {\n            providedBeanInstances: providedBeanInstances,\n            beanClasses: beanClasses,\n            debug: debug,\n            gridId: gridId,\n        };\n        const logger = new Logger('AG Grid', () => gridOptions.debug);\n        const contextLogger = new Logger('Context', () => contextParams.debug);\n        const context = new Context(contextParams, contextLogger);\n        const beans = context.getBean('beans');\n        this.registerModuleUserComponents(beans, registeredModules);\n        this.registerStackComponents(beans, registeredModules);\n        this.registerControllers(beans, registeredModules);\n        createUi(context);\n        // we wait until the UI has finished initialising before setting in columns and rows\n        beans.ctrlsService.whenReady(() => {\n            this.setColumnsAndData(beans);\n            this.dispatchGridReadyEvent(beans);\n            const isEnterprise = ModuleRegistry.isRegistered(ModuleNames.EnterpriseCoreModule, gridId);\n            logger.log(`initialised successfully, enterprise = ${isEnterprise}`);\n        });\n        if (acceptChanges) {\n            acceptChanges(context);\n        }\n    }\n    registerControllers(beans, registeredModules) {\n        registeredModules.forEach(module => {\n            if (module.controllers) {\n                module.controllers.forEach(meta => beans.ctrlsFactory.register(meta));\n            }\n        });\n    }\n    registerStackComponents(beans, registeredModules) {\n        const agStackComponents = this.createAgStackComponentsList(registeredModules);\n        beans.agStackComponentsRegistry.setupComponents(agStackComponents);\n    }\n    getRegisteredModules(params, gridId) {\n        const passedViaConstructor = params ? params.modules : null;\n        const registered = ModuleRegistry.getRegisteredModules(gridId);\n        const allModules = [];\n        const mapNames = {};\n        // adds to list and removes duplicates\n        const addModule = (moduleBased, mod, gridId) => {\n            const addIndividualModule = (currentModule) => {\n                if (!mapNames[currentModule.moduleName]) {\n                    mapNames[currentModule.moduleName] = true;\n                    allModules.push(currentModule);\n                    ModuleRegistry.register(currentModule, moduleBased, gridId);\n                }\n            };\n            addIndividualModule(mod);\n            if (mod.dependantModules) {\n                mod.dependantModules.forEach(m => addModule(moduleBased, m, gridId));\n            }\n        };\n        if (passedViaConstructor) {\n            passedViaConstructor.forEach(m => addModule(true, m, gridId));\n        }\n        if (registered) {\n            registered.forEach(m => addModule(!ModuleRegistry.isPackageBased(), m, undefined));\n        }\n        return allModules;\n    }\n    registerModuleUserComponents(beans, registeredModules) {\n        const moduleUserComps = this.extractModuleEntity(registeredModules, (module) => module.userComponents ? module.userComponents : []);\n        moduleUserComps.forEach(compMeta => {\n            beans.userComponentRegistry.registerDefaultComponent(compMeta.componentName, compMeta.componentClass);\n        });\n    }\n    createProvidedBeans(eGridDiv, gridOptions, params) {\n        let frameworkOverrides = params ? params.frameworkOverrides : null;\n        if (missing(frameworkOverrides)) {\n            frameworkOverrides = new VanillaFrameworkOverrides();\n        }\n        const seed = {\n            gridOptions: gridOptions,\n            eGridDiv: eGridDiv,\n            globalEventListener: params ? params.globalEventListener : null,\n            frameworkOverrides: frameworkOverrides\n        };\n        if (params && params.providedBeanInstances) {\n            Object.assign(seed, params.providedBeanInstances);\n        }\n        return seed;\n    }\n    createAgStackComponentsList(registeredModules) {\n        let components = [\n            { componentName: 'AgCheckbox', componentClass: AgCheckbox },\n            { componentName: 'AgRadioButton', componentClass: AgRadioButton },\n            { componentName: 'AgToggleButton', componentClass: AgToggleButton },\n            { componentName: 'AgInputTextField', componentClass: AgInputTextField },\n            { componentName: 'AgInputTextArea', componentClass: AgInputTextArea },\n            { componentName: 'AgInputNumberField', componentClass: AgInputNumberField },\n            { componentName: 'AgInputDateField', componentClass: AgInputDateField },\n            { componentName: 'AgInputRange', componentClass: AgInputRange },\n            { componentName: 'AgSelect', componentClass: AgSelect },\n            { componentName: 'AgSlider', componentClass: AgSlider },\n            { componentName: 'AgGridBody', componentClass: GridBodyComp },\n            { componentName: 'AgHeaderRoot', componentClass: GridHeaderComp },\n            { componentName: 'AgSortIndicator', componentClass: SortIndicatorComp },\n            { componentName: 'AgPagination', componentClass: PaginationComp },\n            { componentName: 'AgOverlayWrapper', componentClass: OverlayWrapperComponent },\n            { componentName: 'AgGroupComponent', componentClass: AgGroupComponent },\n            { componentName: 'AgPanel', componentClass: AgPanel },\n            { componentName: 'AgDialog', componentClass: AgDialog },\n            { componentName: 'AgRowContainer', componentClass: RowContainerComp },\n            { componentName: 'AgFakeHorizontalScroll', componentClass: FakeHScrollComp },\n            { componentName: 'AgFakeVerticalScroll', componentClass: FakeVScrollComp }\n        ];\n        const moduleAgStackComps = this.extractModuleEntity(registeredModules, (module) => module.agStackComponents ? module.agStackComponents : []);\n        components = components.concat(moduleAgStackComps);\n        return components;\n    }\n    createBeansList(rowModelType = 'clientSide', registeredModules, gridId) {\n        // only load beans matching the required row model\n        const rowModelModules = registeredModules.filter(module => !module.rowModel || module.rowModel === rowModelType);\n        // assert that the relevant module has been loaded\n        const rowModelModuleNames = {\n            clientSide: ModuleNames.ClientSideRowModelModule,\n            infinite: ModuleNames.InfiniteRowModelModule,\n            serverSide: ModuleNames.ServerSideRowModelModule,\n            viewport: ModuleNames.ViewportRowModelModule\n        };\n        if (!rowModelModuleNames[rowModelType]) {\n            console.error('AG Grid: could not find row model for rowModelType = ' + rowModelType);\n            return;\n        }\n        if (!ModuleRegistry.assertRegistered(rowModelModuleNames[rowModelType], `rowModelType = '${rowModelType}'`, gridId)) {\n            return;\n        }\n        // beans should only contain SERVICES, it should NEVER contain COMPONENTS\n        const beans = [\n            Beans, RowPositionUtils, CellPositionUtils, HeaderPositionUtils,\n            PaginationAutoPageSizeService, GridApi, UserComponentRegistry, AgComponentUtils,\n            ComponentMetadataProvider, ResizeObserverService, UserComponentFactory,\n            RowContainerHeightService, HorizontalResizeService, LocaleService, GridOptionsValidator,\n            PinnedRowModel, DragService, DisplayedGroupCreator, EventService, GridOptionsService,\n            PopupService, SelectionService, FilterManager, ColumnModel, HeaderNavigationService,\n            PaginationProxy, RowRenderer, ExpressionService, ColumnFactory, TemplateService,\n            AlignedGridsService, NavigationService, ValueCache, ValueService, LoggerFactory,\n            ColumnUtils, AutoWidthCalculator, StandardMenuFactory, DragAndDropService, ColumnApi,\n            FocusService, MouseEventService, Environment, CellNavigationService, ValueFormatterService,\n            StylingService, ScrollVisibleService, SortController, ColumnHoverService, ColumnAnimationService,\n            SelectableService, AutoGroupColService, ChangeDetectionService, AnimationFrameService,\n            UndoRedoService, AgStackComponentsRegistry, ColumnDefFactory,\n            RowCssClassCalculator, RowNodeBlockLoader, RowNodeSorter, CtrlsService,\n            PinnedWidthService, RowNodeEventThrottle, CtrlsFactory, DataTypeService, ValueParserService\n        ];\n        const moduleBeans = this.extractModuleEntity(rowModelModules, (module) => module.beans ? module.beans : []);\n        beans.push(...moduleBeans);\n        // check for duplicates, as different modules could include the same beans that\n        // they depend on, eg ClientSideRowModel in enterprise, and ClientSideRowModel in community\n        const beansNoDuplicates = [];\n        beans.forEach(bean => {\n            if (beansNoDuplicates.indexOf(bean) < 0) {\n                beansNoDuplicates.push(bean);\n            }\n        });\n        return beansNoDuplicates;\n    }\n    extractModuleEntity(moduleEntities, extractor) {\n        return [].concat(...moduleEntities.map(extractor));\n    }\n    setColumnsAndData(beans) {\n        const columnDefs = beans.gridOptionsService.get('columnDefs');\n        beans.columnModel.setColumnDefs(columnDefs || [], \"gridInitializing\");\n        beans.rowModel.start();\n    }\n    dispatchGridReadyEvent(beans) {\n        const readyEvent = {\n            type: Events.EVENT_GRID_READY,\n        };\n        beans.eventService.dispatchEvent(readyEvent);\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nclass BaseComponentWrapper {\n    wrap(OriginalConstructor, mandatoryMethodList, optionalMethodList = [], componentType) {\n        const wrapper = this.createWrapper(OriginalConstructor, componentType);\n        mandatoryMethodList.forEach((methodName => {\n            this.createMethod(wrapper, methodName, true);\n        }));\n        optionalMethodList.forEach((methodName => {\n            this.createMethod(wrapper, methodName, false);\n        }));\n        return wrapper;\n    }\n    unwrap(comp) {\n        return comp;\n    }\n    createMethod(wrapper, methodName, mandatory) {\n        wrapper.addMethod(methodName, this.createMethodProxy(wrapper, methodName, mandatory));\n    }\n    createMethodProxy(wrapper, methodName, mandatory) {\n        return function () {\n            if (wrapper.hasMethod(methodName)) {\n                return wrapper.callMethod(methodName, arguments);\n            }\n            if (mandatory) {\n                console.warn('AG Grid: Framework component is missing the method ' + methodName + '()');\n            }\n            return null;\n        };\n    }\n}\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nconst DEFAULT_CHART_GROUPS = {\n    columnGroup: [\n        'column',\n        'stackedColumn',\n        'normalizedColumn'\n    ],\n    barGroup: [\n        'bar',\n        'stackedBar',\n        'normalizedBar'\n    ],\n    pieGroup: [\n        'pie',\n        'doughnut'\n    ],\n    lineGroup: [\n        'line'\n    ],\n    scatterGroup: [\n        'scatter',\n        'bubble'\n    ],\n    areaGroup: [\n        'area',\n        'stackedArea',\n        'normalizedArea'\n    ],\n    histogramGroup: [\n        'histogram'\n    ],\n    combinationGroup: [\n        'columnLineCombo',\n        'areaColumnCombo',\n        'customCombo'\n    ]\n};\nconst CHART_TOOL_PANEL_ALLOW_LIST = [\n    'chartSettings',\n    'chartData',\n    'chartFormat'\n];\nconst CHART_TOOLBAR_ALLOW_LIST = [\n    'chartUnlink',\n    'chartLink',\n    'chartDownload'\n];\nconst CHART_TOOL_PANEL_MENU_OPTIONS = {\n    settings: \"chartSettings\",\n    data: \"chartData\",\n    format: \"chartFormat\"\n};\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\n/**\n * Internal Use Only: Used to ensure this file is treated as a module until we can use moduleDetection flag in Ts v4.7\n */\nconst __FORCE_MODULE_DETECTION = 0;\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nvar BarColumnLabelPlacement;\n(function (BarColumnLabelPlacement) {\n    BarColumnLabelPlacement[\"InsideBase\"] = \"insideBase\";\n    BarColumnLabelPlacement[\"InsideEnd\"] = \"insideEnd\";\n    BarColumnLabelPlacement[\"Center\"] = \"center\";\n    BarColumnLabelPlacement[\"OutsideEnd\"] = \"outsideEnd\";\n})(BarColumnLabelPlacement || (BarColumnLabelPlacement = {}));\n\n/**\n * @ag-grid-community/core - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue\n * @version v30.0.3\n * @link https://www.ag-grid.com/\n * @license MIT\n */\nconst globalObj = typeof global === 'undefined' ? {} : global;\nglobalObj.HTMLElement = typeof HTMLElement === 'undefined' ? {} : HTMLElement;\nglobalObj.HTMLButtonElement = typeof HTMLButtonElement === 'undefined' ? {} : HTMLButtonElement;\nglobalObj.HTMLSelectElement = typeof HTMLSelectElement === 'undefined' ? {} : HTMLSelectElement;\nglobalObj.HTMLInputElement = typeof HTMLInputElement === 'undefined' ? {} : HTMLInputElement;\nglobalObj.Node = typeof Node === 'undefined' ? {} : Node;\nglobalObj.MouseEvent = typeof MouseEvent === 'undefined' ? {} : MouseEvent;\n\nclass ClientSideNodeManager {\n    constructor(rootNode, gridOptionsService, eventService, columnModel, selectionService, beans) {\n        this.nextId = 0;\n        // when user is provide the id's, we also keep a map of ids to row nodes for convenience\n        this.allNodesMap = {};\n        this.rootNode = rootNode;\n        this.gridOptionsService = gridOptionsService;\n        this.eventService = eventService;\n        this.columnModel = columnModel;\n        this.beans = beans;\n        this.selectionService = selectionService;\n        this.rootNode.group = true;\n        this.rootNode.level = -1;\n        this.rootNode.id = ClientSideNodeManager.ROOT_NODE_ID;\n        this.rootNode.allLeafChildren = [];\n        this.rootNode.childrenAfterGroup = [];\n        this.rootNode.childrenAfterSort = [];\n        this.rootNode.childrenAfterAggFilter = [];\n        this.rootNode.childrenAfterFilter = [];\n        // if we make this class a bean, then can annotate postConstruct\n        this.postConstruct();\n    }\n    // @PostConstruct - this is not a bean, so postConstruct called by constructor\n    postConstruct() {\n        // func below doesn't have 'this' pointer, so need to pull out these bits\n        this.suppressParentsInRowNodes = this.gridOptionsService.is('suppressParentsInRowNodes');\n        this.isRowMasterFunc = this.gridOptionsService.get('isRowMaster');\n        this.doingTreeData = this.gridOptionsService.isTreeData();\n        this.doingMasterDetail = this.gridOptionsService.isMasterDetail();\n    }\n    getCopyOfNodesMap() {\n        return _.cloneObject(this.allNodesMap);\n    }\n    getRowNode(id) {\n        return this.allNodesMap[id];\n    }\n    setRowData(rowData) {\n        if (typeof rowData === 'string') {\n            console.warn('AG Grid: rowData must be an array, however you passed in a string. If you are loading JSON, make sure you convert the JSON string to JavaScript objects first');\n            return;\n        }\n        const rootNode = this.rootNode;\n        const sibling = this.rootNode.sibling;\n        rootNode.childrenAfterFilter = null;\n        rootNode.childrenAfterGroup = null;\n        rootNode.childrenAfterAggFilter = null;\n        rootNode.childrenAfterSort = null;\n        rootNode.childrenMapped = null;\n        rootNode.updateHasChildren();\n        this.nextId = 0;\n        this.allNodesMap = {};\n        if (rowData) {\n            // we use rootNode as the parent, however if using ag-grid-enterprise, the grouping stage\n            // sets the parent node on each row (even if we are not grouping). so setting parent node\n            // here is for benefit of ag-grid-community users\n            rootNode.allLeafChildren = rowData.map(dataItem => this.createNode(dataItem, this.rootNode, ClientSideNodeManager.TOP_LEVEL));\n        }\n        else {\n            rootNode.allLeafChildren = [];\n            rootNode.childrenAfterGroup = [];\n        }\n        if (sibling) {\n            sibling.childrenAfterFilter = rootNode.childrenAfterFilter;\n            sibling.childrenAfterGroup = rootNode.childrenAfterGroup;\n            sibling.childrenAfterAggFilter = rootNode.childrenAfterAggFilter;\n            sibling.childrenAfterSort = rootNode.childrenAfterSort;\n            sibling.childrenMapped = rootNode.childrenMapped;\n            sibling.allLeafChildren = rootNode.allLeafChildren;\n        }\n    }\n    updateRowData(rowDataTran, rowNodeOrder) {\n        const rowNodeTransaction = {\n            remove: [],\n            update: [],\n            add: []\n        };\n        const nodesToUnselect = [];\n        this.executeRemove(rowDataTran, rowNodeTransaction, nodesToUnselect);\n        this.executeUpdate(rowDataTran, rowNodeTransaction, nodesToUnselect);\n        this.executeAdd(rowDataTran, rowNodeTransaction);\n        this.updateSelection(nodesToUnselect, 'rowDataChanged');\n        if (rowNodeOrder) {\n            _.sortRowNodesByOrder(this.rootNode.allLeafChildren, rowNodeOrder);\n        }\n        return rowNodeTransaction;\n    }\n    updateSelection(nodesToUnselect, source) {\n        const selectionChanged = nodesToUnselect.length > 0;\n        if (selectionChanged) {\n            this.selectionService.setNodesSelected({\n                newValue: false,\n                nodes: nodesToUnselect,\n                suppressFinishActions: true,\n                source,\n            });\n        }\n        // we do this regardless of nodes to unselect or not, as it's possible\n        // a new node was inserted, so a parent that was previously selected (as all\n        // children were selected) should not be tri-state (as new one unselected against\n        // all other selected children).\n        this.selectionService.updateGroupsFromChildrenSelections(source);\n        if (selectionChanged) {\n            const event = {\n                type: Events.EVENT_SELECTION_CHANGED,\n                source: source\n            };\n            this.eventService.dispatchEvent(event);\n        }\n    }\n    executeAdd(rowDataTran, rowNodeTransaction) {\n        var _a;\n        const { add, addIndex } = rowDataTran;\n        if (_.missingOrEmpty(add)) {\n            return;\n        }\n        // create new row nodes for each data item\n        const newNodes = add.map(item => this.createNode(item, this.rootNode, ClientSideNodeManager.TOP_LEVEL));\n        if (typeof addIndex === 'number' && addIndex >= 0) {\n            // new rows are inserted in one go by concatenating them in between the existing rows at the desired index.\n            // this is much faster than splicing them individually into 'allLeafChildren' when there are large inserts.\n            const { allLeafChildren } = this.rootNode;\n            const len = allLeafChildren.length;\n            let normalisedAddIndex = addIndex;\n            if (this.doingTreeData && addIndex > 0 && len > 0) {\n                for (let i = 0; i < len; i++) {\n                    if (((_a = allLeafChildren[i]) === null || _a === void 0 ? void 0 : _a.rowIndex) == addIndex - 1) {\n                        normalisedAddIndex = i + 1;\n                        break;\n                    }\n                }\n            }\n            const nodesBeforeIndex = allLeafChildren.slice(0, normalisedAddIndex);\n            const nodesAfterIndex = allLeafChildren.slice(normalisedAddIndex, allLeafChildren.length);\n            this.rootNode.allLeafChildren = [...nodesBeforeIndex, ...newNodes, ...nodesAfterIndex];\n        }\n        else {\n            this.rootNode.allLeafChildren = [...this.rootNode.allLeafChildren, ...newNodes];\n        }\n        if (this.rootNode.sibling) {\n            this.rootNode.sibling.allLeafChildren = this.rootNode.allLeafChildren;\n        }\n        // add new row nodes to the transaction add items\n        rowNodeTransaction.add = newNodes;\n    }\n    executeRemove(rowDataTran, rowNodeTransaction, nodesToUnselect) {\n        const { remove } = rowDataTran;\n        if (_.missingOrEmpty(remove)) {\n            return;\n        }\n        const rowIdsRemoved = {};\n        remove.forEach(item => {\n            const rowNode = this.lookupRowNode(item);\n            if (!rowNode) {\n                return;\n            }\n            // do delete - setting 'suppressFinishActions = true' to ensure EVENT_SELECTION_CHANGED is not raised for\n            // each row node updated, instead it is raised once by the calling code if any selected nodes exist.\n            if (rowNode.isSelected()) {\n                nodesToUnselect.push(rowNode);\n            }\n            // so row renderer knows to fade row out (and not reposition it)\n            rowNode.clearRowTopAndRowIndex();\n            // NOTE: were we could remove from allLeaveChildren, however _.removeFromArray() is expensive, especially\n            // if called multiple times (eg deleting lots of rows) and if allLeafChildren is a large list\n            rowIdsRemoved[rowNode.id] = true;\n            // _.removeFromArray(this.rootNode.allLeafChildren, rowNode);\n            delete this.allNodesMap[rowNode.id];\n            rowNodeTransaction.remove.push(rowNode);\n        });\n        this.rootNode.allLeafChildren = this.rootNode.allLeafChildren.filter(rowNode => !rowIdsRemoved[rowNode.id]);\n        if (this.rootNode.sibling) {\n            this.rootNode.sibling.allLeafChildren = this.rootNode.allLeafChildren;\n        }\n    }\n    executeUpdate(rowDataTran, rowNodeTransaction, nodesToUnselect) {\n        const { update } = rowDataTran;\n        if (_.missingOrEmpty(update)) {\n            return;\n        }\n        update.forEach(item => {\n            const rowNode = this.lookupRowNode(item);\n            if (!rowNode) {\n                return;\n            }\n            rowNode.updateData(item);\n            if (!rowNode.selectable && rowNode.isSelected()) {\n                nodesToUnselect.push(rowNode);\n            }\n            this.setMasterForRow(rowNode, item, ClientSideNodeManager.TOP_LEVEL, false);\n            rowNodeTransaction.update.push(rowNode);\n        });\n    }\n    lookupRowNode(data) {\n        const getRowIdFunc = this.gridOptionsService.getCallback('getRowId');\n        let rowNode;\n        if (getRowIdFunc) {\n            // find rowNode using id\n            const id = getRowIdFunc({ data, level: 0 });\n            rowNode = this.allNodesMap[id];\n            if (!rowNode) {\n                console.error(`AG Grid: could not find row id=${id}, data item was not found for this id`);\n                return null;\n            }\n        }\n        else {\n            // find rowNode using object references\n            rowNode = this.rootNode.allLeafChildren.find(node => node.data === data);\n            if (!rowNode) {\n                console.error(`AG Grid: could not find data item as object was not found`, data);\n                console.error(`Consider using getRowId to help the Grid find matching row data`);\n                return null;\n            }\n        }\n        return rowNode || null;\n    }\n    createNode(dataItem, parent, level) {\n        const node = new RowNode(this.beans);\n        node.group = false;\n        this.setMasterForRow(node, dataItem, level, true);\n        if (parent && !this.suppressParentsInRowNodes) {\n            node.parent = parent;\n        }\n        node.level = level;\n        node.setDataAndId(dataItem, this.nextId.toString());\n        if (this.allNodesMap[node.id]) {\n            console.warn(`AG Grid: duplicate node id '${node.id}' detected from getRowId callback, this could cause issues in your grid.`);\n        }\n        this.allNodesMap[node.id] = node;\n        this.nextId++;\n        return node;\n    }\n    setMasterForRow(rowNode, data, level, setExpanded) {\n        if (this.doingTreeData) {\n            rowNode.setMaster(false);\n            if (setExpanded) {\n                rowNode.expanded = false;\n            }\n        }\n        else {\n            // this is the default, for when doing grid data\n            if (this.doingMasterDetail) {\n                // if we are doing master detail, then the\n                // default is that everything can be a Master Row.\n                if (this.isRowMasterFunc) {\n                    rowNode.setMaster(this.isRowMasterFunc(data));\n                }\n                else {\n                    rowNode.setMaster(true);\n                }\n            }\n            else {\n                rowNode.setMaster(false);\n            }\n            if (setExpanded) {\n                const rowGroupColumns = this.columnModel.getRowGroupColumns();\n                const numRowGroupColumns = rowGroupColumns ? rowGroupColumns.length : 0;\n                // need to take row group into account when determining level\n                const masterRowLevel = level + numRowGroupColumns;\n                rowNode.expanded = rowNode.master ? this.isExpanded(masterRowLevel) : false;\n            }\n        }\n    }\n    isExpanded(level) {\n        const expandByDefault = this.gridOptionsService.getNum('groupDefaultExpanded');\n        if (expandByDefault === -1) {\n            return true;\n        }\n        return level < expandByDefault;\n    }\n}\nClientSideNodeManager.TOP_LEVEL = 0;\nClientSideNodeManager.ROOT_NODE_ID = 'ROOT_NODE_ID';\n\nvar __decorate$b = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar RecursionType;\n(function (RecursionType) {\n    RecursionType[RecursionType[\"Normal\"] = 0] = \"Normal\";\n    RecursionType[RecursionType[\"AfterFilter\"] = 1] = \"AfterFilter\";\n    RecursionType[RecursionType[\"AfterFilterAndSort\"] = 2] = \"AfterFilterAndSort\";\n    RecursionType[RecursionType[\"PivotNodes\"] = 3] = \"PivotNodes\";\n})(RecursionType || (RecursionType = {}));\nlet ClientSideRowModel = class ClientSideRowModel extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.onRowHeightChanged_debounced = _.debounce(this.onRowHeightChanged.bind(this), 100);\n        this.rowsToDisplay = []; // the rows mapped to rows to display\n    }\n    init() {\n        const refreshEverythingFunc = this.refreshModel.bind(this, { step: ClientSideRowModelSteps.EVERYTHING });\n        const animate = !this.gridOptionsService.is('suppressAnimationFrame');\n        const refreshEverythingAfterColsChangedFunc = this.refreshModel.bind(this, {\n            step: ClientSideRowModelSteps.EVERYTHING,\n            afterColumnsChanged: true,\n            keepRenderedRows: true,\n            animate\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, refreshEverythingAfterColsChangedFunc);\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, refreshEverythingFunc);\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_VALUE_CHANGED, this.onValueChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_CHANGED, this.refreshModel.bind(this, { step: ClientSideRowModelSteps.PIVOT }));\n        this.addManagedListener(this.eventService, Events.EVENT_FILTER_CHANGED, this.onFilterChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_SORT_CHANGED, this.onSortChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, refreshEverythingFunc);\n        this.addManagedListener(this.eventService, Events.EVENT_GRID_STYLES_CHANGED, this.onGridStylesChanges.bind(this));\n        const refreshMapListener = this.refreshModel.bind(this, {\n            step: ClientSideRowModelSteps.MAP,\n            keepRenderedRows: true,\n            animate\n        });\n        this.addManagedPropertyListener('groupRemoveSingleChildren', refreshMapListener);\n        this.addManagedPropertyListener('groupRemoveLowestSingleChildren', refreshMapListener);\n        this.rootNode = new RowNode(this.beans);\n        this.nodeManager = new ClientSideNodeManager(this.rootNode, this.gridOptionsService, this.eventService, this.columnModel, this.selectionService, this.beans);\n    }\n    start() {\n        const rowData = this.gridOptionsService.get('rowData');\n        if (rowData) {\n            this.setRowData(rowData);\n        }\n    }\n    ensureRowHeightsValid(startPixel, endPixel, startLimitIndex, endLimitIndex) {\n        let atLeastOneChange;\n        let res = false;\n        // we do this multiple times as changing the row heights can also change the first and last rows,\n        // so the first pass can make lots of rows smaller, which means the second pass we end up changing\n        // more rows.\n        do {\n            atLeastOneChange = false;\n            const rowAtStartPixel = this.getRowIndexAtPixel(startPixel);\n            const rowAtEndPixel = this.getRowIndexAtPixel(endPixel);\n            // keep check to current page if doing pagination\n            const firstRow = Math.max(rowAtStartPixel, startLimitIndex);\n            const lastRow = Math.min(rowAtEndPixel, endLimitIndex);\n            for (let rowIndex = firstRow; rowIndex <= lastRow; rowIndex++) {\n                const rowNode = this.getRow(rowIndex);\n                if (rowNode.rowHeightEstimated) {\n                    const rowHeight = this.gridOptionsService.getRowHeightForNode(rowNode);\n                    rowNode.setRowHeight(rowHeight.height);\n                    atLeastOneChange = true;\n                    res = true;\n                }\n            }\n            if (atLeastOneChange) {\n                this.setRowTopAndRowIndex();\n            }\n        } while (atLeastOneChange);\n        return res;\n    }\n    setRowTopAndRowIndex() {\n        const defaultRowHeight = this.environment.getDefaultRowHeight();\n        let nextRowTop = 0;\n        // mapping displayed rows is not needed for this method, however it's used in\n        // clearRowTopAndRowIndex(), and given we are looping through this.rowsToDisplay here,\n        // we create the map here for performance reasons, so we don't loop a second time\n        // in clearRowTopAndRowIndex()\n        const displayedRowsMapped = new Set();\n        // we don't estimate if doing fullHeight or autoHeight, as all rows get rendered all the time\n        // with these two layouts.\n        const allowEstimate = this.gridOptionsService.isDomLayout('normal');\n        for (let i = 0; i < this.rowsToDisplay.length; i++) {\n            const rowNode = this.rowsToDisplay[i];\n            if (rowNode.id != null) {\n                displayedRowsMapped.add(rowNode.id);\n            }\n            if (rowNode.rowHeight == null) {\n                const rowHeight = this.gridOptionsService.getRowHeightForNode(rowNode, allowEstimate, defaultRowHeight);\n                rowNode.setRowHeight(rowHeight.height, rowHeight.estimated);\n            }\n            rowNode.setRowTop(nextRowTop);\n            rowNode.setRowIndex(i);\n            nextRowTop += rowNode.rowHeight;\n        }\n        return displayedRowsMapped;\n    }\n    clearRowTopAndRowIndex(changedPath, displayedRowsMapped) {\n        const changedPathActive = changedPath.isActive();\n        const clearIfNotDisplayed = (rowNode) => {\n            if (rowNode && rowNode.id != null && !displayedRowsMapped.has(rowNode.id)) {\n                rowNode.clearRowTopAndRowIndex();\n            }\n        };\n        const recurse = (rowNode) => {\n            clearIfNotDisplayed(rowNode);\n            clearIfNotDisplayed(rowNode.detailNode);\n            clearIfNotDisplayed(rowNode.sibling);\n            if (rowNode.hasChildren()) {\n                if (rowNode.childrenAfterGroup) {\n                    // if a changedPath is active, it means we are here because of a transaction update or\n                    // a change detection. neither of these impacts the open/closed state of groups. so if\n                    // a group is not open this time, it was not open last time. so we know all closed groups\n                    // already have their top positions cleared. so there is no need to traverse all the way\n                    // when changedPath is active and the rowNode is not expanded.\n                    const isRootNode = rowNode.level == -1; // we need to give special consideration for root node,\n                    // as expanded=undefined for root node\n                    const skipChildren = changedPathActive && !isRootNode && !rowNode.expanded;\n                    if (!skipChildren) {\n                        rowNode.childrenAfterGroup.forEach(recurse);\n                    }\n                }\n            }\n        };\n        recurse(this.rootNode);\n    }\n    // returns false if row was moved, otherwise true\n    ensureRowsAtPixel(rowNodes, pixel, increment = 0) {\n        const indexAtPixelNow = this.getRowIndexAtPixel(pixel);\n        const rowNodeAtPixelNow = this.getRow(indexAtPixelNow);\n        const animate = !this.gridOptionsService.is('suppressAnimationFrame');\n        if (rowNodeAtPixelNow === rowNodes[0]) {\n            return false;\n        }\n        rowNodes.forEach(rowNode => {\n            _.removeFromArray(this.rootNode.allLeafChildren, rowNode);\n        });\n        rowNodes.forEach((rowNode, idx) => {\n            _.insertIntoArray(this.rootNode.allLeafChildren, rowNode, Math.max(indexAtPixelNow + increment, 0) + idx);\n        });\n        this.refreshModel({\n            step: ClientSideRowModelSteps.EVERYTHING,\n            keepRenderedRows: true,\n            keepEditingRows: true,\n            animate\n        });\n        return true;\n    }\n    highlightRowAtPixel(rowNode, pixel) {\n        const indexAtPixelNow = pixel != null ? this.getRowIndexAtPixel(pixel) : null;\n        const rowNodeAtPixelNow = indexAtPixelNow != null ? this.getRow(indexAtPixelNow) : null;\n        if (!rowNodeAtPixelNow || !rowNode || rowNodeAtPixelNow === rowNode || pixel == null) {\n            if (this.lastHighlightedRow) {\n                this.lastHighlightedRow.setHighlighted(null);\n                this.lastHighlightedRow = null;\n            }\n            return;\n        }\n        const highlight = this.getHighlightPosition(pixel, rowNodeAtPixelNow);\n        if (this.lastHighlightedRow && this.lastHighlightedRow !== rowNodeAtPixelNow) {\n            this.lastHighlightedRow.setHighlighted(null);\n            this.lastHighlightedRow = null;\n        }\n        rowNodeAtPixelNow.setHighlighted(highlight);\n        this.lastHighlightedRow = rowNodeAtPixelNow;\n    }\n    getHighlightPosition(pixel, rowNode) {\n        if (!rowNode) {\n            const index = this.getRowIndexAtPixel(pixel);\n            rowNode = this.getRow(index || 0);\n            if (!rowNode) {\n                return RowHighlightPosition.Below;\n            }\n        }\n        const { rowTop, rowHeight } = rowNode;\n        return pixel - rowTop < rowHeight / 2 ? RowHighlightPosition.Above : RowHighlightPosition.Below;\n    }\n    getLastHighlightedRowNode() {\n        return this.lastHighlightedRow;\n    }\n    isLastRowIndexKnown() {\n        return true;\n    }\n    getRowCount() {\n        if (this.rowsToDisplay) {\n            return this.rowsToDisplay.length;\n        }\n        return 0;\n    }\n    getTopLevelRowCount() {\n        const showingRootNode = this.rowsToDisplay && this.rowsToDisplay[0] === this.rootNode;\n        if (showingRootNode) {\n            return 1;\n        }\n        const filteredChildren = this.rootNode.childrenAfterAggFilter;\n        return filteredChildren ? filteredChildren.length : 0;\n    }\n    getTopLevelRowDisplayedIndex(topLevelIndex) {\n        const showingRootNode = this.rowsToDisplay && this.rowsToDisplay[0] === this.rootNode;\n        if (showingRootNode) {\n            return topLevelIndex;\n        }\n        let rowNode = this.rootNode.childrenAfterSort[topLevelIndex];\n        if (this.gridOptionsService.is('groupHideOpenParents')) {\n            // if hideOpenParents, and this row open, then this row is now displayed at this index, first child is\n            while (rowNode.expanded && rowNode.childrenAfterSort && rowNode.childrenAfterSort.length > 0) {\n                rowNode = rowNode.childrenAfterSort[0];\n            }\n        }\n        return rowNode.rowIndex;\n    }\n    getRowBounds(index) {\n        if (_.missing(this.rowsToDisplay)) {\n            return null;\n        }\n        const rowNode = this.rowsToDisplay[index];\n        if (rowNode) {\n            return {\n                rowTop: rowNode.rowTop,\n                rowHeight: rowNode.rowHeight\n            };\n        }\n        return null;\n    }\n    onRowGroupOpened() {\n        const animate = this.gridOptionsService.isAnimateRows();\n        this.refreshModel({ step: ClientSideRowModelSteps.MAP, keepRenderedRows: true, animate: animate });\n    }\n    onFilterChanged(event) {\n        if (event.afterDataChange) {\n            return;\n        }\n        const animate = this.gridOptionsService.isAnimateRows();\n        const primaryOrQuickFilterChanged = event.columns.length === 0 || event.columns.some(col => col.isPrimary());\n        const step = primaryOrQuickFilterChanged ? ClientSideRowModelSteps.FILTER : ClientSideRowModelSteps.FILTER_AGGREGATES;\n        this.refreshModel({ step: step, keepRenderedRows: true, animate: animate });\n    }\n    onSortChanged() {\n        const animate = this.gridOptionsService.isAnimateRows();\n        this.refreshModel({ step: ClientSideRowModelSteps.SORT, keepRenderedRows: true, animate: animate, keepEditingRows: true });\n    }\n    getType() {\n        return 'clientSide';\n    }\n    onValueChanged() {\n        if (this.columnModel.isPivotActive()) {\n            this.refreshModel({ step: ClientSideRowModelSteps.PIVOT });\n        }\n        else {\n            this.refreshModel({ step: ClientSideRowModelSteps.AGGREGATE });\n        }\n    }\n    createChangePath(rowNodeTransactions) {\n        // for updates, if the row is updated at all, then we re-calc all the values\n        // in that row. we could compare each value to each old value, however if we\n        // did this, we would be calling the valueService twice, once on the old value\n        // and once on the new value. so it's less valueGetter calls if we just assume\n        // each column is different. that way the changedPath is used so that only\n        // the impacted parent rows are recalculated, parents who's children have\n        // not changed are not impacted.\n        const noTransactions = _.missingOrEmpty(rowNodeTransactions);\n        const changedPath = new ChangedPath(false, this.rootNode);\n        if (noTransactions || this.gridOptionsService.isTreeData()) {\n            changedPath.setInactive();\n        }\n        return changedPath;\n    }\n    isSuppressModelUpdateAfterUpdateTransaction(params) {\n        if (!this.gridOptionsService.is('suppressModelUpdateAfterUpdateTransaction')) {\n            return false;\n        }\n        // return true if we are only doing update transactions\n        if (params.rowNodeTransactions == null) {\n            return false;\n        }\n        const transWithAddsOrDeletes = params.rowNodeTransactions.filter(tx => (tx.add != null && tx.add.length > 0) || (tx.remove != null && tx.remove.length > 0));\n        const transactionsContainUpdatesOnly = transWithAddsOrDeletes == null || transWithAddsOrDeletes.length == 0;\n        return transactionsContainUpdatesOnly;\n    }\n    buildRefreshModelParams(step) {\n        let paramsStep = ClientSideRowModelSteps.EVERYTHING;\n        const stepsMapped = {\n            everything: ClientSideRowModelSteps.EVERYTHING,\n            group: ClientSideRowModelSteps.EVERYTHING,\n            filter: ClientSideRowModelSteps.FILTER,\n            map: ClientSideRowModelSteps.MAP,\n            aggregate: ClientSideRowModelSteps.AGGREGATE,\n            sort: ClientSideRowModelSteps.SORT,\n            pivot: ClientSideRowModelSteps.PIVOT\n        };\n        if (_.exists(step)) {\n            paramsStep = stepsMapped[step];\n        }\n        if (_.missing(paramsStep)) {\n            console.error(`AG Grid: invalid step ${step}, available steps are ${Object.keys(stepsMapped).join(', ')}`);\n            return undefined;\n        }\n        const animate = !this.gridOptionsService.is('suppressAnimationFrame');\n        const modelParams = {\n            step: paramsStep,\n            keepRenderedRows: true,\n            keepEditingRows: true,\n            animate\n        };\n        return modelParams;\n    }\n    refreshModel(paramsOrStep) {\n        let params = typeof paramsOrStep === 'object' && \"step\" in paramsOrStep ? paramsOrStep : this.buildRefreshModelParams(paramsOrStep);\n        if (!params) {\n            return;\n        }\n        if (this.isSuppressModelUpdateAfterUpdateTransaction(params)) {\n            return;\n        }\n        // this goes through the pipeline of stages. what's in my head is similar\n        // to the diagram on this page:\n        // http://commons.apache.org/sandbox/commons-pipeline/pipeline_basics.html\n        // however we want to keep the results of each stage, hence we manually call\n        // each step rather than have them chain each other.\n        // fallthrough in below switch is on purpose,\n        // eg if STEP_FILTER, then all steps below this\n        // step get done\n        // let start: number;\n        // console.log('======= start =======');\n        const changedPath = this.createChangePath(params.rowNodeTransactions);\n        switch (params.step) {\n            case ClientSideRowModelSteps.EVERYTHING:\n                this.doRowGrouping(params.groupState, params.rowNodeTransactions, params.rowNodeOrder, changedPath, !!params.afterColumnsChanged);\n            case ClientSideRowModelSteps.FILTER:\n                this.doFilter(changedPath);\n            case ClientSideRowModelSteps.PIVOT:\n                this.doPivot(changedPath);\n            case ClientSideRowModelSteps.AGGREGATE: // depends on agg fields\n                this.doAggregate(changedPath);\n            case ClientSideRowModelSteps.FILTER_AGGREGATES:\n                this.doFilterAggregates(changedPath);\n            case ClientSideRowModelSteps.SORT:\n                this.doSort(params.rowNodeTransactions, changedPath);\n            case ClientSideRowModelSteps.MAP:\n                this.doRowsToDisplay();\n        }\n        // set all row tops to null, then set row tops on all visible rows. if we don't\n        // do this, then the algorithm below only sets row tops, old row tops from old rows\n        // will still lie around\n        const displayedNodesMapped = this.setRowTopAndRowIndex();\n        this.clearRowTopAndRowIndex(changedPath, displayedNodesMapped);\n        const event = {\n            type: Events.EVENT_MODEL_UPDATED,\n            animate: params.animate,\n            keepRenderedRows: params.keepRenderedRows,\n            newData: params.newData,\n            newPage: false,\n            keepUndoRedoStack: params.keepUndoRedoStack\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    isEmpty() {\n        const rowsMissing = _.missing(this.rootNode.allLeafChildren) || this.rootNode.allLeafChildren.length === 0;\n        return _.missing(this.rootNode) || rowsMissing || !this.columnModel.isReady();\n    }\n    isRowsToRender() {\n        return _.exists(this.rowsToDisplay) && this.rowsToDisplay.length > 0;\n    }\n    getNodesInRangeForSelection(firstInRange, lastInRange) {\n        // if lastSelectedNode is missing, we start at the first row\n        let started = !lastInRange;\n        let finished = false;\n        const result = [];\n        const groupsSelectChildren = this.gridOptionsService.is('groupSelectsChildren');\n        this.forEachNodeAfterFilterAndSort(rowNode => {\n            // range has been closed, skip till end\n            if (finished) {\n                return;\n            }\n            if (started) {\n                if (rowNode === lastInRange || rowNode === firstInRange) {\n                    // check if this is the last node we're going to be adding\n                    finished = true;\n                    // if the final node was a group node, and we're doing groupSelectsChildren\n                    // make the exception to select all of it's descendants too\n                    if (rowNode.group && groupsSelectChildren) {\n                        result.push(...rowNode.allLeafChildren);\n                        return;\n                    }\n                }\n            }\n            if (!started) {\n                if (rowNode !== lastInRange && rowNode !== firstInRange) {\n                    // still haven't hit a boundary node, keep searching\n                    return;\n                }\n                started = true;\n            }\n            // only select leaf nodes if groupsSelectChildren\n            const includeThisNode = !rowNode.group || !groupsSelectChildren;\n            if (includeThisNode) {\n                result.push(rowNode);\n                return;\n            }\n        });\n        return result;\n    }\n    setDatasource(datasource) {\n        console.error('AG Grid: should never call setDatasource on clientSideRowController');\n    }\n    getTopLevelNodes() {\n        return this.rootNode ? this.rootNode.childrenAfterGroup : null;\n    }\n    getRootNode() {\n        return this.rootNode;\n    }\n    getRow(index) {\n        return this.rowsToDisplay[index];\n    }\n    isRowPresent(rowNode) {\n        return this.rowsToDisplay.indexOf(rowNode) >= 0;\n    }\n    getRowIndexAtPixel(pixelToMatch) {\n        if (this.isEmpty() || this.rowsToDisplay.length === 0) {\n            return -1;\n        }\n        // do binary search of tree\n        // http://oli.me.uk/2013/06/08/searching-javascript-arrays-with-a-binary-search/\n        let bottomPointer = 0;\n        let topPointer = this.rowsToDisplay.length - 1;\n        // quick check, if the pixel is out of bounds, then return last row\n        if (pixelToMatch <= 0) {\n            // if pixel is less than or equal zero, it's always the first row\n            return 0;\n        }\n        const lastNode = _.last(this.rowsToDisplay);\n        if (lastNode.rowTop <= pixelToMatch) {\n            return this.rowsToDisplay.length - 1;\n        }\n        let oldBottomPointer = -1;\n        let oldTopPointer = -1;\n        while (true) {\n            const midPointer = Math.floor((bottomPointer + topPointer) / 2);\n            const currentRowNode = this.rowsToDisplay[midPointer];\n            if (this.isRowInPixel(currentRowNode, pixelToMatch)) {\n                return midPointer;\n            }\n            if (currentRowNode.rowTop < pixelToMatch) {\n                bottomPointer = midPointer + 1;\n            }\n            else if (currentRowNode.rowTop > pixelToMatch) {\n                topPointer = midPointer - 1;\n            }\n            // infinite loops happen when there is space between rows. this can happen\n            // when Auto Height is active, cos we re-calculate row tops asyncronously\n            // when row heights change, which can temporarly result in gaps between rows.\n            const caughtInInfiniteLoop = oldBottomPointer === bottomPointer\n                && oldTopPointer === topPointer;\n            if (caughtInInfiniteLoop) {\n                return midPointer;\n            }\n            oldBottomPointer = bottomPointer;\n            oldTopPointer = topPointer;\n        }\n    }\n    isRowInPixel(rowNode, pixelToMatch) {\n        const topPixel = rowNode.rowTop;\n        const bottomPixel = rowNode.rowTop + rowNode.rowHeight;\n        const pixelInRow = topPixel <= pixelToMatch && bottomPixel > pixelToMatch;\n        return pixelInRow;\n    }\n    forEachLeafNode(callback) {\n        if (this.rootNode.allLeafChildren) {\n            this.rootNode.allLeafChildren.forEach((rowNode, index) => callback(rowNode, index));\n        }\n    }\n    forEachNode(callback, includeFooterNodes = false) {\n        this.recursivelyWalkNodesAndCallback({\n            nodes: [...(this.rootNode.childrenAfterGroup || [])],\n            callback,\n            recursionType: RecursionType.Normal,\n            index: 0,\n            includeFooterNodes\n        });\n    }\n    forEachNodeAfterFilter(callback, includeFooterNodes = false) {\n        this.recursivelyWalkNodesAndCallback({\n            nodes: [...(this.rootNode.childrenAfterAggFilter || [])],\n            callback,\n            recursionType: RecursionType.AfterFilter,\n            index: 0,\n            includeFooterNodes\n        });\n    }\n    forEachNodeAfterFilterAndSort(callback, includeFooterNodes = false) {\n        this.recursivelyWalkNodesAndCallback({\n            nodes: [...(this.rootNode.childrenAfterSort || [])],\n            callback,\n            recursionType: RecursionType.AfterFilterAndSort,\n            index: 0,\n            includeFooterNodes\n        });\n    }\n    forEachPivotNode(callback, includeFooterNodes = false) {\n        this.recursivelyWalkNodesAndCallback({\n            nodes: [this.rootNode],\n            callback,\n            recursionType: RecursionType.PivotNodes,\n            index: 0,\n            includeFooterNodes\n        });\n    }\n    // iterates through each item in memory, and calls the callback function\n    // nodes - the rowNodes to traverse\n    // callback - the user provided callback\n    // recursion type - need this to know what child nodes to recurse, eg if looking at all nodes, or filtered notes etc\n    // index - works similar to the index in forEach in javascript's array function\n    recursivelyWalkNodesAndCallback(params) {\n        var _a;\n        const { nodes, callback, recursionType, includeFooterNodes } = params;\n        let { index } = params;\n        const firstNode = nodes[0];\n        if (includeFooterNodes && ((_a = firstNode === null || firstNode === void 0 ? void 0 : firstNode.parent) === null || _a === void 0 ? void 0 : _a.sibling)) {\n            nodes.push(firstNode.parent.sibling);\n        }\n        for (let i = 0; i < nodes.length; i++) {\n            const node = nodes[i];\n            callback(node, index++);\n            // go to the next level if it is a group\n            if (node.hasChildren() && !node.footer) {\n                // depending on the recursion type, we pick a difference set of children\n                let nodeChildren = null;\n                switch (recursionType) {\n                    case RecursionType.Normal:\n                        nodeChildren = node.childrenAfterGroup;\n                        break;\n                    case RecursionType.AfterFilter:\n                        nodeChildren = node.childrenAfterAggFilter;\n                        break;\n                    case RecursionType.AfterFilterAndSort:\n                        nodeChildren = node.childrenAfterSort;\n                        break;\n                    case RecursionType.PivotNodes:\n                        // for pivot, we don't go below leafGroup levels\n                        nodeChildren = !node.leafGroup ? node.childrenAfterSort : null;\n                        break;\n                }\n                if (nodeChildren) {\n                    index = this.recursivelyWalkNodesAndCallback({\n                        nodes: [...nodeChildren],\n                        callback,\n                        recursionType,\n                        index,\n                        includeFooterNodes\n                    });\n                }\n            }\n        }\n        return index;\n    }\n    // it's possible to recompute the aggregate without doing the other parts\n    // + api.refreshClientSideRowModel('aggregate')\n    doAggregate(changedPath) {\n        if (this.aggregationStage) {\n            this.aggregationStage.execute({ rowNode: this.rootNode, changedPath: changedPath });\n        }\n    }\n    doFilterAggregates(changedPath) {\n        if (this.filterAggregatesStage) {\n            this.filterAggregatesStage.execute({ rowNode: this.rootNode, changedPath: changedPath });\n        }\n        else {\n            // If filterAggregatesStage is undefined, then so is the grouping stage, so all children should be on the rootNode.\n            this.rootNode.childrenAfterAggFilter = this.rootNode.childrenAfterFilter;\n        }\n    }\n    // + gridApi.expandAll()\n    // + gridApi.collapseAll()\n    expandOrCollapseAll(expand) {\n        const usingTreeData = this.gridOptionsService.isTreeData();\n        const usingPivotMode = this.columnModel.isPivotActive();\n        const recursiveExpandOrCollapse = (rowNodes) => {\n            if (!rowNodes) {\n                return;\n            }\n            rowNodes.forEach(rowNode => {\n                const actionRow = () => {\n                    rowNode.expanded = expand;\n                    recursiveExpandOrCollapse(rowNode.childrenAfterGroup);\n                };\n                if (usingTreeData) {\n                    const hasChildren = _.exists(rowNode.childrenAfterGroup);\n                    if (hasChildren) {\n                        actionRow();\n                    }\n                    return;\n                }\n                if (usingPivotMode) {\n                    const notLeafGroup = !rowNode.leafGroup;\n                    if (notLeafGroup) {\n                        actionRow();\n                    }\n                    return;\n                }\n                const isRowGroup = rowNode.group;\n                if (isRowGroup) {\n                    actionRow();\n                }\n            });\n        };\n        if (this.rootNode) {\n            recursiveExpandOrCollapse(this.rootNode.childrenAfterGroup);\n        }\n        this.refreshModel({ step: ClientSideRowModelSteps.MAP });\n        const eventSource = expand ? 'expandAll' : 'collapseAll';\n        const event = {\n            type: Events.EVENT_EXPAND_COLLAPSE_ALL,\n            source: eventSource\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    doSort(rowNodeTransactions, changedPath) {\n        this.sortStage.execute({\n            rowNode: this.rootNode,\n            rowNodeTransactions: rowNodeTransactions,\n            changedPath: changedPath\n        });\n    }\n    doRowGrouping(groupState, rowNodeTransactions, rowNodeOrder, changedPath, afterColumnsChanged) {\n        if (this.groupStage) {\n            if (rowNodeTransactions) {\n                this.groupStage.execute({\n                    rowNode: this.rootNode,\n                    rowNodeTransactions: rowNodeTransactions,\n                    rowNodeOrder: rowNodeOrder,\n                    changedPath: changedPath\n                });\n            }\n            else {\n                this.groupStage.execute({\n                    rowNode: this.rootNode,\n                    changedPath: changedPath,\n                    afterColumnsChanged: afterColumnsChanged\n                });\n                // set open/closed state on groups\n                this.restoreGroupState(groupState);\n            }\n            if (this.gridOptionsService.is('groupSelectsChildren')) {\n                const selectionChanged = this.selectionService.updateGroupsFromChildrenSelections('rowGroupChanged', changedPath);\n                if (selectionChanged) {\n                    const event = {\n                        type: Events.EVENT_SELECTION_CHANGED,\n                        source: 'rowGroupChanged'\n                    };\n                    this.eventService.dispatchEvent(event);\n                }\n            }\n        }\n        else {\n            this.rootNode.childrenAfterGroup = this.rootNode.allLeafChildren;\n            if (this.rootNode.sibling) {\n                this.rootNode.sibling.childrenAfterGroup = this.rootNode.childrenAfterGroup;\n            }\n            this.rootNode.updateHasChildren();\n        }\n    }\n    restoreGroupState(groupState) {\n        if (!groupState) {\n            return;\n        }\n        _.traverseNodesWithKey(this.rootNode.childrenAfterGroup, (node, key) => {\n            // if the group was open last time, then open it this time. however\n            // if was not open last time, then don't touch the group, so the 'groupDefaultExpanded'\n            // setting will take effect.\n            if (typeof groupState[key] === 'boolean') {\n                node.expanded = groupState[key];\n            }\n        });\n    }\n    doFilter(changedPath) {\n        this.filterStage.execute({ rowNode: this.rootNode, changedPath: changedPath });\n    }\n    doPivot(changedPath) {\n        if (this.pivotStage) {\n            this.pivotStage.execute({ rowNode: this.rootNode, changedPath: changedPath });\n        }\n    }\n    getGroupState() {\n        if (!this.rootNode.childrenAfterGroup || !this.gridOptionsService.is('rememberGroupStateWhenNewData')) {\n            return null;\n        }\n        const result = {};\n        _.traverseNodesWithKey(this.rootNode.childrenAfterGroup, (node, key) => result[key] = node.expanded);\n        return result;\n    }\n    getCopyOfNodesMap() {\n        return this.nodeManager.getCopyOfNodesMap();\n    }\n    getRowNode(id) {\n        // although id is typed a string, this could be called by the user, and they could have passed a number\n        const idIsGroup = typeof id == 'string' && id.indexOf(RowNode.ID_PREFIX_ROW_GROUP) == 0;\n        if (idIsGroup) {\n            // only one users complained about getRowNode not working for groups, after years of\n            // this working for normal rows. so have done quick implementation. if users complain\n            // about performance, then GroupStage should store / manage created groups in a map,\n            // which is a chunk of work.\n            let res = undefined;\n            this.forEachNode(node => {\n                if (node.id === id) {\n                    res = node;\n                }\n            });\n            return res;\n        }\n        return this.nodeManager.getRowNode(id);\n    }\n    // rows: the rows to put into the model\n    setRowData(rowData) {\n        // no need to invalidate cache, as the cache is stored on the rowNode,\n        // so new rowNodes means the cache is wiped anyway.\n        // remember group state, so we can expand groups that should be expanded\n        const groupState = this.getGroupState();\n        this.nodeManager.setRowData(rowData);\n        // - clears selection\n        this.selectionService.reset();\n        // - updates filters\n        this.filterManager.onNewRowsLoaded('rowDataUpdated');\n        // this event kicks off:\n        // - shows 'no rows' overlay if needed\n        const rowDataUpdatedEvent = {\n            type: Events.EVENT_ROW_DATA_UPDATED\n        };\n        this.eventService.dispatchEvent(rowDataUpdatedEvent);\n        this.refreshModel({\n            step: ClientSideRowModelSteps.EVERYTHING,\n            groupState: groupState,\n            newData: true\n        });\n    }\n    batchUpdateRowData(rowDataTransaction, callback) {\n        if (this.applyAsyncTransactionsTimeout == null) {\n            this.rowDataTransactionBatch = [];\n            const waitMillis = this.gridOptionsService.getAsyncTransactionWaitMillis();\n            this.applyAsyncTransactionsTimeout = window.setTimeout(() => {\n                this.executeBatchUpdateRowData();\n            }, waitMillis);\n        }\n        this.rowDataTransactionBatch.push({ rowDataTransaction: rowDataTransaction, callback: callback });\n    }\n    flushAsyncTransactions() {\n        if (this.applyAsyncTransactionsTimeout != null) {\n            clearTimeout(this.applyAsyncTransactionsTimeout);\n            this.executeBatchUpdateRowData();\n        }\n    }\n    executeBatchUpdateRowData() {\n        this.valueCache.onDataChanged();\n        const callbackFuncsBound = [];\n        const rowNodeTrans = [];\n        // The rowGroup stage uses rowNodeOrder if order was provided. if we didn't pass 'true' to\n        // commonUpdateRowData, using addIndex would have no effect when grouping.\n        let forceRowNodeOrder = false;\n        if (this.rowDataTransactionBatch) {\n            this.rowDataTransactionBatch.forEach(tranItem => {\n                const rowNodeTran = this.nodeManager.updateRowData(tranItem.rowDataTransaction, undefined);\n                rowNodeTrans.push(rowNodeTran);\n                if (tranItem.callback) {\n                    callbackFuncsBound.push(tranItem.callback.bind(null, rowNodeTran));\n                }\n                if (typeof tranItem.rowDataTransaction.addIndex === 'number') {\n                    forceRowNodeOrder = true;\n                }\n            });\n        }\n        this.commonUpdateRowData(rowNodeTrans, undefined, forceRowNodeOrder);\n        // do callbacks in next VM turn so it's async\n        if (callbackFuncsBound.length > 0) {\n            window.setTimeout(() => {\n                callbackFuncsBound.forEach(func => func());\n            }, 0);\n        }\n        if (rowNodeTrans.length > 0) {\n            const event = {\n                type: Events.EVENT_ASYNC_TRANSACTIONS_FLUSHED,\n                results: rowNodeTrans\n            };\n            this.eventService.dispatchEvent(event);\n        }\n        this.rowDataTransactionBatch = null;\n        this.applyAsyncTransactionsTimeout = undefined;\n    }\n    updateRowData(rowDataTran, rowNodeOrder) {\n        this.valueCache.onDataChanged();\n        const rowNodeTran = this.nodeManager.updateRowData(rowDataTran, rowNodeOrder);\n        // if doing immutableData, addIndex is never present. however if doing standard transaction, and user\n        // provided addIndex, then this is used in updateRowData. However if doing Enterprise, then the rowGroup\n        // stage also uses the\n        const forceRowNodeOrder = typeof rowDataTran.addIndex === 'number';\n        this.commonUpdateRowData([rowNodeTran], rowNodeOrder, forceRowNodeOrder);\n        return rowNodeTran;\n    }\n    createRowNodeOrder() {\n        const suppressSortOrder = this.gridOptionsService.is('suppressMaintainUnsortedOrder');\n        if (suppressSortOrder) {\n            return;\n        }\n        const orderMap = {};\n        if (this.rootNode && this.rootNode.allLeafChildren) {\n            for (let index = 0; index < this.rootNode.allLeafChildren.length; index++) {\n                const node = this.rootNode.allLeafChildren[index];\n                orderMap[node.id] = index;\n            }\n        }\n        return orderMap;\n    }\n    // common to updateRowData and batchUpdateRowData\n    commonUpdateRowData(rowNodeTrans, rowNodeOrder, forceRowNodeOrder) {\n        const animate = !this.gridOptionsService.is('suppressAnimationFrame');\n        if (forceRowNodeOrder) {\n            rowNodeOrder = this.createRowNodeOrder();\n        }\n        this.refreshModel({\n            step: ClientSideRowModelSteps.EVERYTHING,\n            rowNodeTransactions: rowNodeTrans,\n            rowNodeOrder: rowNodeOrder,\n            keepRenderedRows: true,\n            keepEditingRows: true,\n            animate\n        });\n        // - updates filters\n        this.filterManager.onNewRowsLoaded('rowDataUpdated');\n        const event = {\n            type: Events.EVENT_ROW_DATA_UPDATED\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    doRowsToDisplay() {\n        this.rowsToDisplay = this.flattenStage.execute({ rowNode: this.rootNode });\n    }\n    onRowHeightChanged() {\n        this.refreshModel({ step: ClientSideRowModelSteps.MAP, keepRenderedRows: true, keepEditingRows: true, keepUndoRedoStack: true });\n    }\n    /** This method is debounced. It is used for row auto-height. If we don't debounce,\n     * then the Row Models will end up recalculating each row position\n     * for each row height change and result in the Row Renderer laying out rows.\n     * This is particularly bad if using print layout, and showing eg 1,000 rows,\n     * each row will change it's height, causing Row Model to update 1,000 times.\n     */\n    onRowHeightChangedDebounced() {\n        this.onRowHeightChanged_debounced();\n    }\n    resetRowHeights() {\n        const atLeastOne = this.resetRowHeightsForAllRowNodes();\n        this.rootNode.setRowHeight(this.rootNode.rowHeight, true);\n        // when pivotMode but pivot not active, root node is displayed on its own\n        // because it's only ever displayed alone, refreshing the model (onRowHeightChanged) is not required\n        if (atLeastOne) {\n            this.onRowHeightChanged();\n        }\n    }\n    resetRowHeightsForAllRowNodes() {\n        let atLeastOne = false;\n        this.forEachNode(rowNode => {\n            rowNode.setRowHeight(rowNode.rowHeight, true);\n            // we keep the height each row is at, however we set estimated=true rather than clear the height.\n            // this means the grid will not reset the row heights back to defaults, rather it will re-calc\n            // the height for each row as the row is displayed. otherwise the scroll will jump when heights are reset.\n            const detailNode = rowNode.detailNode;\n            if (detailNode) {\n                detailNode.setRowHeight(detailNode.rowHeight, true);\n            }\n            atLeastOne = true;\n        });\n        return atLeastOne;\n    }\n    onGridStylesChanges() {\n        if (this.columnModel.isAutoRowHeightActive()) {\n            return;\n        }\n        this.resetRowHeights();\n    }\n};\n__decorate$b([\n    Autowired('columnModel')\n], ClientSideRowModel.prototype, \"columnModel\", void 0);\n__decorate$b([\n    Autowired('selectionService')\n], ClientSideRowModel.prototype, \"selectionService\", void 0);\n__decorate$b([\n    Autowired('filterManager')\n], ClientSideRowModel.prototype, \"filterManager\", void 0);\n__decorate$b([\n    Autowired('valueCache')\n], ClientSideRowModel.prototype, \"valueCache\", void 0);\n__decorate$b([\n    Autowired('beans')\n], ClientSideRowModel.prototype, \"beans\", void 0);\n__decorate$b([\n    Autowired('filterStage')\n], ClientSideRowModel.prototype, \"filterStage\", void 0);\n__decorate$b([\n    Autowired('sortStage')\n], ClientSideRowModel.prototype, \"sortStage\", void 0);\n__decorate$b([\n    Autowired('flattenStage')\n], ClientSideRowModel.prototype, \"flattenStage\", void 0);\n__decorate$b([\n    Optional('groupStage')\n], ClientSideRowModel.prototype, \"groupStage\", void 0);\n__decorate$b([\n    Optional('aggregationStage')\n], ClientSideRowModel.prototype, \"aggregationStage\", void 0);\n__decorate$b([\n    Optional('pivotStage')\n], ClientSideRowModel.prototype, \"pivotStage\", void 0);\n__decorate$b([\n    Optional('filterAggregatesStage')\n], ClientSideRowModel.prototype, \"filterAggregatesStage\", void 0);\n__decorate$b([\n    PostConstruct\n], ClientSideRowModel.prototype, \"init\", null);\nClientSideRowModel = __decorate$b([\n    Bean('rowModel')\n], ClientSideRowModel);\n\nvar __decorate$a = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet FilterStage = class FilterStage extends BeanStub {\n    execute(params) {\n        const { changedPath } = params;\n        this.filterService.filter(changedPath);\n    }\n};\n__decorate$a([\n    Autowired('filterService')\n], FilterStage.prototype, \"filterService\", void 0);\nFilterStage = __decorate$a([\n    Bean('filterStage')\n], FilterStage);\n\nvar __decorate$9 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet SortStage = class SortStage extends BeanStub {\n    execute(params) {\n        const sortOptions = this.sortController.getSortOptions();\n        const sortActive = _.exists(sortOptions) && sortOptions.length > 0;\n        const deltaSort = sortActive\n            && _.exists(params.rowNodeTransactions)\n            // in time we can remove this check, so that delta sort is always\n            // on if transactions are present. it's off for now so that we can\n            // selectively turn it on and test it with some select users before\n            // rolling out to everyone.\n            && this.gridOptionsService.is('deltaSort');\n        const sortContainsGroupColumns = sortOptions.some(opt => !!this.columnModel.getGroupDisplayColumnForGroup(opt.column.getId()));\n        this.sortService.sort(sortOptions, sortActive, deltaSort, params.rowNodeTransactions, params.changedPath, sortContainsGroupColumns);\n    }\n};\n__decorate$9([\n    Autowired('sortService')\n], SortStage.prototype, \"sortService\", void 0);\n__decorate$9([\n    Autowired('sortController')\n], SortStage.prototype, \"sortController\", void 0);\n__decorate$9([\n    Autowired('columnModel')\n], SortStage.prototype, \"columnModel\", void 0);\nSortStage = __decorate$9([\n    Bean('sortStage')\n], SortStage);\n\nvar __decorate$8 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet FlattenStage = class FlattenStage extends BeanStub {\n    execute(params) {\n        const rootNode = params.rowNode;\n        // even if not doing grouping, we do the mapping, as the client might\n        // of passed in data that already has a grouping in it somewhere\n        const result = [];\n        // putting value into a wrapper so it's passed by reference\n        const nextRowTop = { value: 0 };\n        const skipLeafNodes = this.columnModel.isPivotMode();\n        // if we are reducing, and not grouping, then we want to show the root node, as that\n        // is where the pivot values are\n        const showRootNode = skipLeafNodes && rootNode.leafGroup;\n        const topList = showRootNode ? [rootNode] : rootNode.childrenAfterSort;\n        this.recursivelyAddToRowsToDisplay(topList, result, nextRowTop, skipLeafNodes, 0);\n        // we do not want the footer total if the gris is empty\n        const atLeastOneRowPresent = result.length > 0;\n        const includeGroupTotalFooter = !showRootNode\n            // don't show total footer when showRootNode is true (i.e. in pivot mode and no groups)\n            && atLeastOneRowPresent\n            && this.gridOptionsService.is('groupIncludeTotalFooter');\n        if (includeGroupTotalFooter) {\n            rootNode.createFooter();\n            this.addRowNodeToRowsToDisplay(rootNode.sibling, result, nextRowTop, 0);\n        }\n        return result;\n    }\n    recursivelyAddToRowsToDisplay(rowsToFlatten, result, nextRowTop, skipLeafNodes, uiLevel) {\n        if (_.missingOrEmpty(rowsToFlatten)) {\n            return;\n        }\n        const hideOpenParents = this.gridOptionsService.is('groupHideOpenParents');\n        // these two are mutually exclusive, so if first set, we don't set the second\n        const groupRemoveSingleChildren = this.gridOptionsService.is('groupRemoveSingleChildren');\n        const groupRemoveLowestSingleChildren = !groupRemoveSingleChildren && this.gridOptionsService.is('groupRemoveLowestSingleChildren');\n        for (let i = 0; i < rowsToFlatten.length; i++) {\n            const rowNode = rowsToFlatten[i];\n            // check all these cases, for working out if this row should be included in the final mapped list\n            const isParent = rowNode.hasChildren();\n            const isSkippedLeafNode = skipLeafNodes && !isParent;\n            const isRemovedSingleChildrenGroup = groupRemoveSingleChildren &&\n                isParent &&\n                rowNode.childrenAfterGroup.length === 1;\n            const isRemovedLowestSingleChildrenGroup = groupRemoveLowestSingleChildren &&\n                isParent &&\n                rowNode.leafGroup &&\n                rowNode.childrenAfterGroup.length === 1;\n            // hide open parents means when group is open, we don't show it. we also need to make sure the\n            // group is expandable in the first place (as leaf groups are not expandable if pivot mode is on).\n            // the UI will never allow expanding leaf  groups, however the user might via the API (or menu option 'expand all row groups')\n            const neverAllowToExpand = skipLeafNodes && rowNode.leafGroup;\n            const isHiddenOpenParent = hideOpenParents && rowNode.expanded && !rowNode.master && (!neverAllowToExpand);\n            const thisRowShouldBeRendered = !isSkippedLeafNode && !isHiddenOpenParent &&\n                !isRemovedSingleChildrenGroup && !isRemovedLowestSingleChildrenGroup;\n            if (thisRowShouldBeRendered) {\n                this.addRowNodeToRowsToDisplay(rowNode, result, nextRowTop, uiLevel);\n            }\n            // if we are pivoting, we never map below the leaf group\n            if (skipLeafNodes && rowNode.leafGroup) {\n                continue;\n            }\n            if (isParent) {\n                const excludedParent = isRemovedSingleChildrenGroup || isRemovedLowestSingleChildrenGroup;\n                // we traverse the group if it is expended, however we always traverse if the parent node\n                // was removed (as the group will never be opened if it is not displayed, we show the children instead)\n                if (rowNode.expanded || excludedParent) {\n                    // if the parent was excluded, then ui level is that of the parent\n                    const uiLevelForChildren = excludedParent ? uiLevel : uiLevel + 1;\n                    this.recursivelyAddToRowsToDisplay(rowNode.childrenAfterSort, result, nextRowTop, skipLeafNodes, uiLevelForChildren);\n                    // put a footer in if user is looking for it\n                    if (this.gridOptionsService.is('groupIncludeFooter')) {\n                        this.addRowNodeToRowsToDisplay(rowNode.sibling, result, nextRowTop, uiLevelForChildren);\n                    }\n                }\n            }\n            else if (rowNode.master && rowNode.expanded) {\n                const detailNode = this.createDetailNode(rowNode);\n                this.addRowNodeToRowsToDisplay(detailNode, result, nextRowTop, uiLevel);\n            }\n        }\n    }\n    // duplicated method, it's also in floatingRowModel\n    addRowNodeToRowsToDisplay(rowNode, result, nextRowTop, uiLevel) {\n        const isGroupMultiAutoColumn = this.gridOptionsService.isGroupMultiAutoColumn();\n        result.push(rowNode);\n        rowNode.setUiLevel(isGroupMultiAutoColumn ? 0 : uiLevel);\n    }\n    createDetailNode(masterNode) {\n        if (_.exists(masterNode.detailNode)) {\n            return masterNode.detailNode;\n        }\n        const detailNode = new RowNode(this.beans);\n        detailNode.detail = true;\n        detailNode.selectable = false;\n        detailNode.parent = masterNode;\n        if (_.exists(masterNode.id)) {\n            detailNode.id = 'detail_' + masterNode.id;\n        }\n        detailNode.data = masterNode.data;\n        detailNode.level = masterNode.level + 1;\n        masterNode.detailNode = detailNode;\n        return detailNode;\n    }\n};\n__decorate$8([\n    Autowired('columnModel')\n], FlattenStage.prototype, \"columnModel\", void 0);\n__decorate$8([\n    Autowired('beans')\n], FlattenStage.prototype, \"beans\", void 0);\nFlattenStage = __decorate$8([\n    Bean('flattenStage')\n], FlattenStage);\n\nvar __decorate$7 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet SortService = class SortService extends BeanStub {\n    init() {\n        this.postSortFunc = this.gridOptionsService.getCallback('postSortRows');\n    }\n    sort(sortOptions, sortActive, useDeltaSort, rowNodeTransactions, changedPath, sortContainsGroupColumns) {\n        const groupMaintainOrder = this.gridOptionsService.is('groupMaintainOrder');\n        const groupColumnsPresent = this.columnModel.getAllGridColumns().some(c => c.isRowGroupActive());\n        let allDirtyNodes = {};\n        if (useDeltaSort && rowNodeTransactions) {\n            allDirtyNodes = this.calculateDirtyNodes(rowNodeTransactions);\n        }\n        const isPivotMode = this.columnModel.isPivotMode();\n        const callback = (rowNode) => {\n            // we clear out the 'pull down open parents' first, as the values mix up the sorting\n            this.pullDownGroupDataForHideOpenParents(rowNode.childrenAfterAggFilter, true);\n            // It's pointless to sort rows which aren't being displayed. in pivot mode we don't need to sort the leaf group children.\n            const skipSortingPivotLeafs = isPivotMode && rowNode.leafGroup;\n            // Javascript sort is non deterministic when all the array items are equals, ie Comparator always returns 0,\n            // so to ensure the array keeps its order, add an additional sorting condition manually, in this case we\n            // are going to inspect the original array position. This is what sortedRowNodes is for.\n            let skipSortingGroups = groupMaintainOrder && groupColumnsPresent && !rowNode.leafGroup && !sortContainsGroupColumns;\n            if (skipSortingGroups) {\n                const childrenToBeSorted = rowNode.childrenAfterAggFilter.slice(0);\n                if (rowNode.childrenAfterSort) {\n                    const indexedOrders = {};\n                    rowNode.childrenAfterSort.forEach((node, idx) => {\n                        indexedOrders[node.id] = idx;\n                    });\n                    childrenToBeSorted.sort((row1, row2) => { var _a, _b; return ((_a = indexedOrders[row1.id]) !== null && _a !== void 0 ? _a : 0) - ((_b = indexedOrders[row2.id]) !== null && _b !== void 0 ? _b : 0); });\n                }\n                rowNode.childrenAfterSort = childrenToBeSorted;\n            }\n            else if (!sortActive || skipSortingPivotLeafs) {\n                // if there's no sort to make, skip this step\n                rowNode.childrenAfterSort = rowNode.childrenAfterAggFilter.slice(0);\n            }\n            else if (useDeltaSort) {\n                rowNode.childrenAfterSort = this.doDeltaSort(rowNode, allDirtyNodes, changedPath, sortOptions);\n            }\n            else {\n                rowNode.childrenAfterSort = this.rowNodeSorter.doFullSort(rowNode.childrenAfterAggFilter, sortOptions);\n            }\n            if (rowNode.sibling) {\n                rowNode.sibling.childrenAfterSort = rowNode.childrenAfterSort;\n            }\n            this.updateChildIndexes(rowNode);\n            if (this.postSortFunc) {\n                const params = { nodes: rowNode.childrenAfterSort };\n                this.postSortFunc(params);\n            }\n        };\n        if (changedPath) {\n            changedPath.forEachChangedNodeDepthFirst(callback);\n        }\n        this.updateGroupDataForHideOpenParents(changedPath);\n    }\n    calculateDirtyNodes(rowNodeTransactions) {\n        const dirtyNodes = {};\n        const addNodesFunc = (rowNodes) => {\n            if (rowNodes) {\n                rowNodes.forEach(rowNode => dirtyNodes[rowNode.id] = true);\n            }\n        };\n        // all leaf level nodes in the transaction were impacted\n        if (rowNodeTransactions) {\n            rowNodeTransactions.forEach(tran => {\n                addNodesFunc(tran.add);\n                addNodesFunc(tran.update);\n                addNodesFunc(tran.remove);\n            });\n        }\n        return dirtyNodes;\n    }\n    doDeltaSort(rowNode, allTouchedNodes, changedPath, sortOptions) {\n        const unsortedRows = rowNode.childrenAfterAggFilter;\n        const oldSortedRows = rowNode.childrenAfterSort;\n        if (!oldSortedRows) {\n            return this.rowNodeSorter.doFullSort(unsortedRows, sortOptions);\n        }\n        const untouchedRowsMap = {};\n        const touchedRows = [];\n        unsortedRows.forEach(row => {\n            if (allTouchedNodes[row.id] || !changedPath.canSkip(row)) {\n                touchedRows.push(row);\n            }\n            else {\n                untouchedRowsMap[row.id] = true;\n            }\n        });\n        const sortedUntouchedRows = oldSortedRows.filter(child => untouchedRowsMap[child.id]);\n        const mapNodeToSortedNode = (rowNode, pos) => ({ currentPos: pos, rowNode: rowNode });\n        const sortedChangedRows = touchedRows\n            .map(mapNodeToSortedNode)\n            .sort((a, b) => this.rowNodeSorter.compareRowNodes(sortOptions, a, b));\n        return this.mergeSortedArrays(sortOptions, sortedChangedRows, sortedUntouchedRows.map(mapNodeToSortedNode)).map(({ rowNode }) => rowNode);\n    }\n    // Merge two sorted arrays into each other\n    mergeSortedArrays(sortOptions, arr1, arr2) {\n        const res = [];\n        let i = 0;\n        let j = 0;\n        // Traverse both array, adding them in order\n        while (i < arr1.length && j < arr2.length) {\n            // Check if current element of first\n            // array is smaller than current element\n            // of second array. If yes, store first\n            // array element and increment first array\n            // index. Otherwise do same with second array\n            const compareResult = this.rowNodeSorter.compareRowNodes(sortOptions, arr1[i], arr2[j]);\n            if (compareResult < 0) {\n                res.push(arr1[i++]);\n            }\n            else {\n                res.push(arr2[j++]);\n            }\n        }\n        // add remaining from arr1\n        while (i < arr1.length) {\n            res.push(arr1[i++]);\n        }\n        // add remaining from arr2\n        while (j < arr2.length) {\n            res.push(arr2[j++]);\n        }\n        return res;\n    }\n    updateChildIndexes(rowNode) {\n        if (_.missing(rowNode.childrenAfterSort)) {\n            return;\n        }\n        const listToSort = rowNode.childrenAfterSort;\n        for (let i = 0; i < listToSort.length; i++) {\n            const child = listToSort[i];\n            const firstChild = i === 0;\n            const lastChild = i === rowNode.childrenAfterSort.length - 1;\n            child.setFirstChild(firstChild);\n            child.setLastChild(lastChild);\n            child.setChildIndex(i);\n        }\n    }\n    updateGroupDataForHideOpenParents(changedPath) {\n        if (!this.gridOptionsService.is('groupHideOpenParents')) {\n            return;\n        }\n        if (this.gridOptionsService.isTreeData()) {\n            const msg = `AG Grid: The property hideOpenParents dose not work with Tree Data. This is because Tree Data has values at the group level, it doesn't make sense to hide them (as opposed to Row Grouping, which only has Aggregated Values at the group level).`;\n            _.doOnce(() => console.warn(msg), 'sortService.hideOpenParentsWithTreeData');\n            return false;\n        }\n        // recurse breadth first over group nodes after sort to 'pull down' group data to child groups\n        const callback = (rowNode) => {\n            this.pullDownGroupDataForHideOpenParents(rowNode.childrenAfterSort, false);\n            rowNode.childrenAfterSort.forEach(child => {\n                if (child.hasChildren()) {\n                    callback(child);\n                }\n            });\n        };\n        if (changedPath) {\n            changedPath.executeFromRootNode(rowNode => callback(rowNode));\n        }\n    }\n    pullDownGroupDataForHideOpenParents(rowNodes, clearOperation) {\n        if (!this.gridOptionsService.is('groupHideOpenParents') || _.missing(rowNodes)) {\n            return;\n        }\n        rowNodes.forEach(childRowNode => {\n            const groupDisplayCols = this.columnModel.getGroupDisplayColumns();\n            groupDisplayCols.forEach(groupDisplayCol => {\n                const showRowGroup = groupDisplayCol.getColDef().showRowGroup;\n                if (typeof showRowGroup !== 'string') {\n                    console.error('AG Grid: groupHideOpenParents only works when specifying specific columns for colDef.showRowGroup');\n                    return;\n                }\n                const displayingGroupKey = showRowGroup;\n                const rowGroupColumn = this.columnModel.getPrimaryColumn(displayingGroupKey);\n                const thisRowNodeMatches = rowGroupColumn === childRowNode.rowGroupColumn;\n                if (thisRowNodeMatches) {\n                    return;\n                }\n                if (clearOperation) {\n                    // if doing a clear operation, we clear down the value for every possible group column\n                    childRowNode.setGroupValue(groupDisplayCol.getId(), undefined);\n                }\n                else {\n                    // if doing a set operation, we set only where the pull down is to occur\n                    const parentToStealFrom = childRowNode.getFirstChildOfFirstChild(rowGroupColumn);\n                    if (parentToStealFrom) {\n                        childRowNode.setGroupValue(groupDisplayCol.getId(), parentToStealFrom.key);\n                    }\n                }\n            });\n        });\n    }\n};\n__decorate$7([\n    Autowired('columnModel')\n], SortService.prototype, \"columnModel\", void 0);\n__decorate$7([\n    Autowired('rowNodeSorter')\n], SortService.prototype, \"rowNodeSorter\", void 0);\n__decorate$7([\n    PostConstruct\n], SortService.prototype, \"init\", null);\nSortService = __decorate$7([\n    Bean('sortService')\n], SortService);\n\nvar __decorate$6 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet FilterService = class FilterService extends BeanStub {\n    filter(changedPath) {\n        const filterActive = this.filterManager.isColumnFilterPresent()\n            || this.filterManager.isQuickFilterPresent()\n            || this.filterManager.isExternalFilterPresent();\n        this.filterNodes(filterActive, changedPath);\n    }\n    filterNodes(filterActive, changedPath) {\n        const filterCallback = (rowNode, includeChildNodes) => {\n            // recursively get all children that are groups to also filter\n            if (rowNode.hasChildren()) {\n                // result of filter for this node. when filtering tree data, includeChildNodes = true when parent passes\n                if (filterActive && !includeChildNodes) {\n                    rowNode.childrenAfterFilter = rowNode.childrenAfterGroup.filter(childNode => {\n                        // a group is included in the result if it has any children of it's own.\n                        // by this stage, the child groups are already filtered\n                        const passBecauseChildren = childNode.childrenAfterFilter && childNode.childrenAfterFilter.length > 0;\n                        // both leaf level nodes and tree data nodes have data. these get added if\n                        // the data passes the filter\n                        const passBecauseDataPasses = childNode.data\n                            && this.filterManager.doesRowPassFilter({ rowNode: childNode });\n                        // note - tree data nodes pass either if a) they pass themselves or b) any children of that node pass\n                        return passBecauseChildren || passBecauseDataPasses;\n                    });\n                }\n                else {\n                    // if not filtering, the result is the original list\n                    rowNode.childrenAfterFilter = rowNode.childrenAfterGroup;\n                }\n            }\n            else {\n                rowNode.childrenAfterFilter = rowNode.childrenAfterGroup;\n            }\n            if (rowNode.sibling) {\n                rowNode.sibling.childrenAfterFilter = rowNode.childrenAfterFilter;\n            }\n        };\n        if (this.doingTreeDataFiltering()) {\n            const treeDataDepthFirstFilter = (rowNode, alreadyFoundInParent) => {\n                // tree data filter traverses the hierarchy depth first and includes child nodes if parent passes\n                // filter, and parent nodes will be include if any children exist.\n                if (rowNode.childrenAfterGroup) {\n                    for (let i = 0; i < rowNode.childrenAfterGroup.length; i++) {\n                        const childNode = rowNode.childrenAfterGroup[i];\n                        // first check if current node passes filter before invoking child nodes\n                        const foundInParent = alreadyFoundInParent\n                            || this.filterManager.doesRowPassFilter({ rowNode: childNode });\n                        if (childNode.childrenAfterGroup) {\n                            treeDataDepthFirstFilter(rowNode.childrenAfterGroup[i], foundInParent);\n                        }\n                        else {\n                            filterCallback(childNode, foundInParent);\n                        }\n                    }\n                }\n                filterCallback(rowNode, alreadyFoundInParent);\n            };\n            const treeDataFilterCallback = (rowNode) => treeDataDepthFirstFilter(rowNode, false);\n            changedPath.executeFromRootNode(treeDataFilterCallback);\n        }\n        else {\n            const defaultFilterCallback = (rowNode) => filterCallback(rowNode, false);\n            changedPath.forEachChangedNodeDepthFirst(defaultFilterCallback, true);\n        }\n    }\n    doingTreeDataFiltering() {\n        return this.gridOptionsService.isTreeData() && !this.gridOptionsService.is('excludeChildrenWhenTreeDataFiltering');\n    }\n};\n__decorate$6([\n    Autowired('filterManager')\n], FilterService.prototype, \"filterManager\", void 0);\nFilterService = __decorate$6([\n    Bean(\"filterService\")\n], FilterService);\n\nvar __decorate$5 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ImmutableService = class ImmutableService extends BeanStub {\n    postConstruct() {\n        if (this.rowModel.getType() === 'clientSide') {\n            this.clientSideRowModel = this.rowModel;\n        }\n    }\n    isActive() {\n        const getRowIdProvided = this.gridOptionsService.exists('getRowId');\n        // this property is a backwards compatibility property, for those who want\n        // the old behaviour of Row ID's but NOT Immutable Data.\n        const resetRowDataOnUpdate = this.gridOptionsService.is('resetRowDataOnUpdate');\n        if (resetRowDataOnUpdate) {\n            return false;\n        }\n        return getRowIdProvided;\n    }\n    setRowData(rowData) {\n        const transactionAndMap = this.createTransactionForRowData(rowData);\n        if (!transactionAndMap) {\n            return;\n        }\n        const [transaction, orderIdMap] = transactionAndMap;\n        this.clientSideRowModel.updateRowData(transaction, orderIdMap);\n    }\n    // converts the setRowData() command to a transaction\n    createTransactionForRowData(rowData) {\n        if (_.missing(this.clientSideRowModel)) {\n            console.error('AG Grid: ImmutableService only works with ClientSideRowModel');\n            return;\n        }\n        const getRowIdFunc = this.gridOptionsService.getCallback('getRowId');\n        if (getRowIdFunc == null) {\n            console.error('AG Grid: ImmutableService requires getRowId() callback to be implemented, your row data needs IDs!');\n            return;\n        }\n        // convert the data into a transaction object by working out adds, removes and updates\n        const transaction = {\n            remove: [],\n            update: [],\n            add: []\n        };\n        const existingNodesMap = this.clientSideRowModel.getCopyOfNodesMap();\n        const suppressSortOrder = this.gridOptionsService.is('suppressMaintainUnsortedOrder');\n        const orderMap = suppressSortOrder ? undefined : {};\n        if (_.exists(rowData)) {\n            // split all the new data in the following:\n            // if new, push to 'add'\n            // if update, push to 'update'\n            // if not changed, do not include in the transaction\n            rowData.forEach((data, index) => {\n                const id = getRowIdFunc({ data, level: 0 });\n                const existingNode = existingNodesMap[id];\n                if (orderMap) {\n                    orderMap[id] = index;\n                }\n                if (existingNode) {\n                    const dataHasChanged = existingNode.data !== data;\n                    if (dataHasChanged) {\n                        transaction.update.push(data);\n                    }\n                    // otherwise, if data not changed, we just don't include it anywhere, as it's not a delta\n                    // remove from list, so we know the item is not to be removed\n                    existingNodesMap[id] = undefined;\n                }\n                else {\n                    transaction.add.push(data);\n                }\n            });\n        }\n        // at this point, all rows that are left, should be removed\n        _.iterateObject(existingNodesMap, (id, rowNode) => {\n            if (rowNode) {\n                transaction.remove.push(rowNode.data);\n            }\n        });\n        return [transaction, orderMap];\n    }\n};\n__decorate$5([\n    Autowired('rowModel')\n], ImmutableService.prototype, \"rowModel\", void 0);\n__decorate$5([\n    Autowired('rowRenderer')\n], ImmutableService.prototype, \"rowRenderer\", void 0);\n__decorate$5([\n    PostConstruct\n], ImmutableService.prototype, \"postConstruct\", null);\nImmutableService = __decorate$5([\n    Bean('immutableService')\n], ImmutableService);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$2 = '30.0.3';\n\nconst ClientSideRowModelModule = {\n    version: VERSION$2,\n    moduleName: ModuleNames.ClientSideRowModelModule,\n    rowModel: 'clientSide',\n    beans: [ClientSideRowModel, FilterStage, SortStage, FlattenStage, SortService, FilterService, ImmutableService],\n};\n\nvar __decorate$4 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass InfiniteBlock extends RowNodeBlock {\n    constructor(id, parentCache, params) {\n        super(id);\n        this.parentCache = parentCache;\n        this.params = params;\n        // we don't need to calculate these now, as the inputs don't change,\n        // however it makes the code easier to read if we work them out up front\n        this.startRow = id * params.blockSize;\n        this.endRow = this.startRow + params.blockSize;\n    }\n    postConstruct() {\n        this.createRowNodes();\n    }\n    getBlockStateJson() {\n        return {\n            id: '' + this.getId(),\n            state: {\n                blockNumber: this.getId(),\n                startRow: this.getStartRow(),\n                endRow: this.getEndRow(),\n                pageStatus: this.getState()\n            }\n        };\n    }\n    setDataAndId(rowNode, data, index) {\n        // if there's no id and the rowNode was rendered before, it means this\n        // was a placeholder rowNode and should not be recycled. Setting\n        // `alreadyRendered`  to `false` forces the rowRenderer to flush it.\n        if (!rowNode.id && rowNode.alreadyRendered) {\n            rowNode.alreadyRendered = false;\n        }\n        if (_.exists(data)) {\n            // this means if the user is not providing id's we just use the\n            // index for the row. this will allow selection to work (that is based\n            // on index) as long user is not inserting or deleting rows,\n            // or wanting to keep selection between server side sorting or filtering\n            rowNode.setDataAndId(data, index.toString());\n        }\n        else {\n            rowNode.setDataAndId(undefined, undefined);\n        }\n    }\n    loadFromDatasource() {\n        const params = this.createLoadParams();\n        if (_.missing(this.params.datasource.getRows)) {\n            console.warn(`AG Grid: datasource is missing getRows method`);\n            return;\n        }\n        // put in timeout, to force result to be async\n        window.setTimeout(() => {\n            this.params.datasource.getRows(params);\n        }, 0);\n    }\n    processServerFail() {\n        // todo - this method has better handling in SSRM\n    }\n    createLoadParams() {\n        // PROBLEM . . . . when the user sets sort via colDef.sort, then this code\n        // is executing before the sort is set up, so server is not getting the sort\n        // model. need to change with regards order - so the server side request is\n        // AFTER thus it gets the right sort model.\n        const params = {\n            startRow: this.getStartRow(),\n            endRow: this.getEndRow(),\n            successCallback: this.pageLoaded.bind(this, this.getVersion()),\n            failCallback: this.pageLoadFailed.bind(this, this.getVersion()),\n            sortModel: this.params.sortModel,\n            filterModel: this.params.filterModel,\n            context: this.gridOptionsService.context\n        };\n        return params;\n    }\n    forEachNode(callback, sequence, rowCount) {\n        this.rowNodes.forEach((rowNode, index) => {\n            const rowIndex = this.startRow + index;\n            if (rowIndex < rowCount) {\n                callback(rowNode, sequence.next());\n            }\n        });\n    }\n    getLastAccessed() {\n        return this.lastAccessed;\n    }\n    getRow(rowIndex, dontTouchLastAccessed = false) {\n        if (!dontTouchLastAccessed) {\n            this.lastAccessed = this.params.lastAccessedSequence.next();\n        }\n        const localIndex = rowIndex - this.startRow;\n        return this.rowNodes[localIndex];\n    }\n    getStartRow() {\n        return this.startRow;\n    }\n    getEndRow() {\n        return this.endRow;\n    }\n    // creates empty row nodes, data is missing as not loaded yet\n    createRowNodes() {\n        this.rowNodes = [];\n        for (let i = 0; i < this.params.blockSize; i++) {\n            const rowIndex = this.startRow + i;\n            const rowNode = new RowNode(this.beans);\n            rowNode.setRowHeight(this.params.rowHeight);\n            rowNode.uiLevel = 0;\n            rowNode.setRowIndex(rowIndex);\n            rowNode.setRowTop(this.params.rowHeight * rowIndex);\n            this.rowNodes.push(rowNode);\n        }\n    }\n    processServerResult(params) {\n        this.rowNodes.forEach((rowNode, index) => {\n            const data = params.rowData ? params.rowData[index] : undefined;\n            this.setDataAndId(rowNode, data, this.startRow + index);\n        });\n        const finalRowCount = params.rowCount != null && params.rowCount >= 0 ? params.rowCount : undefined;\n        this.parentCache.pageLoaded(this, finalRowCount);\n    }\n    destroyRowNodes() {\n        this.rowNodes.forEach(rowNode => {\n            // this is needed, so row render knows to fade out the row, otherwise it\n            // sees row top is present, and thinks the row should be shown.\n            rowNode.clearRowTopAndRowIndex();\n        });\n    }\n}\n__decorate$4([\n    Autowired('beans')\n], InfiniteBlock.prototype, \"beans\", void 0);\n__decorate$4([\n    PostConstruct\n], InfiniteBlock.prototype, \"postConstruct\", null);\n__decorate$4([\n    PreDestroy\n], InfiniteBlock.prototype, \"destroyRowNodes\", null);\n\nvar __decorate$3 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (undefined && undefined.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nclass InfiniteCache extends BeanStub {\n    constructor(params) {\n        super();\n        this.lastRowIndexKnown = false;\n        this.blocks = {};\n        this.blockCount = 0;\n        this.rowCount = params.initialRowCount;\n        this.params = params;\n    }\n    setBeans(loggerFactory) {\n        this.logger = loggerFactory.create('InfiniteCache');\n    }\n    // the rowRenderer will not pass dontCreatePage, meaning when rendering the grid,\n    // it will want new pages in the cache as it asks for rows. only when we are inserting /\n    // removing rows via the api is dontCreatePage set, where we move rows between the pages.\n    getRow(rowIndex, dontCreatePage = false) {\n        const blockId = Math.floor(rowIndex / this.params.blockSize);\n        let block = this.blocks[blockId];\n        if (!block) {\n            if (dontCreatePage) {\n                return undefined;\n            }\n            block = this.createBlock(blockId);\n        }\n        return block.getRow(rowIndex);\n    }\n    createBlock(blockNumber) {\n        const newBlock = this.createBean(new InfiniteBlock(blockNumber, this, this.params));\n        this.blocks[newBlock.getId()] = newBlock;\n        this.blockCount++;\n        this.purgeBlocksIfNeeded(newBlock);\n        this.params.rowNodeBlockLoader.addBlock(newBlock);\n        return newBlock;\n    }\n    // we have this on infinite row model only, not server side row model,\n    // because for server side, it would leave the children in inconsistent\n    // state - eg if a node had children, but after the refresh it had data\n    // for a different row, then the children would be with the wrong row node.\n    refreshCache() {\n        const nothingToRefresh = this.blockCount == 0;\n        if (nothingToRefresh) {\n            this.purgeCache();\n            return;\n        }\n        this.getBlocksInOrder().forEach(block => block.setStateWaitingToLoad());\n        this.params.rowNodeBlockLoader.checkBlockToLoad();\n    }\n    destroyAllBlocks() {\n        this.getBlocksInOrder().forEach(block => this.destroyBlock(block));\n    }\n    getRowCount() {\n        return this.rowCount;\n    }\n    isLastRowIndexKnown() {\n        return this.lastRowIndexKnown;\n    }\n    // block calls this, when page loaded\n    pageLoaded(block, lastRow) {\n        // if we are not active, then we ignore all events, otherwise we could end up getting the\n        // grid to refresh even though we are no longer the active cache\n        if (!this.isAlive()) {\n            return;\n        }\n        this.logger.log(`onPageLoaded: page = ${block.getId()}, lastRow = ${lastRow}`);\n        this.checkRowCount(block, lastRow);\n        // we fire cacheUpdated even if the row count has not changed, as some items need updating even\n        // if no new rows to render. for example the pagination panel has '?' as the total rows when loading\n        // is underway, which would need to get updated when loading finishes.\n        this.onCacheUpdated();\n    }\n    purgeBlocksIfNeeded(blockToExclude) {\n        // we exclude checking for the page just created, as this has yet to be accessed and hence\n        // the lastAccessed stamp will not be updated for the first time yet\n        const blocksForPurging = this.getBlocksInOrder().filter(b => b != blockToExclude);\n        const lastAccessedComparator = (a, b) => b.getLastAccessed() - a.getLastAccessed();\n        blocksForPurging.sort(lastAccessedComparator);\n        // we remove (maxBlocksInCache - 1) as we already excluded the 'just created' page.\n        // in other words, after the splice operation below, we have taken out the blocks\n        // we want to keep, which means we are left with blocks that we can potentially purge\n        const maxBlocksProvided = this.params.maxBlocksInCache > 0;\n        const blocksToKeep = maxBlocksProvided ? this.params.maxBlocksInCache - 1 : null;\n        const emptyBlocksToKeep = InfiniteCache.MAX_EMPTY_BLOCKS_TO_KEEP - 1;\n        blocksForPurging.forEach((block, index) => {\n            const purgeBecauseBlockEmpty = block.getState() === InfiniteBlock.STATE_WAITING_TO_LOAD && index >= emptyBlocksToKeep;\n            const purgeBecauseCacheFull = maxBlocksProvided ? index >= blocksToKeep : false;\n            if (purgeBecauseBlockEmpty || purgeBecauseCacheFull) {\n                // if the block currently has rows been displayed, then don't remove it either.\n                // this can happen if user has maxBlocks=2, and blockSize=5 (thus 10 max rows in cache)\n                // but the screen is showing 20 rows, so at least 4 blocks are needed.\n                if (this.isBlockCurrentlyDisplayed(block)) {\n                    return;\n                }\n                // don't want to loose keyboard focus, so keyboard navigation can continue. so keep focused blocks.\n                if (this.isBlockFocused(block)) {\n                    return;\n                }\n                // at this point, block is not needed, so burn baby burn\n                this.removeBlockFromCache(block);\n            }\n        });\n    }\n    isBlockFocused(block) {\n        const focusedCell = this.focusService.getFocusCellToUseAfterRefresh();\n        if (!focusedCell) {\n            return false;\n        }\n        if (focusedCell.rowPinned != null) {\n            return false;\n        }\n        const blockIndexStart = block.getStartRow();\n        const blockIndexEnd = block.getEndRow();\n        const hasFocus = focusedCell.rowIndex >= blockIndexStart && focusedCell.rowIndex < blockIndexEnd;\n        return hasFocus;\n    }\n    isBlockCurrentlyDisplayed(block) {\n        const startIndex = block.getStartRow();\n        const endIndex = block.getEndRow() - 1;\n        return this.rowRenderer.isRangeInRenderedViewport(startIndex, endIndex);\n    }\n    removeBlockFromCache(blockToRemove) {\n        if (!blockToRemove) {\n            return;\n        }\n        this.destroyBlock(blockToRemove);\n        // we do not want to remove the 'loaded' event listener, as the\n        // concurrent loads count needs to be updated when the load is complete\n        // if the purged page is in loading state\n    }\n    checkRowCount(block, lastRow) {\n        // if client provided a last row, we always use it, as it could change between server calls\n        // if user deleted data and then called refresh on the grid.\n        if (typeof lastRow === 'number' && lastRow >= 0) {\n            this.rowCount = lastRow;\n            this.lastRowIndexKnown = true;\n        }\n        else if (!this.lastRowIndexKnown) {\n            // otherwise, see if we need to add some virtual rows\n            const lastRowIndex = (block.getId() + 1) * this.params.blockSize;\n            const lastRowIndexPlusOverflow = lastRowIndex + this.params.overflowSize;\n            if (this.rowCount < lastRowIndexPlusOverflow) {\n                this.rowCount = lastRowIndexPlusOverflow;\n            }\n        }\n    }\n    setRowCount(rowCount, lastRowIndexKnown) {\n        this.rowCount = rowCount;\n        // if undefined is passed, we do not set this value, if one of {true,false}\n        // is passed, we do set the value.\n        if (_.exists(lastRowIndexKnown)) {\n            this.lastRowIndexKnown = lastRowIndexKnown;\n        }\n        // if we are still searching, then the row count must not end at the end\n        // of a particular page, otherwise the searching will not pop into the\n        // next page\n        if (!this.lastRowIndexKnown) {\n            if (this.rowCount % this.params.blockSize === 0) {\n                this.rowCount++;\n            }\n        }\n        this.onCacheUpdated();\n    }\n    forEachNodeDeep(callback) {\n        const sequence = new NumberSequence();\n        this.getBlocksInOrder().forEach(block => block.forEachNode(callback, sequence, this.rowCount));\n    }\n    getBlocksInOrder() {\n        // get all page id's as NUMBERS (not strings, as we need to sort as numbers) and in descending order\n        const blockComparator = (a, b) => a.getId() - b.getId();\n        const blocks = _.getAllValuesInObject(this.blocks).sort(blockComparator);\n        return blocks;\n    }\n    destroyBlock(block) {\n        delete this.blocks[block.getId()];\n        this.destroyBean(block);\n        this.blockCount--;\n        this.params.rowNodeBlockLoader.removeBlock(block);\n    }\n    // gets called 1) row count changed 2) cache purged 3) items inserted\n    onCacheUpdated() {\n        if (this.isAlive()) {\n            // if the virtualRowCount is shortened, then it's possible blocks exist that are no longer\n            // in the valid range. so we must remove these. this can happen if user explicitly sets\n            // the virtual row count, or the datasource returns a result and sets lastRow to something\n            // less than virtualRowCount (can happen if user scrolls down, server reduces dataset size).\n            this.destroyAllBlocksPastVirtualRowCount();\n            // this results in both row models (infinite and server side) firing ModelUpdated,\n            // however server side row model also updates the row indexes first\n            const event = {\n                type: Events.EVENT_STORE_UPDATED\n            };\n            this.eventService.dispatchEvent(event);\n        }\n    }\n    destroyAllBlocksPastVirtualRowCount() {\n        const blocksToDestroy = [];\n        this.getBlocksInOrder().forEach(block => {\n            const startRow = block.getId() * this.params.blockSize;\n            if (startRow >= this.rowCount) {\n                blocksToDestroy.push(block);\n            }\n        });\n        if (blocksToDestroy.length > 0) {\n            blocksToDestroy.forEach(block => this.destroyBlock(block));\n        }\n    }\n    purgeCache() {\n        this.getBlocksInOrder().forEach(block => this.removeBlockFromCache(block));\n        this.lastRowIndexKnown = false;\n        // if zero rows in the cache, we need to get the SSRM to start asking for rows again.\n        // otherwise if set to zero rows last time, and we don't update the row count, then after\n        // the purge there will still be zero rows, meaning the SSRM won't request any rows.\n        // to kick things off, at least one row needs to be asked for.\n        if (this.rowCount === 0) {\n            this.rowCount = this.params.initialRowCount;\n        }\n        this.onCacheUpdated();\n    }\n    getRowNodesInRange(firstInRange, lastInRange) {\n        const result = [];\n        let lastBlockId = -1;\n        let inActiveRange = false;\n        const numberSequence = new NumberSequence();\n        // if only one node passed, we start the selection at the top\n        if (_.missing(firstInRange)) {\n            inActiveRange = true;\n        }\n        let foundGapInSelection = false;\n        this.getBlocksInOrder().forEach(block => {\n            if (foundGapInSelection) {\n                return;\n            }\n            if (inActiveRange && (lastBlockId + 1 !== block.getId())) {\n                foundGapInSelection = true;\n                return;\n            }\n            lastBlockId = block.getId();\n            block.forEachNode(rowNode => {\n                const hitFirstOrLast = rowNode === firstInRange || rowNode === lastInRange;\n                if (inActiveRange || hitFirstOrLast) {\n                    result.push(rowNode);\n                }\n                if (hitFirstOrLast) {\n                    inActiveRange = !inActiveRange;\n                }\n            }, numberSequence, this.rowCount);\n        });\n        // inActiveRange will be still true if we never hit the second rowNode\n        const invalidRange = foundGapInSelection || inActiveRange;\n        return invalidRange ? [] : result;\n    }\n}\n// this property says how many empty blocks should be in a cache, eg if scrolls down fast and creates 10\n// blocks all for loading, the grid will only load the last 2 - it will assume the blocks the user quickly\n// scrolled over are not needed to be loaded.\nInfiniteCache.MAX_EMPTY_BLOCKS_TO_KEEP = 2;\n__decorate$3([\n    Autowired('rowRenderer')\n], InfiniteCache.prototype, \"rowRenderer\", void 0);\n__decorate$3([\n    Autowired(\"focusService\")\n], InfiniteCache.prototype, \"focusService\", void 0);\n__decorate$3([\n    __param(0, Qualifier('loggerFactory'))\n], InfiniteCache.prototype, \"setBeans\", null);\n__decorate$3([\n    PreDestroy\n], InfiniteCache.prototype, \"destroyAllBlocks\", null);\n\nvar __decorate$2 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet InfiniteRowModel = class InfiniteRowModel extends BeanStub {\n    getRowBounds(index) {\n        return {\n            rowHeight: this.rowHeight,\n            rowTop: this.rowHeight * index\n        };\n    }\n    // we don't implement as lazy row heights is not supported in this row model\n    ensureRowHeightsValid(startPixel, endPixel, startLimitIndex, endLimitIndex) {\n        return false;\n    }\n    init() {\n        if (!this.gridOptionsService.isRowModelType('infinite')) {\n            return;\n        }\n        this.rowHeight = this.gridOptionsService.getRowHeightAsNumber();\n        this.addEventListeners();\n        this.addDestroyFunc(() => this.destroyCache());\n        this.verifyProps();\n    }\n    verifyProps() {\n        if (this.gridOptionsService.exists('initialGroupOrderComparator')) {\n            const message = `AG Grid: initialGroupOrderComparator cannot be used with Infinite Row Model. If using Infinite Row Model, then sorting is done on the server side, nothing to do with the client.`;\n            _.doOnce(() => console.warn(message), 'IRM.InitialGroupOrderComparator');\n        }\n    }\n    start() {\n        this.setDatasource(this.gridOptionsService.get('datasource'));\n    }\n    destroyDatasource() {\n        if (this.datasource) {\n            this.getContext().destroyBean(this.datasource);\n            this.rowRenderer.datasourceChanged();\n            this.datasource = null;\n        }\n    }\n    addEventListeners() {\n        this.addManagedListener(this.eventService, Events.EVENT_FILTER_CHANGED, this.onFilterChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_SORT_CHANGED, this.onSortChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, this.onColumnEverything.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_STORE_UPDATED, this.onCacheUpdated.bind(this));\n    }\n    onFilterChanged() {\n        this.reset();\n    }\n    onSortChanged() {\n        this.reset();\n    }\n    onColumnEverything() {\n        let resetRequired;\n        // if cache params, we require reset only if sort model has changed. we don't need to check\n        // for filter model, as the filter manager will fire an event when columns change that result\n        // in the filter changing.\n        if (this.cacheParams) {\n            resetRequired = this.isSortModelDifferent();\n        }\n        else {\n            // if no cacheParams, means first time creating the cache, so always create one\n            resetRequired = true;\n        }\n        if (resetRequired) {\n            this.reset();\n        }\n    }\n    isSortModelDifferent() {\n        return !_.jsonEquals(this.cacheParams.sortModel, this.sortController.getSortModel());\n    }\n    getType() {\n        return 'infinite';\n    }\n    setDatasource(datasource) {\n        this.destroyDatasource();\n        this.datasource = datasource;\n        // only reset if we have a valid datasource to working with\n        if (datasource) {\n            this.reset();\n        }\n    }\n    isEmpty() {\n        return !this.infiniteCache;\n    }\n    isRowsToRender() {\n        return !!this.infiniteCache;\n    }\n    getNodesInRangeForSelection(firstInRange, lastInRange) {\n        return this.infiniteCache ? this.infiniteCache.getRowNodesInRange(firstInRange, lastInRange) : [];\n    }\n    reset() {\n        // important to return here, as the user could be setting filter or sort before\n        // data-source is set\n        if (!this.datasource) {\n            return;\n        }\n        // if user is providing id's, then this means we can keep the selection between datasource hits,\n        // as the rows will keep their unique id's even if, for example, server side sorting or filtering\n        // is done.\n        const getRowIdFunc = this.gridOptionsService.getCallback('getRowId');\n        const userGeneratingIds = getRowIdFunc != null;\n        if (!userGeneratingIds) {\n            this.selectionService.reset();\n        }\n        this.resetCache();\n        const event = this.createModelUpdatedEvent();\n        this.eventService.dispatchEvent(event);\n    }\n    createModelUpdatedEvent() {\n        return {\n            type: Events.EVENT_MODEL_UPDATED,\n            // not sure if these should all be false - noticed if after implementing,\n            // maybe they should be true?\n            newPage: false,\n            newData: false,\n            keepRenderedRows: true,\n            animate: false\n        };\n    }\n    resetCache() {\n        // if not first time creating a cache, need to destroy the old one\n        this.destroyCache();\n        this.cacheParams = {\n            // the user provided datasource\n            datasource: this.datasource,\n            // sort and filter model\n            filterModel: this.filterManager.getFilterModel(),\n            sortModel: this.sortController.getSortModel(),\n            rowNodeBlockLoader: this.rowNodeBlockLoader,\n            // properties - this way we take a snapshot of them, so if user changes any, they will be\n            // used next time we create a new cache, which is generally after a filter or sort change,\n            // or a new datasource is set\n            initialRowCount: this.defaultIfInvalid(this.gridOptionsService.getNum('infiniteInitialRowCount'), 1),\n            maxBlocksInCache: this.gridOptionsService.getNum('maxBlocksInCache'),\n            rowHeight: this.gridOptionsService.getRowHeightAsNumber(),\n            // if user doesn't provide overflow, we use default overflow of 1, so user can scroll past\n            // the current page and request first row of next page\n            overflowSize: this.defaultIfInvalid(this.gridOptionsService.getNum('cacheOverflowSize'), 1),\n            // page size needs to be 1 or greater. having it at 1 would be silly, as you would be hitting the\n            // server for one page at a time. so the default if not specified is 100.\n            blockSize: this.defaultIfInvalid(this.gridOptionsService.getNum('cacheBlockSize'), 100),\n            // the cache could create this, however it is also used by the pages, so handy to create it\n            // here as the settings are also passed to the pages\n            lastAccessedSequence: new NumberSequence()\n        };\n        this.infiniteCache = this.createBean(new InfiniteCache(this.cacheParams));\n    }\n    defaultIfInvalid(value, defaultValue) {\n        return value > 0 ? value : defaultValue;\n    }\n    destroyCache() {\n        if (this.infiniteCache) {\n            this.infiniteCache = this.destroyBean(this.infiniteCache);\n        }\n    }\n    onCacheUpdated() {\n        const event = this.createModelUpdatedEvent();\n        this.eventService.dispatchEvent(event);\n    }\n    getRow(rowIndex) {\n        if (!this.infiniteCache) {\n            return undefined;\n        }\n        if (rowIndex >= this.infiniteCache.getRowCount()) {\n            return undefined;\n        }\n        return this.infiniteCache.getRow(rowIndex);\n    }\n    getRowNode(id) {\n        let result;\n        this.forEachNode(rowNode => {\n            if (rowNode.id === id) {\n                result = rowNode;\n            }\n        });\n        return result;\n    }\n    forEachNode(callback) {\n        if (this.infiniteCache) {\n            this.infiniteCache.forEachNodeDeep(callback);\n        }\n    }\n    getTopLevelRowCount() {\n        return this.getRowCount();\n    }\n    getTopLevelRowDisplayedIndex(topLevelIndex) {\n        return topLevelIndex;\n    }\n    getRowIndexAtPixel(pixel) {\n        if (this.rowHeight !== 0) { // avoid divide by zero error\n            const rowIndexForPixel = Math.floor(pixel / this.rowHeight);\n            const lastRowIndex = this.getRowCount() - 1;\n            if (rowIndexForPixel > lastRowIndex) {\n                return lastRowIndex;\n            }\n            return rowIndexForPixel;\n        }\n        return 0;\n    }\n    getRowCount() {\n        return this.infiniteCache ? this.infiniteCache.getRowCount() : 0;\n    }\n    isRowPresent(rowNode) {\n        const foundRowNode = this.getRowNode(rowNode.id);\n        return !!foundRowNode;\n    }\n    refreshCache() {\n        if (this.infiniteCache) {\n            this.infiniteCache.refreshCache();\n        }\n    }\n    purgeCache() {\n        if (this.infiniteCache) {\n            this.infiniteCache.purgeCache();\n        }\n    }\n    // for iRowModel\n    isLastRowIndexKnown() {\n        if (this.infiniteCache) {\n            return this.infiniteCache.isLastRowIndexKnown();\n        }\n        return false;\n    }\n    setRowCount(rowCount, lastRowIndexKnown) {\n        if (this.infiniteCache) {\n            this.infiniteCache.setRowCount(rowCount, lastRowIndexKnown);\n        }\n    }\n};\n__decorate$2([\n    Autowired('filterManager')\n], InfiniteRowModel.prototype, \"filterManager\", void 0);\n__decorate$2([\n    Autowired('sortController')\n], InfiniteRowModel.prototype, \"sortController\", void 0);\n__decorate$2([\n    Autowired('selectionService')\n], InfiniteRowModel.prototype, \"selectionService\", void 0);\n__decorate$2([\n    Autowired('rowRenderer')\n], InfiniteRowModel.prototype, \"rowRenderer\", void 0);\n__decorate$2([\n    Autowired('rowNodeBlockLoader')\n], InfiniteRowModel.prototype, \"rowNodeBlockLoader\", void 0);\n__decorate$2([\n    PostConstruct\n], InfiniteRowModel.prototype, \"init\", null);\n__decorate$2([\n    PreDestroy\n], InfiniteRowModel.prototype, \"destroyDatasource\", null);\nInfiniteRowModel = __decorate$2([\n    Bean('rowModel')\n], InfiniteRowModel);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$1 = '30.0.3';\n\nconst InfiniteRowModelModule = {\n    version: VERSION$1,\n    moduleName: ModuleNames.InfiniteRowModelModule,\n    rowModel: 'infinite',\n    beans: [InfiniteRowModel],\n};\n\nclass BaseCreator {\n    setBeans(beans) {\n        this.beans = beans;\n    }\n    getFileName(fileName) {\n        const extension = this.getDefaultFileExtension();\n        if (fileName == null || !fileName.length) {\n            fileName = this.getDefaultFileName();\n        }\n        return fileName.indexOf('.') === -1 ? `${fileName}.${extension}` : fileName;\n    }\n    getData(params) {\n        const serializingSession = this.createSerializingSession(params);\n        const data = this.beans.gridSerializer.serialize(serializingSession, params);\n        return data;\n    }\n}\n\nclass BaseGridSerializingSession {\n    constructor(config) {\n        this.groupColumns = [];\n        const { columnModel, valueService, gridOptionsService, valueFormatterService, valueParserService, processCellCallback, processHeaderCallback, processGroupHeaderCallback, processRowGroupCallback, } = config;\n        this.columnModel = columnModel;\n        this.valueService = valueService;\n        this.gridOptionsService = gridOptionsService;\n        this.valueFormatterService = valueFormatterService;\n        this.valueParserService = valueParserService;\n        this.processCellCallback = processCellCallback;\n        this.processHeaderCallback = processHeaderCallback;\n        this.processGroupHeaderCallback = processGroupHeaderCallback;\n        this.processRowGroupCallback = processRowGroupCallback;\n    }\n    prepare(columnsToExport) {\n        this.groupColumns = columnsToExport.filter(col => !!col.getColDef().showRowGroup);\n    }\n    extractHeaderValue(column) {\n        const value = this.getHeaderName(this.processHeaderCallback, column);\n        return value != null ? value : '';\n    }\n    extractRowCellValue(column, index, accumulatedRowIndex, type, node) {\n        // we render the group summary text e.g. \"-> Parent -> Child\"...\n        const hideOpenParents = this.gridOptionsService.is('groupHideOpenParents');\n        const value = ((!hideOpenParents || node.footer) && this.shouldRenderGroupSummaryCell(node, column, index))\n            ? this.createValueForGroupNode(node)\n            : this.valueService.getValue(column, node);\n        const processedValue = this.processCell({\n            accumulatedRowIndex,\n            rowNode: node,\n            column,\n            value,\n            processCellCallback: this.processCellCallback,\n            type\n        });\n        return processedValue;\n    }\n    shouldRenderGroupSummaryCell(node, column, currentColumnIndex) {\n        var _a;\n        const isGroupNode = node && node.group;\n        // only on group rows\n        if (!isGroupNode) {\n            return false;\n        }\n        const currentColumnGroupIndex = this.groupColumns.indexOf(column);\n        if (currentColumnGroupIndex !== -1) {\n            if ((_a = node.groupData) === null || _a === void 0 ? void 0 : _a[column.getId()]) {\n                return true;\n            }\n            // if this is a top level footer, always render`Total` in the left-most cell\n            if (node.footer && node.level === -1) {\n                const colDef = column.getColDef();\n                const isFullWidth = colDef == null || colDef.showRowGroup === true;\n                return isFullWidth || colDef.showRowGroup === this.columnModel.getRowGroupColumns()[0].getId();\n            }\n        }\n        const isGroupUseEntireRow = this.gridOptionsService.isGroupUseEntireRow(this.columnModel.isPivotMode());\n        return currentColumnIndex === 0 && isGroupUseEntireRow;\n    }\n    getHeaderName(callback, column) {\n        if (callback) {\n            return callback({\n                column: column,\n                api: this.gridOptionsService.api,\n                columnApi: this.gridOptionsService.columnApi,\n                context: this.gridOptionsService.context\n            });\n        }\n        return this.columnModel.getDisplayNameForColumn(column, 'csv', true);\n    }\n    createValueForGroupNode(node) {\n        if (this.processRowGroupCallback) {\n            return this.processRowGroupCallback({\n                node: node,\n                api: this.gridOptionsService.api,\n                columnApi: this.gridOptionsService.columnApi,\n                context: this.gridOptionsService.context,\n            });\n        }\n        const isFooter = node.footer;\n        const keys = [node.key];\n        if (!this.gridOptionsService.isGroupMultiAutoColumn()) {\n            while (node.parent) {\n                node = node.parent;\n                keys.push(node.key);\n            }\n        }\n        const groupValue = keys.reverse().join(' -> ');\n        return isFooter ? `Total ${groupValue}` : groupValue;\n    }\n    processCell(params) {\n        var _a;\n        const { accumulatedRowIndex, rowNode, column, value, processCellCallback, type } = params;\n        if (processCellCallback) {\n            return {\n                value: (_a = processCellCallback({\n                    accumulatedRowIndex,\n                    column: column,\n                    node: rowNode,\n                    value: value,\n                    api: this.gridOptionsService.api,\n                    columnApi: this.gridOptionsService.columnApi,\n                    context: this.gridOptionsService.context,\n                    type: type,\n                    parseValue: (valueToParse) => this.valueParserService.parseValue(column, rowNode, valueToParse, this.valueService.getValue(column, rowNode)),\n                    formatValue: (valueToFormat) => { var _a; return (_a = this.valueFormatterService.formatValue(column, rowNode, valueToFormat)) !== null && _a !== void 0 ? _a : valueToFormat; }\n                })) !== null && _a !== void 0 ? _a : ''\n            };\n        }\n        if (column.getColDef().useValueFormatterForExport) {\n            return {\n                value: value !== null && value !== void 0 ? value : '',\n                valueFormatted: this.valueFormatterService.formatValue(column, rowNode, value),\n            };\n        }\n        return { value: value !== null && value !== void 0 ? value : '' };\n    }\n}\n\nclass Downloader {\n    static download(fileName, content) {\n        const win = document.defaultView || window;\n        if (!win) {\n            console.warn('AG Grid: There is no `window` associated with the current `document`');\n            return;\n        }\n        const element = document.createElement('a');\n        // @ts-ignore\n        const url = win.URL.createObjectURL(content);\n        element.setAttribute('href', url);\n        element.setAttribute('download', fileName);\n        element.style.display = 'none';\n        document.body.appendChild(element);\n        element.dispatchEvent(new MouseEvent('click', {\n            bubbles: false,\n            cancelable: true,\n            view: win\n        }));\n        document.body.removeChild(element);\n        win.setTimeout(() => {\n            // @ts-ignore\n            win.URL.revokeObjectURL(url);\n        }, 0);\n    }\n}\n\nconst LINE_SEPARATOR$1 = '\\r\\n';\nclass CsvSerializingSession extends BaseGridSerializingSession {\n    constructor(config) {\n        super(config);\n        this.isFirstLine = true;\n        this.result = '';\n        const { suppressQuotes, columnSeparator } = config;\n        this.suppressQuotes = suppressQuotes;\n        this.columnSeparator = columnSeparator;\n    }\n    addCustomContent(content) {\n        if (!content) {\n            return;\n        }\n        if (typeof content === 'string') {\n            if (!/^\\s*\\n/.test(content)) {\n                this.beginNewLine();\n            }\n            // replace whatever newlines are supplied with the style we're using\n            content = content.replace(/\\r?\\n/g, LINE_SEPARATOR$1);\n            this.result += content;\n        }\n        else {\n            content.forEach(row => {\n                this.beginNewLine();\n                row.forEach((cell, index) => {\n                    if (index !== 0) {\n                        this.result += this.columnSeparator;\n                    }\n                    this.result += this.putInQuotes(cell.data.value || '');\n                    if (cell.mergeAcross) {\n                        this.appendEmptyCells(cell.mergeAcross);\n                    }\n                });\n            });\n        }\n    }\n    onNewHeaderGroupingRow() {\n        this.beginNewLine();\n        return {\n            onColumn: this.onNewHeaderGroupingRowColumn.bind(this)\n        };\n    }\n    onNewHeaderGroupingRowColumn(columnGroup, header, index, span) {\n        if (index != 0) {\n            this.result += this.columnSeparator;\n        }\n        this.result += this.putInQuotes(header);\n        this.appendEmptyCells(span);\n    }\n    appendEmptyCells(count) {\n        for (let i = 1; i <= count; i++) {\n            this.result += this.columnSeparator + this.putInQuotes(\"\");\n        }\n    }\n    onNewHeaderRow() {\n        this.beginNewLine();\n        return {\n            onColumn: this.onNewHeaderRowColumn.bind(this)\n        };\n    }\n    onNewHeaderRowColumn(column, index) {\n        if (index != 0) {\n            this.result += this.columnSeparator;\n        }\n        this.result += this.putInQuotes(this.extractHeaderValue(column));\n    }\n    onNewBodyRow() {\n        this.beginNewLine();\n        return {\n            onColumn: this.onNewBodyRowColumn.bind(this)\n        };\n    }\n    onNewBodyRowColumn(column, index, node) {\n        var _a;\n        if (index != 0) {\n            this.result += this.columnSeparator;\n        }\n        const rowCellValue = this.extractRowCellValue(column, index, index, 'csv', node);\n        this.result += this.putInQuotes((_a = rowCellValue.valueFormatted) !== null && _a !== void 0 ? _a : rowCellValue.value);\n    }\n    putInQuotes(value) {\n        if (this.suppressQuotes) {\n            return value;\n        }\n        if (value === null || value === undefined) {\n            return '\"\"';\n        }\n        let stringValue;\n        if (typeof value === 'string') {\n            stringValue = value;\n        }\n        else if (typeof value.toString === 'function') {\n            stringValue = value.toString();\n        }\n        else {\n            console.warn('AG Grid: unknown value type during csv conversion');\n            stringValue = '';\n        }\n        // replace each \" with \"\" (ie two sets of double quotes is how to do double quotes in csv)\n        const valueEscaped = stringValue.replace(/\"/g, \"\\\"\\\"\");\n        return '\"' + valueEscaped + '\"';\n    }\n    parse() {\n        return this.result;\n    }\n    beginNewLine() {\n        if (!this.isFirstLine) {\n            this.result += LINE_SEPARATOR$1;\n        }\n        this.isFirstLine = false;\n    }\n}\n\nvar __decorate$1 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet CsvCreator = class CsvCreator extends BaseCreator {\n    postConstruct() {\n        this.setBeans({\n            gridSerializer: this.gridSerializer,\n            gridOptionsService: this.gridOptionsService\n        });\n    }\n    getMergedParams(params) {\n        const baseParams = this.gridOptionsService.get('defaultCsvExportParams');\n        return Object.assign({}, baseParams, params);\n    }\n    export(userParams) {\n        if (this.isExportSuppressed()) {\n            console.warn(`AG Grid: Export cancelled. Export is not allowed as per your configuration.`);\n            return '';\n        }\n        const mergedParams = this.getMergedParams(userParams);\n        const data = this.getData(mergedParams);\n        const packagedFile = new Blob([\"\\ufeff\", data], { type: 'text/plain' });\n        Downloader.download(this.getFileName(mergedParams.fileName), packagedFile);\n        return data;\n    }\n    exportDataAsCsv(params) {\n        return this.export(params);\n    }\n    getDataAsCsv(params, skipDefaultParams = false) {\n        const mergedParams = skipDefaultParams\n            ? Object.assign({}, params)\n            : this.getMergedParams(params);\n        return this.getData(mergedParams);\n    }\n    getDefaultFileName() {\n        return 'export.csv';\n    }\n    getDefaultFileExtension() {\n        return 'csv';\n    }\n    createSerializingSession(params) {\n        const { columnModel, valueService, gridOptionsService, valueFormatterService, valueParserService } = this;\n        const { processCellCallback, processHeaderCallback, processGroupHeaderCallback, processRowGroupCallback, suppressQuotes, columnSeparator } = params;\n        return new CsvSerializingSession({\n            columnModel: columnModel,\n            valueService,\n            gridOptionsService,\n            valueFormatterService,\n            valueParserService,\n            processCellCallback: processCellCallback || undefined,\n            processHeaderCallback: processHeaderCallback || undefined,\n            processGroupHeaderCallback: processGroupHeaderCallback || undefined,\n            processRowGroupCallback: processRowGroupCallback || undefined,\n            suppressQuotes: suppressQuotes || false,\n            columnSeparator: columnSeparator || ','\n        });\n    }\n    isExportSuppressed() {\n        return this.gridOptionsService.is('suppressCsvExport');\n    }\n};\n__decorate$1([\n    Autowired('columnModel')\n], CsvCreator.prototype, \"columnModel\", void 0);\n__decorate$1([\n    Autowired('valueService')\n], CsvCreator.prototype, \"valueService\", void 0);\n__decorate$1([\n    Autowired('gridSerializer')\n], CsvCreator.prototype, \"gridSerializer\", void 0);\n__decorate$1([\n    Autowired('gridOptionsService')\n], CsvCreator.prototype, \"gridOptionsService\", void 0);\n__decorate$1([\n    Autowired('valueFormatterService')\n], CsvCreator.prototype, \"valueFormatterService\", void 0);\n__decorate$1([\n    Autowired('valueParserService')\n], CsvCreator.prototype, \"valueParserService\", void 0);\n__decorate$1([\n    PostConstruct\n], CsvCreator.prototype, \"postConstruct\", null);\nCsvCreator = __decorate$1([\n    Bean('csvCreator')\n], CsvCreator);\n\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar RowType;\n(function (RowType) {\n    RowType[RowType[\"HEADER_GROUPING\"] = 0] = \"HEADER_GROUPING\";\n    RowType[RowType[\"HEADER\"] = 1] = \"HEADER\";\n    RowType[RowType[\"BODY\"] = 2] = \"BODY\";\n})(RowType || (RowType = {}));\nlet GridSerializer = class GridSerializer extends BeanStub {\n    serialize(gridSerializingSession, params = {}) {\n        const columnsToExport = this.getColumnsToExport(params.allColumns, params.columnKeys);\n        const serializeChain = _.compose(\n        // first pass, put in the header names of the cols\n        this.prepareSession(columnsToExport), this.prependContent(params), this.exportColumnGroups(params, columnsToExport), this.exportHeaders(params, columnsToExport), this.processPinnedTopRows(params, columnsToExport), this.processRows(params, columnsToExport), this.processPinnedBottomRows(params, columnsToExport), this.appendContent(params));\n        return serializeChain(gridSerializingSession).parse();\n    }\n    processRow(gridSerializingSession, params, columnsToExport, node) {\n        const rowSkipper = params.shouldRowBeSkipped || (() => false);\n        const context = this.gridOptionsService.context;\n        const api = this.gridOptionsService.api;\n        const columnApi = this.gridOptionsService.columnApi;\n        const skipSingleChildrenGroup = this.gridOptionsService.is('groupRemoveSingleChildren');\n        const skipLowestSingleChildrenGroup = this.gridOptionsService.is('groupRemoveLowestSingleChildren');\n        // if onlySelected, we ignore groupHideOpenParents as the user has explicitly selected the rows they wish to export.\n        // similarly, if specific rowNodes are provided we do the same. (the clipboard service uses rowNodes to define which rows to export)\n        const isClipboardExport = params.rowPositions != null;\n        const isExplicitExportSelection = isClipboardExport || !!params.onlySelected;\n        const hideOpenParents = this.gridOptionsService.is('groupHideOpenParents') && !isExplicitExportSelection;\n        const isLeafNode = this.columnModel.isPivotMode() ? node.leafGroup : !node.group;\n        const isFooter = !!node.footer;\n        const skipRowGroups = params.skipGroups || params.skipRowGroups;\n        const shouldSkipLowestGroup = skipLowestSingleChildrenGroup && node.leafGroup;\n        const shouldSkipCurrentGroup = node.allChildrenCount === 1 && (skipSingleChildrenGroup || shouldSkipLowestGroup);\n        if (skipRowGroups && params.skipGroups) {\n            _.doOnce(() => console.warn('AG Grid: Since v25.2 `skipGroups` has been renamed to `skipRowGroups`.'), 'gridSerializer-skipGroups');\n        }\n        if ((!isLeafNode && !isFooter && (params.skipRowGroups || shouldSkipCurrentGroup || hideOpenParents)) ||\n            (params.onlySelected && !node.isSelected()) ||\n            (params.skipPinnedTop && node.rowPinned === 'top') ||\n            (params.skipPinnedBottom && node.rowPinned === 'bottom')) {\n            return;\n        }\n        // if we are in pivotMode, then the grid will show the root node only\n        // if it's not a leaf group\n        const nodeIsRootNode = node.level === -1;\n        if (nodeIsRootNode && !isLeafNode && !isFooter) {\n            return;\n        }\n        const shouldRowBeSkipped = rowSkipper({ node, api, columnApi, context });\n        if (shouldRowBeSkipped) {\n            return;\n        }\n        const rowAccumulator = gridSerializingSession.onNewBodyRow(node);\n        columnsToExport.forEach((column, index) => {\n            rowAccumulator.onColumn(column, index, node);\n        });\n        if (params.getCustomContentBelowRow) {\n            const content = params.getCustomContentBelowRow({ node, api, columnApi, context });\n            if (content) {\n                gridSerializingSession.addCustomContent(content);\n            }\n        }\n    }\n    appendContent(params) {\n        return (gridSerializingSession) => {\n            const appendContent = params.customFooter || params.appendContent;\n            if (appendContent) {\n                if (params.customFooter) {\n                    _.doOnce(() => console.warn('AG Grid: Since version 25.2.0 the `customFooter` param has been deprecated. Use `appendContent` instead.'), 'gridSerializer-customFooter');\n                }\n                gridSerializingSession.addCustomContent(appendContent);\n            }\n            return gridSerializingSession;\n        };\n    }\n    prependContent(params) {\n        return (gridSerializingSession) => {\n            const prependContent = params.customHeader || params.prependContent;\n            if (prependContent) {\n                if (params.customHeader) {\n                    _.doOnce(() => console.warn('AG Grid: Since version 25.2.0 the `customHeader` param has been deprecated. Use `prependContent` instead.'), 'gridSerializer-customHeader');\n                }\n                gridSerializingSession.addCustomContent(prependContent);\n            }\n            return gridSerializingSession;\n        };\n    }\n    prepareSession(columnsToExport) {\n        return (gridSerializingSession) => {\n            gridSerializingSession.prepare(columnsToExport);\n            return gridSerializingSession;\n        };\n    }\n    exportColumnGroups(params, columnsToExport) {\n        return (gridSerializingSession) => {\n            if (!params.skipColumnGroupHeaders) {\n                const groupInstanceIdCreator = new GroupInstanceIdCreator();\n                const displayedGroups = this.displayedGroupCreator.createDisplayedGroups(columnsToExport, this.columnModel.getGridBalancedTree(), groupInstanceIdCreator, null);\n                this.recursivelyAddHeaderGroups(displayedGroups, gridSerializingSession, params.processGroupHeaderCallback);\n            }\n            else if (params.columnGroups) {\n                _.doOnce(() => console.warn('AG Grid: Since v25.2 the `columnGroups` param has deprecated, and groups are exported by default.'), 'gridSerializer-columnGroups');\n            }\n            return gridSerializingSession;\n        };\n    }\n    exportHeaders(params, columnsToExport) {\n        return (gridSerializingSession) => {\n            if (!params.skipHeader && !params.skipColumnHeaders) {\n                const gridRowIterator = gridSerializingSession.onNewHeaderRow();\n                columnsToExport.forEach((column, index) => {\n                    gridRowIterator.onColumn(column, index, undefined);\n                });\n            }\n            else if (params.skipHeader) {\n                _.doOnce(() => console.warn('AG Grid: Since v25.2 the `skipHeader` param has been renamed to `skipColumnHeaders`.'), 'gridSerializer-skipHeader');\n            }\n            return gridSerializingSession;\n        };\n    }\n    processPinnedTopRows(params, columnsToExport) {\n        return (gridSerializingSession) => {\n            const processRow = this.processRow.bind(this, gridSerializingSession, params, columnsToExport);\n            if (params.rowPositions) {\n                params.rowPositions\n                    // only pinnedTop rows, other models are processed by `processRows` and `processPinnedBottomsRows`\n                    .filter(position => position.rowPinned === 'top')\n                    .sort((a, b) => a.rowIndex - b.rowIndex)\n                    .map(position => this.pinnedRowModel.getPinnedTopRow(position.rowIndex))\n                    .forEach(processRow);\n            }\n            else {\n                this.pinnedRowModel.forEachPinnedTopRow(processRow);\n            }\n            return gridSerializingSession;\n        };\n    }\n    processRows(params, columnsToExport) {\n        return (gridSerializingSession) => {\n            // when in pivot mode, we always render cols on screen, never 'all columns'\n            const rowModel = this.rowModel;\n            const rowModelType = rowModel.getType();\n            const usingCsrm = rowModelType === 'clientSide';\n            const usingSsrm = rowModelType === 'serverSide';\n            const onlySelectedNonStandardModel = !usingCsrm && params.onlySelected;\n            const processRow = this.processRow.bind(this, gridSerializingSession, params, columnsToExport);\n            const { exportedRows = 'filteredAndSorted', } = params;\n            if (params.rowPositions) {\n                params.rowPositions\n                    // pinnedRows are processed by `processPinnedTopRows` and `processPinnedBottomsRows`\n                    .filter(position => position.rowPinned == null)\n                    .sort((a, b) => a.rowIndex - b.rowIndex)\n                    .map(position => rowModel.getRow(position.rowIndex))\n                    .forEach(processRow);\n            }\n            else if (this.columnModel.isPivotMode()) {\n                if (usingCsrm) {\n                    rowModel.forEachPivotNode(processRow, true);\n                }\n                else {\n                    // must be enterprise, so we can just loop through all the nodes\n                    rowModel.forEachNode(processRow);\n                }\n            }\n            else {\n                // onlySelectedAllPages: user doing pagination and wants selected items from\n                // other pages, so cannot use the standard row model as it won't have rows from\n                // other pages.\n                // onlySelectedNonStandardModel: if user wants selected in non standard row model\n                // (eg viewport) then again RowModel cannot be used, so need to use selected instead.\n                if (params.onlySelectedAllPages || onlySelectedNonStandardModel) {\n                    const selectedNodes = this.selectionService.getSelectedNodes();\n                    this.replicateSortedOrder(selectedNodes);\n                    // serialize each node\n                    selectedNodes.forEach(processRow);\n                }\n                else {\n                    // here is everything else - including standard row model and selected. we don't use\n                    // the selection model even when just using selected, so that the result is the order\n                    // of the rows appearing on the screen.\n                    if (exportedRows === 'all') {\n                        rowModel.forEachNode(processRow);\n                    }\n                    else if (usingCsrm) {\n                        rowModel.forEachNodeAfterFilterAndSort(processRow, true);\n                    }\n                    else if (usingSsrm) {\n                        rowModel.forEachNodeAfterFilterAndSort(processRow);\n                    }\n                    else {\n                        rowModel.forEachNode(processRow);\n                    }\n                }\n            }\n            return gridSerializingSession;\n        };\n    }\n    replicateSortedOrder(rows) {\n        const sortOptions = this.sortController.getSortOptions();\n        const compareNodes = (rowA, rowB) => {\n            var _a, _b, _c, _d;\n            if (rowA.rowIndex != null && rowB.rowIndex != null) {\n                // if the rows have rowIndexes, this is the easiest way to compare,\n                // as they're already ordered\n                return rowA.rowIndex - rowB.rowIndex;\n            }\n            // if the level is the same, compare these nodes, or their parents\n            if (rowA.level === rowB.level) {\n                if (((_a = rowA.parent) === null || _a === void 0 ? void 0 : _a.id) === ((_b = rowB.parent) === null || _b === void 0 ? void 0 : _b.id)) {\n                    return this.rowNodeSorter.compareRowNodes(sortOptions, {\n                        rowNode: rowA,\n                        currentPos: (_c = rowA.rowIndex) !== null && _c !== void 0 ? _c : -1,\n                    }, {\n                        rowNode: rowB,\n                        currentPos: (_d = rowB.rowIndex) !== null && _d !== void 0 ? _d : -1,\n                    });\n                }\n                // level is same, but parent isn't, compare parents\n                return compareNodes(rowA.parent, rowB.parent);\n            }\n            // if level is different, match levels\n            if (rowA.level > rowB.level) {\n                return compareNodes(rowA.parent, rowB);\n            }\n            return compareNodes(rowA, rowB.parent);\n        };\n        // sort the nodes either by existing row index or compare them\n        rows.sort(compareNodes);\n    }\n    processPinnedBottomRows(params, columnsToExport) {\n        return (gridSerializingSession) => {\n            const processRow = this.processRow.bind(this, gridSerializingSession, params, columnsToExport);\n            if (params.rowPositions) {\n                params.rowPositions\n                    // only pinnedBottom rows, other models are processed by `processRows` and `processPinnedTopRows`\n                    .filter(position => position.rowPinned === 'bottom')\n                    .sort((a, b) => a.rowIndex - b.rowIndex)\n                    .map(position => this.pinnedRowModel.getPinnedBottomRow(position.rowIndex))\n                    .forEach(processRow);\n            }\n            else {\n                this.pinnedRowModel.forEachPinnedBottomRow(processRow);\n            }\n            return gridSerializingSession;\n        };\n    }\n    getColumnsToExport(allColumns = false, columnKeys) {\n        const isPivotMode = this.columnModel.isPivotMode();\n        if (columnKeys && columnKeys.length) {\n            return this.columnModel.getGridColumns(columnKeys);\n        }\n        if (allColumns && !isPivotMode) {\n            // add auto group column for tree data\n            const columns = this.gridOptionsService.isTreeData()\n                ? this.columnModel.getGridColumns([GROUP_AUTO_COLUMN_ID])\n                : [];\n            return columns.concat(this.columnModel.getAllGridColumns() || []);\n        }\n        return this.columnModel.getAllDisplayedColumns();\n    }\n    recursivelyAddHeaderGroups(displayedGroups, gridSerializingSession, processGroupHeaderCallback) {\n        const directChildrenHeaderGroups = [];\n        displayedGroups.forEach((columnGroupChild) => {\n            const columnGroup = columnGroupChild;\n            if (!columnGroup.getChildren) {\n                return;\n            }\n            columnGroup.getChildren().forEach(it => directChildrenHeaderGroups.push(it));\n        });\n        if (displayedGroups.length > 0 && displayedGroups[0] instanceof ColumnGroup) {\n            this.doAddHeaderHeader(gridSerializingSession, displayedGroups, processGroupHeaderCallback);\n        }\n        if (directChildrenHeaderGroups && directChildrenHeaderGroups.length > 0) {\n            this.recursivelyAddHeaderGroups(directChildrenHeaderGroups, gridSerializingSession, processGroupHeaderCallback);\n        }\n    }\n    doAddHeaderHeader(gridSerializingSession, displayedGroups, processGroupHeaderCallback) {\n        const gridRowIterator = gridSerializingSession.onNewHeaderGroupingRow();\n        let columnIndex = 0;\n        displayedGroups.forEach((columnGroupChild) => {\n            const columnGroup = columnGroupChild;\n            let name;\n            if (processGroupHeaderCallback) {\n                name = processGroupHeaderCallback({\n                    columnGroup: columnGroup,\n                    api: this.gridOptionsService.api,\n                    columnApi: this.gridOptionsService.columnApi,\n                    context: this.gridOptionsService.context\n                });\n            }\n            else {\n                name = this.columnModel.getDisplayNameForColumnGroup(columnGroup, 'header');\n            }\n            const collapsibleGroupRanges = columnGroup.getLeafColumns().reduce((collapsibleGroups, currentColumn, currentIdx, arr) => {\n                let lastGroup = _.last(collapsibleGroups);\n                const groupShow = currentColumn.getColumnGroupShow() === 'open';\n                if (!groupShow) {\n                    if (lastGroup && lastGroup[1] == null) {\n                        lastGroup[1] = currentIdx - 1;\n                    }\n                }\n                else if (!lastGroup || lastGroup[1] != null) {\n                    lastGroup = [currentIdx];\n                    collapsibleGroups.push(lastGroup);\n                }\n                if (currentIdx === arr.length - 1 && lastGroup && lastGroup[1] == null) {\n                    lastGroup[1] = currentIdx;\n                }\n                return collapsibleGroups;\n            }, []);\n            gridRowIterator.onColumn(columnGroup, name || '', columnIndex++, columnGroup.getLeafColumns().length - 1, collapsibleGroupRanges);\n        });\n    }\n};\n__decorate([\n    Autowired('displayedGroupCreator')\n], GridSerializer.prototype, \"displayedGroupCreator\", void 0);\n__decorate([\n    Autowired('columnModel')\n], GridSerializer.prototype, \"columnModel\", void 0);\n__decorate([\n    Autowired('rowModel')\n], GridSerializer.prototype, \"rowModel\", void 0);\n__decorate([\n    Autowired('pinnedRowModel')\n], GridSerializer.prototype, \"pinnedRowModel\", void 0);\n__decorate([\n    Autowired('selectionService')\n], GridSerializer.prototype, \"selectionService\", void 0);\n__decorate([\n    Autowired('rowNodeSorter')\n], GridSerializer.prototype, \"rowNodeSorter\", void 0);\n__decorate([\n    Autowired('sortController')\n], GridSerializer.prototype, \"sortController\", void 0);\nGridSerializer = __decorate([\n    Bean(\"gridSerializer\")\n], GridSerializer);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION = '30.0.3';\n\nconst CsvExportModule = {\n    version: VERSION,\n    moduleName: ModuleNames.CsvExportModule,\n    beans: [CsvCreator, GridSerializer]\n};\n\nconst LINE_SEPARATOR = '\\r\\n';\nclass XmlFactory {\n    static createHeader(headerElement = {}) {\n        const headerStart = '<?';\n        const headerEnd = '?>';\n        const keys = ['version'];\n        if (!headerElement.version) {\n            headerElement.version = \"1.0\";\n        }\n        if (headerElement.encoding) {\n            keys.push('encoding');\n        }\n        if (headerElement.standalone) {\n            keys.push('standalone');\n        }\n        const att = keys.map((key) => `${key}=\"${headerElement[key]}\"`).join(' ');\n        return `${headerStart}xml ${att} ${headerEnd}`;\n    }\n    static createXml(xmlElement, booleanTransformer) {\n        let props = '';\n        if (xmlElement.properties) {\n            if (xmlElement.properties.prefixedAttributes) {\n                xmlElement.properties.prefixedAttributes.forEach((prefixedSet) => {\n                    Object.keys(prefixedSet.map).forEach((key) => {\n                        props += this.returnAttributeIfPopulated(prefixedSet.prefix + key, prefixedSet.map[key], booleanTransformer);\n                    });\n                });\n            }\n            if (xmlElement.properties.rawMap) {\n                Object.keys(xmlElement.properties.rawMap).forEach((key) => {\n                    props += this.returnAttributeIfPopulated(key, xmlElement.properties.rawMap[key], booleanTransformer);\n                });\n            }\n        }\n        let result = '<' + xmlElement.name + props;\n        if (!xmlElement.children && xmlElement.textNode == null) {\n            return result + '/>' + LINE_SEPARATOR;\n        }\n        if (xmlElement.textNode != null) {\n            return result + '>' + xmlElement.textNode + '</' + xmlElement.name + '>' + LINE_SEPARATOR;\n        }\n        result += '>' + LINE_SEPARATOR;\n        if (xmlElement.children) {\n            xmlElement.children.forEach((it) => {\n                result += this.createXml(it, booleanTransformer);\n            });\n        }\n        return result + '</' + xmlElement.name + '>' + LINE_SEPARATOR;\n    }\n    static returnAttributeIfPopulated(key, value, booleanTransformer) {\n        if (!value && value !== '' && value !== 0) {\n            return '';\n        }\n        let xmlValue = value;\n        if ((typeof (value) === 'boolean')) {\n            if (booleanTransformer) {\n                xmlValue = booleanTransformer(value);\n            }\n        }\n        return ` ${key}=\"${xmlValue}\"`;\n    }\n}\n\n// table for crc calculation\n// from: https://referencesource.microsoft.com/#System/sys/System/IO/compression/Crc32Helper.cs,3b31978c7d7f7246,references\nconst crcTable = new Uint32Array([\n    0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,\n    0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,\n    0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,\n    0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,\n    0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,\n    0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,\n    0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,\n    0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,\n    0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,\n    0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,\n    0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,\n    0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,\n    0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,\n    0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,\n    0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,\n    0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,\n    0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,\n    0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,\n    0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,\n    0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,\n    0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,\n    0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,\n    0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,\n    0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,\n    0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,\n    0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,\n    0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,\n    0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,\n    0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,\n    0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,\n    0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,\n    0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,\n    0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,\n    0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,\n    0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,\n    0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,\n    0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,\n    0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,\n    0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,\n    0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,\n    0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,\n    0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,\n    0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d\n]);\nclass ZipContainer {\n    static addFolders(paths) {\n        paths.forEach(this.addFolder.bind(this));\n    }\n    static addFolder(path) {\n        this.folders.push({\n            path,\n            created: new Date(),\n            isBase64: false\n        });\n    }\n    static addFile(path, content, isBase64 = false) {\n        this.files.push({\n            path,\n            created: new Date(),\n            content,\n            isBase64\n        });\n    }\n    static getContent(mimeType = 'application/zip') {\n        const textOutput = this.buildFileStream();\n        const uInt8Output = this.buildUint8Array(textOutput);\n        this.clearStream();\n        return new Blob([uInt8Output], { type: mimeType });\n    }\n    static clearStream() {\n        this.folders = [];\n        this.files = [];\n    }\n    static buildFileStream(fData = '') {\n        const totalFiles = this.folders.concat(this.files);\n        const len = totalFiles.length;\n        let foData = '';\n        let lL = 0;\n        let cL = 0;\n        for (const currentFile of totalFiles) {\n            const { fileHeader, folderHeader, content } = this.getHeader(currentFile, lL);\n            lL += fileHeader.length + content.length;\n            cL += folderHeader.length;\n            fData += fileHeader + content;\n            foData += folderHeader;\n        }\n        const foEnd = this.buildFolderEnd(len, cL, lL);\n        return fData + foData + foEnd;\n    }\n    static getHeader(currentFile, offset) {\n        const { content, path, created, isBase64 } = currentFile;\n        const { utf8_encode, decToHex } = _;\n        const utfPath = utf8_encode(path);\n        const isUTF8 = utfPath !== path;\n        const time = this.convertTime(created);\n        const dt = this.convertDate(created);\n        let extraFields = '';\n        if (isUTF8) {\n            const uExtraFieldPath = decToHex(1, 1) + decToHex(this.getFromCrc32Table(utfPath), 4) + utfPath;\n            extraFields = \"\\x75\\x70\" + decToHex(uExtraFieldPath.length, 2) + uExtraFieldPath;\n        }\n        const { size, content: convertedContent } = !content ? { size: 0, content: '' } : this.getConvertedContent(content, isBase64);\n        const header = '\\x0A\\x00' +\n            (isUTF8 ? '\\x00\\x08' : '\\x00\\x00') +\n            '\\x00\\x00' +\n            decToHex(time, 2) + // last modified time\n            decToHex(dt, 2) + // last modified date\n            decToHex(size ? this.getFromCrc32Table(convertedContent) : 0, 4) +\n            decToHex(size, 4) + // compressed size\n            decToHex(size, 4) + // uncompressed size\n            decToHex(utfPath.length, 2) + // file name length\n            decToHex(extraFields.length, 2); // extra field length\n        const fileHeader = 'PK\\x03\\x04' + header + utfPath + extraFields;\n        const folderHeader = 'PK\\x01\\x02' + // central header\n            '\\x14\\x00' +\n            header + // file header\n            '\\x00\\x00' +\n            '\\x00\\x00' +\n            '\\x00\\x00' +\n            (content ? '\\x00\\x00\\x00\\x00' : '\\x10\\x00\\x00\\x00') + // external file attributes\n            decToHex(offset, 4) + // relative offset of local header\n            utfPath + // file name\n            extraFields; // extra field\n        return { fileHeader, folderHeader, content: convertedContent || '' };\n    }\n    static getConvertedContent(content, isBase64 = false) {\n        if (isBase64) {\n            content = content.split(';base64,')[1];\n        }\n        content = isBase64 ? atob(content) : content;\n        return {\n            size: content.length,\n            content\n        };\n    }\n    static buildFolderEnd(tLen, cLen, lLen) {\n        const { decToHex } = _;\n        return 'PK\\x05\\x06' + // central folder end\n            '\\x00\\x00' +\n            '\\x00\\x00' +\n            decToHex(tLen, 2) + // total number of entries in the central folder\n            decToHex(tLen, 2) + // total number of entries in the central folder\n            decToHex(cLen, 4) + // size of the central folder\n            decToHex(lLen, 4) + // central folder start offset\n            '\\x00\\x00';\n    }\n    static buildUint8Array(content) {\n        const uint8 = new Uint8Array(content.length);\n        for (let i = 0; i < uint8.length; i++) {\n            uint8[i] = content.charCodeAt(i);\n        }\n        return uint8;\n    }\n    static getFromCrc32Table(content) {\n        if (!content.length) {\n            return 0;\n        }\n        const size = content.length;\n        const iterable = new Uint8Array(size);\n        for (let i = 0; i < size; i++) {\n            iterable[i] = content.charCodeAt(i);\n        }\n        let crc = 0 ^ (-1);\n        let j = 0;\n        let k = 0;\n        let l = 0;\n        for (let i = 0; i < size; i++) {\n            j = iterable[i];\n            k = (crc ^ j) & 0xFF;\n            l = crcTable[k];\n            crc = (crc >>> 8) ^ l;\n        }\n        return crc ^ (-1);\n    }\n    static convertTime(date) {\n        let time = date.getHours();\n        time <<= 6;\n        time = time | date.getMinutes();\n        time <<= 5;\n        time = time | date.getSeconds() / 2;\n        return time;\n    }\n    static convertDate(date) {\n        let dt = date.getFullYear() - 1980;\n        dt <<= 4;\n        dt = dt | (date.getMonth() + 1);\n        dt <<= 5;\n        dt = dt | date.getDate();\n        return dt;\n    }\n}\nZipContainer.folders = [];\nZipContainer.files = [];\n\nconst AllCommunityModules = [ClientSideRowModelModule, InfiniteRowModelModule, CsvExportModule];\n\nModuleRegistry.registerModules(AllCommunityModules);\n\nexport { AbstractHeaderCellCtrl, AgAbstractField, AgAbstractLabel, AgCheckbox, AgDialog, AgGroupComponent, AgInputDateField, AgInputNumberField, AgInputRange, AgInputTextArea, AgInputTextField, AgMenuItemComponent, AgMenuList, AgMenuPanel, AgPanel, AgPickerField, AgPromise, AgPromiseStatus, AgRadioButton, AgSelect, AgSlider, AgStackComponentsRegistry, AgToggleButton, AlignedGridsService, AllCommunityModules, AnimateShowChangeCellRenderer, AnimateSlideCellRenderer, AnimationFrameService, AutoScrollService, AutoWidthCalculator, Autowired, BarColumnLabelPlacement, BaseComponentWrapper, BaseCreator, BaseGridSerializingSession, Bean, BeanStub, Beans, BodyDropPivotTarget, BodyDropTarget, CHART_TOOLBAR_ALLOW_LIST, CHART_TOOL_PANEL_ALLOW_LIST, CHART_TOOL_PANEL_MENU_OPTIONS, CellComp, CellCtrl, CellNavigationService, CellPositionUtils, CellRangeType, ChangedPath, CheckboxCellEditor, CheckboxCellRenderer, CheckboxSelectionComponent, ClientSideRowModelModule, ClientSideRowModelSteps, ColDefUtil, Column, ColumnApi, ColumnFactory, ColumnGroup, ColumnKeyCreator, ColumnModel, ColumnUtils, Component, ComponentUtil, Context, CssClassApplier, CssClassManager, CsvCreator, CsvExportModule, CtrlsService, CustomTooltipFeature, DEFAULT_CHART_GROUPS, DateCellEditor, DateFilter, DateStringCellEditor, DisplayedGroupCreator, Downloader, DragAndDropService, DragService, DragSourceType, Environment, EventService, Events, ExcelFactoryMode, ExpressionService, FilterManager, FloatingFilterMapper, FocusService, GROUP_AUTO_COLUMN_ID, Grid, GridApi, GridBodyComp, GridBodyCtrl, GridComp, GridCoreCreator, GridCtrl, GridHeaderComp, GridHeaderCtrl, GridOptionsService, GridSerializer, GroupCellRenderer, GroupCellRendererCtrl, GroupInstanceIdCreator, HeaderCellCtrl, HeaderFilterCellComp, HeaderFilterCellCtrl, HeaderGroupCellCtrl, HeaderNavigationDirection, HeaderNavigationService, HeaderPositionUtils, HeaderRowComp, HeaderRowContainerComp, HeaderRowContainerCtrl, HeaderRowCtrl, HeaderRowType, HorizontalDirection, HorizontalResizeService, InfiniteRowModelModule, KeyCode, LargeTextCellEditor, LayoutCssClasses, LocaleService, Logger, LoggerFactory, ManagedFocusFeature, ModuleNames, ModuleRegistry, MouseEventService, MoveColumnFeature, NavigationService, NumberCellEditor, NumberFilter, NumberSequence, Optional, PaginationProxy, PinnedRowModel, PopupComponent, PopupEditorWrapper, PopupService, PositionableFeature, PostConstruct, PreConstruct, PreDestroy, PropertyKeys, ProvidedColumnGroup, ProvidedFilter, Qualifier, QuerySelector, RefSelector, ResizeObserverService, RowAnimationCssClasses, RowContainerComp, RowContainerCtrl, RowContainerName, RowContainerType, RowCtrl, RowHighlightPosition, RowNode, RowNodeBlock, RowNodeBlockLoader, RowNodeSorter, RowPositionUtils, RowRenderer, RowType, ScalarFilter, ScrollVisibleService, SelectCellEditor, SelectableService, SelectionHandleType, ServerSideTransactionResultStatus, SetLeftFeature, SimpleFilter, SortController, SortIndicatorComp, StandardMenuFactory, StylingService, TabGuardClassNames, TabGuardComp, TabGuardCtrl, TabbedLayout, TemplateService, TextCellEditor, TextFilter, TextFloatingFilter, Timer, TouchListener, UserComponentFactory, UserComponentRegistry, ValueCache, ValueFormatterService, ValueParserService, ValueService, VanillaFrameworkOverrides, VerticalDirection, VirtualList, XmlFactory, ZipContainer, _, __FORCE_MODULE_DETECTION, getRowContainerTypeForName, simpleHttpRequest };\n","import { createVNode, defineComponent, render } from 'vue';\nexport class VueComponentFactory {\n    static getComponentDefinition(component, parent) {\n        let componentDefinition;\n        // when referencing components by name - ie: cellRenderer: 'MyComponent'\n        if (typeof component === 'string') {\n            // look up the definition in Vue\n            componentDefinition = this.searchForComponentInstance(parent, component);\n        }\n        else {\n            componentDefinition = { extends: defineComponent(Object.assign({}, component)) };\n        }\n        if (!componentDefinition) {\n            console.error(`Could not find component with name of ${component}. Is it in Vue.components?`);\n        }\n        if (componentDefinition.extends) {\n            if (componentDefinition.extends.setup) {\n                componentDefinition.setup = componentDefinition.extends.setup;\n            }\n            componentDefinition.extends.props = this.addParamsToProps(componentDefinition.extends.props);\n        }\n        else {\n            componentDefinition.props = this.addParamsToProps(componentDefinition.props);\n        }\n        return componentDefinition;\n    }\n    static addParamsToProps(props) {\n        if (!props || (Array.isArray(props) && props.indexOf('params') === -1)) {\n            props = ['params', ...(props ? props : [])];\n        }\n        else if (typeof props === 'object' && !props.params) {\n            /* tslint:disable:no-string-literal */\n            props['params'] = {\n                type: Object\n            };\n        }\n        return props;\n    }\n    static createAndMountComponent(component, params, parent, provides) {\n        const componentDefinition = VueComponentFactory.getComponentDefinition(component, parent);\n        if (!componentDefinition) {\n            return;\n        }\n        const { vNode, destroy, el } = this.mount(componentDefinition, { params: Object.freeze(params) }, parent, provides || {});\n        // note that the component creation is synchronous so that componentInstance is set by this point\n        return {\n            componentInstance: vNode.component.proxy,\n            element: el,\n            destroy,\n        };\n    }\n    static mount(component, props, parent, provides) {\n        let vNode = createVNode(component, props);\n        vNode.appContext = parent.$.appContext;\n        vNode.appContext.provides = Object.assign(Object.assign(Object.assign({}, provides), (vNode.appContext.provides ? vNode.appContext.provides : {})), (parent.$parent.$options.provide ? parent.$parent.$options.provide : {}));\n        let el = document.createElement('div');\n        render(vNode, el);\n        const destroy = () => {\n            if (el) {\n                render(null, el);\n            }\n            el = null;\n            vNode = null;\n        };\n        return { vNode, destroy, el };\n    }\n    static searchForComponentInstance(parent, component, maxDepth = 10, suppressError = false) {\n        let componentInstance = null;\n        let currentParent = parent.$parent;\n        let depth = 0;\n        while (!componentInstance &&\n            currentParent &&\n            currentParent.$options &&\n            (++depth < maxDepth)) {\n            const currentParentAsThis = currentParent;\n            componentInstance = currentParentAsThis.$options && currentParentAsThis.$options.components ? currentParentAsThis.$options.components[component] : null;\n            currentParent = currentParent.$parent;\n        }\n        // then search in globally registered components of app\n        if (!componentInstance) {\n            const components = parent.$.appContext.components;\n            if (components && components[component]) {\n                componentInstance = components[component];\n            }\n        }\n        if (!componentInstance && !suppressError) {\n            console.error(`Could not find component with name of ${component}. Is it in Vue.components?`);\n            return null;\n        }\n        return componentInstance;\n    }\n}\n","import { BaseComponentWrapper } from 'ag-grid-community';\nimport { VueComponentFactory } from './VueComponentFactory';\nexport class VueFrameworkComponentWrapper extends BaseComponentWrapper {\n    constructor(parent, provides) {\n        super();\n        this.parent = parent;\n        // when using master detail things provides to the master (like urlql) will not be available to the child components\n        // we capture the parent provides here (the first one will be the parent) - and re-use this when creating child components in VueComponentFactory\n        if (!VueFrameworkComponentWrapper.provides) {\n            VueFrameworkComponentWrapper.provides = provides;\n        }\n    }\n    createWrapper(component) {\n        const that = this;\n        class DynamicComponent extends VueComponent {\n            init(params) {\n                super.init(params);\n            }\n            hasMethod(name) {\n                return wrapper.getFrameworkComponentInstance()[name] != null;\n            }\n            callMethod(name, args) {\n                const componentInstance = this.getFrameworkComponentInstance();\n                const frameworkComponentInstance = wrapper.getFrameworkComponentInstance();\n                return frameworkComponentInstance[name].apply(componentInstance, args);\n            }\n            addMethod(name, callback) {\n                wrapper[name] = callback;\n            }\n            overrideProcessing(methodName) {\n                return that.parent.autoParamsRefresh && methodName === 'refresh';\n            }\n            processMethod(methodName, args) {\n                if (methodName === 'refresh') {\n                    this.getFrameworkComponentInstance().params = args[0];\n                }\n                if (this.hasMethod(methodName)) {\n                    return this.callMethod(methodName, args);\n                }\n                return methodName === 'refresh';\n            }\n            createComponent(params) {\n                return that.createComponent(component, params);\n            }\n        }\n        const wrapper = new DynamicComponent();\n        return wrapper;\n    }\n    createComponent(component, params) {\n        return VueComponentFactory.createAndMountComponent(component, params, this.parent, VueFrameworkComponentWrapper.provides);\n    }\n    createMethodProxy(wrapper, methodName, mandatory) {\n        return function () {\n            if (wrapper.overrideProcessing(methodName)) {\n                return wrapper.processMethod(methodName, arguments);\n            }\n            if (wrapper.hasMethod(methodName)) {\n                return wrapper.callMethod(methodName, arguments);\n            }\n            if (mandatory) {\n                console.warn('AG Grid: Framework component is missing the method ' + methodName + '()');\n            }\n            return null;\n        };\n    }\n    destroy() {\n        this.parent = null;\n    }\n}\nclass VueComponent {\n    getGui() {\n        return this.element;\n    }\n    destroy() {\n        if (this.getFrameworkComponentInstance() && typeof this.getFrameworkComponentInstance().destroy === 'function') {\n            this.getFrameworkComponentInstance().destroy();\n        }\n        this.unmount();\n    }\n    getFrameworkComponentInstance() {\n        return this.componentInstance;\n    }\n    init(params) {\n        const { componentInstance, element, destroy: unmount } = this.createComponent(params);\n        this.componentInstance = componentInstance;\n        this.unmount = unmount;\n        // the element is the parent div we're forced to created when dynamically creating vnodes\n        // the first child is the user supplied component\n        this.element = element.firstElementChild;\n    }\n}\n","import { ComponentUtil } from 'ag-grid-community';\nexport const kebabProperty = (property) => {\n    return property.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n};\nexport const kebabNameToAttrEventName = (kebabName) => {\n    // grid-ready for example would become onGrid-ready in Vue\n    return `on${kebabName.charAt(0).toUpperCase()}${kebabName.substring(1, kebabName.length)}`;\n};\nexport const getAgGridProperties = () => {\n    const props = {};\n    // for example, 'grid-ready' would become 'onGrid-ready': undefined\n    // without this emitting events results in a warning\n    // and adding 'grid-ready' (and variations of this to the emits option in AgGridVue doesn't help either)\n    const eventNameAsProps = ComponentUtil.PUBLIC_EVENTS.map((eventName) => kebabNameToAttrEventName(kebabProperty(eventName)));\n    eventNameAsProps.forEach((eventName) => props[eventName] = undefined);\n    const watch = {};\n    ComponentUtil.ALL_PROPERTIES\n        .filter((propertyName) => propertyName != 'gridOptions') // dealt with in AgGridVue itself\n        .forEach((propertyName) => {\n        props[propertyName] = {};\n        watch[propertyName] = {\n            handler(currentValue, previousValue) {\n                this.processChanges(propertyName, currentValue, previousValue);\n            },\n            deep: propertyName !== 'popupParent' && propertyName !== 'context'\n        };\n    });\n    return [props, watch];\n};\n","import { VanillaFrameworkOverrides } from 'ag-grid-community';\nimport { VueComponentFactory } from './VueComponentFactory';\nexport class VueFrameworkOverrides extends VanillaFrameworkOverrides {\n    constructor(parent) {\n        super();\n        this.parent = parent;\n    }\n    /*\n     * vue components are specified in the \"components\" part of the vue component - as such we need a way to determine\n     * if a given component is within that context - this method provides this\n     * Note: This is only really used/necessary with cellRendererSelectors\n     */\n    frameworkComponent(name, components) {\n        let result = !!VueComponentFactory.searchForComponentInstance(this.parent, name, 10, true) ? name : null;\n        if (!result && components && components[name]) {\n            const indirectName = components[name];\n            result = !!VueComponentFactory.searchForComponentInstance(this.parent, indirectName, 10, true) ? indirectName : null;\n        }\n        return result;\n    }\n    isFrameworkComponent(comp) {\n        return typeof comp === 'object';\n    }\n}\n","import { defineComponent, getCurrentInstance, h } from 'vue';\nimport { markRaw, toRaw } from '@vue/reactivity';\nimport { ComponentUtil, Grid } from 'ag-grid-community';\nimport { VueFrameworkComponentWrapper } from './VueFrameworkComponentWrapper';\nimport { getAgGridProperties } from './Utils';\nimport { VueFrameworkOverrides } from './VueFrameworkOverrides';\nconst ROW_DATA_EVENTS = ['rowDataChanged', 'rowDataUpdated', 'cellValueChanged', 'rowValueChanged'];\nconst DATA_MODEL_ATTR_NAME = 'onUpdate:modelValue'; // emit name would be update:ModelValue\nconst DATA_MODEL_EMIT_NAME = 'update:modelValue';\nconst [props, watch] = getAgGridProperties();\nexport const AgGridVue = defineComponent({\n    render() {\n        return h('div');\n    },\n    props: Object.assign({ gridOptions: {\n            type: Object,\n            default: () => ({}),\n        }, autoParamsRefresh: {\n            type: Boolean,\n            default: () => false,\n        }, componentDependencies: {\n            type: Array,\n            default: () => [],\n        }, plugins: [], modules: {\n            type: Array,\n            default: () => [],\n        }, modelValue: {\n            type: Array,\n            default: undefined,\n            required: false\n        } }, props),\n    data() {\n        return {\n            gridCreated: false,\n            isDestroyed: false,\n            gridReadyFired: false,\n            emitRowModel: undefined\n        };\n    },\n    watch: Object.assign({ modelValue: {\n            handler(currentValue, previousValue) {\n                this.processChanges('rowData', currentValue, previousValue);\n            },\n            deep: true\n        } }, watch),\n    methods: {\n        globalEventListener(eventType, event) {\n            if (this.isDestroyed) {\n                return;\n            }\n            if (eventType === 'gridReady') {\n                this.gridReadyFired = true;\n            }\n            this.updateModelIfUsed(eventType);\n        },\n        processChanges(propertyName, currentValue, previousValue) {\n            if (this.gridCreated) {\n                if (this.skipChange(propertyName, currentValue, previousValue)) {\n                    return;\n                }\n                const changes = {};\n                changes[propertyName] = {\n                    // decouple the row data - if we don't when the grid changes row data directly that'll trigger this component to react to rowData changes,\n                    // which can reset grid state (ie row selection)\n                    currentValue: propertyName === 'rowData' ? (Object.isFrozen(currentValue) ? currentValue : markRaw(toRaw(currentValue))) : currentValue,\n                    previousValue,\n                };\n                ComponentUtil.processOnChange(changes, this.gridOptions.api);\n            }\n        },\n        checkForBindingConflicts() {\n            const thisAsAny = this;\n            if ((thisAsAny.rowData || this.gridOptions.rowData) &&\n                thisAsAny.modelValue) {\n                console.warn('AG Grid: Using both rowData and v-model. rowData will be ignored.');\n            }\n        },\n        getRowData() {\n            const rowData = [];\n            this.gridOptions.api.forEachNode((rowNode) => {\n                rowData.push(rowNode.data);\n            });\n            return rowData;\n        },\n        updateModelIfUsed(eventType) {\n            if (this.gridReadyFired &&\n                this.$attrs[DATA_MODEL_ATTR_NAME] &&\n                ROW_DATA_EVENTS.indexOf(eventType) !== -1) {\n                if (this.emitRowModel) {\n                    this.emitRowModel();\n                }\n            }\n        },\n        getRowDataBasedOnBindings() {\n            const thisAsAny = this;\n            const rowData = thisAsAny.modelValue;\n            return rowData ? rowData :\n                thisAsAny.rowData ? thisAsAny.rowData : thisAsAny.gridOptions.rowData;\n        },\n        getProvides() {\n            let instance = getCurrentInstance();\n            let provides = {};\n            while (instance) {\n                if (instance && instance.provides) {\n                    provides = Object.assign(Object.assign({}, provides), instance.provides);\n                }\n                instance = instance.parent;\n            }\n            return provides;\n        },\n        /*\n        * Prevents an infinite loop when using v-model for the rowData\n        */\n        skipChange(propertyName, currentValue, previousValue) {\n            if (this.gridReadyFired &&\n                propertyName === 'rowData' &&\n                this.$attrs[DATA_MODEL_ATTR_NAME]) {\n                if (currentValue === previousValue) {\n                    return true;\n                }\n                if (currentValue && previousValue) {\n                    const currentRowData = currentValue;\n                    const previousRowData = previousValue;\n                    if (currentRowData.length === previousRowData.length) {\n                        for (let i = 0; i < currentRowData.length; i++) {\n                            if (currentRowData[i] !== previousRowData[i]) {\n                                return false;\n                            }\n                        }\n                        return true;\n                    }\n                }\n            }\n            return false;\n        },\n        debounce(func, delay) {\n            let timeout;\n            return () => {\n                const later = function () {\n                    func();\n                };\n                window.clearTimeout(timeout);\n                timeout = window.setTimeout(later, delay);\n            };\n        }\n    },\n    mounted() {\n        // we debounce the model update to prevent a flood of updates in the event there are many individual\n        // cell/row updates\n        this.emitRowModel = this.debounce(() => {\n            this.$emit(DATA_MODEL_EMIT_NAME, Object.freeze(this.getRowData()));\n        }, 20);\n        const provides = this.getProvides();\n        const frameworkComponentWrapper = new VueFrameworkComponentWrapper(this, provides);\n        // the gridOptions we pass to the grid don't need to be reactive (and shouldn't be - it'll cause issues\n        // with mergeDeep for example\n        const gridOptions = markRaw(ComponentUtil.copyAttributesToGridOptions(toRaw(this.gridOptions), this, true));\n        this.checkForBindingConflicts();\n        const rowData = this.getRowDataBasedOnBindings();\n        gridOptions.rowData = rowData ? (Object.isFrozen(rowData) ? rowData : markRaw(toRaw(rowData))) : rowData;\n        const gridParams = {\n            globalEventListener: this.globalEventListener.bind(this),\n            frameworkOverrides: new VueFrameworkOverrides(this),\n            providedBeanInstances: {\n                frameworkComponentWrapper,\n            },\n            modules: this.modules,\n        };\n        new Grid(this.$el, gridOptions, gridParams);\n        this.gridCreated = true;\n    },\n    unmounted() {\n        if (this.gridCreated) {\n            if (this.gridOptions.api) {\n                this.gridOptions.api.destroy();\n            }\n            this.isDestroyed = true;\n        }\n    }\n});\n","<template>\r\n  <el-row :id=\"vjson.id\" :key=\"vjson.id\"\r\n          :class=\"[calcClass, 'yv-aggrid', 'yv-aggrid-wrap']\"\r\n          :style=\"calcStyle\"\r\n          @selectme.native=\"_selectMe\"\r\n          @click.stop=\"_selectMe\">\r\n    <div class=\"title\" v-if=\"vjson.title\">{{ vjson.title }}</div>\r\n    <draggable :list=\"vjson.columns\" item-key=\"id\"\r\n               v-bind=\"{group:'columnGrop', ghostClass: 'ghost'}\" class=\"yv-column-container\"\r\n               @scroll=\"_scrollMe\"\r\n               @end=\"_onDragEnd\" @add=\"(evt)=>_onDragAdd(evt, vjson.columns, vjson)\"\r\n               @update=\"_onDragUpdate\" :move=\"_checkMove\">\r\n      <template #item=\"{ element: column, index: columnIdx }\">\r\n        <div class=\"form-widget-list\">\r\n          <component :is=\"getDesignCmp(column, 'aggridcolumn')\" :key=\"column.id\"\r\n                     :vjson=\"column\"\r\n                     :vcxt=\"vcxt\"\r\n                     :designer=\"designer\"\r\n                     :parent-list=\"vjson.columns\"\r\n                     :index-of-parent-list=\"columnIdx\"\r\n                     :parent-component=\"vjson\"/>\r\n        </div>\r\n      </template>\r\n    </draggable>\r\n    <div v-if=\"!vjson.hideFooterToolbar\" class=\"ag-grid-pagination\">\r\n      <div class=\"btns\">\r\n        <el-button size=\"small\" v-if=\"vjson.pagination ?? true\"><span\r\n            class=\"iconfont icon-shangyiyehoutuifanhui\"></span></el-button>\r\n        <div class=\"page\" v-if=\"vjson.pagination ?? true\">\r\n          第 1/1000 <span>页</span>\r\n        </div>\r\n        <el-button size=\"small\" v-if=\"vjson.pagination ?? true\"\r\n                   class=\"no-margin\"><span class=\"iconfont icon-xiayiyeqianjinchakangengduo\"></span></el-button>\r\n        <!--\r\n        <el-button size=\"small\" @click=\"_lastPage\" :disabled=\"paginationOptions.current >= paginationOptions.totalPage\"><span\r\n            class=\"iconfont icon-jiantou_xiayiye\"></span></el-button>\r\n        -->\r\n        <el-button size=\"small\" v-if=\"!vjson.hideFooterToolbarRefresh\" :icon=\"renderIcon('antd ReloadOutlined')\" title=\"刷新\"/>\r\n        <el-select size=\"small\" v-if=\"vjson.pagination ?? true\" title=\"页面大小\">\r\n          <el-option :label=\"50\" :value=\"50\"/>\r\n        </el-select>\r\n        <el-button v-if=\"!vjson.hideFooterToolbarExcelExport\" size=\"small\" title=\"导出Excel\"><span\r\n            class=\"iconfont icon-xiazai-wenjianxiazai-03\"/></el-button>\r\n        <el-button v-if=\"!vjson.hideFooterToolbarExcelImport\" size=\"small\" :icon=\"renderIcon('antd UploadOutlined')\" title=\"导入Excel\"/>\r\n        <el-button v-if=\"!vjson.hideFooterToolbarFilter\" size=\"small\"><span class=\"iconfont icon-shaixuan\" title=\"筛选\"/></el-button>\r\n        <!--\r\n                <el-button size=\"small\"><span class=\"iconfont icon-xiazai-wenjianxiazai-03\"></span></el-button>\r\n                <el-button size=\"small\"><span class=\"iconfont icon-shihekuandu\"></span></el-button>\r\n                <el-button size=\"small\"><span class=\"iconfont icon-shaixuan\"></span></el-button>\r\n                <el-button><span class=\"iconfont icon-gearmore\"></span></el-button>\r\n                <el-button><span class=\"iconfont icon-fanhui\"></span></el-button>\r\n        -->\r\n      </div>\r\n      <div class=\"total\" v-if=\"!vjson.hideFooterToolbarRowCount\">共<span>1000</span>行</div>\r\n    </div>\r\n  </el-row>\r\n</template>\r\n\r\n<script>\r\nimport _ from \"lodash\"\r\nimport YvDesignAggridColumn from \"./yv-design-aggrid-column.vue\"\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonAggridProp from \"./yv-design-aggrid-prop.vue\"\r\nimport YvVjsonAggrid from \"../../vjson/yv-vjson-aggrid.vue\"\r\nimport {AgGridVue} from \"ag-grid-vue3\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n    YvDesignAggridColumn\r\n  },\r\n  computed: {},\r\n  watch: {\r\n    //\r\n  },\r\n  mounted() {\r\n    //\r\n  },\r\n  methods: {\r\n    onColumnDragEnd(evt) {\r\n\r\n    },\r\n    onColumnDragAdd(evt) {\r\n      const newIndex = evt.newIndex\r\n      if (!!this.vjson.columns[newIndex]) {\r\n        this.designer.setSelected(this.vjson.columns[newIndex])\r\n      }\r\n\r\n      this.designer.emitHistoryChange()\r\n    },\r\n    onColumnDragUpdate() {\r\n      this.designer.emitHistoryChange()\r\n    },\r\n    checkColumnMove(evt) {\r\n      return this.designer.checkWidgetMove(evt)\r\n    },\r\n  },\r\n\r\n\r\n  /**\r\n   * 为表格准备 vexport.data 属性.\r\n   * 用来在设计时，给组件安插数据属性, 为运行时的 vue 构建 data:{} 添加属性\r\n   */\r\n  buildVExportData(vjson, dataRoot, useFor) {\r\n    if (vjson.reference) {\r\n      if (useFor === 'reviewOnly') {\r\n        _.set(dataRoot, vjson.reference + '.isChanged', vjson.id)\r\n        _.set(dataRoot, vjson.reference + '.selections', vjson.id)\r\n        _.set(dataRoot, vjson.reference + '.checkedRows', vjson.id)\r\n        if (vjson.isBindMode) {\r\n          _.set(dataRoot, vjson.reference + '.allData', vjson.id)\r\n        }\r\n        let colProp = {}\r\n        _.forEach(vjson.columns, column => {\r\n          if (column.dataIndex) {\r\n            colProp[column.dataIndex] = column.id\r\n          }\r\n        })\r\n        _.set(dataRoot, vjson.reference + '.selection', colProp)\r\n\r\n      } else {\r\n        _.set(dataRoot, vjson.reference + '.isChanged', false)\r\n        _.set(dataRoot, vjson.reference + '.selections', [])\r\n        _.set(dataRoot, vjson.reference + '.checkedRows', [])\r\n        _.set(dataRoot, vjson.reference + '.selection', null)\r\n        if (vjson.isBindMode) {\r\n          _.set(dataRoot, vjson.reference + '.allData', [])\r\n        }\r\n      }\r\n    }\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('aggrid')\r\n    desc.setRuntime('YvVjsonAggrid', YvVjsonAggrid)\r\n    desc.setDesign('YvDesignAggrid', this)\r\n    desc.setProp('YvDesignAggridProp', YvVjsonAggridProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'aggrid',\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {\r\n        name: 'onDataLoadComplete', desc: '数据载入完成后回调',\r\n        args: [\r\n          {name: 'grid', desc: '表格对象'},\r\n          {name: 'data', desc: '数据'},\r\n        ]\r\n      },\r\n      {name: 'onReady', desc: '表格渲染完后'},\r\n      {name: 'onRowClass', desc: '初始化行添加class'},\r\n      {name: 'onCellClick', desc: '单元格点击'},\r\n      {name: 'onCellEditingStart', desc: '单元格开始编辑'},\r\n      {name: 'onCellEditingStop', desc: '单元格结束编辑'},\r\n      {name: 'onCellDoubleClick', desc: '单元格双击'},\r\n      {name: 'onRowClick', desc: '行点击'},\r\n      {name: 'onSelectionChange', desc: '选择内容被改变'},\r\n      {name: 'onRowDblClick', desc: '行双击'},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n    Vue.component('ag-grid-vue', AgGridVue)\r\n  },\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.yv-design-mode .yv-aggrid {\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  .title {\r\n    width: 100%;\r\n    line-height: 22px;\r\n    font-size: 16px;\r\n    font-weight: 600;\r\n    padding: 5px 5px 8px 5px;\r\n    border-bottom: 1px solid #dcdcdc\r\n  }\r\n\r\n  &.fit-height {\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n\r\n  .yv-column-container {\r\n    flex: 1;\r\n    overflow: auto;\r\n    display: flex;\r\n    flex-direction: row;\r\n    flex-wrap: wrap;\r\n    align-content: flex-start;\r\n    height: 100%;\r\n\r\n    .form-widget-list {\r\n      border: 1px solid var(--frist-border-color);\r\n      width: 220px;\r\n      height: 60px;\r\n      margin: 5px;\r\n    }\r\n  }\r\n}\r\n\r\n</style>","<template>\r\n  <el-row v-if=\"!hidden\"\r\n          :class=\"['yv-toolbar', calcClass, vjson.isFlat?'yv-toolbar-flat':'']\"\r\n          :style=\"calcStyleAndWidth\">\r\n    <el-divider v-if=\"vjson.isFooterToolbar\"></el-divider>\r\n    <div :class=\"['yv-field-container',alignRight?'to-right':'']\">\r\n      <template v-for=\"(item,itemIdx) in items\" :key=\"item.id\">\r\n        <component :is=\"getRuntimeCmp(item)\"\r\n                   :vjson=\"item\"\r\n                   :vcxt=\"vcxt\"\r\n                   :dialog-scope=\"dialogScope\"\r\n                   :parent-list=\"vjson.items\"\r\n                   :index-of-parent-list=\"itemIdx\"\r\n                   :parent-component=\"vjson\"/>\r\n      </template>\r\n    </div>\r\n  </el-row>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {Toolbar} from './Defaults'\r\nimport {getListener, runEvent} from '../yv-utils'\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport YvObject from './yv-vjson-object.vue'\r\nimport VJsonContext from \"./VJsonContext\";\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Toolbar)\r\n\r\n    return {\r\n      disabled: vjson.disabled,\r\n      hidden: vjson.hidden,\r\n      items: vjson.items,\r\n      alignRight: vjson.alignRight,\r\n    }\r\n  },\r\n  watch: {\r\n    'disabled': {\r\n      handler(newVal) {\r\n        this.vjson.disabled = newVal\r\n      }\r\n    },\r\n    'alignRight': {\r\n      handler(newVal) {\r\n        this.vjson.alignRight = newVal\r\n      }\r\n    }\r\n  },\r\n  methods: {}\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.yv-toolbar .to-right {\r\n  justify-content: right;\r\n}\r\n\r\n.yv-toolbar > .yv-field-container {\r\n  width: 100%;\r\n\r\n  .yv-staticfield {\r\n    .el-form-item__label {\r\n      margin-top: 3px\r\n    }\r\n  }\r\n}\r\n\r\n.el-dialog > .el-dialog__body {\r\n  padding-bottom: 0 !important;\r\n}\r\n\r\n.el-dialog .el-dialog__footer > .yv-toolbar > .el-divider {\r\n  margin: 0 0 15px 0;\r\n}\r\n\r\n.yv-toolbar.yv-toolbar-flat {\r\n  border: 0px solid rgba(170, 170, 170, .75);\r\n\r\n  .el-button {\r\n    height: 40px;\r\n    padding: 8px;\r\n    border: none;\r\n    border-radius: 0;\r\n    background-color: transparent;\r\n\r\n    &.is-disabled, &.el-button--default.is-disabled, &.el-button--primary.is-disabled,\r\n    &.el-button--danger.is-disabled, &.el-button--success.is-disabled, &.el-button--warning.is-disabled {\r\n      color: var(--el-toolbar-button-disabled-text-color);\r\n      background-color: transparent;\r\n      border-color: transparent;\r\n\r\n      & > span {\r\n        color: var(--el-toolbar-button-disabled-text-color);\r\n      }\r\n    }\r\n\r\n    &:focus {\r\n      outline: 1px dashed rgba(170, 170, 170, .75);\r\n    }\r\n\r\n    &.el-button--primary {\r\n      color: var(--el-color-primary);\r\n\r\n      & > span {\r\n        color: black;\r\n      }\r\n\r\n      &:active, &:focus, &:hover {\r\n        background-color: #c5c5c5; // var(--el-color-primary-light-9);\r\n        color: var(--el-color-primary);\r\n      }\r\n    }\r\n\r\n    &.el-button--danger {\r\n      color: var(--el-color-danger);\r\n\r\n      & > span {\r\n        color: black;\r\n      }\r\n\r\n      &:active, &:focus, &:hover {\r\n        background-color: #c5c5c5; // var(--el-color-danger-light-9);\r\n        color: var(--el-color-danger);\r\n      }\r\n    }\r\n\r\n    &.el-button--default {\r\n      color: var(--el-color-primary);\r\n\r\n      & > span {\r\n        color: black;\r\n      }\r\n\r\n      &:active, &:focus, &:hover {\r\n        background-color: #c5c5c5;\r\n        color: var(--el-color-primary);\r\n      }\r\n    }\r\n\r\n    &.el-button--success {\r\n      color: var(--el-color-success);\r\n\r\n      & > span {\r\n        color: black;\r\n      }\r\n\r\n      &:active, &:focus, &:hover {\r\n        background-color: #c5c5c5; // var(--el-color-success-light-9);\r\n        color: var(--el-color-success);\r\n      }\r\n    }\r\n\r\n    &.el-button--warning {\r\n      color: var(--el-color-warning);\r\n\r\n      & > span {\r\n        color: black;\r\n      }\r\n\r\n      &:active, &:focus, &:hover {\r\n        background-color: #c5c5c5; // var(--el-color-warning-light-9);\r\n        color: var(--el-color-warning);\r\n      }\r\n    }\r\n\r\n    &.el-button--info {\r\n      color: var(--el-color-primary);\r\n\r\n      & > span {\r\n        color: black;\r\n      }\r\n\r\n      &:active, &:focus, &:hover {\r\n        background-color: #c5c5c5; // var(--el-color-warning-light-9);\r\n        color: var(--el-color-primary);\r\n      }\r\n    }\r\n  }\r\n  .input-item-wrap:not(.yv-staticfield) {\r\n    .yv-form-label{\r\n      line-height: 40px;\r\n      font-size: 14px;\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">toolbar 属性</div>\r\n    <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"uiBlock\" prop=\"uiBlock\">\r\n        <el-input v-model=\"formData.uiBlock\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"权限\" prop=\"permissions\">\r\n        <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"隐藏\" prop=\"hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"禁用\" prop=\"disabled\">\r\n        <el-switch v-model=\"formData.disabled\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"靠右对齐\" prop=\"alignRight\">\r\n        <el-switch v-model=\"formData.alignRight\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"平面按钮\" prop=\"isFlat\" label-width=\"90px\">\r\n        <el-switch v-model=\"formData.isFlat\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"底部工具条\" prop=\"isFooterToolbar\" label-width=\"90px\">\r\n        <el-switch v-model=\"formData.isFooterToolbar\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"是否是卡片\" prop=\"isCard\" label-width=\"90px\">\r\n        <el-switch v-model=\"formData.isCard\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"边线\" prop=\"borderArr\" v-if=\"!isRf\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[0] === '1px'? 'primary':'default'\"\r\n                     @click=\"isBorder(0)\">上\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[1] === '1px'? 'primary':'default'\"\r\n                     @click=\"isBorder(1)\">右\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[2] === '1px'? 'primary':'default'\"\r\n                     @click=\"isBorder(2)\">下\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[3] === '1px'? 'primary':'default'\"\r\n                     @click=\"isBorder(3)\">左\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <yv-design-input-height :form-data=\"formData\" :designer=\"designer\" hide-height-mode/>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignInputHeight from \"./yv-design-input-height.vue\"\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  components: {YvDesignInputHeight, YvDesignerPermissions},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        alignRight: this.vjson.alignRight,\r\n        reference: this.vjson.reference,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        isBorder: this.vjson.isBorder,\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    isBorder(type) {\r\n      if (!this.formData.isBorder) {\r\n        this.formData.isBorder = []\r\n      }\r\n      if (type === 0) {\r\n        if (this.formData.isBorder[0] === '0px') {\r\n          this.formData.isBorder[0] = '1px'\r\n        } else {\r\n          this.formData.isBorder[0] = '0px'\r\n        }\r\n      } else if (type === 1) {\r\n        if (this.formData.isBorder[1] === '0px') {\r\n          this.formData.isBorder[1] = '1px'\r\n        } else {\r\n          this.formData.isBorder[1] = '0px'\r\n        }\r\n      } else if (type === 2) {\r\n        if (this.formData.isBorder[2] === '0px') {\r\n          this.formData.isBorder[2] = '1px'\r\n        } else {\r\n          this.formData.isBorder[2] = '0px'\r\n        }\r\n      } else if (type === 3) {\r\n        if (this.formData.isBorder[3] === '0px') {\r\n          this.formData.isBorder[3] = '1px'\r\n        } else {\r\n          this.formData.isBorder[3] = '0px'\r\n        }\r\n      }\r\n    }\r\n  },\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n.yv-card.yv-toolbar {\r\n  background: #fff;\r\n  border: 1px solid var(--el-menu-border-color);\r\n  padding: 0;\r\n}\r\n</style>","<template>\r\n  <el-row :id=\"vjson.id\" :key=\"vjson.id\"\r\n          :class=\"[calcClass,'yv-toolbar', vjson.isFlat?'yv-toolbar-flat':'']\"\r\n          :style=\"calcStyle\"\r\n          @selectme.native=\"_selectMe\"\r\n          @click.stop=\"_selectMe\">\r\n    <el-divider v-if=\"vjson.isFooterToolbar\"></el-divider>\r\n    <draggable :list=\"vjson.items\" item-key=\"id\"\r\n               v-bind=\"{group:'fieldGroup', ghostClass: 'ghost'}\"\r\n               :class=\"['yv-field-container', vjson.alignRight?'to-right':'']\"\r\n               @end=\"_onDragEnd\" @add=\"(evt)=>_onDragAdd(evt, vjson.items, vjson)\"\r\n               @update=\"_onDragUpdate\" :move=\"_checkMove\">\r\n      <template #item=\"{ element: item, index }\">\r\n        <component :is=\"getDesignCmp(item)\" :key=\"item.id\"\r\n                   :vjson=\"item\"\r\n                   :vcxt=\"vcxt\"\r\n                   :designer=\"designer\"\r\n                   :parent-list=\"vjson.items\"\r\n                   :index-of-parent-list=\"index\"\r\n                   :parent-component=\"vjson\"\r\n                   :design-state=\"true\"></component>\r\n      </template>\r\n      <template #header>\r\n        <div class=\"no-widget-hint\" style=\"height: 50px;width:100%;\" v-if=\"(vjson.items ?? []).length === 0\">\r\n          拖拽组件放置于此处\r\n        </div>\r\n      </template>\r\n    </draggable>\r\n  </el-row>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonToolbar from \"../../vjson/yv-vjson-toolbar.vue\"\r\nimport YvDesignToolbarProp from \"./yv-design-toolbar-prop.vue\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  methods: {},\r\n  install(Vue) {\r\n    const desc = registeComponent('toolbar')\r\n    desc.setRuntime('YvVjsonToolbar', YvVjsonToolbar)\r\n    desc.setDesign('YvDesignToolbar', this)\r\n    desc.setProp('YvDesignToolbarProp', YvDesignToolbarProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'toolbar',\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.el-row.yv-toolbar-container {\r\n  min-height: 50px;\r\n  line-height: 48px;\r\n  //padding: 6px;\r\n  outline: 1px dashed #336699;\r\n\r\n  .form-widget-list {\r\n    min-height: 28px;\r\n  }\r\n}\r\n\r\n.yv-design-mode {\r\n  .yv-toolbar {\r\n    width: 100%;\r\n    min-height: 42px;\r\n\r\n    & > .yv-field-container {\r\n      width: 100%;\r\n    }\r\n  }\r\n\r\n  .template-two {\r\n    .header {\r\n      .toolbar {\r\n        background: none;\r\n        padding-top: 0;\r\n\r\n        & > .toolbar-wrap {\r\n          padding-top: 0;\r\n\r\n          .yv-toolbar {\r\n            overflow: hidden;\r\n            height: 40px;\r\n\r\n            .transition-group-el + .transition-group-el {\r\n              margin-left: 12px;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n.el-row.yv-toolbar {\r\n  .yv-field-container {\r\n    display: flex;\r\n\r\n    div:not(.yv-staticfield) + button {\r\n      position: relative;\r\n      top: -2px\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">slot 属性</div>\r\n    <el-form :model=\"formData\" :rules=\"rules\" label-position=\"right\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"隐藏\" prop=\"formData.hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"名称\" prop=\"formData.name\">\r\n        <el-input v-model=\"formData.name\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <yv-design-input-height :form-data=\"formData\" :designer=\"designer\"/>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignInputHeight from \"./yv-design-input-height.vue\"\r\nimport VJsonContext from \"../../vjson/VJsonContext\";\r\nimport Designer from \"../designer\";\r\nimport basePropMix from \"./basePropMix\";\r\n\r\nexport default {\r\n  components: {YvDesignInputHeight},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        name: this.vjson.name,\r\n        hidden: this.vjson.hidden ?? false,\r\n      },\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <!--\r\n  <div :id=\"vcxt.getSlot(this.vjson.name)\"/>\r\n  -->\r\n  <component v-if=\"!hidden\"\r\n             :is=\"theSlot\"\r\n             :class=\"[calcClass, 'yv-slot']\"\r\n             :style=\"calcStyleAndWidth\"\r\n  />\r\n</template>\r\n\r\n<script>\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  components: {},\r\n  data() {\r\n    const vjson = this.vjson;\r\n    const theSlot = this.vcxt.getSlotByName(vjson.name)\r\n    return {\r\n      theSlot,\r\n      name: vjson.name,\r\n      hidden: vjson.hidden ?? false\r\n    }\r\n  },\r\n  watch: {\r\n\r\n  },\r\n  methods: {}\r\n}\r\n</script>","<template>\r\n  <div :id=\"vjson.id\"\r\n       :class=\"[calcClass, 'yv-slot']\"\r\n       :style=\"calcStyle\"\r\n       @selectme.native=\"_selectMe\"\r\n       @click.stop=\"_selectMe\">\r\n    插槽:{{ vjson.name }}\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport YvDesignFormItem from './yv-design-form-item.vue'\r\nimport {renderIcon} from '../../../utils'\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport YvDesignSlotProp from \"./yv-design-slot-prop.vue\"\r\nimport {registeComponent, getDescDefaults} from '../yv-designer-desc'\r\nimport YvVjsonSlot from \"../../vjson/yv-vjson-slot.vue\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n    YvDesignFormItem,\r\n  },\r\n  computed: {\r\n    icon() {\r\n      return renderIcon(this.vjson.iconCls)\r\n    },\r\n  },\r\n  created() {\r\n  },\r\n  mounted() {\r\n  },\r\n  beforeUnmount() {\r\n  },\r\n  methods: {\r\n    startsWith: _.startsWith,\r\n    handleButtonWidgetClick() {\r\n    }\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('slot')\r\n    desc.setRuntime('YvVjsonSlot', YvVjsonSlot)\r\n    desc.setDesign('YvDesignSlot', this)\r\n    desc.setProp('YvDesignSlotProp', YvDesignSlotProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'slot',\r\n        vjson.name,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n    ]\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">fieldslot 属性</div>\r\n    <el-form :model=\"formData\" :rules=\"rules\" label-position=\"right\" label-width=\"90px\"\r\n             size=\"default\" @submit.native.prevent>\r\n\r\n      <!-- 字段用途 如果是动态 -->\r\n      <el-form-item label=\"字段占位符\" prop=\"formData.replaceFor\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"formData.replaceFor === 'server'? 'primary':'default'\"\r\n                     @click=\"()=>formData.replaceFor='server'\">服务端\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.replaceFor === 'custom'? 'primary':'default'\"\r\n                     @click=\"()=>formData.replaceFor='custom'\">VJson\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"(!formData.replaceFor) ? 'primary':'default'\"\r\n                     @click=\"()=>formData.replaceFor=''\">VueSlot\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <template v-if=\"formData.replaceFor==='server'\">\r\n        <el-form-item label=\"属性名\" prop=\"formData.name\">\r\n          <el-input v-model=\"formData.name\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"扩展属性前缀\" prop=\"serverCmpPrefix\" label-width=\"100\">\r\n          <el-input v-model=\"formData.serverCmpPrefix\" type=\"text\" clearable></el-input>\r\n        </el-form-item>\r\n      </template>\r\n      <template v-if=\"formData.replaceFor==='custom'\">\r\n        <el-form-item label=\"替代名\" prop=\"formData.replaceFor\">\r\n          <el-input v-model=\"formData.name\" type=\"text\" clearable/>\r\n        </el-form-item>\r\n        <el-card>\r\n          <template #header>\r\n            <div class=\"card-header\">Vue中定义字段内容, 示例</div>\r\n          </template>\r\n          <pre>\r\ndata() {\r\n    return {\r\n        // 固定名称 \"customVjson\"\r\n        customVjson: {\r\n            // 替代名: slot1\r\n            slot1: [\r\n                {\r\n                    xtype: 'textfield',\r\n                    fieldLabel: '字段1',\r\n                    required: true,\r\n                    bind: {value: '{form.field1}'},\r\n                    listeners: {\r\n                        change(newValue, oldValue) {\r\n                            console.log('field1 change', newValue, oldValue)\r\n                        }\r\n                    },\r\n                },\r\n                {\r\n                    xtype: 'textfield',\r\n                    bind: {value: '{form.field2}'},\r\n                    fieldLabel: '字段2',\r\n                    required: true,\r\n                    listeners: {\r\n                        change(newValue, oldValue) {\r\n                            console.log('field2 change', newValue, oldValue)\r\n                        }\r\n                    },\r\n                },\r\n            ]\r\n        }\r\n    }\r\n},\r\n      </pre>\r\n        </el-card>\r\n      </template>\r\n\r\n      <template v-if=\"!formData.replaceFor\">\r\n        <el-form-item label=\"reference\" prop=\"reference\">\r\n          <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n        </el-form-item>\r\n        <el-divider/>\r\n        <el-form-item label=\"名称\" prop=\"formData.name\">\r\n          <el-input v-model=\"formData.name\" type=\"text\" clearable></el-input>\r\n        </el-form-item>\r\n        <el-form-item label=\"隐藏\" prop=\"formData.hidden\">\r\n          <el-switch v-model=\"formData.hidden\"></el-switch>\r\n        </el-form-item>\r\n      </template>\r\n\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignInputHeight from \"./yv-design-input-height.vue\"\r\nimport VJsonContext from \"../../vjson/VJsonContext\";\r\nimport Designer from \"../designer\";\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignInputExpress from './yv-design-input-express.vue'\r\n\r\nexport default {\r\n  components: {YvDesignInputHeight, YvDesignInputExpress},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        name: this.vjson.name,\r\n        hidden: this.vjson.hidden ?? false,\r\n      },\r\n    }\r\n  },\r\n  methods: {\r\n  },\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <!--\r\n  <div :id=\"vcxt.getSlot(this.vjson.name)\"/>\r\n  -->\r\n  <component :is=\"theSlot\"\r\n             :class=\"[calcClass, 'yv-fieldslot']\"\r\n             :style=\"calcStyle\"\r\n  />\r\n</template>\r\n\r\n<script>\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  components: {},\r\n  data() {\r\n    const theSlot = this.vcxt.getSlotByName(this.vjson.name)\r\n    return {\r\n      theSlot\r\n    }\r\n  },\r\n  methods: {}\r\n}\r\n</script>","<template>\r\n  <yv-design-form-item :designer=\"designer\" :vjson=\"{...vjson, fieldLabel: '表单插槽'}\" :vcxt=\"vcxt\"\r\n                       :parent-component=\"parentComponent\" :parent-list=\"parentList\"\r\n                       :index-of-parent-list=\"indexOfParentList\"\r\n                       :class=\"[calcClass, 'yv-fieldslot']\"\r\n                       :style=\"calcStyle\"\r\n                       @selectme.native=\"_selectMe\"\r\n                       @click.stop=\"_selectMe\">\r\n    <template v-if=\"vjson.replaceFor==='server'\"><el-tag style=\"width:100%;\">服务端: {{ parentComponent?.uiBlock + '.' + vjson.name }}</el-tag></template>\r\n    <template v-else-if=\"vjson.replaceFor==='custom'\"><el-tag style=\"width:100%;\">Vjson: {{ vjson.name }}</el-tag></template>\r\n    <template v-else><el-tag style=\"width:100%;\">VueSlot: {{ vjson.name }}}</el-tag></template>\r\n  </yv-design-form-item>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport YvDesignFormItem from './yv-design-form-item.vue'\r\nimport {renderIcon} from '../../../utils'\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport YvDesignFieldslotProp from \"./yv-design-fieldslot-prop.vue\"\r\nimport {registeComponent, getDescDefaults} from '../yv-designer-desc'\r\nimport YvVjsonFieldslot from \"../../vjson/yv-vjson-fieldslot.vue\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n    YvDesignFormItem,\r\n  },\r\n  computed: {\r\n    parentFormColEnable() {\r\n      return this.parentComponent?.xtype === 'form' && this.parentComponent?.colsOfRow > 0\r\n    },\r\n  },\r\n  methods: {\r\n    getFormItemColSpan(item) {\r\n      const weight = parseInt(item.weight) || 1\r\n      const colsOfRow = this.parentComponent.colsOfRow ?? 2\r\n\r\n      const simpleSpan = 24 / colsOfRow\r\n      return weight * simpleSpan\r\n    },\r\n    handleButtonWidgetClick() {\r\n    }\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('fieldslot')\r\n    desc.setRuntime('YvVjsonFieldslot', YvVjsonFieldslot)\r\n    desc.setDesign('YvDesignFieldslot', this)\r\n    desc.setProp('YvDesignFieldslotProp', YvDesignFieldslotProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'fieldslot',\r\n        vjson.name,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n    ]\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>\r\n<style>\r\n.yv-design-mode .yv-fieldslot {\r\n  width: 100%;\r\n}\r\n</style>","<template>\r\n  <el-empty v-if=\"!!emptyText\" :style=\"calcStyleAndWidth\" :description=\"emptyText\">\r\n  </el-empty>\r\n  <el-tabs ref=\"_inner\" v-else-if=\"!hidden\"\r\n           class=\"tabs-container\"\r\n           v-model=\"activeName\"\r\n           :tab-position=\"tabPosition\"\r\n           :stretch=\"stretch\"\r\n           :closable=\"closable\"\r\n           :addable=\"addable\"\r\n           :type=\"type\"\r\n           :loading=\"loading\"\r\n           :class=\"[calcClass, 'yv-tabs']\"\r\n           :style=\"calcStyleAndWidth\"\r\n           @tab-click=\"_onTabClick\"\r\n           @tab-change=\"_onTabChange\"\r\n           @tab-remove=\"_onTabRemove\"\r\n           @tab-add=\"_onTabAdd\">\r\n\r\n    <template v-for=\"(tab, tabIdx) in vjson.items\">\r\n      <el-tab-pane v-if=\"_getItemPermission(tab)\"\r\n                   :label=\"tab.title\" :name=\"'tab_'+tabIdx\" :class=\"['yv-tabpanel', tab.scrollable?'yv-tab-scroll':''] \"\r\n                   :lazy=\"lazy\">\r\n        <div class=\"yv-row-container\">\r\n          <template v-for=\"(item,itemIdx) in tab.items\">\r\n            <component :is=\"getRuntimeCmp(item)\"\r\n                       :vjson=\"item\"\r\n                       :vcxt=\"vcxt\"\r\n                       :dialog-scope=\"dialogScope\"\r\n                       :parent-list=\"tab.items\"\r\n                       :index-of-parent-list=\"itemIdx\"\r\n                       :parent-component=\"tab\"/>\r\n          </template>\r\n        </div>\r\n      </el-tab-pane>\r\n    </template>\r\n\r\n  </el-tabs>\r\n</template>\r\n\r\n<script>\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport _ from \"lodash\";\r\nimport {Tabs} from \"./Defaults\";\r\nimport EventBus from \"../../event-bus\";\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Tabs)\r\n\r\n    return {\r\n      emptyText: vjson.emptyText,\r\n      activeName: vjson.defaultActiveName,\r\n      tabPosition: vjson.tabPosition,\r\n      stretch: vjson.stretch,\r\n      lazy: vjson.lazy,\r\n      closable: vjson.closable,\r\n      addable: vjson.addable,\r\n      type: vjson.type,\r\n      loading: vjson.loading,\r\n      items: vjson.items,\r\n    }\r\n  },\r\n  methods: {\r\n    _getItemPermission(tabPanelVjson) {\r\n      let hidden = this.vjson.hidden ?? false\r\n\r\n      if (typeof window['$security']?.hasAnyPermissions === 'function' &&\r\n          _.isArray(tabPanelVjson.permissions) &&\r\n          _.size(tabPanelVjson.permissions) > 0) {\r\n\r\n        if (!window['$security']?.hasAnyPermissions(...tabPanelVjson.permissions)) {\r\n          hidden = true\r\n        }\r\n      }\r\n\r\n      return !hidden\r\n    },\r\n    _onTabClick() {\r\n      this.runEvent('tabClick', ...arguments)\r\n    },\r\n    _onTabChange() {\r\n      this.runEvent('tabChange', ...arguments)\r\n      this.$nextTick(() => {\r\n        EventBus.$emit('tabpanel-visible-change', undefined)\r\n      })\r\n    },\r\n    _onTabRemove() {\r\n      this.runEvent('tabRemove', ...arguments)\r\n    },\r\n    _onTabAdd() {\r\n      this.runEvent('tabAdd', ...arguments)\r\n    },\r\n    changeActive(name) {\r\n      this.activeName = name\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.yv-tab-scroll {\r\n  overflow-y: auto;\r\n}\r\n\r\n.yvan-main .yvan-content > .el-tabs--top.el-tabs--card > .el-tabs__content .el-tabs--top .el-tabs__item {\r\n  padding: 0 10px;\r\n  min-width: 120px;\r\n  text-align: center;\r\n}\r\n\r\n.el-tabs__item {\r\n  &:hover {\r\n    background-color: #c5c5c5;\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">tabs 属性</div>\r\n    <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"90px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"权限\" prop=\"permissions\">\r\n        <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"隐藏\" prop=\"hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"边线\" prop=\"borderArr\" v-if=\"!isRf\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"(formData.isBorder && formData.isBorder[0] === '1px')? 'primary':'default'\"\r\n                     @click=\"isBorder(0)\">上\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"(formData.isBorder && formData.isBorder[1] === '1px')? 'primary':'default'\"\r\n                     @click=\"isBorder(1)\">右\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"(formData.isBorder && formData.isBorder[2] === '1px')? 'primary':'default'\"\r\n                     @click=\"isBorder(2)\">下\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"(formData.isBorder && formData.isBorder[3] === '1px')? 'primary':'default'\"\r\n                     @click=\"isBorder(3)\">左\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"标签对齐\" prop=\"tabPosition\">\r\n        <el-select v-model=\"formData.tabPosition\" class=\"full-width-input\" clearable>\r\n          <el-option value=\"top\" label=\"top\"/>\r\n          <el-option value=\"right\" label=\"right\"/>\r\n          <el-option value=\"bottom\" label=\"bottom\"/>\r\n          <el-option value=\"left\" label=\"left\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <el-form-item label=\"类型\" prop=\"type\">\r\n        <el-select v-model=\"formData.type\" class=\"full-width-input\" clearable>\r\n          <el-option value=\"\" label=\"default\"/>\r\n          <el-option value=\"card\" label=\"card\"/>\r\n          <el-option value=\"border-card\" label=\"border-card\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <el-form-item label=\"标签拉伸\" prop=\"stretch\">\r\n        <el-switch v-model=\"formData.stretch\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"延迟渲染\" prop=\"hidden\">\r\n        <el-switch v-model=\"formData.lazy\"></el-switch>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"标签设置\"></el-form-item>\r\n      <el-form-item label-width=\"0\" class=\"panes-setting\">\r\n        <draggable tag=\"ul\" :list=\"vjson.items\" item-key=\"id\" :component-data=\"{class: 'enumeration-ul'}\"\r\n                   v-bind=\"{group:'panesGroup', ghostClass: 'ghost', handle: '.drag-option'}\"\r\n                   @end=\"onLiDragEnd\" @add=\"onLiDragAdd\" @update=\"onDragLiUpdate\">\r\n\r\n          <template #item=\"{ element: tpItem, index: tpIdx }\">\r\n            <li class=\"col-item enumeration\" :key=\"tpItem.id\">\r\n              <el-row>\r\n                <div class=\"enumeration-col default-col\">\r\n                  <el-icon class=\"drag-option\">\r\n                    <MoreFilled style=\"transform: rotate(90deg);\"/>\r\n                  </el-icon>\r\n                </div>\r\n                <div class=\"enumeration-col flex-col\">\r\n                  <el-input type=\"text\" v-model=\"tpItem.title\" style=\"width: 100%;\"></el-input>\r\n                </div>\r\n                <div class=\"enumeration-col\">\r\n                  <el-checkbox v-model=\"tpItem.scrollable\"/>\r\n                  <span class=\"text\">滚动</span>\r\n                </div>\r\n                <div class=\"enumeration-col\">\r\n                  <YvDesignerPermissions v-model=\"tpItem.permissions\"/>\r\n                </div>\r\n              </el-row>\r\n              <el-row>\r\n                <div class=\"enumeration-col default-col\">\r\n                  <span class=\"iconfont icon-shanchu1\" @click=\"deleteTabPane(tpIdx)\"></span>\r\n                </div>\r\n              </el-row>\r\n            </li>\r\n          </template>\r\n        </draggable>\r\n        <div>\r\n          <el-button link @click=\"addTabPane\" :icon=\"renderIcon('fa Plus')\" class=\"enumeration-add-btn\">添加标签\r\n          </el-button>\r\n        </div>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <yv-design-input-height :form-data=\"formData\" :designer=\"designer\"/>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport YvDesignInputHeight from \"./yv-design-input-height.vue\"\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport {addVJsonId} from \"../../yv-utils\"\r\nimport {MoreFilled} from '@element-plus/icons-vue'\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  components: {\r\n    MoreFilled, YvDesignInputHeight, YvDesignerPermissions\r\n  },\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        tabPosition: this.vjson.size,\r\n        disabled: this.vjson.disabled,\r\n        hidden: this.vjson.hidden,\r\n        loading: this.vjson.loading,\r\n        bind: this.vjson.bind,\r\n        isBorder: this.vjson.isBorder ?? []\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    addTabPane() {\r\n      this.vjson.items.push(addVJsonId({\r\n        title: '新标签',\r\n        items: []\r\n      }))\r\n      this.designer.emitHistoryChange()\r\n    },\r\n    deleteTabPane(tpIdx) {\r\n      if (_.size(this.vjson.items.length) === 1) {\r\n        system.showErrorDialog('最后一个标签无法删除')\r\n        return\r\n      }\r\n\r\n      this.vjson.items.splice(tpIdx, 1)\r\n      this.designer.emitHistoryChange()\r\n    },\r\n    onLiDragEnd() {\r\n    },\r\n    onLiDragAdd(evt) {\r\n    },\r\n    onDragLiUpdate() {\r\n    },\r\n    changeHeight() {\r\n\r\n    },\r\n    isBorder(type) {\r\n      if (!this.formData.isBorder) {\r\n        this.formData.isBorder = []\r\n      }\r\n      if (type === 0) {\r\n        if (this.formData.isBorder[0] === '0px') {\r\n          this.formData.isBorder[0] = '1px'\r\n        } else {\r\n          this.formData.isBorder[0] = '0px'\r\n        }\r\n      } else if (type === 1) {\r\n        if (this.formData.isBorder[1] === '0px') {\r\n          this.formData.isBorder[1] = '1px'\r\n        } else {\r\n          this.formData.isBorder[1] = '0px'\r\n        }\r\n      } else if (type === 2) {\r\n        if (this.formData.isBorder[2] === '0px') {\r\n          this.formData.isBorder[2] = '1px'\r\n        } else {\r\n          this.formData.isBorder[2] = '0px'\r\n        }\r\n      } else if (type === 3) {\r\n        if (this.formData.isBorder[3] === '0px') {\r\n          this.formData.isBorder[3] = '1px'\r\n        } else {\r\n          this.formData.isBorder[3] = '0px'\r\n        }\r\n      }\r\n    }\r\n  },\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n    padding-left: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n\r\n    ul.enumeration-ul {\r\n      padding: 0;\r\n      margin: 0;\r\n      width: 100%;\r\n\r\n      .enumeration {\r\n        margin-bottom: 5px;\r\n        display: flex;\r\n        flex-direction: row;\r\n\r\n        .enumeration-col {\r\n          &.default-col {\r\n            line-height: 32px;\r\n\r\n            i {\r\n              cursor: move;\r\n              margin: 0 5px 0 0;\r\n              position: relative;\r\n              top: 3px\r\n            }\r\n\r\n            span:nth-child(1) {\r\n              cursor: pointer;\r\n              margin: 0 5px 0 0\r\n            }\r\n          }\r\n\r\n          span.text {\r\n            position: relative;\r\n            top: -2px;\r\n            margin: 0 3px 0 2px\r\n          }\r\n\r\n          &.flex-col {\r\n            flex: 1;\r\n            padding-right: 3px;\r\n\r\n            input {\r\n              width: 100%;\r\n            }\r\n          }\r\n\r\n          .el-input__wrapper {\r\n            border-radius: 0;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    .enumeration-add-btn {\r\n      color: var(--main-color)\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <el-tabs :id=\"vjson.id\"\r\n           :key=\"vjson.id\"\r\n           v-model=\"defaultActiveName\"\r\n           :tab-position=\"vjson.tabPosition?vjson.tabPosition:'top'\"\r\n           :stretch=\"vjson.stretch\"\r\n           :closable=\"vjson.closable\"\r\n           :type=\"vjson.type\"\r\n           :class=\"[calcClass, 'yv-tabs']\"\r\n           :style=\"calcStyle\"\r\n           @tab-change=\"_onTabChange\"\r\n           @selectme.native=\"_selectMe\"\r\n           @click.stop=\"_selectMe\">\r\n\r\n    <template v-for=\"(tab, tabIdx) in vjson.items\">\r\n\r\n      <el-tab-pane :label=\"tab.title\" :name=\"'tab_' + tabIdx\"\r\n                   :class=\"['yv-tabpanel', tab.scrollable?'yv-tab-scroll':''] \" :lazy=\"vjson.lazy\">\r\n        <draggable :list=\"tab.items\" item-key=\"id\"\r\n                   v-bind=\"{group:'rowGroup', ghostClass: 'ghost'}\"\r\n                   class=\"yv-row-container\"\r\n                   @end=\"_onDragEnd\" @add=\"(evt)=>_onDragAdd(evt, vjson.items, vjson)\"\r\n                   @update=\"_onDragUpdate\" :move=\"_checkMove\">\r\n          <template #item=\"{ element: item, index: itemIdx }\">\r\n            <component :is=\"getDesignCmp(item)\" :key=\"item.id\"\r\n                       :vjson=\"item\"\r\n                       :vcxt=\"vcxt\"\r\n                       :designer=\"designer\"\r\n                       :parent-list=\"tab.items\"\r\n                       :index-of-parent-list=\"itemIdx\"\r\n                       :parent-component=\"vjson\"/>\r\n          </template>\r\n          <template #header>\r\n            <div class=\"no-widget-hint\" v-if=\"(tab.items ?? []).length === 0\">\r\n              拖拽组件放置于此处\r\n            </div>\r\n          </template>\r\n        </draggable>\r\n      </el-tab-pane>\r\n    </template>\r\n\r\n\r\n  </el-tabs>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonTabs from \"../../vjson/yv-vjson-tabs.vue\"\r\nimport YvDesignTabsProp from \"./yv-design-tabs-prop.vue\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  data() {\r\n    return {\r\n      defaultActiveName: this.vjson.defaultActiveName ?? 'tab_0'\r\n    }\r\n  },\r\n  watch: {\r\n    'vjson.defaultActiveName': {\r\n      handler(newVal) {\r\n        this.defaultActiveName = newVal\r\n      }\r\n    }\r\n  },\r\n  mounted() {\r\n    //\r\n  },\r\n  methods: {\r\n    _onTabChange(newTabName) {\r\n      this.vjson.defaultActiveName = newTabName\r\n      this.defaultActiveName = this.vjson.defaultActiveName\r\n\r\n      // 记录到历史步骤里\r\n      this.designer.emitHistoryChange()\r\n    },\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('tabs')\r\n    desc.setRuntime('YvVjsonTabs', YvVjsonTabs)\r\n    desc.setDesign('YvDesignTabs', this)\r\n    desc.setProp('YvDesignTabsProp', YvDesignTabsProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'tabs',\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'tabClick', desc: '标签点击'},\r\n      {name: 'tabChange', desc: '标签切换'},\r\n      {name: 'tabRemove', desc: '标签删除'},\r\n      {name: 'tabAdd', desc: '标签添加'},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>\r\n\r\n","<template>\r\n  <el-empty v-if=\"!!emptyText\" :style=\"calcStyleAndWidth\" :description=\"emptyText\">\r\n  </el-empty>\r\n  <div v-else-if=\"!hidden\"\r\n       :class=\"[calcClass, 'yv-split',  hiddenSplit?'hidden-split':'']\"\r\n       :style=\"calcStyleAndWidth\">\r\n    <split :direction=\"direction === 'vertical'?'vertical':'horizontal'\" :firstAreaDefaultSize=\"firstAreaDefaultSize\">\r\n      <split-area :size=\"defaultSize\" class=\"yv-split-area\">\r\n        <div class=\"split-header\" v-if=\"!!title1 || collapse1\">\r\n          <div class=\"title\" v-if=\"!!title1\">{{title1}}</div>\r\n          <div class=\"close\" v-if=\"!!collapse1\">\r\n            <el-icon class=\"icon-edit\">\r\n                <Close/>\r\n            </el-icon>\r\n          </div>\r\n        </div>\r\n        <template v-for=\"(item,itemIdx) in vjson.items[0].items\" :key=\"item.id\">\r\n          <component :is=\"getRuntimeCmp(item)\"\r\n                     :vjson=\"item\"\r\n                     :vcxt=\"vcxt\"\r\n                     :dialog-scope=\"dialogScope\"\r\n                     :parent-list=\"vjson.items[0].items\"\r\n                     :index-of-parent-list=\"itemIdx\"\r\n                     :parent-component=\"vjson\"/>\r\n        </template>\r\n      </split-area>\r\n      <split-area :size=\"100 - defaultSize\" class=\"yv-split-area\">\r\n        <div class=\"split-header\" v-if=\"!!title2 || collapse2\">\r\n          <div class=\"title\" v-if=\"!!title2\">{{title2}}</div>\r\n          <div class=\"close\" v-if=\"!!collapse2\">\r\n            <el-icon class=\"icon-edit\">\r\n              <Close/>\r\n            </el-icon>\r\n          </div>\r\n        </div>\r\n        <template v-for=\"(item,itemIdx) in vjson.items[1].items\" :key=\"item.id\">\r\n          <component :is=\"getRuntimeCmp(item)\"\r\n                     :vjson=\"item\"\r\n                     :vcxt=\"vcxt\"\r\n                     :dialog-scope=\"dialogScope\"\r\n                     :parent-list=\"vjson.items[1].items\"\r\n                     :index-of-parent-list=\"itemIdx\"\r\n                     :parent-component=\"vjson\"/>\r\n        </template>\r\n      </split-area>\r\n    </split>\r\n    <div style=\"width: 0;height: 0;\"></div>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport _ from \"lodash\"\r\nimport {Split} from \"./Defaults\"\r\nimport {Edit, Close, Coin} from '@element-plus/icons-vue'\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  components:{\r\n    Edit,Close\r\n  },\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Split)\r\n\r\n    return {\r\n      emptyText: vjson.emptyText,\r\n      direction: vjson.direction,\r\n      defaultSize: vjson.defaultSize ?? 50,\r\n      cls: vjson.cls,\r\n      items: vjson.items,\r\n      hiddenSplit: vjson.hiddenSplit ?? false,\r\n      firstAreaDefaultSize: vjson.firstAreaDefaultSize,\r\n      title1: vjson.title1,\r\n      title2: vjson.title2,\r\n      collapse1: vjson.collapse1,\r\n      collapse2: vjson.collapse2,\r\n    }\r\n  },\r\n  watch: {\r\n    direction: {\r\n      handler() {\r\n        debugger\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.yv-split > .split {\r\n  width: 100%;\r\n  .split-header{\r\n    position: relative;\r\n    padding-top:5px;\r\n    .title{\r\n      padding-left:10px;\r\n      font-size: 14px;\r\n      font-weight: bold;\r\n    }\r\n    .close{\r\n      position: absolute;\r\n      right:0;\r\n      top:3px;\r\n      border-radius: 12px;\r\n      width:24px;\r\n      height:24px;\r\n      text-align: center;\r\n      padding-top:1px;\r\n      border:1px solid rgba(0,0,0,0);\r\n      cursor: pointer;\r\n      .el-icon{\r\n        font-size: 14px;\r\n      }\r\n      &:hover{\r\n        border:1px solid #d8d8d8;\r\n      }\r\n    }\r\n  }\r\n  .split-vertical > .yv-row-container {\r\n    height: 100%;\r\n  }\r\n\r\n  .split-horizontal > .yv-row-container {\r\n    height: 100%;\r\n  }\r\n\r\n  & > .yv-split-area {\r\n    overflow: hidden;\r\n  }\r\n}\r\n\r\n.hidden-split.splitpanes--vertical > .splitpanes__splitter {\r\n  display: none;\r\n}\r\n\r\n.hidden-split.splitpanes--horizontal > .splitpanes__splitter {\r\n  display: none;\r\n}\r\n</style>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">split 属性</div>\r\n    <el-form ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"90px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"formData.reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"权限\" prop=\"permissions\">\r\n        <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item prop=\"horizontal\" label-width=\"0\">\r\n        <el-switch v-model=\"isVertical\" inactive-text=\"左右结构\" active-text=\"上下结构\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"初始大小\">\r\n        <el-input-number v-model=\"formData.firstAreaDefaultSize\" placeholder=\"左/上区域初始大小(单位:px)\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"隐藏\" prop=\"formData.hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"是否是卡片\" prop=\"formData.isCard\" label-width=\"90px\">\r\n        <el-switch v-model=\"formData.isCard\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"隐藏拖动条\" prop=\"formData.hiddenSplit\">\r\n        <el-switch v-model=\"formData.hiddenSplit\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"边线\" prop=\"isBorder\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[0] === '1px'? 'primary':'default'\"\r\n                     @click=\"isBorder(0)\">上\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[1] === '1px'? 'primary':'default'\"\r\n                     @click=\"isBorder(1)\">右\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[2] === '1px'? 'primary':'default'\"\r\n                     @click=\"isBorder(2)\">下\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[3] === '1px'? 'primary':'default'\"\r\n                     @click=\"isBorder(3)\">左\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"标题1\" prop=\"formData.title1\">\r\n        <el-input v-model=\"formData.title1\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"标题2\" prop=\"formData.title2\">\r\n        <el-input v-model=\"formData.title2\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item prop=\"formData.collapse1\" label=\"允许隐藏1\" label-width=\"100\">\r\n        <el-switch v-model=\"formData.collapse1\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item prop=\"formData.collapse2\" label=\"允许隐藏2\" label-width=\"100\">\r\n        <el-switch v-model=\"formData.collapse2\"></el-switch>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <yv-design-input-height :form-data=\"formData\" :designer=\"designer\"/>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport {MoreFilled} from '@element-plus/icons-vue'\r\nimport YvDesignInputHeight from \"./yv-design-input-height.vue\"\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  components: {\r\n    MoreFilled, YvDesignInputHeight, YvDesignerPermissions\r\n  },\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        defaultSize: this.vjson.defaultSize ?? 50,\r\n        reference: this.vjson.reference,\r\n        direction: this.vjson.direction,\r\n        hiddenSplit: this.vjson.hiddenSplit,\r\n        hidden: this.vjson.hidden,\r\n        isBorder: this.vjson.isBorder?? []\r\n      },\r\n    }\r\n  },\r\n  methods: {\r\n    isBorder(type){\r\n      if(!this.formData.isBorder) {\r\n        this.formData.isBorder = []\r\n      }\r\n      if(type===0){\r\n        if(this.formData.isBorder[0]==='0px') {\r\n          this.formData.isBorder[0]='1px'\r\n        }else{\r\n          this.formData.isBorder[0]='0px'\r\n        }\r\n      }else if(type===1){\r\n        if(this.formData.isBorder[1]==='0px') {\r\n          this.formData.isBorder[1]='1px'\r\n        }else{\r\n          this.formData.isBorder[1]='0px'\r\n        }\r\n      }else if(type===2){\r\n        if(this.formData.isBorder[2]==='0px') {\r\n          this.formData.isBorder[2]='1px'\r\n        }else{\r\n          this.formData.isBorder[2]='0px'\r\n        }\r\n      }else if(type===3){\r\n        if(this.formData.isBorder[3]==='0px') {\r\n          this.formData.isBorder[3]='1px'\r\n        }else{\r\n          this.formData.isBorder[3]='0px'\r\n        }\r\n      }\r\n    }\r\n  },\r\n  computed: {\r\n    isVertical: {\r\n      get() {\r\n        return (this.formData.direction === 'vertical')\r\n      },\r\n      set(newVal) {\r\n        if (newVal) {\r\n          this.formData.direction = 'vertical'\r\n        } else {\r\n          this.formData.direction = 'horizontal'\r\n        }\r\n        delete this.formData.defaultSize\r\n      }\r\n    }\r\n  },\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    },\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n.yv-split.yv-card{\r\n  margin:10px;\r\n  background: #fff;\r\n  border:1px solid var(--el-menu-border-color)\r\n}\r\n</style>","<template>\r\n  <div :id=\"vjson.id\"\r\n       :class=\"[calcClass, vjson.hiddenSplit?'hidden-split':'', 'yv-split']\"\r\n       :style=\"calcStyle\"\r\n       @selectme.native=\"_selectMe\"\r\n       @click.stop=\"_selectMe\">\r\n    <split\r\n        :direction=\"vjson.direction\"\r\n        ref=\"_inner\"\r\n        @onDragEnd=\"_onResized\"\r\n        :firstAreaDefaultSize=\"firstAreaDefaultSize\"\r\n    >\r\n      <split-area :size=\"defaultSize\" class=\"yv-split-area\">\r\n        <div v-if=\"vjson.title1\">{{vjson.title1}}</div>\r\n        <draggable :list=\"vjson.items[0].items\" item-key=\"id\"\r\n                   v-bind=\"{group:'rowGroup', ghostClass: 'ghost'}\"\r\n                   class=\"yv-row-container\"\r\n                   @end=\"_onDragEnd\" @add=\"(evt)=>_onDragAdd(evt, vjson.items[0].items, vjson)\"\r\n                   @update=\"_onDragUpdate\" :move=\"_checkMove\">\r\n          <template #item=\"{ element: item, index: itemIdx }\">\r\n            <component :is=\"getDesignCmp(item)\" :key=\"item.id\"\r\n                       :vjson=\"item\"\r\n                       :vcxt=\"vcxt\"\r\n                       :designer=\"designer\"\r\n                       :parent-list=\"vjson.items[0].items\"\r\n                       :index-of-parent-list=\"itemIdx\"\r\n                       :parent-component=\"vjson\"/>\r\n          </template>\r\n          <template #header>\r\n            <div class=\"no-widget-hint\" v-if=\"(vjson.items[0]?.items ?? []).length === 0\">\r\n              拖拽组件放置于此处\r\n            </div>\r\n          </template>\r\n        </draggable>\r\n      </split-area>\r\n      <split-area :size=\"100 - defaultSize\" class=\"yv-split-area\">\r\n        <div v-if=\"vjson.title2\">{{vjson.title2}}</div>\r\n        <draggable :list=\"vjson.items[1].items\" item-key=\"id\"\r\n                   v-bind=\"{group:'rowGroup', ghostClass: 'ghost'}\"\r\n                   class=\"yv-row-container\"\r\n                   @end=\"_onDragEnd\" @add=\"(evt)=>_onDragAdd(evt, vjson.items[1].items, vjson)\"\r\n                   @update=\"_onDragUpdate\" :move=\"_checkMove\">\r\n          <template #item=\"{ element: item, index: itemIdx }\">\r\n            <component :is=\"getDesignCmp(item)\" :key=\"item.id\"\r\n                       :vjson=\"item\"\r\n                       :vcxt=\"vcxt\"\r\n                       :designer=\"designer\"\r\n                       :parent-list=\"vjson.items[1].items\"\r\n                       :index-of-parent-list=\"itemIdx\"\r\n                       :parent-component=\"vjson\"/>\r\n          </template>\r\n          <template #header>\r\n            <div class=\"no-widget-hint\" v-if=\"(vjson.items[1]?.items ?? []).length === 0\">\r\n              拖拽组件放置于此处\r\n            </div>\r\n          </template>\r\n        </draggable>\r\n      </split-area>\r\n\r\n    </split>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonSplit from \"../../vjson/yv-vjson-split.vue\"\r\nimport YvDesignSplitProp from \"./yv-design-split-prop.vue\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  data() {\r\n    const size = this.vjson.defaultSize ?? 50\r\n    return {\r\n      defaultSize: size,\r\n      firstAreaDefaultSize: this.vjson.firstAreaDefaultSize,\r\n    }\r\n  },\r\n  computed: {\r\n  },\r\n  watch: {\r\n    'vjson.defaultSize': {\r\n      handler(newVal) {\r\n        const instance = this.$refs._inner?.data?.instance\r\n        if (instance) {\r\n          instance.setSizes([newVal, 100 - newVal])\r\n        }\r\n      }\r\n    },\r\n    'vjson.firstAreaDefaultSize': {\r\n      handler() {\r\n        this.$data.firstAreaDefaultSize = this.vjson.firstAreaDefaultSize;\r\n        this.$refs._inner?.reset()\r\n      }\r\n    },\r\n  },\r\n  mounted() {\r\n    //\r\n  },\r\n  methods: {\r\n    _onResized([panelSize1, panelSize2]) {\r\n      if (panelSize1) {\r\n        this.vjson.defaultSize = parseInt(panelSize1)\r\n        this.defaultSize = this.vjson.defaultSize\r\n\r\n        // 记录到历史步骤里\r\n        this.designer.emitHistoryChange()\r\n      }\r\n    },\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('split')\r\n    desc.setRuntime('YvVjsonSplit', YvVjsonSplit)\r\n    desc.setDesign('YvDesignSplit', this)\r\n    desc.setProp('YvDesignSplitProp', YvDesignSplitProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'split',\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'title1', desc: '第一个面板标题', bindable: true},\r\n      {name: 'title2', desc: '第二个面板标题', bindable: true},\r\n      {name: 'collapse1', desc: '第一个面板是否允许隐藏', bindable: true},\r\n      {name: 'collapse2', desc: '第二个面板是否允许隐藏', bindable: true},\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.yv-design-mode {\r\n  .yv-split > .split {\r\n    width: 100%;\r\n    border: dashed 1px black;\r\n    box-sizing: border-box;\r\n\r\n    .split-vertical > .yv-row-container {\r\n      height: 100%;\r\n    }\r\n\r\n    .split-horizontal > .yv-row-container {\r\n      height: 100%;\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">checkbox 属性</div>\r\n    <el-form :model=\"formData\" :rules=\"rules\" label-position=\"right\" label-width=\"100px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"modal\" prop=\"bindValue\">\r\n        <el-input v-model=\"bindValue\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"uiKey\" prop=\"uiKey\">\r\n        <el-input v-model=\"formData.uiKey\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"隐藏\" prop=\"formData.hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"文本\" prop=\"formData.fieldLabel\">\r\n        <el-input v-model=\"formData.fieldLabel\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"宽度权重\" prop=\"weight\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"(formData.weight === 1 || !formData.weight)? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=1\">1\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 2? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=2\">2\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 3? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=3\">3\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 4? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=4\">4\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 5? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=5\">5\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.weight === 6? 'primary':'default'\"\r\n                     @click=\"()=>formData.weight=6\">6\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"标签宽度\" prop=\"formData.text\">\r\n        <el-input v-model=\"formData.labelWidth\" type=\"text\" placeholder=\"auto\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"尺寸\" prop=\"formData.size\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"formData.size === 'large'? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='large'\">大\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"(formData.size === 'default' || !formData.size)? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='default'\">中\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.size === 'small'? 'primary':'default'\"\r\n                     @click=\"()=>formData.size='small'\">小\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"勾选后文本\" prop=\"formData.activeText\">\r\n        <el-input v-model=\"formData.activeText\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"未勾选文本\" prop=\"formData.inactiveText\">\r\n        <el-input v-model=\"formData.inactiveText\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"勾选值类型\" prop=\"formData.convType\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"formData.convType === 'bool'? 'primary':'default'\"\r\n                     @click=\"()=>formData.convType='bool'\">布尔\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"(formData.convType === 'num')? 'primary':'default'\"\r\n                     @click=\"()=>formData.convType='num'\">数字\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.convType === 'str'? 'primary':'default'\"\r\n                     @click=\"()=>formData.convType='str'\">字符串\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"勾选后值\" v-if=\"formData.convType === 'str' || formData.convType === 'num'\" prop=\"formData.activeValue\">\r\n        <el-input v-model=\"formData.activeValue\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"未勾选值\" v-if=\"formData.convType === 'str' || formData.convType === 'num'\" prop=\"formData.inactiveValue\">\r\n        <el-input v-model=\"formData.inactiveValue\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"禁用\" prop=\"formData.disabled\">\r\n        <el-switch v-model=\"formData.disabled\"></el-switch>\r\n      </el-form-item>\r\n      <yv-design-input-width :designer=\"designer\" :form-data=\"formData\"/>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport VJsonContext from \"../../vjson/VJsonContext\";\r\nimport Designer from \"../designer\";\r\nimport basePropMix from \"./basePropMix\";\r\nimport YvDesignInputWidth from \"./yv-design-input-width.vue\";\r\n\r\nexport default {\r\n  components: {YvDesignInputWidth},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        text: this.vjson.text,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        loading: this.vjson.loading ?? false,\r\n        bind: this.vjson.bind\r\n      },\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n  .property{\r\n    height: 100%;\r\n    width:100%;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n    .title{\r\n      width:100%;\r\n      height: 38px;\r\n      overflow: hidden;\r\n      border-bottom: 1px solid #e1e1e1;\r\n      display: flex;\r\n      flex-direction: row;\r\n      justify-content: space-between;\r\n      line-height: 38px;\r\n      text-overflow: ellipsis;\r\n      margin-bottom: 10px;\r\n    }\r\n    form{\r\n      flex:1;\r\n      overflow: auto;\r\n      .el-divider--horizontal{\r\n        margin:10px 0;\r\n      }\r\n      .el-form-item{\r\n        padding-right: 10px;\r\n      }\r\n      .el-form-item--default{\r\n        margin-bottom:5px;\r\n        .el-input__wrapper{\r\n          border-radius: 0;\r\n        }\r\n      }\r\n    }\r\n  }\r\n</style>","<template>\r\n  <yv-vjson-form-item v-if=\"!hidden\"\r\n                      ref=\"_formItem\"\r\n                      :vjson=\"vjson\"\r\n                      :vcxt=\"vcxt\"\r\n                      :rules=\"rules\"\r\n                      :dialog-scope=\"dialogScope\"\r\n                      :parentComponent=\"parentComponent\"\r\n                      :parentList=\"parentList\"\r\n                      :indexOfParentList=\"indexOfParentList\"\r\n                      class=\"yv-checkbox\">\r\n    <el-switch\r\n        :modelValue=\"checkboxBoolValue\"\r\n        :disabled=\"disabled\"\r\n        :size=\"size\"\r\n        :active-text=\"activeText\" :inactive-text=\"inactiveText\"\r\n        @update:modelValue=\"_onCheckboxValueChange\"\r\n        @focus=\"_onFocus\" @blur=\"_onBlur\"\r\n        @change=\"_onChange\"/>\r\n  </yv-vjson-form-item>\r\n</template>\r\n\r\n<script>\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport _ from \"lodash\"\r\nimport {Checkbox} from \"./Defaults\"\r\nimport {evalGetBind, evalSetBind, getListener} from '../yv-utils'\r\nimport YvVjsonFormItem from \"./yv-vjson-form-item.vue\"\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  components: {YvVjsonFormItem},\r\n\r\n  data() {\r\n    const data = _.defaults(this.vjson, Checkbox)\r\n    const rules = this._getFormItemBaseRule(data)\r\n\r\n    if (typeof data.bind === \"string\") {\r\n      data.bind = {\r\n        value: data.bind\r\n      }\r\n    }\r\n\r\n    return {\r\n      fieldLabel: data.fieldLabel,\r\n      rules: rules,\r\n      disabled: data.disabled,\r\n      size: data.size,\r\n      activeText: data.activeText,\r\n      inactiveText: data.inactiveText,\r\n      hidden: data.hidden,\r\n      bind: data.bind,\r\n      convType: data.convType,\r\n      labelWidth: data.labelWidth\r\n    }\r\n  },\r\n  computed: {\r\n    checkboxBoolValue() {\r\n      // let value = false\r\n      // let bindProp = this.bind?.value\r\n      // if (_.startsWith(bindProp, '{') && _.endsWith(bindProp, '}')) {\r\n      //   bindProp = bindProp.substring(1, bindProp.length - 1)\r\n      //   value = _.get(this.vcxt.scope.$data, bindProp)\r\n      // }\r\n      const value = evalGetBind(this, 'value') ?? false\r\n\r\n      if (this.convType === 'bool') {\r\n        if (`${value}` === 'true') {\r\n          return true\r\n        }\r\n\r\n      } else if (this.convType === 'num') {\r\n        if (value === parseInt(this.vjson.activeValue ?? '1')) {\r\n          return true\r\n        }\r\n\r\n      } else if (this.convType === 'str') {\r\n        if (`${value}` === this.vjson.activeValue) {\r\n          return true\r\n        }\r\n      }\r\n      return false\r\n    },\r\n  },\r\n  watch: {\r\n    fieldLabel: {\r\n      handler(newVal) {\r\n        this.$refs._formItem.fieldLabel = newVal\r\n      }\r\n    },\r\n    labelWidth: {\r\n      handler(newVal) {\r\n        this.vjson.labelWidth = newVal\r\n      }\r\n    },\r\n  },\r\n  methods: {\r\n    _onCheckboxValueChange(boolValue) {\r\n      // let bindValue = this.bind?.value\r\n      // if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n      //   bindValue = bindValue.substring(1, bindValue.length - 1)\r\n      //\r\n      //\r\n      //\r\n      //   _.set(this.vcxt.scope.$data, bindValue, newValue)\r\n      // }\r\n      let newValue = boolValue\r\n      if (this.convType === 'bool') {\r\n        if (boolValue) {\r\n          newValue = true\r\n        } else {\r\n          newValue = false\r\n        }\r\n\r\n      } else if (this.convType === 'num') {\r\n        if (boolValue) {\r\n          newValue = parseInt(this.vjson.activeValue ?? '1')\r\n        } else {\r\n          newValue = parseInt(this.vjson.inactiveValue ?? '0')\r\n        }\r\n\r\n      } else if (this.convType === 'str') {\r\n        if (boolValue) {\r\n          newValue = this.vjson.activeValue\r\n        } else {\r\n          newValue = this.vjson.inactiveValue\r\n        }\r\n      }\r\n\r\n      evalSetBind(this, 'value', newValue)\r\n    },\r\n    _onChange(e) {\r\n      this.runEvent('change', ...arguments)\r\n      // getListener(this.vjson, 'change', this.vcxt)(this, this.vcxt.scope, e)\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <yv-design-form-item :designer=\"designer\" :vjson=\"vjson\" :vcxt=\"vcxt\"\r\n                       :parent-component=\"parentComponent\" :parent-list=\"parentList\"\r\n                       :index-of-parent-list=\"indexOfParentList\"\r\n                       class=\"yv-checkbox\"\r\n                       @selectme.native=\"_selectMe\"\r\n                       @click.stop=\"_selectMe\">\r\n    <el-switch :disabled=\"vjson.disabled\" :readonly=\"vjson.readonly\"\r\n               :size=\"vjson.size\"\r\n               :active-text=\"vjson.activeText\" :inactive-text=\"vjson.inactiveText\"\r\n               :active-value=\"vjson.activeValue\" :inactive-value=\"vjson.inActiveValue\">\r\n    </el-switch>\r\n  </yv-design-form-item>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignFormItem from './yv-design-form-item.vue'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvDesignCheckboxProp from \"./yv-design-checkbox-prop.vue\"\r\nimport YvVjsonCheckbox from \"../../vjson/yv-vjson-checkbox.vue\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n    YvDesignFormItem,\r\n  },\r\n  computed: {},\r\n  created() {\r\n  },\r\n\r\n  mounted() {\r\n  },\r\n\r\n  beforeUnmount() {\r\n  },\r\n\r\n  methods: {},\r\n\r\n  install(Vue) {\r\n    const desc = registeComponent('checkbox')\r\n    desc.setRuntime('YvVjsonCheckbox', YvVjsonCheckbox)\r\n    desc.setDesign('YvDesignCheckbox', this)\r\n    desc.setProp('YvDesignCheckboxProp', YvDesignCheckboxProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'checkbox',\r\n        vjson.fieldLabel,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'fieldLabel', desc: '标签名', bindable: true},\r\n      {name: 'size', desc: '大小', bindable: true},\r\n      {name: 'disabled', desc: '禁用', bindable: true},\r\n      {name: 'readonly', desc: '只读', bindable: true},\r\n      {name: 'hidden', desc: '隐藏', bindable: true},\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'focus', desc: '获取焦点时触发', events: [{name: 'e'}]},\r\n      {name: 'blur', desc: '失去焦点触发', events: [{name: 'e'}]},\r\n      {name: 'change', desc: '更改时触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">divider 属性</div>\r\n    <el-form :model=\"formData\" :rules=\"rules\" label-position=\"right\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"uiKey\" prop=\"uiKey\">\r\n        <el-input v-model=\"formData.uiKey\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"权限\" prop=\"permissions\">\r\n        <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"隐藏\" prop=\"formData.hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"文本\" prop=\"formData.content\">\r\n        <el-input v-model=\"formData.content\" type=\"content\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"方向\" prop=\"formData.direction\">\r\n        <el-select v-model=\"formData.direction\" class=\"full-width-input\" clearable>\r\n          <el-option value=\"horizontal\" label=\"横向\"/>\r\n          <el-option value=\"vertical\" label=\"纵向\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <el-form-item label=\"线条\" prop=\"formData.borderStyle\">\r\n        <el-select v-model=\"formData.borderStyle\" class=\"full-width-input\" clearable>\r\n          <el-option value=\"solid\" label=\"线条\"/>\r\n          <el-option value=\"dotted\" label=\"虚线\"/>\r\n          <el-option value=\"none\" label=\"无\"/>\r\n          <el-option value=\"info\" label=\"信息\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <el-form-item label=\"对齐\" prop=\"formData.contentPosition\">\r\n        <el-select v-model=\"formData.contentPosition\" class=\"full-width-input\" clearable>\r\n          <el-option value=\"left\" label=\"左\"/>\r\n          <el-option value=\"right\" label=\"右\"/>\r\n          <el-option value=\"center\" label=\"居中\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {toRaw} from 'vue'\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  mixins: [basePropMix, YvDesignerPermissions],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        text: this.vjson.text,\r\n        type: this.vjson.type,\r\n        plain: this.vjson.plain ?? false,\r\n        round: this.vjson.round ?? false,\r\n        circle: this.vjson.circle ?? false,\r\n        link: this.vjson.link ?? false,\r\n        iconCls: this.vjson.iconCls,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        loading: this.vjson.loading ?? false,\r\n        bind: this.vjson.bind\r\n      },\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <el-divider v-if=\"!hidden\"\r\n              :direction=\"direction??'horizontal'\"\r\n              :border-style=\"borderStyle??'solid'\"\r\n              :content-position=\"contentPosition??'center'\"\r\n              :class=\"['yv-divider', calcClass]\"\r\n              @mousedown.stop=\"_onClick\">\r\n    {{ content }}\r\n  </el-divider>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {Divider} from './Defaults'\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Divider)\r\n\r\n    return {\r\n      hidden: vjson.hidden,\r\n      direction: vjson.direction,\r\n      borderStyle: vjson.borderStyle,\r\n      contentPosition: vjson.contentPosition,\r\n      content: vjson.content,\r\n    }\r\n  },\r\n  computed: {},\r\n  methods: {\r\n    startsWith: _.startsWith,\r\n    _onClick(evt) {\r\n      debugger\r\n      this.runEvent('click', ...arguments)\r\n      // getListener(this.vjson, 'click', this.vcxt)(this, this.vcxt.scope)\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <el-divider :id=\"vjson.id\"\r\n              :key=\"vjson.id\"\r\n              :direction=\"vjson.direction??'horizontal'\"\r\n              :border-style=\"vjson.borderStyle??'solid'\"\r\n              :content-position=\"vjson.contentPosition??'center'\"\r\n              :class=\"['yv-divider', customClass]\"\r\n              @selectme.native=\"_selectMe\"\r\n              @click.stop=\"_selectMe\">\r\n    {{ vjson.content }}\r\n  </el-divider>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport YvDesignDividerProp from \"./yv-design-divider-prop.vue\"\r\nimport YvVjsonDivider from \"../../vjson/yv-vjson-divider.vue\"\r\nimport {getDescDefaults, registeComponent} from '../yv-designer-desc'\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  computed: {},\r\n  created() {\r\n  },\r\n  mounted() {\r\n  },\r\n  beforeUnmount() {\r\n  },\r\n  methods: {\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('divider')\r\n    desc.setRuntime('YvVjsonDivider', YvVjsonDivider)\r\n    desc.setDesign('YvDesignDivider', this)\r\n    desc.setProp('YvDesignDividerProp', YvDesignDividerProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'divider',\r\n        vjson.content,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'click', desc: '点击时触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.yv-design-mode {\r\n  .el-divider--horizontal{\r\n    margin: 0;\r\n    padding: 12px 0;\r\n  }\r\n  .el-divider__text.is-left,.el-divider__text.is-center,.el-divider__text.is-right{\r\n    transform: none;\r\n    top:-10px\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">divider_formitem 属性</div>\r\n    <el-form :model=\"formData\" :rules=\"rules\" label-position=\"right\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"uiKey\" prop=\"uiKey\">\r\n        <el-input v-model=\"formData.uiKey\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"权限\" prop=\"permissions\">\r\n        <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"隐藏\" prop=\"formData.hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"文本\" prop=\"formData.content\">\r\n        <el-input v-model=\"formData.content\" type=\"content\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"方向\" prop=\"formData.direction\">\r\n        <el-select v-model=\"formData.direction\" class=\"full-width-input\" clearable>\r\n          <el-option value=\"horizontal\" label=\"横向\"/>\r\n          <el-option value=\"vertical\" label=\"纵向\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <el-form-item label=\"线条\" prop=\"formData.borderStyle\">\r\n        <el-select v-model=\"formData.borderStyle\" class=\"full-width-input\" clearable>\r\n          <el-option value=\"solid\" label=\"线条\"/>\r\n          <el-option value=\"dotted\" label=\"虚线\"/>\r\n          <el-option value=\"none\" label=\"无\"/>\r\n          <el-option value=\"info\" label=\"信息\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <el-form-item label=\"对齐\" prop=\"formData.contentPosition\">\r\n        <el-select v-model=\"formData.contentPosition\" class=\"full-width-input\" clearable>\r\n          <el-option value=\"left\" label=\"左\"/>\r\n          <el-option value=\"right\" label=\"右\"/>\r\n          <el-option value=\"center\" label=\"居中\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {toRaw} from 'vue'\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  mixins: [basePropMix, YvDesignerPermissions],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        text: this.vjson.text,\r\n        type: this.vjson.type,\r\n        plain: this.vjson.plain ?? false,\r\n        round: this.vjson.round ?? false,\r\n        circle: this.vjson.circle ?? false,\r\n        link: this.vjson.link ?? false,\r\n        iconCls: this.vjson.iconCls,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        loading: this.vjson.loading ?? false,\r\n        bind: this.vjson.bind\r\n      },\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <el-divider v-if=\"!hidden\"\r\n              direction=\"vertical\"\r\n              :border-style=\"borderStyle??'solid'\"\r\n              :content-position=\"contentPosition??'center'\"\r\n              :class=\"['yv-divider-formitem', calcClass]\"\r\n              @mousedown.stop=\"_onClick\">\r\n    {{ content }}\r\n  </el-divider>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {Divider, DividerFormitem} from './Defaults'\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, DividerFormitem)\r\n\r\n    return {\r\n      hidden: vjson.hidden,\r\n      direction: vjson.direction,\r\n      borderStyle: vjson.borderStyle,\r\n      contentPosition: vjson.contentPosition,\r\n      content: vjson.content,\r\n    }\r\n  },\r\n  computed: {},\r\n  methods: {\r\n    startsWith: _.startsWith,\r\n    _onClick(evt) {\r\n      debugger\r\n      this.runEvent('click', ...arguments)\r\n      // getListener(this.vjson, 'click', this.vcxt)(this, this.vcxt.scope)\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style>\r\n.yv-divider-formitem {\r\n  height: auto;\r\n}\r\n</style>","<template>\r\n  <el-divider :id=\"vjson.id\"\r\n              :key=\"vjson.id\"\r\n              direction=\"vertical\"\r\n              :border-style=\"vjson.borderStyle??'solid'\"\r\n              :content-position=\"vjson.contentPosition??'center'\"\r\n              :class=\"['yv-divider-formitem', customClass]\"\r\n              @selectme.native=\"_selectMe\"\r\n              @click.stop=\"_selectMe\">\r\n    {{ vjson.content }}\r\n  </el-divider>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport YvDesignDividerFormitemProp from \"./yv-design-divider-formitem-prop.vue\"\r\nimport YvVjsonDividerFormitem from \"../../vjson/yv-vjson-divider-formitem.vue\"\r\nimport {getDescDefaults, registeComponent} from '../yv-designer-desc'\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  computed: {},\r\n  created() {\r\n  },\r\n  mounted() {\r\n  },\r\n  beforeUnmount() {\r\n  },\r\n  methods: {},\r\n  install(Vue) {\r\n    const desc = registeComponent('divider_formitem')\r\n    desc.setRuntime('YvVjsonDividerFormitem', YvVjsonDividerFormitem)\r\n    desc.setDesign('YvDesignDividerFormitem', this)\r\n    desc.setProp('YvDesignDividerFormitemProp', YvDesignDividerFormitemProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'divider_formitem',\r\n        vjson.content,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'click', desc: '点击时触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.yv-design-mode {\r\n  .yv-divider-formitem {\r\n    height: auto;\r\n    padding-right: 10px;\r\n  }\r\n\r\n  .el-divider__text.is-left, .el-divider__text.is-center, .el-divider__text.is-right {\r\n    transform: none;\r\n    top: -10px\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"property tree-property\">\r\n    <div class=\"title\">树属性</div>\r\n    <el-tabs>\r\n      <el-tab-pane label=\"基本\">\r\n        <el-form :model=\"formData\" :rules=\"rules\" label-position=\"right\" label-width=\"80px\" size=\"default\"\r\n                 @submit.native.prevent>\r\n          <el-form-item label=\"reference\" prop=\"reference\">\r\n            <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"uiBlock\" prop=\"uiBlock\">\r\n            <el-input v-model=\"formData.uiBlock\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"权限\" prop=\"permissions\">\r\n            <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <el-form-item label=\"隐藏\">\r\n            <el-switch v-model=\"formData.hidden\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"自动载入数据\" label-width=\"110px\" prop=\"hidden\">\r\n            <el-switch v-model=\"formData.autoLoad\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"启用过滤\">\r\n            <el-switch v-model=\"formData.enableFilter\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"刷新按钮\">\r\n            <el-switch v-model=\"formData.enableRefresh\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"展开按钮\">\r\n            <el-switch v-model=\"formData.enableExpandedAll\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"选择框\">\r\n            <el-switch v-model=\"formData.checkbox\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"级联选择\">\r\n            <el-switch :model-value=\"!formData.checkStrictly\" @change=\"v=>(formData.checkStrictly = !v)\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"点击展开\">\r\n            <el-switch v-model=\"formData.expandOnClickNode\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"维持展开状态\" label-width=\"115px\">\r\n            <el-switch v-model=\"formData.keepExpandKeys\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"点击选中\">\r\n            <el-switch v-model=\"formData.checkOnClickNode\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"自动展开父节点\" label-width=\"115px\">\r\n            <el-switch v-model=\"formData.autoExpandParent\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"是否是卡片\" prop=\"isCard\" label-width=\"90px\">\r\n            <el-switch v-model=\"formData.isCard\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"边线\" prop=\"isBorder\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[0] === '1px'? 'primary':'default'\"\r\n                         @click=\"isBorder(0)\">上\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[1] === '1px'? 'primary':'default'\"\r\n                         @click=\"isBorder(1)\">右\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[2] === '1px'? 'primary':'default'\"\r\n                         @click=\"isBorder(2)\">下\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.isBorder && formData.isBorder[3] === '1px'? 'primary':'default'\"\r\n                         @click=\"isBorder(3)\">左\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <yv-design-input-height :form-data=\"formData\" :designer=\"designer\"/>\r\n        </el-form>\r\n      </el-tab-pane>\r\n      <YvDesignDatasource :formData=\"formData\" :designer=\"designer\" :vjson=\"vjson\" :vcxt=\"vcxt\">\r\n        <div>\r\n          <label>不构建Tree</label>\r\n          <el-switch v-model=\"dataSource.noBuildTree\"></el-switch>\r\n        </div>\r\n        <el-divider>字段</el-divider>\r\n        <el-form-item label=\"ID字段\">\r\n          <el-input v-model=\"dataSource.idField\" type=\"text\" clearable></el-input>\r\n        </el-form-item>\r\n        <el-form-item label=\"父级字段\">\r\n          <el-input v-model=\"dataSource.parentField\" type=\"text\" clearable></el-input>\r\n        </el-form-item>\r\n        <el-form-item label=\"选中字段\">\r\n          <el-input v-model=\"dataSource.checkField\" type=\"text\" clearable></el-input>\r\n        </el-form-item>\r\n        <el-form-item label=\"显示字段\">\r\n          <el-input v-model=\"dataSource.textField\" type=\"text\" clearable></el-input>\r\n        </el-form-item>\r\n      </YvDesignDatasource>\r\n    </el-tabs>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash';\r\nimport YvDesignInputHeight from \"./yv-design-input-height.vue\"\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignInputExpress from \"./yv-design-input-express.vue\"\r\nimport YvDesignDatasource from \"./yv-design-datasource.vue\"\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  components: {\r\n    YvDesignInputHeight,\r\n    YvDesignInputExpress,\r\n    YvDesignDatasource,\r\n    YvDesignerPermissions\r\n  },\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      dataSQL: \"\",\r\n      showModule: false,\r\n      dataSQLByUrl: \"\",\r\n      showModuleByUrl: false,\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        isBorder: this.vjson.isBorder ?? []\r\n      },\r\n    }\r\n  },\r\n  methods: {\r\n    isBorder(type) {\r\n      if (!this.formData.isBorder) {\r\n        this.formData.isBorder = []\r\n      }\r\n      if (type === 0) {\r\n        if (this.formData.isBorder[0] === '0px') {\r\n          this.formData.isBorder[0] = '1px'\r\n        } else {\r\n          this.formData.isBorder[0] = '0px'\r\n        }\r\n      } else if (type === 1) {\r\n        if (this.formData.isBorder[1] === '0px') {\r\n          this.formData.isBorder[1] = '1px'\r\n        } else {\r\n          this.formData.isBorder[1] = '0px'\r\n        }\r\n      } else if (type === 2) {\r\n        if (this.formData.isBorder[2] === '0px') {\r\n          this.formData.isBorder[2] = '1px'\r\n        } else {\r\n          this.formData.isBorder[2] = '0px'\r\n        }\r\n      } else if (type === 3) {\r\n        if (this.formData.isBorder[3] === '0px') {\r\n          this.formData.isBorder[3] = '1px'\r\n        } else {\r\n          this.formData.isBorder[3] = '0px'\r\n        }\r\n      }\r\n    }\r\n  },\r\n  computed: {\r\n    dataSource() {\r\n      return this.formData.dataSource ?? {}\r\n    }\r\n  },\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.property.tree-property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  .el-tabs {\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n\r\n    .el-tabs__header {\r\n      .el-tabs__item {\r\n        padding: 0 10px;\r\n      }\r\n\r\n      .el-tabs__item.is-active, .el-tabs__item:hover {\r\n        color: #000;\r\n      }\r\n\r\n      .el-tabs__active-bar {\r\n        background-color: var(--main-color)\r\n      }\r\n    }\r\n\r\n    .el-tabs__content {\r\n      flex: 1;\r\n      overflow: auto;\r\n\r\n      .enumeration-title {\r\n        color: #333;\r\n        font-size: 14px;\r\n        margin-bottom: 5px;\r\n      }\r\n\r\n      .enumeration {\r\n        margin-bottom: 5px;\r\n        display: flex;\r\n        flex-direction: row;\r\n\r\n        .enumeration-col {\r\n          &:nth-child(1), &:nth-child(2) {\r\n            flex: 1;\r\n            padding-right: 3px;\r\n          }\r\n\r\n          &:nth-child(3) {\r\n            line-height: 32px;\r\n\r\n            span:nth-child(1) {\r\n              margin: 0 5px\r\n            }\r\n\r\n            span:nth-child(2) {\r\n              cursor: move;\r\n              margin-right: 5px;\r\n              font-size: 20px;\r\n              position: relative;\r\n              top: 1px\r\n            }\r\n          }\r\n\r\n          .el-input__wrapper {\r\n            border-radius: 0;\r\n          }\r\n        }\r\n\r\n        &.aggrid-sql {\r\n          .enumeration-col {\r\n            &:nth-child(3), &:nth-child(4) {\r\n              span:nth-child(1) {\r\n                margin: 0\r\n              }\r\n\r\n              span:nth-child(2) {\r\n                cursor: pointer;\r\n                margin-right: 2px;\r\n                top: 1px\r\n              }\r\n            }\r\n\r\n            &:nth-child(5) {\r\n              line-height: 32px;\r\n\r\n              span {\r\n                cursor: pointer;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      .enumeration-add-btn {\r\n        color: var(--main-color)\r\n      }\r\n\r\n      .sql-param {\r\n        display: flex;\r\n        flex-direction: row;\r\n        margin: 3px 0;\r\n\r\n        .sql-param-num {\r\n          font-size: 14px;\r\n          min-width: 50px;\r\n          text-align: right;\r\n          margin-right: 6px;\r\n          line-height: 30px;\r\n        }\r\n\r\n        .sql-param-detail {\r\n          flex: 1;\r\n          margin-right: 10px;\r\n\r\n          .sql-param-detail-row {\r\n            margin-bottom: 5px;\r\n\r\n            &:nth-child(3) {\r\n              display: flex;\r\n              flex-direction: row;\r\n              justify-content: space-between;\r\n\r\n              .sql-param-detail-col {\r\n                font-size: 13px;\r\n                line-height: 20px;\r\n\r\n                .el-checkbox {\r\n                  height: 16px;\r\n                  position: relative;\r\n                  top: 2px;\r\n                }\r\n\r\n                .el-button > span {\r\n                  font-size: 13px;\r\n                }\r\n\r\n                .el-button--primary.is-link {\r\n                  padding: 0;\r\n                  position: relative;\r\n                  top: -1px\r\n                }\r\n              }\r\n            }\r\n          }\r\n\r\n          .el-input__wrapper {\r\n            border-radius: 0;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  form {\r\n    overflow-x: hidden;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n.yv-card.yv-tree {\r\n  background: #fff;\r\n  border: 1px solid var(--el-menu-border-color)\r\n}\r\n</style>","<template>\r\n  <div :id=\"vjson.id\"\r\n       :key=\"vjson.id\"\r\n       :class=\"[calcClass, 'yv-tree']\"\r\n       :style=\"calcStyle\"\r\n       @selectme.native=\"_selectMe\"\r\n       @click.stop=\"_selectMe\"\r\n  >\r\n    <el-empty description=\"树组件\"/>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport {renderIcon} from '../../../utils'\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport YvDesignTreeProp from \"./yv-design-tree-prop.vue\"\r\nimport YvVjsonTree from \"../../vjson/yv-vjson-tree.vue\"\r\nimport {getDescDefaults, registeComponent} from '../yv-designer-desc'\r\nimport _ from \"lodash\";\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  props: {\r\n    vjson: Object,\r\n    vcxt: VJsonContext,\r\n    designer: Designer,\r\n    parentComponent: Object,\r\n    parentList: Array,\r\n    indexOfParentList: Number,\r\n  },\r\n  computed: {\r\n    icon() {\r\n      return renderIcon(this.vjson.iconCls)\r\n    },\r\n  },\r\n  created() {\r\n  },\r\n  mounted() {\r\n  },\r\n  beforeUnmount() {\r\n  },\r\n  methods: {},\r\n  buildVExportData(vjson, dataRoot, useFor) {\r\n    if (vjson.reference) {\r\n      if (useFor === 'reviewOnly') {\r\n        _.set(dataRoot, vjson.reference + '.selection', vjson.id)\r\n        _.set(dataRoot, vjson.reference + '.checkedKeys', vjson.id)\r\n        _.set(dataRoot, vjson.reference + '.checkedNodes', vjson.id)\r\n\r\n      } else {\r\n        _.set(dataRoot, vjson.reference + '.selection', null)\r\n        _.set(dataRoot, vjson.reference + '.checkedKeys', [])\r\n        _.set(dataRoot, vjson.reference + '.checkedNodes', [])\r\n      }\r\n    }\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('tree')\r\n    desc.setRuntime('YvVjsonTree', YvVjsonTree)\r\n    desc.setDesign('YvDesignTree', this)\r\n    desc.setProp('YvDesignTreeProp', YvDesignTreeProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'tree',\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {\r\n        name: 'onDataLoadComplete', desc: '数据源刷新后触发', events: [\r\n          {name: 'tree', desc: '树对象'},\r\n          {name: 'data', desc: '数据'},\r\n        ]\r\n      },\r\n      {\r\n        name: 'onDataLoadBefore', desc: '数据源刷新前触发', events: []\r\n      },\r\n      {name: 'click', desc: '点击时触发', events: [{name: 'e'}]},\r\n      {\r\n        name: 'nodeClick', desc: '当节点被点击的时候触发', events: [\r\n          {name: 'arguments'}, {name: 'b'}, {name: 'c'}, {name: 'd'}\r\n        ]\r\n      },\r\n      {\r\n        name: 'check', desc: '点击节点复选框之后触发', events: [\r\n          {name: 'arguments'}\r\n        ]\r\n      },\r\n      {\r\n        name: 'currentChange', desc: '当前选中节点变化时触发的事件', events: [\r\n          {name: 'arguments'}\r\n        ]\r\n      },\r\n      {\r\n        name: 'nodeExpand', desc: '节点被展开时触发的事件', events: [\r\n          {name: 'arguments'}\r\n        ]\r\n      },\r\n      {\r\n        name: 'nodeCollapse', desc: '节点被关闭时触发的事件', events: [\r\n          {name: 'arguments'}\r\n        ]\r\n      },\r\n      {\r\n        name: 'nodeDragStart', desc: '节点开始拖拽时触发的事件', events: [\r\n          {name: 'arguments'}\r\n        ]\r\n      },\r\n      {\r\n        name: 'nodeDragEnter', desc: '拖拽进入其他节点时触发的事件', events: [\r\n          {name: 'arguments'}\r\n        ]\r\n      },\r\n      {\r\n        name: 'nodeDragLeave', desc: '拖拽离开某个节点时触发的事件', events: [\r\n          {name: 'arguments'}\r\n        ]\r\n      },\r\n      {\r\n        name: 'nodeDragOver', desc: '在拖拽节点时触发的事件（类似浏览器的 mouseover 事件）', events: [\r\n          {name: 'arguments'}\r\n        ]\r\n      },\r\n      {\r\n        name: 'nodeDragEnd', desc: '拖拽结束时（可能未成功）触发的事件', events: [\r\n          {name: 'arguments'}\r\n        ]\r\n      },\r\n      {\r\n        name: 'nodeDrag', desc: '拖拽成功完成时触发的事件', events: [\r\n          {name: 'arguments'}\r\n        ]\r\n      },\r\n    ]\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'text', desc: '文本', bindable: true},\r\n      {name: 'disabled', desc: '禁用', bindable: true},\r\n      {name: 'iconCls', desc: '图标', bindable: true},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.yv-design-mode .yv-tree {\r\n  width: 100%;\r\n  height: 100%;\r\n  min-height: 50px;\r\n}\r\n</style>","<template>\r\n  <el-select ref=\"_inner\" v-model=\"value\" filterable clearable class=\"yv-aggrid-combo yv-aggrid-editor\"\r\n             @change=\"onChange\">\r\n    <el-option v-for=\"item in selectList\"\r\n               :key=\"item.code\"\r\n               :label=\"item.desc\"\r\n               :value=\"item.code\"\r\n    />\r\n  </el-select>\r\n</template>\r\n<script>\r\nimport {nextTick} from \"vue\";\r\n\r\n\r\nexport default {\r\n  mixins: [],\r\n  data() {\r\n    return {\r\n      value: null,\r\n    };\r\n  },\r\n  computed: {\r\n    selectList() {\r\n      return this.params.selectList\r\n    }\r\n  },\r\n  methods: {\r\n    getValue() {\r\n      return this.value;\r\n    },\r\n\r\n    onChange(newValue) {\r\n      const data = this.params.data\r\n      data[this.params.column.colId] = newValue\r\n      this.params.api.applyTransaction({\r\n        update: [data]\r\n      })\r\n    }\r\n  },\r\n  mounted() {\r\n    this.value = this.params.value;\r\n    nextTick(() => {\r\n      this.$refs._inner.focus()\r\n    })\r\n  }\r\n}\r\n\r\n</script>\r\n<style>\r\n.yv-aggrid-combo {\r\n  width: 100%;\r\n}\r\n\r\n.yv-aggrid-combo.el-select .el-input.is-focus .el-input__wrapper {\r\n  box-shadow: none !important;\r\n}\r\n</style>\r\n","<template>\r\n  <div class=\"property exprform-property\">\r\n    <div class=\"title\">exprform 属性</div>\r\n    <el-tabs>\r\n      <el-tab-pane label=\"基本\">\r\n        <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"right\" label-width=\"80px\"\r\n                 size=\"default\" @submit.native.prevent>\r\n          <el-form-item label=\"reference\" prop=\"reference\">\r\n            <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"modal\" prop=\"bindValue\">\r\n            <el-input v-model=\"bindValue\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"权限\" prop=\"permissions\">\r\n            <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <el-form-item label=\"隐藏\" prop=\"formData.hidden\">\r\n            <el-switch v-model=\"formData.hidden\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"隐藏树形模式\" prop=\"formData.hidden\" label-width=\"130px\">\r\n            <el-switch v-model=\"formData.hiddenTableMode\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"隐藏代码模式\" prop=\"formData.hidden\" label-width=\"130px\">\r\n            <el-switch v-model=\"formData.hiddenCodeMode\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"隐藏文档\" prop=\"formData.hidden\" label-width=\"130px\">\r\n            <el-switch v-model=\"formData.hiddenDocMode\"></el-switch>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <yv-design-input-height :form-data=\"formData\" :designer=\"designer\"/>\r\n        </el-form>\r\n      </el-tab-pane>\r\n      <el-tab-pane label=\"运算环境\">\r\n        <el-form-item label=\"类型\" prop=\"exprType\">\r\n          <el-button-group>\r\n            <el-button size=\"small\" :type=\"(formData.exprType === 'program' || !formData.exprType)? 'primary':'default'\"\r\n                       @click=\"()=>{formData.exprType='program';formData.envs=[]}\">后端逻辑\r\n            </el-button>\r\n            <br/>\r\n            <el-button size=\"small\" :type=\"formData.exprType === 'sql'? 'primary':'default'\"\r\n                       @click=\"()=>{formData.exprType='sql';formData.envs=[]}\">SQL组装\r\n            </el-button>\r\n            <br/>\r\n            <el-button size=\"small\" :type=\"formData.exprType === 'sql_order'? 'primary':'default'\"\r\n                       @click=\"()=>{formData.exprType='sql_order';formData.envs=[]}\">SQL排序\r\n            </el-button>\r\n            <br/>\r\n            <el-button size=\"small\" :type=\"formData.exprType === 'param'? 'primary':'default'\"\r\n                       @click=\"()=>{formData.exprType='param';formData.envs=[]}\">参数设置\r\n            </el-button>\r\n          </el-button-group>\r\n        </el-form-item>\r\n        <div class=\"enumeration enumeration-title\">\r\n          <div class=\"enumeration-col\">名称</div>\r\n          <div class=\"enumeration-col\">说明</div>\r\n        </div>\r\n\r\n        <draggable tag=\"div\" :list=\"formData.envs\" item-key=\"id\" :component-data=\"{class: 'enumeration-ul'}\"\r\n                   v-bind=\"{group:'panesGroup', ghostClass: 'ghost', handle: '.icon-tuozhuai'}\">\r\n\r\n          <template #item=\"{ element: item, index: idx }\">\r\n            <div class=\"enumeration\" :key=\"item.id\">\r\n              <div class=\"enumeration-col\">\r\n                <span class=\"iconfont icon-tuozhuai\"></span>{{ item.name }}\r\n              </div>\r\n              <div class=\"enumeration-col\">{{ item.title }}</div>\r\n              <div class=\"enumeration-col\">\r\n                <span class=\"iconfont icon-shanchu1\" @click=\"()=>removeEnvItem(idx)\"></span>\r\n              </div>\r\n            </div>\r\n          </template>\r\n        </draggable>\r\n\r\n        <el-button type=\"primary\" :icon=\"renderIcon('fa Edit')\" link @click=\"editExprDomainRelation\"\r\n                   class=\"enumeration-edit-btn\">\r\n          关联业务领域\r\n        </el-button>\r\n      </el-tab-pane>\r\n      <el-tab-pane label=\"说明文档\" style=\"height: 100%;width:100%;\">\r\n        <yv-src-editor language=\"markdown\" v-model=\"formData.markdown\" style=\"height: 100%;width:100%;\"/>\r\n      </el-tab-pane>\r\n    </el-tabs>\r\n\r\n    <!-- 编辑动态条件Dialog start -->\r\n    <el-dialog\r\n        v-model=\"exprDomainRelationDialogOption.visible\"\r\n        :title=\"exprDomainRelationDialogOption.title\"\r\n        append-to-body\r\n        @open=\"loadAllDomainCheckRelationDomains\"\r\n        width=\"50%\"\r\n    >\r\n      <el-table\r\n          ref=\"multipleTableRef\"\r\n          :data=\"expressDomainList\"\r\n          v-loading=\"expressDomainList.length === 0\"\r\n          stripe\r\n          style=\"width: 100%\"\r\n          @selection-change=\"domainCheckedChange\"\r\n      >\r\n        <el-table-column type=\"selection\" width=\"55\" fixed/>\r\n        <el-table-column property=\"name\" label=\"名称\" width=\"160\"/>\r\n        <el-table-column property=\"title\" label=\"说明\"/>\r\n      </el-table>\r\n      <template #footer>\r\n      <span class=\"dialog-footer\">\r\n        <el-button type=\"primary\" @click=\"saveExprDomainRelation\">保存</el-button>\r\n        <el-button @click=\"closeExprDomainRelationDialog\">取消</el-button>\r\n      </span>\r\n      </template>\r\n    </el-dialog>\r\n    <!-- 编辑动态条件Dialog end -->\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {toRaw} from \"vue\"\r\nimport {dict} from \"../../../store\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport YvDesignInputHeight from \"./yv-design-input-height.vue\"\r\nimport YvDesignerAgGridCombo from \"../designPrint/yv-designer-aggrid-combo.vue\"\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  components: {YvDesignInputHeight, YvDesignerAgGridCombo, YvDesignerPermissions},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        hidden: this.vjson.hidden ?? false,\r\n        bind: this.vjson.bind,\r\n        formName: this.vjson.formName\r\n      },\r\n      formName: \"\",\r\n      expressDomainList: [],\r\n      domainChecked: [],\r\n      expressFormList: [],\r\n      exprDomainRelationDialogOption: {\r\n        visible: false,\r\n        title: \"编辑运算环境--关联业务领域\"\r\n      },\r\n    }\r\n  },\r\n  mounted() {\r\n    this.loadExpressFormList()\r\n  },\r\n  methods: {\r\n    removeEnvItem(idx) {\r\n      this.formData.envs.splice(idx, 1)\r\n    },\r\n    domainCheckedChange(newVal) {\r\n      this.domainChecked = newVal\r\n    },\r\n    loadAllDomainCheckRelationDomains() {\r\n      const envs = this.formData.envs\r\n      system.invokeStudio(\"ExpressFormManager@queryAllEnv\", {\r\n        exprType: this.formData.exprType ?? 'program',\r\n\r\n      }).then(res => {\r\n        this.expressDomainList = res.data\r\n        this.$nextTick(() => {\r\n          _.forEach(this.expressDomainList, r => {\r\n            if (_.find(envs, e => e.name === r.name)) {\r\n              this.$refs.multipleTableRef.toggleRowSelection(r)\r\n            }\r\n          })\r\n        })\r\n      })\r\n    },\r\n    loadExpressFormList() {\r\n      system.invokeStudio(\"ExpressFormManager@queryExpressFormList\", {}).then(res => {\r\n        this.expressFormList = res.data\r\n      })\r\n    },\r\n    editExprDomainRelation() {\r\n      this.showExprDomainRelationDialog()\r\n    },\r\n    saveExprDomainRelation() {\r\n      this.formData.envs = _.map(this.domainChecked, r => {\r\n        return {\r\n          name: r.name,\r\n          title: r.title\r\n        }\r\n      })\r\n      this.closeExprDomainRelationDialog()\r\n    },\r\n    showExprDomainRelationDialog() {\r\n      this.exprDomainRelationDialogOption.visible = true\r\n    },\r\n    closeExprDomainRelationDialog() {\r\n      this.exprDomainRelationDialogOption.visible = false\r\n    }\r\n  },\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    },\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n\r\n.property.exprform-property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  .el-tabs {\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n\r\n    .el-tabs__header {\r\n\r\n      .el-tabs__item {\r\n        padding: 0 10px;\r\n      }\r\n\r\n      .el-tabs__item.is-active, .el-tabs__item:hover {\r\n        color: #000;\r\n      }\r\n\r\n      .el-tabs__active-bar {\r\n        background-color: var(--main-color)\r\n      }\r\n    }\r\n\r\n    .el-tabs__content {\r\n      display: flex;\r\n      flex: 1;\r\n      overflow: auto;\r\n\r\n      .el-tab-pane {\r\n        width: 100%;\r\n      }\r\n\r\n      .enumeration-title {\r\n        color: #333;\r\n        font-size: 14px;\r\n        margin-bottom: 5px;\r\n      }\r\n\r\n      .enumeration {\r\n        margin-bottom: 5px;\r\n        display: flex;\r\n        flex-direction: row;\r\n\r\n        .enumeration-col {\r\n          &:nth-child(1), &:nth-child(2) {\r\n            flex: 1;\r\n            padding-right: 3px;\r\n          }\r\n\r\n          &:nth-child(3) {\r\n            line-height: 32px;\r\n\r\n            span:nth-child(1) {\r\n              margin: 0 5px\r\n            }\r\n\r\n            span:nth-child(2) {\r\n              cursor: move;\r\n              margin-right: 5px;\r\n              font-size: 20px;\r\n              position: relative;\r\n              top: 1px\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      .enumeration-edit-btn {\r\n        color: var(--main-color)\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n.dynamic-condition-dialog-content {\r\n\r\n  .dynamic-condition-dialog-toolbar {\r\n    height: 35px;\r\n  }\r\n\r\n  .dynamic-condition-dialog-content {\r\n\r\n  }\r\n}\r\n</style>","<template>\r\n  <el-input v-if=\"isTextType()\"\r\n            ref=\"_inner\"\r\n            class=\"yv-aggrid-editor\"\r\n            v-model=\"value\"\r\n            type=\"text\"\r\n            clearable\r\n            @change=\"onChange\"/>\r\n\r\n  <el-input-number\r\n      v-else-if=\"isNumberType()\"\r\n      ref=\"_inner\"\r\n      v-model=\"value\"\r\n      controls-position=\"right\"\r\n      class=\"yv-aggrid-editor\"\r\n      clearable\r\n      @change=\"onChange\"/>\r\n\r\n  <el-select\r\n      v-else-if=\"isDictType()\"\r\n      ref=\"_inner\"\r\n      v-model=\"value\"\r\n      placeholder=\"请选择\"\r\n      filterable\r\n      clearable\r\n      multiple\r\n      class=\"yv-aggrid-editor\"\r\n      @change=\"onChange\">\r\n    <el-option\r\n        v-for=\"item in dictItems\"\r\n        :key=\"item.id\"\r\n        :label=\"item.text\"\r\n        :value=\"item.id\"\r\n    />\r\n  </el-select>\r\n\r\n  <el-date-picker\r\n      v-else-if=\"isDateTimeType()\"\r\n      ref=\"_inner\"\r\n      v-model=\"value\"\r\n      type=\"datetime\"\r\n      placeholder=\"请选择\"\r\n      class=\"yv-aggrid-editor\"\r\n      style=\"width: 100%;\"\r\n      @change=\"onChange\"/>\r\n</template>\r\n<script>\r\nimport {nextTick} from \"vue\";\r\nimport {runEvent} from \"../yv-utils\";\r\n\r\nexport default {\r\n  mixins: [],\r\n  data() {\r\n    return {\r\n      value: null,\r\n      type: this.params.data[this.params.editFieldName] ?? 'text',\r\n      dictItems: [],\r\n    };\r\n  },\r\n  methods: {\r\n    getValue() {\r\n      if(this.isDateTimeType()){\r\n        this.value = this.dataFormat(this.value)\r\n      }\r\n      console.log('this.value', this.value);\r\n      return this.value;\r\n    },\r\n    isDictType() {\r\n      return this.type === '1'\r\n    },\r\n    isNumberType() {\r\n      return this.type === '2'\r\n    },\r\n    isTextType() {\r\n      return this.type === '3'\r\n    },\r\n    isSearchBoxType() {\r\n      return this.type === '4'\r\n    },\r\n    isDateTimeType() {\r\n      return this.type === '5'\r\n    },\r\n    onChange(newValue) {\r\n      const data = this.params.data\r\n      data[this.params.column.colId] = newValue\r\n      this.params.api.applyTransaction({\r\n        update: [data]\r\n      })\r\n    },\r\n    dataFormat(value = Date.now(), format = \"Y-M-D h:m:s\") {\r\n      const formatNumber = n => `0${n}`.slice(-2);\r\n      const date = new Date(value);\r\n      const formatList = [\"Y\", \"M\", \"D\", \"h\", \"m\", \"s\"];\r\n      const resultList = [];\r\n      resultList.push(date.getFullYear().toString());\r\n      resultList.push(formatNumber(date.getMonth() + 1));\r\n      resultList.push(formatNumber(date.getDate()));\r\n      resultList.push(formatNumber(date.getHours()));\r\n      resultList.push(formatNumber(date.getMinutes()));\r\n      resultList.push(formatNumber(date.getSeconds()));\r\n      for (let i = 0; i < resultList.length; i++) {\r\n        format = format.replace(formatList[i], resultList[i]);\r\n      }\r\n      return format;\r\n    }\r\n  },\r\n  mounted() {\r\n    this.value = this.params.value;\r\n    if(this.isDictType()){\r\n      this.dictItems = window['DICT_CACHE'][this.params.data.dict] ?? []\r\n    }\r\n    nextTick(() => {\r\n      // this.$refs._inner.focus()\r\n    })\r\n  }\r\n}\r\n\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.ag-cell-inline-editing {\r\n  border-radius: 0;\r\n}\r\n\r\n.yv-aggrid-editor {\r\n  width: 100%;\r\n  border: 0;\r\n  outline: none;\r\n  box-shadow: none;\r\n}\r\n\r\n.yv-aggrid-editor .el-input__wrapper {\r\n  border-radius: 0;\r\n  outline: none;\r\n  box-shadow: none;\r\n}\r\n</style>\r\n","<template>\r\n  <!-- 字段 -->\r\n  <el-select v-model=\"expr.field\" style=\"width:210px\" filterable @change=\"_fieldChanged\">\r\n    <el-option-group v-for=\"m in meta\" :key=\"m.name\" :label=\"`${m.title} (${m.name})`\">\r\n      <el-option v-for=\"item in m.metaProperties\" :key=\"m.name+'_'+item.name\" :value=\"`${m.name}.${item.name}`\"\r\n                 :label=\"item.title\">\r\n        <span style=\"float: left\">{{ item.title }}</span>\r\n        <span style=\"float: right;color: var(--el-text-color-secondary);font-size: 13px;\">{{ item.name }}</span>\r\n      </el-option>\r\n    </el-option-group>\r\n  </el-select>\r\n\r\n  <!-- 运算符 -->\r\n  <el-select v-if=\"exprType==='sql_order'\" v-model=\"expr.operator\" style=\"width:90px;\" filterable\r\n             @change=\"operatorChanged\">\r\n    <el-option value=\"asc\" label=\"asc\"/>\r\n    <el-option value=\"desc\" label=\"desc\"/>\r\n  </el-select>\r\n  <el-select v-else-if=\"!!computMetaXType\" v-model=\"expr.operator\" style=\"width:90px;\" filterable\r\n             @change=\"operatorChanged\">\r\n    <el-option v-for=\"op in computOperator\" :key=\"op\" :value=\"op\" :label=\"op\"/>\r\n    <!--\r\n    <el-option value=\"=\" label=\"=\"/>\r\n    <el-option value=\">\" label=\">\"/>\r\n    <el-option value=\"<\" label=\"<\"/>\r\n    <el-option value=\">=\" label=\">=\"/>\r\n    <el-option value=\"<=\" label=\"<=\"/>\r\n    <el-option value=\"!=\" label=\"<>\"/>\r\n    <el-option value=\"like\" label=\"like\"/>\r\n    <el-option value=\"notLike\" label=\"not like\"/>\r\n    <el-option value=\"in\" label=\"in\"/>\r\n    <el-option value=\"notIn\" label=\"not in\"/>\r\n    -->\r\n  </el-select>\r\n\r\n  <!-- 值 -->\r\n  <template v-if=\"exprType!=='sql_order'\">\r\n    <el-select\r\n        v-if=\"(computMetaXType === 'combo'|| computMetaXType==='combobox') && expr.operator!=='in' && expr.operator!=='notIn'\"\r\n        v-model=\"expr.value\"\r\n        style=\"width:260px;\" filterable clearable>\r\n      <el-option v-for=\"item in computDictItems\" :label=\"item.text\" :value=\"item.id\"/>\r\n    </el-select>\r\n    <el-select v-else-if=\"computMetaXType === 'combo' || computMetaXType==='combobox'\" v-model=\"computValues\"\r\n               style=\"width:260px;\" clearable multiple\r\n               filterable>\r\n      <el-option v-for=\"item in computDictItems\" :label=\"item.text\" :value=\"item.id\"/>\r\n    </el-select>\r\n    <el-date-picker v-else-if=\"computMetaXType === 'datefield'\" v-model=\"expr.value\" clearable\r\n                    style=\"width:260px;\"/>\r\n    <el-input v-else-if=\"computMetaXType === 'numberfield' && expr.operator!=='in' && expr.operator!=='notIn'\"\r\n              v-model=\"expr.value\" clearable type=\"number\"\r\n              style=\"width:260px;\"/>\r\n    <el-input v-else-if=\"!!computMetaXType && expr.operator!=='in' && expr.operator!=='notIn'\" v-model=\"expr.value\"\r\n              style=\"width:260px;\" clearable/>\r\n    <el-select v-else-if=\"!!computMetaXType\" v-model=\"computValues\" style=\"width:260px;\" multiple allow-create\r\n               :remote-method=\"remoteMethod\"\r\n               default-first-option reserve-keyword filterable clearable>\r\n      <el-option v-for=\"item in options\" :label=\"item.text\" :value=\"item.id\"/>\r\n    </el-select>\r\n  </template>\r\n</template>\r\n<script>\r\nimport {toRaw} from 'vue'\r\nimport _ from 'lodash'\r\nimport {dict} from \"../../store\";\r\nimport * as Conv from \"../../Conv\";\r\n\r\nexport default {\r\n  props: {\r\n    /**\r\n     * 表达式类型 sql/sql_order/program\r\n     */\r\n    exprType: {type: String, default: 'sql'},\r\n    /**\r\n     * 表达式 sql/program\r\n     * { condition: 'and', type:'field', field: 'fild1', operator: '=', value: 'value1' }\r\n     *\r\n     * 或者 sql_order\r\n     * {field: 'fild1', operator: 'asc'},\r\n     */\r\n    expr: Object,\r\n    /**\r\n     * 元数据\r\n     * {\r\n     * \ttitle: '项目', name: 'PROJ', category: '',\r\n     * \tmetaProperties:[\r\n     * \t\t{name: 'order_type', title: '订单类型', xtype: 'combo', dict: 'ORDER_TYPE', widget: '', …}\r\n     * \t]\r\n     * }\r\n     */\r\n    meta: Array,\r\n  },\r\n  data() {\r\n    return {\r\n      options: []\r\n    }\r\n  },\r\n  methods: {\r\n    remoteMethod(query) {\r\n      this.options = this.computValues.filter(r => !!r).map(r => {\r\n        return {text: r, id: Conv.asString(r)}\r\n      })\r\n      if (query) {\r\n        this.options.push({text: query, id: Conv.asString(query)})\r\n      }\r\n    },\r\n    operatorChanged(newVal, oldVal) {\r\n      // 编辑条件从 in或者notIn 变为其他时，清空值\r\n      const oldValIsIn = ('' + oldVal).includes('in')\r\n      const newValIsIn = ('' + newVal).includes('in')\r\n\r\n      if (oldValIsIn !== newValIsIn) {\r\n        if (newValIsIn) {\r\n          this.computValues = []\r\n        } else {\r\n          this.expr.value = ''\r\n        }\r\n      }\r\n    },\r\n    _fieldChanged() {\r\n      // 字段变化时，清空运算符和值\r\n      if(this.exprType === 'sql_order'){\r\n        this.expr.operator = 'asc'\r\n        return\r\n      }\r\n      this.expr.operator = '='\r\n      this.expr.value = ''\r\n    }\r\n  },\r\n  computed: {\r\n    computValues: {\r\n      get() {\r\n        if (!this.expr.value) {\r\n          return []\r\n        }\r\n        return this.expr.value.split(',')\r\n      },\r\n      set(newVal) {\r\n        if (!newVal || newVal.length === 0) {\r\n          this.expr.value = ''\r\n          return\r\n        }\r\n        this.expr.value = newVal.join(',')\r\n      }\r\n    },\r\n    computOperator() {\r\n      // 根据 xtype 类型，返回合适的 operator\r\n      const xtype = this.computMetaXType\r\n      if (xtype === 'combo' || xtype === 'combobox') {\r\n        return ['=', '!=', 'in', 'notIn']\r\n\r\n      } else if (xtype === 'datefield') {\r\n        return ['=', '!=', '>', '<', '>=', '<=']\r\n\r\n      } else if (xtype === 'numberfield') {\r\n        return ['=', '!=', '>', '<', '>=', '<=', 'in', 'notIn']\r\n\r\n      } else if (xtype === 'textfield') {\r\n        return ['=', '!=', 'like', 'notLike', 'in', 'notIn']\r\n      }\r\n    },\r\n    computDictItems() {\r\n      const dictCode = this.computMetaDict\r\n      if (!dictCode) {\r\n        return []\r\n      }\r\n      const dictObj = dict.value[dictCode];\r\n      const previewDictListItems = []\r\n      if (dictObj && dictObj.items) {\r\n        _.forEach(dictObj.items, value => {\r\n          previewDictListItems.push({...value, text: value.dictText, id: Conv.asString(value.dictValue)});\r\n        });\r\n      }\r\n\r\n      console.log('dictItems:', previewDictListItems)\r\n      return previewDictListItems\r\n    },\r\n    computMeta() {\r\n      // 根据 field 找到 meta.metaProperties 对应 name 的元数据\r\n      const field = this.expr.field\r\n      if (!field) {\r\n        return\r\n      }\r\n\r\n      // 将 \"table.field\" 格式转换为 table属性和field 属性\r\n      const table = field.split('.')[0]\r\n      const field2 = field.split('.')[1]\r\n      const meta = this.meta.find(m => m.name === table)\r\n      return meta?.metaProperties?.find(p => p.name === field2)\r\n    },\r\n    computMetaXType() {\r\n      // 根据 field 找到对应元数据的 xtype\r\n      const computMeta = this.computMeta\r\n      if (!computMeta) {\r\n        return\r\n      }\r\n\r\n      const vjsonDefineStr = computMeta.vjsonDefine\r\n      if (!vjsonDefineStr || !_.startsWith(vjsonDefineStr, '{')) {\r\n        return computMeta.xtype\r\n      }\r\n\r\n      // 从 vjsonDefine 中分析 xtype\r\n      const vjsonDefine = JSON.parse(vjsonDefineStr)\r\n      /**\r\n       * vjsonDefine: {\r\n       *    \"xtype\":\"combobox\",\r\n       *    \"fieldLabel\":\"机构ID\",\r\n       *    \"editable\":true,\r\n       *    \"dataType\":2,\r\n       *    \"dict\":\"ORG\",\r\n       *    \"required\":true\r\n       * }\r\n       */\r\n      console.log('xtype=' + vjsonDefine.xtype + ', vjsonDefine:', vjsonDefine)\r\n      return vjsonDefine.xtype\r\n    },\r\n    computMetaDict() {\r\n      // 根据 field 找到对应元数据的 dict\r\n      const computMeta = this.computMeta\r\n      if (!computMeta) {\r\n        return\r\n      }\r\n\r\n      const vjsonDefineStr = computMeta.vjsonDefine\r\n      if (!vjsonDefineStr || !_.startsWith(vjsonDefineStr, '{')) {\r\n        return this.computMeta?.dict\r\n      }\r\n\r\n      // 从 vjsonDefine 中分析 xtype\r\n      const vjsonDefine = JSON.parse(vjsonDefineStr)\r\n      /**\r\n       * vjsonDefine: {\r\n       *    \"xtype\":\"combobox\",\r\n       *    \"fieldLabel\":\"机构ID\",\r\n       *    \"editable\":true,\r\n       *    \"dataType\":2,\r\n       *    \"dict\":\"ORG\",\r\n       *    \"required\":true\r\n       * }\r\n       */\r\n      console.log('dict=' + vjsonDefine.dict + ', vjsonDefine:', vjsonDefine)\r\n      return vjsonDefine.dict\r\n    },\r\n  }\r\n}\r\n</script>","<template>\r\n  <!--添加边框样式-->\r\n  <el-card :style=\"{border: isSelected?'1px dashed var(--el-color-primary)':'1px solid #e7e7e7'}\"\r\n           style=\"min-width:530px;\"\r\n           shadow=\"never\"\r\n           class=\"query-code\"\r\n           @click.stop=\"_selectMe\">\r\n    <el-empty v-if=\"!exprs || exprs.length<=0\" :description=\"code?code:'没有任何条件'\" :image-size=\"50\"\r\n              style=\"padding: 0\">\r\n      <el-button type=\"primary\" @click=\"addField\">添加条件</el-button>\r\n    </el-empty>\r\n    <template v-else>\r\n      <el-row v-for=\"(expr,idx) in exprs\">\r\n        <div v-if=\"idx===0\" style=\"width:60px;line-height: 32px;text-align: right;\">当</div>\r\n        <el-select v-else v-model=\"expr.condition\" style=\"width:60px; height:32px;\">\r\n          <el-option label=\"且\" value=\"and\"/>\r\n          <el-option label=\"或\" value=\"or\"/>\r\n        </el-select>\r\n        <template v-if=\"expr.type === 'group'\">\r\n          <yv-querycode :exprs=\"expr.exprs\" :selector=\"selector\" :meta=\"meta\"/>\r\n        </template>\r\n        <template v-else>\r\n          <YvQueryField ref=\"_editors\" :meta=\"meta\" :expr=\"expr\"/>\r\n        </template>\r\n        <el-button link :icon=\"renderIcon('Close')\" @click=\"removeExpr(idx)\" style=\"height: 32px\"/>\r\n      </el-row>\r\n      <el-row>\r\n        <el-button link :icon=\"renderIcon('Plus')\" @click=\"addField\">添加字段</el-button>\r\n        <el-button v-if=\"exprs.filter(r=>!!r.field && !!r.operator).length>0\" link :icon=\"renderIcon('Plus')\"\r\n                   @click=\"addGroup\">\r\n          添加分组\r\n        </el-button>\r\n      </el-row>\r\n    </template>\r\n  </el-card>\r\n</template>\r\n<script>\r\nimport _ from 'lodash'\r\nimport {renderIcon} from \"../../utils\"\r\nimport YvQueryField from './yv-query-field.vue'\r\nimport {toRaw} from \"vue\";\r\n\r\nexport default {\r\n  components: {YvQueryField},\r\n  props: {\r\n    // 表达式\r\n    // { condition: 'and', type:'field', field: 'fild1', operator: '=', value: 'value1' }\r\n    // { condition: 'and', type:'group', exprs: [] }\r\n    exprs: Array,\r\n    selector: Object,\r\n    meta: Array,\r\n    code: String\r\n  },\r\n  data() {\r\n    return {}\r\n  },\r\n  destroyed() {\r\n    this.selector.currentExprs = null\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    addGroup() {\r\n      this.exprs.push({\r\n        condition: 'and', type: 'group', exprs: []\r\n      })\r\n      this.$nextTick(() => {\r\n        this.selector.currentExprs = this.exprs[this.exprs.length - 1].exprs\r\n      })\r\n    },\r\n    addField() {\r\n      this.exprs.push({\r\n        condition: 'and', type: 'field', field: '', operator: '=', value: ''\r\n      })\r\n    },\r\n    removeExpr(idx) {\r\n      this.exprs.splice(idx, 1)\r\n    },\r\n    _selectMe() {\r\n      this.selector.currentExprs = this.exprs\r\n    },\r\n    /**\r\n     * 将树形模式中所有的数据保存成代码\r\n     * @param exprType 代码类型: program sql\r\n     */\r\n    toCode(exprType) {\r\n      return system.invokeStudio('YvanParamUtils@toCode', {\r\n        exprType: exprType,\r\n        exprs: this.exprs,\r\n        meta: this.meta\r\n      })\r\n    },\r\n  },\r\n  computed: {\r\n    isSelected() {\r\n      return this.exprs === this.selector.currentExprs\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.query-code {\r\n  border: 1px solid #ccc;\r\n  overflow: auto;\r\n\r\n  & > .el-card__body {\r\n    padding: 10px;\r\n\r\n    .el-row {\r\n      box-sizing: border-box;\r\n      margin-bottom: 10px;\r\n      display: flex;\r\n      flex-direction: row;\r\n      flex-wrap: nowrap;\r\n      position: relative;\r\n\r\n      & > div {\r\n        margin-right: 5px;\r\n        flex-shrink: 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  &.is-never-shadow {\r\n    .is-never-shadow {\r\n      background: rgba(244, 244, 244, .5);\r\n    }\r\n  }\r\n}\r\n</style>","import _ from 'lodash'\r\nimport * as Conv from '../../Conv'\r\nimport {toRaw} from 'vue'\r\n\r\n/**\r\n * 从 AST 结构生成代码\r\n * @param exprs AST 结构\r\n * @param meta 元数据\r\n * @param exprType 表达式类型: program, sql, sql_order\r\n */\r\nexport function buildCode({exprs, meta, exprType}) {\r\n    exprs = toRaw(exprs)\r\n    meta = toRaw(meta)\r\n    exprType = toRaw(exprType)\r\n\r\n    console.log('buildCode', exprs, meta, exprType);\r\n\r\n    // 找到所有表达式的元数据\r\n    _.forEach(exprs, exprItem => {\r\n        foundMetaProperty(exprItem, meta)\r\n    })\r\n\r\n    // 生成代码\r\n    const sb = []\r\n    let isFirst = true\r\n    for (let i = 0; i < exprs.length; i++) {\r\n        if (exprType === 'sql_order') {\r\n            if (exprs[i].field) {\r\n                sb.push(exprs[i].field + ' ' + exprs[i].operator)\r\n            }\r\n            continue\r\n        }\r\n        if (exprs[i].type !== 'group' && (!(exprs[i].operator) || !(exprs[i].field))) {\r\n            continue\r\n        }\r\n\r\n        if (isFirst) {\r\n            isFirst = false\r\n        } else {\r\n            sb.push(' ')\r\n            if (exprType === 'program') {\r\n                if (exprs[i].condition === 'and') {\r\n                    sb.push('&&')\r\n                } else if (exprs[i].condition === 'or') {\r\n                    sb.push('||')\r\n                } else {\r\n                    throw Error('不支持的条件操作符: ' + exprs[i].condition)\r\n                }\r\n            } else if (exprType === 'sql') {\r\n                sb.push(exprs[i].condition)\r\n            }\r\n            sb.push(' ')\r\n            isFirst = false\r\n        }\r\n        sb.push(buildExprItemCode(exprs[i], exprType))\r\n    }\r\n    if (exprType === 'sql_order') {\r\n        return sb.join(',')\r\n    }\r\n    return sb.join('')\r\n}\r\n\r\n/**\r\n * 从代码解析成 AST 结构\r\n * @param exprType 表达式类型: program, sql\r\n * @param meta 元数据\r\n * @param code 代码\r\n */\r\nexport function buildAST({exprType, code, meta}) {\r\n    meta = toRaw(meta)\r\n    exprType = toRaw(exprType)\r\n\r\n    let ast = undefined\r\n    if (exprType === 'program') {\r\n        ast = system.parseProgram(code)\r\n    } else if (exprType === 'sql') {\r\n        ast = system.parseSql(code)\r\n    } else if (exprType === 'sql_order') {\r\n        ast = system.parseSql(code)\r\n        const exprs = []\r\n        for (let i = 0; i < ast.length; i++) {\r\n            exprs.push({\r\n                field: ast[i],\r\n                operator: ast[i+1]\r\n            })\r\n            i++\r\n        }\r\n        console.log('expr result', exprs)\r\n        return exprs\r\n    }\r\n\r\n    if (!ast) {\r\n        return\r\n    }\r\n\r\n    /**\r\n     * ast 结构:\r\n     * [  'a.vid',  'IN',  [    1,    2,    3,  ],  '&&',  'a.vid',  '!IN',  [    4,    5,  ],  '&&',  'a.code',  '.contains',  '998',  '&&',  'a.f1',  '>',  10,  '&&',  'a.f2',  '<=',  20,  '&&',  [    'a.type',    '==',    '1',    '||',    'a.type',    '==',    '2',    '||',    'a.type',    'IN',    [      '3',      '4',      '5',    ],  ],]\r\n     */\r\n\r\n    /**\r\n     * expr 结构:\r\n     * [\r\n     *     {   condition: 'and', type:'field', field: 'fild1', operator: '=', value: 'value1' },\r\n     *     {   condition: 'and', type:'group',\r\n     *         exprs: [\r\n     *             { condition: 'and', type:'field', field: 'fild2', operator: '=', value: 'value2' },\r\n     *             { condition: 'and', type:'field', field: 'fild3', operator: '=', value: 'value3' },\r\n     *         ]\r\n     *     }\r\n     * ]\r\n     */\r\n    // 将 ast 转换成 expr\r\n    console.log('buildAST', exprType, code, meta, ast)\r\n    const exprs = buildAstByGroup(ast, meta)\r\n\r\n    console.log('expr result', exprs)\r\n    return exprs\r\n}\r\n\r\n/**\r\n * 尝试转换 value 的类型, 并添加至 result\r\n */\r\nfunction pushExprItem(result, expr, meta) {\r\n    // 分离 expr.field 从 table.property 分离出 table 和 property\r\n    const tableAndProperty = expr.field.split('.')\r\n    if (tableAndProperty.length !== 2) {\r\n        throw Error('不支持的表达式: ' + expr.field)\r\n    }\r\n    const table = tableAndProperty[0]\r\n    const property = tableAndProperty[1]\r\n\r\n    // 从 meta.metaProperty 中找到对应的元数据\r\n    const entity = _.find(meta, r => r.name === table)\r\n    if (!entity) {\r\n        console.error('找不到实体:' + table, toRaw(meta), toRaw(table))\r\n        throw Error('找不到实体: ' + table)\r\n    }\r\n    const propertyMeta = _.find(entity.metaProperties, r => r.name === property)\r\n    if (!propertyMeta) {\r\n        console.error('找不到属性:' + property, toRaw(entity.metaProperties), toRaw(property))\r\n        throw Error('找不到属性: ' + property)\r\n    }\r\n\r\n    // 根据 metaProperty 的 dataType 类型转换 value 的类型\r\n    if (propertyMeta.dataType === 'Long') {\r\n        if (expr.operator === 'in' || expr.operator === 'notIn') {\r\n            expr.value = _.split(expr.value, ',').map(value => {\r\n                if (_.endsWith(value, 'L') || _.endsWith(value, 'l')) {\r\n                    return value.substring(0, value.length - 1)\r\n                }\r\n                return value\r\n\r\n            }).join(',')\r\n\r\n        } else {\r\n            if (_.endsWith(expr.value, 'L') || _.endsWith(expr.value, 'l')) {\r\n                expr.value = expr.value.substring(0, expr.value.length - 1)\r\n            }\r\n        }\r\n    }\r\n\r\n    result.push(expr)\r\n}\r\n\r\n/**\r\n * 从 AST 结构生成某个分组内的 expor 代码, 如果遇到分组，就递归调用自己\r\n */\r\nfunction buildAstByGroup(ast, meta) {\r\n    const result = []\r\n    // 第一个语句的连接符是 and 条件\r\n    let condition = 'and'\r\n\r\n    while (true) {\r\n        const first = ast[0]\r\n        if (!first) {\r\n            // 没有更多的元素了\r\n            break\r\n        }\r\n\r\n        if (_.isArray(first)) {\r\n            // 分析group元素\r\n            result.push({condition: condition, type: 'group', exprs: buildAstByGroup(first)})\r\n            break\r\n        }\r\n\r\n        // 运算符有可能是这种形式: {value: 'AND', type: 2, precedence: 9}\r\n        //@ts-ignore\r\n        if (typeof condition.precedence !== 'undefined') {\r\n            //@ts-ignore\r\n            condition = condition.value\r\n        }\r\n        // 将 &&/|| 转换成 and/or\r\n        if (condition === '&&' || condition === 'AND' || condition === 'and') {\r\n            condition = 'and'\r\n\r\n        } else if (condition === '||' || condition === 'OR' || condition === 'or') {\r\n            condition = 'or'\r\n        } else {\r\n            throw Error('不支持的连接符:' + condition)\r\n        }\r\n\r\n        if (typeof first === 'string') {\r\n            // 这是一个字段条件\r\n            const field = first\r\n            let operator = ast[1]\r\n            if (typeof operator.precedence !== 'undefined') {\r\n                // 运算符有可能是这种形式: { precedence:5, type:2, value:'='}\r\n                operator = operator.value\r\n            }\r\n\r\n            const exprItem = {\r\n                condition: condition,\r\n                type: 'field',\r\n                field: field,\r\n            }\r\n\r\n            if (operator === 'IN' || operator === 'NOT IN' || operator === '!IN') {\r\n                if (!_.isArray(ast[2])) {\r\n                    throw Error('IN 操作符后面必须是数组')\r\n                }\r\n\r\n                exprItem.value = _.join(ast[2], ',')\r\n                switch (operator) {\r\n                    case 'IN':\r\n                        exprItem.operator = 'in'\r\n                        break\r\n                    case 'NOT IN':\r\n                    case '!IN':\r\n                        exprItem.operator = 'notIn'\r\n                        break\r\n                }\r\n                pushExprItem(result, exprItem, meta)\r\n\r\n                // 为下一个语句的连接符(&& || and or)做准备\r\n                condition = ast[3]\r\n                ast.splice(0, 4)\r\n                continue\r\n            }\r\n\r\n            if (operator === 'LIKE' || operator === 'NOT LIKE' || operator === '.contains') {\r\n                exprItem.value = '' + ast[2]\r\n                if (typeof exprItem.value !== 'string') {\r\n                    throw Error('LIKE 操作符后面必须是字符串')\r\n                }\r\n\r\n                switch (operator) {\r\n                    case 'LIKE':\r\n                        exprItem.operator = 'like'\r\n                        break\r\n                    case 'NOT LIKE':\r\n                        exprItem.operator = 'notLike'\r\n                        break\r\n                    case '.contains':\r\n                        exprItem.operator = 'like'\r\n                        break\r\n                }\r\n                pushExprItem(result, exprItem, meta)\r\n\r\n                // 为下一个语句的连接符(&& || and or)做准备\r\n                condition = ast[3]\r\n                ast.splice(0, 4)\r\n                continue\r\n            }\r\n\r\n            if (['=', '==', '>=', '<=', '!=', '>', '<'].includes(operator)) {\r\n                exprItem.operator = operator\r\n                if (exprItem.operator === '==') {\r\n                    exprItem.operator = '='\r\n                }\r\n                exprItem.value = '' + ast[2]\r\n                if (typeof exprItem.value !== 'string' && typeof exprItem.value !== 'number') {\r\n                    throw Error(exprItem.operator + ' 操作符后面必须是数字或字符串')\r\n                }\r\n                pushExprItem(result, exprItem, meta)\r\n\r\n                // 为下一个语句的连接符(&& || and or)做准备\r\n                condition = ast[3]\r\n                ast.splice(0, 4)\r\n                continue\r\n            }\r\n        }\r\n\r\n        throw Error('未知的表达式:' + _.join(ast, ' '))\r\n    }\r\n    return result\r\n}\r\n\r\n/**\r\n * 构造某一个 expr段 的表达式代码\r\n * @param me AST 字段, 类型为 { condition, type, field, operator, value, exprs }, 如果 type=group, 则 exprs 是数组, 如果 type=field, 则 condition, field, operator, value 有值\r\n * @param exprType 表达式类型，sql 或 program\r\n */\r\nfunction buildExprItemCode(me, exprType) {\r\n    if (me.type === 'field') {\r\n        return buildFieldCode(me, exprType)\r\n\r\n    } else if (me.type === 'group') {\r\n        const sb = []\r\n        sb.push('(')\r\n        let isFirst = true\r\n        for (let i = 0; i < me.exprs.length; i++) {\r\n            if (me.exprs[i].type !== 'group' && (!(me.exprs[i].operator) || !(me.exprs[i].field))) {\r\n                continue\r\n            }\r\n            if (isFirst) {\r\n                isFirst = false\r\n            } else {\r\n                sb.push(' ')\r\n                if (exprType === 'program') {\r\n                    if (me.exprs[i].condition === 'and') {\r\n                        sb.push('&&')\r\n                    } else if (me.exprs[i].condition === 'or') {\r\n                        sb.push('||')\r\n                    } else {\r\n                        throw Error('不支持的条件操作符: ' + me.exprs[i].condition)\r\n                    }\r\n                } else if (exprType === 'sql') {\r\n                    sb.push(me.exprs[i].condition)\r\n                }\r\n                sb.push(' ')\r\n            }\r\n            sb.push(buildExprItemCode(me.exprs[i], exprType))\r\n        }\r\n        sb.push(')')\r\n        return sb.join('')\r\n    }\r\n}\r\n\r\n/**\r\n * 构造某一个 field 的表达式代码\r\n * @param me AST 字段, 类型为 { condition, type, field, operator, value }\r\n * @param exprType 表达式类型，sql 或 program\r\n */\r\nfunction buildFieldCode(me, exprType) {\r\n    if (exprType === 'program') {\r\n        switch (me.operator) {\r\n            case '=':\r\n                return me.field + '==' + getValueManifest(me, exprType)\r\n            case '>':\r\n            case '<':\r\n            case '>=':\r\n            case '<=':\r\n            case '!=':\r\n                return me.field + me.operator + getValueManifest(me, exprType)\r\n            case 'like':\r\n                return me.field + '.contains(' + getValueManifest(me, exprType) + ')'\r\n            case 'notLike':\r\n                return '!' + me.field + '.contains(' + getValueManifest(me, exprType) + ')'\r\n            case 'in':\r\n                return me.field + ' in [' + getValueArrayManifest(me, exprType) + ']'\r\n            case 'notIn':\r\n                return me.field + ' !in [' + getValueArrayManifest(me, exprType) + ']'\r\n        }\r\n\r\n    } else if (exprType === 'sql') {\r\n        switch (me.operator) {\r\n            case '=':\r\n            case '>':\r\n            case '<':\r\n            case '>=':\r\n            case '<=':\r\n            case '!=':\r\n                return me.field + me.operator + getValueManifest(me, exprType)\r\n            case 'like':\r\n                return me.field + ' like ' + getValueManifest(me, exprType)\r\n            case 'notLike':\r\n                return me.field + ' not like ' + getValueManifest(me, exprType)\r\n            case 'in':\r\n                return me.field + ' in (' + getValueArrayManifest(me, exprType) + ')'\r\n            case 'notIn':\r\n                return me.field + ' not in (' + getValueArrayManifest(me, exprType) + ')'\r\n        }\r\n    }\r\n    throw Error('不支持的操作符: ' + me.operator)\r\n}\r\n\r\n/**\r\n * 构造某一个 field 的值表示类型\r\n * @param me AST 字段\r\n * @param exprType 表达式类型，sql 或 program\r\n */\r\nfunction getValueManifest(me, exprType) {\r\n    if (exprType === 'program') {\r\n        if (me.metaProperty.dataType === 'String') {\r\n            const value = Conv.asString(me.value)\r\n            return \"'\" + value.replace(\"'\", \"\\\\'\") + \"'\"\r\n\r\n        } else if (['int', 'Integer'].includes(me.metaProperty.dataType)) {\r\n            return Conv.asInteger(me.value).toString()\r\n\r\n        } else if (['long', 'Long'].includes(me.metaProperty.dataType)) {\r\n            return Conv.asLong(me.value) + \"L\"\r\n\r\n        } else if (['BigDecimal'].includes(me.metaProperty.dataType)) {\r\n            return Conv.asDecimal(me.value).toString()\r\n        }\r\n\r\n    } else if (exprType === 'sql') {\r\n        if (me.metaProperty.dataType === 'String') {\r\n            const value = Conv.asString(me.value)\r\n            return \"'\" + value.replace(\"'\", \"\\\\'\") + \"'\"\r\n\r\n        } else if (['int', 'Integer'].includes(me.metaProperty.dataType)) {\r\n            return Conv.asInteger(me.value).toString()\r\n\r\n        } else if (['long', 'Long'].includes(me.metaProperty.dataType)) {\r\n            return Conv.asLong(me.value)\r\n\r\n        } else if (['BigDecimal'].includes(me.metaProperty.dataType)) {\r\n            return Conv.asDecimal(me.value).toString()\r\n        }\r\n    }\r\n\r\n    throw Error(\"不支持的数据类型:\" + me.metaProperty.dataType)\r\n}\r\n\r\n/**\r\n * 构造某一个 field 的数组值表示类型\r\n * @param me AST 字段\r\n * @param exprType 表达式类型，sql 或 program\r\n */\r\nfunction getValueArrayManifest(me, exprType) {\r\n    const value = Conv.asString(me.value)\r\n    const values = _.split(value, ',')\r\n    const sb = []\r\n\r\n    if (exprType === 'program') {\r\n        if (me.metaProperty.dataType === 'String') {\r\n            for (let i = 0; i < values.length; i++) {\r\n                if (i > 0) {\r\n                    sb.push(',')\r\n                }\r\n                sb.push(\"'\")\r\n                sb.push(values[i].replace(\"'\", \"\\\\'\"))\r\n                sb.push(\"'\")\r\n            }\r\n            return sb.join('')\r\n\r\n        } else if (['int', 'Integer'].includes(me.metaProperty.dataType)) {\r\n            for (let i = 0; i < values.length; i++) {\r\n                if (i > 0) {\r\n                    sb.push(',')\r\n                }\r\n                sb.push(Conv.asInteger(values[i]))\r\n            }\r\n            return sb.join('')\r\n\r\n        } else if (['long', 'Long'].includes(me.metaProperty.dataType)) {\r\n            for (let i = 0; i < values.length; i++) {\r\n                if (i > 0) {\r\n                    sb.push(',')\r\n                }\r\n                sb.push(Conv.asLong(values[i]))\r\n                sb.push('L')\r\n            }\r\n            return sb.join('')\r\n\r\n        } else if (me.metaProperty.dataType === 'BigDecimal') {\r\n            for (let i = 0; i < values.length; i++) {\r\n                if (i > 0) {\r\n                    sb.push(',')\r\n                }\r\n                sb.push(Conv.asDecimal(values[i]))\r\n            }\r\n            return sb.join('')\r\n        }\r\n\r\n    } else if (exprType === 'sql') {\r\n        if (me.metaProperty.dataType === 'String') {\r\n            for (let i = 0; i < values.length; i++) {\r\n                if (i > 0) {\r\n                    sb.push(',')\r\n                }\r\n                sb.push(\"'\")\r\n                sb.push(values[i].replace(\"'\", \"\\\\'\"))\r\n                sb.push(\"'\")\r\n            }\r\n            return sb.join('')\r\n\r\n        } else if (['int', 'Integer', 'long', 'Long'].includes(me.metaProperty.dataType)) {\r\n            for (let i = 0; i < values.length; i++) {\r\n                if (i > 0) {\r\n                    sb.push(',')\r\n                }\r\n                sb.push(Conv.asLong(values[i]))\r\n            }\r\n            return sb.join('')\r\n\r\n        } else if (me.metaProperty.dataType === 'BigDecimal') {\r\n            for (let i = 0; i < values.length; i++) {\r\n                if (i > 0) {\r\n                    sb.push(',')\r\n                }\r\n                sb.push(Conv.asDecimal(values[i]))\r\n            }\r\n            return sb.join('')\r\n        }\r\n    }\r\n\r\n    throw Error(\"不支持的数据类型:\" + me.metaProperty.dataType)\r\n}\r\n\r\n/**\r\n * 递归查找元数据\r\n */\r\nfunction foundMetaProperty(ast, meta) {\r\n    if (ast.type === 'group') {\r\n        _.forEach(ast.exprs, exprItem => {\r\n            foundMetaProperty(exprItem, meta)\r\n        })\r\n        return\r\n    }\r\n\r\n    // 将 ast.field 属性从 \"tableName.propertyName\" 模式分离出 entityName 和 propertyName\r\n    if (!ast.field) {\r\n        return\r\n    }\r\n    const pos = _.indexOf(ast.field, '.')\r\n\r\n    if (pos < 0) {\r\n        throw Error(\"表达式中的字段名不正确，应该是 tableName.propertyName 的格式，但是实际是：\" + ast.field)\r\n    }\r\n\r\n    const entityName = ast.field.substring(0, pos)\r\n    const propertyName = ast.field.substring(pos + 1)\r\n\r\n    // 从 meta.metaProperties 找到 metaProperty\r\n    const metaEntity = _.find(meta, it => it.name === entityName)\r\n    if (!metaEntity) {\r\n        throw Error(\"没有找到实体\" + entityName + \"的元数据\")\r\n    }\r\n\r\n    const metaProperty = _.find(metaEntity.metaProperties, it => it.name === propertyName)\r\n    if (!metaProperty) {\r\n        throw Error(\"没有找到实体\" + entityName + \"的属性\" + propertyName + \"的元数据\")\r\n    }\r\n\r\n    ast.metaProperty = metaProperty\r\n}","<template>\r\n  <template v-if=\"parseFail\">\r\n    <el-result v-if=\"parseFailSubTitle === '正在等待解析' || parseFailSubTitle === '正在等待元数据'\"\r\n               :title=\"parseFailTitle\"\r\n               :sub-title=\"parseFailSubTitle\">\r\n      <template #icon>\r\n        <el-icon size=\"150px\" class=\"rotate-icon rotating\"><Loading /></el-icon>\r\n      </template>\r\n    </el-result>\r\n    <el-result v-else\r\n               icon=\"error\" :title=\"parseFailTitle\"\r\n               :sub-title=\"parseFailSubTitle\"\r\n               style=\"width:100%;\">\r\n      <template #extra>\r\n        <el-button type=\"primary\" size=\"small\" @click=\"resetExprs\">强制清空</el-button>\r\n        <el-button type=\"default\" size=\"small\" @click=\"retryParse\">重新解析</el-button>\r\n        <br/>\r\n        <code\r\n            style=\"color: var(--el-text-color-secondary); font-size: 13px;word-wrap: break-word;line-break: auto;width:100%;text-align: left\">{{\r\n            modelValue\r\n          }}</code>\r\n      </template>\r\n    </el-result>\r\n  </template>\r\n  <template v-else>\r\n    <YvQuerycode :exprs=\"exprs\" :selector=\"selector\" :meta=\"meta\" style=\"width:100%;\" :code=\"modelValue\"/>\r\n    <el-button v-if=\"isChanged\" type=\"primary\" @click=\"saveToModel\">应用</el-button>\r\n    <el-button v-if=\"isChanged\" type=\"default\" @click=\"cancelChange\">放弃</el-button>\r\n  </template>\r\n</template>\r\n<script>\r\nimport _ from \"lodash\";\r\nimport {renderIcon} from \"../../utils\";\r\nimport YvQuerycode from \"./yv-querycode.vue\"\r\nimport {buildCode, buildAST} from './yv-querybuild-util'\r\nimport {ElMessage} from 'element-plus'\r\nimport {Loading} from '@element-plus/icons-vue'\r\n\r\nexport default {\r\n  components: {YvQuerycode, Loading},\r\n  props: {\r\n    modelValue: String,\r\n    meta: Array,\r\n    exprType: String,\r\n  },\r\n  emits: [\r\n    'update:modelValue',\r\n    'changed',\r\n  ],\r\n  data() {\r\n\r\n    return {\r\n      selector: {\r\n        currentExprs: undefined,\r\n      },\r\n      isChanged: false,\r\n      parseFail: true,\r\n      parseFailTitle: '等待解析',\r\n      parseFailSubTitle: '正在等待解析',\r\n      /**\r\n       * Exprs 表达式树, 格式为:\r\n       * {condition: 'and', type: 'field', field: 'fild1', operator: '=', value: 'value1'},\r\n       * {condition: 'and', type: 'field', field: 'fild2', operator: '=', value: 'value1'},\r\n       * {condition: 'and', type: 'field', field: 'fild3', operator: '=', value: 'value1'},\r\n       * {\r\n       *   condition: 'and', type: 'group', exprs: [\r\n       *     {condition: 'and', type: 'field', field: 'fild11', operator: '=', value: 'value1'},\r\n       *     {condition: 'and', type: 'field', field: 'fild12', operator: '=', value: 'value1'},\r\n       *     {condition: 'and', type: 'field', field: 'fild13', operator: '=', value: 'value1'},\r\n       *   ]\r\n       * },\r\n       * {\r\n       *   condition: 'and', type: 'group', exprs: [\r\n       *     {condition: 'and', type: 'field', field: 'fild21', operator: '=', value: 'value1'},\r\n       *     {condition: 'and', type: 'field', field: 'fild22', operator: '=', value: 'value1'},\r\n       *     {condition: 'and', type: 'field', field: 'fild23', operator: '=', value: 'value1'},\r\n       *   ]\r\n       * }\r\n       */\r\n      exprs: [],\r\n    }\r\n  },\r\n  mounted() {\r\n    this.selector.currentExprs = this.exprs\r\n  },\r\n  watch: {\r\n    modelValue: {\r\n      immediate: true,\r\n      handler(newVal) {\r\n        this.parseCode(newVal)\r\n      }\r\n    },\r\n    exprs: {\r\n      deep: true,\r\n      handler(newVal) {\r\n        this.$emit('changed', newVal)\r\n        this.isChanged = true\r\n      }\r\n    },\r\n    meta: {\r\n      handler() {\r\n        // 元数据改变后，要重新尝试解析\r\n        this.parseCode(this.modelValue)\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    resetExprs() {\r\n      this.parseFail = false\r\n      this.exprs = []\r\n    },\r\n\r\n    retryParse() {\r\n      this.parseCode(this.modelValue)\r\n    },\r\n\r\n    /**\r\n     * 在当前选中的范围添加条件\r\n     */\r\n    appendField(field) {\r\n      if (!this.selector?.currentExprs || this.exprs.length === 0) {\r\n        // 没有选中的范围，默认以根节点为选中范围\r\n        this.exprs.push({\r\n          condition: 'and', type: 'field', field: field, operator: '=', value: ''\r\n        })\r\n        return\r\n      }\r\n      this.selector.currentExprs.push({\r\n        condition: 'and', type: 'field', field: field, operator: '=', value: ''\r\n      })\r\n    },\r\n\r\n    /**\r\n     * 将树形模式中所有的数据保存成代码\r\n     */\r\n    toCode() {\r\n      if (!this.exprs || this.exprs.length === 0) {\r\n        return 'true'\r\n      }\r\n      return buildCode({\r\n        exprs: this.exprs,\r\n        meta: this.meta,\r\n        exprType: this.exprType\r\n      })\r\n    },\r\n\r\n    /**\r\n     * 从代码(Program/SQL)中解析成树形模式\r\n     */\r\n    parseCode(code) {\r\n      // 获取到引用本组件的 exprform 组件\r\n      const $exprform = this.$parent?.$parent?.$parent?.$parent?.$parent\r\n      if ($exprform) {\r\n        console.log('parseCode', $exprform.$props.vjson.reference, code)\r\n      }\r\n\r\n      if (code === 'true' || !code) {\r\n        // 没有代码, 解析为空\r\n        this.parseFail = false\r\n        this.exprs = []\r\n        this.$nextTick(() => {\r\n          this.isChanged = false\r\n        })\r\n        return\r\n      }\r\n\r\n      if (!this.meta || this.meta.length === 0) {\r\n        // 没有元数据, 无法解析\r\n        this.isWaitingMeta = true\r\n        this.parseFail = true\r\n        this.parseFailTitle = '等待解析'\r\n        this.parseFailSubTitle = '正在等待元数据'\r\n        return\r\n\r\n      } else {\r\n        this.isWaitingMeta = false\r\n      }\r\n\r\n      try {\r\n        const ast = buildAST({\r\n          meta: this.meta,\r\n          exprType: this.exprType,\r\n          code: code\r\n        })\r\n\r\n        if (!ast) {\r\n          // 解析失败\r\n          this.parseFail = true\r\n          this.parseFailTitle = '解析失败'\r\n          this.parseFailSubTitle = '无法获取AST'\r\n          return\r\n        }\r\n        this.parseFail = false\r\n        this.exprs = ast\r\n        this.$nextTick(() => {\r\n          this.isChanged = false\r\n        })\r\n\r\n      } catch (e) {\r\n        // console.error(e)\r\n        // system.msg(e.toString())\r\n        // ElMessage({\r\n        //   message: '编译不通过.',\r\n        //   grouping: true,\r\n        //   type: 'warning',\r\n        // })\r\n        this.parseFailTitle = '解析失败'\r\n        this.parseFailSubTitle = e.toString()\r\n        this.parseFail = true\r\n      }\r\n    },\r\n\r\n    /**\r\n     * 将树形模式中所有的数据保存成代码\r\n     */\r\n    saveToModel() {\r\n      const code = this.toCode()\r\n      this.$emit('update:modelValue', code)\r\n      this.$nextTick(() => {\r\n        this.isChanged = false\r\n      })\r\n    },\r\n\r\n    /**\r\n     * 放弃修改\r\n     */\r\n    cancelChange() {\r\n      this.exprs = []\r\n      this.$nextTick(() => {\r\n        this.parseCode(this.modelValue)\r\n        this.$nextTick(() => {\r\n          this.isChanged = false\r\n        })\r\n      })\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style>\r\n.rotate-icon {\r\n  transition: transform 2s linear;\r\n}\r\n\r\n.rotating {\r\n  animation: rotation 2s linear infinite;\r\n}\r\n\r\n@keyframes rotation {\r\n  from {\r\n    transform: rotate(0deg);\r\n  }\r\n  to {\r\n    transform: rotate(360deg);\r\n  }\r\n}\r\n</style>","<template>\r\n  <!--添加边框样式-->\r\n  <el-card style=\"min-width:530px;\"\r\n           shadow=\"never\"\r\n           class=\"order-code\">\r\n    <el-empty v-if=\"!exprs || exprs.length<=0\" :description=\"code?code:'没有排序'\" :image-size=\"50\"\r\n              style=\"padding: 0\">\r\n      <el-button @click=\"addField\">添加排序字段</el-button>\r\n    </el-empty>\r\n    <template v-else>\r\n      <el-row v-for=\"(expr,idx) in exprs\">\r\n        <YvQueryField ref=\"_editors\" :meta=\"meta\" :expr=\"expr\" exprType=\"sql_order\"/>\r\n        <el-button link :icon=\"renderIcon('Close')\" @click=\"removeExpr(idx)\" style=\"height: 32px\"/>\r\n      </el-row>\r\n      <el-row>\r\n        <el-button link :icon=\"renderIcon('Plus')\" @click=\"addField\">添加排序字段</el-button>\r\n      </el-row>\r\n    </template>\r\n  </el-card>\r\n</template>\r\n<script>\r\nimport _ from 'lodash'\r\nimport {renderIcon} from \"../../utils\"\r\nimport YvQueryField from './yv-query-field.vue'\r\nimport {toRaw} from \"vue\";\r\n\r\nexport default {\r\n  components: {YvQueryField},\r\n  props: {\r\n    // 表达式\r\n    // {field: 'fild1', operator: 'asc'},\r\n    // {field: 'fild2', operator: 'desc'},\r\n    exprs: Array,\r\n    meta: Array,\r\n    code: String\r\n  },\r\n  data() {\r\n    return {}\r\n  },\r\n  destroyed() {\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    addField() {\r\n      this.exprs.push({\r\n        field: '', operator: 'asc'\r\n      })\r\n    },\r\n    removeExpr(idx) {\r\n      this.exprs.splice(idx, 1)\r\n    },\r\n  },\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.order-code {\r\n  border: 1px solid #ccc;\r\n  overflow: auto;\r\n\r\n  & > .el-card__body {\r\n    padding: 10px;\r\n\r\n    .el-row {\r\n      box-sizing: border-box;\r\n      margin-bottom: 10px;\r\n      display: flex;\r\n      flex-direction: row;\r\n      flex-wrap: nowrap;\r\n      position: relative;\r\n\r\n      & > div {\r\n        margin-right: 5px;\r\n        flex-shrink: 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  &.is-never-shadow {\r\n    .is-never-shadow {\r\n      background: rgba(244, 244, 244, .5);\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <template v-if=\"parseFail\">\r\n    <el-result icon=\"error\" :title=\"parseFailTitle\"\r\n               :sub-title=\"parseFailSubTitle\"\r\n               style=\"width:100%;\">\r\n      <template #extra>\r\n        <el-button type=\"primary\" size=\"small\" @click=\"resetExprs\">强制清空</el-button>\r\n        <el-button type=\"default\" size=\"small\" @click=\"retryParse\">重新解析</el-button>\r\n        <br/>\r\n        <code\r\n            style=\"color: var(--el-text-color-secondary); font-size: 13px;word-wrap: break-word;line-break: auto;width:100%;text-align: left\">{{\r\n            modelValue\r\n          }}</code>\r\n      </template>\r\n    </el-result>\r\n  </template>\r\n  <template v-else>\r\n    <YvOrdercode :exprs=\"exprs\" :meta=\"meta\" style=\"width:100%;\" :code=\"modelValue\"/>\r\n  </template>\r\n</template>\r\n<script>\r\nimport _ from \"lodash\";\r\nimport {renderIcon} from \"../../utils\";\r\nimport YvOrdercode from \"./yv-ordercode.vue\"\r\nimport {buildCode, buildAST} from './yv-querybuild-util'\r\nimport {ElMessage} from 'element-plus'\r\n\r\nexport default {\r\n  components: {YvOrdercode},\r\n  props: {\r\n    modelValue: String,\r\n    meta: Array,\r\n    exprType: String,\r\n  },\r\n  emits: [\r\n    'update:modelValue',\r\n    'changed',\r\n  ],\r\n  data() {\r\n\r\n    return {\r\n      isChanged: false,\r\n      parseFail: true,\r\n      parseFailTitle: '等待解析',\r\n      parseFailSubTitle: '正在等待解析',\r\n      /**\r\n       * Exprs 表达式树, 格式为:\r\n       * {field: 'fild1', operator: 'asc'},\r\n       * {field: 'fild2', operator: 'desc'},\r\n       */\r\n      exprs: [],\r\n    }\r\n  },\r\n  watch: {\r\n    modelValue: {\r\n      immediate: true,\r\n      handler(newVal) {\r\n        this.parseCode(newVal)\r\n      }\r\n    },\r\n    exprs: {\r\n      deep: true,\r\n      handler(newVal) {\r\n        this.$emit('changed', newVal)\r\n        this.isChanged = true\r\n        this.saveToModel()\r\n      }\r\n    },\r\n    meta: {\r\n      handler() {\r\n        // 元数据改变后，要重新尝试解析\r\n        this.parseCode(this.modelValue)\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    resetExprs() {\r\n      this.parseFail = false\r\n      this.exprs = []\r\n    },\r\n\r\n    retryParse() {\r\n      this.parseCode(this.modelValue)\r\n    },\r\n\r\n    /**\r\n     * 在当前选中的范围添加条件\r\n     */\r\n    appendField(field) {\r\n      this.exprs.push({\r\n        field: field, operator: 'asc'\r\n      })\r\n    },\r\n\r\n    /**\r\n     * 将树形模式中所有的数据保存成代码\r\n     */\r\n    toCode() {\r\n      if (!this.exprs || this.exprs.length === 0) {\r\n        return ''\r\n      }\r\n      return buildCode({\r\n        exprs: this.exprs,\r\n        meta: this.meta,\r\n        exprType: this.exprType\r\n      })\r\n    },\r\n\r\n    /**\r\n     * 从代码(Program/SQL)中解析成树形模式\r\n     */\r\n    parseCode(code) {\r\n      // 获取到引用本组件的 exprform 组件\r\n      const $exprform = this.$parent?.$parent?.$parent?.$parent?.$parent\r\n      if ($exprform) {\r\n        console.log('parseCode', $exprform.$props.vjson.reference, code)\r\n      }\r\n\r\n      if (code === 'true' || !code) {\r\n        // 没有代码, 解析为空\r\n        this.parseFail = false\r\n        this.exprs = []\r\n        this.$nextTick(() => {\r\n          this.isChanged = false\r\n        })\r\n        return\r\n      }\r\n\r\n      if (!this.meta || this.meta.length === 0) {\r\n        // 没有元数据, 无法解析\r\n        this.isWaitingMeta = true\r\n        this.parseFail = true\r\n        this.parseFailTitle = '等待解析'\r\n        this.parseFailSubTitle = '正在等待元数据'\r\n        return\r\n\r\n      } else {\r\n        this.isWaitingMeta = false\r\n      }\r\n\r\n      try {\r\n        const ast = buildAST({\r\n          meta: this.meta,\r\n          exprType: this.exprType,\r\n          code: code\r\n        })\r\n\r\n        if (!ast) {\r\n          // 解析失败\r\n          this.parseFail = true\r\n          this.parseFailTitle = '解析失败'\r\n          this.parseFailSubTitle = '无法获取AST'\r\n          return\r\n        }\r\n        this.parseFail = false\r\n        this.exprs = ast\r\n        this.$nextTick(() => {\r\n          this.isChanged = false\r\n        })\r\n\r\n      } catch (e) {\r\n        // console.error(e)\r\n        // system.msg(e.toString())\r\n        // ElMessage({\r\n        //   message: '编译不通过.',\r\n        //   grouping: true,\r\n        //   type: 'warning',\r\n        // })\r\n        this.parseFailTitle = '解析失败'\r\n        this.parseFailSubTitle = e.toString()\r\n        this.parseFail = true\r\n      }\r\n    },\r\n\r\n    /**\r\n     * 将树形模式中所有的数据保存成代码\r\n     */\r\n    saveToModel() {\r\n      const code = this.toCode()\r\n      this.$emit('update:modelValue', code)\r\n      this.$nextTick(() => {\r\n        this.isChanged = false\r\n      })\r\n    },\r\n\r\n    /**\r\n     * 放弃修改\r\n     */\r\n    cancelChange() {\r\n      this.exprs = []\r\n      this.$nextTick(() => {\r\n        this.parseCode(this.modelValue)\r\n        this.$nextTick(() => {\r\n          this.isChanged = false\r\n        })\r\n      })\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <draggable tag=\"div\" :list=\"metaItems\" item-key=\"id\" :component-data=\"{class: 'enumeration-ul'}\"\r\n             v-bind=\"{group:'panesGroup', ghostClass: 'ghost', handle: '.icon-tuozhuai'}\"\r\n             @update=\"_dragFinish\"\r\n  >\r\n\r\n    <template #item=\"{ element: item, index: idx }\">\r\n      <div class=\"enumeration\" :key=\"item.name\">\r\n        <div class=\"enumeration-col\">\r\n          <span class=\"iconfont icon-tuozhuai\"></span>\r\n        </div>\r\n        <div class=\"enumeration-col\">\r\n          <span class=\"first\">{{ item.title }}</span>\r\n          <span class=\"second\">{{ item.name }}</span>\r\n        </div>\r\n        <div class=\"enumeration-col\">\r\n          <el-button link type=\"danger\" :icon=\"renderIcon('Close')\" @click=\"removeItem(idx)\" style=\"height: 32px\">删除\r\n          </el-button>\r\n        </div>\r\n      </div>\r\n    </template>\r\n  </draggable>\r\n</template>\r\n<script>\r\nimport baseVjsonMix from \"./baseVjsonMix\";\r\nimport _ from \"lodash\";\r\nimport {renderIcon} from '../../utils'\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  props: {\r\n    modelValue: String,\r\n    meta: Array,\r\n  },\r\n  emits: [\r\n    'update:modelValue',\r\n  ],\r\n  data() {\r\n    // 用逗号分割 bind.value 绑定的字符串, 转换为数组\r\n    let bindValue = this.bind?.value\r\n    let listValue = []\r\n    if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n      bindValue = bindValue.substring(1, bindValue.length - 1)\r\n    }\r\n    if (bindValue) {\r\n      listValue = (_.get(this.vcxt.scope, bindValue) ?? '').split(',')\r\n    }\r\n\r\n    return {\r\n      metaItems: [],\r\n      bind: this.vjson.bind,\r\n      stopWatchBindValue: null,\r\n    }\r\n  },\r\n  mounted() {\r\n    let bindValue = this.bind?.value\r\n    if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n      bindValue = bindValue.substring(1, bindValue.length - 1)\r\n    }\r\n    if (bindValue) {\r\n      this.stopWatchBindValue = this.vcxt.scope.$watch(bindValue, (newVal) => {\r\n        this.reloadMetaItems()\r\n      }, {immediate: true})\r\n    }\r\n  },\r\n  unmounted() {\r\n    if (this.stopWatchBindValue) {\r\n      this.stopWatchBindValue()\r\n      this.stopWatchBindValue = null\r\n    }\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    appendParam(param) {\r\n      // 重复的不添加\r\n      if (_.find(this.metaItems, (item) => item.name === param.name)) {\r\n        system.msg('已存在相同的参数')\r\n        return\r\n      }\r\n\r\n      this.metaItems.push(param)\r\n      this.$nextTick(() => {\r\n        this._saveMetaItems()\r\n      })\r\n    },\r\n    removeItem(idx) {\r\n      this.metaItems.splice(idx, 1)\r\n      this.$nextTick(() => {\r\n        this._saveMetaItems()\r\n      })\r\n    },\r\n    _dragFinish() {\r\n      this.$nextTick(() => {\r\n        this._saveMetaItems()\r\n      })\r\n    },\r\n    _saveMetaItems() {\r\n      const newVal = this.metaItems\r\n\r\n      let bindValue = this.bind?.value\r\n      if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n        bindValue = bindValue.substring(1, bindValue.length - 1)\r\n      }\r\n      if (bindValue) {\r\n        const notEmptyList = _.map(newVal, (item) => item.name)\r\n        if (notEmptyList && _.size(notEmptyList) > 0) {\r\n          _.set(this.vcxt.scope, bindValue, notEmptyList.join(','))\r\n        } else {\r\n          _.set(this.vcxt.scope, bindValue, '')\r\n        }\r\n      }\r\n    },\r\n    reloadMetaItems() {\r\n      let bindValue = this.bind?.value\r\n      if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n        bindValue = bindValue.substring(1, bindValue.length - 1)\r\n      }\r\n      if (bindValue) {\r\n        const newVal = _.get(this.vcxt.scope, bindValue) ?? ''\r\n        const listValue = _.filter((newVal ?? '').split(','), (item) => !!item)\r\n        console.log('reload meta items', newVal)\r\n\r\n        this.metaItems = _.map(listValue, (param) => {\r\n          // 寻找 meta 中所有的 metaProperties 元素，如果 name相等，则返回 metaProperties 元素\r\n          for (let i = 0; i < this.meta.length; i++) {\r\n            let item = this.meta[i]\r\n            let metaProperties = _.find(item.metaProperties, r => r.name === param)\r\n            if (metaProperties) {\r\n              return metaProperties\r\n            } else {\r\n              return {name: param, title: param}\r\n            }\r\n          }\r\n        })\r\n        return\r\n      }\r\n\r\n      this.metaItems = []\r\n    }\r\n  },\r\n  watch: {\r\n    meta: {\r\n      deep: true,\r\n      handler(newVal, oldVal) {\r\n        console.log('meta changed', newVal, oldVal)\r\n        this.reloadMetaItems()\r\n      }\r\n    },\r\n    // metaItems: {\r\n    //   handler(newVal, oldVal) {\r\n    //     let bindValue = this.bind?.value\r\n    //     if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n    //       bindValue = bindValue.substring(1, bindValue.length - 1)\r\n    //     }\r\n    //     if (bindValue) {\r\n    //       const notEmptyList = _.map(newVal, (item) => item.name)\r\n    //\r\n    //       if (notEmptyList && _.size(notEmptyList) > 0) {\r\n    //         _.set(this.vcxt.scope, bindValue, notEmptyList.join(','))\r\n    //       } else {\r\n    //         _.set(this.vcxt.scope, bindValue, '')\r\n    //       }\r\n    //     }\r\n    //   },\r\n    //   deep: true,\r\n    // }\r\n  },\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.enumeration-ul {\r\n  padding: 5px;\r\n\r\n  .enumeration {\r\n    margin-bottom: 5px;\r\n    display: flex;\r\n    flex-direction: row;\r\n    border-bottom: 1px solid var(--frist-border-color);\r\n\r\n    .enumeration-col {\r\n      &:nth-child(1) {\r\n        line-height: 32px;\r\n        padding-right: 5px;\r\n        cursor: grab;\r\n        font-size: 20px;\r\n        position: relative;\r\n        top: 1px\r\n      }\r\n\r\n      &:nth-child(2) {\r\n        line-height: 32px;\r\n        flex: 1;\r\n        padding-right: 3px;\r\n\r\n        .first {\r\n\r\n        }\r\n\r\n        .second {\r\n          color: var(--el-text-color-secondary);\r\n          font-size: 13px;\r\n          padding-left: 5px;\r\n        }\r\n      }\r\n\r\n      &:nth-child(3) {\r\n        line-height: 32px;\r\n\r\n        span:nth-child(1) {\r\n          margin: 0 5px\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <el-empty v-if=\"!!emptyText\" :style=\"calcStyleAndWidth\" :description=\"emptyText\">\r\n  </el-empty>\r\n  <div v-else-if=\"!hidden\"\r\n       :class=\"[calcClass, 'yv-exprform']\"\r\n       :style=\"calcStyleAndWidth\">\r\n    <split :class=\"['default-theme','split-wrap', 'expr-all']\">\r\n      <split-area :min-size='5' :size='75' class=\"left\">\r\n        <el-empty v-if=\"readonly\"/>\r\n        <el-tabs v-else class=\"help-right\" type=\"card\" tabPosition=\"bottom\" v-model=\"tabMode\" @tab-change=\"_tabChanged\">\r\n          <el-tab-pane label=\"树形模式\" name=\"treeMode\" :lazy=\"true\" v-if=\"!vjson.hiddenTableMode\">\r\n            <YvVjsonParambuild v-if=\"exprType==='param'\" :readonly=\"readonly\"\r\n                               :vjson=\"vjson\" :vcxt=\"vcxt\" :meta=\"meta\" ref=\"parambuild\"/>\r\n\r\n            <YvQuerybuild v-if=\"exprType==='program'||exprType==='sql'\"\r\n                          :modelValue=\"realValue\" :meta=\"meta\" @update:modelValue=\"updateRealValue\"\r\n                          :expr-type=\"vjson.exprType\"\r\n                          ref=\"querybuild\"/>\r\n            <YvOrderbuild v-if=\"exprType==='sql_order'\"\r\n                          :modelValue=\"realValue\" :meta=\"meta\" @update:modelValue=\"updateRealValue\"\r\n                          :expr-type=\"vjson.exprType\"\r\n                          ref=\"querybuild\"/>\r\n          </el-tab-pane>\r\n          <el-tab-pane v-if=\"!vjson.hiddenCodeMode && (exprType==='program'||exprType==='sql'||exprType==='sql_order')\"\r\n                       :label=\"exprType==='program'?'代码模式': 'SQL模式'\"\r\n                       name=\"codeMode\" style=\"height:100%;\" :lazy=\"true\">\r\n            <YvSrcEditor v-if=\"exprType==='sql'||exprType==='sql_order'\" language=\"sql\" :modelValue=\"realValue\"\r\n                         class=\"expr-body\"\r\n                         @update:modelValue=\"updateRealValue\" ref=\"editor\"/>\r\n            <YvSrcEditor v-if=\"exprType==='program'\" language=\"javascript\" :modelValue=\"realValue\" class=\"expr-body\"\r\n                         @update:modelValue=\"updateRealValue\" ref=\"editor\"/>\r\n            <!--\r\n            <div ref=\"_inner\" class=\"expr-body\"/>\r\n            -->\r\n          </el-tab-pane>\r\n          <el-tab-pane label=\"说明文档\" name=\"docMode\" :lazy=\"true\" v-if=\"!vjson.hiddenDocMode\">\r\n            <Markdown :source=\"vjson.markdown\"/>\r\n          </el-tab-pane>\r\n        </el-tabs>\r\n      </split-area>\r\n      <split-area :min-size='5' :size='25' class=\"right\">\r\n        <div class=\"help-left\">\r\n          <div class=\"title\">\r\n            环境变量\r\n            <el-input placeholder=\"筛选\" v-model=\"_filterTreeRef\"/>\r\n          </div>\r\n          <el-tree\r\n              ref=\"treeRef\"\r\n              class=\"tree\"\r\n              default-expand-all\r\n              v-loading=\"envTree.isLoading\"\r\n              :filter-node-method=\"_filterNode\"\r\n              :props=\"envTree.defaultProps\"\r\n              :data=\"envTree.data\"\r\n              @node-click=\"handleNodeClick\"\r\n          />\r\n        </div>\r\n      </split-area>\r\n    </split>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from \"lodash\";\r\nimport {Exprform} from \"./Defaults\"\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport YvDesignerAgGridCombo from \"../design/designPrint/yv-designer-aggrid-combo.vue\"\r\nimport YvVjsonAgGridDynamic from \"./yv-vjson-aggrid-dynamic.vue\"\r\nimport Markdown from \"vue3-markdown-it\";\r\nimport * as monaco from \"monaco-editor\";\r\nimport YvQuerybuild from \"./yv-querybuild.vue\";\r\nimport YvOrderbuild from \"./yv-orderbuild.vue\";\r\nimport YvVjsonParambuild from './yv-vjson-parambuild.vue';\r\nimport {toRaw} from \"vue\";\r\nimport YvSrcEditor from \"../design/yv-src-editor.vue\"\r\nimport {evalGetBind, evalSetBind} from \"../yv-utils\";\r\n\r\nexport default {\r\n  components: {\r\n    YvSrcEditor,\r\n    YvQuerybuild,\r\n    YvOrderbuild,\r\n    YvDesignerAgGridCombo,\r\n    YvVjsonAgGridDynamic,\r\n    YvVjsonParambuild,\r\n    Markdown\r\n  },\r\n  mixins: [baseVjsonMix],\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Exprform)\r\n\r\n    let tabMode = 'treeMode'\r\n    if (vjson.hiddenTableMode) {\r\n      tabMode = 'codeMode'\r\n    }\r\n\r\n    return {\r\n      _filterTreeRef: '',\r\n      emptyText: vjson.emptyText,\r\n      expr: '',\r\n      formName: vjson.formName,\r\n      envTree: {\r\n        defaultProps: {\r\n          children: 'children',\r\n          label: 'label',\r\n        },\r\n        isLoading: false,\r\n        data: [],\r\n      },\r\n      tabMode,\r\n      source: '文档待补充',\r\n      readonly: vjson.readonly,\r\n      exprType: vjson.exprType,\r\n      envs: vjson.envs,\r\n      bind: vjson.bind,\r\n      stopWatchBindValue: null,\r\n      meta: [],\r\n    }\r\n  },\r\n  mounted() {\r\n    // this.initEditor()\r\n\r\n    // if (this.bind?.value) {\r\n    //   let bindValue = this.bind?.value\r\n    //   if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n    //     bindValue = bindValue.substring(1, bindValue.length - 1)\r\n    //   }\r\n    //\r\n    //   this.stopWatchBindValue = this.vcxt.scope.$watch(bindValue, (newVal) => {\r\n    //     const value = this.editor?.getValue()\r\n    //     if (typeof value !== 'undefined' && value !== newVal) {\r\n    //       this.editor?.setValue(newVal ?? '')\r\n    //     }\r\n    //   })\r\n    // }\r\n\r\n    this.reloadEnvTree()\r\n  },\r\n  unmounted() {\r\n    if (this.stopWatchBindValue) {\r\n      this.stopWatchBindValue()\r\n      this.stopWatchBindValue = null\r\n    }\r\n\r\n    // if (this.editor) {\r\n    //   this.editor?.dispose()\r\n    //   this.editor = null\r\n    // }\r\n  },\r\n  computed: {\r\n    realValue() {\r\n      // let bindValue = this.bind?.value\r\n      // if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n      //   bindValue = bindValue.substring(1, bindValue.length - 1)\r\n      //   return _.get(this.vcxt.scope.$data, bindValue)\r\n      // }\r\n      return evalGetBind(this, 'value')\r\n    },\r\n  },\r\n  watch: {\r\n    // language: {\r\n    //   handler(newVal) {\r\n    //     this.setLanguage(newVal)\r\n    //   }\r\n    // },\r\n    // readonly: {\r\n    //   handler(newVal) {\r\n    //     this.editor?.updateOptions({readOnly: newVal})\r\n    //   }\r\n    // },\r\n    _filterTreeRef: {\r\n      handler(newVal) {\r\n        this.$refs.treeRef.filter(newVal);\r\n        console.log('filter', newVal)\r\n      }\r\n    },\r\n    envs: {\r\n      handler(newVal) {\r\n        console.log('envs changed', toRaw(newVal))\r\n        this.reloadEnvTreeDebounce(this)\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    updateRealValue(newVal) {\r\n      // this.editor?.setValue(newVal ?? '')\r\n      this.$emit('update:modelValue', newVal)\r\n      this.$emit('change', newVal)\r\n      // if (this.bind?.value) {\r\n      //   let bindValue = this.bind?.value\r\n      //   if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n      //     bindValue = bindValue.substring(1, bindValue.length - 1)\r\n      //   }\r\n      //   _.set(this.vcxt.scope, bindValue, newVal)\r\n      // }\r\n      evalSetBind(this, 'value', newVal)\r\n      this.runEvent('change', newVal)\r\n    },\r\n    _tabChanged(mode) {\r\n      // if (mode === 'codeMode' && !this.editor) {\r\n      //   this.$nextTick(() => {\r\n      //     this.initEditor()\r\n      //   })\r\n      // }\r\n    },\r\n    handleNodeClick(node) {\r\n      if (this.tabMode === 'codeMode') {\r\n        // 在光标处插入指定文本\r\n        if (this.readonly || !this.$refs.editor) {\r\n          return\r\n        }\r\n        if (node.entity && node.prop) {\r\n          if (this.exprType === 'sql_order') {\r\n            this.$refs.editor.insertText(node.entity.name + '.' + node.prop.name + ' asc')\r\n          } else {\r\n            this.$refs.editor.insertText(node.entity.name + '.' + node.prop.name)\r\n          }\r\n          this.$refs.editor.focus()\r\n        }\r\n      } else if (this.tabMode === 'treeMode') {\r\n        if (this.$refs.querybuild) {\r\n          this.$refs.querybuild.appendField(node.entity.name + '.' + node.prop.name)\r\n\r\n        } else if (this.$refs.parambuild) {\r\n          this.$refs.parambuild.appendParam({name: node.prop.name, title: node.prop.title})\r\n        }\r\n      }\r\n\r\n    },\r\n    reloadEnvTreeDebounce: _.debounce(function (me) {\r\n      me.reloadEnvTree()\r\n    }, 50),\r\n    reloadEnvTree() {\r\n      const envs = this.envs\r\n      const names = _.map(_.filter(envs, env => !!env?.name), env => env?.name)\r\n      if (!envs || !names || names.length <= 0) {\r\n        this.envTree.data = []\r\n        return\r\n      }\r\n\r\n      this.envTree.isLoading = true\r\n      system.invokeStudio(\"ExpressFormManager@queryEnvTreeByNames\", {\r\n        names,\r\n        exprType: this.exprType\r\n\r\n      }).then(res => {\r\n        if (res.success) {\r\n          const data = res.data\r\n          this.meta = data\r\n\r\n          // 构建树\r\n          const treeData = []\r\n          _.forEach(data, (entity) => {\r\n            const treeItem = {\r\n              key: entity.name,\r\n              label: entity.title + ' - ' + entity.name,\r\n              ...entity,\r\n              children: []\r\n            }\r\n            _.forEach(entity.metaProperties, (prop) => {\r\n              treeItem.children.push({\r\n                key: prop.title + '_' + prop.name,\r\n                label: prop.title + '(' + prop.name + ')',\r\n                entity: entity,\r\n                prop: prop\r\n              })\r\n            })\r\n            treeData.push(treeItem)\r\n          })\r\n          this.envTree.data = treeData\r\n        }\r\n\r\n      }).finally(() => {\r\n        this.envTree.isLoading = false\r\n      })\r\n    },\r\n    initEditor() {\r\n      const option = {\r\n        value: this.modelValue,\r\n        language: this.exprType === 'program' ? 'javascript' : 'sql',\r\n        minimap: {\r\n          enabled: false\r\n        },\r\n        selectOnLineNumbers: true,\r\n        renderSideBySide: false,\r\n        automaticLayout: true,\r\n      }\r\n\r\n      if (this.readonly) {\r\n        option.readOnly = this.readonly\r\n      }\r\n\r\n      this.editor = monaco.editor.create(this.$refs._inner, option)\r\n\r\n      this.editor.onDidChangeModelContent(() => {\r\n\r\n      })\r\n\r\n      this.editor.onDidBlurEditorWidget((e) => {\r\n        const value = this.editor.getValue() // 给父组件实时返回最新文本\r\n        this.updateRealValue(value)\r\n\r\n        this.$emit('editor-blur', e)\r\n        this.runEvent('blur', e)\r\n      })\r\n      this.editor.onDidFocusEditorWidget((e) => {\r\n        this.$emit('editor-focus', e)\r\n        this.runEvent('focus', e)\r\n      })\r\n\r\n      _.defer(() => {\r\n        this.editor?.setValue(this.realValue ?? '')\r\n      })\r\n\r\n      this.$emit('editor-mounted', this.editor)\r\n    },\r\n    updateOptions(options) {\r\n      if (this.editor && options) {\r\n        this.editor.updateOptions(options)\r\n      }\r\n    },\r\n    setLanguage(lang) {\r\n      if (this.editor && lang) {\r\n        monaco.editor.setModelLanguage(this.editor.getModel(), lang)\r\n      }\r\n    },\r\n    _filterNode(value, data) {\r\n      if (!value) return true;\r\n\r\n      value = value.toLowerCase();\r\n      const text = data.label;\r\n      if (!text) return true;\r\n      return (\r\n          text.toLowerCase()\r\n              .indexOf(value) >= 0 || text.toLowerCase().indexOf(value) >= 0\r\n      );\r\n    },\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.yv-exprform {\r\n  &.fit-height {\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n\r\n  .expr-all {\r\n    .expr-body {\r\n      height: 100%;\r\n    }\r\n\r\n    .help-left {\r\n      height: 100%;\r\n      display: flex;\r\n      flex-direction: column;\r\n\r\n      .title {\r\n      }\r\n\r\n      .tree {\r\n        flex-grow: 1;\r\n      }\r\n    }\r\n\r\n    .help-right {\r\n      height: 100%;\r\n      overflow: hidden;\r\n      background-color: white;\r\n      padding: 0;\r\n      display: flex;\r\n      flex-direction: column;\r\n\r\n      & > .el-tabs__header {\r\n        margin-bottom: 10px;\r\n      }\r\n\r\n      & > .el-tabs__content {\r\n        flex: 1;\r\n        overflow-y: auto;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div :id=\"vjson.id\" :key=\"vjson.id\"\r\n       :class=\"[calcClass, 'yv-exprform']\"\r\n       :style=\"calcStyle\"\r\n       @selectme.native=\"_selectMe\"\r\n       @click.stop=\"_selectMe\">\r\n\r\n    <split :class=\"['default-theme','split-wrap', 'expr-all']\" :first-area-default-size=\"100\" direction=\"vertical\">\r\n      <split-area>\r\n        <div class=\"expr-body\" style=\"height:100%;background-color:white\">表达式区域</div>\r\n      </split-area>\r\n      <split-area>\r\n        <split :class=\"['default-theme','split-wrap']\" :first-area-default-size=\"300\" style=\"height:100%;\">\r\n          <split-area :min-size='5' :size='15' class=\"left\">\r\n            <div class=\"help-left\">\r\n              <div class=\"title\">\r\n                环境变量\r\n              </div>\r\n              <el-tree\r\n                  ref=\"treeRef\"\r\n                  class=\"tree\"\r\n                  v-loading=\"envTree.isLoading\"\r\n                  :props=\"envTree.defaultProps\"\r\n                  :data=\"envTree.data\"\r\n              />\r\n            </div>\r\n          </split-area>\r\n          <split-area :min-size='5' :size='15' class=\"left\">\r\n            <el-tabs class=\"help-right\">\r\n              <el-tab-pane label=\"图形模式\">\r\n                图形模式\r\n              </el-tab-pane>\r\n              <el-tab-pane label=\"说明文档\">\r\n                <Markdown :source=\"vjson.markdown\"/>\r\n              </el-tab-pane>\r\n            </el-tabs>\r\n            <!--\r\n            <ag-grid-vue\r\n                class=\"ag-theme-alpine help-right\"\r\n                :columnDefs=\"conditionTableOption.columnDefs\"\r\n                :rowData=\"conditionTableOption.rowData\"\r\n            />\r\n            -->\r\n          </split-area>\r\n        </split>\r\n      </split-area>\r\n    </split>\r\n  </div>\r\n</template>\r\n<script>\r\nimport _ from 'lodash'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport YvDesignExprformProp from \"./yv-design-exprform-prop.vue\"\r\nimport YvVjsonExprform from \"../../vjson/yv-vjson-exprform.vue\"\r\nimport {getDescDefaults, registeComponent} from '../yv-designer-desc'\r\nimport Markdown from 'vue3-markdown-it'\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {Markdown},\r\n  data() {\r\n    return {\r\n      expr: '',\r\n      envTree: {\r\n        defaultProps: {\r\n          children: 'children',\r\n          label: 'label',\r\n        },\r\n        isLoading: false,\r\n        data: [],\r\n      },\r\n      source: this.vjson.markdown\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'vjson.envs': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        const envs = newVal\r\n        if (!newVal) {\r\n          this.envTree.data = []\r\n          return\r\n        }\r\n\r\n        this.envTree.data = _.map(envs, env => {\r\n          return {\r\n            id: env.name,\r\n            label: env.title + ' (' + env.name + ')',\r\n          }\r\n        })\r\n      }\r\n    }\r\n  },\r\n\r\n  install(Vue) {\r\n    const desc = registeComponent('exprform')\r\n    desc.setRuntime('YvVjsonExprform', YvVjsonExprform)\r\n    desc.setDesign('YvDesignExprform', this)\r\n    desc.setProp('YvDesignExprformProp', YvDesignExprformProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'exprform',\r\n        vjson.bind?.value,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n    ]\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'language', desc: '语言模式', bindable: true},\r\n      {name: 'readonly', desc: '只读', bindable: true},\r\n      {name: 'envs', desc: '环境变量', bindable: true},\r\n      {name: 'exprType', desc: '模式', bindable: true},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.yv-design-mode {\r\n  .yv-exprform {\r\n    .expr-all {\r\n      height: 100%;\r\n\r\n      .expr-body {\r\n        height: 100%;\r\n      }\r\n\r\n      .help-left {\r\n        height: 100%;\r\n        display: flex;\r\n        flex-direction: column;\r\n\r\n        .title {\r\n        }\r\n\r\n        .tree {\r\n          flex-grow: 1;\r\n        }\r\n      }\r\n\r\n      .help-right {\r\n        height: 100%;\r\n        overflow: auto;\r\n        background-color: white;\r\n        padding: 0 10px;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n    <ul ref=\"_inner\" v-if=\"!hidden\"\r\n        :class=\"[calcClass, 'yv-list',vjson.pagination?'yv-list-pagination':'']\"\r\n        :style=\"calcStyleAndWidth\">\r\n        <div class=\"yv-list-title\" v-if=\"!!vjson.title\">\r\n            {{vjson.title}}\r\n        </div>\r\n        <li>\r\n            <div class=\"list-left\" v-if=\"vjson.leftBox\"></div>\r\n            <div class=\"list-multiple\" v-if=\"vjson.multiple\">\r\n                <el-checkbox v-model=\"listSelect\"/>\r\n            </div>\r\n            <div class=\"list-center\">\r\n                <template v-for=\"item in vjson.items\">\r\n                    <div class=\"yv-list-row\" v-if=\"item.items.length>0\"\r\n                         :style=\"{justifyContent:(item.align=='between')?'space-between':item.align}\">\r\n                        <div class=\"yv-textel\" v-for=\"list in item.items\"\r\n                             :style=\"{width:list?.textelWidth,flex:list?.textelWidth ? 'none' : '1'}\">\r\n                            <div class=\"yv-textel-fieldlabel\" :style=\"{width:list.labelWidth,fontSize:list.cssFont}\">\r\n                                {{list.fieldLabel}}\r\n                            </div>\r\n                            <div class=\"yv-textel-value\">{{list.model}}</div>\r\n                        </div>\r\n                    </div>\r\n                </template>\r\n            </div>\r\n            <div class=\"list-right\" v-if=\"vjson.rightBox\"></div>\r\n        </li>\r\n        <div class=\"yv-list-pagination\" v-if=\"vjson.pagination\">\r\n            <el-button type=\"primary\" class=\"pre-page\">上一页</el-button>\r\n            <div class=\"now-page\">1/12</div>\r\n            <el-button type=\"primary\" class=\"next-page\">下一页</el-button>\r\n        </div>\r\n    </ul>\r\n</template>\r\n\r\n<script>\r\n    import baseVjsonMix from \"./baseVjsonMix\"\r\n    import _ from \"lodash\";\r\n    import {List} from \"./Defaults\"\r\n\r\n    export default {\r\n        mixins: [baseVjsonMix],\r\n        data() {\r\n            const vjson = _.defaults(this.vjson, List)\r\n\r\n            return {\r\n                hidden: vjson.hidden,\r\n                listSelect: ''\r\n            }\r\n        },\r\n        created() {\r\n            if (this.$props.vcxt?.scope?._registeForm) {\r\n                this.$props.vcxt.scope._registeForm(this)\r\n            }\r\n        },\r\n        unmounted() {\r\n            if (this.$props.vcxt?.scope?._registeForm) {\r\n                this.$props.vcxt.scope._unregForm(this)\r\n            }\r\n        },\r\n        computed: {},\r\n        methods: {}\r\n    }\r\n</script>\r\n<style lang=\"less\">\r\n    .yv-list {\r\n        overflow: scroll;\r\n        margin: 0;\r\n        padding: 0;\r\n\r\n        .yv-list-title {\r\n            line-height: 22px;\r\n            font-size: 16px;\r\n            font-weight: 600;\r\n            padding: 5px 5px 8px 5px;\r\n        }\r\n\r\n        li {\r\n            min-height: 50px;\r\n            border-radius: 5px;\r\n            background: #fff;\r\n            list-style: none;\r\n            display: flex;\r\n            flex-direction: row;\r\n            padding:8px;\r\n\r\n            &>.list-center {\r\n                flex: 1;\r\n\r\n                .yv-list-row {\r\n                    display: flex;\r\n                    flex-direction: row;\r\n\r\n                    .yv-textel {\r\n                        min-height: 24px;\r\n                        font-size: 14px;\r\n\r\n                        .yv-textel-fieldlabel {\r\n                            padding: 0 6px\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            &>.list-multiple{\r\n                .el-checkbox{\r\n                    height:20px\r\n                }\r\n            }\r\n        }\r\n\r\n        &.yv-list-pagination {\r\n            padding-bottom: 48px;\r\n        }\r\n\r\n        .yv-list-pagination {\r\n            position: absolute;\r\n            bottom: 8px;\r\n            left: 0;\r\n            display: flex;\r\n            flex-direction: row;\r\n            justify-content: space-around;\r\n            width: 100%;\r\n\r\n            .now-page {\r\n                flex: 1;\r\n                text-align: center;\r\n                line-height: 32px;\r\n                font-size: 14px;\r\n                color: #646566\r\n            }\r\n\r\n            .el-button--primary {\r\n                flex: 1\r\n            }\r\n        }\r\n    }\r\n</style>","<template>\r\n  <div class=\"property aggrid-property list-property\">\r\n    <div class=\"title\">list 属性</div>\r\n    <el-tabs>\r\n      <el-tab-pane label=\"基本\">\r\n        <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"90px\"\r\n                 size=\"default\" @submit.native.prevent>\r\n          <el-form-item label=\"reference\" prop=\"reference\">\r\n            <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <el-form-item label=\"隐藏\" prop=\"hidden\">\r\n            <el-switch v-model=\"formData.hidden\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"标题\" prop=\"title\">\r\n            <el-input v-model=\"formData.title\"></el-input>\r\n          </el-form-item>\r\n          <el-form-item label=\"标题位置\" v-if=\"formData.title\">\r\n            <el-button-group>\r\n              <el-button size=\"small\" :type=\"formData.titleAlign === 'left'? 'primary':'default'\"\r\n                         @click=\"()=>formData.titleAlign='left'\">左\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.titleAlign === 'center'? 'primary':'default'\"\r\n                         @click=\"()=>formData.titleAlign='center'\">中\r\n              </el-button>\r\n              <el-button size=\"small\" :type=\"formData.titleAlign === 'right'? 'primary':'default'\"\r\n                         @click=\"()=>formData.titleAlign='right'\">右\r\n              </el-button>\r\n            </el-button-group>\r\n          </el-form-item>\r\n          <el-form-item label=\"是否是卡片\" prop=\"hidden\">\r\n            <el-switch v-model=\"formData.isCard\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"分页\" prop=\"pagination\">\r\n            <el-switch v-model=\"formData.pagination\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"是否多选\" prop=\"multiple\">\r\n            <el-switch v-model=\"formData.multiple\"></el-switch>\r\n          </el-form-item>\r\n          <el-divider/>\r\n          <yv-design-input-height :form-data=\"formData\" :designer=\"designer\"/>\r\n        </el-form>\r\n      </el-tab-pane>\r\n      <el-tab-pane label=\"行\">\r\n        <div class=\"sql-param\" v-for=\"(row, rowIdx) in formData.columns\">\r\n          <div class=\"sql-param-num\">行{{ rowIdx + 1 }}</div>\r\n          <div class=\"sql-param-detail\">\r\n            <div class=\"sql-param-detail-row\">\r\n              <el-form-item label=\"高度\">\r\n                <el-input v-model=\"row.height\"></el-input>\r\n              </el-form-item>\r\n            </div>\r\n            <div class=\"sql-param-detail-row\">\r\n              <el-form-item label=\"对齐\">\r\n                <el-select v-model=\"row.align\" class=\"full-width-input\" clearable>\r\n                  <el-option value=\"left\" label=\"左侧对齐\"/>\r\n                  <el-option value=\"between\" label=\"两端\"/>\r\n                  <el-option value=\"right\" label=\"右侧对齐\"/>\r\n                </el-select>\r\n              </el-form-item>\r\n            </div>\r\n            <div class=\"sql-param-detail-row\">\r\n              <div class=\"sql-param-detail-col\">\r\n                <el-button type=\"primary\" link @click=\"removeRow($event, rowIdx)\">删除</el-button>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <el-button type=\"primary\" :icon=\"renderIcon('fa Plus')\" link @click=\"addNewRow\" class=\"enumeration-add-btn\">\r\n          添加一行\r\n        </el-button>\r\n      </el-tab-pane>\r\n    </el-tabs>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignInputHeight from \"./yv-design-input-height.vue\"\r\nimport _ from \"lodash\";\r\n\r\nexport default {\r\n  components: {YvDesignInputHeight},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {},\r\n      dataType: -1,\r\n    }\r\n  },\r\n  methods: {\r\n    addNewRow() {\r\n      if (!_.isArray(this.formData.columns)) {\r\n        this.formData.columns = []\r\n      }\r\n      this.formData.columns.push({\r\n        id: _.uniqueId('_id'),\r\n        items: [],\r\n        xtype:'row'\r\n      })\r\n    },\r\n    removeRow(evt, rowIdx) {\r\n      this.formData.columns?.splice(rowIdx, 1)\r\n    }\r\n  },\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  &.list-property {\r\n\r\n  }\r\n}\r\n\r\n.sql-param {\r\n  display: flex;\r\n  flex-direction: row;\r\n  margin: 3px 0;\r\n\r\n  .el-form-item {\r\n    margin-bottom: 0;\r\n\r\n    label {\r\n      font-size: 14px;\r\n    }\r\n  }\r\n\r\n  .sql-param-num {\r\n    font-size: 14px;\r\n    min-width: 50px;\r\n    text-align: right;\r\n    margin-right: 6px;\r\n    line-height: 30px;\r\n  }\r\n\r\n  .sql-param-detail {\r\n    flex: 1;\r\n    margin-right: 10px;\r\n\r\n    .sql-param-detail-row {\r\n      margin-bottom: 5px;\r\n\r\n      &:nth-child(3) {\r\n        display: flex;\r\n        flex-direction: row;\r\n        justify-content: space-between;\r\n\r\n        .sql-param-detail-col {\r\n          font-size: 13px;\r\n          line-height: 20px;\r\n\r\n          .el-checkbox {\r\n            height: 16px;\r\n            position: relative;\r\n            top: 2px;\r\n          }\r\n\r\n          .el-button > span {\r\n            font-size: 13px;\r\n          }\r\n\r\n          .el-button--primary.is-link {\r\n            padding: 0;\r\n            position: relative;\r\n            top: -1px\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    .el-input__wrapper {\r\n      border-radius: 0;\r\n    }\r\n  }\r\n}\r\n\r\n.yv-form.yv-card {\r\n  background: #fff;\r\n  border: 1px solid var(--el-menu-border-color)\r\n}\r\n</style>","<template>\r\n    <ul :id=\"vjson.id\" :key=\"vjson.id\"\r\n        :class=\"[calcClass, 'yv-list',vjson.pagination?'yv-list-pagination':'']\"\r\n        :style=\"calcStyle\"\r\n        ref=\"_inner\"\r\n        @selectme.native=\"_selectMe\"\r\n        @click.stop=\"_selectMe\">\r\n        <div class=\"yv-list-title\" v-if=\"!!vjson.title\" :style=\"{textAlign:vjson.titleAlign}\">\r\n            {{vjson.title}}\r\n        </div>\r\n        <li>\r\n            <div class=\"list-left\" v-if=\"vjson.leftBox\" :style=\"{width:vjson?.leftBoxWidth}\">\r\n                <draggable :list=\"vjson.leftBox\"\r\n                           v-bind=\"{group:'elGroup', ghostClass: 'ghost', animation: 200}\"\r\n                           tag=\"li\" :component-data=\"{class: 'yv-list-left',gutter:8}\"\r\n                           @end=\"_onDragEnd\" @add=\"(evt)=>_onDragAdd(evt, vjson.items, vjson)\"\r\n                           @update=\"_onDragUpdate\" :move=\"_checkMove\">\r\n                    <template #item=\"{ element: item, index: itemIdx }\">\r\n                        <component :is=\"getDesignCmp(item)\" :key=\"item.id\"\r\n                                   :vjson=\"item\"\r\n                                   :vcxt=\"vcxt\"\r\n                                   :designer=\"designer\"\r\n                                   :parent-list=\"vjson.items\"\r\n                                   :index-of-parent-list=\"itemIdx\"\r\n                                   :parent-component=\"vjson\"/>\r\n                    </template>\r\n                    <template #header>\r\n                        <div class=\"no-widget-hint\" v-if=\"(vjson.items ?? []).length === 0\"\r\n                             style=\"height: 30px;font-size: 15px;\">\r\n                            拖拽组件放置于此处\r\n                        </div>\r\n                    </template>\r\n                </draggable>\r\n            </div>\r\n            <div class=\"list-multiple\" v-if=\"vjson.multiple\">\r\n                <el-checkbox v-model=\"listSelect\"/>\r\n            </div>\r\n            <div class=\"list-center\">\r\n                <template v-for=\"row in vjson.columns\">\r\n                    <draggable :list=\"row.items\" item-key=\"id\"\r\n                               v-bind=\"{group:'elGroup', ghostClass: 'ghost', animation: 200}\"\r\n                               tag=\"div\"\r\n                               :component-data=\"{class: 'yv-list-row',gutter:8,style:{justifyContent:(row.align=='between')?'space-between':row.align}}\"\r\n                               @end=\"_onDragEnd\" @add=\"(evt)=>_onDragAdd(evt, vjson.columns, vjson)\"\r\n                               @update=\"_onDragUpdate\" :move=\"_checkMove\">\r\n                        <template #item=\"{ element: item, index: itemIdx }\">\r\n                            <component :is=\"getDesignCmp(item)\" :key=\"item.id\"\r\n                                       :vjson=\"item\"\r\n                                       :vcxt=\"vcxt\"\r\n                                       :designer=\"designer\"\r\n                                       :parent-list=\"row.items\"\r\n                                       :index-of-parent-list=\"itemIdx\"\r\n                                       :parent-component=\"row\"/>\r\n                        </template>\r\n                        <template #header>\r\n                            <div class=\"no-widget-hint\" v-if=\"(row.items ?? []).length === 0\"\r\n                                 style=\"height: 30px;font-size: 15px;width:100%;\">\r\n                                拖拽列表字段组件放置于此处\r\n                            </div>\r\n                        </template>\r\n                    </draggable>\r\n                </template>\r\n                <div class=\"no-widget-hint\" v-if=\"(vjson.columns ?? []).length === 0\"\r\n                     style=\"height: 30px;font-size: 15px;\">\r\n                    选中组件添加行\r\n                </div>\r\n            </div>\r\n            <div class=\"list-right\" v-if=\"vjson.rightBox\" :style=\"{width:vjson?.rightBoxWidth}\">\r\n            </div>\r\n        </li>\r\n        <div class=\"yv-list-pagination\" v-if=\"vjson.pagination\">\r\n            <el-button type=\"primary\" class=\"pre-page\">上一页</el-button>\r\n            <div class=\"now-page\">1/12</div>\r\n            <el-button type=\"primary\" class=\"next-page\">下一页</el-button>\r\n        </div>\r\n    </ul>\r\n</template>\r\n\r\n<script>\r\n    import YvDesignMixin from \"../yv-design-mixin\"\r\n    import {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\n    import YvVjsonList from \"../../vjson/yv-vjson-list.vue\"\r\n    import YvDesignListProp from \"./yv-design-list-prop.vue\"\r\n    import eventBus from '../../../event-bus'\r\n\r\n    export default {\r\n        mixins: [YvDesignMixin],\r\n        computed: {\r\n            labelWidth() {\r\n                if (!this.vjson.labelWidth || this.vjson.labelWidth === '') {\r\n                    return ''\r\n                }\r\n                return parseInt(this.vjson.labelWidth) || 'auto'\r\n            },\r\n        },\r\n        data() {\r\n            return {\r\n                listSelect: '',\r\n            }\r\n        },\r\n        watch: {\r\n            //\r\n        },\r\n        mounted() {\r\n            $(this.$refs._inner.$el).on('scroll', () => {\r\n                eventBus.$emit('bem-refresh', {sender: this, source: 'scroll'})\r\n            })\r\n\r\n        },\r\n        methods: {\r\n            _onPull() {\r\n                return false\r\n            }\r\n        },\r\n        install(Vue) {\r\n            const desc = registeComponent('list')\r\n            desc.setRuntime('YvVjsonList', YvVjsonList)\r\n            desc.setDesign('YvDesignList', this)\r\n            desc.setProp('YvDesignListProp', YvDesignListProp)\r\n            desc.setDisplayFn((vjson) => {\r\n                return [\r\n                    'list',\r\n                    vjson.reference ? '@' + vjson.reference : undefined,\r\n                    ':' + vjson.id\r\n                ].join(' ')\r\n            })\r\n\r\n            desc.props = [\r\n                ...getDescDefaults('props'),\r\n            ]\r\n            desc.events = [\r\n                ...getDescDefaults('events'),\r\n            ]\r\n            desc.methods = [\r\n                ...getDescDefaults('methods')\r\n            ]\r\n\r\n            desc.install(Vue)\r\n        },\r\n    }\r\n</script>\r\n\r\n<style lang=\"less\">\r\n    .yv-design-mode {\r\n        .yv-list {\r\n            min-height: 50px;\r\n            border: 1px dashed #ccc;\r\n            position: relative;\r\n\r\n            .yv-list-title {\r\n                line-height: 22px;\r\n                font-size: 16px;\r\n                font-weight: 600;\r\n                padding: 5px 5px 8px 5px;\r\n            }\r\n\r\n            & > li {\r\n                display: flex;\r\n                flex-direction: row;\r\n\r\n                & > .list-left {\r\n                }\r\n\r\n                & > .list-center {\r\n                    flex: 1;\r\n\r\n                    .yv-list-row {\r\n                        display: flex;\r\n                        flex-direction: row;\r\n                    }\r\n                }\r\n\r\n                & > .list-right {\r\n                }\r\n                &>.list-multiple{\r\n                  .el-checkbox{\r\n                    height:20px\r\n                  }\r\n                }\r\n            }\r\n\r\n            .yv-list-pagination {\r\n                position: absolute;\r\n                bottom: 8px;\r\n                left: 0;\r\n                display: flex;\r\n                flex-direction: row;\r\n                justify-content: space-around;\r\n                width: 100%;\r\n\r\n                .now-page {\r\n                    flex: 1;\r\n                    text-align: center;\r\n                    line-height: 32px;\r\n                    font-size: 14px;\r\n                    color: #646566\r\n                }\r\n\r\n                .el-button--primary {\r\n                    flex: 1\r\n                }\r\n            }\r\n\r\n            &.yv-list-pagination {\r\n                padding-bottom: 48px;\r\n            }\r\n        }\r\n    }\r\n\r\n    .yv-layout-flex .yv-row-container > .fit-height.yv-list {\r\n        overflow: auto;\r\n    }\r\n</style>\r\n","<template>\r\n  <yv-vjson-form-item v-if=\"!hidden\"\r\n                      ref=\"_formItem\"\r\n                      :vjson=\"vjson\"\r\n                      :vcxt=\"vcxt\"\r\n                      :rules=\"rules\"\r\n                      :dialog-scope=\"dialogScope\"\r\n                      :parentComponent=\"parentComponent\"\r\n                      :parentList=\"parentList\"\r\n                      :indexOfParentList=\"indexOfParentList\"\r\n                      class=\"yv-staticfield\">\r\n    {{ text }}\r\n  </yv-vjson-form-item>\r\n</template>\r\n\r\n<script>\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport _ from \"lodash\"\r\nimport {Staticfield} from \"./Defaults\"\r\nimport YvVjsonFormItem from \"./yv-vjson-form-item.vue\"\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  components: {YvVjsonFormItem},\r\n\r\n  data() {\r\n    const data = _.defaults(this.vjson, Staticfield)\r\n    const rules = this._getFormItemBaseRule(data)\r\n\r\n    return {\r\n      fieldLabel: data.fieldLabel,\r\n      rules: rules,\r\n      labelWidth: data.labelWidth,\r\n      text: data.text,\r\n      hidden: data.hidden,\r\n    }\r\n  },\r\n  computed: {},\r\n  watch: {\r\n    fieldLabel: {\r\n      handler(newVal) {\r\n        this.$refs._formItem.fieldLabel = newVal\r\n      }\r\n    },\r\n    labelWidth: {\r\n      handler(newVal) {\r\n        this.vjson.labelWidth = newVal\r\n      }\r\n    },\r\n    labelAlign: {\r\n      handler(newVal) {\r\n        this.vjson.labelAlign = newVal\r\n      }\r\n    },\r\n  },\r\n  methods: {}\r\n}\r\n</script>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">textel 属性</div>\r\n    <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"数据属性\" prop=\"modal\">\r\n        <el-input v-model=\"formData.dataIndex\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"textel宽度\" prop=\"textelWidth\" class=\"textel-width\">\r\n        <el-input v-model=\"formData.textelWidth\" type=\"text\"></el-input>\r\n        <div class=\"auto-width\" @click=\"widthChange\">默认宽度</div>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"标签名\" prop=\"header\">\r\n        <el-input v-model=\"formData.header\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"标签宽度\" prop=\"formData.text\">\r\n        <el-input v-model=\"formData.labelWidth\" type=\"text\" placeholder=\"auto\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"隐藏\" prop=\"hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <yv-design-input-width :designer=\"designer\" :form-data=\"formData\"/>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignInputWidth from \"./yv-design-input-width.vue\"\r\n\r\nexport default {\r\n  components: {YvDesignInputWidth},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        header: this.vjson.header,\r\n        labelWidth: this.vjson.labelWidth,\r\n        hidden: this.vjson.hidden ?? false,\r\n        weight: this.vjson.weight,\r\n        bind: this.vjson.bind\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    widthChange(){\r\n      this.formData.textelWidth='auto'\r\n    }\r\n  },\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n    .textel-width{\r\n      display: flex;\r\n      flex-direction: row;\r\n      height:32px;\r\n      cursor: pointer;\r\n      .auto-width{\r\n        border:1px solid #dcdcdc;\r\n        font-size: 12px;\r\n        line-height: 30px;\r\n        margin-left:3px;\r\n        padding:0 5px;\r\n        background: #fff;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <div class=\"yv-textel\" :id=\"vjson.id\" @selectme.native=\"_selectMe\" @click.stop=\"_selectMe\"\r\n       :style=\"{width:vjson?.textelWidth,flex:vjson?.textelWidth ? 'none' : '1'}\">\r\n    <div class=\"yv-textel-fieldlabel\" :style=\"{width:vjson.labelWidth,fontSize:vjson.cssFont}\">{{ vjson.header }}</div>\r\n    <div class=\"yv-textel-value\">{{ vjson.dataIndex }}</div>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignFormItem from './yv-design-form-item.vue'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonTextel from \"../../vjson/yv-vjson-textel.vue\"\r\nimport YvDesignTextelProp from \"./yv-design-textel-prop.vue\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  components: {\r\n    YvDesignFormItem,\r\n  },\r\n  data() {\r\n    return {}\r\n  },\r\n  beforeCreate() {\r\n    /* 这里不能访问方法和属性！！ */\r\n  },\r\n\r\n  mounted() {\r\n    // this.handleOnMounted()\r\n  },\r\n\r\n  beforeUnmount() {\r\n    // this.unregisterFromRefList()\r\n  },\r\n  methods: {},\r\n\r\n  install(Vue) {\r\n    const desc = registeComponent('textel')\r\n    desc.setRuntime('YvVjsonTextel', YvVjsonTextel)\r\n    desc.setDesign('YvDesignTextel', this)\r\n    desc.setProp('YvDesignTextelProp', YvDesignTextelProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      debugger\r\n      return [\r\n        'textel',\r\n        vjson.header,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'header', desc: '标签名', bindable: true},\r\n      {name: 'dataIndex', desc: '数据属性', bindable: true},\r\n      {name: 'hidden', desc: '隐藏', bindable: true},\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.yv-design-mode .yv-textel {\r\n  display: flex;\r\n  flex-direction: row;\r\n  border:1px dashed #ccc;\r\n  min-height:24px;\r\n  font-size: 14px;\r\n}\r\n</style>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">alert 属性</div>\r\n    <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"隐藏\" prop=\"hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"显示类型\" prop=\"formData.type\">\r\n        <el-select v-model=\"formData.type\" class=\"full-width-input\" clearable>\r\n          <el-option value=\"success\" label=\"成功\"/>\r\n          <el-option value=\"info\" label=\"信息\"/>\r\n          <el-option value=\"warning\" label=\"警告\"/>\r\n          <el-option value=\"error\" label=\"错误\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <el-form-item label=\"标题\" prop=\"title\">\r\n        <el-input v-model=\"formData.title\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"描述\" prop=\"description\">\r\n        <el-input v-model=\"formData.description\" type=\"text\"></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"显示图标\" prop=\"showIcon\">\r\n        <el-switch v-model=\"formData.showIcon\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"是否居中\" prop=\"center\">\r\n        <el-switch v-model=\"formData.center\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"关闭文本\" prop=\"closeText\">\r\n        <el-input v-model=\"formData.closeText\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"允许关闭\" prop=\"closable\">\r\n        <el-switch v-model=\"formData.closable\"></el-switch>\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport VJsonContext from \"../../vjson/VJsonContext\";\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\";\r\n\r\nexport default {\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        hidden: this.vjson.hidden ?? false,\r\n        type: this.vjson.type,\r\n        title: this.vjson.title,\r\n        description: this.vjson.description,\r\n        showIcon: this.vjson.showIcon,\r\n        bind: this.vjson.bind\r\n      }\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n</style>","<template>\r\n  <el-alert v-if=\"!hidden\"\r\n            type=\"success\"\r\n            :closable=\"false\" :showIcon=\"false\"\r\n            :class=\"['yv-gridcheck', ...calcClass]\"\r\n            :style=\"calcStyle\"\r\n            @mousedown.stop=\"_onClick\">\r\n    <template #title>\r\n      <el-icon><CircleCheck /></el-icon> 已勾选<el-button link>12</el-button>行数据, 点击<el-button link>清空勾选</el-button>\r\n    </template>\r\n  </el-alert>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {Gridcheck} from './Defaults'\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport {CircleCheck} from \"@element-plus/icons-vue\";\r\n\r\nexport default {\r\n  components:{CircleCheck},\r\n  mixins: [baseVjsonMix],\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Gridcheck)\r\n\r\n    return {\r\n      hidden: vjson.hidden,\r\n    }\r\n  },\r\n  computed: {},\r\n  methods: {\r\n    _onClick(evt) {\r\n      this.runEvent('click', ...arguments)\r\n    }\r\n  }\r\n}\r\n</script>\r\n","<template>\r\n  <el-alert :id=\"vjson.id\" :key=\"vjson.id\"\r\n            type=\"success\"\r\n            :closable=\"false\"\r\n            :class=\"['yv-gridcheck', customClass]\"\r\n            @click.stop=\"_selectMe\">\r\n    <template #title>\r\n      <el-icon><CircleCheck /></el-icon> 已勾选<el-button link>12</el-button>行数据, 点击<el-button link>清空勾选</el-button>\r\n    </template>\r\n  </el-alert>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport YvDesignGridcheckProp from \"./yv-design-gridcheck-prop.vue\"\r\nimport YvVjsonGridcheck from \"../../vjson/yv-vjson-gridcheck.vue\"\r\nimport {getDescDefaults, registeComponent} from '../yv-designer-desc'\r\nimport {CircleCheck} from \"@element-plus/icons-vue\"\r\n\r\nexport default {\r\n  components:{CircleCheck},\r\n  mixins: [YvDesignMixin],\r\n  created() {\r\n  },\r\n  mounted() {\r\n  },\r\n  beforeUnmount() {\r\n  },\r\n  methods: {\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('gridcheck')\r\n    desc.setRuntime('YvVjsonGridcheck', YvVjsonGridcheck)\r\n    desc.setDesign('YvDesignGridcheck', this)\r\n    desc.setProp('YvDesignGridcheckProp', YvDesignGridcheckProp)\r\n\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'click', desc: '点击时触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>\r\n<style>\r\n.yv-gridcheck {\r\n  min-height: auto;\r\n  height: 32px;\r\n  border: 1px solid var(--frist-border-color);\r\n  margin: 0 5px;\r\n}\r\n</style>\r\n\r\n","<template>\r\n  <div ref=\"_inner\" v-if=\"!hidden\"\r\n       :class=\"[calcClass, 'yv-source']\"\r\n       :style=\"calcStyleAndWidth\">\r\n\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\nimport _ from \"lodash\";\r\nimport {Source} from \"./Defaults\"\r\nimport * as monaco from \"monaco-editor\";\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Source)\r\n\r\n    return {\r\n      hidden: vjson.hidden,\r\n      language: vjson.language,\r\n      readonly: vjson.readonly,\r\n      bind: vjson.bind,\r\n      stopWatchBindValue: null\r\n    }\r\n  },\r\n  mounted() {\r\n    this.init()\r\n\r\n    if (this.bind?.value) {\r\n      let bindValue = this.bind?.value\r\n      if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n        bindValue = bindValue.substring(1, bindValue.length - 1)\r\n      }\r\n\r\n      this.stopWatchBindValue = this.vcxt.scope.$watch(bindValue, (newVal) => {\r\n        const value = this.editor.getValue()\r\n        if (value !== newVal) {\r\n          this.editor?.setValue(newVal ?? '')\r\n        }\r\n      })\r\n    }\r\n  },\r\n  unmounted() {\r\n    if (this.stopWatchBindValue) {\r\n      this.stopWatchBindValue()\r\n      this.stopWatchBindValue = null\r\n    }\r\n  },\r\n  watch: {\r\n    language: {\r\n      handler(newVal) {\r\n        this.setLanguage(newVal)\r\n      }\r\n    },\r\n    readonly: {\r\n      handler(newVal) {\r\n        this.editor?.updateOptions({readOnly: newVal})\r\n      }\r\n    }\r\n  },\r\n  computed: {\r\n    realValue() {\r\n      let bindValue = this.bind?.value\r\n      if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n        bindValue = bindValue.substring(1, bindValue.length - 1)\r\n        return _.get(this.vcxt.scope.$data, bindValue)\r\n      }\r\n    },\r\n  },\r\n  methods: {\r\n    init() {\r\n      const option = {\r\n        value: this.modelValue,\r\n        language: this.language ?? 'javascript',\r\n        minimap: {\r\n          enabled: false\r\n        },\r\n        selectOnLineNumbers: true,\r\n        renderSideBySide: false,\r\n        automaticLayout: true,\r\n      }\r\n\r\n      if(this.readonly){\r\n        option.readOnly = this.readonly\r\n      }\r\n\r\n      this.editor = monaco.editor.create(this.$refs._inner, option)\r\n\r\n      this.editor.onDidChangeModelContent(() => {\r\n        const value = this.editor.getValue() // 给父组件实时返回最新文本\r\n        this.$emit('update:modelValue', value)\r\n        this.$emit('change', value)\r\n        if (this.bind?.value) {\r\n          let bindValue = this.bind?.value\r\n          if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n            bindValue = bindValue.substring(1, bindValue.length - 1)\r\n          }\r\n          _.set(this.vcxt.scope.$data, bindValue, value)\r\n        }\r\n        this.runEvent('change', value)\r\n      })\r\n\r\n      this.editor.onDidBlurEditorWidget((e) => {\r\n        this.$emit('editor-blur', e)\r\n        this.runEvent('blur', e)\r\n      })\r\n      this.editor.onDidFocusEditorWidget((e) => {\r\n        this.$emit('editor-focus', e)\r\n        this.runEvent('focus', e)\r\n      })\r\n\r\n      _.defer(()=>{\r\n        this.editor?.setValue(this.realValue ?? '')\r\n      })\r\n\r\n      this.$emit('editor-mounted', this.editor)\r\n    },\r\n    updateOptions(options) {\r\n      if (this.editor && options) {\r\n        this.editor.updateOptions(options)\r\n      }\r\n    },\r\n    setLanguage(lang) {\r\n      if (this.editor && lang) {\r\n        monaco.editor.setModelLanguage(this.editor.getModel(), lang)\r\n      }\r\n    },\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.yv-source {\r\n  overflow: scroll;\r\n}\r\n</style>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">source 属性</div>\r\n    <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"90px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"modal\" prop=\"bindValue\">\r\n        <el-input v-model=\"bindValue\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"隐藏\" prop=\"hidden\" v-if=\"!isRf\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"语言\" prop=\"language\">\r\n        <el-button-group>\r\n          <el-button size=\"small\" :type=\"formData.language === 'sql'? 'primary':'default'\"\r\n                     @click=\"()=>formData.language='sql'\">SQL\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"(formData.size === 'json')? 'primary':'default'\"\r\n                     @click=\"()=>formData.language='json'\">JSON\r\n          </el-button>\r\n          <el-button size=\"small\" :type=\"formData.size === 'js'? 'primary':'default'\"\r\n                     @click=\"()=>formData.language='javascript'\">JavaScript\r\n          </el-button>\r\n        </el-button-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"只读\" prop=\"disabled\">\r\n        <el-switch v-model=\"formData.readonly\"></el-switch>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <yv-design-input-height :form-data=\"formData\" :designer=\"designer\" v-if=\"!isRf\"/>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignInputHeight from \"./yv-design-input-height.vue\"\r\n\r\nexport default {\r\n  components: {YvDesignInputHeight},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        colsOfRow: this.vjson.colsOfRow,\r\n        titlePosition: this.vjson.titlePosition,\r\n        fieldsetTitlePosition: this.vjson.fieldsetTitlePosition,\r\n        labelWidth: this.vjson.labelWidth,\r\n        labelPosition: this.vjson.labelPosition,\r\n        requireAsteriskPosition: this.vjson.requireAsteriskPosition,\r\n        showMessage: this.vjson.showMessage,\r\n        inlineMessage: this.vjson.inlineMessage,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled,\r\n        hidden: this.vjson.hidden,\r\n        scrollable: this.vjson.scrollable,\r\n        loading: this.vjson.loading,\r\n        validateOnRuleChange: this.vjson.validateOnRuleChange,\r\n        bind: this.vjson.bind,\r\n        title: this.vjson.title,\r\n        fieldsetTitle: this.vjson.fieldsetTitle\r\n      }\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n.yv-form.yv-card {\r\n  background: #fff;\r\n  border: 1px solid var(--el-menu-border-color)\r\n}\r\n</style>","<template>\r\n  <div :id=\"vjson.id\" :key=\"vjson.id\"\r\n       :class=\"[calcClass, 'yv-source']\"\r\n       :style=\"calcStyle\"\r\n       ref=\"_inner\"\r\n       @selectme.native=\"_selectMe\"\r\n       @click.stop=\"_selectMe\">\r\n    <el-empty description=\"源码编辑器\">\r\n\r\n    </el-empty>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport {getDescDefaults, registeComponent} from \"../yv-designer-desc\"\r\nimport YvVjsonSource from \"../../vjson/yv-vjson-source.vue\"\r\nimport YvDesignSourceProp from \"./yv-design-source-prop.vue\"\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  computed: {\r\n    //\r\n  },\r\n  watch: {\r\n    //\r\n  },\r\n  methods: {\r\n    _onPull() {\r\n      return false\r\n    }\r\n  },\r\n  install(Vue) {\r\n    const desc = registeComponent('source')\r\n    desc.setRuntime('YvVjsonSource', YvVjsonSource)\r\n    desc.setDesign('YvDesignSource', this)\r\n    desc.setProp('YvDesignSourceProp', YvDesignSourceProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'source',\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'readonly', desc: '只读', bindable: true},\r\n      {name: 'language', desc: '语言', bindable: true},\r\n    ]\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'focus', desc: '获取焦点时触发', events: [{name: 'e'}]},\r\n      {name: 'blur', desc: '失去焦点触发', events: [{name: 'e'}]},\r\n      {name: 'change', desc: '更改时触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.yv-design-mode {\r\n  .yv-source {\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">editorprop 属性</div>\r\n    <el-form :model=\"formData\" :rules=\"rules\" label-position=\"right\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"modal\" prop=\"bindValue\">\r\n        <el-input v-model=\"bindValue\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"权限\" prop=\"permissions\">\r\n        <YvDesignerPermissions v-model=\"formData.permissions\" :designer=\"designer\"/>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"表格名\" prop=\"tableName\">\r\n        <el-input v-model=\"formData.tableName\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"字段名\" prop=\"columnName\">\r\n        <el-input v-model=\"formData.columnName\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"字段备注\" prop=\"columnComment\">\r\n        <el-input v-model=\"formData.columnComment\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"创建参照\" prop=\"createByTemplate\">\r\n        <el-input v-model=\"formData.createByTemplate\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"允许保存默认配置\" label-width=\"auto\" prop=\"columnComment\">\r\n        <el-switch v-model=\"formData.allowSaveNormal\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"允许删除配置\" label-width=\"auto\" prop=\"columnComment\">\r\n        <el-switch v-model=\"formData.allowClear\"></el-switch>\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {toRaw} from 'vue'\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignInputIcon from \"./yv-design-input-icon.vue\"\r\nimport YvDesignInputHeight from \"./yv-design-input-height.vue\"\r\nimport YvDesignerPermissions from \"../yv-designer-permissions.vue\"\r\n\r\nexport default {\r\n  components: {YvDesignInputIcon, YvDesignInputHeight, YvDesignerPermissions},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        text: this.vjson.text,\r\n        type: this.vjson.type,\r\n        plain: this.vjson.plain ?? false,\r\n        round: this.vjson.round ?? false,\r\n        circle: this.vjson.circle ?? false,\r\n        link: this.vjson.link ?? false,\r\n        iconCls: this.vjson.iconCls,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        loading: this.vjson.loading ?? false,\r\n        bind: this.vjson.bind\r\n      },\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n\r\n</style>","<template>\r\n  <el-empty v-if=\"!!emptyText\" :style=\"calcStyleAndWidth\" :description=\"emptyText\">\r\n  </el-empty>\r\n  <el-scrollbar v-else-if=\"!hidden\"\r\n                :class=\"[calcClass, 'yv-editorprop']\"\r\n                :style=\"calcStyleAndWidth\">\r\n    <el-empty v-if=\"!editorXtype\" description=\"暂无设置\">\r\n      <el-button type=\"primary\" @click=\"createSetting\">创建设置</el-button>\r\n    </el-empty>\r\n    <template v-else>\r\n      <el-form :model=\"formData\" ref=\"vForm\" :rules=\"rules\" label-position=\"left\" label-width=\"80px\"\r\n               size=\"default\" @submit.native.prevent>\r\n        <el-form-item v-if=\"vjson.columnName\" label=\"字段名\">\r\n          <el-input v-model=\"columnName\" type=\"text\" disabled></el-input>\r\n        </el-form-item>\r\n        <el-form-item v-if=\"vjson.columnComment\" label=\"字段备注\">\r\n          <el-input v-model=\"columnComment\" type=\"text\"></el-input>\r\n        </el-form-item>\r\n        <el-form-item v-else label=\"中文标签\" prop=\"fieldLabel\">\r\n          <el-input v-model=\"formData.fieldLabel\" type=\"text\"></el-input>\r\n        </el-form-item>\r\n        <el-form-item label=\"重新定义编辑\" prop=\"editable\" label-width=\"120\">\r\n          <el-switch v-model=\"formData.editable\"></el-switch>\r\n        </el-form-item>\r\n        <el-form-item v-if=\"formData.editable\" label=\"编辑模式\" prop=\"editorXtype\">\r\n          <el-select v-model=\"editorXtype\" clearable :filterable=\"true\" placement=\"bottom\">\r\n            <el-option v-for=\"item in editors\" :label=\"item.text\" :value=\"item.xtype\"/>\r\n          </el-select>\r\n        </el-form-item>\r\n        <el-form-item v-if=\"formData.editable\" label=\"必填\" prop=\"required\">\r\n          <el-switch v-model=\"formData.required\"></el-switch>\r\n        </el-form-item>\r\n        <el-form-item v-if=\"formData.editable\" label=\"默认值\" prop=\"fieldLabel\">\r\n          <el-input v-model=\"formData.defaultValue\" type=\"text\"></el-input>\r\n        </el-form-item>\r\n\r\n        <!---------------------------- textfield ---------------------------->\r\n        <template v-if=\"formData.editable && editorXtype === 'textfield'\">\r\n          <el-form-item label=\"多行文本\" prop=\"textarea\">\r\n            <el-switch v-model=\"formData.textarea\"></el-switch>\r\n          </el-form-item>\r\n          <el-form-item label=\"最大长度\" prop=\"maxlength\">\r\n            <el-input v-model=\"formData.maxlength\" type=\"text\"></el-input>\r\n          </el-form-item>\r\n        </template>\r\n\r\n        <!---------------------------- checkbox ---------------------------->\r\n        <el-form-item label=\"勾选值类型\" v-if=\"formData.editable && editorXtype === 'checkbox'\"\r\n                      prop=\"formData.convType\">\r\n          <el-button-group>\r\n            <el-button size=\"small\" :type=\"formData.convType === 'bool'? 'primary':'default'\"\r\n                       @click=\"()=>formData.convType='bool'\">布尔\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"(formData.convType === 'num')? 'primary':'default'\"\r\n                       @click=\"()=>formData.convType='num'\">数字\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"formData.convType === 'str'? 'primary':'default'\"\r\n                       @click=\"()=>formData.convType='str'\">字符串\r\n            </el-button>\r\n          </el-button-group>\r\n        </el-form-item>\r\n        <el-form-item label=\"勾选后值\"\r\n                      v-if=\"formData.editable && editorXtype === 'checkbox' && (formData.convType === 'str' || formData.convType === 'num')\"\r\n                      prop=\"formData.activeValue\">\r\n          <el-input v-model=\"formData.activeValue\" type=\"text\" clearable></el-input>\r\n        </el-form-item>\r\n        <el-form-item label=\"未勾选值\"\r\n                      v-if=\"formData.editable && editorXtype === 'checkbox' && (formData.convType === 'str' || formData.convType === 'num')\"\r\n                      prop=\"formData.inactiveValue\">\r\n          <el-input v-model=\"formData.inactiveValue\" type=\"text\" clearable></el-input>\r\n        </el-form-item>\r\n\r\n        <!---------------------------- combo ---------------------------->\r\n        <el-form-item label=\"下拉数据\" v-if=\"formData.editable && editorXtype === 'combobox'\">\r\n          <el-button-group>\r\n            <el-button size=\"small\" :type=\"formData.dataType === 1? 'primary':'default'\"\r\n                       @click=\"()=>formData.dataType=1\">固定值\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"formData.dataType === 2 ? 'primary':'default'\"\r\n                       @click=\"()=>formData.dataType=2\">枚举字典\r\n            </el-button>\r\n          </el-button-group>\r\n        </el-form-item>\r\n\r\n        <template v-if=\"formData.editable && editorXtype === 'combobox' && formData.dataType === 1\">\r\n          <draggable tag=\"div\" :list=\"formData.dataEnum\" item-key=\"id\"\r\n                     :component-data=\"{class: 'enumeration-ul'}\"\r\n                     v-bind=\"{group:'panesGroup', ghostClass: 'ghost', handle: '.icon-tuozhuai'}\">\r\n\r\n            <template #item=\"{ element: item, index: idx }\">\r\n              <div class=\"enumeration\" :key=\"item.dictValue\">\r\n                <div class=\"enumeration-col\">\r\n                  <el-input v-model=\"item.dictText\" type=\"text\" placeholder=\"字典文本(text)\" :clearable=\"false\"/>\r\n                </div>\r\n                <div class=\"enumeration-col\">\r\n                  <el-input v-model=\"item.dictValue\" type=\"text\" placeholder=\"字典值(value)\" :clearable=\"false\"/>\r\n                </div>\r\n                <div class=\"enumeration-col\">\r\n                  <span class=\"iconfont icon-shanchu1\" @click=\"()=>removeDataEnumItem(idx)\"></span>\r\n                  <span class=\"iconfont icon-tuozhuai\"></span>\r\n                </div>\r\n              </div>\r\n            </template>\r\n          </draggable>\r\n\r\n          <el-button type=\"primary\" :icon=\"renderIcon('Plus')\" link @click=\"addNewDataEnumItem\"\r\n                     class=\"enumeration-add-btn\">\r\n            添加一项\r\n          </el-button>\r\n        </template>\r\n\r\n        <template v-if=\"formData.editable && editorXtype === 'combobox' && formData.dataType === 2\">\r\n          <el-form-item label=\"枚举字典\">\r\n            <el-select v-model=\"formData.dict\" filterable clearable @clear=\"_dictClear()\">\r\n              <el-option v-for=\"item in dict\" :key=\"item.code\" :label=\"item.desc\" :value=\"item.code\"/>\r\n            </el-select>\r\n          </el-form-item>\r\n        </template>\r\n\r\n        <!---------------------------- combogrid ---------------------------->\r\n        <el-form-item v-if=\"formData.editable && editorXtype === 'combogrid'\" label=\"允许随意输入(不用选择)\"\r\n                      prop=\"allowCustomInput\" label-width=\"auto\">\r\n          <el-switch v-model=\"formData.allowCustomInput\"></el-switch>\r\n        </el-form-item>\r\n        <el-divider/>\r\n        <template v-if=\"formData.editable && editorXtype === 'combogrid'\">\r\n          <el-form-item label=\"数据弹窗\" prop=\"editorWidget\" v-if=\"editorXtype === 'combogrid'\">\r\n            <el-select v-model=\"editorWidget\">\r\n              <el-option\r\n                  v-for=\"widgetItem in getWidgetList()\"\r\n                  :key=\"widgetItem.key\"\r\n                  :label=\"widgetItem.title\"\r\n                  :value=\"widgetItem.key\"\r\n                  :data=\"widgetItem.value\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"回填字段\" prop=\"lookupKey\" v-if=\"editorXtype === 'combogrid'\">\r\n            <el-select v-model=\"formData.lookupKey\">\r\n              <el-option\r\n                  v-for=\"item in lookupArr\"\r\n                  :key=\"item.key\"\r\n                  :label=\"item.text + '(' + item.key + ')'\"\r\n                  :value=\"item.key\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-divider content-position=\"left\">其他回填字段</el-divider>\r\n          <div class=\"enumeration enumeration-title\">\r\n            <div class=\"enumeration-col\">字段</div>\r\n            <div class=\"enumeration-col\">目标字段</div>\r\n          </div>\r\n          <div v-for=\"(lookupItem,idx) in formData.lookupOther\" class=\"enumeration\" :key=\"idx\">\r\n            <div class=\"enumeration-col\" style=\"padding-right: 5px;\">\r\n              <el-select v-model=\"lookupItem.key\" style=\"width:100%;\" clearable :filterable=\"true\">\r\n                <el-option\r\n                    v-for=\"item in lookupArr\"\r\n                    :key=\"item.key\"\r\n                    :label=\"item.text + '(' + item.key + ')'\"\r\n                    :value=\"item.key\"\r\n                />\r\n              </el-select>\r\n            </div>\r\n            <div class=\"enumeration-col\">\r\n              <el-input v-model=\"lookupItem.value\" type=\"text\" clearable/>\r\n            </div>\r\n            <div class=\"enumeration-col\">\r\n              <span class=\"iconfont icon-shanchu1\" @click=\"()=>removeLookupOther(idx)\"></span>\r\n            </div>\r\n          </div>\r\n          <el-button type=\"primary\" :icon=\"renderIcon('fa Plus')\" link @click=\"addLookupOther\"\r\n                     class=\"enumeration-add-btn\">\r\n            添加回填字段\r\n          </el-button>\r\n        </template>\r\n        <el-form-item label=\"权重\" prop=\"weight\">\r\n          <el-button-group>\r\n            <el-button size=\"small\" :type=\"(formData.weight === 1 || !formData.weight)? 'primary':'default'\"\r\n                       @click=\"()=>formData.weight=1\">1\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"formData.weight === 2? 'primary':'default'\"\r\n                       @click=\"()=>formData.weight=2\">2\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"formData.weight === 3? 'primary':'default'\"\r\n                       @click=\"()=>formData.weight=3\">3\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"formData.weight === 4? 'primary':'default'\"\r\n                       @click=\"()=>formData.weight=4\">4\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"formData.weight === 5? 'primary':'default'\"\r\n                       @click=\"()=>formData.weight=5\">5\r\n            </el-button>\r\n            <el-button size=\"small\" :type=\"formData.weight === 6? 'primary':'default'\"\r\n                       @click=\"()=>formData.weight=6\">6\r\n            </el-button>\r\n          </el-button-group>\r\n        </el-form-item>\r\n        <el-form-item label=\"标签宽度\" prop=\"formData.text\">\r\n          <el-input v-model=\"formData.labelWidth\" type=\"text\" placeholder=\"auto\"></el-input>\r\n        </el-form-item>\r\n        <el-form-item label=\"字段宽度\" prop=\"formData.text\">\r\n          <el-input v-model=\"formData.width\" type=\"number\"></el-input>\r\n        </el-form-item>\r\n      </el-form>\r\n    </template>\r\n  </el-scrollbar>\r\n  <el-row v-if=\"!emptyText\">\r\n    <el-button type=\"primary\" v-if=\"!!editorXtype && vjson.allowSaveNormal\" :icon=\"renderIcon('Save')\"\r\n               @click=\"saveColumnUI\">保存默认配置\r\n    </el-button>\r\n    <el-button type=\"primary\" v-if=\"!!editorXtype && vjson.allowClear\" :icon=\"renderIcon('Save')\" @click=\"clearSetting\">\r\n      删除配置\r\n    </el-button>\r\n  </el-row>\r\n</template>\r\n<script>\r\nimport _ from \"lodash\";\r\nimport {toRaw} from 'vue'\r\nimport baseVjsonMix from \"./baseVjsonMix\";\r\nimport {Editorprop} from \"./Defaults\";\r\nimport {renderIcon} from \"../../utils\";\r\nimport lodash from \"lodash\";\r\nimport {dict} from \"../../store\";\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  data() {\r\n    const vjson = _.defaults(this.vjson, Editorprop)\r\n\r\n    const dictData = []\r\n    lodash.each(dict.value, item => {\r\n      // console.log(item)\r\n      dictData.push({code: item.code, desc: item.desc})\r\n    })\r\n\r\n    return {\r\n      stopDead: false,  // 阻拦循环计算\r\n      emptyText: vjson.emptyText,\r\n      isEnable: false,\r\n      dict: dictData,\r\n      bindValue: vjson.bind?.value,\r\n      stopWatchBindValue: null,\r\n      stopWatchBindValue2: null,\r\n      stopWatchBindValue3: null,\r\n      rules: [],\r\n      formData: {},\r\n      editors: [\r\n        {text: '文本编辑', xtype: \"textfield\"},\r\n        {text: '数字编辑', xtype: \"numberfield\"},\r\n        {text: '下拉框', xtype: \"combobox\"},\r\n        {text: '勾选', xtype: \"checkbox\"},\r\n        {text: '数据窗口', xtype: \"combogrid\"},\r\n        {text: '日期输入框', xtype: \"datefield\"},\r\n        {text: '日期时间输入框', xtype: \"datetimefield\"},\r\n        {text: '多行文本输入框', xtype: \"memo\"},\r\n      ],\r\n    }\r\n  },\r\n  mounted() {\r\n    let bindValue = this.bindValue\r\n    if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n      bindValue = bindValue.substring(1, bindValue.length - 1)\r\n    }\r\n\r\n    if (!bindValue) {\r\n      return\r\n    }\r\n\r\n    this.stopWatchBindValue = this.vcxt.scope.$watch(bindValue, (newVal) => {\r\n      if (this.stopDead) {\r\n        // 阻拦循环计算\r\n        return\r\n      }\r\n\r\n      const vjsonString = _.get(this.vcxt.scope, bindValue)\r\n      if (!vjsonString || !_.startsWith(vjsonString, '{') || !_.endsWith(vjsonString, '}')) {\r\n        // 不是 json 字符串\r\n        this.formData = {}\r\n        return\r\n      }\r\n\r\n      try {\r\n        this.formData = JSON.parse(vjsonString)\r\n        this.fillFormDataFromJson()\r\n\r\n      } catch (e) {\r\n        console.error(e)\r\n      }\r\n    })\r\n\r\n  },\r\n  unmounted() {\r\n    if (this.stopWatchBindValue) {\r\n      this.stopWatchBindValue()\r\n      this.stopWatchBindValue = null\r\n    }\r\n    if (this.stopWatchBindValue2) {\r\n      this.stopWatchBindValue2()\r\n      this.stopWatchBindValue2 = null\r\n    }\r\n    if (this.stopWatchBindValue3) {\r\n      this.stopWatchBindValue3()\r\n      this.stopWatchBindValue3 = null\r\n    }\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    addLookupOther() {\r\n      if (!this.formData.lookupOther) {\r\n        this.formData.lookupOther = []\r\n      }\r\n      this.formData.lookupOther.push({key: '', value: ''})\r\n    },\r\n    removeLookupOther(idx) {\r\n      this.formData.lookupOther?.splice(idx, 1)\r\n    },\r\n    clearSetting() {\r\n      this.formData = {}\r\n    },\r\n    saveColumnUI() {\r\n      const tableName = this.tableName\r\n      const columnName = this.columnName\r\n      const editorXtype = this.editorXtype\r\n\r\n      system.showLoading()\r\n      if (columnName && tableName && editorXtype) {\r\n        system.invokeStudio(\"FileManager@saveColumnUI\", {\r\n          tableName,\r\n          columnName,\r\n          columnUI: JSON.stringify(this.formData),\r\n\r\n        }).then(res => {\r\n          system.msg(`保存成功！`)\r\n\r\n        }).finally(() => {\r\n          system.clearLoading()\r\n        })\r\n      }\r\n    },\r\n    getCreateTemplate() {\r\n      if (this.vjson.createByTemplate) {\r\n        return _.get(this.vcxt.scope, this.vjson.createByTemplate)\r\n      }\r\n      return ''\r\n    },\r\n\r\n    _dictClear() {\r\n      delete this.formData.dict\r\n    },\r\n\r\n    createSetting() {\r\n      this.fillFormDataFromJson()\r\n    },\r\n\r\n    /**\r\n     * 从 formBind/columnBind 计算 formData\r\n     */\r\n    fillFormDataFromJson() {\r\n      if (!this.formData?.xtype) {\r\n        // 创建一个全新的 formData, 如果有参照模板，按照参照模板来创建\r\n        const createByTemplate = this.getCreateTemplate()\r\n        if (createByTemplate && _.startsWith(createByTemplate, '{')) {\r\n          try {\r\n            const template = JSON.parse(createByTemplate)\r\n            if (template.xtype) {\r\n              // 包含 xtype 属性\r\n              this.formData = template\r\n              return\r\n            }\r\n          } catch (e) {\r\n            console.error(e)\r\n          }\r\n        }\r\n\r\n        this.formData = {\r\n          xtype: 'textfield'\r\n        }\r\n      }\r\n    },\r\n    /**\r\n     * formData 写回数据\r\n     */\r\n    writeJsonFromFormData() {\r\n      let bindValue = this.bindValue\r\n      if (_.startsWith(bindValue, '{') && _.endsWith(bindValue, '}')) {\r\n        bindValue = bindValue.substring(1, bindValue.length - 1)\r\n      }\r\n      if (!bindValue) {\r\n        return\r\n      }\r\n\r\n      let vjsonString = JSON.stringify(this.formData)\r\n      if (vjsonString === '{}') {\r\n        vjsonString = ''\r\n      }\r\n\r\n      this.stopDead = true\r\n      _.set(this.vcxt.scope, bindValue, vjsonString)\r\n\r\n      this.$nextTick(() => {\r\n        this.stopDead = false\r\n      })\r\n    },\r\n    removeCombogridParam() {\r\n\r\n    },\r\n    addNewCombogridParam() {\r\n\r\n    },\r\n    addNewDataEnumItem() {\r\n      if (!this.formData.dataEnum) {\r\n        this.formData.dataEnum = []\r\n      }\r\n      this.formData.dataEnum.push({id: \"\", text: \"\"})\r\n    },\r\n    removeDataEnumItem(idx) {\r\n      this.formData.dataEnum.splice(idx, 1)\r\n    },\r\n    getWidgetList() {\r\n      const ret = []\r\n      _.forOwn(window['widgets'], (value, key) => {\r\n        ret.push({key: key, title: value.title, value})\r\n      })\r\n      return ret\r\n    },\r\n  },\r\n  computed: {\r\n    columnName() {\r\n      if (this.vjson.columnName) {\r\n        return _.get(this.vcxt.scope, this.vjson.columnName)\r\n      }\r\n      return ''\r\n    },\r\n    tableName() {\r\n      if (this.vjson.tableName) {\r\n        return _.get(this.vcxt.scope, this.vjson.tableName)\r\n      }\r\n      return ''\r\n    },\r\n    columnComment: {\r\n      set(newVal) {\r\n        if (this.vjson.columnComment) {\r\n          _.set(this.vcxt.scope, this.vjson.columnComment, newVal)\r\n        }\r\n      },\r\n      get() {\r\n        if (this.vjson.columnComment) {\r\n          return _.get(this.vcxt.scope, this.vjson.columnComment)\r\n        }\r\n        return ''\r\n      }\r\n    },\r\n    editorXtype: {\r\n      get() {\r\n        return this.formData?.xtype\r\n      },\r\n      set(newVal) {\r\n        if (!this.formData) {\r\n          this.formData = {}\r\n        }\r\n        this.formData.xtype = newVal\r\n      }\r\n    },\r\n    editorWidget: {\r\n      get() {\r\n        return this.formData?.widget\r\n      },\r\n      set(newVal) {\r\n        if (!this.formData) {\r\n          this.formData = {}\r\n        }\r\n        this.formData.widget = newVal\r\n      }\r\n    },\r\n    lookupArr() {\r\n      if (!this.editorWidget) {\r\n        return []\r\n      }\r\n      const currentWidget = window['widgets'][this.editorWidget]\r\n\r\n      if (!currentWidget) {\r\n        return []\r\n\r\n      } else {\r\n        const lookupArr = []\r\n        for (let i = 0; i < currentWidget.columns.length; i++) {\r\n          const column = currentWidget.columns[i]\r\n          const lookupItem = {key: column.dataIndex, text: column.header || column.text, isChecked: false}\r\n          if (this.formData.lookupKey && lookupItem.key === this.formData.lookupKey) {\r\n            lookupItem.isChecked = true\r\n          }\r\n          lookupArr.push(lookupItem)\r\n        }\r\n        return lookupArr\r\n      }\r\n    }\r\n  },\r\n  watch: {\r\n    'formData': {\r\n      handler(newVal) {\r\n        this.writeJsonFromFormData()\r\n      },\r\n      deep: true\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <div :id=\"vjson.id\"\r\n       :class=\"['yv-editorprop', calcClass]\"\r\n       :style=\"calcStyle\"\r\n       @selectme.native=\"_selectMe\"\r\n       @click.stop=\"_selectMe\">\r\n    <el-empty :image-size=\"200\" description=\"属性设计器\">\r\n      <br/>\r\n      <el-tag type=\"info\" effect=\"dark\">UI设置: {{ vjson?.bind?.value }}</el-tag>\r\n      <br/>\r\n      <el-tag type=\"info\" effect=\"dark\">字段名: {{ vjson?.columnName }}</el-tag>\r\n      <br/>\r\n      <el-tag type=\"info\" effect=\"dark\">字段含义: {{ vjson?.columnComment }}</el-tag>\r\n    </el-empty>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport YvDesignEditorpropProp from \"./yv-design-editorprop-prop.vue\"\r\nimport YvVjsonEditorprop from \"../../vjson/yv-vjson-editorprop.vue\"\r\nimport {getDescDefaults, registeComponent} from '../yv-designer-desc'\r\nimport {renderIcon} from \"../../../utils\";\r\nimport _ from \"lodash\";\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  props: {\r\n    vjson: Object,\r\n    vcxt: VJsonContext,\r\n    designer: Designer,\r\n    parentComponent: Object,\r\n    parentList: Array,\r\n    indexOfParentList: Number,\r\n  },\r\n  computed: {},\r\n  created() {\r\n  },\r\n  mounted() {\r\n  },\r\n  beforeUnmount() {\r\n  },\r\n  methods: {},\r\n  install(Vue) {\r\n    const desc = registeComponent('editorprop')\r\n    desc.setRuntime('YvVjsonEditorprop', YvVjsonEditorprop)\r\n    desc.setDesign('YvDesignEditorprop', this)\r\n    desc.setProp('YvDesignEditorpropProp', YvDesignEditorpropProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'editorprop',\r\n        vjson.text,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n    ]\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>\r\n<style>\r\n.yv-editorprop {\r\n\r\n}\r\n</style>","<template>\r\n  <div class=\"property\">\r\n    <div class=\"title\">log 属性</div>\r\n    <el-form :model=\"formData\" :rules=\"rules\" label-position=\"right\" label-width=\"80px\"\r\n             size=\"default\" @submit.native.prevent>\r\n      <el-form-item label=\"reference\" prop=\"reference\">\r\n        <el-input v-model=\"formData.reference\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-form-item label=\"uiKey\" prop=\"uiKey\">\r\n        <el-input v-model=\"formData.uiKey\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <el-divider/>\r\n      <el-form-item label=\"隐藏\" prop=\"formData.hidden\">\r\n        <el-switch v-model=\"formData.hidden\"></el-switch>\r\n      </el-form-item>\r\n      <el-form-item label=\"数据类型\" prop=\"logDataType\">\r\n        <el-input v-model=\"formData.logDataType\" type=\"text\" clearable></el-input>\r\n      </el-form-item>\r\n      <yv-design-input-height :form-data=\"formData\" :designer=\"designer\" v-if=\"!isRf\"/>\r\n    </el-form>\r\n  </div>\r\n\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {toRaw} from 'vue'\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport basePropMix from \"./basePropMix\"\r\nimport YvDesignInputIcon from \"./yv-design-input-icon.vue\";\r\nimport YvDesignInputHeight from \"./yv-design-input-height.vue\";\r\n\r\nexport default {\r\n  components: {YvDesignInputIcon, YvDesignInputHeight},\r\n  mixins: [basePropMix],\r\n  props: {\r\n    vjson: Object,\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      allowSaveStep: false,\r\n      rules: [],\r\n      formData: {\r\n        reference: this.vjson.reference,\r\n        text: this.vjson.text,\r\n        type: this.vjson.type,\r\n        plain: this.vjson.plain ?? false,\r\n        round: this.vjson.round ?? false,\r\n        circle: this.vjson.circle ?? false,\r\n        link: this.vjson.link ?? false,\r\n        iconCls: this.vjson.iconCls,\r\n        size: this.vjson.size,\r\n        disabled: this.vjson.disabled ?? false,\r\n        hidden: this.vjson.hidden ?? false,\r\n        loading: this.vjson.loading ?? false,\r\n        bind: this.vjson.bind\r\n      },\r\n    }\r\n  },\r\n  methods: {},\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      immediate: true,\r\n      handler(newVal, oldVal) {\r\n        this.allowSaveStep = false\r\n        this.formData = newVal\r\n        this.$nextTick(() => {\r\n          this.allowSaveStep = true\r\n        })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.property {\r\n  height: 100%;\r\n  width: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    width: 100%;\r\n    height: 38px;\r\n    overflow: hidden;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    text-overflow: ellipsis;\r\n    margin-bottom: 10px;\r\n  }\r\n\r\n  form {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-divider--horizontal {\r\n      margin: 10px 0;\r\n    }\r\n\r\n    .el-form-item {\r\n      padding-right: 10px;\r\n    }\r\n\r\n    .el-form-item--default {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <yv-vjson-object :vcxt=\"vcxt\" :vjson=\"items\"/>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport baseVjsonMix from \"./baseVjsonMix\"\r\n\r\nexport default {\r\n  mixins: [baseVjsonMix],\r\n  data() {\r\n    const items = _.cloneDeep(vjsonItems)\r\n\r\n    return {\r\n      items: items\r\n    }\r\n  },\r\n  computed: {},\r\n  methods: {}\r\n}\r\n\r\nconst vjsonItems = [\r\n  {\r\n    xtype: 'form',\r\n    colsOfRow: 2,\r\n    items: [\r\n      {\r\n        bind: {\r\n          value: '{$row.create_by}',\r\n        },\r\n        fieldLabel: '创建人',\r\n        xtype: 'staticfield',\r\n      },\r\n      {\r\n        bind: {\r\n          value: '{$row.create_at}',\r\n        },\r\n        fieldLabel: '创建时间',\r\n        xtype: 'staticfield',\r\n      },\r\n      {\r\n        bind: {\r\n          value: '{$row.update_by}',\r\n        },\r\n        fieldLabel: '更新人',\r\n        xtype: 'staticfield',\r\n      },\r\n      {\r\n        bind: {\r\n          value: '{$row.update_at}',\r\n        },\r\n        fieldLabel: '更新时间',\r\n        xtype: 'staticfield',\r\n      },\r\n    ],\r\n    hidden: false,\r\n    disabled: false,\r\n    loading: false,\r\n    cls: '',\r\n    scrollable: false,\r\n    size: 'default',\r\n    gutter: '',\r\n    labelPosition: 'right',\r\n    inlineMessage: true,\r\n    showMessage: true,\r\n    labelWidth: '',\r\n    validateOnRuleChange: true,\r\n    allowShrink: true,\r\n    shrink: true,\r\n    isBorder: [\r\n      '0px',\r\n      '0px',\r\n      '0px',\r\n      '0px',\r\n    ],\r\n  },\r\n  {\r\n    xtype: 'aggrid',\r\n    columns: [\r\n      {\r\n        dataIndex: 'log_at',\r\n        header: '时间',\r\n        xtype: 'aggridcolumn',\r\n        width: 78,\r\n      },\r\n      {\r\n        dataIndex: 'log_by',\r\n        header: '人员',\r\n        xtype: 'aggridcolumn',\r\n        width: 78,\r\n      },\r\n      {\r\n        dataIndex: 'log_term_ip',\r\n        header: '终端IP',\r\n        xtype: 'aggridcolumn',\r\n        width: 90,\r\n      },\r\n      {\r\n        dataIndex: 'log_term_name',\r\n        header: '操作终端名称',\r\n        xtype: 'aggridcolumn',\r\n        width: 134,\r\n      },\r\n      {\r\n        dataIndex: 'log_operator',\r\n        header: '操作类型',\r\n        xtype: 'aggridcolumn',\r\n        width: 106,\r\n      },\r\n      {\r\n        dataIndex: 'log_data_type',\r\n        header: '数据类型',\r\n        xtype: 'aggridcolumn',\r\n        width: 106,\r\n      },\r\n      {\r\n        dataIndex: 'log_data_id',\r\n        header: '数据ID',\r\n        xtype: 'aggridcolumn',\r\n        width: 92,\r\n      },\r\n      {\r\n        dataIndex: 'log_data_before',\r\n        header: '修改前',\r\n        xtype: 'aggridcolumn',\r\n        width: 92,\r\n      },\r\n      {\r\n        dataIndex: 'log_data_after',\r\n        header: '修改后',\r\n        xtype: 'aggridcolumn',\r\n        width: 92,\r\n      },\r\n    ],\r\n    hidden: false,\r\n    disabled: false,\r\n    loading: false,\r\n    cls: '',\r\n    height: '300px',\r\n    pagination: true,\r\n    pageSize: 50,\r\n    autoLoad: false,\r\n    rowNumber: false,\r\n    hiLightSelectedRow: false,\r\n    isBindMode: false,\r\n    rowDragable: false,\r\n    pageSizeOption: [\r\n      {\r\n        value: '20',\r\n      },\r\n      {\r\n        value: '50',\r\n      },\r\n      {\r\n        value: '100',\r\n      },\r\n      {\r\n        value: '200',\r\n      },\r\n      {\r\n        value: '300',\r\n      },\r\n      {\r\n        value: '500',\r\n      },\r\n      {\r\n        value: '1000',\r\n      },\r\n    ],\r\n    hideFooterToolbar: false,\r\n    hideFooterToolbarRefresh: false,\r\n    hideFooterToolbarRowCount: false,\r\n    hideFooterToolbarExcelExport: false,\r\n    hideFooterToolbarFilter: false,\r\n    heightMode: 'fix',\r\n  },\r\n]\r\n</script>","<template>\r\n  <yv-vjson-log :id=\"vjson.id\"\r\n                :class=\"['yv-log', customClass]\"\r\n                :vjson=\"vjson\"\r\n                :vcxt=\"vcxt\"\r\n                @selectme.native=\"_selectMe\"\r\n                @click.stop=\"_selectMe\">\r\n  </yv-vjson-log>\r\n</template>\r\n\r\n<script>\r\nimport VJsonContext from \"../../vjson/VJsonContext\"\r\nimport Designer from \"../designer\"\r\nimport YvDesignMixin from \"../yv-design-mixin\"\r\nimport YvDesignLogProp from \"./yv-design-log-prop.vue\"\r\nimport YvVjsonLog from \"../../vjson/yv-vjson-log.vue\"\r\nimport {getDescDefaults, registeComponent} from '../yv-designer-desc'\r\n\r\nexport default {\r\n  mixins: [YvDesignMixin],\r\n  props: {\r\n    vjson: Object,\r\n    vcxt: VJsonContext,\r\n    designer: Designer,\r\n    parentComponent: Object,\r\n    parentList: Array,\r\n    indexOfParentList: Number,\r\n  },\r\n  components: {\r\n    YvVjsonLog\r\n  },\r\n  computed: {\r\n  },\r\n  created() {\r\n  },\r\n  mounted() {\r\n  },\r\n  beforeUnmount() {\r\n  },\r\n  methods: {},\r\n  install(Vue) {\r\n    const desc = registeComponent('log')\r\n    desc.setRuntime('YvVjsonLog', YvVjsonLog)\r\n    desc.setDesign('YvDesignLog', this)\r\n    desc.setProp('YvDesignLogProp', YvDesignLogProp)\r\n    desc.setDisplayFn((vjson) => {\r\n      return [\r\n        'log',\r\n        vjson.text,\r\n        vjson.reference ? '@' + vjson.reference : undefined,\r\n        ':' + vjson.id\r\n      ].join(' ')\r\n    })\r\n\r\n    desc.events = [\r\n      ...getDescDefaults('events'),\r\n      {name: 'click', desc: '点击时触发', events: [{name: 'e'}]},\r\n    ]\r\n    desc.props = [\r\n      ...getDescDefaults('props'),\r\n      {name: 'logDataType', desc: '日志数据类型', bindable: true},\r\n    ]\r\n    desc.methods = [\r\n      ...getDescDefaults('methods')\r\n    ]\r\n\r\n    desc.install(Vue)\r\n  },\r\n}\r\n</script>","import _ from \"lodash\";\r\n\r\nconst dpiInfo = {};\r\n\r\n//调用直接 new unitConversion().pxConversionMm(像素)\r\n//        new unitConversion().mmConversionPx (毫米)\r\n\r\n\r\nfunction conversion_getDPI() {\r\n  // @ts-ignore\r\n  if (window.screen[\"deviceXDPI\"]) {\r\n    // @ts-ignore\r\n    dpiInfo.dpix = window.screen.deviceXDPI;\r\n    // @ts-ignore\r\n    dpiInfo.dpiy = window.screen.deviceYDPI;\r\n  } else {\r\n    var tmpNode = document.createElement(\"DIV\");\r\n    tmpNode.style.cssText = \"width:1in;height:1in;position:absolute;left:0px;top:0px;z-index:99;visibility:hidden\";\r\n    document.body.appendChild(tmpNode);\r\n    // @ts-ignore\r\n    dpiInfo.dpix = parseInt(tmpNode.offsetWidth);\r\n    // @ts-ignore\r\n    dpiInfo.dpiy = parseInt(tmpNode.offsetHeight);\r\n    // @ts-ignore\r\n    tmpNode.parentNode.removeChild(tmpNode);\r\n  }\r\n}\r\n\r\nfunction pxConversionMm(value: number) {\r\n  // @ts-ignore\r\n  if (!dpiInfo.dpix) {\r\n    conversion_getDPI()\r\n  }\r\n  // @ts-ignore\r\n  var inch = value / dpiInfo.dpix;\r\n  var c_value = inch * 25.4;\r\n//      console.log(c_value);\r\n  return c_value;\r\n};\r\n\r\n/**\r\n * mm转换为px\r\n * @param value\r\n * @returns {number}\r\n */\r\nfunction mmConversionPx(value: number) {\r\n  // @ts-ignore\r\n  if (!dpiInfo.dpix) {\r\n    conversion_getDPI()\r\n  }\r\n  var inch = value / 25.4;\r\n  // @ts-ignore\r\n  var c_value = inch * dpiInfo.dpix;\r\n//      console.log(c_value);\r\n  return c_value;\r\n}\r\n\r\n\r\n/**\r\n * 获取元素位置\r\n * @param {*} element\r\n */\r\nfunction cumulativeOffset(element: any) {\r\n  let top = element.offsetTop\r\n  let left = element.offsetLeft\r\n\r\n  return {\r\n    top: top,\r\n    left: left\r\n  }\r\n}\r\n\r\n/**\r\n * 判断元素是否在窗口内\r\n * @param {*} el\r\n */\r\nfunction checkInView(el: any) {\r\n  let rect = el.getBoundingClientRect()\r\n  return (\r\n    (rect.top > 0 && rect.top < window.innerHeight) &&\r\n    (rect.left < window.innerWidth &&\r\n      rect.right > 0)\r\n  )\r\n}\r\n\r\n\r\nconst YL_VIEW_TYPE = [\r\n  'YL_TYPE_VIEW', 1, 'view',//view (块,线,线框)\r\n  'YL_TYPE_TEXT', 2, 'text',//text (文字, UTF-8格式字符串)\r\n  'YL_TYPE_BARCODE', 3, 'barcode',//barcode (条形码)\r\n  'YL_TYPE_QRCODE', 4, 'qrcode',//qrcode (二维码)\r\n  'YL_TYPE_IMAGE', 5, 'image',//image (图片)\r\n  'YL_TYPE_PATH', 6, 'drawPath'// 绘图路径\r\n]\r\n\r\nfunction getViewDescByType(type: number) {\r\n  const index = YL_VIEW_TYPE.indexOf(type)\r\n  if (index > 0) {\r\n    return YL_VIEW_TYPE[index + 1]\r\n  }\r\n  return \"\"\r\n}\r\n\r\nfunction getViewDescByViewType(viewType: string) {\r\n  const index = YL_VIEW_TYPE.indexOf(viewType)\r\n  if (index > 0) {\r\n    return YL_VIEW_TYPE[index + 2]\r\n  }\r\n  return \"\"\r\n}\r\n\r\nfunction getViewTypeByType(type: number) {\r\n  const index = YL_VIEW_TYPE.indexOf(type)\r\n  if (index > 0) {\r\n    return YL_VIEW_TYPE[index - 1]\r\n  }\r\n  return \"\"\r\n}\r\n\r\nfunction getTypeByViewType(viewType: string) {\r\n  const index = YL_VIEW_TYPE.indexOf(viewType)\r\n  if (index >= 0) {\r\n    return YL_VIEW_TYPE[index + 1]\r\n  }\r\n  return 0\r\n}\r\n\r\nfunction getModuleViewType() {\r\n  return YL_VIEW_TYPE[0]\r\n}\r\n\r\nfunction deepTrav(obj: object, handle:(objc: any, key:string, obj:any)=>boolean|undefined) {\r\n  _.forOwn(obj, (objc, key) => {\r\n    if (typeof handle === 'function') {\r\n      if (handle(objc, key, obj)) {\r\n        return true\r\n      }\r\n      if (typeof objc === 'object') {\r\n        deepTrav(objc, handle)\r\n      }\r\n    } else {\r\n      return true\r\n    }\r\n  })\r\n}\r\n\r\nfunction isJSON(str) {\r\n  if (typeof str == 'string') {\r\n    try {\r\n      const obj=JSON.parse(str)\r\n      return !!(typeof obj == 'object' && obj);\r\n    } catch(e) {\r\n      return false;\r\n    }\r\n  }\r\n  return false\r\n}\r\n\r\nexport {\r\n  pxConversionMm,\r\n  mmConversionPx,\r\n  cumulativeOffset,\r\n  checkInView,\r\n  getViewTypeByType,\r\n  getTypeByViewType,\r\n  getViewDescByType,\r\n  getViewDescByViewType,\r\n  getModuleViewType,\r\n  deepTrav,\r\n  isJSON\r\n}\r\n","import _ from \"lodash\";\r\n\r\nimport {deepTrav, getViewDescByType, getViewTypeByType, pxConversionMm} from \"./utils\"\r\n\r\nexport default class Designer {\r\n\r\n    page!: any\r\n    zoom: number = 100 // 画布缩放百分比\r\n    type: string = 'page' // 选中元素类型\r\n    index: any = -1 // 选中元素索引\r\n    uuid: number | string = -1 // 选中元素uuid\r\n    activeElement: any\r\n    viewType: any\r\n    startX: number = 0\r\n    startY: number = 0\r\n    originX: number = 0\r\n    originY: number = 0\r\n    moving: boolean = false\r\n\r\n    constructor(page: any) {\r\n        deepTrav(page, (objc: any, key: string) => {\r\n            if (typeof objc === 'object' && objc.type) {\r\n                objc.viewType = getViewTypeByType(objc.type)\r\n                objc.desc = getViewDescByType(objc.type)\r\n                objc.dragable = true\r\n                if (!objc.uuid) {\r\n                    objc.uuid = _.uniqueId(objc.viewType + \"-\")\r\n                }\r\n                if (!objc.isEdit && objc.isEdit != 0) {\r\n                    objc.isEdit = 1\r\n                }\r\n                if (key === 'docHeader' || key === 'pageHeader' || key === 'docBody' || key === 'pageFooter' || key === 'docFooter') {\r\n                    if (!Array.isArray(objc.subViews)) {\r\n                        objc.subViews = []\r\n                    }\r\n                }\r\n            }\r\n            return false\r\n        })\r\n        this.page = page\r\n        this.activeElement = {}\r\n    }\r\n\r\n    public getPage() {\r\n        return this.page\r\n    }\r\n\r\n    // 选中元件与取消选中\r\n    select(uuid: number | string) {\r\n        this.uuid = uuid\r\n        if (uuid === -1) {\r\n            this.activeElement = {}\r\n            this.viewType = 'page'\r\n        } else {\r\n            deepTrav(this.page, (objc: any, key: string) => {\r\n                if (typeof objc === 'object' && objc.type && objc.uuid === uuid) {\r\n                    this.activeElement = objc\r\n                    this.viewType = objc.viewType\r\n                    return true\r\n                }\r\n            })\r\n        }\r\n    }\r\n\r\n    // 删除选中元件\r\n    delete(uuid) {\r\n        const viewType = this.viewType\r\n        if (viewType === 'page') {\r\n            return\r\n        }\r\n        deepTrav(this.page, (objc, key, parent) => {\r\n            if (typeof objc === 'object' && objc.type && objc.uuid === uuid) {\r\n                if (Array.isArray(parent)) {\r\n                    // @ts-ignore\r\n                    parent.splice(key, 1)\r\n                } else {\r\n                    parent[key] = null\r\n                }\r\n            }\r\n            return null\r\n        })\r\n        // 重置 activeElement\r\n        this.activeElement = {}\r\n        this.viewType = 'page'\r\n        this.uuid = -1\r\n    }\r\n\r\n    // 添加页面模块\r\n    addModuleItem(item) {\r\n        let uuid = _.uniqueId(item.viewType + \"-\")\r\n        let setting = _.cloneDeep(item)\r\n        const width = this.page.pageWidth - (this.page.padding?.left || 0) - (this.page.padding?.right || 0)\r\n        setting.rect = {\r\n            x: 0,\r\n            y: 0,\r\n            width: width,\r\n            height: 50\r\n        }\r\n        setting.desc = getViewDescByType(setting.type)\r\n        setting.subViews = []\r\n        if (!this.page[item.title]?.viewType) {\r\n            this.page[item.title] = Object.assign(setting, {uuid})\r\n            item.uuid = setting.uuid\r\n        }\r\n    }\r\n\r\n    // 添加组件\r\n    addTemplateItem(item) {\r\n        let uuid = _.uniqueId(item.viewType + \"-\")\r\n        let setting = _.cloneDeep(item)\r\n        setting.desc = getViewDescByType(setting.type)\r\n        if (this.activeElement.type != 1) {\r\n            return\r\n        }\r\n        if (this.activeElement === this.page.docHeader\r\n            || this.activeElement === this.page.pageHeader\r\n            || this.activeElement === this.page.docBody\r\n            || this.activeElement === this.page.pageFooter\r\n            || this.activeElement === this.page.docFooter) {\r\n            if (!Array.isArray(this.activeElement.subViews)) {\r\n                this.activeElement.subViews = []\r\n            }\r\n            this.activeElement.subViews.push(Object.assign(setting, {uuid}))\r\n            item.uuid = setting.uuid\r\n        }\r\n    }\r\n\r\n    // 设置 mousemove 操作的初始值\r\n    initMove(payload: any) {\r\n        this.startX = payload.startX\r\n        this.startY = payload.startY\r\n        this.originX = payload.originX\r\n        this.originY = payload.originY\r\n        this.moving = true\r\n    }\r\n\r\n    move(position: any) {\r\n        // debugger\r\n        const target = this.activeElement\r\n        const dx = pxConversionMm(position.x - this.startX)\r\n        const dy = pxConversionMm(position.y - this.startY)\r\n        const left = this.originX + dx * 100 / this.zoom\r\n        const top = this.originY + dy * 100 / this.zoom\r\n\r\n        target.rect.x = left > 0 ? left : 0\r\n        target.rect.y = top > 0 ? top : 0\r\n    }\r\n\r\n    stopMove() {\r\n        this.moving = false\r\n    }\r\n\r\n    // 更新数据\r\n    updateData({uuid, value}) {\r\n        let widget = null\r\n        deepTrav(this.page, (objc: any, key: string, parent: any) => {\r\n            if (typeof objc === 'object' && objc.type && objc.uuid === uuid) {\r\n                widget = objc\r\n                return true\r\n            }\r\n        })\r\n        widget ? widget.value = value : ''\r\n    }\r\n\r\n}","import Designer from \"../Designer\";\r\n\r\nexport default {\r\n  props:{\r\n    val: {},\r\n    designer: Designer,\r\n  },\r\n  data() {\r\n    const subViews = this.val.subViews\r\n    const topLine = this.val.topLine\r\n    const leftLine = this.val.leftLine\r\n    const bottomLine = this.val.bottomLine\r\n    const rightLine = this.val.rightLine\r\n    return {\r\n      topLine,\r\n      leftLine,\r\n      bottomLine,\r\n      rightLine,\r\n      subViews\r\n    }\r\n  },\r\n\r\n  methods: {\r\n    getBorder(lineObj) {\r\n      if (lineObj && lineObj.lineWidth > 0) {\r\n        return lineObj.lineWidth + 'mm solid ' + (lineObj.color ? lineObj.color : '#000000')\r\n      }\r\n      return '1px dashed rgb(200 200 200 / 50%)'\r\n    }\r\n  },\r\n\r\n  computed: {\r\n    // 选中项id\r\n    widgetId() {\r\n      return this.designer.uuid\r\n    },\r\n    borderTop() {\r\n      return this.getBorder(this.topLine)\r\n    },\r\n    borderLeft() {\r\n      return this.getBorder(this.leftLine)\r\n    },\r\n    borderBottom() {\r\n      return this.getBorder(this.bottomLine)\r\n    },\r\n    borderRight() {\r\n      return this.getBorder(this.rightLine)\r\n    },\r\n  },\r\n\r\n}\r\n","<template>\r\n  <div\r\n      class=\"widgets\"\r\n      :contenteditable=\"!!val.isEdit\"\r\n      @blur=\"(e) => updateText(e, val.uuid)\"\r\n      :style=\"{\r\n      position:inpage?'relative':'absolute',\r\n      left: val.rect.x + 'mm' ,\r\n      top:  val.rect.y + 'mm',\r\n      width: val.rect.width + 'mm',\r\n      height: val.rect.height + 'mm',\r\n      fontSize: val.font.size + 'mm',\r\n      color: val.font.color,\r\n      textAlign: val.font.textAlign ?? 'left',\r\n      fontWeight: (val.font.bold === 1 || val.font.bold === true) ? 'bold': 'normal',\r\n      borderTop: borderTop,\r\n      borderLeft: borderLeft,\r\n      borderBottom: borderBottom,\r\n      borderRight: borderRight,\r\n    }\"\r\n  >\r\n    {{ val.value }}\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport {getTypeByViewType} from '../utils'//v-html=\"textContent(val,'')\"\r\nimport viewMixins from \"../mixins/viewMixins\";\r\n\r\nconst WIDGET_NAME = 'YL_TYPE_TEXT'\r\nimport {Delete} from \"@element-plus/icons-vue\"\r\n\r\nexport default {\r\n  mixins: [viewMixins],\r\n  name: WIDGET_NAME,\r\n  components: {\r\n    Delete\r\n  },\r\n  setting: {\r\n    viewType: WIDGET_NAME,\r\n    type: getTypeByViewType(WIDGET_NAME),\r\n    isEdit: true,\r\n    dragable: true, // 是否可拖拽\r\n    resizable: true, // 尺寸是否可变\r\n    value: '文本',\r\n    rect: {\r\n      x: 0,\r\n      y: 0,\r\n      width: 30,\r\n      height: 5\r\n    },\r\n    font: {\r\n      name: \"\",\r\n      size: 3.5,\r\n      color: '',\r\n      bold: false, // 1代表粗体，0代表非粗体\r\n      tilt: false, // 1代表斜体，0代表非斜体\r\n      underline: false, // 1代表有下划线，0代表无下划线\r\n      strikethrough: false, // 1代表有删除线，0代表无删除线\r\n      textAlign: 'left', // 对齐方式\r\n      // ItemType: 0, // 打印类型 0--普通项 1--页眉页脚 2--页号项 3--页数项 4--多页项\r\n    },\r\n    valueAlign: {\r\n      xSite: 1,\r\n      ySite: 1,\r\n    },\r\n    topLine: {\r\n      lineType: 1,\r\n      lineWidth: 0.0,\r\n      color: ''\r\n    },\r\n    leftLine: {\r\n      lineType: 1,\r\n      lineWidth: 0.0,\r\n      color: ''\r\n    },\r\n    bottomLine: {\r\n      lineType: 1,\r\n      lineWidth: 0.0,\r\n      color: ''\r\n    },\r\n    rightLine: {\r\n      lineType: 1,\r\n      lineWidth: 0.0,\r\n      color: ''\r\n    },\r\n  },\r\n  props: [\r\n    'val', // 文本对象\r\n    'inpage'\r\n  ],\r\n  data() {\r\n    return {\r\n      delete: false\r\n    }\r\n  },\r\n  mounted() {\r\n\r\n  },\r\n  methods: {\r\n    updateText(e, uuid) {\r\n      let text = e.target.innerText\r\n      this.designer.updateData({\r\n        uuid: uuid,\r\n        key: 'value',\r\n        value: text,\r\n      })\r\n    }\r\n  },\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.widgets {\r\n  position: relative;\r\n\r\n  .delete {\r\n    display: none;\r\n    cursor: pointer;\r\n    color: red;\r\n\r\n    .icon {\r\n      font-size: 16px;\r\n    }\r\n  }\r\n}\r\n</style>\r\n\r\n","<template>\r\n  <div\r\n    class=\"widgets\"\r\n    :style=\"{\r\n      position:inpage?'relative':'absolute',\r\n      left: val.rect.x + 'mm' ,\r\n      top:  val.rect.y + 'mm',\r\n      width: val.rect.width + 'mm',\r\n      height: val.rect.height + 'mm',\r\n      borderTop: borderTop,\r\n      borderLeft: borderLeft,\r\n      borderBottom: borderBottom,\r\n      borderRight: borderRight,\r\n    }\"\r\n  >\r\n    <el-image :src=\"codeUrl\" fit=\"fill\" />\r\n  </div>\r\n</template>\r\n\r\n<script>\r\n\r\nimport {getViewTypeByType, getTypeByViewType} from '../utils'\r\nimport viewMixins from \"../mixins/viewMixins\";\r\nconst WIDGET_NAME = 'YL_TYPE_BARCODE'\r\n\r\nexport default {\r\n  mixins: [viewMixins],\r\n  name: WIDGET_NAME,\r\n  setting: {\r\n    viewType: WIDGET_NAME,\r\n    type: getTypeByViewType(WIDGET_NAME),\r\n    isEdit: true,\r\n    dragable: true, // 是否可拖拽\r\n    resizable: true, // 尺寸是否可变\r\n    value: 'barcode123',\r\n    rect: {\r\n      x: 0,\r\n      y: 0,\r\n      width: 60,\r\n      height: 16\r\n    }\r\n  },\r\n  props: [\r\n    'val', // 文本对象\r\n    'inpage'\r\n  ],\r\n  methods: {\r\n    updateText(e, uuid) {\r\n      let text = e.target.innerHTML\r\n      this.$vptd.commit('updateData', {\r\n        uuid: uuid,\r\n        key: 'value',\r\n        value: text,\r\n      })\r\n    },\r\n  },\r\n  computed: {\r\n    // 'QRCode', 'PDF417'\r\n    codeUrl() {\r\n      return \"/src/assets/barcode.png\"//require('./barcode.png')\r\n    },\r\n  },\r\n}\r\n</script>\r\n\r\n","<template>\r\n  <div\r\n    class=\"widgets\"\r\n    :style=\"{\r\n      position:inpage?'relative':'absolute',\r\n      left: val.rect.x + 'mm' ,\r\n      top:  val.rect.y + 'mm',\r\n      width: val.rect.width + 'mm',\r\n      height: val.rect.height + 'mm',\r\n      borderTop: borderTop,\r\n      borderLeft: borderLeft,\r\n      borderBottom: borderBottom,\r\n      borderRight: borderRight,\r\n    }\"\r\n  >\r\n    <el-image :src=\"codeUrl\"\r\n              style=\"width: 100%; height: 100%\"\r\n              fit=\"fill\"/>\r\n<!--    <div-->\r\n<!--      class=\"text\"-->\r\n<!--      :style=\"{-->\r\n<!--        display:val.style.ShowBarText ? '' : 'none',-->\r\n<!--        fontSize: val.style.FontSize + 'pt',-->\r\n<!--        fontWeight: val.style.Bold ? 'bold' : 'normal'-->\r\n<!--      }\"-->\r\n<!--    >1234567890</div>-->\r\n  </div>\r\n</template>\r\n\r\n<script>\r\n\r\nimport {getViewTypeByType, getTypeByViewType} from '../utils'\r\nimport viewMixins from \"../mixins/viewMixins\";\r\nconst WIDGET_NAME = 'YL_TYPE_QRCODE'\r\n\r\nexport default {\r\n  mixins: [viewMixins],\r\n  name: WIDGET_NAME,\r\n  setting: {\r\n    viewType: WIDGET_NAME,\r\n    type: getTypeByViewType(WIDGET_NAME),\r\n    isEdit: true,\r\n    dragable: true, // 是否可拖拽\r\n    resizable: true, // 尺寸是否可变\r\n    value: 'qrcode123',\r\n    rect: {\r\n      x: 0,\r\n      y: 0,\r\n      width: 40,\r\n      height: 40\r\n    }\r\n  },\r\n  props: [\r\n    'val', // 文本对象\r\n    'inpage'\r\n  ],\r\n  methods: {\r\n    updateText(e, uuid) {\r\n      let text = e.target.innerHTML\r\n      this.$vptd.commit('updateData', {\r\n        uuid: uuid,\r\n        key: 'value',\r\n        value: text,\r\n      })\r\n    },\r\n  },\r\n  computed: {\r\n    // 'QRCode', 'PDF417'\r\n    codeUrl() {\r\n      return \"/src/assets/qrcode.png\"\r\n      // return ()=>import('./qrcode.png')\r\n    },\r\n  },\r\n}\r\n</script>\r\n\r\n","<template>\r\n  <div\r\n      class=\"widgets\"\r\n      :style=\"{\r\n      position:inpage?'relative':'absolute',\r\n      left: val.rect.x + 'mm' ,\r\n      top:  val.rect.y + 'mm',\r\n      width: val.rect.width + 'mm',\r\n      height: val.rect.height + 'mm',\r\n      borderTop: borderTop,\r\n      borderLeft: borderLeft,\r\n      borderBottom: borderBottom,\r\n      borderRight: borderRight,\r\n    }\"\r\n  >\r\n    <el-image :src=\"codeUrl\" fit=\"fill\"/>\r\n    <!--    <div-->\r\n    <!--      class=\"text\"-->\r\n    <!--      :style=\"{-->\r\n    <!--        display:val.style.ShowBarText ? '' : 'none',-->\r\n    <!--        fontSize: val.style.FontSize + 'pt',-->\r\n    <!--        fontWeight: val.style.Bold ? 'bold' : 'normal'-->\r\n    <!--      }\"-->\r\n    <!--    >1234567890</div>-->\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport {getViewTypeByType, getTypeByViewType} from '../utils'\r\nimport viewMixins from \"../mixins/viewMixins\";\r\n\r\nconst WIDGET_NAME = 'YL_TYPE_IMAGE'\r\n\r\nexport default {\r\n  mixins: [viewMixins],\r\n  name: WIDGET_NAME,\r\n  setting: {\r\n    viewType: WIDGET_NAME,\r\n    type: getTypeByViewType(WIDGET_NAME),\r\n    isEdit: true,\r\n    dragable: true, // 是否可拖拽\r\n    resizable: true, // 尺寸是否可变\r\n    value: 'barcode123',\r\n    rect: {\r\n      x: 0,\r\n      y: 0,\r\n      width: 18,\r\n      height: 18\r\n    }\r\n  },\r\n  props: [\r\n    'val', // 文本对象\r\n    'inpage'\r\n  ],\r\n  methods: {\r\n    updateText(e, uuid) {\r\n      let text = e.target.innerHTML\r\n      this.$vptd.commit('updateData', {\r\n        uuid: uuid,\r\n        key: 'value',\r\n        value: text,\r\n      })\r\n    },\r\n  },\r\n  computed: {\r\n    // 'QRCode', 'PDF417'\r\n    codeUrl() {\r\n      return \"/src/assets/rgb.jpg\" //()=>import('./rgb.jpg')\r\n    },\r\n  },\r\n}\r\n</script>\r\n\r\n","<template>\r\n  <div\r\n      class=\"widgets\"\r\n      contenteditable=\"false\"\r\n      @blur=\"(e) => updateText(e, val.uuid)\"\r\n      :style=\"{\r\n        position:inpage?'relative':'absolute',\r\n        left: val.rect?.x + 'mm' ,\r\n        top:  val.rect?.y + 'mm',\r\n        width: val.rect?.width + 'mm',\r\n        height: val.rect?.height + 'mm',\r\n        color: val.color,\r\n        borderTop: borderTop,\r\n        borderLeft: borderLeft,\r\n        borderBottom: borderBottom,\r\n        borderRight: borderRight,\r\n      }\"\r\n  >\r\n    <template v-for=\"val in subViews\">\r\n      <component\r\n          :is=\"val.viewType\"\r\n          :data-title=\"val.viewType\"\r\n          :class=\"{'active': widgetId === val.uuid}\"\r\n          :val=\"val\"\r\n          :data-type=\"val.viewType\"\r\n          :data-uuid=\"val.uuid\"\r\n          :designer=\"designer\"\r\n          class=\"layer\"\r\n      />\r\n      <span\r\n          class=\"delete\"\r\n          @click=\"deleteComponent(val.uuid)\"\r\n          :style=\"{\r\n            position:inpage?'relative':'absolute',\r\n            left: val.rect?.x + val.rect?.width - 5 + 'mm' ,\r\n            top:  val.rect?.y + 'mm',\r\n            display: widgetId === val.uuid ? 'inline' : 'none'\r\n          }\">\r\n        <i class=\"icon iconfont icon-shanchu\"/>\r\n      </span>\r\n    </template>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport {getTypeByViewType} from '../utils'\r\nimport viewMixins from \"../mixins/viewMixins\";\r\n\r\nconst WIDGET_NAME = 'YL_TYPE_VIEW'\r\n\r\nexport default {\r\n  mixins: [viewMixins],\r\n  name: WIDGET_NAME,\r\n  setting: {\r\n    viewType: WIDGET_NAME,\r\n    type: getTypeByViewType(WIDGET_NAME),\r\n    isEdit: true,\r\n    dragable: true, // 是否可拖拽\r\n    resizable: true, // 尺寸是否可变\r\n    value: '线框',\r\n    rect: {\r\n      x: 0,\r\n      y: 0,\r\n      width: 20,\r\n      height: 20\r\n    },\r\n  },\r\n  props: [\r\n    'val', // 文本对象\r\n    'inpage'\r\n  ],\r\n  methods: {\r\n    deleteComponent(uuid) {\r\n      console.log(uuid);\r\n      this.designer.delete(uuid);\r\n    },\r\n    updateText(e, uuid) {\r\n      let text = e.target.innerHTML\r\n      this.$vptd.commit('updateData', {\r\n        uuid: uuid,\r\n        key: 'value',\r\n        value: text,\r\n      })\r\n    },\r\n  },\r\n}\r\n</script>\r\n\r\n","import YLTypeText from \"./YLTypeText.vue\";\r\nimport YLTypeBarcode from \"./YLTypeBarcode.vue\";\r\nimport YLTypeQrcode from \"./YLTypeQrcode.vue\";\r\nimport YLTypeImage from \"./YLTypeImage.vue\";\r\nimport YLTypeView from \"./YLTypeView.vue\";\r\n\r\n\r\nconst install = function (Vue:any) {\r\n  Vue.component(YLTypeView.name, YLTypeView)\r\n  Vue.component(YLTypeText.name, YLTypeText)\r\n  Vue.component(YLTypeBarcode.name, YLTypeBarcode)\r\n  Vue.component(YLTypeQrcode.name, YLTypeQrcode)\r\n  Vue.component(YLTypeImage.name, YLTypeImage)\r\n}\r\n\r\n\r\nconst getWidgetsSetting = function () {\r\n  return {\r\n    [YLTypeView.name]: YLTypeView.setting,\r\n    [YLTypeText.name]: YLTypeText.setting,\r\n    [YLTypeBarcode.name]: YLTypeBarcode.setting,\r\n    [YLTypeQrcode.name]: YLTypeQrcode.setting,\r\n    [YLTypeImage.name]: YLTypeImage.setting,\r\n  }\r\n}\r\nexport default {\r\n  install,\r\n  getWidgetsSetting\r\n}\r\n","import {markRaw, toRaw} from 'vue'\r\nimport _ from 'lodash'\r\nimport ElementPlus from 'element-plus'\r\nimport JsonEditorVue from 'json-editor-vue3'\r\nimport resizeTo from '../directive/resizeTo'\r\nimport clickOutside2 from '../directive/clickOutside2'\r\nimport {addWindowResizeHandler} from './yv-utils'\r\nimport YvVjsonObject from './vjson/yv-vjson-object.vue'\r\nimport YvVjsonTree from './vjson/yv-vjson-tree.vue'\r\nimport {addGlobalVariable} from './design/yv-designer-desc'\r\n\r\nimport YvSrcEditor from './design/yv-src-editor.vue'\r\nimport JSON5 from 'json5'\r\nimport YvStudio from '../studio/yv-studio.vue'\r\nimport VJsonContext from './vjson/VJsonContext'\r\nimport YvVJsonLayout from './vjson/yv-vjson-layout.vue'\r\nimport DefaultLayoutDesign from './layout/DefaultLayoutDesign.vue'\r\nimport MobileDefaultLayoutDesign from './layout/MobileDefaultLayoutDesign.vue'\r\nimport SimpleGrid from './layout/SimpleGrid.vue'\r\nimport SimpleGridDesign from './layout/SimpleGridDesign.vue'\r\nimport $ from 'jquery'\r\nimport Split from './split.vue'\r\nimport SplitArea from './split-area.vue'\r\nimport YvDesignEmptyProp from './design/designCompoent/yv-design-empty-prop.vue'\r\nimport YvDesignButton from './design/designCompoent/yv-design-button.vue'\r\nimport YvDesignForm from './design/designCompoent/yv-design-form.vue'\r\nimport YvDesignTextfield from './design/designCompoent/yv-design-textfield.vue'\r\nimport YvDesignTreefield from './design/designCompoent/yv-design-treefield.vue'\r\nimport YvDesignTitlefield from './design/designCompoent/yv-design-titlefield.vue'\r\nimport YvDesignStaticfield from './design/designCompoent/yv-design-staticfield.vue'\r\nimport YvDesignAlert from './design/designCompoent/yv-design-alert.vue'\r\nimport YvDesignNumberfield from './design/designCompoent/yv-design-numberfield.vue'\r\nimport YvDesignFilefield from './design/designCompoent/yv-design-filefield.vue'\r\nimport YvDesignRadiogroup from './design/designCompoent/yv-design-radiogroup.vue'\r\nimport YvDesignCombo from './design/designCompoent/yv-design-combo.vue'\r\nimport YvDesignCombogrid from './design/designCompoent/yv-design-combogrid.vue'\r\nimport YvDesignCombosearch from './design/designCompoent/yv-design-combosearch.vue'\r\nimport YvDesignDatefield from './design/designCompoent/yv-design-datefield.vue'\r\nimport YvDesignDatetimefield from './design/designCompoent/yv-design-datetimefield.vue'\r\nimport YvDesignAggrid from './design/designCompoent/yv-design-aggrid.vue'\r\nimport YvDesignAggridColumn from './design/designCompoent/yv-design-aggrid-column.vue'\r\nimport YvDesignToolbar from './design/designCompoent/yv-design-toolbar.vue'\r\nimport YvDesignSlot from './design/designCompoent/yv-design-slot.vue'\r\nimport YvDesignFieldslot from './design/designCompoent/yv-design-fieldslot.vue'\r\nimport YvDesignTabs from './design/designCompoent/yv-design-tabs.vue'\r\nimport YvDesignSplit from './design/designCompoent/yv-design-split.vue'\r\nimport YvDesignCheckbox from './design/designCompoent/yv-design-checkbox.vue'\r\nimport YvDesignDivider from './design/designCompoent/yv-design-divider.vue'\r\nimport YvDesignDividerFormitem from './design/designCompoent/yv-design-divider-formitem.vue'\r\nimport YvDesignTree from './design/designCompoent/yv-design-tree.vue'\r\nimport YvDesignExprform from './design/designCompoent/yv-design-exprform.vue'\r\nimport YvDesignList from './design/designCompoent/yv-design-list.vue'\r\nimport YvDesignTextel from './design/designCompoent/yv-design-textel.vue'\r\nimport YvDesignGridcheck from './design/designCompoent/yv-design-gridcheck.vue'\r\nimport YvDesignSource from './design/designCompoent/yv-design-source.vue'\r\nimport YvDesignEditorProp from './design/designCompoent/yv-design-editorprop.vue'\r\nimport YvDesignLog from './design/designCompoent/yv-design-log.vue'\r\nimport PrintDesignCmp from '../studio/pages/print-template-designer/widgets/index'\r\n\r\nexport const install = function (Vue) {\r\n    window['vue'] = Vue\r\n    Vue.use(ElementPlus)\r\n    _.extend(window['vue'], {\r\n        toRaw, markRaw\r\n    })\r\n    _.extend(window, {\r\n        $\r\n    })\r\n    // Vue.component('draggable', Draggable)\r\n    // Vue.component('draggable', draggable)\r\n    Vue.component('YvStudio', YvStudio)\r\n    Vue.component('split', Split)\r\n    Vue.component('split-area', SplitArea)\r\n\r\n    Vue.component('YvSrcEditor', YvSrcEditor)\r\n    Vue.component('YvDesignEmptyProp', YvDesignEmptyProp)\r\n    Vue.component('YvVjsonObject', YvVjsonObject)\r\n    Vue.component('YvVjsonLayout', YvVJsonLayout)\r\n\r\n    /* 运行时组件注册 */\r\n\r\n    /* 设计时组件注册 */\r\n    YvDesignButton.install(Vue)\r\n    YvDesignStaticfield.install(Vue)\r\n    YvDesignAlert.install(Vue)\r\n    YvDesignTextfield.install(Vue)\r\n    YvDesignTreefield.install(Vue)\r\n    YvDesignNumberfield.install(Vue)\r\n    YvDesignFilefield.install(Vue)\r\n    YvDesignRadiogroup.install(Vue)\r\n    YvDesignTitlefield.install(Vue)\r\n    YvDesignCombo.install(Vue)\r\n    YvDesignCombogrid.install(Vue)\r\n    YvDesignCombosearch.install(Vue)\r\n    YvDesignDatefield.install(Vue)\r\n    YvDesignDatetimefield.install(Vue)\r\n    YvDesignForm.install(Vue)\r\n    YvDesignDividerFormitem.install(Vue)\r\n    YvDesignCheckbox.install(Vue)\r\n    YvDesignAggrid.install(Vue)\r\n    YvDesignAggridColumn.install(Vue)\r\n    YvDesignTabs.install(Vue)\r\n    YvDesignSplit.install(Vue)\r\n    YvDesignToolbar.install(Vue)\r\n    YvDesignSlot.install(Vue)\r\n    YvDesignFieldslot.install(Vue)\r\n    YvDesignDivider.install(Vue)\r\n    YvDesignTree.install(Vue)\r\n    YvDesignExprform.install(Vue)\r\n    YvDesignList.install(Vue)\r\n    YvDesignTextel.install(Vue)\r\n    YvDesignGridcheck.install(Vue)\r\n    YvDesignSource.install(Vue)\r\n    YvDesignEditorProp.install(Vue)\r\n    YvDesignLog.install(Vue)\r\n\r\n    /* 布局注册 */\r\n    DefaultLayoutDesign.install(Vue)\r\n    MobileDefaultLayoutDesign.install(Vue)\r\n    SimpleGrid.install(Vue)\r\n    SimpleGridDesign.install(Vue)\r\n    PrintDesignCmp.install(Vue)\r\n\r\n    /*\r\n    Vue.component('YvVjsonCols', YvVjsonCols)\r\n    Vue.component('YvVjsonCombogrid', YvVjsonCombogrid)\r\n    Vue.component('YvVjsonDatefield', YvVjsonDatefield)\r\n    Vue.component('YvVjsonToolbar', YvVjsonToolbar)\r\n    Vue.component('YvDesignToolbar', YvDesignToolbar)\r\n    Vue.component('YvDesignCols', YvDesignCols)\r\n     */\r\n\r\n    Vue.directive(resizeTo.name, resizeTo)\r\n    // Vue.directive(resize.name, resize)\r\n    Vue.directive(clickOutside2.name, clickOutside2)\r\n\r\n    addGlobalVariable({\r\n        name: 'whId',\r\n        getValue(): any {\r\n            const cookie_name = 'whId'\r\n            const allcookies = document.cookie;\r\n            let cookie_pos = allcookies.indexOf(cookie_name);\r\n            let value = undefined\r\n\r\n            if (cookie_pos != -1) {\r\n                cookie_pos = cookie_pos + cookie_name.length + 1;\r\n                //计算取cookie值得结束索引\r\n                let cookie_end = allcookies.indexOf(\";\", cookie_pos);\r\n\r\n                if (cookie_end == -1) {\r\n                    cookie_end = allcookies.length;\r\n                }\r\n                //得到想要的cookie的值\r\n                value = unescape(allcookies.substring(cookie_pos, cookie_end));\r\n            }\r\n            return value;\r\n        }\r\n    })\r\n\r\n    // Vue.use(JsonEditorVue)\r\n    // Vue.use(VueSplit)\r\n}\r\n\r\nexport {\r\n    VJsonContext,\r\n    JSON5,\r\n    addWindowResizeHandler,\r\n    SimpleGrid,\r\n    YvVjsonObject,\r\n    YvVjsonTree,\r\n    YvVJsonLayout,\r\n    Split,\r\n    SplitArea,\r\n};","import _ from 'lodash'\r\nimport * as monaco from 'monaco-editor'\r\nimport TsLanguageSupport from \"./TsLanguageSupport\"\r\nimport Designer from \"./designer\"\r\nimport {createApp} from 'vue'\r\nimport Empty from './Empty.vue'\r\nimport {install} from '../index'\r\n\r\nexport default class CodeWindow {\r\n    funcObj: any\r\n    funcPropName: string\r\n    id: string\r\n    editor: monaco.editor.IStandaloneCodeEditor\r\n    designer = new Designer(null)\r\n    funcList = []\r\n    contentChangeEnable = false\r\n    methodListReload: () => void\r\n\r\n    constructor(id: string, methodListReload) {\r\n        this.id = id\r\n        this.methodListReload = methodListReload\r\n    }\r\n\r\n    showFunc(func) {\r\n        const parentObj = func?.parentObj\r\n        const propName = func?.propName\r\n        if (!parentObj) {\r\n            alert(`can't bind body ${propName}`)\r\n            //@ts-ignore\r\n            this.editor._domElement.hidden = true\r\n            this.funcObj = null\r\n            return\r\n        }\r\n\r\n        this.funcObj = parentObj\r\n        this.funcPropName = propName\r\n\r\n        const funcBody = parentObj[propName] || ''\r\n        this.contentChangeEnable = false\r\n        this.editor.setValue(funcBody)\r\n        this.contentChangeEnable = true\r\n        //@ts-ignore\r\n        this.editor._domElement.hidden = false\r\n    }\r\n\r\n    contentChanged() {\r\n        if (!this.contentChangeEnable) {\r\n            return\r\n        }\r\n\r\n        // 值发生改变\r\n        this.changed(this, this.funcObj, this.funcPropName)\r\n    }\r\n\r\n    changed = _.debounce((me: CodeWindow, funcObj, funcPropName) => {\r\n        const value = me.editor.getValue()\r\n        funcObj[funcPropName] = value\r\n\r\n        me.designer.saveFormContentToStorage().finally(() => {\r\n            if (window.opener['designerFuncChangeCallback']) {\r\n                window.opener['designerFuncChangeCallback'](this.id, funcObj, funcPropName, value)\r\n            }\r\n        })\r\n\r\n    }, 200)\r\n\r\n    /**\r\n     * 初始化编辑器\r\n     */\r\n    async initEditor(el) {\r\n        window['system'] = window.opener.system\r\n        console.log('CodeWindow complete', window['system'])\r\n\r\n        // 创建应用\r\n        const app = createApp(Empty);\r\n        // 全局安装UI组件\r\n        app.use({install})\r\n\r\n        const option = {\r\n            value: '',\r\n            language: 'javascript',\r\n            minimap: {\r\n                enabled: true\r\n            },\r\n            selectOnLineNumbers: true,\r\n            renderSideBySide: false,\r\n            automaticLayout: true,\r\n        }\r\n\r\n        TsLanguageSupport.instance.init(this.designer)\r\n        TsLanguageSupport.instance.isChanged = true\r\n        TsLanguageSupport.instance.isActived = true\r\n\r\n        this.editor = monaco.editor.create(el, option)\r\n        TsLanguageSupport.instance.initOneEditor()\r\n        this.reload().finally()\r\n\r\n        this.editor.onDidChangeModelContent(this.contentChanged.bind(this))\r\n\r\n        _.defer(() => {\r\n            //@ts-ignore\r\n            this.editor._domElement.hidden = true\r\n        })\r\n    }\r\n\r\n    async reload() {\r\n        await this.designer.loadSpace()\r\n\r\n        const idx = _.findIndex(this.designer.spaceIdList, r => r === this.id)\r\n        // if (this.designer.spaceCurrentIndex !== idx) {\r\n        await this.designer.switchSpace(idx)\r\n        TsLanguageSupport.instance.isChanged = true\r\n        TsLanguageSupport.instance.reload()\r\n        // }\r\n\r\n        this.funcList = this.designer.buildEventMap()\r\n        this.methodListReload()\r\n    }\r\n}","/**\n          * @ag-grid-enterprise/all-modules - Advanced Data Grid / Data Table supporting Javascript / Typescript / React / Angular / Vue * @version v30.0.3\n          * @link https://www.ag-grid.com/\n          * @license Commercial\n          */\nimport { PreConstruct, Bean, BeanStub, Autowired, RefSelector, PostConstruct, Component, ModuleNames, Optional, _, Events, ChangedPath, CsvExportModule, KeyCode, EventService, Column, ProvidedColumnGroup, AgMenuList, AgMenuItemComponent, AgCheckbox, CssClassApplier, DragSourceType, DragAndDropService, TouchListener, AutoScrollService, PreDestroy, VirtualList, NumberSequence, RowNode, ManagedFocusFeature, PositionableFeature, TabGuardComp, AgSelect, AgPromise, AgInputTextField, ModuleRegistry, ExcelFactoryMode, XmlFactory, BaseGridSerializingSession, RowType, ZipContainer, Downloader, BaseCreator, GridSerializer, CsvCreator, AgGroupComponent, AgAbstractField, AgRadioButton, AgToggleButton, AgAbstractLabel, AgSlider, DEFAULT_CHART_GROUPS, TabbedLayout, CHART_TOOLBAR_ALLOW_LIST, CHART_TOOL_PANEL_ALLOW_LIST, CHART_TOOL_PANEL_MENU_OPTIONS, AgPanel, CellRangeType, AgDialog, CellCtrl, SelectionHandleType, AgPickerField, Grid, ProvidedFilter, PopupComponent, RowNodeBlock, ServerSideTransactionResultStatus, RowNodeBlockLoader, GROUP_AUTO_COLUMN_ID, TextFilter, AllCommunityModules } from 'ag-grid-community';\nexport * from 'ag-grid-community';\n\nclass MD5 {\n    constructor() {\n        this.ieCompatibility = false;\n    }\n    init() {\n        this.ieCompatibility = (this.md5('hello') != '5d41402abc4b2a76b9719d911017c592');\n    }\n    md5cycle(x, k) {\n        let a = x[0], b = x[1], c = x[2], d = x[3];\n        a = this.ff(a, b, c, d, k[0], 7, -680876936);\n        d = this.ff(d, a, b, c, k[1], 12, -389564586);\n        c = this.ff(c, d, a, b, k[2], 17, 606105819);\n        b = this.ff(b, c, d, a, k[3], 22, -1044525330);\n        a = this.ff(a, b, c, d, k[4], 7, -176418897);\n        d = this.ff(d, a, b, c, k[5], 12, 1200080426);\n        c = this.ff(c, d, a, b, k[6], 17, -1473231341);\n        b = this.ff(b, c, d, a, k[7], 22, -45705983);\n        a = this.ff(a, b, c, d, k[8], 7, 1770035416);\n        d = this.ff(d, a, b, c, k[9], 12, -1958414417);\n        c = this.ff(c, d, a, b, k[10], 17, -42063);\n        b = this.ff(b, c, d, a, k[11], 22, -1990404162);\n        a = this.ff(a, b, c, d, k[12], 7, 1804603682);\n        d = this.ff(d, a, b, c, k[13], 12, -40341101);\n        c = this.ff(c, d, a, b, k[14], 17, -1502002290);\n        b = this.ff(b, c, d, a, k[15], 22, 1236535329);\n        a = this.gg(a, b, c, d, k[1], 5, -165796510);\n        d = this.gg(d, a, b, c, k[6], 9, -1069501632);\n        c = this.gg(c, d, a, b, k[11], 14, 643717713);\n        b = this.gg(b, c, d, a, k[0], 20, -373897302);\n        a = this.gg(a, b, c, d, k[5], 5, -701558691);\n        d = this.gg(d, a, b, c, k[10], 9, 38016083);\n        c = this.gg(c, d, a, b, k[15], 14, -660478335);\n        b = this.gg(b, c, d, a, k[4], 20, -405537848);\n        a = this.gg(a, b, c, d, k[9], 5, 568446438);\n        d = this.gg(d, a, b, c, k[14], 9, -1019803690);\n        c = this.gg(c, d, a, b, k[3], 14, -187363961);\n        b = this.gg(b, c, d, a, k[8], 20, 1163531501);\n        a = this.gg(a, b, c, d, k[13], 5, -1444681467);\n        d = this.gg(d, a, b, c, k[2], 9, -51403784);\n        c = this.gg(c, d, a, b, k[7], 14, 1735328473);\n        b = this.gg(b, c, d, a, k[12], 20, -1926607734);\n        a = this.hh(a, b, c, d, k[5], 4, -378558);\n        d = this.hh(d, a, b, c, k[8], 11, -2022574463);\n        c = this.hh(c, d, a, b, k[11], 16, 1839030562);\n        b = this.hh(b, c, d, a, k[14], 23, -35309556);\n        a = this.hh(a, b, c, d, k[1], 4, -1530992060);\n        d = this.hh(d, a, b, c, k[4], 11, 1272893353);\n        c = this.hh(c, d, a, b, k[7], 16, -155497632);\n        b = this.hh(b, c, d, a, k[10], 23, -1094730640);\n        a = this.hh(a, b, c, d, k[13], 4, 681279174);\n        d = this.hh(d, a, b, c, k[0], 11, -358537222);\n        c = this.hh(c, d, a, b, k[3], 16, -722521979);\n        b = this.hh(b, c, d, a, k[6], 23, 76029189);\n        a = this.hh(a, b, c, d, k[9], 4, -640364487);\n        d = this.hh(d, a, b, c, k[12], 11, -421815835);\n        c = this.hh(c, d, a, b, k[15], 16, 530742520);\n        b = this.hh(b, c, d, a, k[2], 23, -995338651);\n        a = this.ii(a, b, c, d, k[0], 6, -198630844);\n        d = this.ii(d, a, b, c, k[7], 10, 1126891415);\n        c = this.ii(c, d, a, b, k[14], 15, -1416354905);\n        b = this.ii(b, c, d, a, k[5], 21, -57434055);\n        a = this.ii(a, b, c, d, k[12], 6, 1700485571);\n        d = this.ii(d, a, b, c, k[3], 10, -1894986606);\n        c = this.ii(c, d, a, b, k[10], 15, -1051523);\n        b = this.ii(b, c, d, a, k[1], 21, -2054922799);\n        a = this.ii(a, b, c, d, k[8], 6, 1873313359);\n        d = this.ii(d, a, b, c, k[15], 10, -30611744);\n        c = this.ii(c, d, a, b, k[6], 15, -1560198380);\n        b = this.ii(b, c, d, a, k[13], 21, 1309151649);\n        a = this.ii(a, b, c, d, k[4], 6, -145523070);\n        d = this.ii(d, a, b, c, k[11], 10, -1120210379);\n        c = this.ii(c, d, a, b, k[2], 15, 718787259);\n        b = this.ii(b, c, d, a, k[9], 21, -343485551);\n        x[0] = this.add32(a, x[0]);\n        x[1] = this.add32(b, x[1]);\n        x[2] = this.add32(c, x[2]);\n        x[3] = this.add32(d, x[3]);\n    }\n    cmn(q, a, b, x, s, t) {\n        a = this.add32(this.add32(a, q), this.add32(x, t));\n        return this.add32((a << s) | (a >>> (32 - s)), b);\n    }\n    ff(a, b, c, d, x, s, t) {\n        return this.cmn((b & c) | ((~b) & d), a, b, x, s, t);\n    }\n    gg(a, b, c, d, x, s, t) {\n        return this.cmn((b & d) | (c & (~d)), a, b, x, s, t);\n    }\n    hh(a, b, c, d, x, s, t) {\n        return this.cmn(b ^ c ^ d, a, b, x, s, t);\n    }\n    ii(a, b, c, d, x, s, t) {\n        return this.cmn(c ^ (b | (~d)), a, b, x, s, t);\n    }\n    md51(s) {\n        const n = s.length;\n        const state = [1732584193, -271733879, -1732584194, 271733878];\n        let i;\n        for (i = 64; i <= s.length; i += 64) {\n            this.md5cycle(state, this.md5blk(s.substring(i - 64, i)));\n        }\n        s = s.substring(i - 64);\n        const tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n        for (i = 0; i < s.length; i++) {\n            tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n        }\n        tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n        if (i > 55) {\n            this.md5cycle(state, tail);\n            for (i = 0; i < 16; i++) {\n                tail[i] = 0;\n            }\n        }\n        tail[14] = n * 8;\n        this.md5cycle(state, tail);\n        return state;\n    }\n    /* there needs to be support for Unicode here, * unless we pretend that we can redefine the MD-5\n     * algorithm for multi-byte characters (perhaps by adding every four 16-bit characters and\n     * shortening the sum to 32 bits). Otherwise I suthis.ggest performing MD-5 as if every character\n     * was two bytes--e.g., 0040 0025 = @%--but then how will an ordinary MD-5 sum be matched?\n     * There is no way to standardize text to something like UTF-8 before transformation; speed cost is\n     * utterly prohibitive. The JavaScript standard itself needs to look at this: it should start\n     * providing access to strings as preformed UTF-8 8-bit unsigned value arrays.\n     */\n    md5blk(s) {\n        const md5blks = [];\n        /* Andy King said do it this way. */\n        for (let i = 0; i < 64; i += 4) {\n            md5blks[i >> 2] = s.charCodeAt(i)\n                + (s.charCodeAt(i + 1) << 8)\n                + (s.charCodeAt(i + 2) << 16)\n                + (s.charCodeAt(i + 3) << 24);\n        }\n        return md5blks;\n    }\n    rhex(n) {\n        const hex_chr = '0123456789abcdef'.split('');\n        let s = '', j = 0;\n        for (; j < 4; j++) {\n            s += hex_chr[(n >> (j * 8 + 4)) & 0x0F]\n                + hex_chr[(n >> (j * 8)) & 0x0F];\n        }\n        return s;\n    }\n    hex(x) {\n        for (let i = 0; i < x.length; i++) {\n            x[i] = this.rhex(x[i]);\n        }\n        return x.join('');\n    }\n    md5(s) {\n        return this.hex(this.md51(s));\n    }\n    add32(a, b) {\n        return this.ieCompatibility ? this.add32Compat(a, b) : this.add32Std(a, b);\n    }\n    /* this function is much faster, so if possible we use it. Some IEs are the only ones I know of that\n     need the idiotic second function, generated by an if clause.  */\n    add32Std(a, b) {\n        return (a + b) & 0xFFFFFFFF;\n    }\n    add32Compat(x, y) {\n        const lsw = (x & 0xFFFF) + (y & 0xFFFF), msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n        return (msw << 16) | (lsw & 0xFFFF);\n    }\n}\n\n// move to general utils\nfunction missingOrEmpty(value) {\n    return value == null || value.length === 0;\n}\nfunction exists(value, allowEmptyString = false) {\n    return value != null && (value !== '' || allowEmptyString);\n}\nclass LicenseManager {\n    constructor(document) {\n        this.watermarkMessage = undefined;\n        this.document = document;\n        this.md5 = new MD5();\n        this.md5.init();\n    }\n    validateLicense() {\n        if (missingOrEmpty(LicenseManager.licenseKey)) {\n            if (!this.isWebsiteUrl() || this.isForceWatermark()) {\n                this.outputMissingLicenseKey();\n            }\n        }\n        else if (LicenseManager.licenseKey.length > 32) {\n            if (LicenseManager.licenseKey.indexOf(\"For_Trialing_ag-Grid_Only\") !== -1) {\n                this.outputInvalidLicenseKey();\n            }\n            else {\n                const { md5, license, version, isTrial } = LicenseManager.extractLicenseComponents(LicenseManager.licenseKey);\n                if (md5 === this.md5.md5(license)) {\n                    if (exists(version) && version) {\n                        this.validateLicenseKeyForVersion(version, !!isTrial, license);\n                    }\n                    else {\n                        this.validateLegacyKey(license);\n                    }\n                }\n                else {\n                    this.outputInvalidLicenseKey();\n                }\n            }\n        }\n        else {\n            this.outputInvalidLicenseKey();\n        }\n    }\n    static extractExpiry(license) {\n        const restrictionHashed = license.substring(license.lastIndexOf('_') + 1, license.length);\n        return new Date(parseInt(LicenseManager.decode(restrictionHashed), 10));\n    }\n    static extractLicenseComponents(licenseKey) {\n        // when users copy the license key from a PDF extra zero width characters are sometimes copied too\n        // carriage returns and line feeds are problematic too\n        // all of which causes license key validation to fail - strip these out\n        let cleanedLicenseKey = licenseKey.replace(/[\\u200B-\\u200D\\uFEFF]/g, '');\n        cleanedLicenseKey = cleanedLicenseKey.replace(/\\r?\\n|\\r/g, '');\n        const hashStart = cleanedLicenseKey.length - 32;\n        const md5 = cleanedLicenseKey.substring(hashStart);\n        const license = cleanedLicenseKey.substring(0, hashStart);\n        const [version, isTrial] = LicenseManager.extractBracketedInformation(cleanedLicenseKey);\n        return { md5, license, version, isTrial };\n    }\n    getLicenseDetails(licenseKey) {\n        const { md5, license, version, isTrial } = LicenseManager.extractLicenseComponents(licenseKey);\n        let valid = (md5 === this.md5.md5(license)) && licenseKey.indexOf(\"For_Trialing_ag-Grid_Only\") === -1;\n        let trialExpired = null;\n        let expiry = null;\n        if (valid) {\n            expiry = LicenseManager.extractExpiry(license);\n            valid = !isNaN(expiry.getTime());\n            if (isTrial) {\n                const now = new Date();\n                trialExpired = (expiry < now);\n            }\n        }\n        return {\n            licenseKey,\n            valid,\n            expiry: valid ? LicenseManager.formatDate(expiry) : null,\n            version: version ? version : 'legacy',\n            isTrial,\n            trialExpired\n        };\n    }\n    isDisplayWatermark() {\n        return this.isForceWatermark() || (!this.isLocalhost() && !this.isWebsiteUrl() && !missingOrEmpty(this.watermarkMessage));\n    }\n    getWatermarkMessage() {\n        return this.watermarkMessage || '';\n    }\n    getHostname() {\n        const win = (this.document.defaultView || window);\n        const loc = win.location;\n        const { hostname = '' } = loc;\n        return hostname;\n    }\n    isForceWatermark() {\n        const win = (this.document.defaultView || window);\n        const loc = win.location;\n        const { pathname } = loc;\n        return pathname ? pathname.indexOf('forceWatermark') !== -1 : false;\n    }\n    isWebsiteUrl() {\n        const hostname = this.getHostname();\n        return hostname.match(/^((?:\\w+\\.)?ag-grid\\.com)$/) !== null;\n    }\n    isLocalhost() {\n        const hostname = this.getHostname();\n        return hostname.match(/^(?:127\\.0\\.0\\.1|localhost)$/) !== null;\n    }\n    static formatDate(date) {\n        const monthNames = [\n            'January', 'February', 'March',\n            'April', 'May', 'June', 'July',\n            'August', 'September', 'October',\n            'November', 'December'\n        ];\n        const day = date.getDate();\n        const monthIndex = date.getMonth();\n        const year = date.getFullYear();\n        return day + ' ' + monthNames[monthIndex] + ' ' + year;\n    }\n    static getGridReleaseDate() {\n        return new Date(parseInt(LicenseManager.decode(LicenseManager.RELEASE_INFORMATION), 10));\n    }\n    static decode(input) {\n        const keystr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n        let t = '';\n        let n, r, i;\n        let s, o, u, a;\n        let f = 0;\n        const e = input.replace(/[^A-Za-z0-9+/=]/g, '');\n        while (f < e.length) {\n            s = keystr.indexOf(e.charAt(f++));\n            o = keystr.indexOf(e.charAt(f++));\n            u = keystr.indexOf(e.charAt(f++));\n            a = keystr.indexOf(e.charAt(f++));\n            n = s << 2 | o >> 4;\n            r = (o & 15) << 4 | u >> 2;\n            i = (u & 3) << 6 | a;\n            t = t + String.fromCharCode(n);\n            if (u != 64) {\n                t = t + String.fromCharCode(r);\n            }\n            if (a != 64) {\n                t = t + String.fromCharCode(i);\n            }\n        }\n        t = LicenseManager.utf8_decode(t);\n        return t;\n    }\n    static utf8_decode(input) {\n        input = input.replace(/rn/g, 'n');\n        let t = '';\n        for (let n = 0; n < input.length; n++) {\n            const r = input.charCodeAt(n);\n            if (r < 128) {\n                t += String.fromCharCode(r);\n            }\n            else if (r > 127 && r < 2048) {\n                t += String.fromCharCode(r >> 6 | 192);\n                t += String.fromCharCode(r & 63 | 128);\n            }\n            else {\n                t += String.fromCharCode(r >> 12 | 224);\n                t += String.fromCharCode(r >> 6 & 63 | 128);\n                t += String.fromCharCode(r & 63 | 128);\n            }\n        }\n        return t;\n    }\n    static setLicenseKey(licenseKey) {\n        this.licenseKey = licenseKey;\n    }\n    static extractBracketedInformation(licenseKey) {\n        const matches = licenseKey.split('[')\n            .filter(function (v) {\n            return v.indexOf(']') > -1;\n        })\n            .map(function (value) {\n            return value.split(']')[0];\n        });\n        if (!matches || matches.length === 0) {\n            return [null, null];\n        }\n        const isTrial = matches.filter(match => match === 'TRIAL').length === 1;\n        const version = matches.filter(match => match.indexOf(\"v\") === 0).map(match => match.replace(/^v/, \"\"))[0];\n        return [version, isTrial];\n    }\n    validateLicenseKeyForVersion(version, isTrial, license) {\n        if (version !== '2') {\n            return;\n        }\n        if (isTrial) {\n            this.validateForTrial(license);\n        }\n        else {\n            this.validateLegacyKey(license);\n        }\n    }\n    validateLegacyKey(license) {\n        const gridReleaseDate = LicenseManager.getGridReleaseDate();\n        const expiry = LicenseManager.extractExpiry(license);\n        let valid = false;\n        let current = false;\n        if (!isNaN(expiry.getTime())) {\n            valid = true;\n            current = (gridReleaseDate < expiry);\n        }\n        if (!valid) {\n            this.outputInvalidLicenseKey();\n        }\n        else if (!current) {\n            const formattedExpiryDate = LicenseManager.formatDate(expiry);\n            const formattedReleaseDate = LicenseManager.formatDate(gridReleaseDate);\n            this.outputIncompatibleVersion(formattedExpiryDate, formattedReleaseDate);\n        }\n    }\n    validateForTrial(license) {\n        const expiry = LicenseManager.extractExpiry(license);\n        const now = new Date();\n        let valid = false;\n        let current = false;\n        if (!isNaN(expiry.getTime())) {\n            valid = true;\n            current = (expiry > now);\n        }\n        if (!valid) {\n            this.outputInvalidLicenseKey();\n        }\n        else if (!current) {\n            const formattedExpiryDate = LicenseManager.formatDate(expiry);\n            this.outputExpiredTrialKey(formattedExpiryDate);\n        }\n    }\n    outputInvalidLicenseKey() {\n        console.error('*****************************************************************************************************************');\n        console.error('***************************************** AG Grid Enterprise License ********************************************');\n        console.error('********************************************* Invalid License ***************************************************');\n        console.error('* Your license for AG Grid Enterprise is not valid - please contact info@ag-grid.com to obtain a valid license. *');\n        console.error('*****************************************************************************************************************');\n        console.error('*****************************************************************************************************************');\n        this.watermarkMessage = \"Invalid License\";\n    }\n    outputExpiredTrialKey(formattedExpiryDate) {\n        console.error('****************************************************************************************************************');\n        console.error('***************************************** AG Grid Enterprise License *******************************************');\n        console.error('*****************************************   Trial Period Expired.    *******************************************');\n        console.error(`* Your license for AG Grid Enterprise expired on ${formattedExpiryDate}.                                                *`);\n        console.error('* Please email info@ag-grid.com to purchase a license.                                                         *');\n        console.error('****************************************************************************************************************');\n        console.error('****************************************************************************************************************');\n        this.watermarkMessage = \"Trial Period Expired\";\n    }\n    outputMissingLicenseKey() {\n        console.error('****************************************************************************************************************');\n        console.error('***************************************** AG Grid Enterprise License *******************************************');\n        console.error('****************************************** License Key Not Found ***********************************************');\n        console.error('* All AG Grid Enterprise features are unlocked.                                                                *');\n        console.error('* This is an evaluation only version, it is not licensed for development projects intended for production.     *');\n        console.error('* If you want to hide the watermark, please email info@ag-grid.com for a trial license.                        *');\n        console.error('****************************************************************************************************************');\n        console.error('****************************************************************************************************************');\n        this.watermarkMessage = \"For Trial Use Only\";\n    }\n    outputIncompatibleVersion(formattedExpiryDate, formattedReleaseDate) {\n        console.error('****************************************************************************************************************************');\n        console.error('****************************************************************************************************************************');\n        console.error('*                                             AG Grid Enterprise License                                                   *');\n        console.error('*                           License not compatible with installed version of AG Grid Enterprise.                           *');\n        console.error('*                                                                                                                          *');\n        console.error(`* Your AG Grid License entitles you to all versions of AG Grid that we release within the time covered by your license     *`);\n        console.error(`* - typically we provide one year licenses which entitles you to all releases / updates of AG Grid within that year.       *`);\n        console.error(`* Your license has an end (expiry) date which stops the license key working with versions of AG Grid released after the    *`);\n        console.error(`* license end date. The license key that you have expires on ${formattedExpiryDate}, however the version of AG Grid you    *`);\n        console.error(`* are trying to use was released on ${formattedReleaseDate}.                                                               *`);\n        console.error('*                                                                                                                          *');\n        console.error('* Please contact info@ag-grid.com to renew your subscription to new versions and get a new license key to work with this   *');\n        console.error('* version of AG Grid.                                                                                                      *');\n        console.error('****************************************************************************************************************************');\n        console.error('****************************************************************************************************************************');\n        this.watermarkMessage = \"License Expired\";\n    }\n}\nLicenseManager.RELEASE_INFORMATION = 'MTY4ODEzNTg4OTg0OA==';\n\nvar __decorate$2y = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet GridLicenseManager = class GridLicenseManager extends BeanStub {\n    validateLicense() {\n        this.licenseManager = new LicenseManager(this.gridOptionsService.getDocument());\n        this.licenseManager.validateLicense();\n    }\n    static getLicenseDetails(licenseKey) {\n        return new LicenseManager(null).getLicenseDetails(licenseKey);\n    }\n    isDisplayWatermark() {\n        return this.licenseManager.isDisplayWatermark();\n    }\n    getWatermarkMessage() {\n        return this.licenseManager.getWatermarkMessage();\n    }\n    static setLicenseKey(licenseKey) {\n        LicenseManager.setLicenseKey(licenseKey);\n    }\n};\n__decorate$2y([\n    PreConstruct\n], GridLicenseManager.prototype, \"validateLicense\", null);\nGridLicenseManager = __decorate$2y([\n    Bean('licenseManager')\n], GridLicenseManager);\n\nvar __decorate$2x = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass WatermarkComp extends Component {\n    constructor() {\n        super(/* html*/ `<div class=\"ag-watermark\">\n                <div ref=\"eLicenseTextRef\" class=\"ag-watermark-text\"></div>\n            </div>`);\n    }\n    postConstruct() {\n        const show = this.shouldDisplayWatermark();\n        this.setDisplayed(show);\n        if (show) {\n            this.eLicenseTextRef.innerText = this.licenseManager.getWatermarkMessage();\n            window.setTimeout(() => this.addCssClass('ag-opacity-zero'), 0);\n            window.setTimeout(() => this.setDisplayed(false), 5000);\n        }\n    }\n    shouldDisplayWatermark() {\n        return this.licenseManager.isDisplayWatermark();\n    }\n}\n__decorate$2x([\n    Autowired('licenseManager')\n], WatermarkComp.prototype, \"licenseManager\", void 0);\n__decorate$2x([\n    RefSelector('eLicenseTextRef')\n], WatermarkComp.prototype, \"eLicenseTextRef\", void 0);\n__decorate$2x([\n    PostConstruct\n], WatermarkComp.prototype, \"postConstruct\", null);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$i = '30.0.3';\n\nconst EnterpriseCoreModule = {\n    version: VERSION$i,\n    moduleName: ModuleNames.EnterpriseCoreModule,\n    beans: [GridLicenseManager],\n    agStackComponents: [\n        { componentName: 'AgWatermark', componentClass: WatermarkComp }\n    ]\n};\n\nvar __decorate$2w = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar ClipboardService_1;\n// Matches value in changeDetectionService\nconst SOURCE_PASTE = 'paste';\nconst EXPORT_TYPE_DRAG_COPY = 'dragCopy';\nconst EXPORT_TYPE_CLIPBOARD = 'clipboard';\nvar CellClearType;\n(function (CellClearType) {\n    CellClearType[CellClearType[\"CellRange\"] = 0] = \"CellRange\";\n    CellClearType[CellClearType[\"SelectedRows\"] = 1] = \"SelectedRows\";\n    CellClearType[CellClearType[\"FocusedCell\"] = 2] = \"FocusedCell\";\n})(CellClearType || (CellClearType = {}));\nlet ClipboardService = ClipboardService_1 = class ClipboardService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.lastPasteOperationTime = 0;\n        this.navigatorApiFailed = false;\n    }\n    init() {\n        this.logger = this.loggerFactory.create('ClipboardService');\n        if (this.rowModel.getType() === 'clientSide') {\n            this.clientSideRowModel = this.rowModel;\n        }\n        this.ctrlsService.whenReady(p => {\n            this.gridCtrl = p.gridCtrl;\n        });\n    }\n    pasteFromClipboard() {\n        this.logger.log('pasteFromClipboard');\n        // Method 1 - native clipboard API, available in modern chrome browsers\n        const allowNavigator = !this.gridOptionsService.is('suppressClipboardApi');\n        // Some browsers (Firefox) do not allow Web Applications to read from\n        // the clipboard so verify if not only the ClipboardAPI is available,\n        // but also if the `readText` method is public.\n        if (allowNavigator && !this.navigatorApiFailed && navigator.clipboard && navigator.clipboard.readText) {\n            navigator.clipboard.readText()\n                .then(this.processClipboardData.bind(this))\n                .catch((e) => {\n                _.doOnce(() => {\n                    console.warn(e);\n                    console.warn('AG Grid: Unable to use the Clipboard API (navigator.clipboard.readText()). ' +\n                        'The reason why it could not be used has been logged in the previous line. ' +\n                        'For this reason the grid has defaulted to using a workaround which doesn\\'t perform as well. ' +\n                        'Either fix why Clipboard API is blocked, OR stop this message from appearing by setting grid ' +\n                        'property suppressClipboardApi=true (which will default the grid to using the workaround rather than the API');\n                }, 'clipboardApiError');\n                this.navigatorApiFailed = true;\n                this.pasteFromClipboardLegacy();\n            });\n        }\n        else {\n            this.pasteFromClipboardLegacy();\n        }\n    }\n    pasteFromClipboardLegacy() {\n        // Method 2 - if modern API fails, the old school hack\n        let defaultPrevented = false;\n        const handlePasteEvent = (e) => {\n            const currentPastOperationTime = (new Date()).getTime();\n            if (currentPastOperationTime - this.lastPasteOperationTime < 50) {\n                defaultPrevented = true;\n                e.preventDefault();\n            }\n            this.lastPasteOperationTime = currentPastOperationTime;\n        };\n        this.executeOnTempElement((textArea) => {\n            textArea.addEventListener('paste', handlePasteEvent);\n            textArea.focus({ preventScroll: true });\n        }, (element) => {\n            const data = element.value;\n            if (!defaultPrevented) {\n                this.processClipboardData(data);\n            }\n            else {\n                this.refocusLastFocusedCell();\n            }\n            element.removeEventListener('paste', handlePasteEvent);\n        });\n    }\n    refocusLastFocusedCell() {\n        const focusedCell = this.focusService.getFocusedCell();\n        if (focusedCell) {\n            this.focusService.setFocusedCell({\n                rowIndex: focusedCell.rowIndex,\n                column: focusedCell.column,\n                rowPinned: focusedCell.rowPinned,\n                forceBrowserFocus: true\n            });\n        }\n    }\n    getClipboardDelimiter() {\n        const delimiter = this.gridOptionsService.get('clipboardDelimiter');\n        return _.exists(delimiter) ? delimiter : '\\t';\n    }\n    processClipboardData(data) {\n        if (data == null) {\n            return;\n        }\n        let parsedData = ClipboardService_1.stringToArray(data, this.getClipboardDelimiter());\n        const userFunc = this.gridOptionsService.getCallback('processDataFromClipboard');\n        if (userFunc) {\n            parsedData = userFunc({ data: parsedData });\n        }\n        if (parsedData == null) {\n            return;\n        }\n        if (this.gridOptionsService.is('suppressLastEmptyLineOnPaste')) {\n            this.removeLastLineIfBlank(parsedData);\n        }\n        const pasteOperation = (cellsToFlash, updatedRowNodes, focusedCell, changedPath) => {\n            const rangeActive = this.rangeService && this.rangeService.isMoreThanOneCell();\n            const pasteIntoRange = rangeActive && !this.hasOnlyOneValueToPaste(parsedData);\n            if (pasteIntoRange) {\n                this.pasteIntoActiveRange(parsedData, cellsToFlash, updatedRowNodes, changedPath);\n            }\n            else {\n                this.pasteStartingFromFocusedCell(parsedData, cellsToFlash, updatedRowNodes, focusedCell, changedPath);\n            }\n        };\n        this.doPasteOperation(pasteOperation);\n    }\n    // This will parse a delimited string into an array of arrays.\n    static stringToArray(strData, delimiter = ',') {\n        const data = [];\n        const isNewline = (char) => char === '\\r' || char === '\\n';\n        let insideQuotedField = false;\n        if (strData === '') {\n            return [['']];\n        }\n        // iterate over each character, keep track of current row and column (of the returned array)\n        for (let row = 0, column = 0, position = 0; position < strData.length; position++) {\n            const previousChar = strData[position - 1];\n            const currentChar = strData[position];\n            const nextChar = strData[position + 1];\n            const ensureDataExists = () => {\n                if (!data[row]) {\n                    // create row if it doesn't exist\n                    data[row] = [];\n                }\n                if (!data[row][column]) {\n                    // create column if it doesn't exist\n                    data[row][column] = '';\n                }\n            };\n            ensureDataExists();\n            if (currentChar === '\"') {\n                if (insideQuotedField) {\n                    if (nextChar === '\"') {\n                        // unescape double quote\n                        data[row][column] += '\"';\n                        position++;\n                    }\n                    else {\n                        // exit quoted field\n                        insideQuotedField = false;\n                    }\n                    // continue;\n                }\n                else if (previousChar === undefined || previousChar === delimiter || isNewline(previousChar)) {\n                    // enter quoted field\n                    insideQuotedField = true;\n                    // continue;\n                }\n            }\n            if (!insideQuotedField && currentChar !== '\"') {\n                if (currentChar === delimiter) {\n                    // move to next column\n                    column++;\n                    ensureDataExists();\n                    continue;\n                }\n                else if (isNewline(currentChar)) {\n                    // move to next row\n                    column = 0;\n                    row++;\n                    ensureDataExists();\n                    if (currentChar === '\\r' && nextChar === '\\n') {\n                        // skip over second newline character if it exists\n                        position++;\n                    }\n                    continue;\n                }\n            }\n            // add current character to current column\n            data[row][column] += currentChar;\n        }\n        return data;\n    }\n    // common code to paste operations, e.g. paste to cell, paste to range, and copy range down\n    doPasteOperation(pasteOperationFunc) {\n        const api = this.gridOptionsService.api;\n        const columnApi = this.gridOptionsService.columnApi;\n        const source = 'clipboard';\n        this.eventService.dispatchEvent({\n            type: Events.EVENT_PASTE_START,\n            api,\n            columnApi,\n            source\n        });\n        let changedPath;\n        if (this.clientSideRowModel) {\n            const onlyChangedColumns = this.gridOptionsService.is('aggregateOnlyChangedColumns');\n            changedPath = new ChangedPath(onlyChangedColumns, this.clientSideRowModel.getRootNode());\n        }\n        const cellsToFlash = {};\n        const updatedRowNodes = [];\n        const focusedCell = this.focusService.getFocusedCell();\n        pasteOperationFunc(cellsToFlash, updatedRowNodes, focusedCell, changedPath);\n        if (changedPath) {\n            this.clientSideRowModel.doAggregate(changedPath);\n        }\n        this.rowRenderer.refreshCells();\n        this.dispatchFlashCells(cellsToFlash);\n        this.fireRowChanged(updatedRowNodes);\n        // if using the clipboard hack with a temp element, then the focus has been lost,\n        // so need to put it back. otherwise paste operation loosed focus on cell and keyboard\n        // navigation stops.\n        this.refocusLastFocusedCell();\n        const event = {\n            type: Events.EVENT_PASTE_END,\n            source\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    pasteIntoActiveRange(clipboardData, cellsToFlash, updatedRowNodes, changedPath) {\n        // true if clipboard data can be evenly pasted into range, otherwise false\n        const abortRepeatingPasteIntoRows = this.getRangeSize() % clipboardData.length != 0;\n        let indexOffset = 0;\n        let dataRowIndex = 0;\n        const rowCallback = (currentRow, rowNode, columns, index) => {\n            const atEndOfClipboardData = index - indexOffset >= clipboardData.length;\n            if (atEndOfClipboardData) {\n                if (abortRepeatingPasteIntoRows) {\n                    return;\n                }\n                // increment offset and reset data index to repeat paste of data\n                indexOffset += dataRowIndex;\n                dataRowIndex = 0;\n            }\n            const currentRowData = clipboardData[index - indexOffset];\n            // otherwise we are not the first row, so copy\n            updatedRowNodes.push(rowNode);\n            const processCellFromClipboardFunc = this.gridOptionsService.getCallback('processCellFromClipboard');\n            columns.forEach((column, idx) => {\n                if (!column.isCellEditable(rowNode) || column.isSuppressPaste(rowNode)) {\n                    return;\n                }\n                // repeat data for columns we don't have data for - happens when to range is bigger than copied data range\n                if (idx >= currentRowData.length) {\n                    idx = idx % currentRowData.length;\n                }\n                const newValue = this.processCell(rowNode, column, currentRowData[idx], EXPORT_TYPE_DRAG_COPY, processCellFromClipboardFunc, true);\n                rowNode.setDataValue(column, newValue, SOURCE_PASTE);\n                if (changedPath) {\n                    changedPath.addParentNode(rowNode.parent, [column]);\n                }\n                const { rowIndex, rowPinned } = currentRow;\n                const cellId = this.cellPositionUtils.createIdFromValues({ rowIndex, column, rowPinned });\n                cellsToFlash[cellId] = true;\n            });\n            dataRowIndex++;\n        };\n        this.iterateActiveRanges(false, rowCallback);\n    }\n    pasteStartingFromFocusedCell(parsedData, cellsToFlash, updatedRowNodes, focusedCell, changedPath) {\n        if (!focusedCell) {\n            return;\n        }\n        const currentRow = { rowIndex: focusedCell.rowIndex, rowPinned: focusedCell.rowPinned };\n        const columnsToPasteInto = this.columnModel.getDisplayedColumnsStartingAt(focusedCell.column);\n        if (this.isPasteSingleValueIntoRange(parsedData)) {\n            this.pasteSingleValueIntoRange(parsedData, updatedRowNodes, cellsToFlash, changedPath);\n        }\n        else {\n            this.pasteMultipleValues(parsedData, currentRow, updatedRowNodes, columnsToPasteInto, cellsToFlash, EXPORT_TYPE_CLIPBOARD, changedPath);\n        }\n    }\n    // if range is active, and only one cell, then we paste this cell into all cells in the active range.\n    isPasteSingleValueIntoRange(parsedData) {\n        return this.hasOnlyOneValueToPaste(parsedData)\n            && this.rangeService != null\n            && !this.rangeService.isEmpty();\n    }\n    pasteSingleValueIntoRange(parsedData, updatedRowNodes, cellsToFlash, changedPath) {\n        const value = parsedData[0][0];\n        const rowCallback = (currentRow, rowNode, columns) => {\n            updatedRowNodes.push(rowNode);\n            columns.forEach(column => this.updateCellValue(rowNode, column, value, cellsToFlash, EXPORT_TYPE_CLIPBOARD, changedPath));\n        };\n        this.iterateActiveRanges(false, rowCallback);\n    }\n    hasOnlyOneValueToPaste(parsedData) {\n        return parsedData.length === 1 && parsedData[0].length === 1;\n    }\n    copyRangeDown() {\n        if (!this.rangeService || this.rangeService.isEmpty()) {\n            return;\n        }\n        const firstRowValues = [];\n        const pasteOperation = (cellsToFlash, updatedRowNodes, focusedCell, changedPath) => {\n            const processCellForClipboardFunc = this.gridOptionsService.getCallback('processCellForClipboard');\n            const processCellFromClipboardFunc = this.gridOptionsService.getCallback('processCellFromClipboard');\n            const rowCallback = (currentRow, rowNode, columns) => {\n                // take reference of first row, this is the one we will be using to copy from\n                if (!firstRowValues.length) {\n                    // two reasons for looping through columns\n                    columns.forEach(column => {\n                        // get the initial values to copy down\n                        const value = this.processCell(rowNode, column, this.valueService.getValue(column, rowNode), EXPORT_TYPE_DRAG_COPY, processCellForClipboardFunc, false, true);\n                        firstRowValues.push(value);\n                    });\n                }\n                else {\n                    // otherwise we are not the first row, so copy\n                    updatedRowNodes.push(rowNode);\n                    columns.forEach((column, index) => {\n                        if (!column.isCellEditable(rowNode) || column.isSuppressPaste(rowNode)) {\n                            return;\n                        }\n                        const firstRowValue = this.processCell(rowNode, column, firstRowValues[index], EXPORT_TYPE_DRAG_COPY, processCellFromClipboardFunc, true);\n                        rowNode.setDataValue(column, firstRowValue, SOURCE_PASTE);\n                        if (changedPath) {\n                            changedPath.addParentNode(rowNode.parent, [column]);\n                        }\n                        const { rowIndex, rowPinned } = currentRow;\n                        const cellId = this.cellPositionUtils.createIdFromValues({ rowIndex, column, rowPinned });\n                        cellsToFlash[cellId] = true;\n                    });\n                }\n            };\n            this.iterateActiveRanges(true, rowCallback);\n        };\n        this.doPasteOperation(pasteOperation);\n    }\n    removeLastLineIfBlank(parsedData) {\n        // remove last row if empty, excel puts empty last row in\n        const lastLine = _.last(parsedData);\n        const lastLineIsBlank = lastLine && lastLine.length === 1 && lastLine[0] === '';\n        if (lastLineIsBlank) {\n            // do not remove the last empty line when that is the only line pasted\n            if (parsedData.length === 1) {\n                return;\n            }\n            _.removeFromArray(parsedData, lastLine);\n        }\n    }\n    fireRowChanged(rowNodes) {\n        if (this.gridOptionsService.get('editType') !== 'fullRow') {\n            return;\n        }\n        rowNodes.forEach(rowNode => {\n            const event = {\n                type: Events.EVENT_ROW_VALUE_CHANGED,\n                node: rowNode,\n                data: rowNode.data,\n                rowIndex: rowNode.rowIndex,\n                rowPinned: rowNode.rowPinned\n            };\n            this.eventService.dispatchEvent(event);\n        });\n    }\n    pasteMultipleValues(clipboardGridData, currentRow, updatedRowNodes, columnsToPasteInto, cellsToFlash, type, changedPath) {\n        let rowPointer = currentRow;\n        // if doing CSRM and NOT tree data, then it means groups are aggregates, which are read only,\n        // so we should skip them when doing paste operations.\n        const skipGroupRows = this.clientSideRowModel != null && !this.gridOptionsService.is('enableGroupEdit') && !this.gridOptionsService.isTreeData();\n        const getNextGoodRowNode = () => {\n            while (true) {\n                if (!rowPointer) {\n                    return null;\n                }\n                const res = this.rowPositionUtils.getRowNode(rowPointer);\n                // move to next row down for next set of values\n                rowPointer = this.cellNavigationService.getRowBelow({ rowPinned: rowPointer.rowPinned, rowIndex: rowPointer.rowIndex });\n                // if no more rows, return null\n                if (res == null) {\n                    return null;\n                }\n                // skip details rows and footer rows, never paste into them as they don't hold data\n                const skipRow = res.detail || res.footer || (skipGroupRows && res.group);\n                // skipping row means we go into the next iteration of the while loop\n                if (!skipRow) {\n                    return res;\n                }\n            }\n        };\n        clipboardGridData.forEach(clipboardRowData => {\n            const rowNode = getNextGoodRowNode();\n            // if we have come to end of rows in grid, then skip\n            if (!rowNode) {\n                return;\n            }\n            clipboardRowData.forEach((value, index) => this.updateCellValue(rowNode, columnsToPasteInto[index], value, cellsToFlash, type, changedPath));\n            updatedRowNodes.push(rowNode);\n        });\n    }\n    updateCellValue(rowNode, column, value, cellsToFlash, type, changedPath) {\n        if (!rowNode ||\n            !column ||\n            !column.isCellEditable(rowNode) ||\n            column.isSuppressPaste(rowNode)) {\n            return;\n        }\n        // if the cell is a group and the col is an aggregation, skip the cell.\n        if (rowNode.group && column.isValueActive()) {\n            return;\n        }\n        const processedValue = this.processCell(rowNode, column, value, type, this.gridOptionsService.getCallback('processCellFromClipboard'), true);\n        rowNode.setDataValue(column, processedValue, SOURCE_PASTE);\n        const { rowIndex, rowPinned } = rowNode;\n        const cellId = this.cellPositionUtils.createIdFromValues({ rowIndex: rowIndex, column, rowPinned });\n        cellsToFlash[cellId] = true;\n        if (changedPath) {\n            changedPath.addParentNode(rowNode.parent, [column]);\n        }\n    }\n    copyToClipboard(params = {}) {\n        this.copyOrCutToClipboard(params);\n    }\n    cutToClipboard(params = {}, source = 'api') {\n        if (this.gridOptionsService.is('suppressCutToClipboard')) {\n            return;\n        }\n        const startEvent = {\n            type: Events.EVENT_CUT_START,\n            source\n        };\n        this.eventService.dispatchEvent(startEvent);\n        this.copyOrCutToClipboard(params, true);\n        const endEvent = {\n            type: Events.EVENT_CUT_END,\n            source\n        };\n        this.eventService.dispatchEvent(endEvent);\n    }\n    copyOrCutToClipboard(params, cut) {\n        let { includeHeaders, includeGroupHeaders } = params;\n        this.logger.log(`copyToClipboard: includeHeaders = ${includeHeaders}`);\n        // don't override 'includeHeaders' if it has been explicitly set to 'false'\n        if (includeHeaders == null) {\n            includeHeaders = this.gridOptionsService.is('copyHeadersToClipboard');\n        }\n        if (includeGroupHeaders == null) {\n            includeGroupHeaders = this.gridOptionsService.is('copyGroupHeadersToClipboard');\n        }\n        const copyParams = { includeHeaders, includeGroupHeaders };\n        const shouldCopyRows = !this.gridOptionsService.is('suppressCopyRowsToClipboard');\n        let cellClearType = null;\n        // Copy priority is Range > Row > Focus\n        if (this.rangeService && !this.rangeService.isEmpty() && !this.shouldSkipSingleCellRange()) {\n            this.copySelectedRangeToClipboard(copyParams);\n            cellClearType = CellClearType.CellRange;\n        }\n        else if (shouldCopyRows && !this.selectionService.isEmpty()) {\n            this.copySelectedRowsToClipboard(copyParams);\n            cellClearType = CellClearType.SelectedRows;\n        }\n        else if (this.focusService.isAnyCellFocused()) {\n            this.copyFocusedCellToClipboard(copyParams);\n            cellClearType = CellClearType.FocusedCell;\n        }\n        if (cut && cellClearType !== null) {\n            this.clearCellsAfterCopy(cellClearType);\n        }\n    }\n    clearCellsAfterCopy(type) {\n        this.eventService.dispatchEvent({ type: Events.EVENT_KEY_SHORTCUT_CHANGED_CELL_START });\n        if (type === CellClearType.CellRange) {\n            this.rangeService.clearCellRangeCellValues({ cellEventSource: 'clipboardService' });\n        }\n        else if (type === CellClearType.SelectedRows) {\n            this.clearSelectedRows();\n        }\n        else {\n            const focusedCell = this.focusService.getFocusedCell();\n            if (focusedCell == null) {\n                return;\n            }\n            const rowNode = this.rowPositionUtils.getRowNode(focusedCell);\n            if (rowNode) {\n                this.clearCellValue(rowNode, focusedCell.column);\n            }\n        }\n        this.eventService.dispatchEvent({ type: Events.EVENT_KEY_SHORTCUT_CHANGED_CELL_END });\n    }\n    clearSelectedRows() {\n        const selected = this.selectionService.getSelectedNodes();\n        const columns = this.columnModel.getAllDisplayedColumns();\n        for (const row of selected) {\n            for (const col of columns) {\n                this.clearCellValue(row, col);\n            }\n        }\n    }\n    clearCellValue(rowNode, column) {\n        if (!column.isCellEditable(rowNode)) {\n            return;\n        }\n        rowNode.setDataValue(column, null, 'clipboardService');\n    }\n    shouldSkipSingleCellRange() {\n        return this.gridOptionsService.is('suppressCopySingleCellRanges') && !this.rangeService.isMoreThanOneCell();\n    }\n    iterateActiveRanges(onlyFirst, rowCallback, columnCallback) {\n        if (!this.rangeService || this.rangeService.isEmpty()) {\n            return;\n        }\n        const cellRanges = this.rangeService.getCellRanges();\n        if (onlyFirst) {\n            this.iterateActiveRange(cellRanges[0], rowCallback, columnCallback, true);\n        }\n        else {\n            cellRanges.forEach((range, idx) => this.iterateActiveRange(range, rowCallback, columnCallback, idx === cellRanges.length - 1));\n        }\n    }\n    iterateActiveRange(range, rowCallback, columnCallback, isLastRange) {\n        if (!this.rangeService) {\n            return;\n        }\n        let currentRow = this.rangeService.getRangeStartRow(range);\n        const lastRow = this.rangeService.getRangeEndRow(range);\n        if (columnCallback && range.columns) {\n            columnCallback(range.columns);\n        }\n        let rangeIndex = 0;\n        let isLastRow = false;\n        // the currentRow could be missing if the user sets the active range manually, and sets a range\n        // that is outside of the grid (eg. sets range rows 0 to 100, but grid has only 20 rows).\n        while (!isLastRow && currentRow != null) {\n            const rowNode = this.rowPositionUtils.getRowNode(currentRow);\n            isLastRow = this.rowPositionUtils.sameRow(currentRow, lastRow);\n            rowCallback(currentRow, rowNode, range.columns, rangeIndex++, isLastRow && isLastRange);\n            currentRow = this.cellNavigationService.getRowBelow(currentRow);\n        }\n    }\n    copySelectedRangeToClipboard(params = {}) {\n        if (!this.rangeService || this.rangeService.isEmpty()) {\n            return;\n        }\n        const allRangesMerge = this.rangeService.areAllRangesAbleToMerge();\n        const { data, cellsToFlash } = allRangesMerge ? this.buildDataFromMergedRanges(params) : this.buildDataFromRanges(params);\n        this.copyDataToClipboard(data);\n        this.dispatchFlashCells(cellsToFlash);\n    }\n    buildDataFromMergedRanges(params) {\n        const columnsSet = new Set();\n        const ranges = this.rangeService.getCellRanges();\n        const rowPositionsMap = new Map();\n        const allRowPositions = [];\n        const allCellsToFlash = {};\n        ranges.forEach(range => {\n            range.columns.forEach(col => columnsSet.add(col));\n            const { rowPositions, cellsToFlash } = this.getRangeRowPositionsAndCellsToFlash(range);\n            rowPositions.forEach(rowPosition => {\n                const rowPositionAsString = `${rowPosition.rowIndex}-${rowPosition.rowPinned || 'null'}`;\n                if (!rowPositionsMap.get(rowPositionAsString)) {\n                    rowPositionsMap.set(rowPositionAsString, true);\n                    allRowPositions.push(rowPosition);\n                }\n            });\n            Object.assign(allCellsToFlash, cellsToFlash);\n        });\n        const allColumns = this.columnModel.getAllDisplayedColumns();\n        const exportedColumns = Array.from(columnsSet);\n        exportedColumns.sort((a, b) => {\n            const posA = allColumns.indexOf(a);\n            const posB = allColumns.indexOf(b);\n            return posA - posB;\n        });\n        const data = this.buildExportParams({\n            columns: exportedColumns,\n            rowPositions: allRowPositions,\n            includeHeaders: params.includeHeaders,\n            includeGroupHeaders: params.includeGroupHeaders,\n        });\n        return { data, cellsToFlash: allCellsToFlash };\n    }\n    buildDataFromRanges(params) {\n        const ranges = this.rangeService.getCellRanges();\n        const data = [];\n        const allCellsToFlash = {};\n        ranges.forEach(range => {\n            const { rowPositions, cellsToFlash } = this.getRangeRowPositionsAndCellsToFlash(range);\n            Object.assign(allCellsToFlash, cellsToFlash);\n            data.push(this.buildExportParams({\n                columns: range.columns,\n                rowPositions: rowPositions,\n                includeHeaders: params.includeHeaders,\n                includeGroupHeaders: params.includeGroupHeaders,\n            }));\n        });\n        return { data: data.join('\\n'), cellsToFlash: allCellsToFlash };\n    }\n    getRangeRowPositionsAndCellsToFlash(range) {\n        const rowPositions = [];\n        const cellsToFlash = {};\n        const startRow = this.rangeService.getRangeStartRow(range);\n        const lastRow = this.rangeService.getRangeEndRow(range);\n        let node = startRow;\n        while (node) {\n            rowPositions.push(node);\n            range.columns.forEach(column => {\n                const { rowIndex, rowPinned } = node;\n                const cellId = this.cellPositionUtils.createIdFromValues({ rowIndex, column, rowPinned });\n                cellsToFlash[cellId] = true;\n            });\n            if (this.rowPositionUtils.sameRow(node, lastRow)) {\n                break;\n            }\n            node = this.cellNavigationService.getRowBelow(node);\n        }\n        return { rowPositions, cellsToFlash };\n    }\n    copyFocusedCellToClipboard(params = {}) {\n        const focusedCell = this.focusService.getFocusedCell();\n        if (focusedCell == null) {\n            return;\n        }\n        const cellId = this.cellPositionUtils.createId(focusedCell);\n        const currentRow = { rowPinned: focusedCell.rowPinned, rowIndex: focusedCell.rowIndex };\n        const column = focusedCell.column;\n        const data = this.buildExportParams({\n            columns: [column],\n            rowPositions: [currentRow],\n            includeHeaders: params.includeHeaders,\n            includeGroupHeaders: params.includeGroupHeaders\n        });\n        this.copyDataToClipboard(data);\n        this.dispatchFlashCells({ [cellId]: true });\n    }\n    copySelectedRowsToClipboard(params = {}) {\n        const { columnKeys, includeHeaders, includeGroupHeaders } = params;\n        const data = this.buildExportParams({\n            columns: columnKeys,\n            includeHeaders,\n            includeGroupHeaders\n        });\n        this.copyDataToClipboard(data);\n    }\n    buildExportParams(params) {\n        const { columns, rowPositions, includeHeaders = false, includeGroupHeaders = false } = params;\n        const exportParams = {\n            columnKeys: columns,\n            rowPositions,\n            skipColumnHeaders: !includeHeaders,\n            skipColumnGroupHeaders: !includeGroupHeaders,\n            suppressQuotes: true,\n            columnSeparator: this.getClipboardDelimiter(),\n            onlySelected: !rowPositions,\n            processCellCallback: this.gridOptionsService.getCallback('processCellForClipboard'),\n            processRowGroupCallback: (params) => this.processRowGroupCallback(params),\n            processHeaderCallback: this.gridOptionsService.getCallback('processHeaderForClipboard'),\n            processGroupHeaderCallback: this.gridOptionsService.getCallback('processGroupHeaderForClipboard')\n        };\n        return this.csvCreator.getDataAsCsv(exportParams, true);\n    }\n    processRowGroupCallback(params) {\n        const { node } = params;\n        const { key } = node;\n        let value = key != null ? key : '';\n        if (params.node.footer) {\n            let suffix = '';\n            if (key && key.length) {\n                suffix = ` ${key}`;\n            }\n            value = `Total${suffix}`;\n        }\n        const processCellForClipboard = this.gridOptionsService.getCallback('processCellForClipboard');\n        if (processCellForClipboard) {\n            let column = node.rowGroupColumn;\n            if (!column && node.footer && node.level === -1) {\n                column = this.columnModel.getRowGroupColumns()[0];\n            }\n            return processCellForClipboard({\n                value,\n                node,\n                column,\n                type: 'clipboard',\n                formatValue: (valueToFormat) => { var _a; return (_a = this.valueFormatterService.formatValue(column, node, valueToFormat)) !== null && _a !== void 0 ? _a : valueToFormat; },\n                parseValue: (valueToParse) => this.valueParserService.parseValue(column, node, valueToParse, this.valueService.getValue(column, node))\n            });\n        }\n        return value;\n    }\n    dispatchFlashCells(cellsToFlash) {\n        window.setTimeout(() => {\n            const event = {\n                type: Events.EVENT_FLASH_CELLS,\n                cells: cellsToFlash\n            };\n            this.eventService.dispatchEvent(event);\n        }, 0);\n    }\n    processCell(rowNode, column, value, type, func, canParse, canFormat) {\n        var _a;\n        if (func) {\n            const params = {\n                column,\n                node: rowNode,\n                value,\n                type,\n                formatValue: (valueToFormat) => { var _a; return (_a = this.valueFormatterService.formatValue(column, rowNode !== null && rowNode !== void 0 ? rowNode : null, valueToFormat)) !== null && _a !== void 0 ? _a : valueToFormat; },\n                parseValue: (valueToParse) => this.valueParserService.parseValue(column, rowNode !== null && rowNode !== void 0 ? rowNode : null, valueToParse, this.valueService.getValue(column, rowNode))\n            };\n            return func(params);\n        }\n        if (canParse && column.getColDef().useValueParserForImport) {\n            return this.valueParserService.parseValue(column, rowNode !== null && rowNode !== void 0 ? rowNode : null, value, this.valueService.getValue(column, rowNode));\n        }\n        else if (canFormat && column.getColDef().useValueFormatterForExport) {\n            return (_a = this.valueFormatterService.formatValue(column, rowNode !== null && rowNode !== void 0 ? rowNode : null, value)) !== null && _a !== void 0 ? _a : value;\n        }\n        return value;\n    }\n    copyDataToClipboard(data) {\n        const userProvidedFunc = this.gridOptionsService.getCallback('sendToClipboard');\n        // method 1 - user provided func\n        if (userProvidedFunc) {\n            userProvidedFunc({ data });\n            return;\n        }\n        // method 2 - native clipboard API, available in modern chrome browsers\n        const allowNavigator = !this.gridOptionsService.is('suppressClipboardApi');\n        if (allowNavigator && navigator.clipboard) {\n            navigator.clipboard.writeText(data).catch((e) => {\n                _.doOnce(() => {\n                    console.warn(e);\n                    console.warn('AG Grid: Unable to use the Clipboard API (navigator.clipboard.writeText()). ' +\n                        'The reason why it could not be used has been logged in the previous line. ' +\n                        'For this reason the grid has defaulted to using a workaround which doesn\\'t perform as well. ' +\n                        'Either fix why Clipboard API is blocked, OR stop this message from appearing by setting grid ' +\n                        'property suppressClipboardApi=true (which will default the grid to using the workaround rather than the API.');\n                }, 'clipboardApiError');\n                this.copyDataToClipboardLegacy(data);\n            });\n            return;\n        }\n        this.copyDataToClipboardLegacy(data);\n    }\n    copyDataToClipboardLegacy(data) {\n        // method 3 - if all else fails, the old school hack\n        this.executeOnTempElement(element => {\n            const eDocument = this.gridOptionsService.getDocument();\n            const focusedElementBefore = eDocument.activeElement;\n            element.value = data || ' '; // has to be non-empty value or execCommand will not do anything\n            element.select();\n            element.focus({ preventScroll: true });\n            const result = eDocument.execCommand('copy');\n            if (!result) {\n                console.warn('AG Grid: Browser did not allow document.execCommand(\\'copy\\'). Ensure ' +\n                    'api.copySelectedRowsToClipboard() is invoked via a user event, i.e. button click, otherwise ' +\n                    'the browser will prevent it for security reasons.');\n            }\n            if (focusedElementBefore != null && focusedElementBefore.focus != null) {\n                focusedElementBefore.focus({ preventScroll: true });\n            }\n        });\n    }\n    executeOnTempElement(callbackNow, callbackAfter) {\n        const eDoc = this.gridOptionsService.getDocument();\n        const eTempInput = eDoc.createElement('textarea');\n        eTempInput.style.width = '1px';\n        eTempInput.style.height = '1px';\n        // removing items from the DOM causes the document element to scroll to the\n        // position where the element was positioned. Here we set scrollTop / scrollLeft\n        // to prevent the document element from scrolling when we remove it from the DOM.\n        eTempInput.style.top = eDoc.documentElement.scrollTop + 'px';\n        eTempInput.style.left = eDoc.documentElement.scrollLeft + 'px';\n        eTempInput.style.position = 'absolute';\n        eTempInput.style.opacity = '0';\n        const guiRoot = this.gridCtrl.getGui();\n        guiRoot.appendChild(eTempInput);\n        try {\n            callbackNow(eTempInput);\n        }\n        catch (err) {\n            console.warn('AG Grid: Browser does not support document.execCommand(\\'copy\\') for clipboard operations');\n        }\n        //It needs 100 otherwise OS X seemed to not always be able to paste... Go figure...\n        if (callbackAfter) {\n            window.setTimeout(() => {\n                callbackAfter(eTempInput);\n                guiRoot.removeChild(eTempInput);\n            }, 100);\n        }\n        else {\n            guiRoot.removeChild(eTempInput);\n        }\n    }\n    getRangeSize() {\n        const ranges = this.rangeService.getCellRanges();\n        let startRangeIndex = 0;\n        let endRangeIndex = 0;\n        if (ranges.length > 0) {\n            startRangeIndex = this.rangeService.getRangeStartRow(ranges[0]).rowIndex;\n            endRangeIndex = this.rangeService.getRangeEndRow(ranges[0]).rowIndex;\n        }\n        return startRangeIndex - endRangeIndex + 1;\n    }\n};\n__decorate$2w([\n    Autowired('csvCreator')\n], ClipboardService.prototype, \"csvCreator\", void 0);\n__decorate$2w([\n    Autowired('loggerFactory')\n], ClipboardService.prototype, \"loggerFactory\", void 0);\n__decorate$2w([\n    Autowired('selectionService')\n], ClipboardService.prototype, \"selectionService\", void 0);\n__decorate$2w([\n    Optional('rangeService')\n], ClipboardService.prototype, \"rangeService\", void 0);\n__decorate$2w([\n    Autowired('rowModel')\n], ClipboardService.prototype, \"rowModel\", void 0);\n__decorate$2w([\n    Autowired('ctrlsService')\n], ClipboardService.prototype, \"ctrlsService\", void 0);\n__decorate$2w([\n    Autowired('valueService')\n], ClipboardService.prototype, \"valueService\", void 0);\n__decorate$2w([\n    Autowired('focusService')\n], ClipboardService.prototype, \"focusService\", void 0);\n__decorate$2w([\n    Autowired('rowRenderer')\n], ClipboardService.prototype, \"rowRenderer\", void 0);\n__decorate$2w([\n    Autowired('columnModel')\n], ClipboardService.prototype, \"columnModel\", void 0);\n__decorate$2w([\n    Autowired('cellNavigationService')\n], ClipboardService.prototype, \"cellNavigationService\", void 0);\n__decorate$2w([\n    Autowired('cellPositionUtils')\n], ClipboardService.prototype, \"cellPositionUtils\", void 0);\n__decorate$2w([\n    Autowired('rowPositionUtils')\n], ClipboardService.prototype, \"rowPositionUtils\", void 0);\n__decorate$2w([\n    Autowired('valueFormatterService')\n], ClipboardService.prototype, \"valueFormatterService\", void 0);\n__decorate$2w([\n    Autowired('valueParserService')\n], ClipboardService.prototype, \"valueParserService\", void 0);\n__decorate$2w([\n    PostConstruct\n], ClipboardService.prototype, \"init\", null);\nClipboardService = ClipboardService_1 = __decorate$2w([\n    Bean('clipboardService')\n], ClipboardService);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$h = '30.0.3';\n\nconst ClipboardModule = {\n    version: VERSION$h,\n    moduleName: ModuleNames.ClipboardModule,\n    beans: [ClipboardService],\n    dependantModules: [\n        EnterpriseCoreModule,\n        CsvExportModule\n    ]\n};\n\nvar __decorate$2v = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar ExpandState;\n(function (ExpandState) {\n    ExpandState[ExpandState[\"EXPANDED\"] = 0] = \"EXPANDED\";\n    ExpandState[ExpandState[\"COLLAPSED\"] = 1] = \"COLLAPSED\";\n    ExpandState[ExpandState[\"INDETERMINATE\"] = 2] = \"INDETERMINATE\";\n})(ExpandState || (ExpandState = {}));\nclass PrimaryColsHeaderPanel extends Component {\n    constructor() {\n        super(PrimaryColsHeaderPanel.TEMPLATE);\n    }\n    postConstruct() {\n        this.createExpandIcons();\n        this.addManagedListener(this.eExpand, 'click', this.onExpandClicked.bind(this));\n        this.addManagedListener(this.eExpand, 'keydown', (e) => {\n            if (e.key === KeyCode.SPACE) {\n                e.preventDefault();\n                this.onExpandClicked();\n            }\n        });\n        this.addManagedListener(this.eSelect.getInputElement(), 'click', this.onSelectClicked.bind(this));\n        this.eFilterTextField.onValueChange(() => this.onFilterTextChanged());\n        this.addManagedListener(this.eFilterTextField.getInputElement(), 'keydown', this.onMiniFilterKeyDown.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, this.showOrHideOptions.bind(this));\n        const translate = this.localeService.getLocaleTextFunc();\n        this.eSelect.setInputAriaLabel(translate('ariaColumnSelectAll', 'Toggle Select All Columns'));\n        this.eFilterTextField.setInputAriaLabel(translate('ariaFilterColumnsInput', 'Filter Columns Input'));\n    }\n    init(params) {\n        this.params = params;\n        if (this.columnModel.isReady()) {\n            this.showOrHideOptions();\n        }\n    }\n    createExpandIcons() {\n        this.eExpand.appendChild((this.eExpandChecked = _.createIconNoSpan('columnSelectOpen', this.gridOptionsService)));\n        this.eExpand.appendChild((this.eExpandUnchecked = _.createIconNoSpan('columnSelectClosed', this.gridOptionsService)));\n        this.eExpand.appendChild((this.eExpandIndeterminate = _.createIconNoSpan('columnSelectIndeterminate', this.gridOptionsService)));\n        this.setExpandState(ExpandState.EXPANDED);\n    }\n    // we only show expand / collapse if we are showing columns\n    showOrHideOptions() {\n        const showFilter = !this.params.suppressColumnFilter;\n        const showSelect = !this.params.suppressColumnSelectAll;\n        const showExpand = !this.params.suppressColumnExpandAll;\n        const groupsPresent = this.columnModel.isPrimaryColumnGroupsPresent();\n        const translate = this.localeService.getLocaleTextFunc();\n        this.eFilterTextField.setInputPlaceholder(translate('searchOoo', 'Search...'));\n        _.setDisplayed(this.eFilterTextField.getGui(), showFilter);\n        _.setDisplayed(this.eSelect.getGui(), showSelect);\n        _.setDisplayed(this.eExpand, showExpand && groupsPresent);\n    }\n    onFilterTextChanged() {\n        if (!this.onFilterTextChangedDebounced) {\n            this.onFilterTextChangedDebounced = _.debounce(() => {\n                const filterText = this.eFilterTextField.getValue();\n                this.dispatchEvent({ type: \"filterChanged\", filterText: filterText });\n            }, PrimaryColsHeaderPanel.DEBOUNCE_DELAY);\n        }\n        this.onFilterTextChangedDebounced();\n    }\n    onMiniFilterKeyDown(e) {\n        if (e.key === KeyCode.ENTER) {\n            // we need to add a delay that corresponds to the filter text debounce delay to ensure\n            // the text filtering has happened, otherwise all columns will be deselected\n            setTimeout(() => this.onSelectClicked(), PrimaryColsHeaderPanel.DEBOUNCE_DELAY);\n        }\n    }\n    onSelectClicked() {\n        this.dispatchEvent({ type: this.selectState ? 'unselectAll' : 'selectAll' });\n    }\n    onExpandClicked() {\n        this.dispatchEvent({ type: this.expandState === ExpandState.EXPANDED ? 'collapseAll' : 'expandAll' });\n    }\n    setExpandState(state) {\n        this.expandState = state;\n        _.setDisplayed(this.eExpandChecked, this.expandState === ExpandState.EXPANDED);\n        _.setDisplayed(this.eExpandUnchecked, this.expandState === ExpandState.COLLAPSED);\n        _.setDisplayed(this.eExpandIndeterminate, this.expandState === ExpandState.INDETERMINATE);\n    }\n    setSelectionState(state) {\n        this.selectState = state;\n        this.eSelect.setValue(this.selectState);\n    }\n}\nPrimaryColsHeaderPanel.DEBOUNCE_DELAY = 300;\nPrimaryColsHeaderPanel.TEMPLATE = `<div class=\"ag-column-select-header\" role=\"presentation\">\n            <div ref=\"eExpand\" class=\"ag-column-select-header-icon\" tabindex=\"0\"></div>\n            <ag-checkbox ref=\"eSelect\" class=\"ag-column-select-header-checkbox\"></ag-checkbox>\n            <ag-input-text-field class=\"ag-column-select-header-filter-wrapper\" ref=\"eFilterTextField\"></ag-input-text-field>\n        </div>`;\n__decorate$2v([\n    Autowired('columnModel')\n], PrimaryColsHeaderPanel.prototype, \"columnModel\", void 0);\n__decorate$2v([\n    RefSelector('eExpand')\n], PrimaryColsHeaderPanel.prototype, \"eExpand\", void 0);\n__decorate$2v([\n    RefSelector('eSelect')\n], PrimaryColsHeaderPanel.prototype, \"eSelect\", void 0);\n__decorate$2v([\n    RefSelector('eFilterTextField')\n], PrimaryColsHeaderPanel.prototype, \"eFilterTextField\", void 0);\n__decorate$2v([\n    PostConstruct\n], PrimaryColsHeaderPanel.prototype, \"postConstruct\", null);\n\nclass ColumnModelItem {\n    constructor(displayName, columnOrGroup, dept, group = false, expanded) {\n        this.eventService = new EventService();\n        this.displayName = displayName;\n        this.dept = dept;\n        this.group = group;\n        if (group) {\n            this.columnGroup = columnOrGroup;\n            this.expanded = expanded;\n            this.children = [];\n        }\n        else {\n            this.column = columnOrGroup;\n        }\n    }\n    isGroup() { return this.group; }\n    getDisplayName() { return this.displayName; }\n    getColumnGroup() { return this.columnGroup; }\n    getColumn() { return this.column; }\n    getDept() { return this.dept; }\n    isExpanded() { return !!this.expanded; }\n    getChildren() { return this.children; }\n    isPassesFilter() { return this.passesFilter; }\n    setExpanded(expanded) {\n        if (expanded === this.expanded) {\n            return;\n        }\n        this.expanded = expanded;\n        this.eventService.dispatchEvent({ type: ColumnModelItem.EVENT_EXPANDED_CHANGED });\n    }\n    setPassesFilter(passesFilter) {\n        this.passesFilter = passesFilter;\n    }\n    addEventListener(eventType, listener) {\n        this.eventService.addEventListener(eventType, listener);\n    }\n    removeEventListener(eventType, listener) {\n        this.eventService.removeEventListener(eventType, listener);\n    }\n}\nColumnModelItem.EVENT_EXPANDED_CHANGED = 'expandedChanged';\n\nvar __decorate$2u = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ToolPanelContextMenu extends Component {\n    constructor(column, mouseEvent, parentEl) {\n        super(/* html */ `<div class=\"ag-menu\"></div>`);\n        this.column = column;\n        this.mouseEvent = mouseEvent;\n        this.parentEl = parentEl;\n        this.displayName = null;\n    }\n    postConstruct() {\n        this.initializeProperties(this.column);\n        this.buildMenuItemMap();\n        if (this.column instanceof Column) {\n            this.displayName = this.columnModel.getDisplayNameForColumn(this.column, 'columnToolPanel');\n        }\n        else {\n            this.displayName = this.columnModel.getDisplayNameForProvidedColumnGroup(null, this.column, 'columnToolPanel');\n        }\n        if (this.isActive()) {\n            this.mouseEvent.preventDefault();\n            this.displayContextMenu();\n        }\n    }\n    initializeProperties(column) {\n        if (column instanceof ProvidedColumnGroup) {\n            this.columns = column.getLeafColumns();\n        }\n        else {\n            this.columns = [column];\n        }\n        this.allowGrouping = this.columns.some(col => col.isPrimary() && col.isAllowRowGroup());\n        this.allowValues = this.columns.some(col => col.isPrimary() && col.isAllowValue());\n        this.allowPivoting = this.columnModel.isPivotMode() && this.columns.some(col => col.isPrimary() && col.isAllowPivot());\n    }\n    buildMenuItemMap() {\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        this.menuItemMap = new Map();\n        this.menuItemMap.set('rowGroup', {\n            allowedFunction: (col) => col.isPrimary() && col.isAllowRowGroup(),\n            activeFunction: (col) => col.isRowGroupActive(),\n            activateLabel: () => `${localeTextFunc('groupBy', 'Group by')} ${this.displayName}`,\n            deactivateLabel: () => `${localeTextFunc('ungroupBy', 'Un-Group by')} ${this.displayName}`,\n            activateFunction: () => {\n                const groupedColumns = this.columnModel.getRowGroupColumns();\n                this.columnModel.setRowGroupColumns(this.addColumnsToList(groupedColumns), \"toolPanelUi\");\n            },\n            deActivateFunction: () => {\n                const groupedColumns = this.columnModel.getRowGroupColumns();\n                this.columnModel.setRowGroupColumns(this.removeColumnsFromList(groupedColumns), \"toolPanelUi\");\n            },\n            addIcon: 'menuAddRowGroup',\n            removeIcon: 'menuRemoveRowGroup'\n        });\n        this.menuItemMap.set('value', {\n            allowedFunction: (col) => col.isPrimary() && col.isAllowValue(),\n            activeFunction: (col) => col.isValueActive(),\n            activateLabel: () => localeTextFunc('addToValues', `Add ${this.displayName} to values`, [this.displayName]),\n            deactivateLabel: () => localeTextFunc('removeFromValues', `Remove ${this.displayName} from values`, [this.displayName]),\n            activateFunction: () => {\n                const valueColumns = this.columnModel.getValueColumns();\n                this.columnModel.setValueColumns(this.addColumnsToList(valueColumns), \"toolPanelUi\");\n            },\n            deActivateFunction: () => {\n                const valueColumns = this.columnModel.getValueColumns();\n                this.columnModel.setValueColumns(this.removeColumnsFromList(valueColumns), \"toolPanelUi\");\n            },\n            addIcon: 'valuePanel',\n            removeIcon: 'valuePanel'\n        });\n        this.menuItemMap.set('pivot', {\n            allowedFunction: (col) => this.columnModel.isPivotMode() && col.isPrimary() && col.isAllowPivot(),\n            activeFunction: (col) => col.isPivotActive(),\n            activateLabel: () => localeTextFunc('addToLabels', `Add ${this.displayName} to labels`, [this.displayName]),\n            deactivateLabel: () => localeTextFunc('removeFromLabels', `Remove ${this.displayName} from labels`, [this.displayName]),\n            activateFunction: () => {\n                const pivotColumns = this.columnModel.getPivotColumns();\n                this.columnModel.setPivotColumns(this.addColumnsToList(pivotColumns), \"toolPanelUi\");\n            },\n            deActivateFunction: () => {\n                const pivotColumns = this.columnModel.getPivotColumns();\n                this.columnModel.setPivotColumns(this.removeColumnsFromList(pivotColumns), \"toolPanelUi\");\n            },\n            addIcon: 'pivotPanel',\n            removeIcon: 'pivotPanel'\n        });\n    }\n    addColumnsToList(columnList) {\n        return [...columnList].concat(this.columns.filter(col => columnList.indexOf(col) === -1));\n    }\n    removeColumnsFromList(columnList) {\n        return columnList.filter(col => this.columns.indexOf(col) === -1);\n    }\n    displayContextMenu() {\n        const eGui = this.getGui();\n        const menuList = this.createBean(new AgMenuList());\n        const menuItemsMapped = this.getMappedMenuItems();\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        let hideFunc = () => { };\n        eGui.appendChild(menuList.getGui());\n        menuList.addMenuItems(menuItemsMapped);\n        menuList.addManagedListener(menuList, AgMenuItemComponent.EVENT_MENU_ITEM_SELECTED, () => {\n            this.parentEl.focus();\n            hideFunc();\n        });\n        const addPopupRes = this.popupService.addPopup({\n            modal: true,\n            eChild: eGui,\n            closeOnEsc: true,\n            afterGuiAttached: () => this.focusService.focusInto(menuList.getGui()),\n            ariaLabel: localeTextFunc('ariaLabelContextMenu', 'Context Menu'),\n            closedCallback: (e) => {\n                if (e instanceof KeyboardEvent) {\n                    this.parentEl.focus();\n                }\n                this.destroyBean(menuList);\n            }\n        });\n        if (addPopupRes) {\n            hideFunc = addPopupRes.hideFunc;\n        }\n        this.popupService.positionPopupUnderMouseEvent({\n            type: 'columnContextMenu',\n            mouseEvent: this.mouseEvent,\n            ePopup: eGui\n        });\n    }\n    isActive() {\n        return this.allowGrouping || this.allowValues || this.allowPivoting;\n    }\n    getMappedMenuItems() {\n        const ret = [];\n        for (const val of this.menuItemMap.values()) {\n            const isInactive = this.columns.some(col => val.allowedFunction(col) && !val.activeFunction(col));\n            const isActive = this.columns.some(col => val.allowedFunction(col) && val.activeFunction(col));\n            if (isInactive) {\n                ret.push({\n                    name: val.activateLabel(this.displayName),\n                    icon: _.createIconNoSpan(val.addIcon, this.gridOptionsService, null),\n                    action: () => val.activateFunction()\n                });\n            }\n            if (isActive) {\n                ret.push({\n                    name: val.deactivateLabel(this.displayName),\n                    icon: _.createIconNoSpan(val.removeIcon, this.gridOptionsService, null),\n                    action: () => val.deActivateFunction()\n                });\n            }\n        }\n        return ret;\n    }\n}\n__decorate$2u([\n    Autowired('columnModel')\n], ToolPanelContextMenu.prototype, \"columnModel\", void 0);\n__decorate$2u([\n    Autowired('popupService')\n], ToolPanelContextMenu.prototype, \"popupService\", void 0);\n__decorate$2u([\n    Autowired('focusService')\n], ToolPanelContextMenu.prototype, \"focusService\", void 0);\n__decorate$2u([\n    PostConstruct\n], ToolPanelContextMenu.prototype, \"postConstruct\", null);\n\nvar __decorate$2t = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ToolPanelColumnGroupComp extends Component {\n    constructor(modelItem, allowDragging, eventType, focusWrapper) {\n        super();\n        this.modelItem = modelItem;\n        this.allowDragging = allowDragging;\n        this.eventType = eventType;\n        this.focusWrapper = focusWrapper;\n        this.processingColumnStateChange = false;\n        this.modelItem = modelItem;\n        this.columnGroup = modelItem.getColumnGroup();\n        this.columnDept = modelItem.getDept();\n        this.allowDragging = allowDragging;\n    }\n    init() {\n        this.setTemplate(ToolPanelColumnGroupComp.TEMPLATE);\n        this.eDragHandle = _.createIconNoSpan('columnDrag', this.gridOptionsService);\n        this.eDragHandle.classList.add('ag-drag-handle', 'ag-column-select-column-group-drag-handle');\n        const checkboxGui = this.cbSelect.getGui();\n        const checkboxInput = this.cbSelect.getInputElement();\n        checkboxGui.insertAdjacentElement('afterend', this.eDragHandle);\n        checkboxInput.setAttribute('tabindex', '-1');\n        this.displayName = this.columnModel.getDisplayNameForProvidedColumnGroup(null, this.columnGroup, this.eventType);\n        if (_.missing(this.displayName)) {\n            this.displayName = '>>';\n        }\n        this.eLabel.innerHTML = this.displayName ? this.displayName : '';\n        this.setupExpandContract();\n        this.addCssClass('ag-column-select-indent-' + this.columnDept);\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, this.onColumnStateChanged.bind(this));\n        this.addManagedListener(this.eLabel, 'click', this.onLabelClicked.bind(this));\n        this.addManagedListener(this.cbSelect, AgCheckbox.EVENT_CHANGED, this.onCheckboxChanged.bind(this));\n        this.addManagedListener(this.modelItem, ColumnModelItem.EVENT_EXPANDED_CHANGED, this.onExpandChanged.bind(this));\n        this.addManagedListener(this.focusWrapper, 'keydown', this.handleKeyDown.bind(this));\n        this.addManagedListener(this.focusWrapper, 'contextmenu', this.onContextMenu.bind(this));\n        this.setOpenClosedIcons();\n        this.setupDragging();\n        this.onColumnStateChanged();\n        this.addVisibilityListenersToAllChildren();\n        this.refreshAriaExpanded();\n        this.refreshAriaLabel();\n        this.setupTooltip();\n        const classes = CssClassApplier.getToolPanelClassesFromColDef(this.columnGroup.getColGroupDef(), this.gridOptionsService, null, this.columnGroup);\n        classes.forEach(c => this.addOrRemoveCssClass(c, true));\n    }\n    getColumns() {\n        return this.columnGroup.getLeafColumns();\n    }\n    setupTooltip() {\n        const colGroupDef = this.columnGroup.getColGroupDef();\n        if (!colGroupDef) {\n            return;\n        }\n        const refresh = () => {\n            const newTooltipText = colGroupDef.headerTooltip;\n            this.setTooltip(newTooltipText);\n        };\n        refresh();\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, refresh);\n    }\n    getTooltipParams() {\n        const res = super.getTooltipParams();\n        res.location = 'columnToolPanelColumnGroup';\n        return res;\n    }\n    handleKeyDown(e) {\n        switch (e.key) {\n            case KeyCode.LEFT:\n                e.preventDefault();\n                this.modelItem.setExpanded(false);\n                break;\n            case KeyCode.RIGHT:\n                e.preventDefault();\n                this.modelItem.setExpanded(true);\n                break;\n            case KeyCode.SPACE:\n                e.preventDefault();\n                if (this.isSelectable()) {\n                    this.onSelectAllChanged(!this.isSelected());\n                }\n                break;\n        }\n    }\n    onContextMenu(e) {\n        const { columnGroup, gridOptionsService } = this;\n        if (gridOptionsService.is('functionsReadOnly')) {\n            return;\n        }\n        const contextMenu = this.createBean(new ToolPanelContextMenu(columnGroup, e, this.focusWrapper));\n        this.addDestroyFunc(() => {\n            if (contextMenu.isAlive()) {\n                this.destroyBean(contextMenu);\n            }\n        });\n    }\n    addVisibilityListenersToAllChildren() {\n        this.columnGroup.getLeafColumns().forEach(column => {\n            this.addManagedListener(column, Column.EVENT_VISIBLE_CHANGED, this.onColumnStateChanged.bind(this));\n            this.addManagedListener(column, Column.EVENT_VALUE_CHANGED, this.onColumnStateChanged.bind(this));\n            this.addManagedListener(column, Column.EVENT_PIVOT_CHANGED, this.onColumnStateChanged.bind(this));\n            this.addManagedListener(column, Column.EVENT_ROW_GROUP_CHANGED, this.onColumnStateChanged.bind(this));\n        });\n    }\n    setupDragging() {\n        if (!this.allowDragging) {\n            _.setDisplayed(this.eDragHandle, false);\n            return;\n        }\n        const hideColumnOnExit = !this.gridOptionsService.is('suppressDragLeaveHidesColumns');\n        const dragSource = {\n            type: DragSourceType.ToolPanel,\n            eElement: this.eDragHandle,\n            dragItemName: this.displayName,\n            defaultIconName: hideColumnOnExit ? DragAndDropService.ICON_HIDE : DragAndDropService.ICON_NOT_ALLOWED,\n            getDragItem: () => this.createDragItem(),\n            onDragStarted: () => {\n                const event = {\n                    type: Events.EVENT_COLUMN_PANEL_ITEM_DRAG_START,\n                    column: this.columnGroup\n                };\n                this.eventService.dispatchEvent(event);\n            },\n            onDragStopped: () => {\n                const event = {\n                    type: Events.EVENT_COLUMN_PANEL_ITEM_DRAG_END\n                };\n                this.eventService.dispatchEvent(event);\n            },\n            onGridEnter: () => {\n                if (hideColumnOnExit) {\n                    // when dragged into the grid, mimic what happens when checkbox is enabled\n                    // this handles the behaviour for pivot which is different to just hiding a column.\n                    this.onChangeCommon(true);\n                }\n            },\n            onGridExit: () => {\n                if (hideColumnOnExit) {\n                    // when dragged outside of the grid, mimic what happens when checkbox is disabled\n                    // this handles the behaviour for pivot which is different to just hiding a column.\n                    this.onChangeCommon(false);\n                }\n            }\n        };\n        this.dragAndDropService.addDragSource(dragSource, true);\n        this.addDestroyFunc(() => this.dragAndDropService.removeDragSource(dragSource));\n    }\n    createDragItem() {\n        const visibleState = {};\n        this.columnGroup.getLeafColumns().forEach(col => {\n            visibleState[col.getId()] = col.isVisible();\n        });\n        return {\n            columns: this.columnGroup.getLeafColumns(),\n            visibleState: visibleState\n        };\n    }\n    setupExpandContract() {\n        this.eGroupClosedIcon.appendChild(_.createIcon('columnSelectClosed', this.gridOptionsService, null));\n        this.eGroupOpenedIcon.appendChild(_.createIcon('columnSelectOpen', this.gridOptionsService, null));\n        this.addManagedListener(this.eGroupClosedIcon, 'click', this.onExpandOrContractClicked.bind(this));\n        this.addManagedListener(this.eGroupOpenedIcon, 'click', this.onExpandOrContractClicked.bind(this));\n        const touchListener = new TouchListener(this.eColumnGroupIcons, true);\n        this.addManagedListener(touchListener, TouchListener.EVENT_TAP, this.onExpandOrContractClicked.bind(this));\n        this.addDestroyFunc(touchListener.destroy.bind(touchListener));\n    }\n    onLabelClicked() {\n        const nextState = !this.cbSelect.getValue();\n        this.onChangeCommon(nextState);\n    }\n    onCheckboxChanged(event) {\n        this.onChangeCommon(event.selected);\n    }\n    getVisibleLeafColumns() {\n        const childColumns = [];\n        const extractCols = (children) => {\n            children.forEach(child => {\n                if (!child.isPassesFilter()) {\n                    return;\n                }\n                if (child.isGroup()) {\n                    extractCols(child.getChildren());\n                }\n                else {\n                    childColumns.push(child.getColumn());\n                }\n            });\n        };\n        extractCols(this.modelItem.getChildren());\n        return childColumns;\n    }\n    onChangeCommon(nextState) {\n        this.refreshAriaLabel();\n        if (this.processingColumnStateChange) {\n            return;\n        }\n        this.modelItemUtils.selectAllChildren(this.modelItem.getChildren(), nextState, this.eventType);\n    }\n    refreshAriaLabel() {\n        const translate = this.localeService.getLocaleTextFunc();\n        const columnLabel = translate('ariaColumnGroup', 'Column Group');\n        const checkboxValue = this.cbSelect.getValue();\n        const state = checkboxValue === undefined ?\n            translate('ariaIndeterminate', 'indeterminate') :\n            (checkboxValue ? translate('ariaVisible', 'visible') : translate('ariaHidden', 'hidden'));\n        const visibilityLabel = translate('ariaToggleVisibility', 'Press SPACE to toggle visibility');\n        _.setAriaLabel(this.focusWrapper, `${this.displayName} ${columnLabel}`);\n        this.cbSelect.setInputAriaLabel(`${visibilityLabel} (${state})`);\n        _.setAriaDescribedBy(this.focusWrapper, this.cbSelect.getInputElement().id);\n    }\n    onColumnStateChanged() {\n        const selectedValue = this.workOutSelectedValue();\n        const readOnlyValue = this.workOutReadOnlyValue();\n        this.processingColumnStateChange = true;\n        this.cbSelect.setValue(selectedValue);\n        this.cbSelect.setReadOnly(readOnlyValue);\n        this.addOrRemoveCssClass('ag-column-select-column-group-readonly', readOnlyValue);\n        this.processingColumnStateChange = false;\n    }\n    workOutSelectedValue() {\n        const pivotMode = this.columnModel.isPivotMode();\n        const visibleLeafColumns = this.getVisibleLeafColumns();\n        let checkedCount = 0;\n        let uncheckedCount = 0;\n        visibleLeafColumns.forEach(column => {\n            if (!pivotMode && column.getColDef().lockVisible) {\n                return;\n            }\n            if (this.isColumnChecked(column, pivotMode)) {\n                checkedCount++;\n            }\n            else {\n                uncheckedCount++;\n            }\n        });\n        if (checkedCount > 0 && uncheckedCount > 0) {\n            return undefined;\n        }\n        return checkedCount > 0;\n    }\n    workOutReadOnlyValue() {\n        const pivotMode = this.columnModel.isPivotMode();\n        let colsThatCanAction = 0;\n        this.columnGroup.getLeafColumns().forEach(col => {\n            if (pivotMode) {\n                if (col.isAnyFunctionAllowed()) {\n                    colsThatCanAction++;\n                }\n            }\n            else {\n                if (!col.getColDef().lockVisible) {\n                    colsThatCanAction++;\n                }\n            }\n        });\n        return colsThatCanAction === 0;\n    }\n    isColumnChecked(column, pivotMode) {\n        if (pivotMode) {\n            const pivoted = column.isPivotActive();\n            const grouped = column.isRowGroupActive();\n            const aggregated = column.isValueActive();\n            return pivoted || grouped || aggregated;\n        }\n        return column.isVisible();\n    }\n    onExpandOrContractClicked() {\n        const oldState = this.modelItem.isExpanded();\n        this.modelItem.setExpanded(!oldState);\n    }\n    onExpandChanged() {\n        this.setOpenClosedIcons();\n        this.refreshAriaExpanded();\n    }\n    setOpenClosedIcons() {\n        const folderOpen = this.modelItem.isExpanded();\n        _.setDisplayed(this.eGroupClosedIcon, !folderOpen);\n        _.setDisplayed(this.eGroupOpenedIcon, folderOpen);\n    }\n    refreshAriaExpanded() {\n        _.setAriaExpanded(this.focusWrapper, this.modelItem.isExpanded());\n    }\n    getDisplayName() {\n        return this.displayName;\n    }\n    onSelectAllChanged(value) {\n        const cbValue = this.cbSelect.getValue();\n        const readOnly = this.cbSelect.isReadOnly();\n        if (!readOnly && ((value && !cbValue) || (!value && cbValue))) {\n            this.cbSelect.toggle();\n        }\n    }\n    isSelected() {\n        return this.cbSelect.getValue();\n    }\n    isSelectable() {\n        return !this.cbSelect.isReadOnly();\n    }\n    setSelected(selected) {\n        this.cbSelect.setValue(selected, true);\n    }\n}\nToolPanelColumnGroupComp.TEMPLATE = `<div class=\"ag-column-select-column-group\" aria-hidden=\"true\">\n            <span class=\"ag-column-group-icons\" ref=\"eColumnGroupIcons\" >\n                <span class=\"ag-column-group-closed-icon\" ref=\"eGroupClosedIcon\"></span>\n                <span class=\"ag-column-group-opened-icon\" ref=\"eGroupOpenedIcon\"></span>\n            </span>\n            <ag-checkbox ref=\"cbSelect\" class=\"ag-column-select-checkbox\"></ag-checkbox>\n            <span class=\"ag-column-select-column-label\" ref=\"eLabel\"></span>\n        </div>`;\n__decorate$2t([\n    Autowired('columnModel')\n], ToolPanelColumnGroupComp.prototype, \"columnModel\", void 0);\n__decorate$2t([\n    Autowired('dragAndDropService')\n], ToolPanelColumnGroupComp.prototype, \"dragAndDropService\", void 0);\n__decorate$2t([\n    Autowired('modelItemUtils')\n], ToolPanelColumnGroupComp.prototype, \"modelItemUtils\", void 0);\n__decorate$2t([\n    RefSelector('cbSelect')\n], ToolPanelColumnGroupComp.prototype, \"cbSelect\", void 0);\n__decorate$2t([\n    RefSelector('eLabel')\n], ToolPanelColumnGroupComp.prototype, \"eLabel\", void 0);\n__decorate$2t([\n    RefSelector('eGroupOpenedIcon')\n], ToolPanelColumnGroupComp.prototype, \"eGroupOpenedIcon\", void 0);\n__decorate$2t([\n    RefSelector('eGroupClosedIcon')\n], ToolPanelColumnGroupComp.prototype, \"eGroupClosedIcon\", void 0);\n__decorate$2t([\n    RefSelector('eColumnGroupIcons')\n], ToolPanelColumnGroupComp.prototype, \"eColumnGroupIcons\", void 0);\n__decorate$2t([\n    PostConstruct\n], ToolPanelColumnGroupComp.prototype, \"init\", null);\n\nvar __decorate$2s = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst PRIMARY_COLS_LIST_ITEM_HOVERED = 'ag-list-item-hovered';\nclass PrimaryColsListPanelItemDragFeature extends BeanStub {\n    constructor(comp, virtualList) {\n        super();\n        this.comp = comp;\n        this.virtualList = virtualList;\n        this.currentDragColumn = null;\n        this.lastHoveredColumnItem = null;\n    }\n    postConstruct() {\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PANEL_ITEM_DRAG_START, this.columnPanelItemDragStart.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PANEL_ITEM_DRAG_END, this.columnPanelItemDragEnd.bind(this));\n        this.createDropTarget();\n        this.createAutoScrollService();\n    }\n    columnPanelItemDragStart({ column }) {\n        this.currentDragColumn = column;\n        const currentColumns = this.getCurrentColumns();\n        const hasNotMovable = currentColumns.find(col => {\n            const colDef = col.getColDef();\n            return !!colDef.suppressMovable || !!colDef.lockPosition;\n        });\n        if (hasNotMovable) {\n            this.moveBlocked = true;\n        }\n    }\n    columnPanelItemDragEnd() {\n        window.setTimeout(() => {\n            this.currentDragColumn = null;\n            this.moveBlocked = false;\n        }, 10);\n    }\n    createDropTarget() {\n        const dropTarget = {\n            isInterestedIn: (type) => type === DragSourceType.ToolPanel,\n            getIconName: () => DragAndDropService[this.moveBlocked ? 'ICON_NOT_ALLOWED' : 'ICON_MOVE'],\n            getContainer: () => this.comp.getGui(),\n            onDragging: (e) => this.onDragging(e),\n            onDragStop: () => this.onDragStop(),\n            onDragLeave: () => this.onDragLeave()\n        };\n        this.dragAndDropService.addDropTarget(dropTarget);\n    }\n    createAutoScrollService() {\n        const virtualListGui = this.virtualList.getGui();\n        this.autoScrollService = new AutoScrollService({\n            scrollContainer: virtualListGui,\n            scrollAxis: 'y',\n            getVerticalPosition: () => virtualListGui.scrollTop,\n            setVerticalPosition: (position) => virtualListGui.scrollTop = position\n        });\n    }\n    onDragging(e) {\n        if (!this.currentDragColumn || this.moveBlocked) {\n            return;\n        }\n        const hoveredColumnItem = this.getDragColumnItem(e);\n        const comp = this.virtualList.getComponentAt(hoveredColumnItem.rowIndex);\n        if (!comp) {\n            return;\n        }\n        const el = comp.getGui().parentElement;\n        if (this.lastHoveredColumnItem &&\n            this.lastHoveredColumnItem.rowIndex === hoveredColumnItem.rowIndex &&\n            this.lastHoveredColumnItem.position === hoveredColumnItem.position) {\n            return;\n        }\n        this.autoScrollService.check(e.event);\n        this.clearHoveredItems();\n        this.lastHoveredColumnItem = hoveredColumnItem;\n        _.radioCssClass(el, `${PRIMARY_COLS_LIST_ITEM_HOVERED}`);\n        _.radioCssClass(el, `ag-item-highlight-${hoveredColumnItem.position}`);\n    }\n    getDragColumnItem(e) {\n        const virtualListGui = this.virtualList.getGui();\n        const paddingTop = parseFloat(window.getComputedStyle(virtualListGui).paddingTop);\n        const rowHeight = this.virtualList.getRowHeight();\n        const scrollTop = this.virtualList.getScrollTop();\n        const rowIndex = Math.max(0, (e.y - paddingTop + scrollTop) / rowHeight);\n        const maxLen = this.comp.getDisplayedColsList().length - 1;\n        const normalizedRowIndex = Math.min(maxLen, rowIndex) | 0;\n        return {\n            rowIndex: normalizedRowIndex,\n            position: (Math.round(rowIndex) > rowIndex || rowIndex > maxLen) ? 'bottom' : 'top',\n            component: this.virtualList.getComponentAt(normalizedRowIndex)\n        };\n    }\n    onDragStop() {\n        if (this.moveBlocked) {\n            return;\n        }\n        const targetIndex = this.getTargetIndex();\n        const columnsToMove = this.getCurrentColumns();\n        if (targetIndex != null) {\n            this.columnModel.moveColumns(columnsToMove, targetIndex, 'toolPanelUi');\n        }\n        this.clearHoveredItems();\n        this.autoScrollService.ensureCleared();\n    }\n    getMoveDiff(end) {\n        const allColumns = this.columnModel.getAllGridColumns();\n        const currentColumns = this.getCurrentColumns();\n        const currentColumn = currentColumns[0];\n        const span = currentColumns.length;\n        const currentIndex = allColumns.indexOf(currentColumn);\n        if (currentIndex < end) {\n            return span;\n        }\n        return 0;\n    }\n    getCurrentColumns() {\n        if (this.currentDragColumn instanceof ProvidedColumnGroup) {\n            return this.currentDragColumn.getLeafColumns();\n        }\n        return [this.currentDragColumn];\n    }\n    getTargetIndex() {\n        if (!this.lastHoveredColumnItem) {\n            return null;\n        }\n        const columnItemComponent = this.lastHoveredColumnItem.component;\n        let isBefore = this.lastHoveredColumnItem.position === 'top';\n        let targetColumn;\n        if (columnItemComponent instanceof ToolPanelColumnGroupComp) {\n            const columns = columnItemComponent.getColumns();\n            targetColumn = columns[0];\n            isBefore = true;\n        }\n        else {\n            targetColumn = columnItemComponent.getColumn();\n        }\n        const targetColumnIndex = this.columnModel.getAllGridColumns().indexOf(targetColumn);\n        const adjustedTarget = isBefore ? targetColumnIndex : targetColumnIndex + 1;\n        const diff = this.getMoveDiff(adjustedTarget);\n        return adjustedTarget - diff;\n    }\n    onDragLeave() {\n        this.clearHoveredItems();\n        this.autoScrollService.ensureCleared();\n    }\n    clearHoveredItems() {\n        const virtualListGui = this.virtualList.getGui();\n        virtualListGui.querySelectorAll(`.${PRIMARY_COLS_LIST_ITEM_HOVERED}`).forEach(el => {\n            [\n                PRIMARY_COLS_LIST_ITEM_HOVERED,\n                'ag-item-highlight-top',\n                'ag-item-highlight-bottom'\n            ].forEach(cls => {\n                el.classList.remove(cls);\n            });\n        });\n        this.lastHoveredColumnItem = null;\n    }\n}\n__decorate$2s([\n    Autowired('columnModel')\n], PrimaryColsListPanelItemDragFeature.prototype, \"columnModel\", void 0);\n__decorate$2s([\n    Autowired('dragAndDropService')\n], PrimaryColsListPanelItemDragFeature.prototype, \"dragAndDropService\", void 0);\n__decorate$2s([\n    PostConstruct\n], PrimaryColsListPanelItemDragFeature.prototype, \"postConstruct\", null);\n\nvar __decorate$2r = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ToolPanelColumnComp extends Component {\n    constructor(column, columnDept, allowDragging, groupsExist, focusWrapper) {\n        super();\n        this.column = column;\n        this.columnDept = columnDept;\n        this.allowDragging = allowDragging;\n        this.groupsExist = groupsExist;\n        this.focusWrapper = focusWrapper;\n        this.processingColumnStateChange = false;\n    }\n    init() {\n        this.setTemplate(ToolPanelColumnComp.TEMPLATE);\n        this.eDragHandle = _.createIconNoSpan('columnDrag', this.gridOptionsService);\n        this.eDragHandle.classList.add('ag-drag-handle', 'ag-column-select-column-drag-handle');\n        const checkboxGui = this.cbSelect.getGui();\n        const checkboxInput = this.cbSelect.getInputElement();\n        checkboxGui.insertAdjacentElement('afterend', this.eDragHandle);\n        checkboxInput.setAttribute('tabindex', '-1');\n        this.displayName = this.columnModel.getDisplayNameForColumn(this.column, 'columnToolPanel');\n        const displayNameSanitised = _.escapeString(this.displayName);\n        this.eLabel.innerHTML = displayNameSanitised;\n        // if grouping, we add an extra level of indent, to cater for expand/contract icons we need to indent for\n        const indent = this.columnDept;\n        if (this.groupsExist) {\n            this.addCssClass('ag-column-select-add-group-indent');\n        }\n        this.addCssClass(`ag-column-select-indent-${indent}`);\n        this.setupDragging();\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, this.onColumnStateChanged.bind(this));\n        this.addManagedListener(this.column, Column.EVENT_VALUE_CHANGED, this.onColumnStateChanged.bind(this));\n        this.addManagedListener(this.column, Column.EVENT_PIVOT_CHANGED, this.onColumnStateChanged.bind(this));\n        this.addManagedListener(this.column, Column.EVENT_ROW_GROUP_CHANGED, this.onColumnStateChanged.bind(this));\n        this.addManagedListener(this.column, Column.EVENT_VISIBLE_CHANGED, this.onColumnStateChanged.bind(this));\n        this.addManagedListener(this.focusWrapper, 'keydown', this.handleKeyDown.bind(this));\n        this.addManagedListener(this.focusWrapper, 'contextmenu', this.onContextMenu.bind(this));\n        this.addManagedPropertyListener('functionsReadOnly', this.onColumnStateChanged.bind(this));\n        this.addManagedListener(this.cbSelect, AgCheckbox.EVENT_CHANGED, this.onCheckboxChanged.bind(this));\n        this.addManagedListener(this.eLabel, 'click', this.onLabelClicked.bind(this));\n        this.onColumnStateChanged();\n        this.refreshAriaLabel();\n        this.setupTooltip();\n        const classes = CssClassApplier.getToolPanelClassesFromColDef(this.column.getColDef(), this.gridOptionsService, this.column, null);\n        classes.forEach(c => this.addOrRemoveCssClass(c, true));\n    }\n    getColumn() {\n        return this.column;\n    }\n    setupTooltip() {\n        const refresh = () => {\n            const newTooltipText = this.column.getColDef().headerTooltip;\n            this.setTooltip(newTooltipText);\n        };\n        refresh();\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, refresh);\n    }\n    getTooltipParams() {\n        const res = super.getTooltipParams();\n        res.location = 'columnToolPanelColumn';\n        res.colDef = this.column.getColDef();\n        return res;\n    }\n    onContextMenu(e) {\n        const { column, gridOptionsService } = this;\n        if (gridOptionsService.is('functionsReadOnly')) {\n            return;\n        }\n        const contextMenu = this.createBean(new ToolPanelContextMenu(column, e, this.focusWrapper));\n        this.addDestroyFunc(() => {\n            if (contextMenu.isAlive()) {\n                this.destroyBean(contextMenu);\n            }\n        });\n    }\n    handleKeyDown(e) {\n        if (e.key === KeyCode.SPACE) {\n            e.preventDefault();\n            if (this.isSelectable()) {\n                this.onSelectAllChanged(!this.isSelected());\n            }\n        }\n    }\n    onLabelClicked() {\n        if (this.gridOptionsService.is('functionsReadOnly')) {\n            return;\n        }\n        const nextState = !this.cbSelect.getValue();\n        this.onChangeCommon(nextState);\n    }\n    onCheckboxChanged(event) {\n        this.onChangeCommon(event.selected);\n    }\n    onChangeCommon(nextState) {\n        // ignore lock visible columns\n        if (this.cbSelect.isReadOnly()) {\n            return;\n        }\n        this.refreshAriaLabel();\n        // only want to action if the user clicked the checkbox, not if we are setting the checkbox because\n        // of a change in the model\n        if (this.processingColumnStateChange) {\n            return;\n        }\n        this.modelItemUtils.setColumn(this.column, nextState, 'toolPanelUi');\n    }\n    refreshAriaLabel() {\n        const translate = this.localeService.getLocaleTextFunc();\n        const columnLabel = translate('ariaColumn', 'Column');\n        const state = this.cbSelect.getValue() ? translate('ariaVisible', 'visible') : translate('ariaHidden', 'hidden');\n        const visibilityLabel = translate('ariaToggleVisibility', 'Press SPACE to toggle visibility');\n        _.setAriaLabel(this.focusWrapper, `${this.displayName} ${columnLabel}`);\n        this.cbSelect.setInputAriaLabel(`${visibilityLabel} (${state})`);\n        _.setAriaDescribedBy(this.focusWrapper, this.cbSelect.getInputElement().id);\n    }\n    setupDragging() {\n        if (!this.allowDragging) {\n            _.setDisplayed(this.eDragHandle, false);\n            return;\n        }\n        const hideColumnOnExit = !this.gridOptionsService.is('suppressDragLeaveHidesColumns');\n        const dragSource = {\n            type: DragSourceType.ToolPanel,\n            eElement: this.eDragHandle,\n            dragItemName: this.displayName,\n            defaultIconName: hideColumnOnExit ? DragAndDropService.ICON_HIDE : DragAndDropService.ICON_NOT_ALLOWED,\n            getDragItem: () => this.createDragItem(),\n            onDragStarted: () => {\n                const event = {\n                    type: Events.EVENT_COLUMN_PANEL_ITEM_DRAG_START,\n                    column: this.column\n                };\n                this.eventService.dispatchEvent(event);\n            },\n            onDragStopped: () => {\n                const event = {\n                    type: Events.EVENT_COLUMN_PANEL_ITEM_DRAG_END\n                };\n                this.eventService.dispatchEvent(event);\n            },\n            onGridEnter: () => {\n                if (hideColumnOnExit) {\n                    // when dragged into the grid, mimic what happens when checkbox is enabled\n                    // this handles the behaviour for pivot which is different to just hiding a column.\n                    this.onChangeCommon(true);\n                }\n            },\n            onGridExit: () => {\n                if (hideColumnOnExit) {\n                    // when dragged outside of the grid, mimic what happens when checkbox is disabled\n                    // this handles the behaviour for pivot which is different to just hiding a column.\n                    this.onChangeCommon(false);\n                }\n            }\n        };\n        this.dragAndDropService.addDragSource(dragSource, true);\n        this.addDestroyFunc(() => this.dragAndDropService.removeDragSource(dragSource));\n    }\n    createDragItem() {\n        const visibleState = {};\n        visibleState[this.column.getId()] = this.column.isVisible();\n        return {\n            columns: [this.column],\n            visibleState: visibleState\n        };\n    }\n    onColumnStateChanged() {\n        this.processingColumnStateChange = true;\n        const isPivotMode = this.columnModel.isPivotMode();\n        if (isPivotMode) {\n            // if reducing, checkbox means column is one of pivot, value or group\n            const anyFunctionActive = this.column.isAnyFunctionActive();\n            this.cbSelect.setValue(anyFunctionActive);\n        }\n        else {\n            // if not reducing, the checkbox tells us if column is visible or not\n            this.cbSelect.setValue(this.column.isVisible());\n        }\n        let canBeToggled = true;\n        let canBeDragged = true;\n        if (isPivotMode) {\n            // when in pivot mode, the item should be read only if:\n            //  a) gui is not allowed make any changes\n            const functionsReadOnly = this.gridOptionsService.is('functionsReadOnly');\n            //  b) column is not allow any functions on it\n            const noFunctionsAllowed = !this.column.isAnyFunctionAllowed();\n            canBeToggled = !functionsReadOnly && !noFunctionsAllowed;\n            canBeDragged = canBeToggled;\n        }\n        else {\n            const { enableRowGroup, enableValue, lockPosition, suppressMovable, lockVisible } = this.column.getColDef();\n            const forceDraggable = !!enableRowGroup || !!enableValue;\n            const disableDraggable = !!lockPosition || !!suppressMovable;\n            canBeToggled = !lockVisible;\n            canBeDragged = forceDraggable || !disableDraggable;\n        }\n        this.cbSelect.setReadOnly(!canBeToggled);\n        this.eDragHandle.classList.toggle('ag-column-select-column-readonly', !canBeDragged);\n        this.addOrRemoveCssClass('ag-column-select-column-readonly', !canBeDragged && !canBeToggled);\n        const checkboxPassive = isPivotMode && this.gridOptionsService.is('functionsPassive');\n        this.cbSelect.setPassive(checkboxPassive);\n        this.processingColumnStateChange = false;\n    }\n    getDisplayName() {\n        return this.displayName;\n    }\n    onSelectAllChanged(value) {\n        if (value !== this.cbSelect.getValue()) {\n            if (!this.cbSelect.isReadOnly()) {\n                this.cbSelect.toggle();\n            }\n        }\n    }\n    isSelected() {\n        return this.cbSelect.getValue();\n    }\n    isSelectable() {\n        return !this.cbSelect.isReadOnly();\n    }\n    isExpandable() {\n        return false;\n    }\n    setExpanded(value) {\n        console.warn('AG Grid: can not expand a column item that does not represent a column group header');\n    }\n}\nToolPanelColumnComp.TEMPLATE = `<div class=\"ag-column-select-column\" aria-hidden=\"true\">\n            <ag-checkbox ref=\"cbSelect\" class=\"ag-column-select-checkbox\"></ag-checkbox>\n            <span class=\"ag-column-select-column-label\" ref=\"eLabel\"></span>\n        </div>`;\n__decorate$2r([\n    Autowired('columnModel')\n], ToolPanelColumnComp.prototype, \"columnModel\", void 0);\n__decorate$2r([\n    Autowired('dragAndDropService')\n], ToolPanelColumnComp.prototype, \"dragAndDropService\", void 0);\n__decorate$2r([\n    Autowired('modelItemUtils')\n], ToolPanelColumnComp.prototype, \"modelItemUtils\", void 0);\n__decorate$2r([\n    RefSelector('eLabel')\n], ToolPanelColumnComp.prototype, \"eLabel\", void 0);\n__decorate$2r([\n    RefSelector('cbSelect')\n], ToolPanelColumnComp.prototype, \"cbSelect\", void 0);\n__decorate$2r([\n    PostConstruct\n], ToolPanelColumnComp.prototype, \"init\", null);\n\nvar __decorate$2q = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass UIColumnModel {\n    constructor(items) {\n        this.items = items;\n    }\n    getRowCount() {\n        return this.items.length;\n    }\n    getRow(index) {\n        return this.items[index];\n    }\n}\nconst PRIMARY_COLS_LIST_PANEL_CLASS = 'ag-column-select-list';\nclass PrimaryColsListPanel extends Component {\n    constructor() {\n        super(PrimaryColsListPanel.TEMPLATE);\n        this.destroyColumnItemFuncs = [];\n    }\n    destroyColumnTree() {\n        this.allColsTree = [];\n        this.destroyColumnItemFuncs.forEach(f => f());\n        this.destroyColumnItemFuncs = [];\n    }\n    init(params, allowDragging, eventType) {\n        this.params = params;\n        this.allowDragging = allowDragging;\n        this.eventType = eventType;\n        if (!this.params.suppressSyncLayoutWithGrid) {\n            this.addManagedListener(this.eventService, Events.EVENT_COLUMN_MOVED, this.onColumnsChanged.bind(this));\n        }\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, this.onColumnsChanged.bind(this));\n        const eventsImpactingCheckedState = [\n            Events.EVENT_COLUMN_PIVOT_CHANGED,\n            Events.EVENT_COLUMN_PIVOT_MODE_CHANGED,\n            Events.EVENT_COLUMN_ROW_GROUP_CHANGED,\n            Events.EVENT_COLUMN_VALUE_CHANGED,\n            Events.EVENT_COLUMN_VISIBLE,\n            Events.EVENT_NEW_COLUMNS_LOADED\n        ];\n        eventsImpactingCheckedState.forEach(event => {\n            // update header select all checkbox with current selection state\n            this.addManagedListener(this.eventService, event, this.fireSelectionChangedEvent.bind(this));\n        });\n        this.expandGroupsByDefault = !this.params.contractColumnSelection;\n        const translate = this.localeService.getLocaleTextFunc();\n        const columnListName = translate('ariaColumnList', 'Column List');\n        this.virtualList = this.createManagedBean(new VirtualList('column-select', 'tree', columnListName));\n        this.appendChild(this.virtualList.getGui());\n        this.virtualList.setComponentCreator((item, listItemElement) => {\n            _.setAriaLevel(listItemElement, (item.getDept() + 1));\n            return this.createComponentFromItem(item, listItemElement);\n        });\n        if (this.columnModel.isReady()) {\n            this.onColumnsChanged();\n        }\n        if (!params.suppressColumnMove && !this.gridOptionsService.is('suppressMovableColumns')) {\n            this.createManagedBean(new PrimaryColsListPanelItemDragFeature(this, this.virtualList));\n        }\n    }\n    createComponentFromItem(item, listItemElement) {\n        if (item.isGroup()) {\n            const renderedGroup = new ToolPanelColumnGroupComp(item, this.allowDragging, this.eventType, listItemElement);\n            this.getContext().createBean(renderedGroup);\n            return renderedGroup;\n        }\n        const columnComp = new ToolPanelColumnComp(item.getColumn(), item.getDept(), this.allowDragging, this.groupsExist, listItemElement);\n        this.getContext().createBean(columnComp);\n        return columnComp;\n    }\n    onColumnsChanged() {\n        const expandedStates = this.getExpandedStates();\n        const pivotModeActive = this.columnModel.isPivotMode();\n        const shouldSyncColumnLayoutWithGrid = !this.params.suppressSyncLayoutWithGrid && !pivotModeActive;\n        if (shouldSyncColumnLayoutWithGrid) {\n            this.buildTreeFromWhatGridIsDisplaying();\n        }\n        else {\n            this.buildTreeFromProvidedColumnDefs();\n        }\n        this.setExpandedStates(expandedStates);\n        this.markFilteredColumns();\n        this.flattenAndFilterModel();\n    }\n    getDisplayedColsList() {\n        return this.displayedColsList;\n    }\n    getExpandedStates() {\n        if (!this.allColsTree) {\n            return {};\n        }\n        const res = {};\n        this.forEachItem(item => {\n            if (!item.isGroup()) {\n                return;\n            }\n            const colGroup = item.getColumnGroup();\n            if (colGroup) { // group should always exist, this is defensive\n                res[colGroup.getId()] = item.isExpanded();\n            }\n        });\n        return res;\n    }\n    setExpandedStates(states) {\n        if (!this.allColsTree) {\n            return;\n        }\n        this.forEachItem(item => {\n            if (!item.isGroup()) {\n                return;\n            }\n            const colGroup = item.getColumnGroup();\n            if (colGroup) { // group should always exist, this is defensive\n                const expanded = states[colGroup.getId()];\n                const groupExistedLastTime = expanded != null;\n                if (groupExistedLastTime) {\n                    item.setExpanded(expanded);\n                }\n            }\n        });\n    }\n    buildTreeFromWhatGridIsDisplaying() {\n        this.colDefService.syncLayoutWithGrid(this.setColumnLayout.bind(this));\n    }\n    setColumnLayout(colDefs) {\n        const columnTree = this.colDefService.createColumnTree(colDefs);\n        this.buildListModel(columnTree);\n        // using col defs to check if groups exist as it could be a custom layout\n        this.groupsExist = colDefs.some(colDef => {\n            return colDef && typeof colDef.children !== 'undefined';\n        });\n        this.markFilteredColumns();\n        this.flattenAndFilterModel();\n    }\n    buildTreeFromProvidedColumnDefs() {\n        // add column / group comps to tool panel\n        this.buildListModel(this.columnModel.getPrimaryColumnTree());\n        this.groupsExist = this.columnModel.isPrimaryColumnGroupsPresent();\n    }\n    buildListModel(columnTree) {\n        const columnExpandedListener = this.onColumnExpanded.bind(this);\n        const addListeners = (item) => {\n            item.addEventListener(ColumnModelItem.EVENT_EXPANDED_CHANGED, columnExpandedListener);\n            const removeFunc = item.removeEventListener.bind(item, ColumnModelItem.EVENT_EXPANDED_CHANGED, columnExpandedListener);\n            this.destroyColumnItemFuncs.push(removeFunc);\n        };\n        const recursivelyBuild = (tree, dept, parentList) => {\n            tree.forEach(child => {\n                if (child instanceof ProvidedColumnGroup) {\n                    createGroupItem(child, dept, parentList);\n                }\n                else {\n                    createColumnItem(child, dept, parentList);\n                }\n            });\n        };\n        const createGroupItem = (columnGroup, dept, parentList) => {\n            const columnGroupDef = columnGroup.getColGroupDef();\n            const skipThisGroup = columnGroupDef && columnGroupDef.suppressColumnsToolPanel;\n            if (skipThisGroup) {\n                return;\n            }\n            if (columnGroup.isPadding()) {\n                recursivelyBuild(columnGroup.getChildren(), dept, parentList);\n                return;\n            }\n            const displayName = this.columnModel.getDisplayNameForProvidedColumnGroup(null, columnGroup, this.eventType);\n            const item = new ColumnModelItem(displayName, columnGroup, dept, true, this.expandGroupsByDefault);\n            parentList.push(item);\n            addListeners(item);\n            recursivelyBuild(columnGroup.getChildren(), dept + 1, item.getChildren());\n        };\n        const createColumnItem = (column, dept, parentList) => {\n            const skipThisColumn = column.getColDef() && column.getColDef().suppressColumnsToolPanel;\n            if (skipThisColumn) {\n                return;\n            }\n            const displayName = this.columnModel.getDisplayNameForColumn(column, 'columnToolPanel');\n            parentList.push(new ColumnModelItem(displayName, column, dept));\n        };\n        this.destroyColumnTree();\n        recursivelyBuild(columnTree, 0, this.allColsTree);\n    }\n    onColumnExpanded() {\n        this.flattenAndFilterModel();\n    }\n    flattenAndFilterModel() {\n        this.displayedColsList = [];\n        const recursiveFunc = (item) => {\n            if (!item.isPassesFilter()) {\n                return;\n            }\n            this.displayedColsList.push(item);\n            if (item.isGroup() && item.isExpanded()) {\n                item.getChildren().forEach(recursiveFunc);\n            }\n        };\n        this.allColsTree.forEach(recursiveFunc);\n        this.virtualList.setModel(new UIColumnModel(this.displayedColsList));\n        const focusedRow = this.virtualList.getLastFocusedRow();\n        this.virtualList.refresh();\n        if (focusedRow != null) {\n            this.focusRowIfAlive(focusedRow);\n        }\n        this.notifyListeners();\n    }\n    focusRowIfAlive(rowIndex) {\n        window.setTimeout(() => {\n            if (this.isAlive()) {\n                this.virtualList.focusRow(rowIndex);\n            }\n        }, 0);\n    }\n    forEachItem(callback) {\n        const recursiveFunc = (items) => {\n            items.forEach(item => {\n                callback(item);\n                if (item.isGroup()) {\n                    recursiveFunc(item.getChildren());\n                }\n            });\n        };\n        recursiveFunc(this.allColsTree);\n    }\n    doSetExpandedAll(value) {\n        this.forEachItem(item => {\n            if (item.isGroup()) {\n                item.setExpanded(value);\n            }\n        });\n    }\n    setGroupsExpanded(expand, groupIds) {\n        if (!groupIds) {\n            this.doSetExpandedAll(expand);\n            return;\n        }\n        const expandedGroupIds = [];\n        this.forEachItem(item => {\n            if (!item.isGroup()) {\n                return;\n            }\n            const groupId = item.getColumnGroup().getId();\n            if (groupIds.indexOf(groupId) >= 0) {\n                item.setExpanded(expand);\n                expandedGroupIds.push(groupId);\n            }\n        });\n        const unrecognisedGroupIds = groupIds.filter(groupId => !_.includes(expandedGroupIds, groupId));\n        if (unrecognisedGroupIds.length > 0) {\n            console.warn('AG Grid: unable to find group(s) for supplied groupIds:', unrecognisedGroupIds);\n        }\n    }\n    getExpandState() {\n        let expandedCount = 0;\n        let notExpandedCount = 0;\n        this.forEachItem(item => {\n            if (!item.isGroup()) {\n                return;\n            }\n            if (item.isExpanded()) {\n                expandedCount++;\n            }\n            else {\n                notExpandedCount++;\n            }\n        });\n        if (expandedCount > 0 && notExpandedCount > 0) {\n            return ExpandState.INDETERMINATE;\n        }\n        if (notExpandedCount > 0) {\n            return ExpandState.COLLAPSED;\n        }\n        return ExpandState.EXPANDED;\n    }\n    doSetSelectedAll(selectAllChecked) {\n        this.modelItemUtils.selectAllChildren(this.allColsTree, selectAllChecked, this.eventType);\n    }\n    getSelectionState() {\n        let checkedCount = 0;\n        let uncheckedCount = 0;\n        const pivotMode = this.columnModel.isPivotMode();\n        this.forEachItem(item => {\n            if (item.isGroup()) {\n                return;\n            }\n            if (!item.isPassesFilter()) {\n                return;\n            }\n            const column = item.getColumn();\n            const colDef = column.getColDef();\n            let checked;\n            if (pivotMode) {\n                const noPivotModeOptionsAllowed = !column.isAllowPivot() && !column.isAllowRowGroup() && !column.isAllowValue();\n                if (noPivotModeOptionsAllowed) {\n                    return;\n                }\n                checked = column.isValueActive() || column.isPivotActive() || column.isRowGroupActive();\n            }\n            else {\n                if (colDef.lockVisible) {\n                    return;\n                }\n                checked = column.isVisible();\n            }\n            checked ? checkedCount++ : uncheckedCount++;\n        });\n        if (checkedCount > 0 && uncheckedCount > 0) {\n            return undefined;\n        }\n        return !(checkedCount === 0 || uncheckedCount > 0);\n    }\n    setFilterText(filterText) {\n        this.filterText = _.exists(filterText) ? filterText.toLowerCase() : null;\n        this.markFilteredColumns();\n        this.flattenAndFilterModel();\n    }\n    markFilteredColumns() {\n        const passesFilter = (item) => {\n            if (!_.exists(this.filterText)) {\n                return true;\n            }\n            const displayName = item.getDisplayName();\n            return displayName == null || displayName.toLowerCase().indexOf(this.filterText) !== -1;\n        };\n        const recursivelyCheckFilter = (item, parentPasses) => {\n            let atLeastOneChildPassed = false;\n            if (item.isGroup()) {\n                const groupPasses = passesFilter(item);\n                item.getChildren().forEach(child => {\n                    const childPasses = recursivelyCheckFilter(child, groupPasses || parentPasses);\n                    if (childPasses) {\n                        atLeastOneChildPassed = childPasses;\n                    }\n                });\n            }\n            const filterPasses = (parentPasses || atLeastOneChildPassed) ? true : passesFilter(item);\n            item.setPassesFilter(filterPasses);\n            return filterPasses;\n        };\n        this.allColsTree.forEach(item => recursivelyCheckFilter(item, false));\n    }\n    notifyListeners() {\n        this.fireGroupExpandedEvent();\n        this.fireSelectionChangedEvent();\n    }\n    fireGroupExpandedEvent() {\n        const expandState = this.getExpandState();\n        this.dispatchEvent({ type: 'groupExpanded', state: expandState });\n    }\n    fireSelectionChangedEvent() {\n        const selectionState = this.getSelectionState();\n        this.dispatchEvent({ type: 'selectionChanged', state: selectionState });\n    }\n}\nPrimaryColsListPanel.TEMPLATE = `<div class=\"${PRIMARY_COLS_LIST_PANEL_CLASS}\" role=\"presentation\"></div>`;\n__decorate$2q([\n    Autowired('columnModel')\n], PrimaryColsListPanel.prototype, \"columnModel\", void 0);\n__decorate$2q([\n    Autowired('toolPanelColDefService')\n], PrimaryColsListPanel.prototype, \"colDefService\", void 0);\n__decorate$2q([\n    Autowired('modelItemUtils')\n], PrimaryColsListPanel.prototype, \"modelItemUtils\", void 0);\n__decorate$2q([\n    PreDestroy\n], PrimaryColsListPanel.prototype, \"destroyColumnTree\", null);\n\nvar __decorate$2p = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass PivotModePanel extends Component {\n    createTemplate() {\n        return /* html */ `<div class=\"ag-pivot-mode-panel\">\n                <ag-toggle-button ref=\"cbPivotMode\" class=\"ag-pivot-mode-select\"></ag-toggle-button>\n            </div>`;\n    }\n    init() {\n        this.setTemplate(this.createTemplate());\n        this.cbPivotMode.setValue(this.columnModel.isPivotMode());\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        this.cbPivotMode.setLabel(localeTextFunc('pivotMode', 'Pivot Mode'));\n        this.addManagedListener(this.cbPivotMode, AgCheckbox.EVENT_CHANGED, this.onBtPivotMode.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, this.onPivotModeChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, this.onPivotModeChanged.bind(this));\n    }\n    onBtPivotMode() {\n        const newValue = !!this.cbPivotMode.getValue();\n        if (newValue !== this.columnModel.isPivotMode()) {\n            this.columnModel.setPivotMode(newValue, \"toolPanelUi\");\n            const api = this.gridOptionsService.api;\n            if (api) {\n                api.refreshHeader();\n            }\n        }\n    }\n    onPivotModeChanged() {\n        const pivotModeActive = this.columnModel.isPivotMode();\n        this.cbPivotMode.setValue(pivotModeActive);\n    }\n}\n__decorate$2p([\n    Autowired('columnModel')\n], PivotModePanel.prototype, \"columnModel\", void 0);\n__decorate$2p([\n    RefSelector('cbPivotMode')\n], PivotModePanel.prototype, \"cbPivotMode\", void 0);\n__decorate$2p([\n    PreConstruct\n], PivotModePanel.prototype, \"init\", null);\n\nvar __decorate$2o = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet AggregationStage = class AggregationStage extends BeanStub {\n    init() {\n        this.alwaysAggregateAtRootLevel = this.gridOptionsService.is('alwaysAggregateAtRootLevel');\n        this.addManagedPropertyListener('alwaysAggregateAtRootLevel', (propChange) => this.alwaysAggregateAtRootLevel = propChange.currentValue);\n        this.groupIncludeTotalFooter = this.gridOptionsService.is('groupIncludeTotalFooter');\n        this.addManagedPropertyListener('groupIncludeTotalFooter', (propChange) => this.groupIncludeTotalFooter = propChange.currentValue);\n    }\n    // it's possible to recompute the aggregate without doing the other parts\n    // + api.refreshClientSideRowModel('aggregate')\n    execute(params) {\n        // if changed path is active, it means we came from a) change detection or b) transaction update.\n        // for both of these, if no value columns are present, it means there is nothing to aggregate now\n        // and there is no cleanup to be done (as value columns don't change between transactions or change\n        // detections). if no value columns and no changed path, means we have to go through all nodes in\n        // case we need to clean up agg data from before.\n        const noValueColumns = _.missingOrEmpty(this.columnModel.getValueColumns());\n        const noUserAgg = !this.gridOptionsService.getCallback('getGroupRowAgg');\n        const changedPathActive = params.changedPath && params.changedPath.isActive();\n        if (noValueColumns && noUserAgg && changedPathActive) {\n            return;\n        }\n        const aggDetails = this.createAggDetails(params);\n        this.recursivelyCreateAggData(aggDetails);\n    }\n    createAggDetails(params) {\n        const pivotActive = this.columnModel.isPivotActive();\n        const measureColumns = this.columnModel.getValueColumns();\n        const pivotColumns = pivotActive ? this.columnModel.getPivotColumns() : [];\n        const aggDetails = {\n            changedPath: params.changedPath,\n            valueColumns: measureColumns,\n            pivotColumns: pivotColumns\n        };\n        return aggDetails;\n    }\n    isSuppressAggFilteredOnly() {\n        const isGroupAggFiltering = this.gridOptionsService.getGroupAggFiltering() !== undefined;\n        return isGroupAggFiltering || this.gridOptionsService.is('suppressAggFilteredOnly');\n    }\n    recursivelyCreateAggData(aggDetails) {\n        // update prop, in case changed since last time\n        this.filteredOnly = !this.isSuppressAggFilteredOnly();\n        const callback = (rowNode) => {\n            const hasNoChildren = !rowNode.hasChildren();\n            if (hasNoChildren) {\n                // this check is needed for TreeData, in case the node is no longer a child,\n                // but it was a child previously.\n                if (rowNode.aggData) {\n                    rowNode.setAggData(null);\n                }\n                // never agg data for leaf nodes\n                return;\n            }\n            //Optionally enable the aggregation at the root Node\n            const isRootNode = rowNode.level === -1;\n            // if total footer is displayed, the value is in use\n            if (isRootNode && !this.groupIncludeTotalFooter) {\n                const notPivoting = !this.columnModel.isPivotMode();\n                if (!this.alwaysAggregateAtRootLevel && notPivoting) {\n                    return;\n                }\n            }\n            this.aggregateRowNode(rowNode, aggDetails);\n        };\n        aggDetails.changedPath.forEachChangedNodeDepthFirst(callback, true);\n    }\n    aggregateRowNode(rowNode, aggDetails) {\n        const measureColumnsMissing = aggDetails.valueColumns.length === 0;\n        const pivotColumnsMissing = aggDetails.pivotColumns.length === 0;\n        const userFunc = this.gridOptionsService.getCallback('getGroupRowAgg');\n        let aggResult;\n        if (userFunc) {\n            const params = { nodes: rowNode.childrenAfterFilter };\n            aggResult = userFunc(params);\n        }\n        else if (measureColumnsMissing) {\n            aggResult = null;\n        }\n        else if (pivotColumnsMissing) {\n            aggResult = this.aggregateRowNodeUsingValuesOnly(rowNode, aggDetails);\n        }\n        else {\n            aggResult = this.aggregateRowNodeUsingValuesAndPivot(rowNode);\n        }\n        rowNode.setAggData(aggResult);\n        // if we are grouping, then it's possible there is a sibling footer\n        // to the group, so update the data here also if there is one\n        if (rowNode.sibling) {\n            rowNode.sibling.setAggData(aggResult);\n        }\n    }\n    aggregateRowNodeUsingValuesAndPivot(rowNode) {\n        var _a;\n        const result = {};\n        const secondaryColumns = (_a = this.columnModel.getSecondaryColumns()) !== null && _a !== void 0 ? _a : [];\n        secondaryColumns.forEach(secondaryCol => {\n            const { pivotValueColumn, pivotTotalColumnIds, colId, pivotKeys } = secondaryCol.getColDef();\n            if (_.exists(pivotTotalColumnIds)) {\n                return;\n            }\n            const keys = pivotKeys !== null && pivotKeys !== void 0 ? pivotKeys : [];\n            let values;\n            if (rowNode.leafGroup) {\n                // lowest level group, get the values from the mapped set\n                values = this.getValuesFromMappedSet(rowNode.childrenMapped, keys, pivotValueColumn);\n            }\n            else {\n                // value columns and pivot columns, non-leaf group\n                values = this.getValuesPivotNonLeaf(rowNode, colId);\n            }\n            result[colId] = this.aggregateValues(values, pivotValueColumn.getAggFunc(), pivotValueColumn, rowNode, secondaryCol);\n        });\n        secondaryColumns.forEach(secondaryCol => {\n            const { pivotValueColumn, pivotTotalColumnIds, colId } = secondaryCol.getColDef();\n            if (!_.exists(pivotTotalColumnIds)) {\n                return;\n            }\n            const aggResults = [];\n            //retrieve results for colIds associated with this pivot total column\n            if (!pivotTotalColumnIds || !pivotTotalColumnIds.length) {\n                return;\n            }\n            pivotTotalColumnIds.forEach((currentColId) => {\n                aggResults.push(result[currentColId]);\n            });\n            result[colId] = this.aggregateValues(aggResults, pivotValueColumn.getAggFunc(), pivotValueColumn, rowNode, secondaryCol);\n        });\n        return result;\n    }\n    aggregateRowNodeUsingValuesOnly(rowNode, aggDetails) {\n        const result = {};\n        const changedValueColumns = aggDetails.changedPath.isActive() ?\n            aggDetails.changedPath.getValueColumnsForNode(rowNode, aggDetails.valueColumns)\n            : aggDetails.valueColumns;\n        const notChangedValueColumns = aggDetails.changedPath.isActive() ?\n            aggDetails.changedPath.getNotValueColumnsForNode(rowNode, aggDetails.valueColumns)\n            : null;\n        const values2d = this.getValuesNormal(rowNode, changedValueColumns);\n        const oldValues = rowNode.aggData;\n        changedValueColumns.forEach((valueColumn, index) => {\n            result[valueColumn.getId()] = this.aggregateValues(values2d[index], valueColumn.getAggFunc(), valueColumn, rowNode);\n        });\n        if (notChangedValueColumns && oldValues) {\n            notChangedValueColumns.forEach((valueColumn) => {\n                result[valueColumn.getId()] = oldValues[valueColumn.getId()];\n            });\n        }\n        return result;\n    }\n    getValuesPivotNonLeaf(rowNode, colId) {\n        const values = [];\n        rowNode.childrenAfterFilter.forEach((node) => {\n            const value = node.aggData[colId];\n            values.push(value);\n        });\n        return values;\n    }\n    getValuesFromMappedSet(mappedSet, keys, valueColumn) {\n        let mapPointer = mappedSet;\n        keys.forEach(key => (mapPointer = mapPointer ? mapPointer[key] : null));\n        if (!mapPointer) {\n            return [];\n        }\n        const values = [];\n        mapPointer.forEach((rowNode) => {\n            const value = this.valueService.getValue(valueColumn, rowNode);\n            values.push(value);\n        });\n        return values;\n    }\n    getValuesNormal(rowNode, valueColumns) {\n        // create 2d array, of all values for all valueColumns\n        const values = [];\n        valueColumns.forEach(() => values.push([]));\n        const valueColumnCount = valueColumns.length;\n        const nodeList = this.filteredOnly ? rowNode.childrenAfterFilter : rowNode.childrenAfterGroup;\n        const rowCount = nodeList.length;\n        for (let i = 0; i < rowCount; i++) {\n            const childNode = nodeList[i];\n            for (let j = 0; j < valueColumnCount; j++) {\n                const valueColumn = valueColumns[j];\n                // if the row is a group, then it will only have an agg result value,\n                // which means valueGetter is never used.\n                const value = this.valueService.getValue(valueColumn, childNode);\n                values[j].push(value);\n            }\n        }\n        return values;\n    }\n    aggregateValues(values, aggFuncOrString, column, rowNode, pivotResultColumn) {\n        const aggFunc = typeof aggFuncOrString === 'string' ?\n            this.aggFuncService.getAggFunc(aggFuncOrString) :\n            aggFuncOrString;\n        if (typeof aggFunc !== 'function') {\n            console.error(`AG Grid: unrecognised aggregation function ${aggFuncOrString}`);\n            return null;\n        }\n        const aggFuncAny = aggFunc;\n        const params = {\n            values: values,\n            column: column,\n            colDef: column ? column.getColDef() : undefined,\n            pivotResultColumn: pivotResultColumn,\n            rowNode: rowNode,\n            data: rowNode ? rowNode.data : undefined,\n            api: this.gridApi,\n            columnApi: this.columnApi,\n            context: this.gridOptionsService.context,\n        }; // the \"as any\" is needed to allow the deprecation warning messages\n        return aggFuncAny(params);\n    }\n};\n__decorate$2o([\n    Autowired('columnModel')\n], AggregationStage.prototype, \"columnModel\", void 0);\n__decorate$2o([\n    Autowired('valueService')\n], AggregationStage.prototype, \"valueService\", void 0);\n__decorate$2o([\n    Autowired('aggFuncService')\n], AggregationStage.prototype, \"aggFuncService\", void 0);\n__decorate$2o([\n    Autowired('gridApi')\n], AggregationStage.prototype, \"gridApi\", void 0);\n__decorate$2o([\n    Autowired('columnApi')\n], AggregationStage.prototype, \"columnApi\", void 0);\n__decorate$2o([\n    PostConstruct\n], AggregationStage.prototype, \"init\", null);\nAggregationStage = __decorate$2o([\n    Bean('aggregationStage')\n], AggregationStage);\n\nclass BatchRemover {\n    constructor() {\n        this.allSets = {};\n        this.allParents = [];\n    }\n    removeFromChildrenAfterGroup(parent, child) {\n        const set = this.getSet(parent);\n        set.removeFromChildrenAfterGroup[child.id] = true;\n    }\n    isRemoveFromAllLeafChildren(parent, child) {\n        const set = this.getSet(parent);\n        return !!set.removeFromAllLeafChildren[child.id];\n    }\n    preventRemoveFromAllLeafChildren(parent, child) {\n        const set = this.getSet(parent);\n        delete set.removeFromAllLeafChildren[child.id];\n    }\n    removeFromAllLeafChildren(parent, child) {\n        const set = this.getSet(parent);\n        set.removeFromAllLeafChildren[child.id] = true;\n    }\n    getSet(parent) {\n        if (!this.allSets[parent.id]) {\n            this.allSets[parent.id] = {\n                removeFromAllLeafChildren: {},\n                removeFromChildrenAfterGroup: {}\n            };\n            this.allParents.push(parent);\n        }\n        return this.allSets[parent.id];\n    }\n    getAllParents() {\n        return this.allParents;\n    }\n    flush() {\n        this.allParents.forEach(parent => {\n            const nodeDetails = this.allSets[parent.id];\n            parent.childrenAfterGroup = parent.childrenAfterGroup.filter(child => !nodeDetails.removeFromChildrenAfterGroup[child.id]);\n            parent.allLeafChildren = parent.allLeafChildren.filter(child => !nodeDetails.removeFromAllLeafChildren[child.id]);\n            parent.updateHasChildren();\n            if (parent.sibling) {\n                parent.sibling.childrenAfterGroup = parent.childrenAfterGroup;\n                parent.sibling.allLeafChildren = parent.allLeafChildren;\n            }\n        });\n        this.allSets = {};\n        this.allParents.length = 0;\n    }\n}\n\nvar __decorate$2n = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet GroupStage = class GroupStage extends BeanStub {\n    constructor() {\n        super(...arguments);\n        // we use a sequence variable so that each time we do a grouping, we don't\n        // reuse the ids - otherwise the rowRenderer will confuse rowNodes between redraws\n        // when it tries to animate between rows.\n        this.groupIdSequence = new NumberSequence();\n    }\n    postConstruct() {\n        this.usingTreeData = this.gridOptionsService.isTreeData();\n        if (this.usingTreeData) {\n            this.getDataPath = this.gridOptionsService.get('getDataPath');\n        }\n    }\n    execute(params) {\n        const details = this.createGroupingDetails(params);\n        if (details.transactions) {\n            this.handleTransaction(details);\n        }\n        else {\n            const afterColsChanged = params.afterColumnsChanged === true;\n            this.shotgunResetEverything(details, afterColsChanged);\n        }\n        this.positionLeafsAndGroups(params.changedPath);\n        this.orderGroups(details.rootNode);\n        this.selectableService.updateSelectableAfterGrouping(details.rootNode);\n    }\n    positionLeafsAndGroups(changedPath) {\n        // we don't do group sorting for tree data\n        if (this.usingTreeData) {\n            return;\n        }\n        changedPath.forEachChangedNodeDepthFirst(group => {\n            if (group.childrenAfterGroup) {\n                const leafNodes = [];\n                const groupNodes = [];\n                let unbalancedNode;\n                group.childrenAfterGroup.forEach(row => {\n                    var _a;\n                    if (!((_a = row.childrenAfterGroup) === null || _a === void 0 ? void 0 : _a.length)) {\n                        leafNodes.push(row);\n                    }\n                    else {\n                        if (row.key === '' && !unbalancedNode) {\n                            unbalancedNode = row;\n                        }\n                        else {\n                            groupNodes.push(row);\n                        }\n                    }\n                });\n                if (unbalancedNode) {\n                    groupNodes.push(unbalancedNode);\n                }\n                group.childrenAfterGroup = [...leafNodes, ...groupNodes];\n            }\n        }, false);\n    }\n    createGroupingDetails(params) {\n        const { rowNode, changedPath, rowNodeTransactions, rowNodeOrder } = params;\n        const groupedCols = this.usingTreeData ? null : this.columnModel.getRowGroupColumns();\n        const details = {\n            // someone complained that the parent attribute was causing some change detection\n            // to break is some angular add-on - which i never used. taking the parent out breaks\n            // a cyclic dependency, hence this flag got introduced.\n            includeParents: !this.gridOptionsService.is('suppressParentsInRowNodes'),\n            expandByDefault: this.gridOptionsService.getNum('groupDefaultExpanded'),\n            groupedCols: groupedCols,\n            rootNode: rowNode,\n            pivotMode: this.columnModel.isPivotMode(),\n            groupedColCount: this.usingTreeData || !groupedCols ? 0 : groupedCols.length,\n            rowNodeOrder: rowNodeOrder,\n            transactions: rowNodeTransactions,\n            // if no transaction, then it's shotgun, changed path would be 'not active' at this point anyway\n            changedPath: changedPath\n        };\n        return details;\n    }\n    handleTransaction(details) {\n        details.transactions.forEach(tran => {\n            // we don't allow batch remover for tree data as tree data uses Filler Nodes,\n            // and creating/deleting filler nodes needs to be done alongside the node deleting\n            // and moving. if we want to Batch Remover working with tree data then would need\n            // to consider how Filler Nodes would be impacted (it's possible that it can be easily\n            // modified to work, however for now I don't have the brain energy to work it all out).\n            const batchRemover = !this.usingTreeData ? new BatchRemover() : undefined;\n            // the order here of [add, remove, update] needs to be the same as in ClientSideNodeManager,\n            // as the order is important when a record with the same id is added and removed in the same\n            // transaction.\n            if (_.existsAndNotEmpty(tran.remove)) {\n                this.removeNodes(tran.remove, details, batchRemover);\n            }\n            if (_.existsAndNotEmpty(tran.update)) {\n                this.moveNodesInWrongPath(tran.update, details, batchRemover);\n            }\n            if (_.existsAndNotEmpty(tran.add)) {\n                this.insertNodes(tran.add, details, false);\n            }\n            // must flush here, and not allow another transaction to be applied,\n            // as each transaction must finish leaving the data in a consistent state.\n            if (batchRemover) {\n                const parentsWithChildrenRemoved = batchRemover.getAllParents().slice();\n                batchRemover.flush();\n                this.removeEmptyGroups(parentsWithChildrenRemoved, details);\n            }\n        });\n        if (details.rowNodeOrder) {\n            this.sortChildren(details);\n        }\n    }\n    // this is used when doing delta updates, eg Redux, keeps nodes in right order\n    sortChildren(details) {\n        details.changedPath.forEachChangedNodeDepthFirst(node => {\n            if (!node.childrenAfterGroup) {\n                return;\n            }\n            const didSort = _.sortRowNodesByOrder(node.childrenAfterGroup, details.rowNodeOrder);\n            if (didSort) {\n                details.changedPath.addParentNode(node);\n            }\n        }, false, true);\n    }\n    orderGroups(rootNode) {\n        // we don't do group sorting for tree data\n        if (this.usingTreeData) {\n            return;\n        }\n        const comparator = this.gridOptionsService.getCallback('initialGroupOrderComparator');\n        if (_.exists(comparator)) {\n            recursiveSort(rootNode);\n        }\n        function recursiveSort(rowNode) {\n            const doSort = _.exists(rowNode.childrenAfterGroup) &&\n                // we only want to sort groups, so we do not sort leafs (a leaf group has leafs as children)\n                !rowNode.leafGroup;\n            if (doSort) {\n                rowNode.childrenAfterGroup.sort((nodeA, nodeB) => comparator({ nodeA, nodeB }));\n                rowNode.childrenAfterGroup.forEach((childNode) => recursiveSort(childNode));\n            }\n        }\n    }\n    getExistingPathForNode(node, details) {\n        const res = [];\n        // when doing tree data, the node is part of the path,\n        // but when doing grid grouping, the node is not part of the path so we start with the parent.\n        let pointer = this.usingTreeData ? node : node.parent;\n        while (pointer && pointer !== details.rootNode) {\n            res.push({\n                key: pointer.key,\n                rowGroupColumn: pointer.rowGroupColumn,\n                field: pointer.field\n            });\n            pointer = pointer.parent;\n        }\n        res.reverse();\n        return res;\n    }\n    moveNodesInWrongPath(childNodes, details, batchRemover) {\n        childNodes.forEach(childNode => {\n            // we add node, even if parent has not changed, as the data could have\n            // changed, hence aggregations will be wrong\n            if (details.changedPath.isActive()) {\n                details.changedPath.addParentNode(childNode.parent);\n            }\n            const infoToKeyMapper = (item) => item.key;\n            const oldPath = this.getExistingPathForNode(childNode, details).map(infoToKeyMapper);\n            const newPath = this.getGroupInfo(childNode, details).map(infoToKeyMapper);\n            const nodeInCorrectPath = _.areEqual(oldPath, newPath);\n            if (!nodeInCorrectPath) {\n                this.moveNode(childNode, details, batchRemover);\n            }\n        });\n    }\n    moveNode(childNode, details, batchRemover) {\n        this.removeNodesInStages([childNode], details, batchRemover);\n        this.insertOneNode(childNode, details, true, batchRemover);\n        // hack - if we didn't do this, then renaming a tree item (ie changing rowNode.key) wouldn't get\n        // refreshed into the gui.\n        // this is needed to kick off the event that rowComp listens to for refresh. this in turn\n        // then will get each cell in the row to refresh - which is what we need as we don't know which\n        // columns will be displaying the rowNode.key info.\n        childNode.setData(childNode.data);\n        // we add both old and new parents to changed path, as both will need to be refreshed.\n        // we already added the old parent (in calling method), so just add the new parent here\n        if (details.changedPath.isActive()) {\n            const newParent = childNode.parent;\n            details.changedPath.addParentNode(newParent);\n        }\n    }\n    removeNodes(leafRowNodes, details, batchRemover) {\n        this.removeNodesInStages(leafRowNodes, details, batchRemover);\n        if (details.changedPath.isActive()) {\n            leafRowNodes.forEach(rowNode => details.changedPath.addParentNode(rowNode.parent));\n        }\n    }\n    removeNodesInStages(leafRowNodes, details, batchRemover) {\n        this.removeNodesFromParents(leafRowNodes, details, batchRemover);\n        if (this.usingTreeData) {\n            this.postRemoveCreateFillerNodes(leafRowNodes, details);\n            // When not TreeData, then removeEmptyGroups is called just before the BatchRemover is flushed.\n            // However for TreeData, there is no BatchRemover, so we have to call removeEmptyGroups here.\n            const nodeParents = leafRowNodes.map(n => n.parent);\n            this.removeEmptyGroups(nodeParents, details);\n        }\n    }\n    forEachParentGroup(details, group, callback) {\n        let pointer = group;\n        while (pointer && pointer !== details.rootNode) {\n            callback(pointer);\n            pointer = pointer.parent;\n        }\n    }\n    removeNodesFromParents(nodesToRemove, details, provided) {\n        // this method can be called with BatchRemover as optional. if it is missed, we created a local version\n        // and flush it at the end. if one is provided, we add to the provided one and it gets flushed elsewhere.\n        const batchRemoverIsLocal = provided == null;\n        const batchRemoverToUse = provided ? provided : new BatchRemover();\n        nodesToRemove.forEach(nodeToRemove => {\n            this.removeFromParent(nodeToRemove, batchRemoverToUse);\n            // remove from allLeafChildren. we clear down all parents EXCEPT the Root Node, as\n            // the ClientSideNodeManager is responsible for the Root Node.\n            this.forEachParentGroup(details, nodeToRemove.parent, parentNode => {\n                batchRemoverToUse.removeFromAllLeafChildren(parentNode, nodeToRemove);\n            });\n        });\n        if (batchRemoverIsLocal) {\n            batchRemoverToUse.flush();\n        }\n    }\n    postRemoveCreateFillerNodes(nodesToRemove, details) {\n        nodesToRemove.forEach(nodeToRemove => {\n            // if not group, and children are present, need to move children to a group.\n            // otherwise if no children, we can just remove without replacing.\n            const replaceWithGroup = nodeToRemove.hasChildren();\n            if (replaceWithGroup) {\n                const oldPath = this.getExistingPathForNode(nodeToRemove, details);\n                // because we just removed the userGroup, this will always return new support group\n                const newGroupNode = this.findParentForNode(nodeToRemove, oldPath, details);\n                // these properties are the ones that will be incorrect in the newly created group,\n                // so copy them from the old childNode\n                newGroupNode.expanded = nodeToRemove.expanded;\n                newGroupNode.allLeafChildren = nodeToRemove.allLeafChildren;\n                newGroupNode.childrenAfterGroup = nodeToRemove.childrenAfterGroup;\n                newGroupNode.childrenMapped = nodeToRemove.childrenMapped;\n                newGroupNode.updateHasChildren();\n                newGroupNode.childrenAfterGroup.forEach(rowNode => rowNode.parent = newGroupNode);\n            }\n        });\n    }\n    removeEmptyGroups(possibleEmptyGroups, details) {\n        // we do this multiple times, as when we remove groups, that means the parent of just removed\n        // group can then be empty. to get around this, if we remove, then we check everything again for\n        // newly emptied groups. the max number of times this will execute is the depth of the group tree.\n        let checkAgain = true;\n        const groupShouldBeRemoved = (rowNode) => {\n            // because of the while loop below, it's possible we already moved the node,\n            // so double check before trying to remove again.\n            const mapKey = this.getChildrenMappedKey(rowNode.key, rowNode.rowGroupColumn);\n            const parentRowNode = rowNode.parent;\n            const groupAlreadyRemoved = (parentRowNode && parentRowNode.childrenMapped) ?\n                !parentRowNode.childrenMapped[mapKey] : true;\n            if (groupAlreadyRemoved) {\n                // if not linked, then group was already removed\n                return false;\n            }\n            // if still not removed, then we remove if this group is empty\n            return !!rowNode.isEmptyRowGroupNode();\n        };\n        while (checkAgain) {\n            checkAgain = false;\n            const batchRemover = new BatchRemover();\n            possibleEmptyGroups.forEach(possibleEmptyGroup => {\n                // remove empty groups\n                this.forEachParentGroup(details, possibleEmptyGroup, rowNode => {\n                    if (groupShouldBeRemoved(rowNode)) {\n                        checkAgain = true;\n                        this.removeFromParent(rowNode, batchRemover);\n                        // we remove selection on filler nodes here, as the selection would not be removed\n                        // from the RowNodeManager, as filler nodes don't exist on the RowNodeManager\n                        rowNode.setSelectedParams({ newValue: false, source: 'rowGroupChanged' });\n                    }\n                });\n            });\n            batchRemover.flush();\n        }\n    }\n    // removes the node from the parent by:\n    // a) removing from childrenAfterGroup (using batchRemover if present, otherwise immediately)\n    // b) removing from childrenMapped (immediately)\n    // c) setRowTop(null) - as the rowRenderer uses this to know the RowNode is no longer needed\n    // d) setRowIndex(null) - as the rowNode will no longer be displayed.\n    removeFromParent(child, batchRemover) {\n        if (child.parent) {\n            if (batchRemover) {\n                batchRemover.removeFromChildrenAfterGroup(child.parent, child);\n            }\n            else {\n                _.removeFromArray(child.parent.childrenAfterGroup, child);\n                child.parent.updateHasChildren();\n            }\n        }\n        const mapKey = this.getChildrenMappedKey(child.key, child.rowGroupColumn);\n        if (child.parent && child.parent.childrenMapped) {\n            child.parent.childrenMapped[mapKey] = undefined;\n        }\n        // this is important for transition, see rowComp removeFirstPassFuncs. when doing animation and\n        // remove, if rowTop is still present, the rowComp thinks it's just moved position.\n        child.setRowTop(null);\n        child.setRowIndex(null);\n    }\n    addToParent(child, parent) {\n        const mapKey = this.getChildrenMappedKey(child.key, child.rowGroupColumn);\n        if (parent) {\n            const children = parent.childrenMapped != null;\n            if (children) {\n                parent.childrenMapped[mapKey] = child;\n            }\n            parent.childrenAfterGroup.push(child);\n            parent.updateHasChildren();\n        }\n    }\n    areGroupColsEqual(d1, d2) {\n        if (d1 == null || d2 == null || d1.pivotMode !== d2.pivotMode) {\n            return false;\n        }\n        return _.areEqual(d1.groupedCols, d2.groupedCols);\n    }\n    checkAllGroupDataAfterColsChanged(details) {\n        const recurse = (rowNodes) => {\n            if (!rowNodes) {\n                return;\n            }\n            rowNodes.forEach(rowNode => {\n                const isLeafNode = !this.usingTreeData && !rowNode.group;\n                if (isLeafNode) {\n                    return;\n                }\n                const groupInfo = {\n                    field: rowNode.field,\n                    key: rowNode.key,\n                    rowGroupColumn: rowNode.rowGroupColumn\n                };\n                this.setGroupData(rowNode, groupInfo);\n                recurse(rowNode.childrenAfterGroup);\n            });\n        };\n        recurse(details.rootNode.childrenAfterGroup);\n    }\n    shotgunResetEverything(details, afterColumnsChanged) {\n        if (this.noChangeInGroupingColumns(details, afterColumnsChanged)) {\n            return;\n        }\n        // groups are about to get disposed, so need to deselect any that are selected\n        this.selectionService.filterFromSelection((node) => node && !node.group);\n        const { rootNode, groupedCols } = details;\n        // because we are not creating the root node each time, we have the logic\n        // here to change leafGroup once.\n        // we set .leafGroup to false for tree data, as .leafGroup is only used when pivoting, and pivoting\n        // isn't allowed with treeData, so the grid never actually use .leafGroup when doing treeData.\n        rootNode.leafGroup = this.usingTreeData ? false : groupedCols.length === 0;\n        // we are doing everything from scratch, so reset childrenAfterGroup and childrenMapped from the rootNode\n        rootNode.childrenAfterGroup = [];\n        rootNode.childrenMapped = {};\n        rootNode.updateHasChildren();\n        const sibling = rootNode.sibling;\n        if (sibling) {\n            sibling.childrenAfterGroup = rootNode.childrenAfterGroup;\n            sibling.childrenMapped = rootNode.childrenMapped;\n        }\n        this.insertNodes(rootNode.allLeafChildren, details, false);\n    }\n    noChangeInGroupingColumns(details, afterColumnsChanged) {\n        let noFurtherProcessingNeeded = false;\n        const groupDisplayColumns = this.columnModel.getGroupDisplayColumns();\n        const newGroupDisplayColIds = groupDisplayColumns ?\n            groupDisplayColumns.map(c => c.getId()).join('-') : '';\n        if (afterColumnsChanged) {\n            // we only need to redo grouping if doing normal grouping (ie not tree data)\n            // and the group cols have changed.\n            noFurtherProcessingNeeded = this.usingTreeData || this.areGroupColsEqual(details, this.oldGroupingDetails);\n            // if the group display cols have changed, then we need to update rowNode.groupData\n            // (regardless of tree data or row grouping)\n            if (this.oldGroupDisplayColIds !== newGroupDisplayColIds) {\n                this.checkAllGroupDataAfterColsChanged(details);\n            }\n        }\n        this.oldGroupingDetails = details;\n        this.oldGroupDisplayColIds = newGroupDisplayColIds;\n        return noFurtherProcessingNeeded;\n    }\n    insertNodes(newRowNodes, details, isMove) {\n        newRowNodes.forEach(rowNode => {\n            this.insertOneNode(rowNode, details, isMove);\n            if (details.changedPath.isActive()) {\n                details.changedPath.addParentNode(rowNode.parent);\n            }\n        });\n    }\n    insertOneNode(childNode, details, isMove, batchRemover) {\n        const path = this.getGroupInfo(childNode, details);\n        const parentGroup = this.findParentForNode(childNode, path, details, batchRemover);\n        if (!parentGroup.group) {\n            console.warn(`AG Grid: duplicate group keys for row data, keys should be unique`, [parentGroup.data, childNode.data]);\n        }\n        if (this.usingTreeData) {\n            this.swapGroupWithUserNode(parentGroup, childNode, isMove);\n        }\n        else {\n            childNode.parent = parentGroup;\n            childNode.level = path.length;\n            parentGroup.childrenAfterGroup.push(childNode);\n            parentGroup.updateHasChildren();\n        }\n    }\n    findParentForNode(childNode, path, details, batchRemover) {\n        let nextNode = details.rootNode;\n        path.forEach((groupInfo, level) => {\n            nextNode = this.getOrCreateNextNode(nextNode, groupInfo, level, details);\n            // node gets added to all group nodes.\n            // note: we do not add to rootNode here, as the rootNode is the master list of rowNodes\n            if (!(batchRemover === null || batchRemover === void 0 ? void 0 : batchRemover.isRemoveFromAllLeafChildren(nextNode, childNode))) {\n                nextNode.allLeafChildren.push(childNode);\n            }\n            else {\n                // if this node is about to be removed, prevent that\n                batchRemover === null || batchRemover === void 0 ? void 0 : batchRemover.preventRemoveFromAllLeafChildren(nextNode, childNode);\n            }\n        });\n        return nextNode;\n    }\n    swapGroupWithUserNode(fillerGroup, userGroup, isMove) {\n        userGroup.parent = fillerGroup.parent;\n        userGroup.key = fillerGroup.key;\n        userGroup.field = fillerGroup.field;\n        userGroup.groupData = fillerGroup.groupData;\n        userGroup.level = fillerGroup.level;\n        // AG-3441 - preserve the existing expanded status of the node if we're moving it, so that\n        // you can drag a sub tree from one parent to another without changing its expansion\n        if (!isMove) {\n            userGroup.expanded = fillerGroup.expanded;\n        }\n        // we set .leafGroup to false for tree data, as .leafGroup is only used when pivoting, and pivoting\n        // isn't allowed with treeData, so the grid never actually use .leafGroup when doing treeData.\n        userGroup.leafGroup = fillerGroup.leafGroup;\n        // always null for userGroups, as row grouping is not allowed when doing tree data\n        userGroup.rowGroupIndex = fillerGroup.rowGroupIndex;\n        userGroup.allLeafChildren = fillerGroup.allLeafChildren;\n        userGroup.childrenAfterGroup = fillerGroup.childrenAfterGroup;\n        userGroup.childrenMapped = fillerGroup.childrenMapped;\n        userGroup.sibling = fillerGroup.sibling;\n        userGroup.updateHasChildren();\n        this.removeFromParent(fillerGroup);\n        userGroup.childrenAfterGroup.forEach((rowNode) => rowNode.parent = userGroup);\n        this.addToParent(userGroup, fillerGroup.parent);\n    }\n    getOrCreateNextNode(parentGroup, groupInfo, level, details) {\n        const key = this.getChildrenMappedKey(groupInfo.key, groupInfo.rowGroupColumn);\n        let nextNode = parentGroup.childrenMapped ? parentGroup.childrenMapped[key] : undefined;\n        if (!nextNode) {\n            nextNode = this.createGroup(groupInfo, parentGroup, level, details);\n            // attach the new group to the parent\n            this.addToParent(nextNode, parentGroup);\n        }\n        return nextNode;\n    }\n    createGroup(groupInfo, parent, level, details) {\n        const groupNode = new RowNode(this.beans);\n        groupNode.group = true;\n        groupNode.field = groupInfo.field;\n        groupNode.rowGroupColumn = groupInfo.rowGroupColumn;\n        this.setGroupData(groupNode, groupInfo);\n        // we put 'row-group-' before the group id, so it doesn't clash with standard row id's. we also use 't-' and 'b-'\n        // for top pinned and bottom pinned rows.\n        groupNode.id = RowNode.ID_PREFIX_ROW_GROUP + this.groupIdSequence.next();\n        groupNode.key = groupInfo.key;\n        groupNode.level = level;\n        groupNode.leafGroup = this.usingTreeData ? false : level === (details.groupedColCount - 1);\n        groupNode.allLeafChildren = [];\n        // why is this done here? we are not updating the children count as we go,\n        // i suspect this is updated in the filter stage\n        groupNode.setAllChildrenCount(0);\n        groupNode.rowGroupIndex = this.usingTreeData ? null : level;\n        groupNode.childrenAfterGroup = [];\n        groupNode.childrenMapped = {};\n        groupNode.updateHasChildren();\n        groupNode.parent = details.includeParents ? parent : null;\n        this.setExpandedInitialValue(details, groupNode);\n        if (this.gridOptionsService.is('groupIncludeFooter')) {\n            groupNode.createFooter();\n        }\n        return groupNode;\n    }\n    setGroupData(groupNode, groupInfo) {\n        groupNode.groupData = {};\n        const groupDisplayCols = this.columnModel.getGroupDisplayColumns();\n        groupDisplayCols.forEach(col => {\n            // newGroup.rowGroupColumn=null when working off GroupInfo, and we always display the group in the group column\n            // if rowGroupColumn is present, then it's grid row grouping and we only include if configuration says so\n            const displayGroupForCol = this.usingTreeData || (groupNode.rowGroupColumn ? col.isRowGroupDisplayed(groupNode.rowGroupColumn.getId()) : false);\n            if (displayGroupForCol) {\n                groupNode.groupData[col.getColId()] = groupInfo.key;\n            }\n        });\n    }\n    getChildrenMappedKey(key, rowGroupColumn) {\n        if (rowGroupColumn) {\n            // grouping by columns\n            return rowGroupColumn.getId() + '-' + key;\n        }\n        // tree data - we don't have rowGroupColumns\n        return key;\n    }\n    setExpandedInitialValue(details, groupNode) {\n        // if pivoting the leaf group is never expanded as we do not show leaf rows\n        if (details.pivotMode && groupNode.leafGroup) {\n            groupNode.expanded = false;\n            return;\n        }\n        // use callback if exists\n        const userCallback = this.gridOptionsService.getCallback('isGroupOpenByDefault');\n        if (userCallback) {\n            const params = {\n                rowNode: groupNode,\n                field: groupNode.field,\n                key: groupNode.key,\n                level: groupNode.level,\n                rowGroupColumn: groupNode.rowGroupColumn\n            };\n            groupNode.expanded = userCallback(params) == true;\n            return;\n        }\n        // use expandByDefault if exists\n        const { expandByDefault } = details;\n        if (details.expandByDefault === -1) {\n            groupNode.expanded = true;\n            return;\n        }\n        // otherwise\n        groupNode.expanded = groupNode.level < expandByDefault;\n    }\n    getGroupInfo(rowNode, details) {\n        if (this.usingTreeData) {\n            return this.getGroupInfoFromCallback(rowNode);\n        }\n        return this.getGroupInfoFromGroupColumns(rowNode, details);\n    }\n    getGroupInfoFromCallback(rowNode) {\n        const keys = this.getDataPath ? this.getDataPath(rowNode.data) : null;\n        if (keys === null || keys === undefined || keys.length === 0) {\n            _.doOnce(() => console.warn(`AG Grid: getDataPath() should not return an empty path for data`, rowNode.data), 'groupStage.getGroupInfoFromCallback');\n        }\n        const groupInfoMapper = (key) => ({ key, field: null, rowGroupColumn: null });\n        return keys ? keys.map(groupInfoMapper) : [];\n    }\n    getGroupInfoFromGroupColumns(rowNode, details) {\n        const res = [];\n        details.groupedCols.forEach(groupCol => {\n            let key = this.valueService.getKeyForNode(groupCol, rowNode);\n            let keyExists = key !== null && key !== undefined && key !== '';\n            // unbalanced tree and pivot mode don't work together - not because of the grid, it doesn't make\n            // mathematical sense as you are building up a cube. so if pivot mode, we put in a blank key where missing.\n            // this keeps the tree balanced and hence can be represented as a group.\n            const createGroupForEmpty = details.pivotMode || !this.gridOptionsService.is('groupAllowUnbalanced');\n            if (createGroupForEmpty && !keyExists) {\n                key = '';\n                keyExists = true;\n            }\n            if (keyExists) {\n                const item = {\n                    key: key,\n                    field: groupCol.getColDef().field,\n                    rowGroupColumn: groupCol\n                };\n                res.push(item);\n            }\n        });\n        return res;\n    }\n};\n__decorate$2n([\n    Autowired('columnModel')\n], GroupStage.prototype, \"columnModel\", void 0);\n__decorate$2n([\n    Autowired('selectableService')\n], GroupStage.prototype, \"selectableService\", void 0);\n__decorate$2n([\n    Autowired('valueService')\n], GroupStage.prototype, \"valueService\", void 0);\n__decorate$2n([\n    Autowired('beans')\n], GroupStage.prototype, \"beans\", void 0);\n__decorate$2n([\n    Autowired('selectionService')\n], GroupStage.prototype, \"selectionService\", void 0);\n__decorate$2n([\n    PostConstruct\n], GroupStage.prototype, \"postConstruct\", null);\nGroupStage = __decorate$2n([\n    Bean('groupStage')\n], GroupStage);\n\nvar __decorate$2m = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PivotColDefService_1;\nlet PivotColDefService = PivotColDefService_1 = class PivotColDefService extends BeanStub {\n    createPivotColumnDefs(uniqueValues) {\n        // this is passed to the columnModel, to configure the columns and groups we show\n        const pivotColumns = this.columnModel.getPivotColumns();\n        const valueColumns = this.columnModel.getValueColumns();\n        const levelsDeep = pivotColumns.length;\n        const pivotColumnGroupDefs = this.recursiveBuildGroup(0, uniqueValues, [], levelsDeep, pivotColumns);\n        function extractColDefs(input, arr = []) {\n            input.forEach((def) => {\n                if (def.children !== undefined) {\n                    extractColDefs(def.children, arr);\n                }\n                else {\n                    arr.push(def);\n                }\n            });\n            return arr;\n        }\n        const pivotColumnDefs = extractColDefs(pivotColumnGroupDefs);\n        // additional columns that contain the aggregated total for each value column per row\n        this.addRowGroupTotals(pivotColumnGroupDefs, pivotColumnDefs, valueColumns);\n        // additional group columns that contain child totals for each collapsed child column / group\n        this.addExpandablePivotGroups(pivotColumnGroupDefs, pivotColumnDefs);\n        // additional group columns that contain an aggregated total across all child columns\n        this.addPivotTotalsToGroups(pivotColumnGroupDefs, pivotColumnDefs);\n        // we clone, so the colDefs in pivotColumnsGroupDefs and pivotColumnDefs are not shared. this is so that\n        // any changes the user makes (via processSecondaryColumnDefinitions) don't impact the internal aggregations,\n        // as these use the col defs also\n        const pivotColumnDefsClone = pivotColumnDefs.map(colDef => _.cloneObject(colDef));\n        return {\n            pivotColumnGroupDefs: pivotColumnGroupDefs,\n            pivotColumnDefs: pivotColumnDefsClone\n        };\n    }\n    recursiveBuildGroup(index, uniqueValue, pivotKeys, maxDepth, primaryPivotColumns) {\n        const measureColumns = this.columnModel.getValueColumns();\n        if (index >= maxDepth) { // Base case - build the measure columns\n            return this.buildMeasureCols(pivotKeys);\n        }\n        // sort by either user provided comparator, or our own one\n        const primaryPivotColumnDefs = primaryPivotColumns[index].getColDef();\n        const comparator = this.headerNameComparator.bind(this, primaryPivotColumnDefs.pivotComparator);\n        // Base case for the compact layout, instead of recursing build the last layer of groups as measure columns instead\n        if (measureColumns.length === 1 && this.gridOptionsService.is('removePivotHeaderRowWhenSingleValueColumn') && index === maxDepth - 1) {\n            const leafCols = [];\n            _.iterateObject(uniqueValue, (key) => {\n                const newPivotKeys = [...pivotKeys, key];\n                leafCols.push(Object.assign(Object.assign({}, this.createColDef(measureColumns[0], key, newPivotKeys)), { columnGroupShow: 'open' }));\n            });\n            leafCols.sort(comparator);\n            return leafCols;\n        }\n        // Recursive case\n        const groups = [];\n        _.iterateObject(uniqueValue, (key, value) => {\n            const newPivotKeys = [...pivotKeys, key];\n            groups.push({\n                children: this.recursiveBuildGroup(index + 1, value, newPivotKeys, maxDepth, primaryPivotColumns),\n                headerName: key,\n                pivotKeys: newPivotKeys,\n                columnGroupShow: 'open',\n                groupId: this.generateColumnGroupId(newPivotKeys),\n            });\n        });\n        groups.sort(comparator);\n        return groups;\n    }\n    buildMeasureCols(pivotKeys) {\n        const measureColumns = this.columnModel.getValueColumns();\n        if (measureColumns.length === 0) {\n            // if no value columns selected, then we insert one blank column, so the user at least sees columns\n            // rendered. otherwise the grid would render with no columns (just empty groups) which would give the\n            // impression that the grid is broken\n            return [this.createColDef(null, '-', pivotKeys)];\n        }\n        return measureColumns.map((measureCol) => {\n            const columnName = this.columnModel.getDisplayNameForColumn(measureCol, 'header');\n            return Object.assign(Object.assign({}, this.createColDef(measureCol, columnName, pivotKeys)), { columnGroupShow: 'open' });\n        });\n    }\n    ;\n    addExpandablePivotGroups(pivotColumnGroupDefs, pivotColumnDefs) {\n        if (this.gridOptionsService.is('suppressExpandablePivotGroups') ||\n            this.gridOptionsService.get('pivotColumnGroupTotals')) {\n            return;\n        }\n        const recursivelyAddSubTotals = (groupDef, currentPivotColumnDefs, acc) => {\n            const group = groupDef;\n            if (group.children) {\n                const childAcc = new Map();\n                group.children.forEach((grp) => {\n                    recursivelyAddSubTotals(grp, currentPivotColumnDefs, childAcc);\n                });\n                const firstGroup = !group.children.some(child => child.children);\n                this.columnModel.getValueColumns().forEach(valueColumn => {\n                    const columnName = this.columnModel.getDisplayNameForColumn(valueColumn, 'header');\n                    const totalColDef = this.createColDef(valueColumn, columnName, groupDef.pivotKeys);\n                    totalColDef.pivotTotalColumnIds = childAcc.get(valueColumn.getColId());\n                    totalColDef.columnGroupShow = 'closed';\n                    totalColDef.aggFunc = valueColumn.getAggFunc();\n                    if (!firstGroup) {\n                        // add total colDef to group and pivot colDefs array\n                        const children = groupDef.children;\n                        children.push(totalColDef);\n                        currentPivotColumnDefs.push(totalColDef);\n                    }\n                });\n                this.merge(acc, childAcc);\n            }\n            else {\n                const def = groupDef;\n                // check that value column exists, i.e. aggFunc is supplied\n                if (!def.pivotValueColumn) {\n                    return;\n                }\n                const pivotValueColId = def.pivotValueColumn.getColId();\n                const arr = acc.has(pivotValueColId) ? acc.get(pivotValueColId) : [];\n                arr.push(def.colId);\n                acc.set(pivotValueColId, arr);\n            }\n        };\n        pivotColumnGroupDefs.forEach((groupDef) => {\n            recursivelyAddSubTotals(groupDef, pivotColumnDefs, new Map());\n        });\n    }\n    addPivotTotalsToGroups(pivotColumnGroupDefs, pivotColumnDefs) {\n        if (!this.gridOptionsService.get('pivotColumnGroupTotals')) {\n            return;\n        }\n        const insertAfter = this.gridOptionsService.get('pivotColumnGroupTotals') === 'after';\n        const valueCols = this.columnModel.getValueColumns();\n        const aggFuncs = valueCols.map(valueCol => valueCol.getAggFunc());\n        // don't add pivot totals if there is less than 1 aggFunc or they are not all the same\n        if (!aggFuncs || aggFuncs.length < 1 || !this.sameAggFuncs(aggFuncs)) {\n            // console.warn('AG Grid: aborting adding pivot total columns - value columns require same aggFunc');\n            return;\n        }\n        // arbitrarily select a value column to use as a template for pivot columns\n        const valueColumn = valueCols[0];\n        pivotColumnGroupDefs.forEach((groupDef) => {\n            this.recursivelyAddPivotTotal(groupDef, pivotColumnDefs, valueColumn, insertAfter);\n        });\n    }\n    recursivelyAddPivotTotal(groupDef, pivotColumnDefs, valueColumn, insertAfter) {\n        const group = groupDef;\n        if (!group.children) {\n            const def = groupDef;\n            return def.colId ? [def.colId] : null;\n        }\n        let colIds = [];\n        // need to recurse children first to obtain colIds used in the aggregation stage\n        group.children\n            .forEach((grp) => {\n            const childColIds = this.recursivelyAddPivotTotal(grp, pivotColumnDefs, valueColumn, insertAfter);\n            if (childColIds) {\n                colIds = colIds.concat(childColIds);\n            }\n        });\n        // only add total colDef if there is more than 1 child node\n        if (group.children.length > 1) {\n            const localeTextFunc = this.localeService.getLocaleTextFunc();\n            const headerName = localeTextFunc('pivotColumnGroupTotals', 'Total');\n            //create total colDef using an arbitrary value column as a template\n            const totalColDef = this.createColDef(valueColumn, headerName, groupDef.pivotKeys, true);\n            totalColDef.pivotTotalColumnIds = colIds;\n            totalColDef.aggFunc = valueColumn.getAggFunc();\n            // add total colDef to group and pivot colDefs array\n            const children = groupDef.children;\n            insertAfter ? children.push(totalColDef) : children.unshift(totalColDef);\n            pivotColumnDefs.push(totalColDef);\n        }\n        return colIds;\n    }\n    addRowGroupTotals(pivotColumnGroupDefs, pivotColumnDefs, valueColumns) {\n        if (!this.gridOptionsService.get('pivotRowTotals')) {\n            return;\n        }\n        const insertAfter = this.gridOptionsService.get('pivotRowTotals') === 'after';\n        // order of row group totals depends on position\n        const valueCols = insertAfter ? valueColumns.slice() : valueColumns.slice().reverse();\n        for (let i = 0; i < valueCols.length; i++) {\n            const valueCol = valueCols[i];\n            let colIds = [];\n            pivotColumnGroupDefs.forEach((groupDef) => {\n                colIds = colIds.concat(this.extractColIdsForValueColumn(groupDef, valueCol));\n            });\n            const withGroup = valueCols.length > 1 || !this.gridOptionsService.is('removePivotHeaderRowWhenSingleValueColumn');\n            this.createRowGroupTotal(pivotColumnGroupDefs, pivotColumnDefs, valueCol, colIds, insertAfter, withGroup);\n        }\n    }\n    extractColIdsForValueColumn(groupDef, valueColumn) {\n        const group = groupDef;\n        if (!group.children) {\n            const colDef = group;\n            return colDef.pivotValueColumn === valueColumn && colDef.colId ? [colDef.colId] : [];\n        }\n        let colIds = [];\n        group.children\n            .forEach((grp) => {\n            this.extractColIdsForValueColumn(grp, valueColumn);\n            const childColIds = this.extractColIdsForValueColumn(grp, valueColumn);\n            colIds = colIds.concat(childColIds);\n        });\n        return colIds;\n    }\n    createRowGroupTotal(parentChildren, pivotColumnDefs, valueColumn, colIds, insertAfter, addGroup) {\n        const measureColumns = this.columnModel.getValueColumns();\n        let colDef;\n        if (measureColumns.length === 0) {\n            colDef = this.createColDef(null, '-', []);\n        }\n        else {\n            const columnName = this.columnModel.getDisplayNameForColumn(valueColumn, 'header');\n            colDef = this.createColDef(valueColumn, columnName, []);\n            colDef.pivotTotalColumnIds = colIds;\n        }\n        colDef.colId = PivotColDefService_1.PIVOT_ROW_TOTAL_PREFIX + colDef.colId;\n        pivotColumnDefs.push(colDef);\n        const valueGroup = addGroup ? {\n            children: [colDef],\n            pivotKeys: [],\n            groupId: `${PivotColDefService_1.PIVOT_ROW_TOTAL_PREFIX}_pivotGroup_${valueColumn.getColId()}`,\n        } : colDef;\n        insertAfter ? parentChildren.push(valueGroup) : parentChildren.unshift(valueGroup);\n    }\n    createColDef(valueColumn, headerName, pivotKeys, totalColumn = false) {\n        const colDef = {};\n        // This is null when there are no measure columns and we're creating placeholder columns\n        if (valueColumn) {\n            const colDefToCopy = valueColumn.getColDef();\n            Object.assign(colDef, colDefToCopy);\n            // even if original column was hidden, we always show the pivot value column, otherwise it would be\n            // very confusing for people thinking the pivot is broken\n            colDef.hide = false;\n        }\n        colDef.headerName = headerName;\n        colDef.colId = this.generateColumnId(pivotKeys || [], valueColumn && !totalColumn ? valueColumn.getColId() : '');\n        // pivot columns repeat over field, so it makes sense to use the unique id instead. For example if you want to\n        // assign values to pinned bottom rows using setPinnedBottomRowData the value service will use this colId.\n        colDef.field = colDef.colId;\n        // this is to support using pinned rows, normally the data will be extracted from the aggData object using the colId\n        // however pinned rows still access the data object by field, this prevents values with dots from being treated as complex objects\n        colDef.valueGetter = (params) => { var _a; return (_a = params.data) === null || _a === void 0 ? void 0 : _a[params.colDef.field]; };\n        colDef.pivotKeys = pivotKeys;\n        colDef.pivotValueColumn = valueColumn;\n        if (colDef.filter === true) {\n            colDef.filter = 'agNumberColumnFilter';\n        }\n        return colDef;\n    }\n    sameAggFuncs(aggFuncs) {\n        if (aggFuncs.length == 1) {\n            return true;\n        }\n        //check if all aggFunc's match\n        for (let i = 1; i < aggFuncs.length; i++) {\n            if (aggFuncs[i] !== aggFuncs[0]) {\n                return false;\n            }\n        }\n        return true;\n    }\n    headerNameComparator(userComparator, a, b) {\n        if (userComparator) {\n            return userComparator(a.headerName, b.headerName);\n        }\n        else {\n            if (a.headerName && !b.headerName) {\n                return 1;\n            }\n            else if (!a.headerName && b.headerName) {\n                return -1;\n            }\n            // slightly naff here - just to satify typescript\n            // really should be &&, but if so ts complains\n            // the above if/else checks would deal with either being falsy, so at this stage if either are falsy, both are\n            // ..still naff though\n            if (!a.headerName || !b.headerName) {\n                return 0;\n            }\n            if (a.headerName < b.headerName) {\n                return -1;\n            }\n            if (a.headerName > b.headerName) {\n                return 1;\n            }\n            return 0;\n        }\n    }\n    merge(m1, m2) {\n        m2.forEach((value, key, map) => {\n            const existingList = m1.has(key) ? m1.get(key) : [];\n            const updatedList = [...existingList, ...value];\n            m1.set(key, updatedList);\n        });\n    }\n    generateColumnGroupId(pivotKeys) {\n        const pivotCols = this.columnModel.getPivotColumns().map((col) => col.getColId());\n        return `pivotGroup_${pivotCols.join('-')}_${pivotKeys.join('-')}`;\n    }\n    generateColumnId(pivotKeys, measureColumnId) {\n        const pivotCols = this.columnModel.getPivotColumns().map((col) => col.getColId());\n        return `pivot_${pivotCols.join('-')}_${pivotKeys.join('-')}_${measureColumnId}`;\n    }\n};\nPivotColDefService.PIVOT_ROW_TOTAL_PREFIX = 'PivotRowTotal_';\n__decorate$2m([\n    Autowired('columnModel')\n], PivotColDefService.prototype, \"columnModel\", void 0);\nPivotColDefService = PivotColDefService_1 = __decorate$2m([\n    Bean('pivotColDefService')\n], PivotColDefService);\n\nvar __decorate$2l = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet PivotStage = class PivotStage extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.uniqueValues = {};\n    }\n    execute(params) {\n        const changedPath = params.changedPath;\n        if (this.columnModel.isPivotActive()) {\n            this.executePivotOn(changedPath);\n        }\n        else {\n            this.executePivotOff(changedPath);\n        }\n    }\n    executePivotOff(changedPath) {\n        this.aggregationColumnsHashLastTime = null;\n        this.uniqueValues = {};\n        if (this.columnModel.isSecondaryColumnsPresent()) {\n            this.columnModel.setSecondaryColumns(null, \"rowModelUpdated\");\n            if (changedPath) {\n                changedPath.setInactive();\n            }\n        }\n    }\n    executePivotOn(changedPath) {\n        const uniqueValues = this.bucketUpRowNodes(changedPath);\n        const uniqueValuesChanged = this.setUniqueValues(uniqueValues);\n        const aggregationColumns = this.columnModel.getValueColumns();\n        const aggregationColumnsHash = aggregationColumns.map((column) => `${column.getId()}-${column.getColDef().headerName}`).join('#');\n        const aggregationFuncsHash = aggregationColumns.map((column) => column.getAggFunc().toString()).join('#');\n        const aggregationColumnsChanged = this.aggregationColumnsHashLastTime !== aggregationColumnsHash;\n        const aggregationFuncsChanged = this.aggregationFuncsHashLastTime !== aggregationFuncsHash;\n        this.aggregationColumnsHashLastTime = aggregationColumnsHash;\n        this.aggregationFuncsHashLastTime = aggregationFuncsHash;\n        const groupColumnsHash = this.columnModel.getRowGroupColumns().map((column) => column.getId()).join('#');\n        const groupColumnsChanged = groupColumnsHash !== this.groupColumnsHashLastTime;\n        this.groupColumnsHashLastTime = groupColumnsHash;\n        if (uniqueValuesChanged || aggregationColumnsChanged || groupColumnsChanged || aggregationFuncsChanged) {\n            const { pivotColumnGroupDefs, pivotColumnDefs } = this.pivotColDefService.createPivotColumnDefs(this.uniqueValues);\n            this.pivotColumnDefs = pivotColumnDefs;\n            this.columnModel.setSecondaryColumns(pivotColumnGroupDefs, \"rowModelUpdated\");\n            // because the secondary columns have changed, then the aggregation needs to visit the whole\n            // tree again, so we make the changedPath not active, to force aggregation to visit all paths.\n            if (changedPath) {\n                changedPath.setInactive();\n            }\n        }\n    }\n    setUniqueValues(newValues) {\n        const json1 = JSON.stringify(newValues);\n        const json2 = JSON.stringify(this.uniqueValues);\n        const uniqueValuesChanged = json1 !== json2;\n        // we only continue the below if the unique values are different, as otherwise\n        // the result will be the same as the last time we did it\n        if (uniqueValuesChanged) {\n            this.uniqueValues = newValues;\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    bucketUpRowNodes(changedPath) {\n        // accessed from inside inner function\n        const uniqueValues = {};\n        // ensure childrenMapped is cleared, as if a node has been filtered out it should not have mapped children.\n        changedPath.forEachChangedNodeDepthFirst(node => {\n            if (node.leafGroup) {\n                node.childrenMapped = null;\n            }\n        });\n        const recursivelyBucketFilteredChildren = (node) => {\n            var _a;\n            if (node.leafGroup) {\n                this.bucketRowNode(node, uniqueValues);\n            }\n            else {\n                (_a = node.childrenAfterFilter) === null || _a === void 0 ? void 0 : _a.forEach(recursivelyBucketFilteredChildren);\n            }\n        };\n        changedPath.executeFromRootNode(recursivelyBucketFilteredChildren);\n        return uniqueValues;\n    }\n    bucketRowNode(rowNode, uniqueValues) {\n        const pivotColumns = this.columnModel.getPivotColumns();\n        if (pivotColumns.length === 0) {\n            rowNode.childrenMapped = null;\n        }\n        else {\n            rowNode.childrenMapped = this.bucketChildren(rowNode.childrenAfterFilter, pivotColumns, 0, uniqueValues);\n        }\n        if (rowNode.sibling) {\n            rowNode.sibling.childrenMapped = rowNode.childrenMapped;\n        }\n    }\n    bucketChildren(children, pivotColumns, pivotIndex, uniqueValues) {\n        const mappedChildren = {};\n        const pivotColumn = pivotColumns[pivotIndex];\n        // map the children out based on the pivot column\n        children.forEach((child) => {\n            let key = this.valueService.getKeyForNode(pivotColumn, child);\n            if (_.missing(key)) {\n                key = '';\n            }\n            if (!uniqueValues[key]) {\n                uniqueValues[key] = {};\n            }\n            if (!mappedChildren[key]) {\n                mappedChildren[key] = [];\n            }\n            mappedChildren[key].push(child);\n        });\n        // if it's the last pivot column, return as is, otherwise go one level further in the map\n        if (pivotIndex === pivotColumns.length - 1) {\n            return mappedChildren;\n        }\n        else {\n            const result = {};\n            _.iterateObject(mappedChildren, (key, value) => {\n                result[key] = this.bucketChildren(value, pivotColumns, pivotIndex + 1, uniqueValues[key]);\n            });\n            return result;\n        }\n    }\n    getPivotColumnDefs() {\n        return this.pivotColumnDefs;\n    }\n};\n__decorate$2l([\n    Autowired('valueService')\n], PivotStage.prototype, \"valueService\", void 0);\n__decorate$2l([\n    Autowired('columnModel')\n], PivotStage.prototype, \"columnModel\", void 0);\n__decorate$2l([\n    Autowired('pivotColDefService')\n], PivotStage.prototype, \"pivotColDefService\", void 0);\nPivotStage = __decorate$2l([\n    Bean('pivotStage')\n], PivotStage);\n\nvar __decorate$2k = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar AggFuncService_1;\n// @ts-ignore\nconst AGBigInt = typeof BigInt === 'undefined' ? null : BigInt;\nlet AggFuncService = AggFuncService_1 = class AggFuncService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.aggFuncsMap = {};\n        this.initialised = false;\n    }\n    init() {\n        if (this.initialised) {\n            return;\n        }\n        this.initialiseWithDefaultAggregations();\n        this.addAggFuncs(this.gridOptionsService.get('aggFuncs'));\n    }\n    initialiseWithDefaultAggregations() {\n        this.aggFuncsMap[AggFuncService_1.AGG_SUM] = aggSum;\n        this.aggFuncsMap[AggFuncService_1.AGG_FIRST] = aggFirst;\n        this.aggFuncsMap[AggFuncService_1.AGG_LAST] = aggLast;\n        this.aggFuncsMap[AggFuncService_1.AGG_MIN] = aggMin;\n        this.aggFuncsMap[AggFuncService_1.AGG_MAX] = aggMax;\n        this.aggFuncsMap[AggFuncService_1.AGG_COUNT] = aggCount;\n        this.aggFuncsMap[AggFuncService_1.AGG_AVG] = aggAvg;\n        this.initialised = true;\n    }\n    isAggFuncPossible(column, func) {\n        const allKeys = this.getFuncNames(column);\n        const allowed = _.includes(allKeys, func);\n        const funcExists = _.exists(this.aggFuncsMap[func]);\n        return allowed && funcExists;\n    }\n    getDefaultAggFunc(column) {\n        const defaultAgg = column.getColDef().defaultAggFunc;\n        if (_.exists(defaultAgg) && this.isAggFuncPossible(column, defaultAgg)) {\n            return defaultAgg;\n        }\n        if (this.isAggFuncPossible(column, AggFuncService_1.AGG_SUM)) {\n            return AggFuncService_1.AGG_SUM;\n        }\n        const allKeys = this.getFuncNames(column);\n        return _.existsAndNotEmpty(allKeys) ? allKeys[0] : null;\n    }\n    addAggFuncs(aggFuncs) {\n        _.iterateObject(aggFuncs, this.addAggFunc.bind(this));\n    }\n    addAggFunc(key, aggFunc) {\n        this.init();\n        this.aggFuncsMap[key] = aggFunc;\n    }\n    getAggFunc(name) {\n        this.init();\n        return this.aggFuncsMap[name];\n    }\n    getFuncNames(column) {\n        const userAllowedFuncs = column.getColDef().allowedAggFuncs;\n        return userAllowedFuncs == null ? Object.keys(this.aggFuncsMap).sort() : userAllowedFuncs;\n    }\n    clear() {\n        this.aggFuncsMap = {};\n    }\n};\nAggFuncService.AGG_SUM = 'sum';\nAggFuncService.AGG_FIRST = 'first';\nAggFuncService.AGG_LAST = 'last';\nAggFuncService.AGG_MIN = 'min';\nAggFuncService.AGG_MAX = 'max';\nAggFuncService.AGG_COUNT = 'count';\nAggFuncService.AGG_AVG = 'avg';\n__decorate$2k([\n    PostConstruct\n], AggFuncService.prototype, \"init\", null);\nAggFuncService = AggFuncService_1 = __decorate$2k([\n    Bean('aggFuncService')\n], AggFuncService);\nfunction aggSum(params) {\n    const { values } = params;\n    let result = null; // the logic ensures that we never combine bigint arithmetic with numbers, but TS is hard to please\n    // for optimum performance, we use a for loop here rather than calling any helper methods or using functional code\n    for (let i = 0; i < values.length; i++) {\n        const value = values[i];\n        if (typeof value === 'number') {\n            if (result === null) {\n                result = value;\n            }\n            else {\n                if (AGBigInt) {\n                    result += typeof result === 'number' ? value : AGBigInt(value);\n                }\n                else {\n                    result += value;\n                }\n            }\n        }\n        else if (typeof value === 'bigint') {\n            if (result === null) {\n                result = value;\n            }\n            else {\n                result = (typeof result === 'bigint' ? result : AGBigInt(result)) + value;\n            }\n        }\n    }\n    return result;\n}\nfunction aggFirst(params) {\n    return params.values.length > 0 ? params.values[0] : null;\n}\nfunction aggLast(params) {\n    return params.values.length > 0 ? _.last(params.values) : null;\n}\nfunction aggMin(params) {\n    const { values } = params;\n    let result = null;\n    // for optimum performance, we use a for loop here rather than calling any helper methods or using functional code\n    for (let i = 0; i < values.length; i++) {\n        const value = values[i];\n        if ((typeof value === 'number' || typeof value === 'bigint') && (result === null || result > value)) {\n            result = value;\n        }\n    }\n    return result;\n}\nfunction aggMax(params) {\n    const { values } = params;\n    let result = null;\n    // for optimum performance, we use a for loop here rather than calling any helper methods or using functional code\n    for (let i = 0; i < values.length; i++) {\n        const value = values[i];\n        if ((typeof value === 'number' || typeof value === 'bigint') && (result === null || result < value)) {\n            result = value;\n        }\n    }\n    return result;\n}\nfunction aggCount(params) {\n    const { values } = params;\n    let result = 0;\n    // for optimum performance, we use a for loop here rather than calling any helper methods or using functional code\n    for (let i = 0; i < values.length; i++) {\n        const value = values[i];\n        // check if the value is from a group, in which case use the group's count\n        result += value != null && typeof value.value === 'number' ? value.value : 1;\n    }\n    return result;\n}\n// the average function is tricky as the multiple levels require weighted averages\n// for the non-leaf node aggregations.\nfunction aggAvg(params) {\n    var _a, _b, _c;\n    const { values } = params;\n    let sum = 0; // the logic ensures that we never combine bigint arithmetic with numbers, but TS is hard to please\n    let count = 0;\n    // for optimum performance, we use a for loop here rather than calling any helper methods or using functional code\n    for (let i = 0; i < values.length; i++) {\n        const currentValue = values[i];\n        let valueToAdd = null;\n        if (typeof currentValue === 'number' || typeof currentValue === 'bigint') {\n            valueToAdd = currentValue;\n            count++;\n        }\n        else if (currentValue != null && (typeof currentValue.value === 'number' || typeof currentValue.value === 'bigint') && typeof currentValue.count === 'number') {\n            // we are aggregating groups, so we take the aggregated values to calculated a weighted average\n            if (AGBigInt) {\n                valueToAdd = currentValue.value * (typeof currentValue.value === 'number' ? currentValue.count : AGBigInt(currentValue.count));\n            }\n            else {\n                valueToAdd = currentValue.value * currentValue.count;\n            }\n            count += currentValue.count;\n        }\n        if (typeof valueToAdd === 'number') {\n            if (AGBigInt) {\n                sum += typeof sum === 'number' ? valueToAdd : AGBigInt(valueToAdd);\n            }\n            else {\n                sum += valueToAdd;\n            }\n        }\n        else if (typeof valueToAdd === 'bigint') {\n            sum = (typeof sum === 'bigint' ? sum : AGBigInt(sum)) + valueToAdd;\n        }\n    }\n    let value = null;\n    // avoid divide by zero error\n    if (count > 0) {\n        if (AGBigInt) {\n            value = sum / (typeof sum === 'number' ? count : AGBigInt(count));\n        }\n        else {\n            value = sum / count;\n        }\n    }\n    // the previous aggregation data\n    const existingAggData = (_b = (_a = params.rowNode) === null || _a === void 0 ? void 0 : _a.aggData) === null || _b === void 0 ? void 0 : _b[(_c = params.column) === null || _c === void 0 ? void 0 : _c.getColId()];\n    if (existingAggData && existingAggData.count === count && existingAggData.value === value) {\n        // the underlying values haven't changed, return the old object to avoid triggering change detection\n        return existingAggData;\n    }\n    // the result will be an object. when this cell is rendered, only the avg is shown.\n    // however when this cell is part of another aggregation, the count is also needed\n    // to create a weighted average for the next level.\n    return {\n        count,\n        value,\n        // the grid by default uses toString to render values for an object, so this\n        // is a trick to get the default cellRenderer to display the avg value\n        toString: function () {\n            return typeof this.value === 'number' || typeof this.value === 'bigint' ? this.value.toString() : '';\n        },\n        // used for sorting\n        toNumber: function () {\n            return this.value;\n        }\n    };\n}\n\nvar __decorate$2j = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass DropZoneColumnComp extends Component {\n    constructor(column, dragSourceDropTarget, ghost, dropZonePurpose, horizontal) {\n        super();\n        this.column = column;\n        this.dragSourceDropTarget = dragSourceDropTarget;\n        this.ghost = ghost;\n        this.dropZonePurpose = dropZonePurpose;\n        this.horizontal = horizontal;\n        this.popupShowing = false;\n    }\n    init() {\n        this.setTemplate(DropZoneColumnComp.TEMPLATE);\n        const eGui = this.getGui();\n        const isFunctionsReadOnly = this.gridOptionsService.is('functionsReadOnly');\n        this.addElementClasses(eGui);\n        this.addElementClasses(this.eDragHandle, 'drag-handle');\n        this.addElementClasses(this.eText, 'text');\n        this.addElementClasses(this.eButton, 'button');\n        this.eDragHandle.appendChild(_.createIconNoSpan('columnDrag', this.gridOptionsService));\n        this.eButton.appendChild(_.createIconNoSpan('cancel', this.gridOptionsService));\n        this.setupSort();\n        this.displayName = this.columnModel.getDisplayNameForColumn(this.column, 'columnDrop');\n        this.setupComponents();\n        if (!this.ghost && !isFunctionsReadOnly) {\n            this.addDragSource();\n        }\n        this.setupAria();\n        this.addManagedListener(this.eventService, Column.EVENT_SORT_CHANGED, () => {\n            this.setupAria();\n        });\n        this.setupTooltip();\n    }\n    setupAria() {\n        const translate = this.localeService.getLocaleTextFunc();\n        const { name, aggFuncName } = this.getColumnAndAggFuncName();\n        const aggSeparator = translate('ariaDropZoneColumnComponentAggFuncSeperator', ' of ');\n        const sortDirection = {\n            asc: translate('ariaDropZoneColumnComponentSortAscending', 'ascending'),\n            desc: translate('ariaDropZoneColumnComponentSortDescending', 'descending'),\n        };\n        const columnSort = this.column.getSort();\n        const isSortSuppressed = this.gridOptionsService.is('rowGroupPanelSuppressSort');\n        const ariaInstructions = [\n            [\n                aggFuncName && `${aggFuncName}${aggSeparator}`,\n                name,\n                this.isGroupingZone() && !isSortSuppressed && columnSort && `, ${sortDirection[columnSort]}`\n            ].filter(part => !!part).join(''),\n        ];\n        const isFunctionsReadOnly = this.gridOptionsService.is('functionsReadOnly');\n        if (this.isAggregationZone() && !isFunctionsReadOnly) {\n            const aggregationMenuAria = translate('ariaDropZoneColumnValueItemDescription', 'Press ENTER to change the aggregation type');\n            ariaInstructions.push(aggregationMenuAria);\n        }\n        if (this.isGroupingZone() && this.column.getColDef().sortable && !isSortSuppressed) {\n            const sortProgressAria = translate('ariaDropZoneColumnGroupItemDescription', 'Press ENTER to sort');\n            ariaInstructions.push(sortProgressAria);\n        }\n        const deleteAria = translate('ariaDropZoneColumnComponentDescription', 'Press DELETE to remove');\n        ariaInstructions.push(deleteAria);\n        _.setAriaLabel(this.getGui(), ariaInstructions.join('. '));\n    }\n    setupTooltip() {\n        const refresh = () => {\n            const newTooltipText = this.column.getColDef().headerTooltip;\n            this.setTooltip(newTooltipText);\n        };\n        refresh();\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, refresh);\n    }\n    setupSort() {\n        const canSort = this.column.getColDef().sortable;\n        const isGroupingZone = this.isGroupingZone();\n        if (!canSort || !isGroupingZone) {\n            return;\n        }\n        if (!this.gridOptionsService.is('rowGroupPanelSuppressSort')) {\n            this.eSortIndicator.setupSort(this.column, true);\n            const performSort = (event) => {\n                event.preventDefault();\n                const sortUsingCtrl = this.gridOptionsService.get('multiSortKey') === 'ctrl';\n                const multiSort = sortUsingCtrl ? (event.ctrlKey || event.metaKey) : event.shiftKey;\n                this.sortController.progressSort(this.column, multiSort, 'uiColumnSorted');\n            };\n            this.addGuiEventListener('click', performSort);\n            this.addGuiEventListener('keydown', (e) => {\n                const isEnter = e.key === KeyCode.ENTER;\n                if (isEnter && this.isGroupingZone()) {\n                    performSort(e);\n                }\n            });\n        }\n    }\n    addDragSource() {\n        const dragSource = {\n            type: DragSourceType.ToolPanel,\n            eElement: this.eDragHandle,\n            defaultIconName: DragAndDropService.ICON_HIDE,\n            getDragItem: () => this.createDragItem(),\n            dragItemName: this.displayName,\n            dragSourceDropTarget: this.dragSourceDropTarget\n        };\n        this.dragAndDropService.addDragSource(dragSource, true);\n        this.addDestroyFunc(() => this.dragAndDropService.removeDragSource(dragSource));\n    }\n    createDragItem() {\n        const visibleState = {};\n        visibleState[this.column.getId()] = this.column.isVisible();\n        return {\n            columns: [this.column],\n            visibleState: visibleState\n        };\n    }\n    setupComponents() {\n        this.setTextValue();\n        this.setupRemove();\n        if (this.ghost) {\n            this.addCssClass('ag-column-drop-cell-ghost');\n        }\n        if (this.isAggregationZone() && !this.gridOptionsService.is('functionsReadOnly')) {\n            this.addGuiEventListener('click', this.onShowAggFuncSelection.bind(this));\n        }\n    }\n    setupRemove() {\n        _.setDisplayed(this.eButton, !this.gridOptionsService.is('functionsReadOnly'));\n        const agEvent = { type: DropZoneColumnComp.EVENT_COLUMN_REMOVE };\n        this.addGuiEventListener('keydown', (e) => {\n            const isEnter = e.key === KeyCode.ENTER;\n            const isDelete = e.key === KeyCode.DELETE;\n            if (isDelete) {\n                e.preventDefault();\n                this.dispatchEvent(agEvent);\n            }\n            if (isEnter && this.isAggregationZone() && !this.gridOptionsService.is('functionsReadOnly')) {\n                e.preventDefault();\n                this.onShowAggFuncSelection();\n            }\n        });\n        this.addManagedListener(this.eButton, 'click', (mouseEvent) => {\n            this.dispatchEvent(agEvent);\n            mouseEvent.stopPropagation();\n        });\n        const touchListener = new TouchListener(this.eButton);\n        this.addManagedListener(touchListener, TouchListener.EVENT_TAP, () => {\n            this.dispatchEvent(agEvent);\n        });\n        this.addDestroyFunc(touchListener.destroy.bind(touchListener));\n    }\n    getColumnAndAggFuncName() {\n        const name = this.displayName;\n        let aggFuncName = '';\n        if (this.isAggregationZone()) {\n            const aggFunc = this.column.getAggFunc();\n            // if aggFunc is a string, we can use it, but if it's a function, then we swap with 'func'\n            const aggFuncString = typeof aggFunc === 'string' ? aggFunc : 'agg';\n            const localeTextFunc = this.localeService.getLocaleTextFunc();\n            aggFuncName = localeTextFunc(aggFuncString, aggFuncString);\n        }\n        return { name, aggFuncName };\n    }\n    setTextValue() {\n        const { name, aggFuncName } = this.getColumnAndAggFuncName();\n        const displayValue = this.isAggregationZone() ? `${aggFuncName}(${name})` : name;\n        const displayValueSanitised = _.escapeString(displayValue);\n        this.eText.innerHTML = displayValueSanitised;\n    }\n    onShowAggFuncSelection() {\n        if (this.popupShowing) {\n            return;\n        }\n        this.popupShowing = true;\n        const virtualList = new VirtualList('select-agg-func');\n        const rows = this.aggFuncService.getFuncNames(this.column);\n        const eGui = this.getGui();\n        const virtualListGui = virtualList.getGui();\n        virtualList.setModel({\n            getRow: function (index) { return rows[index]; },\n            getRowCount: function () { return rows.length; }\n        });\n        this.getContext().createBean(virtualList);\n        const ePopup = _.loadTemplate(/* html*/ `<div class=\"ag-select-agg-func-popup\"></div>`);\n        ePopup.style.top = '0px';\n        ePopup.style.left = '0px';\n        ePopup.appendChild(virtualListGui);\n        // ePopup.style.height = this.gridOptionsService.getAggFuncPopupHeight() + 'px';\n        ePopup.style.width = `${eGui.clientWidth}px`;\n        const popupHiddenFunc = () => {\n            this.destroyBean(virtualList);\n            this.popupShowing = false;\n            eGui.focus();\n        };\n        const translate = this.localeService.getLocaleTextFunc();\n        const addPopupRes = this.popupService.addPopup({\n            modal: true,\n            eChild: ePopup,\n            closeOnEsc: true,\n            closedCallback: popupHiddenFunc,\n            ariaLabel: translate('ariaLabelAggregationFunction', 'Aggregation Function')\n        });\n        if (addPopupRes) {\n            virtualList.setComponentCreator(this.createAggSelect.bind(this, addPopupRes.hideFunc));\n        }\n        virtualList.addGuiEventListener('keydown', (e) => {\n            if (e.key === KeyCode.ENTER || e.key === KeyCode.SPACE) {\n                const row = virtualList.getLastFocusedRow();\n                if (row == null) {\n                    return;\n                }\n                const comp = virtualList.getComponentAt(row);\n                if (comp) {\n                    comp.selectItem();\n                }\n            }\n        });\n        this.popupService.positionPopupByComponent({\n            type: 'aggFuncSelect',\n            eventSource: eGui,\n            ePopup: ePopup,\n            keepWithinBounds: true,\n            column: this.column,\n            position: 'under'\n        });\n        virtualList.refresh();\n        let rowToFocus = rows.findIndex(r => r === this.column.getAggFunc());\n        if (rowToFocus === -1) {\n            rowToFocus = 0;\n        }\n        virtualList.focusRow(rowToFocus);\n    }\n    createAggSelect(hidePopup, value) {\n        const itemSelected = () => {\n            hidePopup();\n            if (this.gridOptionsService.is('functionsPassive')) {\n                const event = {\n                    type: Events.EVENT_COLUMN_AGG_FUNC_CHANGE_REQUEST,\n                    columns: [this.column],\n                    aggFunc: value\n                };\n                this.eventService.dispatchEvent(event);\n            }\n            else {\n                this.columnModel.setColumnAggFunc(this.column, value, \"toolPanelDragAndDrop\");\n            }\n        };\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        const aggFuncString = value.toString();\n        const aggFuncStringTranslated = localeTextFunc(aggFuncString, aggFuncString);\n        const comp = new AggItemComp(itemSelected, aggFuncStringTranslated);\n        return comp;\n    }\n    addElementClasses(el, suffix) {\n        suffix = suffix ? `-${suffix}` : '';\n        const direction = this.horizontal ? 'horizontal' : 'vertical';\n        el.classList.add(`ag-column-drop-cell${suffix}`, `ag-column-drop-${direction}-cell${suffix}`);\n    }\n    isAggregationZone() {\n        return this.dropZonePurpose === 'aggregation';\n    }\n    isGroupingZone() {\n        return this.dropZonePurpose === 'rowGroup';\n    }\n}\nDropZoneColumnComp.EVENT_COLUMN_REMOVE = 'columnRemove';\nDropZoneColumnComp.TEMPLATE = `<span role=\"option\" tabindex=\"0\">\n          <span ref=\"eDragHandle\" class=\"ag-drag-handle ag-column-drop-cell-drag-handle\" role=\"presentation\"></span>\n          <span ref=\"eText\" class=\"ag-column-drop-cell-text\" aria-hidden=\"true\"></span>\n          <ag-sort-indicator ref=\"eSortIndicator\"></ag-sort-indicator>\n          <span ref=\"eButton\" class=\"ag-column-drop-cell-button\" role=\"presentation\"></span>\n        </span>`;\n__decorate$2j([\n    Autowired('dragAndDropService')\n], DropZoneColumnComp.prototype, \"dragAndDropService\", void 0);\n__decorate$2j([\n    Autowired('columnModel')\n], DropZoneColumnComp.prototype, \"columnModel\", void 0);\n__decorate$2j([\n    Autowired('popupService')\n], DropZoneColumnComp.prototype, \"popupService\", void 0);\n__decorate$2j([\n    Optional('aggFuncService')\n], DropZoneColumnComp.prototype, \"aggFuncService\", void 0);\n__decorate$2j([\n    Autowired('sortController')\n], DropZoneColumnComp.prototype, \"sortController\", void 0);\n__decorate$2j([\n    RefSelector('eText')\n], DropZoneColumnComp.prototype, \"eText\", void 0);\n__decorate$2j([\n    RefSelector('eDragHandle')\n], DropZoneColumnComp.prototype, \"eDragHandle\", void 0);\n__decorate$2j([\n    RefSelector('eButton')\n], DropZoneColumnComp.prototype, \"eButton\", void 0);\n__decorate$2j([\n    RefSelector('eSortIndicator')\n], DropZoneColumnComp.prototype, \"eSortIndicator\", void 0);\n__decorate$2j([\n    PostConstruct\n], DropZoneColumnComp.prototype, \"init\", null);\nclass AggItemComp extends Component {\n    constructor(itemSelected, value) {\n        super(/* html */ `<div class=\"ag-select-agg-func-item\"/>`);\n        this.selectItem = itemSelected;\n        this.getGui().innerText = value;\n        this.addGuiEventListener('click', this.selectItem);\n    }\n}\n\nvar __decorate$2i = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass BaseDropZonePanel extends Component {\n    constructor(horizontal, dropZonePurpose) {\n        super(/* html */ `<div class=\"ag-unselectable\" role=\"presentation\"></div>`);\n        this.horizontal = horizontal;\n        this.dropZonePurpose = dropZonePurpose;\n        this.state = BaseDropZonePanel.STATE_NOT_DRAGGING;\n        this.guiDestroyFunctions = [];\n        this.childColumnComponents = [];\n        this.resizeEnabled = false;\n        this.addElementClasses(this.getGui());\n        this.eColumnDropList = document.createElement('div');\n        this.addElementClasses(this.eColumnDropList, 'list');\n        _.setAriaRole(this.eColumnDropList, 'listbox');\n    }\n    isHorizontal() {\n        return this.horizontal;\n    }\n    toggleResizable(resizable) {\n        this.positionableFeature.setResizable(resizable ? { bottom: true } : false);\n        this.resizeEnabled = resizable;\n    }\n    setBeans(beans) {\n        this.beans = beans;\n    }\n    destroy() {\n        this.destroyGui();\n        super.destroy();\n    }\n    destroyGui() {\n        this.guiDestroyFunctions.forEach(func => func());\n        this.guiDestroyFunctions.length = 0;\n        this.childColumnComponents.length = 0;\n        _.clearElement(this.getGui());\n        _.clearElement(this.eColumnDropList);\n    }\n    init(params) {\n        this.params = params;\n        this.createManagedBean(new ManagedFocusFeature(this.getFocusableElement(), {\n            handleKeyDown: this.handleKeyDown.bind(this)\n        }));\n        this.addManagedListener(this.beans.eventService, Events.EVENT_NEW_COLUMNS_LOADED, this.refreshGui.bind(this));\n        this.addManagedPropertyListener('functionsReadOnly', this.refreshGui.bind(this));\n        this.setupDropTarget();\n        this.positionableFeature = new PositionableFeature(this.getGui(), { minHeight: 100 });\n        this.createManagedBean(this.positionableFeature);\n        // we don't know if this bean will be initialised before columnModel.\n        // if columnModel first, then below will work\n        // if columnModel second, then below will put blank in, and then above event gets first when columnModel is set up\n        this.refreshGui();\n        _.setAriaLabel(this.eColumnDropList, this.getAriaLabel());\n    }\n    handleKeyDown(e) {\n        const isVertical = !this.horizontal;\n        let isNext = e.key === KeyCode.DOWN;\n        let isPrevious = e.key === KeyCode.UP;\n        if (!isVertical) {\n            const isRtl = this.gridOptionsService.is('enableRtl');\n            isNext = (!isRtl && e.key === KeyCode.RIGHT) || (isRtl && e.key === KeyCode.LEFT);\n            isPrevious = (!isRtl && e.key === KeyCode.LEFT) || (isRtl && e.key === KeyCode.RIGHT);\n        }\n        if (!isNext && !isPrevious) {\n            return;\n        }\n        const el = this.focusService.findNextFocusableElement(this.getFocusableElement(), false, isPrevious);\n        if (el) {\n            e.preventDefault();\n            el.focus();\n        }\n    }\n    addElementClasses(el, suffix) {\n        suffix = suffix ? `-${suffix}` : '';\n        const direction = this.horizontal ? 'horizontal' : 'vertical';\n        el.classList.add(`ag-column-drop${suffix}`, `ag-column-drop-${direction}${suffix}`);\n    }\n    setupDropTarget() {\n        this.dropTarget = {\n            getContainer: this.getGui.bind(this),\n            getIconName: this.getIconName.bind(this),\n            onDragging: this.onDragging.bind(this),\n            onDragEnter: this.onDragEnter.bind(this),\n            onDragLeave: this.onDragLeave.bind(this),\n            onDragStop: this.onDragStop.bind(this),\n            isInterestedIn: this.isInterestedIn.bind(this)\n        };\n        this.beans.dragAndDropService.addDropTarget(this.dropTarget);\n    }\n    isInterestedIn(type) {\n        // not interested in row drags\n        return type === DragSourceType.HeaderCell || type === DragSourceType.ToolPanel;\n    }\n    checkInsertIndex(draggingEvent) {\n        const newIndex = this.getNewInsertIndex(draggingEvent);\n        // <0 happens when drag is no a direction we are interested in, eg drag is up/down but in horizontal panel\n        if (newIndex < 0) {\n            return false;\n        }\n        const changed = newIndex !== this.insertIndex;\n        if (changed) {\n            this.insertIndex = newIndex;\n        }\n        return changed;\n    }\n    getNewInsertIndex(draggingEvent) {\n        const mouseEvent = draggingEvent.event;\n        const mouseLocation = this.horizontal ? mouseEvent.clientX : mouseEvent.clientY;\n        const boundsList = this.childColumnComponents.map(col => (col.getGui().getBoundingClientRect()));\n        // find the non-ghost component we're hovering\n        const hoveredIndex = boundsList.findIndex(rect => (this.horizontal ? (rect.right > mouseLocation && rect.left < mouseLocation) : (rect.top < mouseLocation && rect.bottom > mouseLocation)));\n        // not hovering a non-ghost component\n        if (hoveredIndex === -1) {\n            const enableRtl = this.beans.gridOptionsService.is('enableRtl');\n            // if mouse is below or right of all components then new index should be placed last\n            const isLast = boundsList.every(rect => (mouseLocation > (this.horizontal ? rect.right : rect.bottom)));\n            if (isLast) {\n                return enableRtl && this.horizontal ? 0 : this.childColumnComponents.length;\n            }\n            // if mouse is above or left of all components, new index is first\n            const isFirst = boundsList.every(rect => (mouseLocation < (this.horizontal ? rect.left : rect.top)));\n            if (isFirst) {\n                return enableRtl && this.horizontal ? this.childColumnComponents.length : 0;\n            }\n            // must be hovering a ghost, don't change the index\n            return this.insertIndex;\n        }\n        // if the old index is equal to or less than the index of our new target\n        // we need to shift right, to insert after rather than before\n        if (this.insertIndex <= hoveredIndex) {\n            return hoveredIndex + 1;\n        }\n        return hoveredIndex;\n    }\n    checkDragStartedBySelf(draggingEvent) {\n        if (this.state !== BaseDropZonePanel.STATE_NOT_DRAGGING) {\n            return;\n        }\n        this.state = BaseDropZonePanel.STATE_REARRANGE_COLUMNS;\n        this.potentialDndColumns = draggingEvent.dragSource.getDragItem().columns || [];\n        this.refreshGui();\n        this.checkInsertIndex(draggingEvent);\n        this.refreshGui();\n    }\n    onDragging(draggingEvent) {\n        this.checkDragStartedBySelf(draggingEvent);\n        if (this.checkInsertIndex(draggingEvent)) {\n            this.refreshGui();\n        }\n    }\n    onDragEnter(draggingEvent) {\n        // this will contain all columns that are potential drops\n        const dragColumns = draggingEvent.dragSource.getDragItem().columns || [];\n        this.state = BaseDropZonePanel.STATE_NEW_COLUMNS_IN;\n        // take out columns that are not droppable\n        const goodDragColumns = dragColumns.filter(this.isColumnDroppable.bind(this));\n        if (goodDragColumns.length > 0) {\n            const hideColumnOnExit = this.isRowGroupPanel() && !this.gridOptionsService.is('suppressRowGroupHidesColumns') && !draggingEvent.fromNudge;\n            if (hideColumnOnExit) {\n                const dragItem = draggingEvent.dragSource.getDragItem();\n                const columns = dragItem.columns;\n                this.setColumnsVisible(columns, false, \"uiColumnDragged\");\n            }\n            this.potentialDndColumns = goodDragColumns;\n            this.checkInsertIndex(draggingEvent);\n            this.refreshGui();\n        }\n    }\n    setColumnsVisible(columns, visible, source = \"api\") {\n        if (columns) {\n            const allowedCols = columns.filter(c => !c.getColDef().lockVisible);\n            this.colModel.setColumnsVisible(allowedCols, visible, source);\n        }\n    }\n    isPotentialDndColumns() {\n        return _.existsAndNotEmpty(this.potentialDndColumns);\n    }\n    isRowGroupPanel() {\n        return this.dropZonePurpose === 'rowGroup';\n    }\n    onDragLeave(draggingEvent) {\n        // if the dragging started from us, we remove the group, however if it started\n        // some place else, then we don't, as it was only 'asking'\n        if (this.state === BaseDropZonePanel.STATE_REARRANGE_COLUMNS) {\n            const columns = draggingEvent.dragSource.getDragItem().columns || [];\n            this.removeColumns(columns);\n        }\n        if (this.isPotentialDndColumns()) {\n            const showColumnOnExit = this.isRowGroupPanel() && !this.gridOptionsService.is('suppressMakeColumnVisibleAfterUnGroup') && !draggingEvent.fromNudge;\n            if (showColumnOnExit) {\n                const dragItem = draggingEvent.dragSource.getDragItem();\n                this.setColumnsVisible(dragItem.columns, true, \"uiColumnDragged\");\n            }\n            this.potentialDndColumns = [];\n            this.refreshGui();\n        }\n        this.state = BaseDropZonePanel.STATE_NOT_DRAGGING;\n    }\n    onDragStop() {\n        if (this.isPotentialDndColumns()) {\n            let success = false;\n            if (this.state === BaseDropZonePanel.STATE_NEW_COLUMNS_IN) {\n                this.addColumns(this.potentialDndColumns);\n                success = true;\n            }\n            else {\n                success = this.rearrangeColumns(this.potentialDndColumns);\n            }\n            this.potentialDndColumns = [];\n            // If the function is passive, then we don't refresh, as we assume the client application\n            // is going to call setRowGroups / setPivots / setValues at a later point which will then\n            // cause a refresh. This gives a nice GUI where the ghost stays until the app has caught\n            // up with the changes. However, if there was no change in the order, then we do need to\n            // refresh to reset the columns\n            if (!this.beans.gridOptionsService.is('functionsPassive') || !success) {\n                this.refreshGui();\n            }\n        }\n        this.state = BaseDropZonePanel.STATE_NOT_DRAGGING;\n    }\n    removeColumns(columnsToRemove) {\n        const newColumnList = this.getExistingColumns().filter(col => !_.includes(columnsToRemove, col));\n        this.updateColumns(newColumnList);\n    }\n    addColumns(columnsToAdd) {\n        if (!columnsToAdd) {\n            return;\n        }\n        const newColumnList = this.getExistingColumns().slice();\n        const colsToAddNoDuplicates = columnsToAdd.filter(col => newColumnList.indexOf(col) < 0);\n        _.insertArrayIntoArray(newColumnList, colsToAddNoDuplicates, this.insertIndex);\n        this.updateColumns(newColumnList);\n    }\n    rearrangeColumns(columnsToAdd) {\n        const newColumnList = this.getNonGhostColumns().slice();\n        _.insertArrayIntoArray(newColumnList, columnsToAdd, this.insertIndex);\n        if (_.areEqual(newColumnList, this.getExistingColumns())) {\n            return false;\n        }\n        this.updateColumns(newColumnList);\n        return true;\n    }\n    refreshGui() {\n        // we reset the scroll position after the refresh.\n        // if we don't do this, then the list will always scroll to the top\n        // each time we refresh it. this is because part of the refresh empties\n        // out the list which sets scroll to zero. so the user could be just\n        // reordering the list - we want to prevent the resetting of the scroll.\n        // this is relevant for vertical display only (as horizontal has no scroll)\n        const scrollTop = this.eColumnDropList.scrollTop;\n        const resizeEnabled = this.resizeEnabled;\n        const focusedIndex = this.getFocusedItem();\n        let alternateElement = this.focusService.findNextFocusableElement();\n        if (!alternateElement) {\n            alternateElement = this.focusService.findNextFocusableElement(undefined, false, true);\n        }\n        this.toggleResizable(false);\n        this.destroyGui();\n        this.addIconAndTitleToGui();\n        this.addEmptyMessageToGui();\n        this.addColumnsToGui();\n        if (!this.isHorizontal()) {\n            this.eColumnDropList.scrollTop = scrollTop;\n        }\n        if (resizeEnabled) {\n            this.toggleResizable(resizeEnabled);\n        }\n        // focus should only be restored when keyboard mode\n        // otherwise mouse clicks will cause containers to scroll\n        // without no apparent reason.\n        if (this.focusService.isKeyboardMode()) {\n            this.restoreFocus(focusedIndex, alternateElement);\n        }\n    }\n    getFocusedItem() {\n        const eGui = this.getGui();\n        const activeElement = this.gridOptionsService.getDocument().activeElement;\n        if (!eGui.contains(activeElement)) {\n            return -1;\n        }\n        const items = Array.from(eGui.querySelectorAll('.ag-column-drop-cell'));\n        return items.indexOf(activeElement);\n    }\n    restoreFocus(index, alternateElement) {\n        const eGui = this.getGui();\n        const items = Array.from(eGui.querySelectorAll('.ag-column-drop-cell'));\n        if (index === -1) {\n            return;\n        }\n        if (items.length === 0) {\n            alternateElement.focus();\n        }\n        const indexToFocus = Math.min(items.length - 1, index);\n        const el = items[indexToFocus];\n        if (el) {\n            el.focus();\n        }\n    }\n    getNonGhostColumns() {\n        const existingColumns = this.getExistingColumns();\n        if (this.isPotentialDndColumns()) {\n            return existingColumns.filter(column => !_.includes(this.potentialDndColumns, column));\n        }\n        return existingColumns;\n    }\n    addColumnsToGui() {\n        const nonGhostColumns = this.getNonGhostColumns();\n        const itemsToAddToGui = nonGhostColumns.map(column => (this.createColumnComponent(column, false)));\n        if (this.isPotentialDndColumns()) {\n            const dndColumns = this.potentialDndColumns.map(column => (this.createColumnComponent(column, true)));\n            if (this.insertIndex >= itemsToAddToGui.length) {\n                itemsToAddToGui.push(...dndColumns);\n            }\n            else {\n                itemsToAddToGui.splice(this.insertIndex, 0, ...dndColumns);\n            }\n        }\n        this.appendChild(this.eColumnDropList);\n        itemsToAddToGui.forEach((columnComponent, index) => {\n            if (index > 0) {\n                this.addArrow(this.eColumnDropList);\n            }\n            this.eColumnDropList.appendChild(columnComponent.getGui());\n        });\n        this.addAriaLabelsToComponents();\n    }\n    addAriaLabelsToComponents() {\n        this.childColumnComponents.forEach((comp, idx) => {\n            const eGui = comp.getGui();\n            _.setAriaPosInSet(eGui, idx + 1);\n            _.setAriaSetSize(eGui, this.childColumnComponents.length);\n        });\n    }\n    createColumnComponent(column, ghost) {\n        const columnComponent = new DropZoneColumnComp(column, this.dropTarget, ghost, this.dropZonePurpose, this.horizontal);\n        columnComponent.addEventListener(DropZoneColumnComp.EVENT_COLUMN_REMOVE, this.removeColumns.bind(this, [column]));\n        this.beans.context.createBean(columnComponent);\n        this.guiDestroyFunctions.push(() => this.destroyBean(columnComponent));\n        if (!ghost) {\n            this.childColumnComponents.push(columnComponent);\n        }\n        return columnComponent;\n    }\n    addIconAndTitleToGui() {\n        const eGroupIcon = this.params.icon;\n        const eTitleBar = document.createElement('div');\n        _.setAriaHidden(eTitleBar, true);\n        this.addElementClasses(eTitleBar, 'title-bar');\n        this.addElementClasses(eGroupIcon, 'icon');\n        this.addOrRemoveCssClass('ag-column-drop-empty', this.isExistingColumnsEmpty());\n        eTitleBar.appendChild(eGroupIcon);\n        if (!this.horizontal) {\n            const eTitle = document.createElement('span');\n            this.addElementClasses(eTitle, 'title');\n            eTitle.innerHTML = this.params.title;\n            eTitleBar.appendChild(eTitle);\n        }\n        this.appendChild(eTitleBar);\n    }\n    isExistingColumnsEmpty() {\n        return this.getExistingColumns().length === 0;\n    }\n    addEmptyMessageToGui() {\n        if (!this.isExistingColumnsEmpty() || this.isPotentialDndColumns()) {\n            return;\n        }\n        const eMessage = document.createElement('span');\n        eMessage.innerHTML = this.params.emptyMessage;\n        this.addElementClasses(eMessage, 'empty-message');\n        this.eColumnDropList.appendChild(eMessage);\n    }\n    addArrow(eParent) {\n        // only add the arrows if the layout is horizontal\n        if (this.horizontal) {\n            // for RTL it's a left arrow, otherwise it's a right arrow\n            const enableRtl = this.beans.gridOptionsService.is('enableRtl');\n            const icon = _.createIconNoSpan(enableRtl ? 'smallLeft' : 'smallRight', this.beans.gridOptionsService);\n            this.addElementClasses(icon, 'cell-separator');\n            eParent.appendChild(icon);\n        }\n    }\n}\nBaseDropZonePanel.STATE_NOT_DRAGGING = 'notDragging';\nBaseDropZonePanel.STATE_NEW_COLUMNS_IN = 'newColumnsIn';\nBaseDropZonePanel.STATE_REARRANGE_COLUMNS = 'rearrangeColumns';\n__decorate$2i([\n    Autowired('columnModel')\n], BaseDropZonePanel.prototype, \"colModel\", void 0);\n__decorate$2i([\n    Autowired('focusService')\n], BaseDropZonePanel.prototype, \"focusService\", void 0);\n\nvar __decorate$2h = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass RowGroupDropZonePanel extends BaseDropZonePanel {\n    constructor(horizontal) {\n        super(horizontal, 'rowGroup');\n    }\n    passBeansUp() {\n        super.setBeans({\n            gridOptionsService: this.gridOptionsService,\n            eventService: this.eventService,\n            context: this.getContext(),\n            loggerFactory: this.loggerFactory,\n            dragAndDropService: this.dragAndDropService\n        });\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        const emptyMessage = localeTextFunc('rowGroupColumnsEmptyMessage', 'Drag here to set row groups');\n        const title = localeTextFunc('groups', 'Row Groups');\n        super.init({\n            dragAndDropIcon: DragAndDropService.ICON_GROUP,\n            icon: _.createIconNoSpan('rowGroupPanel', this.gridOptionsService, null),\n            emptyMessage: emptyMessage,\n            title\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, this.refreshGui.bind(this));\n    }\n    getAriaLabel() {\n        const translate = this.localeService.getLocaleTextFunc();\n        const label = translate('ariaRowGroupDropZonePanelLabel', 'Row Groups');\n        return label;\n    }\n    getTooltipParams() {\n        const res = super.getTooltipParams();\n        res.location = 'rowGroupColumnsList';\n        return res;\n    }\n    isColumnDroppable(column) {\n        // we never allow grouping of secondary columns\n        if (this.gridOptionsService.is('functionsReadOnly') || !column.isPrimary()) {\n            return false;\n        }\n        return column.isAllowRowGroup() && !column.isRowGroupActive();\n    }\n    updateColumns(columns) {\n        if (this.gridOptionsService.is('functionsPassive')) {\n            const event = {\n                type: Events.EVENT_COLUMN_ROW_GROUP_CHANGE_REQUEST,\n                columns: columns\n            };\n            this.eventService.dispatchEvent(event);\n        }\n        else {\n            this.columnModel.setRowGroupColumns(columns, \"toolPanelUi\");\n        }\n    }\n    getIconName() {\n        return this.isPotentialDndColumns() ? DragAndDropService.ICON_GROUP : DragAndDropService.ICON_NOT_ALLOWED;\n    }\n    getExistingColumns() {\n        return this.columnModel.getRowGroupColumns();\n    }\n}\n__decorate$2h([\n    Autowired('columnModel')\n], RowGroupDropZonePanel.prototype, \"columnModel\", void 0);\n__decorate$2h([\n    Autowired('loggerFactory')\n], RowGroupDropZonePanel.prototype, \"loggerFactory\", void 0);\n__decorate$2h([\n    Autowired('dragAndDropService')\n], RowGroupDropZonePanel.prototype, \"dragAndDropService\", void 0);\n__decorate$2h([\n    PostConstruct\n], RowGroupDropZonePanel.prototype, \"passBeansUp\", null);\n\nvar __decorate$2g = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass PivotDropZonePanel extends BaseDropZonePanel {\n    constructor(horizontal) {\n        super(horizontal, 'pivot');\n    }\n    passBeansUp() {\n        super.setBeans({\n            gridOptionsService: this.gridOptionsService,\n            eventService: this.eventService,\n            context: this.getContext(),\n            loggerFactory: this.loggerFactory,\n            dragAndDropService: this.dragAndDropService\n        });\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        const emptyMessage = localeTextFunc('pivotColumnsEmptyMessage', 'Drag here to set column labels');\n        const title = localeTextFunc('pivots', 'Column Labels');\n        super.init({\n            dragAndDropIcon: DragAndDropService.ICON_GROUP,\n            icon: _.createIconNoSpan('pivotPanel', this.gridOptionsService, null),\n            emptyMessage: emptyMessage,\n            title: title\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, this.refresh.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_CHANGED, this.refresh.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, this.checkVisibility.bind(this));\n        this.refresh();\n    }\n    getAriaLabel() {\n        const translate = this.localeService.getLocaleTextFunc();\n        const label = translate('ariaPivotDropZonePanelLabel', 'Column Labels');\n        return label;\n    }\n    getTooltipParams() {\n        const res = super.getTooltipParams();\n        res.location = 'pivotColumnsList';\n        return res;\n    }\n    refresh() {\n        this.checkVisibility();\n        this.refreshGui();\n    }\n    checkVisibility() {\n        const pivotMode = this.columnModel.isPivotMode();\n        if (this.isHorizontal()) {\n            // what we do for horizontal (ie the pivot panel at the top) depends\n            // on the user property as well as pivotMode.\n            switch (this.gridOptionsService.get('pivotPanelShow')) {\n                case 'always':\n                    this.setDisplayed(pivotMode);\n                    break;\n                case 'onlyWhenPivoting':\n                    const pivotActive = this.columnModel.isPivotActive();\n                    this.setDisplayed(pivotMode && pivotActive);\n                    break;\n                default:\n                    // never show it\n                    this.setDisplayed(false);\n                    break;\n            }\n        }\n        else {\n            // in toolPanel, the pivot panel is always shown when pivot mode is on\n            this.setDisplayed(pivotMode);\n        }\n    }\n    isColumnDroppable(column) {\n        // we never allow grouping of secondary columns\n        if (this.gridOptionsService.is('functionsReadOnly') || !column.isPrimary()) {\n            return false;\n        }\n        return column.isAllowPivot() && !column.isPivotActive();\n    }\n    updateColumns(columns) {\n        if (this.gridOptionsService.is('functionsPassive')) {\n            const event = {\n                type: Events.EVENT_COLUMN_PIVOT_CHANGE_REQUEST,\n                columns: columns\n            };\n            this.eventService.dispatchEvent(event);\n        }\n        else {\n            this.columnModel.setPivotColumns(columns, \"toolPanelUi\");\n        }\n    }\n    getIconName() {\n        return this.isPotentialDndColumns() ? DragAndDropService.ICON_PIVOT : DragAndDropService.ICON_NOT_ALLOWED;\n    }\n    getExistingColumns() {\n        return this.columnModel.getPivotColumns();\n    }\n}\n__decorate$2g([\n    Autowired('columnModel')\n], PivotDropZonePanel.prototype, \"columnModel\", void 0);\n__decorate$2g([\n    Autowired('loggerFactory')\n], PivotDropZonePanel.prototype, \"loggerFactory\", void 0);\n__decorate$2g([\n    Autowired('dragAndDropService')\n], PivotDropZonePanel.prototype, \"dragAndDropService\", void 0);\n__decorate$2g([\n    PostConstruct\n], PivotDropZonePanel.prototype, \"passBeansUp\", null);\n\nvar __decorate$2f = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass GridHeaderDropZones extends Component {\n    constructor() {\n        super();\n    }\n    postConstruct() {\n        this.setGui(this.createNorthPanel());\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, this.onRowGroupChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, this.onRowGroupChanged.bind(this));\n        this.addManagedPropertyListener('rowGroupPanelShow', this.onRowGroupChanged.bind(this));\n        this.onRowGroupChanged();\n    }\n    createNorthPanel() {\n        const topPanelGui = document.createElement('div');\n        const dropPanelVisibleListener = this.onDropPanelVisible.bind(this);\n        topPanelGui.classList.add('ag-column-drop-wrapper');\n        _.setAriaRole(topPanelGui, 'presentation');\n        this.rowGroupComp = new RowGroupDropZonePanel(true);\n        this.createManagedBean(this.rowGroupComp);\n        this.pivotComp = new PivotDropZonePanel(true);\n        this.createManagedBean(this.pivotComp);\n        topPanelGui.appendChild(this.rowGroupComp.getGui());\n        topPanelGui.appendChild(this.pivotComp.getGui());\n        this.addManagedListener(this.rowGroupComp, Component.EVENT_DISPLAYED_CHANGED, dropPanelVisibleListener);\n        this.addManagedListener(this.pivotComp, Component.EVENT_DISPLAYED_CHANGED, dropPanelVisibleListener);\n        this.onDropPanelVisible();\n        return topPanelGui;\n    }\n    onDropPanelVisible() {\n        const bothDisplayed = this.rowGroupComp.isDisplayed() && this.pivotComp.isDisplayed();\n        this.rowGroupComp.addOrRemoveCssClass('ag-column-drop-horizontal-half-width', bothDisplayed);\n        this.pivotComp.addOrRemoveCssClass('ag-column-drop-horizontal-half-width', bothDisplayed);\n    }\n    onRowGroupChanged() {\n        if (!this.rowGroupComp) {\n            return;\n        }\n        const rowGroupPanelShow = this.gridOptionsService.get('rowGroupPanelShow');\n        if (rowGroupPanelShow === 'always') {\n            this.rowGroupComp.setDisplayed(true);\n        }\n        else if (rowGroupPanelShow === 'onlyWhenGrouping') {\n            const grouping = !this.columnModel.isRowGroupEmpty();\n            this.rowGroupComp.setDisplayed(grouping);\n        }\n        else {\n            this.rowGroupComp.setDisplayed(false);\n        }\n    }\n}\n__decorate$2f([\n    Autowired('columnModel')\n], GridHeaderDropZones.prototype, \"columnModel\", void 0);\n__decorate$2f([\n    PostConstruct\n], GridHeaderDropZones.prototype, \"postConstruct\", null);\n\nvar __decorate$2e = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet FilterAggregatesStage = class FilterAggregatesStage extends BeanStub {\n    execute(params) {\n        const isPivotMode = this.columnModel.isPivotMode();\n        const isAggFilterActive = this.filterManager.isAggregateFilterPresent()\n            || this.filterManager.isAggregateQuickFilterPresent();\n        // This is the default filter for applying only to leaf nodes, realistically this should not apply as primary agg columns,\n        // should not be applied by the filterManager if getGroupAggFiltering is missing. Predicate will apply filters to leaf level.\n        const defaultPrimaryColumnPredicate = (params) => !params.node.group;\n        // Default secondary column predicate, selecting only leaf level groups.\n        const defaultSecondaryColumnPredicate = ((params) => params.node.leafGroup);\n        // The predicate to determine whether filters should apply to this row. Either defined by the user in groupAggFiltering or a default depending\n        // on current pivot mode status.\n        const applyFilterToNode = this.gridOptionsService.getGroupAggFiltering()\n            || (isPivotMode ? defaultSecondaryColumnPredicate : defaultPrimaryColumnPredicate);\n        const { changedPath } = params;\n        const preserveChildren = (node, recursive = false) => {\n            if (node.childrenAfterFilter) {\n                node.childrenAfterAggFilter = node.childrenAfterFilter;\n                if (recursive) {\n                    node.childrenAfterAggFilter.forEach((child) => preserveChildren(child, recursive));\n                }\n                this.setAllChildrenCount(node);\n            }\n            if (node.sibling) {\n                node.sibling.childrenAfterAggFilter = node.childrenAfterAggFilter;\n            }\n        };\n        const filterChildren = (node) => {\n            var _a;\n            node.childrenAfterAggFilter = ((_a = node.childrenAfterFilter) === null || _a === void 0 ? void 0 : _a.filter((child) => {\n                var _a;\n                const shouldFilterRow = applyFilterToNode({ node: child });\n                if (shouldFilterRow) {\n                    const doesNodePassFilter = this.filterManager.doesRowPassAggregateFilters({ rowNode: child });\n                    if (doesNodePassFilter) {\n                        // Node has passed, so preserve children\n                        preserveChildren(child, true);\n                        return true;\n                    }\n                }\n                const hasChildPassed = (_a = child.childrenAfterAggFilter) === null || _a === void 0 ? void 0 : _a.length;\n                return hasChildPassed;\n            })) || null;\n            this.setAllChildrenCount(node);\n            if (node.sibling) {\n                node.sibling.childrenAfterAggFilter = node.childrenAfterAggFilter;\n            }\n        };\n        changedPath.forEachChangedNodeDepthFirst(isAggFilterActive ? filterChildren : preserveChildren, true);\n    }\n    setAllChildrenCountTreeData(rowNode) {\n        // for tree data, we include all children, groups and leafs\n        let allChildrenCount = 0;\n        rowNode.childrenAfterAggFilter.forEach((child) => {\n            // include child itself\n            allChildrenCount++;\n            // include children of children\n            allChildrenCount += child.allChildrenCount;\n        });\n        rowNode.setAllChildrenCount(allChildrenCount);\n    }\n    setAllChildrenCountGridGrouping(rowNode) {\n        // for grid data, we only count the leafs\n        let allChildrenCount = 0;\n        rowNode.childrenAfterAggFilter.forEach((child) => {\n            if (child.group) {\n                allChildrenCount += child.allChildrenCount;\n            }\n            else {\n                allChildrenCount++;\n            }\n        });\n        rowNode.setAllChildrenCount(allChildrenCount);\n    }\n    setAllChildrenCount(rowNode) {\n        if (!rowNode.hasChildren()) {\n            rowNode.setAllChildrenCount(null);\n            return;\n        }\n        if (this.gridOptionsService.isTreeData()) {\n            this.setAllChildrenCountTreeData(rowNode);\n        }\n        else {\n            this.setAllChildrenCountGridGrouping(rowNode);\n        }\n    }\n};\n__decorate$2e([\n    Autowired('filterManager')\n], FilterAggregatesStage.prototype, \"filterManager\", void 0);\n__decorate$2e([\n    Autowired('columnModel')\n], FilterAggregatesStage.prototype, \"columnModel\", void 0);\nFilterAggregatesStage = __decorate$2e([\n    Bean('filterAggregatesStage')\n], FilterAggregatesStage);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$g = '30.0.3';\n\nvar __decorate$2d = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass GroupFilter extends TabGuardComp {\n    constructor() {\n        super(/* html */ `\n            <div class=\"ag-group-filter\">\n                <div ref=\"eGroupField\"></div>\n                <div ref=\"eUnderlyingFilter\"></div>\n            </div>\n        `);\n    }\n    postConstruct() {\n        this.initialiseTabGuard({});\n    }\n    init(params) {\n        this.params = params;\n        this.validateParams();\n        return this.updateGroups().then(() => {\n            this.addManagedListener(this.eventService, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, () => this.onColumnRowGroupChanged());\n        });\n    }\n    validateParams() {\n        const { colDef } = this.params;\n        if (colDef.field) {\n            _.doOnce(() => console.warn('AG Grid: Group Column Filter does not work with the colDef property \"field\". This property will be ignored.'), 'groupFilterFieldParam');\n        }\n        if (colDef.filterValueGetter) {\n            _.doOnce(() => console.warn('AG Grid: Group Column Filter does not work with the colDef property \"filterValueGetter\". This property will be ignored.'), 'groupFilterFilterValueGetterParam');\n        }\n        if (colDef.filterParams) {\n            _.doOnce(() => console.warn('AG Grid: Group Column Filter does not work with the colDef property \"filterParams\". This property will be ignored.'), 'groupFilterFilterParams');\n        }\n    }\n    updateGroups() {\n        const sourceColumns = this.updateGroupField();\n        return this.getUnderlyingFilters(sourceColumns);\n    }\n    getSourceColumns() {\n        this.groupColumn = this.params.column;\n        if (this.gridOptionsService.is('treeData')) {\n            _.doOnce(() => console.warn('AG Grid: Group Column Filter does not work with Tree Data enabled. Please disable Tree Data, or use a different filter.'), 'groupFilterTreeData');\n            return [];\n        }\n        const sourceColumns = this.columnModel.getSourceColumnsForGroupColumn(this.groupColumn);\n        if (!sourceColumns) {\n            _.doOnce(() => console.warn('AG Grid: Group Column Filter only works on group columns. Please use a different filter.'), 'groupFilterNotGroupColumn');\n            return [];\n        }\n        return sourceColumns;\n    }\n    updateGroupField() {\n        _.clearElement(this.eGroupField);\n        if (this.eGroupFieldSelect) {\n            this.destroyBean(this.eGroupFieldSelect);\n        }\n        const allSourceColumns = this.getSourceColumns();\n        const sourceColumns = allSourceColumns.filter(sourceColumn => sourceColumn.isFilterAllowed());\n        if (!sourceColumns.length) {\n            this.selectedColumn = undefined;\n            _.setDisplayed(this.eGroupField, false);\n            return null;\n        }\n        if (allSourceColumns.length === 1) {\n            // we only want to hide the group field element if there's only one group column.\n            // If there's one group column that has a filter, but multiple columns in total,\n            // we should still show the select so the user knows which column it's for.\n            this.selectedColumn = sourceColumns[0];\n            _.setDisplayed(this.eGroupField, false);\n        }\n        else {\n            // keep the old selected column if it's still valid\n            if (!this.selectedColumn || !sourceColumns.some(column => column.getId() === this.selectedColumn.getId())) {\n                this.selectedColumn = sourceColumns[0];\n            }\n            this.createGroupFieldSelectElement(sourceColumns);\n            this.eGroupField.appendChild(this.eGroupFieldSelect.getGui());\n            this.eGroupField.appendChild(_.loadTemplate(/* html */ `<div class=\"ag-filter-separator\"></div>`));\n            _.setDisplayed(this.eGroupField, true);\n        }\n        return sourceColumns;\n    }\n    createGroupFieldSelectElement(sourceColumns) {\n        this.eGroupFieldSelect = this.createManagedBean(new AgSelect());\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        this.eGroupFieldSelect.setLabel(localeTextFunc('groupFilterSelect', 'Select field:'));\n        this.eGroupFieldSelect.setLabelAlignment('top');\n        this.eGroupFieldSelect.addOptions(sourceColumns.map(sourceColumn => {\n            var _a;\n            return ({\n                value: sourceColumn.getId(),\n                text: (_a = this.columnModel.getDisplayNameForColumn(sourceColumn, 'groupFilter', false)) !== null && _a !== void 0 ? _a : undefined\n            });\n        }));\n        this.eGroupFieldSelect.setValue(this.selectedColumn.getId());\n        this.eGroupFieldSelect.onValueChange((newValue) => this.updateSelectedColumn(newValue));\n        this.eGroupFieldSelect.addCssClass('ag-group-filter-field-select-wrapper');\n        if (sourceColumns.length === 1) {\n            this.eGroupFieldSelect.setDisabled(true);\n        }\n    }\n    getUnderlyingFilters(sourceColumns) {\n        if (!sourceColumns) {\n            this.filterColumnPairs = undefined;\n            this.selectedFilter = undefined;\n            this.groupColumn.setFilterActive(false, 'columnRowGroupChanged');\n            return AgPromise.resolve();\n        }\n        const filterPromises = [];\n        const filterColumnPairs = [];\n        sourceColumns.forEach(column => {\n            const filterWrapper = this.filterManager.getOrCreateFilterWrapper(column, 'COLUMN_MENU');\n            if (filterWrapper === null || filterWrapper === void 0 ? void 0 : filterWrapper.filterPromise) {\n                filterPromises.push(filterWrapper.filterPromise.then(filter => {\n                    if (filter) {\n                        filterColumnPairs.push({\n                            filter,\n                            column\n                        });\n                    }\n                    if (column.getId() === this.selectedColumn.getId()) {\n                        this.selectedFilter = filter !== null && filter !== void 0 ? filter : undefined;\n                    }\n                    return filter;\n                }));\n            }\n        });\n        return AgPromise.all(filterPromises).then(() => {\n            this.filterColumnPairs = filterColumnPairs;\n            this.groupColumn.setFilterActive(this.isFilterActive(), 'columnRowGroupChanged');\n        });\n    }\n    addUnderlyingFilterElement() {\n        _.clearElement(this.eUnderlyingFilter);\n        if (!this.selectedColumn) {\n            return AgPromise.resolve();\n        }\n        const filterWrapper = this.filterManager.getOrCreateFilterWrapper(this.selectedColumn, 'COLUMN_MENU');\n        if (!filterWrapper) {\n            return AgPromise.resolve();\n        }\n        return filterWrapper.guiPromise.then(gui => {\n            var _a;\n            this.eUnderlyingFilter.appendChild(gui);\n            (_a = filterWrapper.filterPromise) === null || _a === void 0 ? void 0 : _a.then(filter => {\n                var _a, _b;\n                (_a = filter === null || filter === void 0 ? void 0 : filter.afterGuiAttached) === null || _a === void 0 ? void 0 : _a.call(filter, this.afterGuiAttachedParams);\n                if (!((_b = this.afterGuiAttachedParams) === null || _b === void 0 ? void 0 : _b.suppressFocus) && this.eGroupFieldSelect && !this.eGroupFieldSelect.isDisabled()) {\n                    this.eGroupFieldSelect.getFocusableElement().focus();\n                }\n            });\n        });\n    }\n    updateSelectedColumn(columnId) {\n        var _a, _b;\n        if (!columnId) {\n            return;\n        }\n        (_b = (_a = this.selectedFilter) === null || _a === void 0 ? void 0 : _a.afterGuiDetached) === null || _b === void 0 ? void 0 : _b.call(_a);\n        const selectedFilterColumnPair = this.getFilterColumnPair(columnId);\n        this.selectedColumn = selectedFilterColumnPair === null || selectedFilterColumnPair === void 0 ? void 0 : selectedFilterColumnPair.column;\n        this.selectedFilter = selectedFilterColumnPair === null || selectedFilterColumnPair === void 0 ? void 0 : selectedFilterColumnPair.filter;\n        this.dispatchEvent({\n            type: GroupFilter.EVENT_SELECTED_COLUMN_CHANGED\n        });\n        this.addUnderlyingFilterElement();\n    }\n    isFilterActive() {\n        var _a;\n        return !!((_a = this.filterColumnPairs) === null || _a === void 0 ? void 0 : _a.some(({ filter }) => filter.isFilterActive()));\n    }\n    doesFilterPass() {\n        return true;\n    }\n    getModel() {\n        return null;\n    }\n    setModel() {\n        return AgPromise.resolve();\n    }\n    afterGuiAttached(params) {\n        this.afterGuiAttachedParams = params;\n        this.addUnderlyingFilterElement();\n    }\n    afterGuiDetached() {\n        var _a, _b;\n        _.clearElement(this.eUnderlyingFilter);\n        (_b = (_a = this.selectedFilter) === null || _a === void 0 ? void 0 : _a.afterGuiDetached) === null || _b === void 0 ? void 0 : _b.call(_a);\n    }\n    onColumnRowGroupChanged() {\n        this.updateGroups().then(() => {\n            this.dispatchEvent({\n                type: GroupFilter.EVENT_COLUMN_ROW_GROUP_CHANGED\n            });\n            this.eventService.dispatchEvent({\n                type: 'filterAllowedUpdated'\n            });\n        });\n    }\n    getFilterColumnPair(columnId) {\n        var _a;\n        if (!columnId) {\n            return undefined;\n        }\n        return (_a = this.filterColumnPairs) === null || _a === void 0 ? void 0 : _a.find(({ column }) => column.getId() === columnId);\n    }\n    getSelectedFilter() {\n        return this.selectedFilter;\n    }\n    getSelectedColumn() {\n        return this.selectedColumn;\n    }\n    isFilterAllowed() {\n        return !!this.selectedColumn;\n    }\n    destroy() {\n        super.destroy();\n    }\n}\nGroupFilter.EVENT_COLUMN_ROW_GROUP_CHANGED = 'columnRowGroupChanged';\nGroupFilter.EVENT_SELECTED_COLUMN_CHANGED = 'selectedColumnChanged';\n__decorate$2d([\n    Autowired('filterManager')\n], GroupFilter.prototype, \"filterManager\", void 0);\n__decorate$2d([\n    Autowired('columnModel')\n], GroupFilter.prototype, \"columnModel\", void 0);\n__decorate$2d([\n    RefSelector('eGroupField')\n], GroupFilter.prototype, \"eGroupField\", void 0);\n__decorate$2d([\n    RefSelector('eUnderlyingFilter')\n], GroupFilter.prototype, \"eUnderlyingFilter\", void 0);\n__decorate$2d([\n    PostConstruct\n], GroupFilter.prototype, \"postConstruct\", null);\n\nvar __decorate$2c = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass GroupFloatingFilterComp extends Component {\n    constructor() {\n        super(/* html */ `\n            <div ref=\"eFloatingFilter\" class=\"ag-group-floating-filter ag-floating-filter-input\" role=\"presentation\"></div>\n        `);\n    }\n    init(params) {\n        this.params = params;\n        // we only support showing the underlying floating filter for multiple group columns\n        const canShowUnderlyingFloatingFilter = this.gridOptionsService.get('groupDisplayType') === 'multipleColumns';\n        return new AgPromise(resolve => {\n            this.params.parentFilterInstance(parentFilterInstance => {\n                this.parentFilterInstance = parentFilterInstance;\n                if (canShowUnderlyingFloatingFilter) {\n                    this.setupUnderlyingFloatingFilterElement().then(() => resolve());\n                }\n                else {\n                    this.setupReadOnlyFloatingFilterElement();\n                    resolve();\n                }\n            });\n        }).then(() => {\n            this.addManagedListener(this.parentFilterInstance, GroupFilter.EVENT_SELECTED_COLUMN_CHANGED, () => this.onSelectedColumnChanged());\n            this.addManagedListener(this.parentFilterInstance, GroupFilter.EVENT_COLUMN_ROW_GROUP_CHANGED, () => this.onColumnRowGroupChanged());\n        });\n    }\n    setupReadOnlyFloatingFilterElement() {\n        if (!this.eFloatingFilterText) {\n            this.eFloatingFilterText = this.createManagedBean(new AgInputTextField());\n            const displayName = this.columnModel.getDisplayNameForColumn(this.params.column, 'header', true);\n            const translate = this.localeService.getLocaleTextFunc();\n            this.eFloatingFilterText\n                .setDisabled(true)\n                .setInputAriaLabel(`${displayName} ${translate('ariaFilterInput', 'Filter Input')}`)\n                .addGuiEventListener('click', () => this.params.showParentFilter());\n        }\n        this.updateDisplayedValue();\n        this.eFloatingFilter.appendChild(this.eFloatingFilterText.getGui());\n    }\n    setupUnderlyingFloatingFilterElement() {\n        this.showingUnderlyingFloatingFilter = false;\n        this.underlyingFloatingFilter = undefined;\n        _.clearElement(this.eFloatingFilter);\n        const column = this.parentFilterInstance.getSelectedColumn();\n        // we can only show the underlying filter if there is one instance (e.g. the underlying column is not visible)\n        if (column && !column.isVisible()) {\n            const compDetails = this.filterManager.getFloatingFilterCompDetails(column, this.params.showParentFilter);\n            if (compDetails) {\n                if (!this.columnVisibleChangedListener) {\n                    this.columnVisibleChangedListener = this.addManagedListener(column, Column.EVENT_VISIBLE_CHANGED, this.onColumnVisibleChanged.bind(this));\n                }\n                return compDetails.newAgStackInstance().then(floatingFilter => {\n                    var _a, _b;\n                    this.underlyingFloatingFilter = floatingFilter;\n                    (_a = this.underlyingFloatingFilter) === null || _a === void 0 ? void 0 : _a.onParentModelChanged((_b = this.parentFilterInstance.getSelectedFilter()) === null || _b === void 0 ? void 0 : _b.getModel());\n                    this.appendChild(floatingFilter.getGui());\n                    this.showingUnderlyingFloatingFilter = true;\n                });\n            }\n        }\n        // fallback to the read-only version\n        this.setupReadOnlyFloatingFilterElement();\n        return AgPromise.resolve();\n    }\n    onColumnVisibleChanged() {\n        this.setupUnderlyingFloatingFilterElement();\n    }\n    onParentModelChanged(_model, event) {\n        var _a, _b;\n        if (this.showingUnderlyingFloatingFilter) {\n            (_a = this.underlyingFloatingFilter) === null || _a === void 0 ? void 0 : _a.onParentModelChanged((_b = this.parentFilterInstance.getSelectedFilter()) === null || _b === void 0 ? void 0 : _b.getModel(), event);\n        }\n        else {\n            this.updateDisplayedValue();\n        }\n    }\n    updateDisplayedValue() {\n        if (!this.parentFilterInstance || !this.eFloatingFilterText) {\n            return;\n        }\n        const selectedFilter = this.parentFilterInstance.getSelectedFilter();\n        if (!selectedFilter) {\n            this.eFloatingFilterText.setValue('');\n            this.eFloatingFilterText.setDisplayed(false);\n            return;\n        }\n        this.eFloatingFilterText.setDisplayed(true);\n        if (selectedFilter.getModelAsString) {\n            const filterModel = selectedFilter.getModel();\n            this.eFloatingFilterText.setValue(filterModel == null ? '' : selectedFilter.getModelAsString(filterModel));\n        }\n        else {\n            this.eFloatingFilterText.setValue('');\n        }\n    }\n    onSelectedColumnChanged() {\n        if (!this.showingUnderlyingFloatingFilter) {\n            this.updateDisplayedValue();\n        }\n    }\n    onColumnRowGroupChanged() {\n        if (!this.showingUnderlyingFloatingFilter) {\n            this.updateDisplayedValue();\n        }\n    }\n    destroy() {\n        super.destroy();\n    }\n}\n__decorate$2c([\n    Autowired('columnModel')\n], GroupFloatingFilterComp.prototype, \"columnModel\", void 0);\n__decorate$2c([\n    Autowired('filterManager')\n], GroupFloatingFilterComp.prototype, \"filterManager\", void 0);\n__decorate$2c([\n    RefSelector('eFloatingFilter')\n], GroupFloatingFilterComp.prototype, \"eFloatingFilter\", void 0);\n\nconst RowGroupingModule = {\n    version: VERSION$g,\n    moduleName: ModuleNames.RowGroupingModule,\n    beans: [AggregationStage, FilterAggregatesStage, GroupStage, PivotColDefService, PivotStage, AggFuncService],\n    agStackComponents: [\n        { componentName: 'AgGridHeaderDropZones', componentClass: GridHeaderDropZones }\n    ],\n    userComponents: [\n        { componentName: 'agGroupColumnFilter', componentClass: GroupFilter },\n        { componentName: 'agGroupColumnFloatingFilter', componentClass: GroupFloatingFilterComp },\n    ],\n    dependantModules: [\n        EnterpriseCoreModule\n    ]\n};\n\nvar __decorate$2b = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ValuesDropZonePanel extends BaseDropZonePanel {\n    constructor(horizontal) {\n        super(horizontal, 'aggregation');\n    }\n    passBeansUp() {\n        super.setBeans({\n            gridOptionsService: this.gridOptionsService,\n            eventService: this.eventService,\n            context: this.getContext(),\n            loggerFactory: this.loggerFactory,\n            dragAndDropService: this.dragAndDropService\n        });\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        const emptyMessage = localeTextFunc('valueColumnsEmptyMessage', 'Drag here to aggregate');\n        const title = localeTextFunc('values', 'Values');\n        super.init({\n            dragAndDropIcon: DragAndDropService.ICON_AGGREGATE,\n            icon: _.createIconNoSpan('valuePanel', this.gridOptionsService, null),\n            emptyMessage: emptyMessage,\n            title: title\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_VALUE_CHANGED, this.refreshGui.bind(this));\n    }\n    getAriaLabel() {\n        const translate = this.localeService.getLocaleTextFunc();\n        const label = translate('ariaValuesDropZonePanelLabel', 'Values');\n        return label;\n    }\n    getTooltipParams() {\n        const res = super.getTooltipParams();\n        res.location = 'valueColumnsList';\n        return res;\n    }\n    getIconName() {\n        return this.isPotentialDndColumns() ? DragAndDropService.ICON_AGGREGATE : DragAndDropService.ICON_NOT_ALLOWED;\n    }\n    isColumnDroppable(column) {\n        // we never allow grouping of secondary columns\n        if (this.gridOptionsService.is('functionsReadOnly') || !column.isPrimary()) {\n            return false;\n        }\n        return column.isAllowValue() && !column.isValueActive();\n    }\n    updateColumns(columns) {\n        if (this.gridOptionsService.is('functionsPassive')) {\n            const event = {\n                type: Events.EVENT_COLUMN_VALUE_CHANGE_REQUEST,\n                columns: columns\n            };\n            this.eventService.dispatchEvent(event);\n        }\n        else {\n            this.columnModel.setValueColumns(columns, \"toolPanelUi\");\n        }\n    }\n    getExistingColumns() {\n        return this.columnModel.getValueColumns();\n    }\n}\n__decorate$2b([\n    Autowired('columnModel')\n], ValuesDropZonePanel.prototype, \"columnModel\", void 0);\n__decorate$2b([\n    Autowired('loggerFactory')\n], ValuesDropZonePanel.prototype, \"loggerFactory\", void 0);\n__decorate$2b([\n    Autowired('dragAndDropService')\n], ValuesDropZonePanel.prototype, \"dragAndDropService\", void 0);\n__decorate$2b([\n    PostConstruct\n], ValuesDropZonePanel.prototype, \"passBeansUp\", null);\n\nvar __decorate$2a = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass PrimaryColsPanel extends Component {\n    constructor() {\n        super(PrimaryColsPanel.TEMPLATE);\n    }\n    // we allow dragging in the toolPanel, but not when this component appears in the column menu\n    init(allowDragging, params, eventType) {\n        this.allowDragging = allowDragging;\n        this.params = params;\n        this.eventType = eventType;\n        this.primaryColsHeaderPanel.init(this.params);\n        const hideFilter = this.params.suppressColumnFilter;\n        const hideSelect = this.params.suppressColumnSelectAll;\n        const hideExpand = this.params.suppressColumnExpandAll;\n        if (hideExpand && hideFilter && hideSelect) {\n            this.primaryColsHeaderPanel.setDisplayed(false);\n        }\n        this.addManagedListener(this.primaryColsListPanel, 'groupExpanded', this.onGroupExpanded.bind(this));\n        this.addManagedListener(this.primaryColsListPanel, 'selectionChanged', this.onSelectionChange.bind(this));\n        this.primaryColsListPanel.init(this.params, this.allowDragging, this.eventType);\n        this.addManagedListener(this.primaryColsHeaderPanel, 'expandAll', this.onExpandAll.bind(this));\n        this.addManagedListener(this.primaryColsHeaderPanel, 'collapseAll', this.onCollapseAll.bind(this));\n        this.addManagedListener(this.primaryColsHeaderPanel, 'selectAll', this.onSelectAll.bind(this));\n        this.addManagedListener(this.primaryColsHeaderPanel, 'unselectAll', this.onUnselectAll.bind(this));\n        this.addManagedListener(this.primaryColsHeaderPanel, 'filterChanged', this.onFilterChanged.bind(this));\n        this.positionableFeature = new PositionableFeature(this.getGui(), { minHeight: 100 });\n        this.createManagedBean(this.positionableFeature);\n    }\n    toggleResizable(resizable) {\n        this.positionableFeature.setResizable(resizable ? { bottom: true } : false);\n    }\n    onExpandAll() {\n        this.primaryColsListPanel.doSetExpandedAll(true);\n    }\n    onCollapseAll() {\n        this.primaryColsListPanel.doSetExpandedAll(false);\n    }\n    expandGroups(groupIds) {\n        this.primaryColsListPanel.setGroupsExpanded(true, groupIds);\n    }\n    collapseGroups(groupIds) {\n        this.primaryColsListPanel.setGroupsExpanded(false, groupIds);\n    }\n    setColumnLayout(colDefs) {\n        this.primaryColsListPanel.setColumnLayout(colDefs);\n    }\n    onFilterChanged(event) {\n        this.primaryColsListPanel.setFilterText(event.filterText);\n    }\n    syncLayoutWithGrid() {\n        this.primaryColsListPanel.onColumnsChanged();\n    }\n    onSelectAll() {\n        this.primaryColsListPanel.doSetSelectedAll(true);\n    }\n    onUnselectAll() {\n        this.primaryColsListPanel.doSetSelectedAll(false);\n    }\n    onGroupExpanded(event) {\n        this.primaryColsHeaderPanel.setExpandState(event.state);\n    }\n    onSelectionChange(event) {\n        this.primaryColsHeaderPanel.setSelectionState(event.state);\n    }\n}\nPrimaryColsPanel.TEMPLATE = `<div class=\"ag-column-select\">\n            <ag-primary-cols-header ref=\"primaryColsHeaderPanel\"></ag-primary-cols-header>\n            <ag-primary-cols-list ref=\"primaryColsListPanel\"></ag-primary-cols-list>\n        </div>`;\n__decorate$2a([\n    RefSelector('primaryColsHeaderPanel')\n], PrimaryColsPanel.prototype, \"primaryColsHeaderPanel\", void 0);\n__decorate$2a([\n    RefSelector('primaryColsListPanel')\n], PrimaryColsPanel.prototype, \"primaryColsListPanel\", void 0);\n\nvar __decorate$29 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ColumnToolPanel extends Component {\n    constructor() {\n        super(ColumnToolPanel.TEMPLATE);\n        this.initialised = false;\n        this.childDestroyFuncs = [];\n    }\n    // lazy initialise the panel\n    setVisible(visible) {\n        super.setDisplayed(visible);\n        if (visible && !this.initialised) {\n            this.init(this.params);\n        }\n    }\n    init(params) {\n        const defaultParams = {\n            suppressColumnMove: false,\n            suppressColumnSelectAll: false,\n            suppressColumnFilter: false,\n            suppressColumnExpandAll: false,\n            contractColumnSelection: false,\n            suppressPivotMode: false,\n            suppressRowGroups: false,\n            suppressValues: false,\n            suppressPivots: false,\n            suppressSyncLayoutWithGrid: false,\n            api: this.gridApi,\n            columnApi: this.columnApi,\n        };\n        this.params = Object.assign(Object.assign(Object.assign({}, defaultParams), params), { context: this.gridOptionsService.context });\n        if (this.isRowGroupingModuleLoaded() && !this.params.suppressPivotMode) {\n            // DO NOT CHANGE TO createManagedBean\n            this.pivotModePanel = this.createBean(new PivotModePanel());\n            this.childDestroyFuncs.push(() => this.destroyBean(this.pivotModePanel));\n            this.appendChild(this.pivotModePanel);\n        }\n        // DO NOT CHANGE TO createManagedBean\n        this.primaryColsPanel = this.createBean(new PrimaryColsPanel());\n        this.childDestroyFuncs.push(() => this.destroyBean(this.primaryColsPanel));\n        this.primaryColsPanel.init(true, this.params, \"toolPanelUi\");\n        this.primaryColsPanel.addCssClass('ag-column-panel-column-select');\n        this.appendChild(this.primaryColsPanel);\n        if (this.isRowGroupingModuleLoaded()) {\n            if (!this.params.suppressRowGroups) {\n                // DO NOT CHANGE TO createManagedBean\n                this.rowGroupDropZonePanel = this.createBean(new RowGroupDropZonePanel(false));\n                this.childDestroyFuncs.push(() => this.destroyBean(this.rowGroupDropZonePanel));\n                this.appendChild(this.rowGroupDropZonePanel);\n            }\n            if (!this.params.suppressValues) {\n                // DO NOT CHANGE TO createManagedBean\n                this.valuesDropZonePanel = this.createBean(new ValuesDropZonePanel(false));\n                this.childDestroyFuncs.push(() => this.destroyBean(this.valuesDropZonePanel));\n                this.appendChild(this.valuesDropZonePanel);\n            }\n            if (!this.params.suppressPivots) {\n                // DO NOT CHANGE TO createManagedBean\n                this.pivotDropZonePanel = this.createBean(new PivotDropZonePanel(false));\n                this.childDestroyFuncs.push(() => this.destroyBean(this.pivotDropZonePanel));\n                this.appendChild(this.pivotDropZonePanel);\n            }\n            this.setLastVisible();\n            const pivotModeListener = this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, () => {\n                this.resetChildrenHeight();\n                this.setLastVisible();\n            });\n            this.childDestroyFuncs.push(() => pivotModeListener());\n        }\n        this.initialised = true;\n    }\n    setPivotModeSectionVisible(visible) {\n        if (!this.isRowGroupingModuleLoaded()) {\n            return;\n        }\n        if (this.pivotModePanel) {\n            this.pivotModePanel.setDisplayed(visible);\n        }\n        else if (visible) {\n            this.pivotModePanel = this.createBean(new PivotModePanel());\n            // ensure pivot mode panel is positioned at the top of the columns tool panel\n            this.getGui().insertBefore(this.pivotModePanel.getGui(), this.getGui().firstChild);\n            this.childDestroyFuncs.push(() => this.destroyBean(this.pivotModePanel));\n        }\n        this.setLastVisible();\n    }\n    setRowGroupsSectionVisible(visible) {\n        if (!this.isRowGroupingModuleLoaded()) {\n            return;\n        }\n        if (this.rowGroupDropZonePanel) {\n            this.rowGroupDropZonePanel.setDisplayed(visible);\n        }\n        else if (visible) {\n            this.rowGroupDropZonePanel = this.createManagedBean(new RowGroupDropZonePanel(false));\n            this.appendChild(this.rowGroupDropZonePanel);\n        }\n        this.setLastVisible();\n    }\n    setValuesSectionVisible(visible) {\n        if (!this.isRowGroupingModuleLoaded()) {\n            return;\n        }\n        if (this.valuesDropZonePanel) {\n            this.valuesDropZonePanel.setDisplayed(visible);\n        }\n        else if (visible) {\n            this.valuesDropZonePanel = this.createManagedBean(new ValuesDropZonePanel(false));\n            this.appendChild(this.valuesDropZonePanel);\n        }\n        this.setLastVisible();\n    }\n    setPivotSectionVisible(visible) {\n        if (!this.isRowGroupingModuleLoaded()) {\n            return;\n        }\n        if (this.pivotDropZonePanel) {\n            this.pivotDropZonePanel.setDisplayed(visible);\n        }\n        else if (visible) {\n            this.pivotDropZonePanel = this.createManagedBean(new PivotDropZonePanel(false));\n            this.appendChild(this.pivotDropZonePanel);\n            this.pivotDropZonePanel.setDisplayed(visible);\n        }\n        this.setLastVisible();\n    }\n    setResizers() {\n        [\n            this.primaryColsPanel,\n            this.rowGroupDropZonePanel,\n            this.valuesDropZonePanel,\n            this.pivotDropZonePanel\n        ].forEach(panel => {\n            if (!panel) {\n                return;\n            }\n            const eGui = panel.getGui();\n            panel.toggleResizable(!eGui.classList.contains('ag-last-column-drop') && !eGui.classList.contains('ag-hidden'));\n        });\n    }\n    setLastVisible() {\n        const eGui = this.getGui();\n        const columnDrops = Array.prototype.slice.call(eGui.querySelectorAll('.ag-column-drop'));\n        columnDrops.forEach(columnDrop => columnDrop.classList.remove('ag-last-column-drop'));\n        const columnDropEls = eGui.querySelectorAll('.ag-column-drop:not(.ag-hidden)');\n        const lastVisible = _.last(columnDropEls);\n        if (lastVisible) {\n            lastVisible.classList.add('ag-last-column-drop');\n        }\n        this.setResizers();\n    }\n    resetChildrenHeight() {\n        const eGui = this.getGui();\n        const children = eGui.children;\n        for (let i = 0; i < children.length; i++) {\n            const child = children[i];\n            child.style.removeProperty('height');\n            child.style.removeProperty('flex');\n        }\n    }\n    isRowGroupingModuleLoaded() {\n        return ModuleRegistry.assertRegistered(ModuleNames.RowGroupingModule, 'Row Grouping', this.context.getGridId());\n    }\n    expandColumnGroups(groupIds) {\n        this.primaryColsPanel.expandGroups(groupIds);\n    }\n    collapseColumnGroups(groupIds) {\n        this.primaryColsPanel.collapseGroups(groupIds);\n    }\n    setColumnLayout(colDefs) {\n        this.primaryColsPanel.setColumnLayout(colDefs);\n    }\n    syncLayoutWithGrid() {\n        this.primaryColsPanel.syncLayoutWithGrid();\n    }\n    destroyChildren() {\n        this.childDestroyFuncs.forEach(func => func());\n        this.childDestroyFuncs.length = 0;\n        _.clearElement(this.getGui());\n    }\n    refresh() {\n        this.destroyChildren();\n        this.init(this.params);\n    }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so this must be public.\n    destroy() {\n        this.destroyChildren();\n        super.destroy();\n    }\n}\nColumnToolPanel.TEMPLATE = `<div class=\"ag-column-panel\"></div>`;\n__decorate$29([\n    Autowired(\"gridApi\")\n], ColumnToolPanel.prototype, \"gridApi\", void 0);\n__decorate$29([\n    Autowired(\"columnApi\")\n], ColumnToolPanel.prototype, \"columnApi\", void 0);\n\nvar __decorate$28 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass HorizontalResizeComp extends Component {\n    constructor() {\n        super(/* html */ `<div class=\"ag-tool-panel-horizontal-resize\"></div>`);\n        this.minWidth = 100;\n        this.maxWidth = null;\n    }\n    setElementToResize(elementToResize) {\n        this.elementToResize = elementToResize;\n    }\n    postConstruct() {\n        const finishedWithResizeFunc = this.horizontalResizeService.addResizeBar({\n            eResizeBar: this.getGui(),\n            dragStartPixels: 1,\n            onResizeStart: this.onResizeStart.bind(this),\n            onResizing: this.onResizing.bind(this),\n            onResizeEnd: this.onResizeEnd.bind(this)\n        });\n        this.addDestroyFunc(finishedWithResizeFunc);\n        this.setInverted(this.gridOptionsService.is('enableRtl'));\n    }\n    dispatchResizeEvent(start, end, width) {\n        const event = {\n            type: Events.EVENT_TOOL_PANEL_SIZE_CHANGED,\n            width: width,\n            started: start,\n            ended: end,\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    onResizeStart() {\n        this.startingWidth = this.elementToResize.offsetWidth;\n        this.dispatchResizeEvent(true, false, this.startingWidth);\n    }\n    onResizeEnd(delta) {\n        return this.onResizing(delta, true);\n    }\n    onResizing(delta, isEnd = false) {\n        const direction = this.inverted ? -1 : 1;\n        let newWidth = Math.max(this.minWidth, Math.floor(this.startingWidth - (delta * direction)));\n        if (this.maxWidth != null) {\n            newWidth = Math.min(this.maxWidth, newWidth);\n        }\n        this.elementToResize.style.width = `${newWidth}px`;\n        this.dispatchResizeEvent(false, isEnd, newWidth);\n    }\n    setInverted(inverted) {\n        this.inverted = inverted;\n    }\n    setMaxWidth(value) {\n        this.maxWidth = value;\n    }\n    setMinWidth(value) {\n        if (value != null) {\n            this.minWidth = value;\n        }\n        else {\n            this.minWidth = 100;\n        }\n    }\n}\n__decorate$28([\n    Autowired('horizontalResizeService')\n], HorizontalResizeComp.prototype, \"horizontalResizeService\", void 0);\n__decorate$28([\n    PostConstruct\n], HorizontalResizeComp.prototype, \"postConstruct\", null);\n\nvar __decorate$27 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass SideBarButtonComp extends Component {\n    constructor(toolPanelDef) {\n        super();\n        this.toolPanelDef = toolPanelDef;\n    }\n    getToolPanelId() {\n        return this.toolPanelDef.id;\n    }\n    postConstruct() {\n        const template = this.createTemplate();\n        this.setTemplate(template);\n        this.setLabel();\n        this.setIcon();\n        this.addManagedListener(this.eToggleButton, 'click', this.onButtonPressed.bind(this));\n        this.eToggleButton.setAttribute('id', `ag-${this.getCompId()}-button`);\n    }\n    createTemplate() {\n        const res = /* html */ `<div class=\"ag-side-button\" role=\"presentation\">\n                <button type=\"button\" ref=\"eToggleButton\" tabindex=\"-1\" role=\"tab\" aria-expanded=\"false\" class=\"ag-button ag-side-button-button\">\n                    <div ref=\"eIconWrapper\" class=\"ag-side-button-icon-wrapper\" aria-hidden=\"true\"></div>\n                    <span ref =\"eLabel\" class=\"ag-side-button-label\"></span>\n                </button>\n            </div>`;\n        return res;\n    }\n    setLabel() {\n        const translate = this.localeService.getLocaleTextFunc();\n        const def = this.toolPanelDef;\n        const label = translate(def.labelKey, def.labelDefault);\n        this.eLabel.innerText = label;\n    }\n    setIcon() {\n        this.eIconWrapper.insertAdjacentElement('afterbegin', _.createIconNoSpan(this.toolPanelDef.iconKey, this.gridOptionsService));\n    }\n    onButtonPressed() {\n        this.dispatchEvent({ type: SideBarButtonComp.EVENT_TOGGLE_BUTTON_CLICKED });\n    }\n    setSelected(selected) {\n        this.addOrRemoveCssClass('ag-selected', selected);\n        _.setAriaExpanded(this.eToggleButton, selected);\n    }\n    getButtonElement() {\n        return this.eToggleButton;\n    }\n}\nSideBarButtonComp.EVENT_TOGGLE_BUTTON_CLICKED = 'toggleButtonClicked';\n__decorate$27([\n    RefSelector('eToggleButton')\n], SideBarButtonComp.prototype, \"eToggleButton\", void 0);\n__decorate$27([\n    RefSelector('eIconWrapper')\n], SideBarButtonComp.prototype, \"eIconWrapper\", void 0);\n__decorate$27([\n    RefSelector('eLabel')\n], SideBarButtonComp.prototype, \"eLabel\", void 0);\n__decorate$27([\n    PostConstruct\n], SideBarButtonComp.prototype, \"postConstruct\", null);\n\nvar __decorate$26 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass SideBarButtonsComp extends Component {\n    constructor() {\n        super(SideBarButtonsComp.TEMPLATE);\n        this.buttonComps = [];\n    }\n    postConstruct() {\n        this.addManagedListener(this.getFocusableElement(), 'keydown', this.handleKeyDown.bind(this));\n    }\n    handleKeyDown(e) {\n        if (e.key !== KeyCode.TAB || !e.shiftKey) {\n            return;\n        }\n        const lastColumn = _.last(this.columnModel.getAllDisplayedColumns());\n        if (this.focusService.focusGridView(lastColumn, true)) {\n            e.preventDefault();\n        }\n    }\n    setActiveButton(id) {\n        this.buttonComps.forEach(comp => {\n            comp.setSelected(id === comp.getToolPanelId());\n        });\n    }\n    addButtonComp(def) {\n        const buttonComp = this.createBean(new SideBarButtonComp(def));\n        this.buttonComps.push(buttonComp);\n        this.appendChild(buttonComp);\n        buttonComp.addEventListener(SideBarButtonComp.EVENT_TOGGLE_BUTTON_CLICKED, () => {\n            this.dispatchEvent({\n                type: SideBarButtonsComp.EVENT_SIDE_BAR_BUTTON_CLICKED,\n                toolPanelId: def.id\n            });\n        });\n        return buttonComp;\n    }\n    clearButtons() {\n        this.buttonComps = this.destroyBeans(this.buttonComps);\n        _.clearElement(this.getGui());\n    }\n}\nSideBarButtonsComp.EVENT_SIDE_BAR_BUTTON_CLICKED = 'sideBarButtonClicked';\nSideBarButtonsComp.TEMPLATE = `<div class=\"ag-side-buttons\" role=\"tablist\"></div>`;\n__decorate$26([\n    Autowired('focusService')\n], SideBarButtonsComp.prototype, \"focusService\", void 0);\n__decorate$26([\n    Autowired('columnModel')\n], SideBarButtonsComp.prototype, \"columnModel\", void 0);\n__decorate$26([\n    PostConstruct\n], SideBarButtonsComp.prototype, \"postConstruct\", null);\n__decorate$26([\n    PreDestroy\n], SideBarButtonsComp.prototype, \"clearButtons\", null);\n\nclass SideBarDefParser {\n    static parse(toParse) {\n        if (!toParse) {\n            return undefined;\n        }\n        if (toParse === true) {\n            return {\n                toolPanels: [\n                    SideBarDefParser.DEFAULT_COLUMN_COMP,\n                    SideBarDefParser.DEFAULT_FILTER_COMP,\n                ],\n                defaultToolPanel: 'columns'\n            };\n        }\n        if (typeof toParse === 'string') {\n            return SideBarDefParser.parse([toParse]);\n        }\n        if (Array.isArray(toParse)) {\n            const comps = [];\n            toParse.forEach(key => {\n                const lookupResult = SideBarDefParser.DEFAULT_BY_KEY[key];\n                if (!lookupResult) {\n                    console.warn(`AG Grid: the key ${key} is not a valid key for specifying a tool panel, valid keys are: ${Object.keys(SideBarDefParser.DEFAULT_BY_KEY).join(',')}`);\n                    return;\n                }\n                comps.push(lookupResult);\n            });\n            if (comps.length === 0) {\n                return undefined;\n            }\n            return {\n                toolPanels: comps,\n                defaultToolPanel: comps[0].id\n            };\n        }\n        const result = {\n            toolPanels: SideBarDefParser.parseComponents(toParse.toolPanels),\n            defaultToolPanel: toParse.defaultToolPanel,\n            hiddenByDefault: toParse.hiddenByDefault,\n            position: toParse.position\n        };\n        return result;\n    }\n    static parseComponents(from) {\n        const result = [];\n        if (!from) {\n            return result;\n        }\n        from.forEach((it) => {\n            let toAdd = null;\n            if (typeof it === 'string') {\n                const lookupResult = SideBarDefParser.DEFAULT_BY_KEY[it];\n                if (!lookupResult) {\n                    console.warn(`AG Grid: the key ${it} is not a valid key for specifying a tool panel, valid keys are: ${Object.keys(SideBarDefParser.DEFAULT_BY_KEY).join(',')}`);\n                    return;\n                }\n                toAdd = lookupResult;\n            }\n            else {\n                toAdd = it;\n            }\n            result.push(toAdd);\n        });\n        return result;\n    }\n}\nSideBarDefParser.DEFAULT_COLUMN_COMP = {\n    id: 'columns',\n    labelDefault: 'Columns',\n    labelKey: 'columns',\n    iconKey: 'columns',\n    toolPanel: 'agColumnsToolPanel',\n};\nSideBarDefParser.DEFAULT_FILTER_COMP = {\n    id: 'filters',\n    labelDefault: 'Filters',\n    labelKey: 'filters',\n    iconKey: 'filter',\n    toolPanel: 'agFiltersToolPanel',\n};\nSideBarDefParser.DEFAULT_BY_KEY = {\n    columns: SideBarDefParser.DEFAULT_COLUMN_COMP,\n    filters: SideBarDefParser.DEFAULT_FILTER_COMP\n};\n\nvar __decorate$25 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ToolPanelWrapper extends Component {\n    constructor() {\n        super(ToolPanelWrapper.TEMPLATE);\n    }\n    setupResize() {\n        const eGui = this.getGui();\n        const resizeBar = this.resizeBar = this.createManagedBean(new HorizontalResizeComp());\n        eGui.setAttribute('id', `ag-${this.getCompId()}`);\n        resizeBar.setElementToResize(eGui);\n        this.appendChild(resizeBar);\n    }\n    getToolPanelId() {\n        return this.toolPanelId;\n    }\n    setToolPanelDef(toolPanelDef) {\n        const { id, minWidth, maxWidth, width } = toolPanelDef;\n        this.toolPanelId = id;\n        this.width = width;\n        const params = {};\n        const compDetails = this.userComponentFactory.getToolPanelCompDetails(toolPanelDef, params);\n        const componentPromise = compDetails.newAgStackInstance();\n        if (componentPromise == null) {\n            console.warn(`AG Grid: error processing tool panel component ${id}. You need to specify 'toolPanel'`);\n            return;\n        }\n        componentPromise.then(this.setToolPanelComponent.bind(this));\n        if (minWidth != null) {\n            this.resizeBar.setMinWidth(minWidth);\n        }\n        if (maxWidth != null) {\n            this.resizeBar.setMaxWidth(maxWidth);\n        }\n    }\n    setToolPanelComponent(compInstance) {\n        this.toolPanelCompInstance = compInstance;\n        this.appendChild(compInstance.getGui());\n        this.addDestroyFunc(() => {\n            this.destroyBean(compInstance);\n        });\n        if (this.width) {\n            this.getGui().style.width = `${this.width}px`;\n        }\n    }\n    getToolPanelInstance() {\n        return this.toolPanelCompInstance;\n    }\n    setResizerSizerSide(side) {\n        const isRtl = this.gridOptionsService.is('enableRtl');\n        const isLeft = side === 'left';\n        const inverted = isRtl ? isLeft : !isLeft;\n        this.resizeBar.setInverted(inverted);\n    }\n    refresh() {\n        this.toolPanelCompInstance.refresh();\n    }\n}\nToolPanelWrapper.TEMPLATE = `<div class=\"ag-tool-panel-wrapper\" role=\"tabpanel\"/>`;\n__decorate$25([\n    Autowired(\"userComponentFactory\")\n], ToolPanelWrapper.prototype, \"userComponentFactory\", void 0);\n__decorate$25([\n    PostConstruct\n], ToolPanelWrapper.prototype, \"setupResize\", null);\n\nvar __decorate$24 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass SideBarComp extends Component {\n    constructor() {\n        super(SideBarComp.TEMPLATE);\n        this.toolPanelWrappers = [];\n    }\n    postConstruct() {\n        this.sideBarButtonsComp.addEventListener(SideBarButtonsComp.EVENT_SIDE_BAR_BUTTON_CLICKED, this.onToolPanelButtonClicked.bind(this));\n        this.setSideBarDef();\n        this.addManagedPropertyListener('sideBar', () => {\n            this.clearDownUi();\n            this.setSideBarDef();\n        });\n        this.gridApi.registerSideBarComp(this);\n        this.createManagedBean(new ManagedFocusFeature(this.getFocusableElement(), {\n            onTabKeyDown: this.onTabKeyDown.bind(this),\n            handleKeyDown: this.handleKeyDown.bind(this)\n        }));\n    }\n    onTabKeyDown(e) {\n        if (e.defaultPrevented) {\n            return;\n        }\n        const { focusService, sideBarButtonsComp } = this;\n        const eGui = this.getGui();\n        const sideBarGui = sideBarButtonsComp.getGui();\n        const eDocument = this.gridOptionsService.getDocument();\n        const activeElement = eDocument.activeElement;\n        const openPanel = eGui.querySelector('.ag-tool-panel-wrapper:not(.ag-hidden)');\n        const target = e.target;\n        if (!openPanel) {\n            return;\n        }\n        if (sideBarGui.contains(activeElement)) {\n            if (focusService.focusInto(openPanel, e.shiftKey)) {\n                e.preventDefault();\n            }\n            return;\n        }\n        // only handle backwards focus to target the sideBar buttons\n        if (!e.shiftKey) {\n            return;\n        }\n        let nextEl = null;\n        if (openPanel.contains(activeElement)) {\n            nextEl = this.focusService.findNextFocusableElement(openPanel, undefined, true);\n        }\n        else if (focusService.isTargetUnderManagedComponent(openPanel, target) && e.shiftKey) {\n            nextEl = this.focusService.findFocusableElementBeforeTabGuard(openPanel, target);\n        }\n        if (!nextEl) {\n            nextEl = sideBarGui.querySelector('.ag-selected button');\n        }\n        if (nextEl) {\n            e.preventDefault();\n            nextEl.focus();\n        }\n    }\n    handleKeyDown(e) {\n        const eDocument = this.gridOptionsService.getDocument();\n        if (!this.sideBarButtonsComp.getGui().contains(eDocument.activeElement)) {\n            return;\n        }\n        const sideBarGui = this.sideBarButtonsComp.getGui();\n        const buttons = Array.prototype.slice.call(sideBarGui.querySelectorAll('.ag-side-button'));\n        const currentButton = eDocument.activeElement;\n        const currentPos = buttons.findIndex(button => button.contains(currentButton));\n        let nextPos = null;\n        switch (e.key) {\n            case KeyCode.LEFT:\n            case KeyCode.UP:\n                nextPos = Math.max(0, currentPos - 1);\n                break;\n            case KeyCode.RIGHT:\n            case KeyCode.DOWN:\n                nextPos = Math.min(currentPos + 1, buttons.length - 1);\n                break;\n        }\n        if (nextPos === null) {\n            return;\n        }\n        const innerButton = buttons[nextPos].querySelector('button');\n        if (innerButton) {\n            innerButton.focus();\n            e.preventDefault();\n        }\n    }\n    onToolPanelButtonClicked(event) {\n        const id = event.toolPanelId;\n        const openedItem = this.openedItem();\n        // if item was already open, we close it\n        if (openedItem === id) {\n            this.openToolPanel(undefined, 'sideBarButtonClicked'); // passing undefined closes\n        }\n        else {\n            this.openToolPanel(id, 'sideBarButtonClicked');\n        }\n    }\n    clearDownUi() {\n        this.sideBarButtonsComp.clearButtons();\n        this.destroyToolPanelWrappers();\n    }\n    setSideBarDef() {\n        // initially hide side bar\n        this.setDisplayed(false);\n        const sideBarRaw = this.gridOptionsService.get('sideBar');\n        this.sideBar = SideBarDefParser.parse(sideBarRaw);\n        if (!!this.sideBar && !!this.sideBar.toolPanels) {\n            const shouldDisplaySideBar = !this.sideBar.hiddenByDefault;\n            this.setDisplayed(shouldDisplaySideBar);\n            const toolPanelDefs = this.sideBar.toolPanels;\n            this.createToolPanelsAndSideButtons(toolPanelDefs);\n            this.setSideBarPosition(this.sideBar.position);\n            if (!this.sideBar.hiddenByDefault) {\n                this.openToolPanel(this.sideBar.defaultToolPanel, 'sideBarInitializing');\n            }\n        }\n    }\n    getDef() {\n        return this.sideBar;\n    }\n    setSideBarPosition(position) {\n        if (!position) {\n            position = 'right';\n        }\n        const isLeft = position === 'left';\n        const resizerSide = isLeft ? 'right' : 'left';\n        this.addOrRemoveCssClass('ag-side-bar-left', isLeft);\n        this.addOrRemoveCssClass('ag-side-bar-right', !isLeft);\n        this.toolPanelWrappers.forEach(wrapper => {\n            wrapper.setResizerSizerSide(resizerSide);\n        });\n        return this;\n    }\n    createToolPanelsAndSideButtons(defs) {\n        for (const def of defs) {\n            this.createToolPanelAndSideButton(def);\n        }\n    }\n    validateDef(def) {\n        if (def.id == null) {\n            console.warn(`AG Grid: please review all your toolPanel components, it seems like at least one of them doesn't have an id`);\n            return false;\n        }\n        // helpers, in case user doesn't have the right module loaded\n        if (def.toolPanel === 'agColumnsToolPanel') {\n            const moduleMissing = !ModuleRegistry.assertRegistered(ModuleNames.ColumnsToolPanelModule, 'Column Tool Panel', this.context.getGridId());\n            if (moduleMissing) {\n                return false;\n            }\n        }\n        if (def.toolPanel === 'agFiltersToolPanel') {\n            const moduleMissing = !ModuleRegistry.assertRegistered(ModuleNames.FiltersToolPanelModule, 'Filters Tool Panel', this.context.getGridId());\n            if (moduleMissing) {\n                return false;\n            }\n        }\n        return true;\n    }\n    createToolPanelAndSideButton(def) {\n        if (!this.validateDef(def)) {\n            return;\n        }\n        const button = this.sideBarButtonsComp.addButtonComp(def);\n        const wrapper = this.getContext().createBean(new ToolPanelWrapper());\n        wrapper.setToolPanelDef(def);\n        wrapper.setDisplayed(false);\n        const wrapperGui = wrapper.getGui();\n        this.appendChild(wrapperGui);\n        this.toolPanelWrappers.push(wrapper);\n        _.setAriaControls(button.getButtonElement(), wrapperGui);\n    }\n    refresh() {\n        this.toolPanelWrappers.forEach(wrapper => wrapper.refresh());\n    }\n    openToolPanel(key, source = 'api') {\n        const currentlyOpenedKey = this.openedItem();\n        if (currentlyOpenedKey === key) {\n            return;\n        }\n        this.toolPanelWrappers.forEach(wrapper => {\n            const show = key === wrapper.getToolPanelId();\n            wrapper.setDisplayed(show);\n        });\n        const newlyOpenedKey = this.openedItem();\n        const openToolPanelChanged = currentlyOpenedKey !== newlyOpenedKey;\n        if (openToolPanelChanged) {\n            this.sideBarButtonsComp.setActiveButton(key);\n            this.raiseToolPanelVisibleEvent(key, currentlyOpenedKey !== null && currentlyOpenedKey !== void 0 ? currentlyOpenedKey : undefined, source);\n        }\n    }\n    getToolPanelInstance(key) {\n        const toolPanelWrapper = this.toolPanelWrappers.filter(toolPanel => toolPanel.getToolPanelId() === key)[0];\n        if (!toolPanelWrapper) {\n            console.warn(`AG Grid: unable to lookup Tool Panel as invalid key supplied: ${key}`);\n            return;\n        }\n        return toolPanelWrapper.getToolPanelInstance();\n    }\n    raiseToolPanelVisibleEvent(key, previousKey, source) {\n        const switchingToolPanel = !!key && !!previousKey;\n        if (previousKey) {\n            const event = {\n                type: Events.EVENT_TOOL_PANEL_VISIBLE_CHANGED,\n                source,\n                key: previousKey,\n                visible: false,\n                switchingToolPanel,\n            };\n            this.eventService.dispatchEvent(event);\n        }\n        if (key) {\n            const event = {\n                type: Events.EVENT_TOOL_PANEL_VISIBLE_CHANGED,\n                source,\n                key,\n                visible: true,\n                switchingToolPanel,\n            };\n            this.eventService.dispatchEvent(event);\n        }\n    }\n    close(source = 'api') {\n        this.openToolPanel(undefined, source);\n    }\n    isToolPanelShowing() {\n        return !!this.openedItem();\n    }\n    openedItem() {\n        let activeToolPanel = null;\n        this.toolPanelWrappers.forEach(wrapper => {\n            if (wrapper.isDisplayed()) {\n                activeToolPanel = wrapper.getToolPanelId();\n            }\n        });\n        return activeToolPanel;\n    }\n    destroyToolPanelWrappers() {\n        this.toolPanelWrappers.forEach(wrapper => {\n            _.removeFromParent(wrapper.getGui());\n            this.destroyBean(wrapper);\n        });\n        this.toolPanelWrappers.length = 0;\n    }\n    destroy() {\n        this.destroyToolPanelWrappers();\n        super.destroy();\n    }\n}\nSideBarComp.TEMPLATE = `<div class=\"ag-side-bar ag-unselectable\">\n            <ag-side-bar-buttons ref=\"sideBarButtons\"></ag-side-bar-buttons>\n        </div>`;\n__decorate$24([\n    Autowired('gridApi')\n], SideBarComp.prototype, \"gridApi\", void 0);\n__decorate$24([\n    Autowired('focusService')\n], SideBarComp.prototype, \"focusService\", void 0);\n__decorate$24([\n    RefSelector('sideBarButtons')\n], SideBarComp.prototype, \"sideBarButtonsComp\", void 0);\n__decorate$24([\n    PostConstruct\n], SideBarComp.prototype, \"postConstruct\", null);\n\nvar __decorate$23 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ToolPanelColDefService = class ToolPanelColDefService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.isColGroupDef = (colDef) => colDef && typeof colDef.children !== 'undefined';\n        this.getId = (colDef) => {\n            return this.isColGroupDef(colDef) ? colDef.groupId : colDef.colId;\n        };\n    }\n    createColumnTree(colDefs) {\n        const invalidColIds = [];\n        const createDummyColGroup = (abstractColDef, depth) => {\n            if (this.isColGroupDef(abstractColDef)) {\n                // creating 'dummy' group which is not associated with grid column group\n                const groupDef = abstractColDef;\n                const groupId = (typeof groupDef.groupId !== 'undefined') ? groupDef.groupId : groupDef.headerName;\n                const group = new ProvidedColumnGroup(groupDef, groupId, false, depth);\n                const children = [];\n                groupDef.children.forEach(def => {\n                    const child = createDummyColGroup(def, depth + 1);\n                    // check column exists in case invalid colDef is supplied for primary column\n                    if (child) {\n                        children.push(child);\n                    }\n                });\n                group.setChildren(children);\n                return group;\n            }\n            else {\n                const colDef = abstractColDef;\n                const key = colDef.colId ? colDef.colId : colDef.field;\n                const column = this.columnModel.getPrimaryColumn(key);\n                if (!column) {\n                    invalidColIds.push(colDef);\n                }\n                return column;\n            }\n        };\n        const mappedResults = [];\n        colDefs.forEach(colDef => {\n            const result = createDummyColGroup(colDef, 0);\n            if (result) {\n                // only return correctly mapped colDef results\n                mappedResults.push(result);\n            }\n        });\n        if (invalidColIds.length > 0) {\n            console.warn('AG Grid: unable to find grid columns for the supplied colDef(s):', invalidColIds);\n        }\n        return mappedResults;\n    }\n    syncLayoutWithGrid(syncLayoutCallback) {\n        // extract ordered list of leaf path trees (column group hierarchy for each individual leaf column)\n        const leafPathTrees = this.getLeafPathTrees();\n        // merge leaf path tree taking split column groups into account\n        const mergedColumnTrees = this.mergeLeafPathTrees(leafPathTrees);\n        // sync layout with merged column trees\n        syncLayoutCallback(mergedColumnTrees);\n    }\n    getLeafPathTrees() {\n        // leaf tree paths are obtained by walking up the tree starting at a column until we reach the top level group.\n        const getLeafPathTree = (node, childDef) => {\n            let leafPathTree;\n            // build up tree in reverse order\n            if (node instanceof ProvidedColumnGroup) {\n                if (node.isPadding()) {\n                    // skip over padding groups\n                    leafPathTree = childDef;\n                }\n                else {\n                    const groupDef = Object.assign({}, node.getColGroupDef());\n                    // ensure group contains groupId\n                    groupDef.groupId = node.getGroupId();\n                    groupDef.children = [childDef];\n                    leafPathTree = groupDef;\n                }\n            }\n            else {\n                const colDef = Object.assign({}, node.getColDef());\n                // ensure col contains colId\n                colDef.colId = node.getColId();\n                leafPathTree = colDef;\n            }\n            // walk tree\n            const parent = node.getOriginalParent();\n            if (parent) {\n                // keep walking up the tree until we reach the root\n                return getLeafPathTree(parent, leafPathTree);\n            }\n            else {\n                // we have reached the root - exit with resulting leaf path tree\n                return leafPathTree;\n            }\n        };\n        // obtain a sorted list of all grid columns\n        const allGridColumns = this.columnModel.getAllGridColumns();\n        // only primary columns and non row group columns should appear in the tool panel\n        const allPrimaryGridColumns = allGridColumns.filter(column => {\n            const colDef = column.getColDef();\n            return column.isPrimary() && !colDef.showRowGroup;\n        });\n        // construct a leaf path tree for each column\n        return allPrimaryGridColumns.map(col => getLeafPathTree(col, col.getColDef()));\n    }\n    mergeLeafPathTrees(leafPathTrees) {\n        const matchingRootGroupIds = (pathA, pathB) => {\n            const bothPathsAreGroups = this.isColGroupDef(pathA) && this.isColGroupDef(pathB);\n            return bothPathsAreGroups && this.getId(pathA) === this.getId(pathB);\n        };\n        const mergeTrees = (treeA, treeB) => {\n            if (!this.isColGroupDef(treeB)) {\n                return treeA;\n            }\n            const mergeResult = treeA;\n            const groupToMerge = treeB;\n            if (groupToMerge.children && groupToMerge.groupId) {\n                const added = this.addChildrenToGroup(mergeResult, groupToMerge.groupId, groupToMerge.children[0]);\n                if (added) {\n                    return mergeResult;\n                }\n            }\n            groupToMerge.children.forEach(child => mergeTrees(mergeResult, child));\n            return mergeResult;\n        };\n        // we can't just merge the leaf path trees as groups can be split apart - instead only merge if leaf\n        // path groups with the same root group id are contiguous.\n        const mergeColDefs = [];\n        for (let i = 1; i <= leafPathTrees.length; i++) {\n            const first = leafPathTrees[i - 1];\n            const second = leafPathTrees[i];\n            if (matchingRootGroupIds(first, second)) {\n                leafPathTrees[i] = mergeTrees(first, second);\n            }\n            else {\n                mergeColDefs.push(first);\n            }\n        }\n        return mergeColDefs;\n    }\n    addChildrenToGroup(tree, groupId, colDef) {\n        const subGroupIsSplit = (currentSubGroup, currentSubGroupToAdd) => {\n            const existingChildIds = currentSubGroup.children.map(this.getId);\n            const childGroupAlreadyExists = _.includes(existingChildIds, this.getId(currentSubGroupToAdd));\n            const lastChild = _.last(currentSubGroup.children);\n            const lastChildIsDifferent = lastChild && this.getId(lastChild) !== this.getId(currentSubGroupToAdd);\n            return childGroupAlreadyExists && lastChildIsDifferent;\n        };\n        if (!this.isColGroupDef(tree)) {\n            return true;\n        }\n        const currentGroup = tree;\n        const groupToAdd = colDef;\n        if (subGroupIsSplit(currentGroup, groupToAdd)) {\n            currentGroup.children.push(groupToAdd);\n            return true;\n        }\n        if (currentGroup.groupId === groupId) {\n            // add children that don't already exist to group\n            const existingChildIds = currentGroup.children.map(this.getId);\n            const colDefAlreadyPresent = _.includes(existingChildIds, this.getId(groupToAdd));\n            if (!colDefAlreadyPresent) {\n                currentGroup.children.push(groupToAdd);\n                return true;\n            }\n        }\n        // recurse until correct group is found to add children\n        currentGroup.children.forEach(subGroup => this.addChildrenToGroup(subGroup, groupId, colDef));\n        return false;\n    }\n};\n__decorate$23([\n    Autowired('columnModel')\n], ToolPanelColDefService.prototype, \"columnModel\", void 0);\nToolPanelColDefService = __decorate$23([\n    Bean('toolPanelColDefService')\n], ToolPanelColDefService);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$f = '30.0.3';\n\nconst SideBarModule = {\n    version: VERSION$f,\n    moduleName: ModuleNames.SideBarModule,\n    beans: [ToolPanelColDefService],\n    agStackComponents: [\n        { componentName: 'AgHorizontalResize', componentClass: HorizontalResizeComp },\n        { componentName: 'AgSideBar', componentClass: SideBarComp },\n        { componentName: 'AgSideBarButtons', componentClass: SideBarButtonsComp },\n    ],\n    dependantModules: [\n        EnterpriseCoreModule\n    ]\n};\n\nvar __decorate$22 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ModelItemUtils = class ModelItemUtils {\n    selectAllChildren(colTree, selectAllChecked, eventType) {\n        const cols = this.extractAllLeafColumns(colTree);\n        this.setAllColumns(cols, selectAllChecked, eventType);\n    }\n    setColumn(col, selectAllChecked, eventType) {\n        this.setAllColumns([col], selectAllChecked, eventType);\n    }\n    setAllColumns(cols, selectAllChecked, eventType) {\n        if (this.columnModel.isPivotMode()) {\n            this.setAllPivot(cols, selectAllChecked, eventType);\n        }\n        else {\n            this.setAllVisible(cols, selectAllChecked, eventType);\n        }\n    }\n    extractAllLeafColumns(allItems) {\n        const res = [];\n        const recursiveFunc = (items) => {\n            items.forEach(item => {\n                if (!item.isPassesFilter()) {\n                    return;\n                }\n                if (item.isGroup()) {\n                    recursiveFunc(item.getChildren());\n                }\n                else {\n                    res.push(item.getColumn());\n                }\n            });\n        };\n        recursiveFunc(allItems);\n        return res;\n    }\n    setAllVisible(columns, visible, eventType) {\n        const colStateItems = [];\n        columns.forEach(col => {\n            if (col.getColDef().lockVisible) {\n                return;\n            }\n            if (col.isVisible() != visible) {\n                colStateItems.push({\n                    colId: col.getId(),\n                    hide: !visible\n                });\n            }\n        });\n        if (colStateItems.length > 0) {\n            this.columnModel.applyColumnState({ state: colStateItems }, eventType);\n        }\n    }\n    setAllPivot(columns, value, eventType) {\n        if (this.gridOptionsService.is('functionsPassive')) {\n            this.setAllPivotPassive(columns, value);\n        }\n        else {\n            this.setAllPivotActive(columns, value, eventType);\n        }\n    }\n    setAllPivotPassive(columns, value) {\n        const copyOfPivotColumns = this.columnModel.getPivotColumns().slice();\n        const copyOfValueColumns = this.columnModel.getValueColumns().slice();\n        const copyOfRowGroupColumns = this.columnModel.getRowGroupColumns().slice();\n        let pivotChanged = false;\n        let valueChanged = false;\n        let rowGroupChanged = false;\n        const turnOnAction = (col) => {\n            // don't change any column that's already got a function active\n            if (col.isAnyFunctionActive()) {\n                return;\n            }\n            if (col.isAllowValue()) {\n                copyOfValueColumns.push(col);\n                valueChanged = true;\n            }\n            else if (col.isAllowRowGroup()) {\n                copyOfRowGroupColumns.push(col);\n                pivotChanged = true;\n            }\n            else if (col.isAllowPivot()) {\n                copyOfPivotColumns.push(col);\n                rowGroupChanged = true;\n            }\n        };\n        const turnOffAction = (col) => {\n            if (!col.isAnyFunctionActive()) {\n                return;\n            }\n            if (copyOfPivotColumns.indexOf(col) >= 0) {\n                _.removeFromArray(copyOfPivotColumns, col);\n                pivotChanged = true;\n            }\n            if (copyOfValueColumns.indexOf(col) >= 0) {\n                _.removeFromArray(copyOfValueColumns, col);\n                valueChanged = true;\n            }\n            if (copyOfRowGroupColumns.indexOf(col) >= 0) {\n                _.removeFromArray(copyOfRowGroupColumns, col);\n                rowGroupChanged = true;\n            }\n        };\n        const action = value ? turnOnAction : turnOffAction;\n        columns.forEach(action);\n        if (pivotChanged) {\n            const event = {\n                type: Events.EVENT_COLUMN_PIVOT_CHANGE_REQUEST,\n                columns: copyOfPivotColumns\n            };\n            this.eventService.dispatchEvent(event);\n        }\n        if (rowGroupChanged) {\n            const event = {\n                type: Events.EVENT_COLUMN_ROW_GROUP_CHANGE_REQUEST,\n                columns: copyOfRowGroupColumns\n            };\n            this.eventService.dispatchEvent(event);\n        }\n        if (valueChanged) {\n            const event = {\n                type: Events.EVENT_COLUMN_VALUE_CHANGE_REQUEST,\n                columns: copyOfRowGroupColumns\n            };\n            this.eventService.dispatchEvent(event);\n        }\n    }\n    setAllPivotActive(columns, value, eventType) {\n        const colStateItems = [];\n        const turnOnAction = (col) => {\n            // don't change any column that's already got a function active\n            if (col.isAnyFunctionActive()) {\n                return;\n            }\n            if (col.isAllowValue()) {\n                const aggFunc = typeof col.getAggFunc() === 'string'\n                    ? col.getAggFunc()\n                    : this.aggFuncService.getDefaultAggFunc(col);\n                colStateItems.push({\n                    colId: col.getId(),\n                    aggFunc: aggFunc\n                });\n            }\n            else if (col.isAllowRowGroup()) {\n                colStateItems.push({\n                    colId: col.getId(),\n                    rowGroup: true\n                });\n            }\n            else if (col.isAllowPivot()) {\n                colStateItems.push({\n                    colId: col.getId(),\n                    pivot: true\n                });\n            }\n        };\n        const turnOffAction = (col) => {\n            const isActive = col.isPivotActive() || col.isRowGroupActive() || col.isValueActive();\n            if (isActive) {\n                colStateItems.push({\n                    colId: col.getId(),\n                    pivot: false,\n                    rowGroup: false,\n                    aggFunc: null\n                });\n            }\n        };\n        const action = value ? turnOnAction : turnOffAction;\n        columns.forEach(action);\n        if (colStateItems.length > 0) {\n            this.columnModel.applyColumnState({ state: colStateItems }, eventType);\n        }\n    }\n};\n__decorate$22([\n    Autowired('aggFuncService')\n], ModelItemUtils.prototype, \"aggFuncService\", void 0);\n__decorate$22([\n    Autowired('columnModel')\n], ModelItemUtils.prototype, \"columnModel\", void 0);\n__decorate$22([\n    Autowired('gridOptionsService')\n], ModelItemUtils.prototype, \"gridOptionsService\", void 0);\n__decorate$22([\n    Autowired('eventService')\n], ModelItemUtils.prototype, \"eventService\", void 0);\nModelItemUtils = __decorate$22([\n    Bean('modelItemUtils')\n], ModelItemUtils);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$e = '30.0.3';\n\nconst ColumnsToolPanelModule = {\n    version: VERSION$e,\n    moduleName: ModuleNames.ColumnsToolPanelModule,\n    beans: [ModelItemUtils],\n    agStackComponents: [\n        { componentName: 'AgPrimaryColsHeader', componentClass: PrimaryColsHeaderPanel },\n        { componentName: 'AgPrimaryColsList', componentClass: PrimaryColsListPanel },\n        { componentName: 'AgPrimaryCols', componentClass: PrimaryColsPanel }\n    ],\n    userComponents: [\n        { componentName: 'agColumnsToolPanel', componentClass: ColumnToolPanel },\n    ],\n    dependantModules: [\n        EnterpriseCoreModule,\n        RowGroupingModule,\n        SideBarModule\n    ]\n};\n\nconst workbook = {\n    getTemplate() {\n        return {\n            name: \"Workbook\",\n            properties: {\n                prefixedAttributes: [{\n                        prefix: \"xmlns:\",\n                        map: {\n                            o: \"urn:schemas-microsoft-com:office:office\",\n                            x: \"urn:schemas-microsoft-com:office:excel\",\n                            ss: \"urn:schemas-microsoft-com:office:spreadsheet\",\n                            html: \"http://www.w3.org/TR/REC-html40\"\n                        },\n                    }],\n                rawMap: {\n                    xmlns: \"urn:schemas-microsoft-com:office:spreadsheet\"\n                }\n            }\n        };\n    }\n};\n\nconst excelWorkbook = {\n    getTemplate() {\n        return {\n            name: \"ExcelWorkbook\",\n            properties: {\n                rawMap: {\n                    xmlns: \"urn:schemas-microsoft-com:office:excel\"\n                }\n            },\n            children: [{\n                    name: \"WindowHeight\",\n                    textNode: \"8130\"\n                }, {\n                    name: \"WindowWidth\",\n                    textNode: \"15135\"\n                }, {\n                    name: \"WindowHeight\",\n                    textNode: \"8130\"\n                }, {\n                    name: \"WindowTopX\",\n                    textNode: \"120\"\n                }, {\n                    name: \"WindowTopY\",\n                    textNode: \"45\"\n                }, {\n                    name: \"ProtectStructure\",\n                    textNode: \"False\"\n                }, {\n                    name: \"ProtectWindow\",\n                    textNode: \"False\"\n                }]\n        };\n    }\n};\n\nconst column = {\n    getTemplate(c) {\n        const { width } = c;\n        return {\n            name: \"Column\",\n            properties: {\n                prefixedAttributes: [{\n                        prefix: \"ss:\",\n                        map: {\n                            Width: width\n                        }\n                    }]\n            }\n        };\n    }\n};\n\nconst cell = {\n    getTemplate(c) {\n        const { mergeAcross, styleId, data } = c;\n        const properties = {};\n        if (mergeAcross) {\n            properties.MergeAcross = mergeAcross;\n        }\n        if (styleId) {\n            properties.StyleID = styleId;\n        }\n        return {\n            name: \"Cell\",\n            properties: {\n                prefixedAttributes: [{\n                        prefix: \"ss:\",\n                        map: properties\n                    }]\n            },\n            children: [{\n                    name: \"Data\",\n                    properties: {\n                        prefixedAttributes: [{\n                                prefix: \"ss:\",\n                                map: {\n                                    Type: data === null || data === void 0 ? void 0 : data.type\n                                }\n                            }]\n                    },\n                    textNode: data === null || data === void 0 ? void 0 : data.value\n                }]\n        };\n    }\n};\n\nconst row = {\n    getTemplate(r) {\n        const { cells } = r;\n        return {\n            name: \"Row\",\n            children: cells.map(it => cell.getTemplate(it))\n        };\n    }\n};\n\nconst worksheet = {\n    getTemplate(ws) {\n        const { table, name } = ws;\n        const { columns, rows } = table;\n        const c = columns.map(it => column.getTemplate(it));\n        const r = rows.map(it => row.getTemplate(it));\n        return {\n            name: \"Worksheet\",\n            children: [{\n                    name: \"Table\",\n                    children: c.concat(r)\n                }],\n            properties: {\n                prefixedAttributes: [{\n                        prefix: \"ss:\",\n                        map: {\n                            Name: name\n                        }\n                    }]\n            }\n        };\n    }\n};\n\nconst documentProperties = {\n    getTemplate() {\n        return {\n            name: \"DocumentProperties\",\n            properties: {\n                rawMap: {\n                    xmlns: \"urn:schemas-microsoft-com:office:office\"\n                }\n            },\n            children: [{\n                    name: \"Version\",\n                    textNode: \"12.00\"\n                }]\n        };\n    }\n};\n\nconst alignment = {\n    getTemplate(styleProperties) {\n        const { vertical, horizontal, indent, readingOrder, rotate, shrinkToFit, verticalText, wrapText } = styleProperties.alignment;\n        return {\n            name: 'Alignment',\n            properties: {\n                prefixedAttributes: [{\n                        prefix: \"ss:\",\n                        map: {\n                            Vertical: vertical,\n                            Horizontal: horizontal,\n                            Indent: indent,\n                            ReadingOrder: readingOrder,\n                            Rotate: rotate,\n                            ShrinkToFit: shrinkToFit,\n                            VerticalText: verticalText,\n                            WrapText: wrapText\n                        }\n                    }]\n            }\n        };\n    }\n};\n\nconst borders = {\n    getTemplate(styleProperties) {\n        const { borderBottom, borderLeft, borderRight, borderTop } = styleProperties.borders;\n        return {\n            name: 'Borders',\n            children: [borderBottom, borderLeft, borderRight, borderTop].map((it, index) => {\n                const current = index == 0 ? \"Bottom\" : index == 1 ? \"Left\" : index == 2 ? \"Right\" : \"Top\";\n                return {\n                    name: 'Border',\n                    properties: {\n                        prefixedAttributes: [{\n                                prefix: 'ss:',\n                                map: {\n                                    Position: current,\n                                    LineStyle: it.lineStyle,\n                                    Weight: it.weight,\n                                    Color: it.color\n                                }\n                            }]\n                    }\n                };\n            })\n        };\n    }\n};\n\nconst font = {\n    getTemplate(styleProperties) {\n        const { bold, fontName, italic, color, outline, shadow, size, strikeThrough, underline, verticalAlign, charSet, family, } = styleProperties.font;\n        return {\n            name: \"Font\",\n            properties: {\n                prefixedAttributes: [{\n                        prefix: \"ss:\",\n                        map: {\n                            Bold: bold,\n                            FontName: fontName,\n                            Italic: italic,\n                            Color: color,\n                            Outline: outline,\n                            Shadow: shadow,\n                            Size: size,\n                            StrikeThrough: strikeThrough,\n                            Underline: underline,\n                            VerticalAlign: verticalAlign\n                        }\n                    }, {\n                        prefix: \"x:\",\n                        map: {\n                            CharSet: charSet,\n                            Family: family\n                        }\n                    }]\n            }\n        };\n    }\n};\n\nconst interior = {\n    getTemplate(styleProperties) {\n        const { color, pattern, patternColor } = styleProperties.interior;\n        return {\n            name: \"Interior\",\n            properties: {\n                prefixedAttributes: [{\n                        prefix: \"ss:\",\n                        map: {\n                            Color: color,\n                            Pattern: pattern,\n                            PatternColor: patternColor\n                        }\n                    }]\n            }\n        };\n    }\n};\n\nconst protection = {\n    getTemplate(styleProperties) {\n        return {\n            name: \"Protection\",\n            properties: {\n                prefixedAttributes: [{\n                        prefix: \"ss:\",\n                        map: {\n                            Protected: styleProperties.protection.protected,\n                            HideFormula: styleProperties.protection.hideFormula\n                        }\n                    }]\n            }\n        };\n    }\n};\n\nconst numberFormat = {\n    getTemplate(styleProperties) {\n        const { format } = styleProperties.numberFormat;\n        return {\n            name: \"NumberFormat\",\n            properties: {\n                prefixedAttributes: [{\n                        prefix: \"ss:\",\n                        map: {\n                            Format: format\n                        }\n                    }]\n            }\n        };\n    }\n};\n\nconst style = {\n    getTemplate(styleProperties) {\n        const { id, name } = styleProperties;\n        return {\n            name: 'Style',\n            properties: {\n                prefixedAttributes: [{\n                        prefix: \"ss:\",\n                        map: {\n                            ID: id,\n                            Name: name ? name : id\n                        }\n                    }]\n            }\n        };\n    }\n};\n\n/**\n * See https://msdn.microsoft.com/en-us/library/aa140066(v=office.10).aspx\n */\nclass ExcelXmlFactory {\n    static createExcel(styles, currentWorksheet) {\n        const header = this.excelXmlHeader();\n        const docProps = documentProperties.getTemplate();\n        const eWorkbook = excelWorkbook.getTemplate();\n        const wb = this.workbook(docProps, eWorkbook, styles, currentWorksheet);\n        return `${header}${XmlFactory.createXml(wb, boolean => boolean ? '1' : '0')}`;\n    }\n    static workbook(docProperties, eWorkbook, styles, currentWorksheet) {\n        const children = [\n            docProperties,\n            eWorkbook,\n            this.stylesXmlElement(styles)\n        ].concat(worksheet.getTemplate(currentWorksheet));\n        return Object.assign({}, workbook.getTemplate(), { children });\n    }\n    static excelXmlHeader() {\n        return `<?xml version=\"1.0\" ?>\n        <?mso-application progid=\"Excel.Sheet\" ?>\n        `;\n    }\n    static stylesXmlElement(styles) {\n        return {\n            name: 'Styles',\n            children: styles ? styles.map(it => this.styleXmlElement(it)) : []\n        };\n    }\n    static styleXmlElement(styleProperties) {\n        const children = _.compose(this.addProperty('alignment', styleProperties), this.addProperty('borders', styleProperties), this.addProperty('font', styleProperties), this.addProperty('interior', styleProperties), this.addProperty('protection', styleProperties), this.addProperty('numberFormat', styleProperties))([]);\n        return Object.assign({}, style.getTemplate(styleProperties), { children });\n    }\n    static addProperty(property, styleProperties) {\n        return (children) => {\n            if (!styleProperties[property]) {\n                return children;\n            }\n            const options = {\n                alignment,\n                borders,\n                font,\n                interior,\n                numberFormat,\n                protection\n            };\n            return children.concat(options[property].getTemplate(styleProperties));\n        };\n    }\n}\nExcelXmlFactory.factoryMode = ExcelFactoryMode.SINGLE_SHEET;\n\nconst INCH_TO_EMU = 9525;\nconst numberFormatMap = {\n    '0': 1,\n    '0.00': 2,\n    '#,##0': 3,\n    '#,##0.00': 4,\n    '0%': 9,\n    '0.00%': 10,\n    '0.00E+00': 11,\n    '# ?/?': 12,\n    '# ??/??': 13,\n    'mm-dd-yy': 14,\n    'd-mmm-yy': 15,\n    'd-mmm': 16,\n    'mmm-yy': 17,\n    'h:mm AM/PM': 18,\n    'h:mm:ss AM/PM': 19,\n    'h:mm': 20,\n    'h:mm:ss': 21,\n    'm/d/yy h:mm': 22,\n    '#,##0 ;(#,##0)': 37,\n    '#,##0 ;[Red](#,##0)': 38,\n    '#,##0.00;(#,##0.00)': 39,\n    '#,##0.00;[Red](#,##0.00)': 40,\n    'mm:ss': 45,\n    '[h]:mm:ss': 46,\n    'mmss.0': 47,\n    '##0.0E+0': 48,\n    '@': 49\n};\n\nconst pixelsToPoint = (pixels) => {\n    return Math.round(pixels * 72 / 96);\n};\nconst pointsToPixel = (points) => {\n    return Math.round(points * 96 / 72);\n};\nconst pixelsToEMU = (value) => {\n    return Math.ceil(value * INCH_TO_EMU);\n};\nconst getFontFamilyId = (name) => {\n    if (name === undefined) {\n        return;\n    }\n    const families = ['Automatic', 'Roman', 'Swiss', 'Modern', 'Script', 'Decorative'];\n    const pos = families.indexOf(name || 'Automatic');\n    return Math.max(pos, 0);\n};\nconst getHeightFromProperty = (rowIndex, height) => {\n    if (!height) {\n        return;\n    }\n    let finalHeight;\n    if (typeof height === 'number') {\n        finalHeight = height;\n    }\n    else {\n        const heightFunc = height;\n        finalHeight = heightFunc({ rowIndex });\n    }\n    return pixelsToPoint(finalHeight);\n};\nconst setExcelImageTotalWidth = (image, columnsToExport) => {\n    const { colSpan, column } = image.position;\n    if (image.width) {\n        if (colSpan) {\n            const columnsInSpan = columnsToExport.slice(column - 1, column + colSpan - 1);\n            let totalWidth = 0;\n            for (let i = 0; i < columnsInSpan.length; i++) {\n                const colWidth = columnsInSpan[i].getActualWidth();\n                if (image.width < totalWidth + colWidth) {\n                    image.position.colSpan = i + 1;\n                    image.totalWidth = image.width;\n                    image.width = image.totalWidth - totalWidth;\n                    break;\n                }\n                totalWidth += colWidth;\n            }\n        }\n        else {\n            image.totalWidth = image.width;\n        }\n    }\n};\nconst setExcelImageTotalHeight = (image, rowHeight) => {\n    const { rowSpan, row } = image.position;\n    if (image.height) {\n        if (rowSpan) {\n            let totalHeight = 0;\n            let counter = 0;\n            for (let i = row; i < row + rowSpan; i++) {\n                const nextRowHeight = pointsToPixel(getHeightFromProperty(i, rowHeight) || 20);\n                if (image.height < totalHeight + nextRowHeight) {\n                    image.position.rowSpan = counter + 1;\n                    image.totalHeight = image.height;\n                    image.height = image.totalHeight - totalHeight;\n                    break;\n                }\n                totalHeight += nextRowHeight;\n                counter++;\n            }\n        }\n        else {\n            image.totalHeight = image.height;\n        }\n    }\n};\nconst createXmlPart = (body) => {\n    const header = XmlFactory.createHeader({\n        encoding: 'UTF-8',\n        standalone: 'yes'\n    });\n    const xmlBody = XmlFactory.createXml(body);\n    return `${header}${xmlBody}`;\n};\nconst getExcelColumnName = (colIdx) => {\n    const startCode = 65;\n    const tableWidth = 26;\n    const fromCharCode = String.fromCharCode;\n    const pos = Math.floor(colIdx / tableWidth);\n    const tableIdx = colIdx % tableWidth;\n    if (!pos || colIdx === tableWidth) {\n        return fromCharCode(startCode + colIdx - 1);\n    }\n    if (!tableIdx) {\n        return getExcelColumnName(pos - 1) + 'Z';\n    }\n    if (pos < tableWidth) {\n        return fromCharCode(startCode + pos - 1) + fromCharCode(startCode + tableIdx - 1);\n    }\n    return getExcelColumnName(pos) + fromCharCode(startCode + tableIdx - 1);\n};\n\nclass BaseExcelSerializingSession extends BaseGridSerializingSession {\n    constructor(config) {\n        super(config);\n        this.mixedStyles = {};\n        this.mixedStyleCounter = 0;\n        this.rows = [];\n        this.config = Object.assign({}, config);\n        this.stylesByIds = {};\n        this.config.baseExcelStyles.forEach(style => {\n            this.stylesByIds[style.id] = style;\n        });\n        this.excelStyles = [...this.config.baseExcelStyles];\n    }\n    addCustomContent(customContent) {\n        customContent.forEach(row => {\n            const rowLen = this.rows.length + 1;\n            let outlineLevel;\n            if (!this.config.suppressRowOutline && row.outlineLevel != null) {\n                outlineLevel = row.outlineLevel;\n            }\n            const rowObj = {\n                height: getHeightFromProperty(rowLen, row.height || this.config.rowHeight),\n                cells: (row.cells || []).map((cell, idx) => {\n                    var _a, _b, _c;\n                    const image = this.addImage(rowLen, this.columnsToExport[idx], (_a = cell.data) === null || _a === void 0 ? void 0 : _a.value);\n                    let excelStyles = null;\n                    if (cell.styleId) {\n                        excelStyles = typeof cell.styleId === 'string' ? [cell.styleId] : cell.styleId;\n                    }\n                    const excelStyleId = this.getStyleId(excelStyles);\n                    if (image) {\n                        return this.createCell(excelStyleId, this.getDataTypeForValue(image.value), image.value == null ? '' : image.value);\n                    }\n                    const value = (_c = (_b = cell.data) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : '';\n                    const type = this.getDataTypeForValue(value);\n                    if (cell.mergeAcross) {\n                        return this.createMergedCell(excelStyleId, type, value, cell.mergeAcross);\n                    }\n                    return this.createCell(excelStyleId, type, value);\n                }),\n                outlineLevel\n            };\n            if (row.collapsed != null) {\n                rowObj.collapsed = row.collapsed;\n            }\n            if (row.hidden != null) {\n                rowObj.hidden = row.hidden;\n            }\n            this.rows.push(rowObj);\n        });\n    }\n    onNewHeaderGroupingRow() {\n        const currentCells = [];\n        this.rows.push({\n            cells: currentCells,\n            height: getHeightFromProperty(this.rows.length + 1, this.config.headerRowHeight)\n        });\n        return {\n            onColumn: (columnGroup, header, index, span, collapsibleRanges) => {\n                const styleIds = this.config.styleLinker({ rowType: RowType.HEADER_GROUPING, rowIndex: 1, value: `grouping-${header}`, columnGroup });\n                currentCells.push(Object.assign(Object.assign({}, this.createMergedCell(this.getStyleId(styleIds), this.getDataTypeForValue('string'), header, span)), { collapsibleRanges }));\n            }\n        };\n    }\n    onNewHeaderRow() {\n        return this.onNewRow(this.onNewHeaderColumn, this.config.headerRowHeight);\n    }\n    onNewBodyRow(node) {\n        const rowAccumulator = this.onNewRow(this.onNewBodyColumn, this.config.rowHeight);\n        if (node) {\n            this.addRowOutlineIfNecessary(node);\n        }\n        return rowAccumulator;\n    }\n    addRowOutlineIfNecessary(node) {\n        const { gridOptionsService, suppressRowOutline, rowGroupExpandState = 'expanded' } = this.config;\n        const isGroupHideOpenParents = gridOptionsService.is('groupHideOpenParents');\n        if (isGroupHideOpenParents || suppressRowOutline || node.level == null) {\n            return;\n        }\n        const padding = node.footer ? 1 : 0;\n        const currentRow = _.last(this.rows);\n        currentRow.outlineLevel = node.level + padding;\n        if (rowGroupExpandState === 'expanded') {\n            return;\n        }\n        const collapseAll = rowGroupExpandState === 'collapsed';\n        if (node.isExpandable()) {\n            const isExpanded = !collapseAll && node.expanded;\n            currentRow.collapsed = !isExpanded;\n        }\n        currentRow.hidden =\n            // always show the node if there is no parent to be expanded\n            !!node.parent &&\n                // or if it is a child of the root node\n                node.parent.level !== -1 &&\n                (collapseAll || this.isAnyParentCollapsed(node.parent));\n    }\n    isAnyParentCollapsed(node) {\n        while (node && node.level !== -1) {\n            if (!node.expanded) {\n                return true;\n            }\n            node = node.parent;\n        }\n        return false;\n    }\n    prepare(columnsToExport) {\n        super.prepare(columnsToExport);\n        this.columnsToExport = [...columnsToExport];\n        this.cols = columnsToExport.map((col, i) => this.convertColumnToExcel(col, i));\n    }\n    parse() {\n        // adding custom content might have made some rows wider than the grid, so add new columns\n        const longestRow = this.rows.reduce((a, b) => Math.max(a, b.cells.length), 0);\n        while (this.cols.length < longestRow) {\n            this.cols.push(this.convertColumnToExcel(null, this.cols.length + 1));\n        }\n        const data = {\n            name: this.config.sheetName,\n            table: {\n                columns: this.cols,\n                rows: this.rows\n            }\n        };\n        return this.createExcel(data);\n    }\n    isFormula(value) {\n        if (value == null) {\n            return false;\n        }\n        return this.config.autoConvertFormulas && value.toString().startsWith('=');\n    }\n    isNumerical(value) {\n        if (typeof value === 'bigint') {\n            return true;\n        }\n        return isFinite(value) && value !== '' && !isNaN(parseFloat(value));\n    }\n    getStyleById(styleId) {\n        if (styleId == null) {\n            return null;\n        }\n        return this.stylesByIds[styleId] || null;\n    }\n    convertColumnToExcel(column, index) {\n        const columnWidth = this.config.columnWidth;\n        if (columnWidth) {\n            if (typeof columnWidth === 'number') {\n                return { width: columnWidth };\n            }\n            return { width: columnWidth({ column, index }) };\n        }\n        if (column) {\n            const smallestUsefulWidth = 75;\n            return { width: Math.max(column.getActualWidth(), smallestUsefulWidth) };\n        }\n        return {};\n    }\n    onNewHeaderColumn(rowIndex, currentCells) {\n        return (column, index) => {\n            const nameForCol = this.extractHeaderValue(column);\n            const styleIds = this.config.styleLinker({ rowType: RowType.HEADER, rowIndex, value: nameForCol, column });\n            currentCells.push(this.createCell(this.getStyleId(styleIds), this.getDataTypeForValue('string'), nameForCol));\n        };\n    }\n    onNewRow(onNewColumnAccumulator, height) {\n        const currentCells = [];\n        this.rows.push({\n            cells: currentCells,\n            height: getHeightFromProperty(this.rows.length + 1, height)\n        });\n        return {\n            onColumn: onNewColumnAccumulator.bind(this, this.rows.length, currentCells)()\n        };\n    }\n    onNewBodyColumn(rowIndex, currentCells) {\n        let skipCols = 0;\n        return (column, index, node) => {\n            if (skipCols > 0) {\n                skipCols -= 1;\n                return;\n            }\n            const { value: valueForCell, valueFormatted } = this.extractRowCellValue(column, index, rowIndex, 'excel', node);\n            const styleIds = this.config.styleLinker({ rowType: RowType.BODY, rowIndex, value: valueForCell, column, node });\n            const excelStyleId = this.getStyleId(styleIds);\n            const colSpan = column.getColSpan(node);\n            const addedImage = this.addImage(rowIndex, column, valueForCell);\n            if (addedImage) {\n                currentCells.push(this.createCell(excelStyleId, this.getDataTypeForValue(addedImage.value), addedImage.value == null ? '' : addedImage.value));\n            }\n            else if (colSpan > 1) {\n                skipCols = colSpan - 1;\n                currentCells.push(this.createMergedCell(excelStyleId, this.getDataTypeForValue(valueForCell), valueForCell, colSpan - 1));\n            }\n            else {\n                currentCells.push(this.createCell(excelStyleId, this.getDataTypeForValue(valueForCell), valueForCell, valueFormatted));\n            }\n        };\n    }\n    getStyleId(styleIds) {\n        if (!styleIds || !styleIds.length) {\n            return null;\n        }\n        if (styleIds.length === 1) {\n            return styleIds[0];\n        }\n        const key = styleIds.join(\"-\");\n        if (!this.mixedStyles[key]) {\n            this.addNewMixedStyle(styleIds);\n        }\n        return this.mixedStyles[key].excelID;\n    }\n    addNewMixedStyle(styleIds) {\n        this.mixedStyleCounter += 1;\n        const excelId = `mixedStyle${this.mixedStyleCounter}`;\n        const resultantStyle = {};\n        styleIds.forEach((styleId) => {\n            this.excelStyles.forEach((excelStyle) => {\n                if (excelStyle.id === styleId) {\n                    _.mergeDeep(resultantStyle, _.deepCloneObject(excelStyle));\n                }\n            });\n        });\n        resultantStyle.id = excelId;\n        resultantStyle.name = excelId;\n        const key = styleIds.join(\"-\");\n        this.mixedStyles[key] = {\n            excelID: excelId,\n            key: key,\n            result: resultantStyle\n        };\n        this.excelStyles.push(resultantStyle);\n        this.stylesByIds[excelId] = resultantStyle;\n    }\n}\n\nclass ExcelXmlSerializingSession extends BaseExcelSerializingSession {\n    createExcel(data) {\n        return ExcelXmlFactory.createExcel(this.excelStyles, data);\n    }\n    getDataTypeForValue(valueForCell) {\n        return this.isNumerical(valueForCell) ? 'Number' : 'String';\n    }\n    getType(type, style, value) {\n        if (this.isFormula(value)) {\n            return 'Formula';\n        }\n        if (style && style.dataType) {\n            switch (style.dataType.toLocaleLowerCase()) {\n                case 'string':\n                    return 'Formula';\n                case 'number':\n                    return 'Number';\n                case 'datetime':\n                    return 'DateTime';\n                case 'error':\n                    return 'Error';\n                case 'boolean':\n                    return 'Boolean';\n                default:\n                    console.warn(`AG Grid: Unrecognized data type for excel export [${style.id}.dataType=${style.dataType}]`);\n            }\n        }\n        return type;\n    }\n    addImage() {\n        return;\n    }\n    createCell(styleId, type, value, valueFormatted) {\n        const actualStyle = this.getStyleById(styleId);\n        if (!(actualStyle === null || actualStyle === void 0 ? void 0 : actualStyle.dataType) && type === 'String' && valueFormatted) {\n            value = valueFormatted;\n        }\n        const typeTransformed = (this.getType(type, actualStyle, value) || type);\n        return {\n            styleId: !!actualStyle ? styleId : undefined,\n            data: {\n                type: typeTransformed,\n                value: this.getValueTransformed(typeTransformed, value)\n            }\n        };\n    }\n    getValueTransformed(typeTransformed, value) {\n        const wrapText = (val) => {\n            if (this.config.suppressTextAsCDATA) {\n                return _.escapeString(val);\n            }\n            const cdataStart = '<![CDATA[';\n            const cdataEnd = ']]>';\n            const cdataEndRegex = new RegExp(cdataEnd, \"g\");\n            return cdataStart\n                // CDATA sections are closed by the character sequence ']]>' and there is no\n                // way of escaping this, so if the text contains the offending sequence, emit\n                // multiple CDATA sections and split the characters between them.\n                + String(val).replace(cdataEndRegex, ']]' + cdataEnd + cdataStart + '>')\n                + cdataEnd;\n        };\n        const convertBoolean = (val) => {\n            if (!val || val === '0' || val === 'false') {\n                return '0';\n            }\n            return '1';\n        };\n        switch (typeTransformed) {\n            case 'String':\n                return wrapText(value);\n            case 'Number':\n                return Number(value).valueOf() + '';\n            case 'Boolean':\n                return convertBoolean(value);\n            default:\n                return value;\n        }\n    }\n    createMergedCell(styleId, type, value, numOfCells) {\n        return {\n            styleId: !!this.getStyleById(styleId) ? styleId : undefined,\n            data: {\n                type: type,\n                value: value\n            },\n            mergeAcross: numOfCells\n        };\n    }\n}\n\nconst coreFactory = {\n    getTemplate(author) {\n        const dt = new Date();\n        const jsonDate = dt.toJSON();\n        return {\n            name: 'cp:coreProperties',\n            properties: {\n                prefixedAttributes: [{\n                        prefix: \"xmlns:\",\n                        map: {\n                            cp: \"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\",\n                            dc: 'http://purl.org/dc/elements/1.1/',\n                            dcterms: 'http://purl.org/dc/terms/',\n                            dcmitype: 'http://purl.org/dc/dcmitype/',\n                            xsi: 'http://www.w3.org/2001/XMLSchema-instance'\n                        }\n                    }]\n            },\n            children: [{\n                    name: 'dc:creator',\n                    textNode: author\n                }, {\n                    name: 'dc:title',\n                    textNode: 'Workbook'\n                }, {\n                    name: 'dcterms:created',\n                    properties: {\n                        rawMap: {\n                            'xsi:type': 'dcterms:W3CDTF'\n                        }\n                    },\n                    textNode: jsonDate\n                }, {\n                    name: 'dcterms:modified',\n                    properties: {\n                        rawMap: {\n                            'xsi:type': 'dcterms:W3CDTF'\n                        }\n                    },\n                    textNode: jsonDate\n                }]\n        };\n    }\n};\n\nconst contentTypeFactory = {\n    getTemplate(config) {\n        const { name, ContentType, Extension, PartName } = config;\n        return {\n            name,\n            properties: {\n                rawMap: {\n                    Extension,\n                    PartName,\n                    ContentType\n                }\n            }\n        };\n    }\n};\n\nconst contentTypesFactory = {\n    getTemplate(sheetLen) {\n        const worksheets = new Array(sheetLen).fill(undefined).map((v, i) => ({\n            name: 'Override',\n            ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml',\n            PartName: `/xl/worksheets/sheet${i + 1}.xml`\n        }));\n        const sheetsWithImages = ExcelXlsxFactory.worksheetImages.size;\n        const imageTypesObject = {};\n        ExcelXlsxFactory.workbookImageIds.forEach((v) => {\n            imageTypesObject[v.type] = true;\n        });\n        const imageDocs = new Array(sheetsWithImages).fill(undefined).map((v, i) => ({\n            name: 'Override',\n            ContentType: 'application/vnd.openxmlformats-officedocument.drawing+xml',\n            PartName: `/xl/drawings/drawing${i + 1}.xml`\n        }));\n        const imageTypes = Object.keys(imageTypesObject).map(ext => ({\n            name: 'Default',\n            ContentType: `image/${ext}`,\n            Extension: ext\n        }));\n        const children = [\n            ...imageTypes,\n            {\n                name: 'Default',\n                Extension: 'rels',\n                ContentType: 'application/vnd.openxmlformats-package.relationships+xml'\n            }, {\n                name: 'Default',\n                ContentType: 'application/xml',\n                Extension: 'xml'\n            }, {\n                name: 'Override',\n                ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml',\n                PartName: \"/xl/workbook.xml\"\n            },\n            ...worksheets,\n            {\n                name: 'Override',\n                ContentType: 'application/vnd.openxmlformats-officedocument.theme+xml',\n                PartName: '/xl/theme/theme1.xml'\n            }, {\n                name: 'Override',\n                ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml',\n                PartName: '/xl/styles.xml'\n            }, {\n                name: 'Override',\n                ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml',\n                PartName: '/xl/sharedStrings.xml'\n            },\n            ...imageDocs,\n            {\n                name: 'Override',\n                ContentType: 'application/vnd.openxmlformats-package.core-properties+xml',\n                PartName: '/docProps/core.xml'\n            }\n        ].map(contentType => contentTypeFactory.getTemplate(contentType));\n        return {\n            name: \"Types\",\n            properties: {\n                rawMap: {\n                    xmlns: \"http://schemas.openxmlformats.org/package/2006/content-types\"\n                }\n            },\n            children\n        };\n    }\n};\n\nconst getAnchor = (name, imageAnchor) => ({\n    name: `xdr:${name}`,\n    children: [{\n            name: 'xdr:col',\n            textNode: (imageAnchor.col).toString()\n        }, {\n            name: 'xdr:colOff',\n            textNode: imageAnchor.offsetX.toString()\n        }, {\n            name: 'xdr:row',\n            textNode: imageAnchor.row.toString()\n        }, {\n            name: 'xdr:rowOff',\n            textNode: imageAnchor.offsetY.toString()\n        }]\n});\nconst getExt = (image) => {\n    const children = [{\n            name: 'a:ext',\n            properties: {\n                rawMap: {\n                    uri: '{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}'\n                }\n            },\n            children: [{\n                    name: 'a16:creationId',\n                    properties: {\n                        rawMap: {\n                            'id': '{822E6D20-D7BC-2841-A643-D49A6EF008A2}',\n                            'xmlns:a16': 'http://schemas.microsoft.com/office/drawing/2014/main'\n                        }\n                    }\n                }]\n        }];\n    const recolor = image.recolor && image.recolor.toLowerCase();\n    switch (recolor) {\n        case 'grayscale':\n        case 'sepia':\n        case 'washout':\n            children.push({\n                name: 'a:ext',\n                properties: {\n                    rawMap: {\n                        uri: '{C183D7F6-B498-43B3-948B-1728B52AA6E4}'\n                    }\n                },\n                children: [{\n                        name: 'adec:decorative',\n                        properties: {\n                            rawMap: {\n                                'val': '0',\n                                'xmlns:adec': 'http://schemas.microsoft.com/office/drawing/2017/decorative'\n                            }\n                        }\n                    }]\n            });\n    }\n    return {\n        name: 'a:extLst',\n        children\n    };\n};\nconst getNvPicPr = (image, index) => ({\n    name: 'xdr:nvPicPr',\n    children: [{\n            name: 'xdr:cNvPr',\n            properties: {\n                rawMap: {\n                    id: index,\n                    name: image.id,\n                    descr: image.altText != null ? image.altText : undefined\n                }\n            },\n            children: [getExt(image)]\n        }, {\n            name: 'xdr:cNvPicPr',\n            properties: {\n                rawMap: {\n                    preferRelativeResize: '0'\n                }\n            },\n            children: [{\n                    name: 'a:picLocks'\n                }]\n        }]\n});\nconst getColorDetails = (color) => {\n    if (!color.saturation && !color.tint) {\n        return;\n    }\n    const ret = [];\n    if (color.saturation) {\n        ret.push({\n            name: 'a:satMod',\n            properties: {\n                rawMap: {\n                    val: color.saturation * 1000\n                }\n            }\n        });\n    }\n    if (color.tint) {\n        ret.push({\n            name: 'a:tint',\n            properties: {\n                rawMap: {\n                    val: color.tint * 1000\n                }\n            }\n        });\n    }\n    return ret;\n};\nconst getDuoTone = (primaryColor, secondaryColor) => {\n    return ({\n        name: 'a:duotone',\n        children: [{\n                name: 'a:prstClr',\n                properties: {\n                    rawMap: {\n                        val: primaryColor.color\n                    }\n                },\n                children: getColorDetails(primaryColor)\n            }, {\n                name: 'a:srgbClr',\n                properties: {\n                    rawMap: {\n                        val: secondaryColor.color\n                    }\n                },\n                children: getColorDetails(secondaryColor)\n            }]\n    });\n};\nconst getBlipFill = (image, index) => {\n    let blipChildren;\n    if (image.transparency) {\n        const transparency = Math.min(Math.max(image.transparency, 0), 100);\n        blipChildren = [{\n                name: 'a:alphaModFix',\n                properties: {\n                    rawMap: {\n                        amt: 100000 - Math.round(transparency * 1000),\n                    }\n                }\n            }];\n    }\n    if (image.recolor) {\n        if (!blipChildren) {\n            blipChildren = [];\n        }\n        switch (image.recolor.toLocaleLowerCase()) {\n            case 'grayscale':\n                blipChildren.push({ name: 'a:grayscl' });\n                break;\n            case 'sepia':\n                blipChildren.push(getDuoTone({ color: 'black' }, { color: 'D9C3A5', tint: 50, saturation: 180 }));\n                break;\n            case 'washout':\n                blipChildren.push({\n                    name: 'a:lum',\n                    properties: {\n                        rawMap: {\n                            bright: '70000',\n                            contrast: '-70000'\n                        }\n                    }\n                });\n                break;\n        }\n    }\n    return ({\n        name: 'xdr:blipFill',\n        children: [{\n                name: 'a:blip',\n                properties: {\n                    rawMap: {\n                        'cstate': 'print',\n                        'r:embed': `rId${index}`,\n                        'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'\n                    }\n                },\n                children: blipChildren\n            }, {\n                name: 'a:stretch',\n                children: [{\n                        name: 'a:fillRect'\n                    }]\n            }]\n    });\n};\nconst getSpPr = (image, imageBoxSize) => {\n    const xfrm = {\n        name: 'a:xfrm',\n        children: [{\n                name: 'a:off',\n                properties: {\n                    rawMap: {\n                        x: 0,\n                        y: 0\n                    }\n                }\n            }, {\n                name: 'a:ext',\n                properties: {\n                    rawMap: {\n                        cx: imageBoxSize.width,\n                        cy: imageBoxSize.height\n                    }\n                }\n            }]\n    };\n    if (image.rotation) {\n        const rotation = image.rotation;\n        xfrm.properties = {\n            rawMap: {\n                rot: Math.min(Math.max(rotation, 0), 360) * 60000\n            }\n        };\n    }\n    const prstGeom = {\n        name: 'a:prstGeom',\n        properties: {\n            rawMap: {\n                prst: 'rect'\n            }\n        },\n        children: [{ name: 'a:avLst' }]\n    };\n    const ret = {\n        name: 'xdr:spPr',\n        children: [xfrm, prstGeom]\n    };\n    return ret;\n};\nconst getImageBoxSize = (image) => {\n    image.fitCell = !!image.fitCell || (!image.width || !image.height);\n    const { position = {}, fitCell, width = 0, height = 0, totalHeight, totalWidth } = image;\n    const { offsetX = 0, offsetY = 0, row = 1, rowSpan = 1, column = 1, colSpan = 1 } = position;\n    return {\n        from: {\n            row: row - 1,\n            col: column - 1,\n            offsetX: pixelsToEMU(offsetX),\n            offsetY: pixelsToEMU(offsetY)\n        },\n        to: {\n            row: (row - 1) + (fitCell ? 1 : rowSpan - 1),\n            col: (column - 1) + (fitCell ? 1 : colSpan - 1),\n            offsetX: pixelsToEMU(width + offsetX),\n            offsetY: pixelsToEMU(height + offsetY)\n        },\n        height: pixelsToEMU(totalHeight || height),\n        width: pixelsToEMU(totalWidth || width)\n    };\n};\nconst getPicture = (image, currentIndex, worksheetImageIndex, imageBoxSize) => {\n    return {\n        name: 'xdr:pic',\n        children: [\n            getNvPicPr(image, currentIndex + 1),\n            getBlipFill(image, worksheetImageIndex + 1),\n            getSpPr(image, imageBoxSize)\n        ]\n    };\n};\nconst drawingFactory = {\n    getTemplate(config) {\n        const { sheetIndex } = config;\n        const sheetImages = ExcelXlsxFactory.worksheetImages.get(sheetIndex);\n        const sheetImageIds = ExcelXlsxFactory.worksheetImageIds.get(sheetIndex);\n        const children = sheetImages.map((image, idx) => {\n            const boxSize = getImageBoxSize(image);\n            return ({\n                name: 'xdr:twoCellAnchor',\n                properties: {\n                    rawMap: {\n                        editAs: 'absolute'\n                    }\n                },\n                children: [\n                    getAnchor('from', boxSize.from),\n                    getAnchor('to', boxSize.to),\n                    getPicture(image, idx, sheetImageIds.get(image.id).index, boxSize),\n                    { name: 'xdr:clientData' }\n                ]\n            });\n        });\n        return {\n            name: 'xdr:wsDr',\n            properties: {\n                rawMap: {\n                    'xmlns:a': 'http://schemas.openxmlformats.org/drawingml/2006/main',\n                    'xmlns:xdr': 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing'\n                }\n            },\n            children\n        };\n    }\n};\n\nconst getColorChildren = (props) => {\n    const [type, innerType, val, lastClr] = props;\n    return {\n        name: `a:${type}`,\n        children: [{\n                name: `a:${innerType}`,\n                properties: {\n                    rawMap: {\n                        val,\n                        lastClr\n                    }\n                }\n            }]\n    };\n};\nconst colorScheme = {\n    getTemplate() {\n        return {\n            name: \"a:clrScheme\",\n            properties: {\n                rawMap: {\n                    name: \"Office\"\n                }\n            },\n            children: [\n                getColorChildren(['dk1', 'sysClr', 'windowText', '000000']),\n                getColorChildren(['lt1', 'sysClr', 'window', 'FFFFFF']),\n                getColorChildren(['dk2', 'srgbClr', '44546A']),\n                getColorChildren(['lt2', 'srgbClr', 'E7E6E6']),\n                getColorChildren(['accent1', 'srgbClr', '4472C4']),\n                getColorChildren(['accent2', 'srgbClr', 'ED7D31']),\n                getColorChildren(['accent3', 'srgbClr', 'A5A5A5']),\n                getColorChildren(['accent4', 'srgbClr', 'FFC000']),\n                getColorChildren(['accent5', 'srgbClr', '5B9BD5']),\n                getColorChildren(['accent6', 'srgbClr', '70AD47']),\n                getColorChildren(['hlink', 'srgbClr', '0563C1']),\n                getColorChildren(['folHlink', 'srgbClr', '954F72'])\n            ]\n        };\n    }\n};\n\nconst getFont$1 = (props) => {\n    const [type, typeface, script, panose] = props;\n    return {\n        name: `a:${type}`,\n        properties: {\n            rawMap: {\n                script,\n                typeface,\n                panose\n            }\n        }\n    };\n};\nconst fontScheme = {\n    getTemplate() {\n        const { utf8_encode } = _;\n        return {\n            name: \"a:fontScheme\",\n            properties: {\n                rawMap: {\n                    name: \"Office\"\n                }\n            },\n            children: [{\n                    name: 'a:majorFont',\n                    children: [\n                        getFont$1(['latin', 'Calibri Light', undefined, '020F0302020204030204']),\n                        getFont$1(['ea', '']),\n                        getFont$1(['cs', '']),\n                        getFont$1(['font', utf8_encode('游ゴシック Light'), 'Jpan']),\n                        getFont$1(['font', utf8_encode('맑은 고딕'), 'Hang']),\n                        getFont$1(['font', utf8_encode('等线 Light'), 'Hans']),\n                        getFont$1(['font', utf8_encode('新細明體'), 'Hant']),\n                        getFont$1(['font', 'Times New Roman', 'Arab']),\n                        getFont$1(['font', 'Times New Roman', 'Hebr']),\n                        getFont$1(['font', 'Tahoma', 'Thai']),\n                        getFont$1(['font', 'Nyala', 'Ethi']),\n                        getFont$1(['font', 'Vrinda', 'Beng']),\n                        getFont$1(['font', 'Shruti', 'Gujr']),\n                        getFont$1(['font', 'MoolBoran', 'Khmr']),\n                        getFont$1(['font', 'Tunga', 'Knda']),\n                        getFont$1(['font', 'Raavi', 'Guru']),\n                        getFont$1(['font', 'Euphemia', 'Cans']),\n                        getFont$1(['font', 'Plantagenet Cherokee', 'Cher']),\n                        getFont$1(['font', 'Microsoft Yi Baiti', 'Yiii']),\n                        getFont$1(['font', 'Microsoft Himalaya', 'Tibt']),\n                        getFont$1(['font', 'MV Boli', 'Thaa']),\n                        getFont$1(['font', 'Mangal', 'Deva']),\n                        getFont$1(['font', 'Gautami', 'Telu']),\n                        getFont$1(['font', 'Latha', 'Taml']),\n                        getFont$1(['font', 'Estrangelo Edessa', 'Syrc']),\n                        getFont$1(['font', 'Kalinga', 'Orya']),\n                        getFont$1(['font', 'Kartika', 'Mlym']),\n                        getFont$1(['font', 'DokChampa', 'Laoo']),\n                        getFont$1(['font', 'Iskoola Pota', 'Sinh']),\n                        getFont$1(['font', 'Mongolian Baiti', 'Mong']),\n                        getFont$1(['font', 'Times New Roman', 'Viet']),\n                        getFont$1(['font', 'Microsoft Uighur', 'Uigh']),\n                        getFont$1(['font', 'Sylfaen', 'Geor']),\n                        getFont$1(['font', 'Arial', 'Armn']),\n                        getFont$1(['font', 'Leelawadee UI', 'Bugi']),\n                        getFont$1(['font', 'Microsoft JhengHei', 'Bopo']),\n                        getFont$1(['font', 'Javanese Text', 'Java']),\n                        getFont$1(['font', 'Segoe UI', 'Lisu']),\n                        getFont$1(['font', 'Myanmar Text', 'Mymr']),\n                        getFont$1(['font', 'Ebrima', 'Nkoo']),\n                        getFont$1(['font', 'Nirmala UI', 'Olck']),\n                        getFont$1(['font', 'Ebrima', 'Osma']),\n                        getFont$1(['font', 'Phagspa', 'Phag']),\n                        getFont$1(['font', 'Estrangelo Edessa', 'Syrn']),\n                        getFont$1(['font', 'Estrangelo Edessa', 'Syrj']),\n                        getFont$1(['font', 'Estrangelo Edessa', 'Syre']),\n                        getFont$1(['font', 'Nirmala UI', 'Sora']),\n                        getFont$1(['font', 'Microsoft Tai Le', 'Tale']),\n                        getFont$1(['font', 'Microsoft New Tai Lue', 'Talu']),\n                        getFont$1(['font', 'Ebrima', 'Tfng'])\n                    ]\n                }, {\n                    name: 'a:minorFont',\n                    children: [\n                        getFont$1(['latin', 'Calibri', undefined, '020F0502020204030204']),\n                        getFont$1(['ea', '']),\n                        getFont$1(['cs', '']),\n                        getFont$1(['font', utf8_encode('游ゴシック'), 'Jpan']),\n                        getFont$1(['font', utf8_encode('맑은 고딕'), 'Hang']),\n                        getFont$1(['font', utf8_encode('等线'), 'Hans']),\n                        getFont$1(['font', utf8_encode('新細明體'), 'Hant']),\n                        getFont$1(['font', 'Arial', 'Arab']),\n                        getFont$1(['font', 'Arial', 'Hebr']),\n                        getFont$1(['font', 'Tahoma', 'Thai']),\n                        getFont$1(['font', 'Nyala', 'Ethi']),\n                        getFont$1(['font', 'Vrinda', 'Beng']),\n                        getFont$1(['font', 'Shruti', 'Gujr']),\n                        getFont$1(['font', 'DaunPenh', 'Khmr']),\n                        getFont$1(['font', 'Tunga', 'Knda']),\n                        getFont$1(['font', 'Raavi', 'Guru']),\n                        getFont$1(['font', 'Euphemia', 'Cans']),\n                        getFont$1(['font', 'Plantagenet Cherokee', 'Cher']),\n                        getFont$1(['font', 'Microsoft Yi Baiti', 'Yiii']),\n                        getFont$1(['font', 'Microsoft Himalaya', 'Tibt']),\n                        getFont$1(['font', 'MV Boli', 'Thaa']),\n                        getFont$1(['font', 'Mangal', 'Deva']),\n                        getFont$1(['font', 'Gautami', 'Telu']),\n                        getFont$1(['font', 'Latha', 'Taml']),\n                        getFont$1(['font', 'Estrangelo Edessa', 'Syrc']),\n                        getFont$1(['font', 'Kalinga', 'Orya']),\n                        getFont$1(['font', 'Kartika', 'Mlym']),\n                        getFont$1(['font', 'DokChampa', 'Laoo']),\n                        getFont$1(['font', 'Iskoola Pota', 'Sinh']),\n                        getFont$1(['font', 'Mongolian Baiti', 'Mong']),\n                        getFont$1(['font', 'Arial', 'Viet']),\n                        getFont$1(['font', 'Microsoft Uighur', 'Uigh']),\n                        getFont$1(['font', 'Sylfaen', 'Geor']),\n                        getFont$1(['font', 'Arial', 'Armn']),\n                        getFont$1(['font', 'Leelawadee UI', 'Bugi']),\n                        getFont$1(['font', 'Microsoft JhengHei', 'Bopo']),\n                        getFont$1(['font', 'Javanese Text', 'Java']),\n                        getFont$1(['font', 'Segoe UI', 'Lisu']),\n                        getFont$1(['font', 'Myanmar Text', 'Mymr']),\n                        getFont$1(['font', 'Ebrima', 'Nkoo']),\n                        getFont$1(['font', 'Nirmala UI', 'Olck']),\n                        getFont$1(['font', 'Ebrima', 'Osma']),\n                        getFont$1(['font', 'Phagspa', 'Phag']),\n                        getFont$1(['font', 'Estrangelo Edessa', 'Syrn']),\n                        getFont$1(['font', 'Estrangelo Edessa', 'Syrj']),\n                        getFont$1(['font', 'Estrangelo Edessa', 'Syre']),\n                        getFont$1(['font', 'Nirmala UI', 'Sora']),\n                        getFont$1(['font', 'Microsoft Tai Le', 'Tale']),\n                        getFont$1(['font', 'Microsoft New Tai Lue', 'Talu']),\n                        getFont$1(['font', 'Ebrima', 'Tfng'])\n                    ]\n                }]\n        };\n    }\n};\n\nconst getPropertyVal = (name, val, children) => ({\n    name: `a:${name}`,\n    properties: {\n        rawMap: {\n            val\n        }\n    },\n    children\n});\nconst getGs = (props) => {\n    const [pos, schemeColor, satMod, lumMod, tint, shade] = props;\n    const children = [];\n    children.push(getPropertyVal('satMod', satMod));\n    if (lumMod) {\n        children.push(getPropertyVal('lumMod', lumMod));\n    }\n    if (tint) {\n        children.push(getPropertyVal('tint', tint));\n    }\n    if (shade) {\n        children.push(getPropertyVal('shade', shade));\n    }\n    return {\n        name: 'a:gs',\n        properties: {\n            rawMap: {\n                pos\n            }\n        },\n        children: [{\n                name: 'a:schemeClr',\n                properties: {\n                    rawMap: {\n                        val: schemeColor\n                    }\n                },\n                children\n            }]\n    };\n};\nconst getSolidFill = (val, children) => ({\n    name: 'a:solidFill',\n    children: [getPropertyVal('schemeClr', val, children)]\n});\nconst getGradFill = (props) => {\n    const [rotWithShape, gs1, gs2, gs3, lin] = props;\n    const [ang, scaled] = lin;\n    return {\n        name: 'a:gradFill',\n        properties: {\n            rawMap: {\n                rotWithShape\n            }\n        },\n        children: [{\n                name: 'a:gsLst',\n                children: [\n                    getGs(gs1),\n                    getGs(gs2),\n                    getGs(gs3)\n                ]\n            }, {\n                name: 'a:lin',\n                properties: {\n                    rawMap: {\n                        ang: ang,\n                        scaled: scaled\n                    }\n                }\n            }]\n    };\n};\nconst getLine = (props) => {\n    const [w, cap, cmpd, algn] = props;\n    return {\n        name: 'a:ln',\n        properties: {\n            rawMap: { w, cap, cmpd, algn }\n        },\n        children: [\n            getSolidFill('phClr'),\n            getPropertyVal('prstDash', 'solid'),\n            {\n                name: 'a:miter',\n                properties: {\n                    rawMap: {\n                        lim: '800000'\n                    }\n                }\n            }\n        ]\n    };\n};\nconst getEffectStyle = (shadow) => {\n    const children = [];\n    if (shadow) {\n        const [blurRad, dist, dir, algn, rotWithShape] = shadow;\n        children.push({\n            name: 'a:outerShdw',\n            properties: {\n                rawMap: { blurRad, dist, dir, algn, rotWithShape }\n            },\n            children: [\n                getPropertyVal('srgbClr', '000000', [getPropertyVal('alpha', '63000')])\n            ]\n        });\n    }\n    return {\n        name: 'a:effectStyle',\n        children: [Object.assign({}, {\n                name: 'a:effectLst'\n            }, children.length ? { children } : {})]\n    };\n};\nconst getFillStyleList = () => ({\n    name: 'a:fillStyleLst',\n    children: [\n        getSolidFill('phClr'),\n        getGradFill([\n            '1',\n            ['0', 'phClr', '105000', '110000', '67000'],\n            ['50000', 'phClr', '103000', '105000', '73000'],\n            ['100000', 'phClr', '109000', '105000', '81000'],\n            ['5400000', '0']\n        ]),\n        getGradFill([\n            '1',\n            ['0', 'phClr', '103000', '102000', '94000'],\n            ['50000', 'phClr', '110000', '100000', undefined, '100000'],\n            ['100000', 'phClr', '120000', '99000', undefined, '78000'],\n            ['5400000', '0']\n        ])\n    ]\n});\nconst getLineStyleList = () => ({\n    name: 'a:lnStyleLst',\n    children: [\n        getLine(['6350', 'flat', 'sng', 'ctr']),\n        getLine(['12700', 'flat', 'sng', 'ctr']),\n        getLine(['19050', 'flat', 'sng', 'ctr'])\n    ]\n});\nconst getEffectStyleList = () => ({\n    name: 'a:effectStyleLst',\n    children: [\n        getEffectStyle(),\n        getEffectStyle(),\n        getEffectStyle(['57150', '19050', '5400000', 'ctr', '0'])\n    ]\n});\nconst getBgFillStyleList = () => ({\n    name: 'a:bgFillStyleLst',\n    children: [\n        getSolidFill('phClr'),\n        getSolidFill('phClr', [\n            getPropertyVal('tint', '95000'),\n            getPropertyVal('satMod', '170000'),\n        ]),\n        getGradFill([\n            '1',\n            ['0', 'phClr', '150000', '102000', '93000', '98000'],\n            ['50000', 'phClr', '130000', '103000', '98000', '90000'],\n            ['100000', 'phClr', '120000', undefined, undefined, '63000'],\n            ['5400000', '0']\n        ])\n    ]\n});\nconst formatScheme = {\n    getTemplate() {\n        return {\n            name: \"a:fmtScheme\",\n            properties: {\n                rawMap: {\n                    name: \"Office\"\n                }\n            },\n            children: [\n                getFillStyleList(),\n                getLineStyleList(),\n                getEffectStyleList(),\n                getBgFillStyleList()\n            ]\n        };\n    }\n};\n\nconst themeElements = {\n    getTemplate() {\n        return {\n            name: \"a:themeElements\",\n            children: [\n                colorScheme.getTemplate(),\n                fontScheme.getTemplate(),\n                formatScheme.getTemplate()\n            ]\n        };\n    }\n};\n\nconst officeTheme = {\n    getTemplate() {\n        return {\n            name: \"a:theme\",\n            properties: {\n                prefixedAttributes: [{\n                        prefix: \"xmlns:\",\n                        map: {\n                            a: \"http://schemas.openxmlformats.org/drawingml/2006/main\"\n                        },\n                    }],\n                rawMap: {\n                    name: \"Office Theme\"\n                }\n            },\n            children: [\n                themeElements.getTemplate(),\n                {\n                    name: 'a:objectDefaults'\n                },\n                {\n                    name: 'a:extraClrSchemeLst'\n                }\n            ]\n        };\n    }\n};\n\nconst buildSharedString = (strMap) => {\n    const ret = [];\n    strMap.forEach((val, key) => {\n        const textNode = key.toString();\n        const child = {\n            name: 't',\n            textNode: _.utf8_encode(_.escapeString(textNode))\n        };\n        // if we have leading or trailing spaces, instruct Excel not to trim them\n        const preserveSpaces = textNode.trim().length !== textNode.length;\n        if (preserveSpaces) {\n            child.properties = {\n                rawMap: {\n                    \"xml:space\": \"preserve\"\n                }\n            };\n        }\n        ret.push({\n            name: 'si',\n            children: [child]\n        });\n    });\n    return ret;\n};\nconst sharedStrings = {\n    getTemplate(strings) {\n        return {\n            name: \"sst\",\n            properties: {\n                rawMap: {\n                    xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n                    count: strings.size,\n                    uniqueCount: strings.size\n                }\n            },\n            children: buildSharedString(strings)\n        };\n    }\n};\n\nconst numberFormatFactory = {\n    getTemplate(numberFormat) {\n        let { formatCode, numFmtId } = numberFormat;\n        // excel formulas requires $ to be placed between quotes and symbols to be escaped\n        if (formatCode.length) {\n            formatCode = _.escapeString(formatCode.replace(/\\$/g, '\"$\"'));\n        }\n        return {\n            name: \"numFmt\",\n            properties: {\n                rawMap: {\n                    formatCode,\n                    numFmtId\n                }\n            }\n        };\n    }\n};\n\nconst numberFormatsFactory = {\n    getTemplate(numberFormats) {\n        return {\n            name: \"numFmts\",\n            properties: {\n                rawMap: {\n                    count: numberFormats.length\n                }\n            },\n            children: numberFormats.map(numberFormat => numberFormatFactory.getTemplate(numberFormat))\n        };\n    }\n};\n\nconst fontFactory = {\n    getTemplate(font) {\n        const { size, colorTheme, color = 'FF000000', fontName = 'Calibri', family, scheme, italic, bold, strikeThrough, outline, shadow, underline, verticalAlign } = font;\n        const children = [\n            { name: 'sz', properties: { rawMap: { val: size } } },\n            { name: 'color', properties: { rawMap: { theme: colorTheme, rgb: color } } },\n            { name: 'name', properties: { rawMap: { val: fontName } } }\n        ];\n        if (family) {\n            children.push({ name: 'family', properties: { rawMap: { val: family } } });\n        }\n        if (scheme) {\n            children.push({ name: 'scheme', properties: { rawMap: { val: scheme } } });\n        }\n        if (italic) {\n            children.push({ name: 'i' });\n        }\n        if (bold) {\n            children.push({ name: 'b' });\n        }\n        if (strikeThrough) {\n            children.push({ name: 'strike' });\n        }\n        if (outline) {\n            children.push({ name: 'outline' });\n        }\n        if (shadow) {\n            children.push({ name: 'shadow' });\n        }\n        if (underline) {\n            children.push({ name: 'u', properties: { rawMap: { val: underline } } });\n        }\n        if (verticalAlign) {\n            children.push({ name: 'vertAlign', properties: { rawMap: { val: verticalAlign } } });\n        }\n        return { name: \"font\", children };\n    }\n};\n\nconst fontsFactory = {\n    getTemplate(fonts) {\n        return {\n            name: \"fonts\",\n            properties: {\n                rawMap: {\n                    count: fonts.length\n                }\n            },\n            children: fonts.map(font => fontFactory.getTemplate(font))\n        };\n    }\n};\n\nconst fillFactory = {\n    getTemplate(fill) {\n        const { patternType, fgTheme, fgTint, fgRgb, bgRgb, bgIndexed } = fill;\n        const pf = {\n            name: 'patternFill',\n            properties: {\n                rawMap: {\n                    patternType\n                }\n            }\n        };\n        if (fgTheme || fgTint || fgRgb) {\n            pf.children = [{\n                    name: 'fgColor',\n                    properties: {\n                        rawMap: {\n                            theme: fgTheme,\n                            tint: fgTint,\n                            rgb: fgRgb\n                        }\n                    }\n                }];\n        }\n        if (bgIndexed || bgRgb) {\n            if (!pf.children) {\n                pf.children = [];\n            }\n            pf.children.push({\n                name: 'bgColor',\n                properties: {\n                    rawMap: {\n                        indexed: bgIndexed,\n                        rgb: bgRgb\n                    }\n                }\n            });\n        }\n        return {\n            name: \"fill\",\n            children: [pf]\n        };\n    }\n};\n\nconst fillsFactory = {\n    getTemplate(fills) {\n        return {\n            name: \"fills\",\n            properties: {\n                rawMap: {\n                    count: fills.length\n                }\n            },\n            children: fills.map(fill => fillFactory.getTemplate(fill))\n        };\n    }\n};\n\nconst getWeightName = (value) => {\n    switch (value) {\n        case 1: return 'thin';\n        case 2: return 'medium';\n        case 3: return 'thick';\n        default: return 'hair';\n    }\n};\nconst mappedBorderNames = {\n    None: 'None',\n    Dot: 'Dotted',\n    Dash: 'Dashed',\n    Double: 'Double',\n    DashDot: 'DashDot',\n    DashDotDot: 'DashDotDot',\n    SlantDashDot: 'SlantDashDot'\n};\nconst mediumBorders = ['Dashed', 'DashDot', 'DashDotDot'];\nconst colorMap = {\n    None: 'none',\n    Solid: 'solid',\n    Gray50: 'mediumGray',\n    Gray75: 'darkGray',\n    Gray25: 'lightGray',\n    HorzStripe: 'darkHorizontal',\n    VertStripe: 'darkVertical',\n    ReverseDiagStripe: 'darkDown',\n    DiagStripe: 'darkUp',\n    DiagCross: 'darkGrid',\n    ThickDiagCross: 'darkTrellis',\n    ThinHorzStripe: 'lightHorizontal',\n    ThinVertStripe: 'lightVertical',\n    ThinReverseDiagStripe: 'lightDown',\n    ThinDiagStripe: 'lightUp',\n    ThinHorzCross: 'lightGrid',\n    ThinDiagCross: 'lightTrellis',\n    Gray125: 'gray125',\n    Gray0625: 'gray0625'\n};\nconst horizontalAlignmentMap = {\n    Automatic: 'general',\n    Left: 'left',\n    Center: 'center',\n    Right: 'right',\n    Fill: 'fill',\n    Justify: 'justify',\n    CenterAcrossSelection: 'centerContinuous',\n    Distributed: 'distributed',\n    JustifyDistributed: 'justify'\n};\nconst verticalAlignmentMap = {\n    Automatic: undefined,\n    Top: 'top',\n    Bottom: 'bottom',\n    Center: 'center',\n    Justify: 'justify',\n    Distributed: 'distributed',\n    JustifyDistributed: 'justify'\n};\nconst convertLegacyPattern = (name) => {\n    if (!name) {\n        return 'none';\n    }\n    return colorMap[name] || name;\n};\nconst convertLegacyColor = (color) => {\n    if (color == undefined) {\n        return color;\n    }\n    if (color.charAt(0) === '#') {\n        color = color.substr(1);\n    }\n    return color.length === 6 ? 'FF' + color : color;\n};\nconst convertLegacyBorder = (type, weight) => {\n    if (!type) {\n        return 'thin';\n    }\n    // Legacy Types are: None, Continuous, Dash, Dot, DashDot, DashDotDot, SlantDashDot, and Double\n    // Weight represents: 0—Hairline, 1—Thin , 2—Medium, 3—Thick\n    // New types: none, thin, medium, dashed, dotted, thick, double, hair, mediumDashed, dashDot, mediumDashDot,\n    // dashDotDot, mediumDashDotDot, slantDashDot\n    const namedWeight = getWeightName(weight);\n    const mappedName = mappedBorderNames[type];\n    if (type === 'Continuous') {\n        return namedWeight;\n    }\n    if (namedWeight === 'medium' && mediumBorders.indexOf(mappedName) !== -1) {\n        return `medium${mappedName}`;\n    }\n    return mappedName.charAt(0).toLowerCase() + mappedName.substr(1);\n};\nconst convertLegacyHorizontalAlignment = (alignment) => {\n    return horizontalAlignmentMap[alignment] || 'general';\n};\nconst convertLegacyVerticalAlignment = (alignment) => {\n    return verticalAlignmentMap[alignment] || undefined;\n};\n\nconst getBorderColor = (color) => {\n    return {\n        name: 'color',\n        properties: {\n            rawMap: {\n                rgb: convertLegacyColor(color || '#000000')\n            }\n        }\n    };\n};\nconst borderFactory$1 = {\n    getTemplate(border) {\n        const { left, right, top, bottom, diagonal } = border;\n        const leftChildren = left ? [getBorderColor(left.color)] : undefined;\n        const rightChildren = right ? [getBorderColor(right.color)] : undefined;\n        const topChildren = top ? [getBorderColor(top.color)] : undefined;\n        const bottomChildren = bottom ? [getBorderColor(bottom.color)] : undefined;\n        const diagonalChildren = diagonal ? [getBorderColor(diagonal.color)] : undefined;\n        return {\n            name: 'border',\n            children: [{\n                    name: 'left',\n                    properties: { rawMap: { style: left && left.style } },\n                    children: leftChildren\n                }, {\n                    name: 'right',\n                    properties: { rawMap: { style: right && right.style } },\n                    children: rightChildren\n                }, {\n                    name: 'top',\n                    properties: { rawMap: { style: top && top.style } },\n                    children: topChildren\n                }, {\n                    name: 'bottom',\n                    properties: { rawMap: { style: bottom && bottom.style } },\n                    children: bottomChildren\n                }, {\n                    name: 'diagonal',\n                    properties: { rawMap: { style: diagonal && diagonal.style } },\n                    children: diagonalChildren\n                }]\n        };\n    }\n};\n\nconst bordersFactory = {\n    getTemplate(borders) {\n        return {\n            name: \"borders\",\n            properties: {\n                rawMap: {\n                    count: borders.length\n                }\n            },\n            children: borders.map(border => borderFactory$1.getTemplate(border))\n        };\n    }\n};\n\nconst getReadingOrderId = (readingOrder) => {\n    const order = ['Context', 'LeftToRight', 'RightToLeft'];\n    const pos = order.indexOf(readingOrder);\n    return Math.max(pos, 0);\n};\nconst alignmentFactory = {\n    getTemplate(alignment) {\n        const { horizontal, indent, readingOrder, rotate, shrinkToFit, vertical, wrapText } = alignment;\n        return {\n            name: 'alignment',\n            properties: {\n                rawMap: {\n                    horizontal: horizontal && convertLegacyHorizontalAlignment(horizontal),\n                    indent,\n                    readingOrder: readingOrder && getReadingOrderId(readingOrder),\n                    textRotation: rotate,\n                    shrinkToFit,\n                    vertical: vertical && convertLegacyVerticalAlignment(vertical),\n                    wrapText\n                }\n            }\n        };\n    }\n};\n\nconst protectionFactory = {\n    getTemplate(protection) {\n        const locked = protection.protected === false ? 0 : 1;\n        const hidden = protection.hideFormula === true ? 1 : 0;\n        return {\n            name: 'protection',\n            properties: {\n                rawMap: {\n                    hidden,\n                    locked\n                }\n            }\n        };\n    }\n};\n\nconst xfFactory = {\n    getTemplate(xf) {\n        const { alignment, borderId, fillId, fontId, numFmtId, protection, xfId } = xf;\n        const children = [];\n        if (alignment) {\n            children.push(alignmentFactory.getTemplate(alignment));\n        }\n        if (protection) {\n            children.push(protectionFactory.getTemplate(protection));\n        }\n        return {\n            name: \"xf\",\n            properties: {\n                rawMap: {\n                    applyAlignment: alignment ? 1 : undefined,\n                    applyProtection: protection ? 1 : undefined,\n                    applyBorder: borderId ? 1 : undefined,\n                    applyFill: fillId ? 1 : undefined,\n                    borderId,\n                    fillId,\n                    applyFont: fontId ? 1 : undefined,\n                    fontId,\n                    applyNumberFormat: numFmtId ? 1 : undefined,\n                    numFmtId,\n                    xfId\n                }\n            },\n            children: children.length ? children : undefined\n        };\n    }\n};\n\nconst cellStylesXfsFactory = {\n    getTemplate(xfs) {\n        return {\n            name: \"cellStyleXfs\",\n            properties: {\n                rawMap: {\n                    count: xfs.length\n                }\n            },\n            children: xfs.map(xf => xfFactory.getTemplate(xf))\n        };\n    }\n};\n\nconst cellXfsFactory = {\n    getTemplate(xfs) {\n        return {\n            name: \"cellXfs\",\n            properties: {\n                rawMap: {\n                    count: xfs.length\n                }\n            },\n            children: xfs.map(xf => xfFactory.getTemplate(xf))\n        };\n    }\n};\n\nconst borderFactory = {\n    getTemplate(cellStyle) {\n        const { builtinId, name, xfId } = cellStyle;\n        return {\n            name: \"cellStyle\",\n            properties: {\n                rawMap: {\n                    builtinId,\n                    name,\n                    xfId\n                }\n            }\n        };\n    }\n};\n\nconst cellStylesFactory = {\n    getTemplate(cellStyles) {\n        return {\n            name: \"cellStyles\",\n            properties: {\n                rawMap: {\n                    count: cellStyles.length\n                }\n            },\n            children: cellStyles.map(cellStyle => borderFactory.getTemplate(cellStyle))\n        };\n    }\n};\n\nlet stylesMap;\nlet registeredNumberFmts;\nlet registeredFonts;\nlet registeredFills;\nlet registeredBorders;\nlet registeredCellStyleXfs;\nlet registeredCellXfs;\nlet registeredCellStyles;\nlet currentSheet;\nconst getStyleName = (name, currentSheet) => {\n    if (name.indexOf('mixedStyle') !== -1 && currentSheet > 1) {\n        name += `_${currentSheet}`;\n    }\n    return name;\n};\nconst resetStylesheetValues = () => {\n    stylesMap = { base: 0 };\n    registeredNumberFmts = [];\n    registeredFonts = [{ fontName: 'Calibri', colorTheme: '1', family: '2', scheme: 'minor' }];\n    registeredFills = [{ patternType: 'none', }, { patternType: 'gray125' }];\n    registeredBorders = [{ left: undefined, right: undefined, top: undefined, bottom: undefined, diagonal: undefined }];\n    registeredCellStyleXfs = [{ borderId: 0, fillId: 0, fontId: 0, numFmtId: 0 }];\n    registeredCellXfs = [{ borderId: 0, fillId: 0, fontId: 0, numFmtId: 0, xfId: 0 }];\n    registeredCellStyles = [{ builtinId: 0, name: 'Normal', xfId: 0 }];\n};\nconst registerFill = (fill) => {\n    const convertedPattern = convertLegacyPattern(fill.pattern);\n    const convertedFillColor = convertLegacyColor(fill.color);\n    const convertedPatternColor = convertLegacyColor(fill.patternColor);\n    let pos = registeredFills.findIndex(currentFill => {\n        const { patternType, fgRgb, bgRgb } = currentFill;\n        if (patternType != convertedPattern ||\n            fgRgb != convertedFillColor ||\n            bgRgb != convertedPatternColor) {\n            return false;\n        }\n        return true;\n    });\n    if (pos === -1) {\n        pos = registeredFills.length;\n        registeredFills.push({ patternType: convertedPattern, fgRgb: convertedFillColor, bgRgb: convertedPatternColor });\n    }\n    return pos;\n};\nconst registerNumberFmt = (format) => {\n    format = _.utf8_encode(format);\n    if (numberFormatMap[format]) {\n        return numberFormatMap[format];\n    }\n    let pos = registeredNumberFmts.findIndex(currentFormat => currentFormat.formatCode === format);\n    if (pos === -1) {\n        pos = registeredNumberFmts.length + 164;\n        registeredNumberFmts.push({ formatCode: format, numFmtId: pos });\n    }\n    else {\n        pos = registeredNumberFmts[pos].numFmtId;\n    }\n    return pos;\n};\nconst registerBorders = (borders) => {\n    const { borderBottom, borderTop, borderLeft, borderRight } = borders;\n    let bottomStyle;\n    let topStyle;\n    let leftStyle;\n    let rightStyle;\n    let bottomColor;\n    let topColor;\n    let leftColor;\n    let rightColor;\n    if (borderLeft) {\n        leftStyle = convertLegacyBorder(borderLeft.lineStyle, borderLeft.weight);\n        leftColor = convertLegacyColor(borderLeft.color);\n    }\n    if (borderRight) {\n        rightStyle = convertLegacyBorder(borderRight.lineStyle, borderRight.weight);\n        rightColor = convertLegacyColor(borderRight.color);\n    }\n    if (borderBottom) {\n        bottomStyle = convertLegacyBorder(borderBottom.lineStyle, borderBottom.weight);\n        bottomColor = convertLegacyColor(borderBottom.color);\n    }\n    if (borderTop) {\n        topStyle = convertLegacyBorder(borderTop.lineStyle, borderTop.weight);\n        topColor = convertLegacyColor(borderTop.color);\n    }\n    let pos = registeredBorders.findIndex(currentBorder => {\n        const { left, right, top, bottom } = currentBorder;\n        if (!left && (leftStyle || leftColor)) {\n            return false;\n        }\n        if (!right && (rightStyle || rightColor)) {\n            return false;\n        }\n        if (!top && (topStyle || topColor)) {\n            return false;\n        }\n        if (!bottom && (bottomStyle || bottomColor)) {\n            return false;\n        }\n        const { style: clS, color: clC } = left || {};\n        const { style: crS, color: crC } = right || {};\n        const { style: ctS, color: ctC } = top || {};\n        const { style: cbS, color: cbC } = bottom || {};\n        if (clS != leftStyle || clC != leftColor) {\n            return false;\n        }\n        if (crS != rightStyle || crC != rightColor) {\n            return false;\n        }\n        if (ctS != topStyle || ctC != topColor) {\n            return false;\n        }\n        if (cbS != bottomStyle || cbC != bottomColor) {\n            return false;\n        }\n        return true;\n    });\n    if (pos === -1) {\n        pos = registeredBorders.length;\n        registeredBorders.push({\n            left: {\n                style: leftStyle, color: leftColor\n            },\n            right: {\n                style: rightStyle, color: rightColor\n            },\n            top: {\n                style: topStyle, color: topColor\n            },\n            bottom: {\n                style: bottomStyle, color: bottomColor\n            },\n            diagonal: {\n                style: undefined,\n                color: undefined\n            }\n        });\n    }\n    return pos;\n};\nconst registerFont = (font) => {\n    const { fontName: name = 'Calibri', color, size, bold, italic, outline, shadow, strikeThrough, underline, family, verticalAlign } = font;\n    const utf8Name = name ? _.utf8_encode(name) : name;\n    const convertedColor = convertLegacyColor(color);\n    const familyId = getFontFamilyId(family);\n    const convertedUnderline = underline ? underline.toLocaleLowerCase() : undefined;\n    const convertedVerticalAlign = verticalAlign ? verticalAlign.toLocaleLowerCase() : undefined;\n    let pos = registeredFonts.findIndex(currentFont => {\n        if (currentFont.fontName != utf8Name ||\n            currentFont.color != convertedColor ||\n            currentFont.size != size ||\n            currentFont.bold != bold ||\n            currentFont.italic != italic ||\n            currentFont.outline != outline ||\n            currentFont.shadow != shadow ||\n            currentFont.strikeThrough != strikeThrough ||\n            currentFont.underline != convertedUnderline ||\n            currentFont.verticalAlign != convertedVerticalAlign ||\n            // @ts-ignore\n            currentFont.family != familyId) {\n            return false;\n        }\n        return true;\n    });\n    if (pos === -1) {\n        pos = registeredFonts.length;\n        registeredFonts.push({\n            fontName: utf8Name,\n            color: convertedColor,\n            size,\n            bold,\n            italic,\n            outline,\n            shadow,\n            strikeThrough,\n            underline: convertedUnderline,\n            verticalAlign: convertedVerticalAlign,\n            family: familyId != null ? familyId.toString() : undefined\n        });\n    }\n    return pos;\n};\nconst registerStyle = (config) => {\n    const { alignment, borders, font, interior, numberFormat, protection } = config;\n    let { id } = config;\n    let currentFill = 0;\n    let currentBorder = 0;\n    let currentFont = 0;\n    let currentNumberFmt = 0;\n    if (!id) {\n        return;\n    }\n    id = getStyleName(id, currentSheet);\n    if (stylesMap[id] != undefined) {\n        return;\n    }\n    if (interior) {\n        currentFill = registerFill(interior);\n    }\n    if (borders) {\n        currentBorder = registerBorders(borders);\n    }\n    if (font) {\n        currentFont = registerFont(font);\n    }\n    if (numberFormat) {\n        currentNumberFmt = registerNumberFmt(numberFormat.format);\n    }\n    stylesMap[id] = registeredCellXfs.length;\n    registeredCellXfs.push({\n        alignment,\n        borderId: currentBorder || 0,\n        fillId: currentFill || 0,\n        fontId: currentFont || 0,\n        numFmtId: currentNumberFmt || 0,\n        protection,\n        xfId: 0\n    });\n};\nconst stylesheetFactory = {\n    getTemplate(defaultFontSize) {\n        const numberFormats = numberFormatsFactory.getTemplate(registeredNumberFmts);\n        const fonts = fontsFactory.getTemplate(registeredFonts.map(font => (Object.assign(Object.assign({}, font), { size: font.size != null ? font.size : defaultFontSize }))));\n        const fills = fillsFactory.getTemplate(registeredFills);\n        const borders = bordersFactory.getTemplate(registeredBorders);\n        const cellStylesXfs = cellStylesXfsFactory.getTemplate(registeredCellStyleXfs);\n        const cellXfs = cellXfsFactory.getTemplate(registeredCellXfs);\n        const cellStyles = cellStylesFactory.getTemplate(registeredCellStyles);\n        resetStylesheetValues();\n        return {\n            name: 'styleSheet',\n            properties: {\n                rawMap: {\n                    'mc:Ignorable': 'x14ac x16r2 xr',\n                    'xmlns': 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n                    'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\n                    'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac',\n                    'xmlns:x16r2': 'http://schemas.microsoft.com/office/spreadsheetml/2015/02/main',\n                    'xmlns:xr': 'http://schemas.microsoft.com/office/spreadsheetml/2014/revision'\n                }\n            },\n            children: [\n                numberFormats,\n                fonts,\n                fills,\n                borders,\n                cellStylesXfs,\n                cellXfs,\n                cellStyles,\n                {\n                    name: 'tableStyles',\n                    properties: {\n                        rawMap: {\n                            count: 0,\n                            defaultPivotStyle: 'PivotStyleLight16',\n                            defaultTableStyle: 'TableStyleMedium2'\n                        }\n                    }\n                }\n            ]\n        };\n    }\n};\nconst getStyleId = (name, currentSheet) => {\n    return stylesMap[getStyleName(name, currentSheet)] || 0;\n};\nconst registerStyles = (styles, _currentSheet) => {\n    currentSheet = _currentSheet;\n    if (currentSheet === 1) {\n        resetStylesheetValues();\n    }\n    styles.forEach(registerStyle);\n};\n\nconst sheetFactory = {\n    getTemplate(name, idx) {\n        const sheetId = (idx + 1).toString();\n        return {\n            name: \"sheet\",\n            properties: {\n                rawMap: {\n                    \"name\": name,\n                    \"sheetId\": sheetId,\n                    \"r:id\": `rId${sheetId}`\n                }\n            }\n        };\n    }\n};\n\nconst sheetsFactory = {\n    getTemplate(names) {\n        return {\n            name: \"sheets\",\n            children: names.map((sheet, idx) => sheetFactory.getTemplate(sheet, idx))\n        };\n    }\n};\n\nconst workbookFactory = {\n    getTemplate(names) {\n        return {\n            name: \"workbook\",\n            properties: {\n                prefixedAttributes: [{\n                        prefix: \"xmlns:\",\n                        map: {\n                            r: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\n                        },\n                    }],\n                rawMap: {\n                    xmlns: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"\n                }\n            },\n            children: [sheetsFactory.getTemplate(names)]\n        };\n    }\n};\n\n// https://docs.microsoft.com/en-us/office/troubleshoot/excel/determine-column-widths\nconst getExcelCellWidth = (width) => Math.ceil((width - 12) / 7 + 1);\nconst columnFactory = {\n    getTemplate(config) {\n        const { min, max, outlineLevel, s, width, hidden, bestFit } = config;\n        let excelWidth = 1;\n        let customWidth = '0';\n        if (width > 1) {\n            excelWidth = getExcelCellWidth(width);\n            customWidth = '1';\n        }\n        return {\n            name: 'col',\n            properties: {\n                rawMap: {\n                    min: min,\n                    max: max,\n                    outlineLevel: outlineLevel != null ? outlineLevel : undefined,\n                    width: excelWidth,\n                    style: s,\n                    hidden: hidden ? '1' : '0',\n                    bestFit: bestFit ? '1' : '0',\n                    customWidth: customWidth\n                }\n            }\n        };\n    }\n};\n\nconst convertLegacyType = (type) => {\n    const t = type.charAt(0).toLowerCase();\n    return t === 's' ? 'inlineStr' : t;\n};\nconst cellFactory = {\n    getTemplate(config, idx, currentSheet) {\n        const { ref, data, styleId } = config;\n        const { type, value } = data || { type: 'empty', value: null };\n        let convertedType = type;\n        if (type === 'f') {\n            convertedType = 'str';\n        }\n        else if (type.charAt(0) === type.charAt(0).toUpperCase()) {\n            convertedType = convertLegacyType(type);\n        }\n        const obj = {\n            name: 'c',\n            properties: {\n                rawMap: {\n                    r: ref,\n                    t: convertedType === 'empty' ? undefined : convertedType,\n                    s: styleId ? getStyleId(styleId, currentSheet) : undefined\n                }\n            }\n        };\n        if (convertedType === 'empty') {\n            return obj;\n        }\n        let children;\n        if (convertedType === 'str' && type === 'f') {\n            children = [{\n                    name: 'f',\n                    textNode: _.escapeString(_.utf8_encode(value))\n                }];\n        }\n        else if (convertedType === 'inlineStr') {\n            children = [{\n                    name: 'is',\n                    children: [{\n                            name: 't',\n                            textNode: _.escapeString(_.utf8_encode(value))\n                        }]\n                }];\n        }\n        else {\n            children = [{\n                    name: 'v',\n                    textNode: value\n                }];\n        }\n        return Object.assign({}, obj, { children });\n    }\n};\n\nconst addEmptyCells = (cells, rowIdx) => {\n    const mergeMap = [];\n    let posCounter = 0;\n    for (let i = 0; i < cells.length; i++) {\n        const cell = cells[i];\n        if (cell.mergeAcross) {\n            mergeMap.push({\n                pos: i,\n                excelPos: posCounter\n            });\n            posCounter += cell.mergeAcross;\n        }\n        posCounter++;\n    }\n    if (mergeMap.length) {\n        for (let i = mergeMap.length - 1; i >= 0; i--) {\n            const mergedCells = [];\n            const cell = cells[mergeMap[i].pos];\n            for (let j = 1; j <= cell.mergeAcross; j++) {\n                mergedCells.push({\n                    ref: `${getExcelColumnName(mergeMap[i].excelPos + 1 + j)}${rowIdx + 1}`,\n                    styleId: cell.styleId,\n                    data: { type: 'empty', value: null }\n                });\n            }\n            if (mergedCells.length) {\n                cells.splice(mergeMap[i].pos + 1, 0, ...mergedCells);\n            }\n        }\n    }\n};\nconst shouldDisplayCell = (cell) => { var _a; return ((_a = cell.data) === null || _a === void 0 ? void 0 : _a.value) !== '' || cell.styleId !== undefined; };\nconst rowFactory = {\n    getTemplate(config, idx, currentSheet) {\n        const { collapsed, hidden, height, outlineLevel, cells = [] } = config;\n        addEmptyCells(cells, idx);\n        const children = cells.filter(shouldDisplayCell).map((cell, idx) => cellFactory.getTemplate(cell, idx, currentSheet));\n        return {\n            name: \"row\",\n            properties: {\n                rawMap: {\n                    r: idx + 1,\n                    collapsed: collapsed ? '1' : '0',\n                    hidden: hidden ? '1' : '0',\n                    ht: height,\n                    customHeight: height != null ? '1' : '0',\n                    spans: '1:1',\n                    outlineLevel: outlineLevel || undefined\n                }\n            },\n            children\n        };\n    }\n};\n\nconst mergeCellFactory = {\n    getTemplate(ref) {\n        return {\n            name: 'mergeCell',\n            properties: {\n                rawMap: {\n                    ref: ref\n                }\n            }\n        };\n    }\n};\n\nconst getMergedCellsAndAddColumnGroups = (rows, cols, suppressColumnOutline) => {\n    const mergedCells = [];\n    const cellsWithCollapsibleGroups = [];\n    rows.forEach((currentRow, rowIdx) => {\n        const cells = currentRow.cells;\n        let merges = 0;\n        let lastCol;\n        cells.forEach((currentCell, cellIdx) => {\n            const min = cellIdx + merges + 1;\n            const start = getExcelColumnName(min);\n            const outputRow = rowIdx + 1;\n            if (currentCell.mergeAcross) {\n                merges += currentCell.mergeAcross;\n                const end = getExcelColumnName(cellIdx + merges + 1);\n                mergedCells.push(`${start}${outputRow}:${end}${outputRow}`);\n            }\n            if (!cols[min - 1]) {\n                cols[min - 1] = {};\n            }\n            const { collapsibleRanges } = currentCell;\n            if (collapsibleRanges) {\n                collapsibleRanges.forEach(range => {\n                    cellsWithCollapsibleGroups.push([min + range[0], min + range[1]]);\n                });\n            }\n            lastCol = cols[min - 1];\n            lastCol.min = min;\n            lastCol.max = min;\n            currentCell.ref = `${start}${outputRow}`;\n        });\n    });\n    cellsWithCollapsibleGroups.sort((a, b) => {\n        if (a[0] !== b[0]) {\n            return a[0] - b[0];\n        }\n        return b[1] - a[1];\n    });\n    const rangeMap = new Map();\n    const outlineLevel = new Map();\n    cellsWithCollapsibleGroups.filter(currentRange => {\n        const rangeString = currentRange.toString();\n        const inMap = rangeMap.get(rangeString);\n        if (inMap) {\n            return false;\n        }\n        rangeMap.set(rangeString, true);\n        return true;\n    }).forEach(range => {\n        const refCol = cols.find(col => col.min == range[0] && col.max == range[1]);\n        const currentOutlineLevel = outlineLevel.get(range[0]);\n        cols.push({\n            min: range[0],\n            max: range[1],\n            outlineLevel: suppressColumnOutline ? undefined : (currentOutlineLevel || 1),\n            width: (refCol || { width: 100 }).width\n        });\n        outlineLevel.set(range[0], (currentOutlineLevel || 0) + 1);\n    });\n    return mergedCells;\n};\nconst getPageOrientation = (orientation) => {\n    if (!orientation || (orientation !== 'Portrait' && orientation !== 'Landscape')) {\n        return 'portrait';\n    }\n    return orientation.toLocaleLowerCase();\n};\nconst getPageSize = (pageSize) => {\n    if (pageSize == null) {\n        return 1;\n    }\n    const positions = ['Letter', 'Letter Small', 'Tabloid', 'Ledger', 'Legal', 'Statement', 'Executive', 'A3', 'A4', 'A4 Small', 'A5', 'A6', 'B4', 'B5', 'Folio', 'Envelope', 'Envelope DL', 'Envelope C5', 'Envelope B5', 'Envelope C3', 'Envelope C4', 'Envelope C6', 'Envelope Monarch', 'Japanese Postcard', 'Japanese Double Postcard'];\n    const pos = positions.indexOf(pageSize);\n    return pos === -1 ? 1 : (pos + 1);\n};\nconst addColumns = (columns) => {\n    return (children) => {\n        if (columns.length) {\n            children.push({\n                name: 'cols',\n                children: columns.map(column => columnFactory.getTemplate(column))\n            });\n        }\n        return children;\n    };\n};\nconst addSheetData = (rows, sheetNumber) => {\n    return (children) => {\n        if (rows.length) {\n            children.push({\n                name: 'sheetData',\n                children: rows.map((row, idx) => rowFactory.getTemplate(row, idx, sheetNumber))\n            });\n        }\n        return children;\n    };\n};\nconst addMergeCells = (mergeCells) => {\n    return (children) => {\n        if (mergeCells.length) {\n            children.push({\n                name: 'mergeCells',\n                properties: {\n                    rawMap: {\n                        count: mergeCells.length\n                    }\n                },\n                children: mergeCells.map(mergedCell => mergeCellFactory.getTemplate(mergedCell))\n            });\n        }\n        return children;\n    };\n};\nconst addPageMargins = (margins) => {\n    return (children) => {\n        const { top = 0.75, right = 0.7, bottom = 0.75, left = 0.7, header = 0.3, footer = 0.3 } = margins;\n        children.push({\n            name: 'pageMargins',\n            properties: {\n                rawMap: { bottom, footer, header, left, right, top }\n            }\n        });\n        return children;\n    };\n};\nconst addPageSetup = (pageSetup) => {\n    return (children) => {\n        if (pageSetup) {\n            children.push({\n                name: 'pageSetup',\n                properties: {\n                    rawMap: {\n                        horizontalDpi: 0,\n                        verticalDpi: 0,\n                        orientation: getPageOrientation(pageSetup.orientation),\n                        paperSize: getPageSize(pageSetup.pageSize)\n                    }\n                }\n            });\n        }\n        return children;\n    };\n};\nconst replaceHeaderFooterTokens = (value) => {\n    const map = {\n        '&[Page]': '&P',\n        '&[Pages]': '&N',\n        '&[Date]': '&D',\n        '&[Time]': '&T',\n        '&[Tab]': '&A',\n        '&[Path]': '&Z',\n        '&[File]': '&F'\n    };\n    _.iterateObject(map, (key, val) => {\n        value = value.replace(key, val);\n    });\n    return value;\n};\nconst getHeaderPosition = (position) => {\n    if (position === 'Center') {\n        return 'C';\n    }\n    if (position === 'Right') {\n        return 'R';\n    }\n    return 'L';\n};\nconst applyHeaderFontStyle = (headerString, font) => {\n    if (!font) {\n        return headerString;\n    }\n    headerString += '&amp;&quot;';\n    headerString += font.fontName || 'Calibri';\n    if (font.bold !== font.italic) {\n        headerString += font.bold ? ',Bold' : ',Italic';\n    }\n    else if (font.bold) {\n        headerString += ',Bold Italic';\n    }\n    else {\n        headerString += ',Regular';\n    }\n    headerString += '&quot;';\n    if (font.size) {\n        headerString += `&amp;${font.size}`;\n    }\n    if (font.strikeThrough) {\n        headerString += '&amp;S';\n    }\n    if (font.underline) {\n        headerString += `&amp;${font.underline === 'Double' ? 'E' : 'U'}`;\n    }\n    if (font.color) {\n        headerString += `&amp;K${font.color.replace('#', '').toUpperCase()}`;\n    }\n    return headerString;\n};\nconst processHeaderFooterContent = (content) => content.reduce((prev, curr) => {\n    const pos = getHeaderPosition(curr.position);\n    const output = applyHeaderFontStyle(`${prev}&amp;${pos}`, curr.font);\n    return `${output}${_.escapeString(replaceHeaderFooterTokens(curr.value))}`;\n}, '');\nconst buildHeaderFooter = (headerFooterConfig) => {\n    const rules = ['all', 'first', 'even'];\n    const headersAndFooters = [];\n    rules.forEach(rule => {\n        const headerFooter = headerFooterConfig[rule];\n        const namePrefix = rule === 'all' ? 'odd' : rule;\n        if (!headerFooter || (!headerFooter.header && !headerFooter.footer)) {\n            return;\n        }\n        _.iterateObject(headerFooter, (key, value) => {\n            const nameSuffix = `${key.charAt(0).toUpperCase()}${key.slice(1)}`;\n            if (value) {\n                headersAndFooters.push({\n                    name: `${namePrefix}${nameSuffix}`,\n                    properties: {\n                        rawMap: {\n                            'xml:space': 'preserve'\n                        }\n                    },\n                    textNode: processHeaderFooterContent(value)\n                });\n            }\n        });\n    });\n    return headersAndFooters;\n};\nconst addHeaderFooter = (headerFooterConfig) => {\n    return (children) => {\n        if (!headerFooterConfig) {\n            return children;\n        }\n        const differentFirst = headerFooterConfig.first != null ? 1 : 0;\n        const differentOddEven = headerFooterConfig.even != null ? 1 : 0;\n        children.push({\n            name: 'headerFooter',\n            properties: {\n                rawMap: {\n                    differentFirst,\n                    differentOddEven\n                }\n            },\n            children: buildHeaderFooter(headerFooterConfig)\n        });\n        return children;\n    };\n};\nconst addDrawingRel = (currentSheet) => {\n    return (children) => {\n        if (ExcelXlsxFactory.worksheetImages.get(currentSheet)) {\n            children.push({\n                name: 'drawing',\n                properties: {\n                    rawMap: {\n                        'r:id': 'rId1'\n                    }\n                }\n            });\n        }\n        return children;\n    };\n};\nconst addSheetPr = () => {\n    return (children) => {\n        children.push({\n            name: 'sheetPr',\n            children: [{\n                    name: 'outlinePr',\n                    properties: {\n                        rawMap: {\n                            summaryBelow: 0\n                        }\n                    }\n                }]\n        });\n        return children;\n    };\n};\nconst addSheetFormatPr = (rows) => {\n    return (children) => {\n        const maxOutline = rows.reduce((prev, row) => {\n            if (row.outlineLevel && row.outlineLevel > prev) {\n                return row.outlineLevel;\n            }\n            return prev;\n        }, 0);\n        children.push({\n            name: 'sheetFormatPr',\n            properties: {\n                rawMap: {\n                    baseColWidth: 10,\n                    defaultRowHeight: 16,\n                    outlineLevelRow: maxOutline ? maxOutline : undefined\n                }\n            }\n        });\n        return children;\n    };\n};\nconst worksheetFactory = {\n    getTemplate(params) {\n        const { worksheet, currentSheet, config } = params;\n        const { margins = {}, pageSetup, headerFooterConfig, suppressColumnOutline } = config;\n        const { table } = worksheet;\n        const { rows, columns } = table;\n        const mergedCells = (columns && columns.length) ? getMergedCellsAndAddColumnGroups(rows, columns, !!suppressColumnOutline) : [];\n        const createWorksheetChildren = _.compose(addSheetPr(), addSheetFormatPr(rows), addColumns(columns), addSheetData(rows, currentSheet + 1), addMergeCells(mergedCells), addPageMargins(margins), addPageSetup(pageSetup), addHeaderFooter(headerFooterConfig), addDrawingRel(currentSheet));\n        const children = createWorksheetChildren([]);\n        return {\n            name: \"worksheet\",\n            properties: {\n                prefixedAttributes: [{\n                        prefix: \"xmlns:\",\n                        map: {\n                            r: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\n                        }\n                    }],\n                rawMap: {\n                    xmlns: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"\n                }\n            },\n            children\n        };\n    }\n};\n\nconst relationshipFactory = {\n    getTemplate(config) {\n        const { Id, Type, Target } = config;\n        return {\n            name: \"Relationship\",\n            properties: {\n                rawMap: {\n                    Id,\n                    Type,\n                    Target\n                }\n            }\n        };\n    }\n};\n\nconst relationshipsFactory = {\n    getTemplate(c) {\n        const children = c.map(relationship => relationshipFactory.getTemplate(relationship));\n        return {\n            name: \"Relationships\",\n            properties: {\n                rawMap: {\n                    xmlns: \"http://schemas.openxmlformats.org/package/2006/relationships\"\n                }\n            },\n            children\n        };\n    }\n};\n\n/**\n * See https://www.ecma-international.org/news/TC45_current_work/OpenXML%20White%20Paper.pdf\n */\nclass ExcelXlsxFactory {\n    static createExcel(styles, worksheet, config) {\n        this.addSheetName(worksheet);\n        registerStyles(styles, this.sheetNames.length);\n        return this.createWorksheet(worksheet, config);\n    }\n    static buildImageMap(image, rowIndex, col, columnsToExport, rowHeight) {\n        const currentSheetIndex = this.sheetNames.length;\n        const registeredImage = this.images.get(image.id);\n        if (!image.position || !image.position.row || !image.position.column) {\n            if (!image.position) {\n                image.position = {};\n            }\n            image.position = Object.assign({}, image.position, {\n                row: rowIndex,\n                column: columnsToExport.indexOf(col) + 1\n            });\n        }\n        const calculatedImage = image;\n        setExcelImageTotalWidth(calculatedImage, columnsToExport);\n        setExcelImageTotalHeight(calculatedImage, rowHeight);\n        if (registeredImage) {\n            const currentSheetImages = registeredImage.find(currentImage => currentImage.sheetId === currentSheetIndex);\n            if (currentSheetImages) {\n                currentSheetImages.image.push(calculatedImage);\n            }\n            else {\n                registeredImage.push({\n                    sheetId: currentSheetIndex,\n                    image: [calculatedImage]\n                });\n            }\n        }\n        else {\n            this.images.set(calculatedImage.id, [{ sheetId: currentSheetIndex, image: [calculatedImage] }]);\n            this.workbookImageIds.set(calculatedImage.id, { type: calculatedImage.imageType, index: this.workbookImageIds.size });\n        }\n        this.buildSheetImageMap(currentSheetIndex, calculatedImage);\n    }\n    static buildSheetImageMap(sheetIndex, image) {\n        let worksheetImageIdMap = this.worksheetImageIds.get(sheetIndex);\n        if (!worksheetImageIdMap) {\n            worksheetImageIdMap = new Map();\n            this.worksheetImageIds.set(sheetIndex, worksheetImageIdMap);\n        }\n        const sheetImages = this.worksheetImages.get(sheetIndex);\n        if (!sheetImages) {\n            this.worksheetImages.set(sheetIndex, [image]);\n            worksheetImageIdMap.set(image.id, { index: 0, type: image.imageType });\n        }\n        else {\n            sheetImages.push(image);\n            if (!worksheetImageIdMap.get(image.id)) {\n                worksheetImageIdMap.set(image.id, { index: worksheetImageIdMap.size, type: image.imageType });\n            }\n        }\n    }\n    static addSheetName(worksheet) {\n        const name = _.escapeString(worksheet.name) || '';\n        let append = '';\n        while (this.sheetNames.indexOf(`${name}${append}`) !== -1) {\n            if (append === '') {\n                append = '_1';\n            }\n            else {\n                const curr = parseInt(append.slice(1), 10);\n                append = `_${curr + 1}`;\n            }\n        }\n        worksheet.name = `${name}${append}`;\n        this.sheetNames.push(worksheet.name);\n    }\n    static getStringPosition(str) {\n        if (this.sharedStrings.has(str)) {\n            return this.sharedStrings.get(str);\n        }\n        this.sharedStrings.set(str, this.sharedStrings.size);\n        return this.sharedStrings.size - 1;\n    }\n    static resetFactory() {\n        this.sharedStrings = new Map();\n        this.images = new Map();\n        this.worksheetImages = new Map();\n        this.workbookImageIds = new Map();\n        this.worksheetImageIds = new Map();\n        this.sheetNames = [];\n        this.factoryMode = ExcelFactoryMode.SINGLE_SHEET;\n    }\n    static createWorkbook() {\n        return createXmlPart(workbookFactory.getTemplate(this.sheetNames));\n    }\n    static createStylesheet(defaultFontSize) {\n        return createXmlPart(stylesheetFactory.getTemplate(defaultFontSize));\n    }\n    static createSharedStrings() {\n        return createXmlPart(sharedStrings.getTemplate(this.sharedStrings));\n    }\n    static createCore(author) {\n        return createXmlPart(coreFactory.getTemplate(author));\n    }\n    static createContentTypes(sheetLen) {\n        return createXmlPart(contentTypesFactory.getTemplate(sheetLen));\n    }\n    static createRels() {\n        const rs = relationshipsFactory.getTemplate([{\n                Id: 'rId1',\n                Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument',\n                Target: 'xl/workbook.xml'\n            }, {\n                Id: 'rId2',\n                Type: 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties',\n                Target: 'docProps/core.xml'\n            }]);\n        return createXmlPart(rs);\n    }\n    static createTheme() {\n        return createXmlPart(officeTheme.getTemplate());\n    }\n    static createWorkbookRels(sheetLen) {\n        const worksheets = new Array(sheetLen).fill(undefined).map((v, i) => ({\n            Id: `rId${i + 1}`,\n            Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet',\n            Target: `worksheets/sheet${i + 1}.xml`\n        }));\n        const rs = relationshipsFactory.getTemplate([\n            ...worksheets,\n            {\n                Id: `rId${sheetLen + 1}`,\n                Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',\n                Target: 'theme/theme1.xml'\n            }, {\n                Id: `rId${sheetLen + 2}`,\n                Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles',\n                Target: 'styles.xml'\n            }, {\n                Id: `rId${sheetLen + 3}`,\n                Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings',\n                Target: 'sharedStrings.xml'\n            }\n        ]);\n        return createXmlPart(rs);\n    }\n    static createDrawing(sheetIndex) {\n        return createXmlPart(drawingFactory.getTemplate({ sheetIndex }));\n    }\n    static createDrawingRel(sheetIndex) {\n        const worksheetImageIds = this.worksheetImageIds.get(sheetIndex);\n        const XMLArr = [];\n        worksheetImageIds.forEach((value, key) => {\n            XMLArr.push({\n                Id: `rId${value.index + 1}`,\n                Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',\n                Target: `../media/image${this.workbookImageIds.get(key).index + 1}.${value.type}`\n            });\n        });\n        return createXmlPart(relationshipsFactory.getTemplate(XMLArr));\n    }\n    static createWorksheetDrawingRel(currentRelationIndex) {\n        const rs = relationshipsFactory.getTemplate([{\n                Id: 'rId1',\n                Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing',\n                Target: `../drawings/drawing${currentRelationIndex + 1}.xml`\n            }]);\n        return createXmlPart(rs);\n    }\n    static createWorksheet(worksheet, config) {\n        return createXmlPart(worksheetFactory.getTemplate({\n            worksheet,\n            currentSheet: this.sheetNames.length - 1,\n            config\n        }));\n    }\n}\nExcelXlsxFactory.sharedStrings = new Map();\nExcelXlsxFactory.sheetNames = [];\n/** Maps images to sheet */\nExcelXlsxFactory.images = new Map();\n/** Maps sheets to images */\nExcelXlsxFactory.worksheetImages = new Map();\n/** Maps all workbook images to a global Id */\nExcelXlsxFactory.workbookImageIds = new Map();\n/** Maps all sheet images to unique Ids */\nExcelXlsxFactory.worksheetImageIds = new Map();\nExcelXlsxFactory.factoryMode = ExcelFactoryMode.SINGLE_SHEET;\n\nclass ExcelXlsxSerializingSession extends BaseExcelSerializingSession {\n    createExcel(data) {\n        const { excelStyles, config } = this;\n        return ExcelXlsxFactory.createExcel(excelStyles, data, config);\n    }\n    getDataTypeForValue(valueForCell) {\n        if (valueForCell === undefined) {\n            return 'empty';\n        }\n        return this.isNumerical(valueForCell) ? 'n' : 's';\n    }\n    getType(type, style, value) {\n        if (this.isFormula(value)) {\n            return 'f';\n        }\n        if (style && style.dataType) {\n            switch (style.dataType.toLocaleLowerCase()) {\n                case 'formula':\n                    return 'f';\n                case 'string':\n                    return 's';\n                case 'number':\n                    return 'n';\n                case 'datetime':\n                    return 'd';\n                case 'error':\n                    return 'e';\n                case 'boolean':\n                    return 'b';\n                default:\n                    console.warn(`AG Grid: Unrecognized data type for excel export [${style.id}.dataType=${style.dataType}]`);\n            }\n        }\n        return type;\n    }\n    addImage(rowIndex, column, value) {\n        if (!this.config.addImageToCell) {\n            return;\n        }\n        const addedImage = this.config.addImageToCell(rowIndex, column, value);\n        if (!addedImage) {\n            return;\n        }\n        ExcelXlsxFactory.buildImageMap(addedImage.image, rowIndex, column, this.columnsToExport, this.config.rowHeight);\n        return addedImage;\n    }\n    createCell(styleId, type, value, valueFormatted) {\n        const actualStyle = this.getStyleById(styleId);\n        if (!(actualStyle === null || actualStyle === void 0 ? void 0 : actualStyle.dataType) && type === 's' && valueFormatted) {\n            value = valueFormatted;\n        }\n        const typeTransformed = this.getType(type, actualStyle, value) || type;\n        return {\n            styleId: actualStyle ? styleId : undefined,\n            data: {\n                type: typeTransformed,\n                value: this.getCellValue(typeTransformed, value)\n            }\n        };\n    }\n    createMergedCell(styleId, type, value, numOfCells) {\n        const valueToUse = value == null ? '' : value;\n        return {\n            styleId: !!this.getStyleById(styleId) ? styleId : undefined,\n            data: {\n                type: type,\n                value: type === 's' ? ExcelXlsxFactory.getStringPosition(valueToUse).toString() : value\n            },\n            mergeAcross: numOfCells\n        };\n    }\n    getCellValue(type, value) {\n        if (value == null) {\n            return ExcelXlsxFactory.getStringPosition('').toString();\n        }\n        switch (type) {\n            case 's':\n                return value === '' ? '' : ExcelXlsxFactory.getStringPosition(value).toString();\n            case 'f':\n                return value.slice(1);\n            case 'n':\n                return Number(value).toString();\n            default:\n                return value;\n        }\n    }\n}\n\nvar __decorate$21 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst getMultipleSheetsAsExcel = (params) => {\n    const { data, fontSize = 11, author = 'AG Grid' } = params;\n    const hasImages = ExcelXlsxFactory.images.size > 0;\n    ZipContainer.addFolders([\n        '_rels/',\n        'docProps/',\n        'xl/',\n        'xl/theme/',\n        'xl/_rels/',\n        'xl/worksheets/'\n    ]);\n    if (hasImages) {\n        ZipContainer.addFolders([\n            'xl/worksheets/_rels',\n            'xl/drawings/',\n            'xl/drawings/_rels',\n            'xl/media/',\n        ]);\n        let imgCounter = 0;\n        ExcelXlsxFactory.images.forEach(value => {\n            const firstImage = value[0].image[0];\n            const ext = firstImage.imageType;\n            ZipContainer.addFile(`xl/media/image${++imgCounter}.${ext}`, firstImage.base64, true);\n        });\n    }\n    if (!data || data.length === 0) {\n        console.warn(\"AG Grid: Invalid params supplied to getMultipleSheetsAsExcel() - `ExcelExportParams.data` is empty.\");\n        ExcelXlsxFactory.resetFactory();\n        return;\n    }\n    const sheetLen = data.length;\n    let imageRelationCounter = 0;\n    data.forEach((value, idx) => {\n        ZipContainer.addFile(`xl/worksheets/sheet${idx + 1}.xml`, value);\n        if (hasImages && ExcelXlsxFactory.worksheetImages.get(idx)) {\n            createImageRelationsForSheet(idx, imageRelationCounter++);\n        }\n    });\n    ZipContainer.addFile('xl/workbook.xml', ExcelXlsxFactory.createWorkbook());\n    ZipContainer.addFile('xl/styles.xml', ExcelXlsxFactory.createStylesheet(fontSize));\n    ZipContainer.addFile('xl/sharedStrings.xml', ExcelXlsxFactory.createSharedStrings());\n    ZipContainer.addFile('xl/theme/theme1.xml', ExcelXlsxFactory.createTheme());\n    ZipContainer.addFile('xl/_rels/workbook.xml.rels', ExcelXlsxFactory.createWorkbookRels(sheetLen));\n    ZipContainer.addFile('docProps/core.xml', ExcelXlsxFactory.createCore(author));\n    ZipContainer.addFile('[Content_Types].xml', ExcelXlsxFactory.createContentTypes(sheetLen));\n    ZipContainer.addFile('_rels/.rels', ExcelXlsxFactory.createRels());\n    ExcelXlsxFactory.resetFactory();\n    const mimeType = params.mimeType || 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n    return ZipContainer.getContent(mimeType);\n};\nconst exportMultipleSheetsAsExcel = (params) => {\n    const { fileName = 'export.xlsx' } = params;\n    const contents = getMultipleSheetsAsExcel(params);\n    if (contents) {\n        Downloader.download(fileName, contents);\n    }\n};\nconst createImageRelationsForSheet = (sheetIndex, currentRelationIndex) => {\n    const drawingFolder = 'xl/drawings';\n    const drawingFileName = `${drawingFolder}/drawing${currentRelationIndex + 1}.xml`;\n    const relFileName = `${drawingFolder}/_rels/drawing${currentRelationIndex + 1}.xml.rels`;\n    const worksheetRelFile = `xl/worksheets/_rels/sheet${sheetIndex + 1}.xml.rels`;\n    ZipContainer.addFile(relFileName, ExcelXlsxFactory.createDrawingRel(sheetIndex));\n    ZipContainer.addFile(drawingFileName, ExcelXlsxFactory.createDrawing(sheetIndex));\n    ZipContainer.addFile(worksheetRelFile, ExcelXlsxFactory.createWorksheetDrawingRel(currentRelationIndex));\n};\nlet ExcelCreator = class ExcelCreator extends BaseCreator {\n    constructor() {\n        super(...arguments);\n        this.exportMode = 'xlsx';\n    }\n    postConstruct() {\n        this.setBeans({\n            gridSerializer: this.gridSerializer,\n            gridOptionsService: this.gridOptionsService\n        });\n    }\n    getMergedParams(params) {\n        const baseParams = this.gridOptionsService.get('defaultExcelExportParams');\n        return Object.assign({}, baseParams, params);\n    }\n    getData(params) {\n        this.setExportMode(params.exportMode || 'xlsx');\n        return super.getData(params);\n    }\n    export(userParams) {\n        if (this.isExportSuppressed()) {\n            console.warn(`AG Grid: Export cancelled. Export is not allowed as per your configuration.`);\n            return '';\n        }\n        const mergedParams = this.getMergedParams(userParams);\n        const data = this.getData(mergedParams);\n        const exportParams = {\n            data: [data],\n            fontSize: mergedParams.fontSize,\n            author: mergedParams.author,\n            mimeType: mergedParams.mimeType\n        };\n        const packageFile = this.packageFile(exportParams);\n        if (packageFile) {\n            Downloader.download(this.getFileName(mergedParams.fileName), packageFile);\n        }\n        return data;\n    }\n    exportDataAsExcel(params) {\n        return this.export(params);\n    }\n    getDataAsExcel(params) {\n        const mergedParams = this.getMergedParams(params);\n        const data = this.getData(mergedParams);\n        if (params && params.exportMode === 'xml') {\n            return data;\n        }\n        const exportParams = {\n            data: [data],\n            fontSize: mergedParams.fontSize,\n            author: mergedParams.author,\n            mimeType: mergedParams.mimeType\n        };\n        return this.packageFile(exportParams);\n    }\n    setFactoryMode(factoryMode, exportMode = 'xlsx') {\n        const factory = exportMode === 'xlsx' ? ExcelXlsxFactory : ExcelXmlFactory;\n        factory.factoryMode = factoryMode;\n    }\n    getFactoryMode(exportMode) {\n        const factory = exportMode === 'xlsx' ? ExcelXlsxFactory : ExcelXmlFactory;\n        return factory.factoryMode;\n    }\n    getSheetDataForExcel(params) {\n        const mergedParams = this.getMergedParams(params);\n        const data = this.getData(mergedParams);\n        return data;\n    }\n    getMultipleSheetsAsExcel(params) {\n        return getMultipleSheetsAsExcel(params);\n    }\n    exportMultipleSheetsAsExcel(params) {\n        return exportMultipleSheetsAsExcel(params);\n    }\n    getDefaultFileName() {\n        return `export.${this.getExportMode()}`;\n    }\n    getDefaultFileExtension() {\n        return this.getExportMode();\n    }\n    createSerializingSession(params) {\n        const { columnModel, valueService, gridOptionsService, valueFormatterService, valueParserService } = this;\n        const isXlsx = this.getExportMode() === 'xlsx';\n        let sheetName = 'ag-grid';\n        if (params.sheetName != null) {\n            sheetName = _.utf8_encode(params.sheetName.toString().substr(0, 31));\n        }\n        const config = Object.assign(Object.assign({}, params), { sheetName,\n            columnModel,\n            valueService,\n            gridOptionsService,\n            valueFormatterService,\n            valueParserService, headerRowHeight: params.headerRowHeight || params.rowHeight, baseExcelStyles: this.gridOptionsService.get('excelStyles') || [], styleLinker: this.styleLinker.bind(this) });\n        return new (isXlsx ? ExcelXlsxSerializingSession : ExcelXmlSerializingSession)(config);\n    }\n    styleLinker(params) {\n        const { rowType, rowIndex, value, column, columnGroup, node } = params;\n        const isHeader = rowType === RowType.HEADER;\n        const isGroupHeader = rowType === RowType.HEADER_GROUPING;\n        const col = (isHeader ? column : columnGroup);\n        let headerClasses = [];\n        if (isHeader || isGroupHeader) {\n            headerClasses.push('header');\n            if (isGroupHeader) {\n                headerClasses.push('headerGroup');\n            }\n            if (col) {\n                headerClasses = headerClasses.concat(CssClassApplier.getHeaderClassesFromColDef(col.getDefinition(), this.gridOptionsService, column || null, columnGroup || null));\n            }\n            return headerClasses;\n        }\n        const styles = this.gridOptionsService.get('excelStyles');\n        const applicableStyles = [\"cell\"];\n        if (!styles || !styles.length) {\n            return applicableStyles;\n        }\n        const styleIds = styles.map((it) => {\n            return it.id;\n        });\n        this.stylingService.processAllCellClasses(column.getDefinition(), {\n            value,\n            data: node.data,\n            node: node,\n            colDef: column.getDefinition(),\n            column: column,\n            rowIndex: rowIndex,\n            api: this.gridOptionsService.api,\n            columnApi: this.gridOptionsService.columnApi,\n            context: this.gridOptionsService.context\n        }, (className) => {\n            if (styleIds.indexOf(className) > -1) {\n                applicableStyles.push(className);\n            }\n        });\n        return applicableStyles.sort((left, right) => {\n            return (styleIds.indexOf(left) < styleIds.indexOf(right)) ? -1 : 1;\n        });\n    }\n    isExportSuppressed() {\n        return this.gridOptionsService.is('suppressExcelExport');\n    }\n    setExportMode(exportMode) {\n        this.exportMode = exportMode;\n    }\n    getExportMode() {\n        return this.exportMode;\n    }\n    packageFile(params) {\n        if (this.getExportMode() === 'xml') {\n            const mimeType = params.mimeType || 'application/vnd.ms-excel';\n            return new Blob([\"\\ufeff\", params.data[0]], { type: mimeType });\n        }\n        return getMultipleSheetsAsExcel(params);\n    }\n};\n__decorate$21([\n    Autowired('columnModel')\n], ExcelCreator.prototype, \"columnModel\", void 0);\n__decorate$21([\n    Autowired('valueService')\n], ExcelCreator.prototype, \"valueService\", void 0);\n__decorate$21([\n    Autowired('stylingService')\n], ExcelCreator.prototype, \"stylingService\", void 0);\n__decorate$21([\n    Autowired('gridSerializer')\n], ExcelCreator.prototype, \"gridSerializer\", void 0);\n__decorate$21([\n    Autowired('gridOptionsService')\n], ExcelCreator.prototype, \"gridOptionsService\", void 0);\n__decorate$21([\n    Autowired('valueFormatterService')\n], ExcelCreator.prototype, \"valueFormatterService\", void 0);\n__decorate$21([\n    Autowired('valueParserService')\n], ExcelCreator.prototype, \"valueParserService\", void 0);\n__decorate$21([\n    PostConstruct\n], ExcelCreator.prototype, \"postConstruct\", null);\nExcelCreator = __decorate$21([\n    Bean('excelCreator')\n], ExcelCreator);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$d = '30.0.3';\n\nconst ExcelExportModule = {\n    version: VERSION$d,\n    moduleName: ModuleNames.ExcelExportModule,\n    beans: [\n        // beans in this module\n        ExcelCreator,\n        // these beans are part of CSV Export module\n        GridSerializer, CsvCreator\n    ],\n    dependantModules: [\n        CsvExportModule,\n        EnterpriseCoreModule\n    ]\n};\n\nvar __decorate$20 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar EXPAND_STATE;\n(function (EXPAND_STATE) {\n    EXPAND_STATE[EXPAND_STATE[\"EXPANDED\"] = 0] = \"EXPANDED\";\n    EXPAND_STATE[EXPAND_STATE[\"COLLAPSED\"] = 1] = \"COLLAPSED\";\n    EXPAND_STATE[EXPAND_STATE[\"INDETERMINATE\"] = 2] = \"INDETERMINATE\";\n})(EXPAND_STATE || (EXPAND_STATE = {}));\nclass FiltersToolPanelHeaderPanel extends Component {\n    preConstruct() {\n        this.setTemplate(/* html */ `<div class=\"ag-filter-toolpanel-search\" role=\"presentation\">\n                <div ref=\"eExpand\" class=\"ag-filter-toolpanel-expand\"></div>\n                <ag-input-text-field ref=\"eFilterTextField\" class=\"ag-filter-toolpanel-search-input\"></ag-input-text-field>\n            </div>`);\n    }\n    postConstruct() {\n        const translate = this.localeService.getLocaleTextFunc();\n        this.eFilterTextField.onValueChange(this.onSearchTextChanged.bind(this));\n        this.eFilterTextField.setInputAriaLabel(translate('ariaFilterColumnsInput', 'Filter Columns Input'));\n        this.createExpandIcons();\n        this.setExpandState(EXPAND_STATE.EXPANDED);\n        this.addManagedListener(this.eExpand, 'click', this.onExpandClicked.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, this.showOrHideOptions.bind(this));\n    }\n    init(params) {\n        this.params = params;\n        if (this.columnModel.isReady()) {\n            this.showOrHideOptions();\n        }\n    }\n    createExpandIcons() {\n        this.eExpand.appendChild(this.eExpandChecked = _.createIconNoSpan('columnSelectOpen', this.gridOptionsService));\n        this.eExpand.appendChild(this.eExpandUnchecked = _.createIconNoSpan('columnSelectClosed', this.gridOptionsService));\n        this.eExpand.appendChild(this.eExpandIndeterminate = _.createIconNoSpan('columnSelectIndeterminate', this.gridOptionsService));\n    }\n    // we only show expand / collapse if we are showing filters\n    showOrHideOptions() {\n        const showFilterSearch = !this.params.suppressFilterSearch;\n        const showExpand = !this.params.suppressExpandAll;\n        const translate = this.localeService.getLocaleTextFunc();\n        this.eFilterTextField.setInputPlaceholder(translate('searchOoo', 'Search...'));\n        const isFilterGroupPresent = (col) => col.getOriginalParent() && col.isFilterAllowed();\n        const filterGroupsPresent = this.columnModel.getAllGridColumns().some(isFilterGroupPresent);\n        _.setDisplayed(this.eFilterTextField.getGui(), showFilterSearch);\n        _.setDisplayed(this.eExpand, showExpand && filterGroupsPresent);\n    }\n    onSearchTextChanged() {\n        if (!this.onSearchTextChangedDebounced) {\n            this.onSearchTextChangedDebounced = _.debounce(() => {\n                this.dispatchEvent({ type: 'searchChanged', searchText: this.eFilterTextField.getValue() });\n            }, 300);\n        }\n        this.onSearchTextChangedDebounced();\n    }\n    onExpandClicked() {\n        const event = this.currentExpandState === EXPAND_STATE.EXPANDED ? { type: 'collapseAll' } : { type: 'expandAll' };\n        this.dispatchEvent(event);\n    }\n    setExpandState(state) {\n        this.currentExpandState = state;\n        _.setDisplayed(this.eExpandChecked, this.currentExpandState === EXPAND_STATE.EXPANDED);\n        _.setDisplayed(this.eExpandUnchecked, this.currentExpandState === EXPAND_STATE.COLLAPSED);\n        _.setDisplayed(this.eExpandIndeterminate, this.currentExpandState === EXPAND_STATE.INDETERMINATE);\n    }\n}\n__decorate$20([\n    Autowired('columnModel')\n], FiltersToolPanelHeaderPanel.prototype, \"columnModel\", void 0);\n__decorate$20([\n    RefSelector('eExpand')\n], FiltersToolPanelHeaderPanel.prototype, \"eExpand\", void 0);\n__decorate$20([\n    RefSelector('eFilterTextField')\n], FiltersToolPanelHeaderPanel.prototype, \"eFilterTextField\", void 0);\n__decorate$20([\n    PreConstruct\n], FiltersToolPanelHeaderPanel.prototype, \"preConstruct\", null);\n__decorate$20([\n    PostConstruct\n], FiltersToolPanelHeaderPanel.prototype, \"postConstruct\", null);\n\nvar __decorate$1$ = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ToolPanelFilterComp extends Component {\n    constructor(hideHeader = false) {\n        super(ToolPanelFilterComp.TEMPLATE);\n        this.expanded = false;\n        this.hideHeader = hideHeader;\n    }\n    postConstruct() {\n        this.eExpandChecked = _.createIconNoSpan('columnSelectOpen', this.gridOptionsService);\n        this.eExpandUnchecked = _.createIconNoSpan('columnSelectClosed', this.gridOptionsService);\n        this.eExpand.appendChild(this.eExpandChecked);\n        this.eExpand.appendChild(this.eExpandUnchecked);\n    }\n    setColumn(column) {\n        this.column = column;\n        this.eFilterName.innerText = this.columnModel.getDisplayNameForColumn(this.column, 'filterToolPanel', false) || '';\n        this.addManagedListener(this.eFilterToolPanelHeader, 'click', this.toggleExpanded.bind(this));\n        this.addManagedListener(this.eFilterToolPanelHeader, 'keydown', (e) => {\n            if (e.key === KeyCode.ENTER) {\n                this.toggleExpanded();\n            }\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_FILTER_OPENED, this.onFilterOpened.bind(this));\n        this.addInIcon('filter', this.eFilterIcon, this.column);\n        _.setDisplayed(this.eFilterIcon, this.isFilterActive(), { skipAriaHidden: true });\n        _.setDisplayed(this.eExpandChecked, false);\n        if (this.hideHeader) {\n            _.setDisplayed(this.eFilterToolPanelHeader, false);\n            this.eFilterToolPanelHeader.removeAttribute('tabindex');\n        }\n        else {\n            this.eFilterToolPanelHeader.setAttribute('tabindex', '0');\n        }\n        this.addManagedListener(this.column, Column.EVENT_FILTER_CHANGED, this.onFilterChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_FILTER_DESTROYED, this.onFilterDestroyed.bind(this));\n    }\n    getColumn() {\n        return this.column;\n    }\n    getColumnFilterName() {\n        return this.columnModel.getDisplayNameForColumn(this.column, 'filterToolPanel', false);\n    }\n    addCssClassToTitleBar(cssClass) {\n        this.eFilterToolPanelHeader.classList.add(cssClass);\n    }\n    addInIcon(iconName, eParent, column) {\n        if (eParent == null) {\n            return;\n        }\n        const eIcon = _.createIconNoSpan(iconName, this.gridOptionsService, column);\n        eParent.appendChild(eIcon);\n    }\n    isFilterActive() {\n        return this.filterManager.isFilterActive(this.column);\n    }\n    onFilterChanged() {\n        _.setDisplayed(this.eFilterIcon, this.isFilterActive(), { skipAriaHidden: true });\n        this.dispatchEvent({ type: Column.EVENT_FILTER_CHANGED });\n    }\n    onFilterDestroyed(event) {\n        if (this.expanded &&\n            event.source === 'api' &&\n            event.column.getId() === this.column.getId() &&\n            this.columnModel.getPrimaryColumn(this.column)) {\n            // filter was visible and has been destroyed by the API. If the column still exists, need to recreate UI component\n            this.removeFilterElement();\n            this.addFilterElement();\n        }\n    }\n    toggleExpanded() {\n        this.expanded ? this.collapse() : this.expand();\n    }\n    expand() {\n        if (this.expanded) {\n            return;\n        }\n        this.expanded = true;\n        _.setAriaExpanded(this.eFilterToolPanelHeader, true);\n        _.setDisplayed(this.eExpandChecked, true);\n        _.setDisplayed(this.eExpandUnchecked, false);\n        this.addFilterElement();\n    }\n    addFilterElement() {\n        const filterPanelWrapper = _.loadTemplate(/* html */ `<div class=\"ag-filter-toolpanel-instance-filter\"></div>`);\n        const filterWrapper = this.filterManager.getOrCreateFilterWrapper(this.column, 'TOOLBAR');\n        if (!filterWrapper) {\n            return;\n        }\n        const { filterPromise, guiPromise } = filterWrapper;\n        filterPromise === null || filterPromise === void 0 ? void 0 : filterPromise.then(filter => {\n            this.underlyingFilter = filter;\n            if (!filter) {\n                return;\n            }\n            guiPromise.then(filterContainerEl => {\n                if (filterContainerEl) {\n                    filterPanelWrapper.appendChild(filterContainerEl);\n                }\n                this.agFilterToolPanelBody.appendChild(filterPanelWrapper);\n                if (filter.afterGuiAttached) {\n                    filter.afterGuiAttached({ container: 'toolPanel' });\n                }\n            });\n        });\n    }\n    collapse() {\n        var _a, _b;\n        if (!this.expanded) {\n            return;\n        }\n        this.expanded = false;\n        _.setAriaExpanded(this.eFilterToolPanelHeader, false);\n        this.removeFilterElement();\n        _.setDisplayed(this.eExpandChecked, false);\n        _.setDisplayed(this.eExpandUnchecked, true);\n        (_b = (_a = this.underlyingFilter) === null || _a === void 0 ? void 0 : _a.afterGuiDetached) === null || _b === void 0 ? void 0 : _b.call(_a);\n    }\n    removeFilterElement() {\n        _.clearElement(this.agFilterToolPanelBody);\n    }\n    isExpanded() {\n        return this.expanded;\n    }\n    refreshFilter(isDisplayed) {\n        var _a;\n        if (!this.expanded) {\n            return;\n        }\n        const filter = this.underlyingFilter;\n        if (!filter) {\n            return;\n        }\n        if (isDisplayed) {\n            // set filters should be updated when the filter has been changed elsewhere, i.e. via api. Note that we can't\n            // use 'afterGuiAttached' to refresh the virtual list as it also focuses on the mini filter which changes the\n            // scroll position in the filter list panel\n            if (typeof filter.refreshVirtualList === 'function') {\n                filter.refreshVirtualList();\n            }\n        }\n        else {\n            (_a = filter.afterGuiDetached) === null || _a === void 0 ? void 0 : _a.call(filter);\n        }\n    }\n    onFilterOpened(event) {\n        if (event.source !== 'COLUMN_MENU') {\n            return;\n        }\n        if (event.column !== this.column) {\n            return;\n        }\n        if (!this.expanded) {\n            return;\n        }\n        this.collapse();\n    }\n}\nToolPanelFilterComp.TEMPLATE = `\n        <div class=\"ag-filter-toolpanel-instance\">\n            <div class=\"ag-filter-toolpanel-header ag-filter-toolpanel-instance-header\" ref=\"eFilterToolPanelHeader\" role=\"button\" aria-expanded=\"false\">\n                <div ref=\"eExpand\" class=\"ag-filter-toolpanel-expand\"></div>\n                <span ref=\"eFilterName\" class=\"ag-header-cell-text\"></span>\n                <span ref=\"eFilterIcon\" class=\"ag-header-icon ag-filter-icon ag-filter-toolpanel-instance-header-icon\" aria-hidden=\"true\"></span>\n            </div>\n            <div class=\"ag-filter-toolpanel-instance-body ag-filter\" ref=\"agFilterToolPanelBody\"></div>\n        </div>`;\n__decorate$1$([\n    RefSelector('eFilterToolPanelHeader')\n], ToolPanelFilterComp.prototype, \"eFilterToolPanelHeader\", void 0);\n__decorate$1$([\n    RefSelector('eFilterName')\n], ToolPanelFilterComp.prototype, \"eFilterName\", void 0);\n__decorate$1$([\n    RefSelector('agFilterToolPanelBody')\n], ToolPanelFilterComp.prototype, \"agFilterToolPanelBody\", void 0);\n__decorate$1$([\n    RefSelector('eFilterIcon')\n], ToolPanelFilterComp.prototype, \"eFilterIcon\", void 0);\n__decorate$1$([\n    RefSelector('eExpand')\n], ToolPanelFilterComp.prototype, \"eExpand\", void 0);\n__decorate$1$([\n    Autowired('filterManager')\n], ToolPanelFilterComp.prototype, \"filterManager\", void 0);\n__decorate$1$([\n    Autowired('columnModel')\n], ToolPanelFilterComp.prototype, \"columnModel\", void 0);\n__decorate$1$([\n    PostConstruct\n], ToolPanelFilterComp.prototype, \"postConstruct\", null);\n\nvar __decorate$1_ = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ToolPanelFilterGroupComp extends Component {\n    constructor(columnGroup, childFilterComps, expandedCallback, depth, showingColumn) {\n        super();\n        this.columnGroup = columnGroup;\n        this.childFilterComps = childFilterComps;\n        this.depth = depth;\n        this.expandedCallback = expandedCallback;\n        this.showingColumn = showingColumn;\n    }\n    preConstruct() {\n        const groupParams = {\n            cssIdentifier: 'filter-toolpanel',\n            direction: 'vertical'\n        };\n        this.setTemplate(ToolPanelFilterGroupComp.TEMPLATE, { filterGroupComp: groupParams });\n    }\n    init() {\n        this.setGroupTitle();\n        this.filterGroupComp.setAlignItems('stretch');\n        this.filterGroupComp.addCssClass(`ag-filter-toolpanel-group-level-${this.depth}`);\n        this.filterGroupComp.addCssClassToTitleBar(`ag-filter-toolpanel-group-level-${this.depth}-header`);\n        this.childFilterComps.forEach(filterComp => {\n            this.filterGroupComp.addItem(filterComp);\n            filterComp.addCssClassToTitleBar(`ag-filter-toolpanel-group-level-${this.depth + 1}-header`);\n        });\n        this.refreshFilterClass();\n        this.addExpandCollapseListeners();\n        this.addFilterChangedListeners();\n        this.setupTooltip();\n    }\n    setupTooltip() {\n        // we don't show tooltips for groups, as when the group expands, it's div contains the columns which also\n        // have tooltips, so the tooltips would clash. Eg mouse over group, tooltip shows, mouse over column, another\n        // tooltip shows but cos we didn't leave the group the group tooltip remains. this should be fixed in the future,\n        // maybe the group shouldn't contain the children form a DOM perspective.\n        if (!this.showingColumn) {\n            return;\n        }\n        const refresh = () => {\n            const newTooltipText = this.columnGroup.getColDef().headerTooltip;\n            this.setTooltip(newTooltipText);\n        };\n        refresh();\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, refresh);\n    }\n    getTooltipParams() {\n        const res = super.getTooltipParams();\n        res.location = 'filterToolPanelColumnGroup';\n        return res;\n    }\n    addCssClassToTitleBar(cssClass) {\n        this.filterGroupComp.addCssClassToTitleBar(cssClass);\n    }\n    refreshFilters(isDisplayed) {\n        this.childFilterComps.forEach(filterComp => {\n            if (filterComp instanceof ToolPanelFilterGroupComp) {\n                filterComp.refreshFilters(isDisplayed);\n            }\n            else {\n                filterComp.refreshFilter(isDisplayed);\n            }\n        });\n    }\n    isColumnGroup() {\n        return this.columnGroup instanceof ProvidedColumnGroup;\n    }\n    isExpanded() {\n        return this.filterGroupComp.isExpanded();\n    }\n    getChildren() {\n        return this.childFilterComps;\n    }\n    getFilterGroupName() {\n        return this.filterGroupName ? this.filterGroupName : '';\n    }\n    getFilterGroupId() {\n        return this.columnGroup.getId();\n    }\n    hideGroupItem(hide, index) {\n        this.filterGroupComp.hideItem(hide, index);\n    }\n    hideGroup(hide) {\n        this.setDisplayed(!hide);\n    }\n    forEachToolPanelFilterChild(action) {\n        this.childFilterComps.forEach(filterComp => {\n            if (filterComp instanceof ToolPanelFilterComp) {\n                action(filterComp);\n            }\n        });\n    }\n    addExpandCollapseListeners() {\n        const expandListener = this.isColumnGroup() ?\n            () => this.expandedCallback() :\n            () => this.forEachToolPanelFilterChild(filterComp => filterComp.expand());\n        const collapseListener = this.isColumnGroup() ?\n            () => this.expandedCallback() :\n            () => this.forEachToolPanelFilterChild(filterComp => filterComp.collapse());\n        this.addManagedListener(this.filterGroupComp, AgGroupComponent.EVENT_EXPANDED, expandListener);\n        this.addManagedListener(this.filterGroupComp, AgGroupComponent.EVENT_COLLAPSED, collapseListener);\n    }\n    getColumns() {\n        if (this.columnGroup instanceof ProvidedColumnGroup) {\n            return this.columnGroup.getLeafColumns();\n        }\n        return [this.columnGroup];\n    }\n    addFilterChangedListeners() {\n        this.getColumns().forEach(column => {\n            this.addManagedListener(column, Column.EVENT_FILTER_CHANGED, () => this.refreshFilterClass());\n        });\n        if (!(this.columnGroup instanceof ProvidedColumnGroup)) {\n            this.addManagedListener(this.eventService, Events.EVENT_FILTER_OPENED, this.onFilterOpened.bind(this));\n        }\n    }\n    refreshFilterClass() {\n        const columns = this.getColumns();\n        const anyChildFiltersActive = () => columns.some(col => col.isFilterActive());\n        this.filterGroupComp.addOrRemoveCssClass('ag-has-filter', anyChildFiltersActive());\n    }\n    onFilterOpened(event) {\n        // when a filter is opened elsewhere, i.e. column menu we close the filter comp so we also need to collapse\n        // the column group. This approach means we don't need to try and sync filter models on the same column.\n        if (event.source !== 'COLUMN_MENU') {\n            return;\n        }\n        if (event.column !== this.columnGroup) {\n            return;\n        }\n        if (!this.isExpanded()) {\n            return;\n        }\n        this.collapse();\n    }\n    expand() {\n        this.filterGroupComp.toggleGroupExpand(true);\n    }\n    collapse() {\n        this.filterGroupComp.toggleGroupExpand(false);\n    }\n    setGroupTitle() {\n        this.filterGroupName = (this.columnGroup instanceof ProvidedColumnGroup) ?\n            this.getColumnGroupName(this.columnGroup) : this.getColumnName(this.columnGroup);\n        this.filterGroupComp.setTitle(this.filterGroupName || '');\n    }\n    getColumnGroupName(columnGroup) {\n        return this.columnModel.getDisplayNameForProvidedColumnGroup(null, columnGroup, 'filterToolPanel');\n    }\n    getColumnName(column) {\n        return this.columnModel.getDisplayNameForColumn(column, 'filterToolPanel', false);\n    }\n    destroyFilters() {\n        this.childFilterComps = this.destroyBeans(this.childFilterComps);\n        _.clearElement(this.getGui());\n    }\n    destroy() {\n        this.destroyFilters();\n        super.destroy();\n    }\n}\nToolPanelFilterGroupComp.TEMPLATE = `<div class=\"ag-filter-toolpanel-group-wrapper\">\n            <ag-group-component ref=\"filterGroupComp\"></ag-group-component>\n        </div>`;\n__decorate$1_([\n    RefSelector('filterGroupComp')\n], ToolPanelFilterGroupComp.prototype, \"filterGroupComp\", void 0);\n__decorate$1_([\n    Autowired('columnModel')\n], ToolPanelFilterGroupComp.prototype, \"columnModel\", void 0);\n__decorate$1_([\n    PreConstruct\n], ToolPanelFilterGroupComp.prototype, \"preConstruct\", null);\n__decorate$1_([\n    PostConstruct\n], ToolPanelFilterGroupComp.prototype, \"init\", null);\n\nvar __decorate$1Z = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass FiltersToolPanelListPanel extends Component {\n    constructor() {\n        super(FiltersToolPanelListPanel.TEMPLATE);\n        this.initialised = false;\n        this.filterGroupComps = [];\n    }\n    init(params) {\n        this.initialised = true;\n        const defaultParams = {\n            suppressExpandAll: false,\n            suppressFilterSearch: false,\n            suppressSyncLayoutWithGrid: false,\n            api: this.gridApi,\n            columnApi: this.columnApi,\n            context: this.gridOptionsService.context\n        };\n        _.mergeDeep(defaultParams, params);\n        this.params = defaultParams;\n        if (!this.params.suppressSyncLayoutWithGrid) {\n            this.addManagedListener(this.eventService, Events.EVENT_COLUMN_MOVED, () => this.onColumnsChanged());\n        }\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, () => this.onColumnsChanged());\n        this.addManagedListener(this.eventService, Events.EVENT_TOOL_PANEL_VISIBLE_CHANGED, (event) => {\n            // when re-entering the filters tool panel we need to refresh the virtual lists in the set filters in case\n            // filters have been changed elsewhere, i.e. via an api call.\n            if (event.key === 'filters') {\n                this.refreshFilters(event.visible);\n            }\n        });\n        if (this.columnModel.isReady()) {\n            this.onColumnsChanged();\n        }\n    }\n    onColumnsChanged() {\n        const pivotModeActive = this.columnModel.isPivotMode();\n        const shouldSyncColumnLayoutWithGrid = !this.params.suppressSyncLayoutWithGrid && !pivotModeActive;\n        shouldSyncColumnLayoutWithGrid ? this.syncFilterLayout() : this.buildTreeFromProvidedColumnDefs();\n    }\n    syncFilterLayout() {\n        this.toolPanelColDefService.syncLayoutWithGrid(this.setFiltersLayout.bind(this));\n    }\n    buildTreeFromProvidedColumnDefs() {\n        const columnTree = this.columnModel.getPrimaryColumnTree();\n        this.recreateFilters(columnTree);\n    }\n    setFiltersLayout(colDefs) {\n        const columnTree = this.toolPanelColDefService.createColumnTree(colDefs);\n        this.recreateFilters(columnTree);\n    }\n    recreateFilters(columnTree) {\n        // Underlying filter comp/element won't get recreated if the column still exists (the element just gets detached/re-attached).\n        // We can therefore restore focus if an element in the filter tool panel was focused.\n        const activeElement = this.gridOptionsService.getDocument().activeElement;\n        // Want to restore the expansion state where possible.\n        const expansionState = this.getExpansionState();\n        this.destroyFilters();\n        this.filterGroupComps = this.recursivelyAddComps(columnTree, 0, expansionState);\n        const len = this.filterGroupComps.length;\n        if (len) {\n            // skip the destroy function because this will be managed\n            // by the `destroyFilters` function\n            this.filterGroupComps.forEach(comp => this.appendChild(comp));\n            this.setFirstAndLastVisible(0, len - 1);\n        }\n        // perform search if searchFilterText exists\n        if (_.exists(this.searchFilterText)) {\n            this.searchFilters(this.searchFilterText);\n        }\n        // notify header of expand\n        this.fireExpandedEvent();\n        // We only care about restoring focus if the originally focused element was in the filter tool panel.\n        if (this.getGui().contains(activeElement)) {\n            activeElement.focus();\n        }\n    }\n    recursivelyAddComps(tree, depth, expansionState) {\n        return _.flatten(tree.map(child => {\n            if (child instanceof ProvidedColumnGroup) {\n                return _.flatten(this.recursivelyAddFilterGroupComps(child, depth, expansionState));\n            }\n            const column = child;\n            if (!this.shouldDisplayFilter(column)) {\n                return [];\n            }\n            const hideFilterCompHeader = depth === 0;\n            const filterComp = new ToolPanelFilterComp(hideFilterCompHeader);\n            this.createBean(filterComp);\n            filterComp.setColumn(column);\n            if (expansionState.get(column.getId())) {\n                // Default state on creation and desired state are both collapsed. Expand if expanded before.\n                filterComp.expand();\n            }\n            if (depth > 0) {\n                return filterComp;\n            }\n            const filterGroupComp = this.createBean(new ToolPanelFilterGroupComp(column, [filterComp], this.onGroupExpanded.bind(this), depth, true));\n            filterGroupComp.addCssClassToTitleBar('ag-filter-toolpanel-header');\n            if (!expansionState.get(filterGroupComp.getFilterGroupId())) {\n                // Default state on creation is expanded. Desired initial state is collapsed. Always collapse unless expanded before.\n                filterGroupComp.collapse();\n            }\n            return filterGroupComp;\n        }));\n    }\n    recursivelyAddFilterGroupComps(columnGroup, depth, expansionState) {\n        if (!this.filtersExistInChildren(columnGroup.getChildren())) {\n            return;\n        }\n        const colGroupDef = columnGroup.getColGroupDef();\n        if (colGroupDef && colGroupDef.suppressFiltersToolPanel) {\n            return [];\n        }\n        const newDepth = columnGroup.isPadding() ? depth : depth + 1;\n        const childFilterComps = _.flatten(this.recursivelyAddComps(columnGroup.getChildren(), newDepth, expansionState));\n        if (columnGroup.isPadding()) {\n            return childFilterComps;\n        }\n        const filterGroupComp = new ToolPanelFilterGroupComp(columnGroup, childFilterComps, this.onGroupExpanded.bind(this), depth, false);\n        this.createBean(filterGroupComp);\n        filterGroupComp.addCssClassToTitleBar('ag-filter-toolpanel-header');\n        if (expansionState.get(filterGroupComp.getFilterGroupId()) === false) {\n            // Default state on creation is expanded. Desired initial state is expanded. Only collapse if collapsed before.\n            filterGroupComp.collapse();\n        }\n        return [filterGroupComp];\n    }\n    filtersExistInChildren(tree) {\n        return tree.some(child => {\n            if (child instanceof ProvidedColumnGroup) {\n                return this.filtersExistInChildren(child.getChildren());\n            }\n            return this.shouldDisplayFilter(child);\n        });\n    }\n    shouldDisplayFilter(column) {\n        const suppressFiltersToolPanel = column.getColDef() && column.getColDef().suppressFiltersToolPanel;\n        return column.isFilterAllowed() && !suppressFiltersToolPanel;\n    }\n    getExpansionState() {\n        const expansionState = new Map();\n        const recursiveGetExpansionState = (filterGroupComp) => {\n            expansionState.set(filterGroupComp.getFilterGroupId(), filterGroupComp.isExpanded());\n            filterGroupComp.getChildren().forEach(child => {\n                if (child instanceof ToolPanelFilterGroupComp) {\n                    recursiveGetExpansionState(child);\n                }\n                else {\n                    expansionState.set(child.getColumn().getId(), child.isExpanded());\n                }\n            });\n        };\n        this.filterGroupComps.forEach(recursiveGetExpansionState);\n        return expansionState;\n    }\n    // we don't support refreshing, but must implement because it's on the tool panel interface\n    refresh() { }\n    // lazy initialise the panel\n    setVisible(visible) {\n        super.setDisplayed(visible);\n        if (visible && !this.initialised) {\n            this.init(this.params);\n        }\n    }\n    expandFilterGroups(expand, groupIds) {\n        const updatedGroupIds = [];\n        const updateGroupExpandState = (filterGroup) => {\n            const groupId = filterGroup.getFilterGroupId();\n            const shouldExpandOrCollapse = !groupIds || _.includes(groupIds, groupId);\n            if (shouldExpandOrCollapse) {\n                // don't expand 'column groups', i.e. top level columns wrapped in a group\n                if (expand && filterGroup.isColumnGroup()) {\n                    filterGroup.expand();\n                }\n                else {\n                    filterGroup.collapse();\n                }\n                updatedGroupIds.push(groupId);\n            }\n            // recursively look for more groups to expand / collapse\n            filterGroup.getChildren().forEach(child => {\n                if (child instanceof ToolPanelFilterGroupComp) {\n                    updateGroupExpandState(child);\n                }\n            });\n        };\n        this.filterGroupComps.forEach(updateGroupExpandState);\n        // update header expand / collapse icon\n        this.onGroupExpanded();\n        if (groupIds) {\n            const unrecognisedGroupIds = groupIds.filter(groupId => updatedGroupIds.indexOf(groupId) < 0);\n            if (unrecognisedGroupIds.length > 0) {\n                console.warn('AG Grid: unable to find groups for these supplied groupIds:', unrecognisedGroupIds);\n            }\n        }\n    }\n    expandFilters(expand, colIds) {\n        const updatedColIds = [];\n        const updateGroupExpandState = (filterComp) => {\n            if (filterComp instanceof ToolPanelFilterGroupComp) {\n                let anyChildrenChanged = false;\n                filterComp.getChildren().forEach(child => {\n                    const childUpdated = updateGroupExpandState(child);\n                    if (childUpdated) {\n                        if (expand) {\n                            filterComp.expand();\n                            anyChildrenChanged = true;\n                        }\n                        else if (!filterComp.isColumnGroup()) {\n                            // we only collapse columns wrapped in groups\n                            filterComp.collapse();\n                        }\n                    }\n                });\n                return anyChildrenChanged;\n            }\n            const colId = filterComp.getColumn().getColId();\n            const updateFilterExpandState = !colIds || _.includes(colIds, colId);\n            if (updateFilterExpandState) {\n                expand ? filterComp.expand() : filterComp.collapse();\n                updatedColIds.push(colId);\n            }\n            return updateFilterExpandState;\n        };\n        this.filterGroupComps.forEach(updateGroupExpandState);\n        // update header expand / collapse icon\n        this.onGroupExpanded();\n        if (colIds) {\n            const unrecognisedColIds = colIds.filter(colId => updatedColIds.indexOf(colId) < 0);\n            if (unrecognisedColIds.length > 0) {\n                console.warn('AG Grid: unable to find columns for these supplied colIds:', unrecognisedColIds);\n            }\n        }\n    }\n    onGroupExpanded() {\n        this.fireExpandedEvent();\n    }\n    fireExpandedEvent() {\n        let expandedCount = 0;\n        let notExpandedCount = 0;\n        const updateExpandCounts = (filterGroup) => {\n            if (!filterGroup.isColumnGroup()) {\n                return;\n            }\n            filterGroup.isExpanded() ? expandedCount++ : notExpandedCount++;\n            filterGroup.getChildren().forEach(child => {\n                if (child instanceof ToolPanelFilterGroupComp) {\n                    updateExpandCounts(child);\n                }\n            });\n        };\n        this.filterGroupComps.forEach(updateExpandCounts);\n        let state;\n        if (expandedCount > 0 && notExpandedCount > 0) {\n            state = EXPAND_STATE.INDETERMINATE;\n        }\n        else if (notExpandedCount > 0) {\n            state = EXPAND_STATE.COLLAPSED;\n        }\n        else {\n            state = EXPAND_STATE.EXPANDED;\n        }\n        this.dispatchEvent({ type: 'groupExpanded', state: state });\n    }\n    performFilterSearch(searchText) {\n        this.searchFilterText = _.exists(searchText) ? searchText.toLowerCase() : null;\n        this.searchFilters(this.searchFilterText);\n    }\n    searchFilters(searchFilter) {\n        const passesFilter = (groupName) => {\n            return !_.exists(searchFilter) || groupName.toLowerCase().indexOf(searchFilter) !== -1;\n        };\n        const recursivelySearch = (filterItem, parentPasses) => {\n            if (!(filterItem instanceof ToolPanelFilterGroupComp)) {\n                return passesFilter(filterItem.getColumnFilterName() || '');\n            }\n            const children = filterItem.getChildren();\n            const groupNamePasses = passesFilter(filterItem.getFilterGroupName());\n            // if group or parent already passed - ensure this group and all children are visible\n            const alreadyPassed = parentPasses || groupNamePasses;\n            if (alreadyPassed) {\n                // ensure group visible\n                filterItem.hideGroup(false);\n                // ensure all children are visible\n                for (let i = 0; i < children.length; i++) {\n                    recursivelySearch(children[i], alreadyPassed);\n                    filterItem.hideGroupItem(false, i);\n                }\n                return true;\n            }\n            // hide group item filters\n            let anyChildPasses = false;\n            children.forEach((child, index) => {\n                const childPasses = recursivelySearch(child, parentPasses);\n                filterItem.hideGroupItem(!childPasses, index);\n                if (childPasses) {\n                    anyChildPasses = true;\n                }\n            });\n            // hide group if no children pass\n            filterItem.hideGroup(!anyChildPasses);\n            return anyChildPasses;\n        };\n        let firstVisible;\n        let lastVisible;\n        this.filterGroupComps.forEach((filterGroup, idx) => {\n            recursivelySearch(filterGroup, false);\n            if (firstVisible === undefined) {\n                if (!filterGroup.containsCssClass('ag-hidden')) {\n                    firstVisible = idx;\n                    lastVisible = idx;\n                }\n            }\n            else if (!filterGroup.containsCssClass('ag-hidden') && lastVisible !== idx) {\n                lastVisible = idx;\n            }\n        });\n        this.setFirstAndLastVisible(firstVisible, lastVisible);\n    }\n    setFirstAndLastVisible(firstIdx, lastIdx) {\n        this.filterGroupComps.forEach((filterGroup, idx) => {\n            filterGroup.removeCssClass('ag-first-group-visible');\n            filterGroup.removeCssClass('ag-last-group-visible');\n            if (idx === firstIdx) {\n                filterGroup.addCssClass('ag-first-group-visible');\n            }\n            if (idx === lastIdx) {\n                filterGroup.addCssClass('ag-last-group-visible');\n            }\n        });\n    }\n    refreshFilters(isDisplayed) {\n        this.filterGroupComps.forEach(filterGroupComp => filterGroupComp.refreshFilters(isDisplayed));\n    }\n    destroyFilters() {\n        this.filterGroupComps = this.destroyBeans(this.filterGroupComps);\n        _.clearElement(this.getGui());\n    }\n    destroy() {\n        this.destroyFilters();\n        super.destroy();\n    }\n}\nFiltersToolPanelListPanel.TEMPLATE = `<div class=\"ag-filter-list-panel\"></div>`;\n__decorate$1Z([\n    Autowired(\"gridApi\")\n], FiltersToolPanelListPanel.prototype, \"gridApi\", void 0);\n__decorate$1Z([\n    Autowired(\"columnApi\")\n], FiltersToolPanelListPanel.prototype, \"columnApi\", void 0);\n__decorate$1Z([\n    Autowired('toolPanelColDefService')\n], FiltersToolPanelListPanel.prototype, \"toolPanelColDefService\", void 0);\n__decorate$1Z([\n    Autowired('columnModel')\n], FiltersToolPanelListPanel.prototype, \"columnModel\", void 0);\n\nvar __decorate$1Y = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass FiltersToolPanel extends Component {\n    constructor() {\n        super(FiltersToolPanel.TEMPLATE);\n        this.initialised = false;\n        this.listenerDestroyFuncs = [];\n    }\n    init(params) {\n        // if initialised is true, means this is a refresh\n        if (this.initialised) {\n            this.listenerDestroyFuncs.forEach(func => func());\n            this.listenerDestroyFuncs = [];\n        }\n        this.initialised = true;\n        const defaultParams = {\n            suppressExpandAll: false,\n            suppressFilterSearch: false,\n            suppressSyncLayoutWithGrid: false,\n            api: this.gridApi,\n            columnApi: this.columnApi,\n        };\n        this.params = Object.assign(Object.assign(Object.assign({}, defaultParams), params), { context: this.gridOptionsService.context });\n        this.filtersToolPanelHeaderPanel.init(this.params);\n        this.filtersToolPanelListPanel.init(this.params);\n        const hideExpand = this.params.suppressExpandAll;\n        const hideSearch = this.params.suppressFilterSearch;\n        if (hideExpand && hideSearch) {\n            this.filtersToolPanelHeaderPanel.setDisplayed(false);\n        }\n        // this is necessary to prevent a memory leak while refreshing the tool panel\n        this.listenerDestroyFuncs.push(this.addManagedListener(this.filtersToolPanelHeaderPanel, 'expandAll', this.onExpandAll.bind(this)), this.addManagedListener(this.filtersToolPanelHeaderPanel, 'collapseAll', this.onCollapseAll.bind(this)), this.addManagedListener(this.filtersToolPanelHeaderPanel, 'searchChanged', this.onSearchChanged.bind(this)), this.addManagedListener(this.filtersToolPanelListPanel, 'groupExpanded', this.onGroupExpanded.bind(this)));\n    }\n    // lazy initialise the panel\n    setVisible(visible) {\n        super.setDisplayed(visible);\n        if (visible && !this.initialised) {\n            this.init(this.params);\n        }\n    }\n    onExpandAll() {\n        this.filtersToolPanelListPanel.expandFilterGroups(true);\n    }\n    onCollapseAll() {\n        this.filtersToolPanelListPanel.expandFilterGroups(false);\n    }\n    onSearchChanged(event) {\n        this.filtersToolPanelListPanel.performFilterSearch(event.searchText);\n    }\n    setFilterLayout(colDefs) {\n        this.filtersToolPanelListPanel.setFiltersLayout(colDefs);\n    }\n    onGroupExpanded(event) {\n        this.filtersToolPanelHeaderPanel.setExpandState(event.state);\n    }\n    expandFilterGroups(groupIds) {\n        this.filtersToolPanelListPanel.expandFilterGroups(true, groupIds);\n    }\n    collapseFilterGroups(groupIds) {\n        this.filtersToolPanelListPanel.expandFilterGroups(false, groupIds);\n    }\n    expandFilters(colIds) {\n        this.filtersToolPanelListPanel.expandFilters(true, colIds);\n    }\n    collapseFilters(colIds) {\n        this.filtersToolPanelListPanel.expandFilters(false, colIds);\n    }\n    syncLayoutWithGrid() {\n        this.filtersToolPanelListPanel.syncFilterLayout();\n    }\n    refresh() {\n        this.init(this.params);\n    }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so we need to override destroy() just to make the method public.\n    destroy() {\n        super.destroy();\n    }\n}\nFiltersToolPanel.TEMPLATE = `<div class=\"ag-filter-toolpanel\">\n            <ag-filters-tool-panel-header ref=\"filtersToolPanelHeaderPanel\"></ag-filters-tool-panel-header>\n            <ag-filters-tool-panel-list ref=\"filtersToolPanelListPanel\"></ag-filters-tool-panel-list>\n         </div>`;\n__decorate$1Y([\n    RefSelector('filtersToolPanelHeaderPanel')\n], FiltersToolPanel.prototype, \"filtersToolPanelHeaderPanel\", void 0);\n__decorate$1Y([\n    RefSelector('filtersToolPanelListPanel')\n], FiltersToolPanel.prototype, \"filtersToolPanelListPanel\", void 0);\n__decorate$1Y([\n    Autowired('gridApi')\n], FiltersToolPanel.prototype, \"gridApi\", void 0);\n__decorate$1Y([\n    Autowired('columnApi')\n], FiltersToolPanel.prototype, \"columnApi\", void 0);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$c = '30.0.3';\n\nconst FiltersToolPanelModule = {\n    version: VERSION$c,\n    moduleName: ModuleNames.FiltersToolPanelModule,\n    beans: [],\n    agStackComponents: [\n        { componentName: 'AgFiltersToolPanelHeader', componentClass: FiltersToolPanelHeaderPanel },\n        { componentName: 'AgFiltersToolPanelList', componentClass: FiltersToolPanelListPanel }\n    ],\n    userComponents: [\n        { componentName: 'agFiltersToolPanel', componentClass: FiltersToolPanel },\n    ],\n    dependantModules: [\n        SideBarModule,\n        EnterpriseCoreModule\n    ]\n};\n\nvar __extends$13 = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * The interval methods don't mutate Date parameters.\n */\nvar TimeInterval = /** @class */ (function () {\n    function TimeInterval(encode, decode, rangeCallback) {\n        this._encode = encode;\n        this._decode = decode;\n        this._rangeCallback = rangeCallback;\n    }\n    /**\n     * Returns a new date representing the latest interval boundary date before or equal to date.\n     * For example, `day.floor(date)` typically returns 12:00 AM local time on the given date.\n     * @param date\n     */\n    TimeInterval.prototype.floor = function (date) {\n        var d = new Date(date);\n        var e = this._encode(d);\n        return this._decode(e);\n    };\n    /**\n     * Returns a new date representing the earliest interval boundary date after or equal to date.\n     * @param date\n     */\n    TimeInterval.prototype.ceil = function (date) {\n        var d = new Date(Number(date) - 1);\n        var e = this._encode(d);\n        return this._decode(e + 1);\n    };\n    /**\n     * Returns an array of dates representing every interval boundary after or equal to start (inclusive) and before stop (exclusive).\n     * @param start Range start.\n     * @param stop Range end.\n     * @param extend If specified, the requested range will be extended to the closest \"nice\" values.\n     */\n    TimeInterval.prototype.range = function (start, stop, extend) {\n        var _a;\n        var rangeCallback = (_a = this._rangeCallback) === null || _a === void 0 ? void 0 : _a.call(this, start, stop);\n        var e0 = this._encode(extend ? this.floor(start) : this.ceil(start));\n        var e1 = this._encode(extend ? this.ceil(stop) : this.floor(stop));\n        if (e1 < e0) {\n            return [];\n        }\n        var range = [];\n        for (var e = e0; e <= e1; e++) {\n            var d = this._decode(e);\n            range.push(d);\n        }\n        rangeCallback === null || rangeCallback === void 0 ? void 0 : rangeCallback();\n        return range;\n    };\n    return TimeInterval;\n}());\nvar CountableTimeInterval = /** @class */ (function (_super) {\n    __extends$13(CountableTimeInterval, _super);\n    function CountableTimeInterval() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    CountableTimeInterval.prototype.getOffset = function (snapTo, step) {\n        var s = typeof snapTo === 'number' || snapTo instanceof Date ? this._encode(new Date(snapTo)) : 0;\n        return Math.floor(s) % step;\n    };\n    /**\n     * Returns a filtered view of this interval representing every step'th date.\n     * It can be a number of minutes, hours, days etc.\n     * Must be a positive integer.\n     * @param step\n     */\n    CountableTimeInterval.prototype.every = function (step, options) {\n        var _this = this;\n        var offset = 0;\n        var rangeCallback;\n        var _a = (options !== null && options !== void 0 ? options : {}).snapTo, snapTo = _a === void 0 ? 'start' : _a;\n        if (typeof snapTo === 'string') {\n            var initialOffset_1 = offset;\n            rangeCallback = function (start, stop) {\n                var s = snapTo === 'start' ? start : stop;\n                offset = _this.getOffset(s, step);\n                return function () { return (offset = initialOffset_1); };\n            };\n        }\n        else if (typeof snapTo === 'number') {\n            offset = this.getOffset(new Date(snapTo), step);\n        }\n        else if (snapTo instanceof Date) {\n            offset = this.getOffset(snapTo, step);\n        }\n        var encode = function (date) {\n            var e = _this._encode(date);\n            return Math.floor((e - offset) / step);\n        };\n        var decode = function (encoded) {\n            return _this._decode(encoded * step + offset);\n        };\n        var interval = new TimeInterval(encode, decode, rangeCallback);\n        return interval;\n    };\n    return CountableTimeInterval;\n}(TimeInterval));\n\nfunction encode$b(date) {\n    return date.getTime();\n}\nfunction decode$b(encoded) {\n    return new Date(encoded);\n}\nvar millisecond = new CountableTimeInterval(encode$b, decode$b);\n\n// Common time unit sizes in milliseconds.\nnew Date(0).getFullYear();\nvar durationSecond = 1000;\nvar durationMinute = durationSecond * 60;\nvar durationHour = durationMinute * 60;\nvar durationDay = durationHour * 24;\nvar durationWeek = durationDay * 7;\nvar durationMonth = durationDay * 30;\nvar durationYear = durationDay * 365;\n\nvar offset$2 = new Date().getTimezoneOffset() * durationMinute;\nfunction encode$a(date) {\n    return Math.floor((date.getTime() - offset$2) / durationSecond);\n}\nfunction decode$a(encoded) {\n    return new Date(offset$2 + encoded * durationSecond);\n}\nvar second = new CountableTimeInterval(encode$a, decode$a);\n\nvar offset$1 = new Date().getTimezoneOffset() * durationMinute;\nfunction encode$9(date) {\n    return Math.floor((date.getTime() - offset$1) / durationMinute);\n}\nfunction decode$9(encoded) {\n    return new Date(offset$1 + encoded * durationMinute);\n}\nvar minute = new CountableTimeInterval(encode$9, decode$9);\n\nvar offset = new Date().getTimezoneOffset() * durationMinute;\nfunction encode$8(date) {\n    return Math.floor((date.getTime() - offset) / durationHour);\n}\nfunction decode$8(encoded) {\n    return new Date(offset + encoded * durationHour);\n}\nvar hour = new CountableTimeInterval(encode$8, decode$8);\n\nfunction encode$7(date) {\n    var utc = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate());\n    return Math.floor(utc / durationDay);\n}\nfunction decode$7(encoded) {\n    var d = new Date(0);\n    d.setDate(d.getDate() + encoded);\n    d.setHours(0, 0, 0, 0);\n    return d;\n}\nvar day = new CountableTimeInterval(encode$7, decode$7);\n\nvar baseSunday = new Date(2023, 0, 1);\n// Set date to n-th day of the week.\nfunction weekday(n) {\n    // Use UTC for weeks calculation to get into account time zone shifts\n    var base = Date.UTC(baseSunday.getFullYear(), baseSunday.getMonth(), baseSunday.getDate()) + n * durationDay;\n    function encode(date) {\n        var utc = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate());\n        return Math.floor((utc - base) / durationWeek);\n    }\n    function decode(encoded) {\n        var d = new Date(base);\n        d.setDate(d.getDate() + encoded * 7);\n        return d;\n    }\n    return new CountableTimeInterval(encode, decode);\n}\nvar sunday = weekday(0);\nvar monday = weekday(1);\nvar tuesday = weekday(2);\nvar wednesday = weekday(3);\nvar thursday = weekday(4);\nvar friday = weekday(5);\nvar saturday = weekday(6);\n\nfunction encode$6(date) {\n    return date.getFullYear() * 12 + date.getMonth();\n}\nfunction decode$6(encoded) {\n    var year = Math.floor(encoded / 12);\n    var month = encoded - year * 12;\n    return new Date(year, month, 1);\n}\nvar month = new CountableTimeInterval(encode$6, decode$6);\n\nfunction encode$5(date) {\n    return date.getFullYear();\n}\nfunction decode$5(encoded) {\n    // Note: assigning years through the constructor\n    // will break for years 0 - 99 AD (will turn 1900's).\n    var d = new Date();\n    d.setFullYear(encoded);\n    d.setMonth(0, 1);\n    d.setHours(0, 0, 0, 0);\n    return d;\n}\nvar year = new CountableTimeInterval(encode$5, decode$5);\n\nfunction encode$4(date) {\n    return Math.floor(date.getTime() / durationMinute);\n}\nfunction decode$4(encoded) {\n    return new Date(encoded * durationMinute);\n}\nvar utcMinute = new CountableTimeInterval(encode$4, decode$4);\n\nfunction encode$3(date) {\n    return Math.floor(date.getTime() / durationHour);\n}\nfunction decode$3(encoded) {\n    return new Date(encoded * durationHour);\n}\nvar utcHour = new CountableTimeInterval(encode$3, decode$3);\n\nfunction encode$2(date) {\n    return Math.floor(date.getTime() / durationDay);\n}\nfunction decode$2(encoded) {\n    var d = new Date(0);\n    d.setUTCDate(d.getUTCDate() + encoded);\n    d.setUTCHours(0, 0, 0, 0);\n    return d;\n}\nvar utcDay = new CountableTimeInterval(encode$2, decode$2);\n\nfunction encode$1(date) {\n    return date.getUTCFullYear() * 12 + date.getUTCMonth();\n}\nfunction decode$1(encoded) {\n    var year = Math.floor(encoded / 12);\n    var month = encoded - year * 12;\n    return new Date(Date.UTC(year, month, 1));\n}\nvar utcMonth = new CountableTimeInterval(encode$1, decode$1);\n\nfunction encode(date) {\n    return date.getUTCFullYear();\n}\nfunction decode(encoded) {\n    // Note: assigning years through the constructor\n    // will break for years 0 - 99 AD (will turn 1900's).\n    var d = new Date();\n    d.setUTCFullYear(encoded);\n    d.setUTCMonth(0, 1);\n    d.setUTCHours(0, 0, 0, 0);\n    return d;\n}\nvar utcYear = new CountableTimeInterval(encode, decode);\n\nvar time = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    millisecond: millisecond,\n    second: second,\n    minute: minute,\n    hour: hour,\n    day: day,\n    sunday: sunday,\n    monday: monday,\n    tuesday: tuesday,\n    wednesday: wednesday,\n    thursday: thursday,\n    friday: friday,\n    saturday: saturday,\n    month: month,\n    year: year,\n    utcMinute: utcMinute,\n    utcHour: utcHour,\n    utcDay: utcDay,\n    utcMonth: utcMonth,\n    utcYear: utcYear\n});\n\nvar MOBILE = [/Android/i, /webOS/i, /iPhone/i, /iPad/i, /iPod/i, /BlackBerry/i, /Windows Phone/i];\nfunction isDesktop() {\n    var userAgent = navigator.userAgent;\n    if (MOBILE.some(function (r) { return r.test(userAgent); })) {\n        return false;\n    }\n    return true;\n}\n\n/**\n * Wraps the native Canvas element and overrides its CanvasRenderingContext2D to\n * provide resolution independent rendering based on `window.devicePixelRatio`.\n */\nvar HdpiCanvas = /** @class */ (function () {\n    // The width/height attributes of the Canvas element default to\n    // 300/150 according to w3.org.\n    function HdpiCanvas(_a) {\n        var _b = _a.document, document = _b === void 0 ? window.document : _b, _c = _a.width, width = _c === void 0 ? 600 : _c, _d = _a.height, height = _d === void 0 ? 300 : _d, _e = _a.domLayer, domLayer = _e === void 0 ? false : _e, _f = _a.zIndex, zIndex = _f === void 0 ? 0 : _f, _g = _a.name, name = _g === void 0 ? undefined : _g, _h = _a.overrideDevicePixelRatio, overrideDevicePixelRatio = _h === void 0 ? undefined : _h;\n        this._container = undefined;\n        this._enabled = true;\n        // `NaN` is deliberate here, so that overrides are always applied\n        // and the `resetTransform` inside the `resize` method works in IE11.\n        this._pixelRatio = NaN;\n        this._width = 0;\n        this._height = 0;\n        this.document = document;\n        // Create canvas and immediately apply width + height to avoid out-of-memory\n        // errors on iOS/iPadOS Safari.\n        this.element = document.createElement('canvas');\n        this.element.width = width;\n        this.element.height = height;\n        this.context = this.element.getContext('2d');\n        this.imageSource = this.context.canvas;\n        var style = this.element.style;\n        style.userSelect = 'none';\n        style.display = 'block';\n        if (domLayer) {\n            style.position = 'absolute';\n            style.zIndex = String(zIndex);\n            style.top = '0';\n            style.left = '0';\n            style.pointerEvents = 'none';\n            style.opacity = \"1\";\n            if (name) {\n                this.element.id = name;\n            }\n        }\n        this.setPixelRatio(overrideDevicePixelRatio);\n        this.resize(width, height);\n    }\n    Object.defineProperty(HdpiCanvas.prototype, \"container\", {\n        get: function () {\n            return this._container;\n        },\n        set: function (value) {\n            if (this._container !== value) {\n                this.remove();\n                if (value) {\n                    value.appendChild(this.element);\n                }\n                this._container = value;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(HdpiCanvas.prototype, \"enabled\", {\n        get: function () {\n            return this._enabled;\n        },\n        set: function (value) {\n            this.element.style.display = value ? 'block' : 'none';\n            this._enabled = !!value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    HdpiCanvas.prototype.remove = function () {\n        var parentNode = this.element.parentNode;\n        if (parentNode != null) {\n            parentNode.removeChild(this.element);\n        }\n    };\n    HdpiCanvas.prototype.destroy = function () {\n        this.element.remove();\n        // Workaround memory allocation quirks in iOS Safari by resizing to 0x0 and clearing.\n        // See https://bugs.webkit.org/show_bug.cgi?id=195325.\n        this.element.width = 0;\n        this.element.height = 0;\n        this.context.clearRect(0, 0, 0, 0);\n        Object.freeze(this);\n    };\n    HdpiCanvas.prototype.snapshot = function () {\n        // No-op for compatibility with HdpiOffscreenCanvas.\n    };\n    HdpiCanvas.prototype.clear = function () {\n        this.context.save();\n        this.context.resetTransform();\n        this.context.clearRect(0, 0, this.width, this.height);\n        this.context.restore();\n    };\n    HdpiCanvas.prototype.toImage = function () {\n        var img = this.document.createElement('img');\n        img.src = this.getDataURL();\n        return img;\n    };\n    HdpiCanvas.prototype.getDataURL = function (type) {\n        return this.element.toDataURL(type);\n    };\n    /**\n     * @param fileName The name of the downloaded file.\n     * @param fileFormat The file format, the default is `image/png`\n     */\n    HdpiCanvas.prototype.download = function (fileName, fileFormat) {\n        if (fileFormat === void 0) { fileFormat = 'image/png'; }\n        fileName = (fileName !== null && fileName !== void 0 ? fileName : '').trim() || 'image';\n        var dataUrl = this.getDataURL(fileFormat);\n        var document = this.document;\n        var a = document.createElement('a');\n        a.href = dataUrl;\n        a.download = fileName;\n        a.style.display = 'none';\n        document.body.appendChild(a); // required for the `click` to work in Firefox\n        a.click();\n        document.body.removeChild(a);\n    };\n    Object.defineProperty(HdpiCanvas.prototype, \"pixelRatio\", {\n        get: function () {\n            return this._pixelRatio;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Changes the pixel ratio of the Canvas element to the given value,\n     * or uses the window.devicePixelRatio (default), then resizes the Canvas\n     * element accordingly (default).\n     */\n    HdpiCanvas.prototype.setPixelRatio = function (ratio) {\n        var pixelRatio = ratio !== null && ratio !== void 0 ? ratio : window.devicePixelRatio;\n        if (!isDesktop()) {\n            // Mobile browsers have stricter memory limits, we reduce rendering resolution to\n            // improve stability on mobile browsers. iOS Safari 12->16 are pain-points since they\n            // have memory allocation quirks - see https://bugs.webkit.org/show_bug.cgi?id=195325.\n            pixelRatio = 1;\n        }\n        HdpiCanvas.overrideScale(this.context, pixelRatio);\n        this._pixelRatio = pixelRatio;\n    };\n    Object.defineProperty(HdpiCanvas.prototype, \"pixelated\", {\n        get: function () {\n            return this.element.style.imageRendering === 'pixelated';\n        },\n        set: function (value) {\n            this.element.style.imageRendering = value ? 'pixelated' : 'auto';\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(HdpiCanvas.prototype, \"width\", {\n        get: function () {\n            return this._width;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(HdpiCanvas.prototype, \"height\", {\n        get: function () {\n            return this._height;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    HdpiCanvas.prototype.resize = function (width, height) {\n        if (!(width > 0 && height > 0)) {\n            return;\n        }\n        var _a = this, element = _a.element, context = _a.context, pixelRatio = _a.pixelRatio;\n        element.width = Math.round(width * pixelRatio);\n        element.height = Math.round(height * pixelRatio);\n        element.style.width = width + 'px';\n        element.style.height = height + 'px';\n        context.resetTransform();\n        this._width = width;\n        this._height = height;\n    };\n    Object.defineProperty(HdpiCanvas, \"textMeasuringContext\", {\n        get: function () {\n            if (this._textMeasuringContext) {\n                return this._textMeasuringContext;\n            }\n            var canvas = document.createElement('canvas');\n            this._textMeasuringContext = canvas.getContext('2d');\n            return this._textMeasuringContext;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(HdpiCanvas, \"svgText\", {\n        get: function () {\n            if (this._svgText) {\n                return this._svgText;\n            }\n            var xmlns = 'http://www.w3.org/2000/svg';\n            var svg = document.createElementNS(xmlns, 'svg');\n            svg.setAttribute('width', '100');\n            svg.setAttribute('height', '100');\n            // Add a descriptive class name in case someone sees this SVG element\n            // in devtools and wonders about its purpose:\n            if (svg.classList) {\n                svg.classList.add('text-measuring-svg');\n            }\n            else {\n                svg.setAttribute('class', 'text-measuring-svg');\n            }\n            svg.style.position = 'absolute';\n            svg.style.top = '-1000px';\n            svg.style.visibility = 'hidden';\n            var svgText = document.createElementNS(xmlns, 'text');\n            svgText.setAttribute('x', '0');\n            svgText.setAttribute('y', '30');\n            svgText.setAttribute('text', 'black');\n            svg.appendChild(svgText);\n            document.body.appendChild(svg);\n            this._svgText = svgText;\n            return svgText;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(HdpiCanvas, \"has\", {\n        get: function () {\n            if (this._has) {\n                return this._has;\n            }\n            var isChrome = navigator.userAgent.indexOf('Chrome') > -1;\n            var isFirefox = navigator.userAgent.indexOf('Firefox') > -1;\n            var isSafari = !isChrome && navigator.userAgent.indexOf('Safari') > -1;\n            this._has = Object.freeze({\n                textMetrics: this.textMeasuringContext.measureText('test').actualBoundingBoxDescent !== undefined &&\n                    // Firefox implemented advanced TextMetrics object in v74:\n                    // https://bugzilla.mozilla.org/show_bug.cgi?id=1102584\n                    // but it's buggy, so we'll keep using the SVG for text measurement in Firefox for now.\n                    !isFirefox &&\n                    !isSafari,\n                getTransform: this.textMeasuringContext.getTransform !== undefined,\n            });\n            return this._has;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    HdpiCanvas.measureText = function (text, font, textBaseline, textAlign) {\n        var ctx = this.textMeasuringContext;\n        ctx.font = font;\n        ctx.textBaseline = textBaseline;\n        ctx.textAlign = textAlign;\n        return ctx.measureText(text);\n    };\n    /**\n     * Returns the width and height of the measured text.\n     * @param text The single-line text to measure.\n     * @param font The font shorthand string.\n     */\n    HdpiCanvas.getTextSize = function (text, font) {\n        if (this.has.textMetrics) {\n            var ctx = this.textMeasuringContext;\n            ctx.font = font;\n            var metrics = ctx.measureText(text);\n            return {\n                width: metrics.width,\n                height: metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent,\n            };\n        }\n        else {\n            return this.measureSvgText(text, font);\n        }\n    };\n    HdpiCanvas.measureSvgText = function (text, font) {\n        var cache = this.textSizeCache;\n        var fontCache = cache[font];\n        // Note: consider not caching the size of numeric strings.\n        // For example: if (isNaN(+text)) { // skip\n        if (fontCache) {\n            var size_1 = fontCache[text];\n            if (size_1) {\n                return size_1;\n            }\n        }\n        else {\n            cache[font] = {};\n        }\n        var svgText = this.svgText;\n        svgText.style.font = font;\n        svgText.textContent = text;\n        // `getBBox` returns an instance of `SVGRect` with the same `width` and `height`\n        // measurements as `DOMRect` instance returned by the `getBoundingClientRect`.\n        // But the `SVGRect` instance has half the properties of the `DOMRect`,\n        // so we use the `getBBox` method.\n        var bbox = svgText.getBBox();\n        var size = {\n            width: bbox.width,\n            height: bbox.height,\n        };\n        cache[font][text] = size;\n        return size;\n    };\n    HdpiCanvas.overrideScale = function (ctx, scale) {\n        var depth = 0;\n        var overrides = {\n            save: function () {\n                this.$save();\n                depth++;\n            },\n            restore: function () {\n                if (depth > 0) {\n                    this.$restore();\n                    depth--;\n                }\n                else {\n                    throw new Error('AG Charts - Unable to restore() past depth 0');\n                }\n            },\n            setTransform: function (a, b, c, d, e, f) {\n                if (typeof a === 'object') {\n                    this.$setTransform(a);\n                }\n                else {\n                    this.$setTransform(a * scale, b * scale, c * scale, d * scale, e * scale, f * scale);\n                }\n            },\n            resetTransform: function () {\n                // As of Jan 8, 2019, `resetTransform` is still an \"experimental technology\",\n                // and doesn't work in IE11 and Edge 44.\n                this.$setTransform(scale, 0, 0, scale, 0, 0);\n            },\n            verifyDepthZero: function () {\n                if (depth !== 0) {\n                    throw new Error('AG Charts - Save/restore depth is non-zero: ' + depth);\n                }\n            },\n        };\n        for (var name_1 in overrides) {\n            if (Object.prototype.hasOwnProperty.call(overrides, name_1)) {\n                // Save native methods under prefixed names,\n                // if this hasn't been done by the previous overrides already.\n                if (!ctx['$' + name_1]) {\n                    ctx['$' + name_1] = ctx[name_1];\n                }\n                // Replace native methods with overrides,\n                // or previous overrides with the new ones.\n                ctx[name_1] = overrides[name_1];\n            }\n        }\n    };\n    HdpiCanvas.textSizeCache = {};\n    return HdpiCanvas;\n}());\n\n// For small data structs like a bounding box, objects are superior to arrays\n// in terms of performance (by 3-4% in Chrome 71, Safari 12 and by 20% in Firefox 64).\n// They are also self descriptive and harder to abuse.\n// For example, one has to do:\n// `ctx.strokeRect(bbox.x, bbox.y, bbox.width, bbox.height);`\n// rather than become enticed by the much slower:\n// `ctx.strokeRect(...bbox);`\n// https://jsperf.com/array-vs-object-create-access\nvar __assign$v = (undefined && undefined.__assign) || function () {\n    __assign$v = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$v.apply(this, arguments);\n};\nvar __read$K = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar BBox = /** @class */ (function () {\n    function BBox(x, y, width, height) {\n        this.x = x;\n        this.y = y;\n        this.width = width;\n        this.height = height;\n    }\n    BBox.prototype.clone = function () {\n        var _a = this, x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n        return new BBox(x, y, width, height);\n    };\n    BBox.prototype.equals = function (other) {\n        return this.x === other.x && this.y === other.y && this.width === other.width && this.height === other.height;\n    };\n    BBox.prototype.containsPoint = function (x, y) {\n        return x >= this.x && x <= this.x + this.width && y >= this.y && y <= this.y + this.height;\n    };\n    BBox.prototype.collidesBBox = function (other) {\n        return (this.x < other.x + other.width &&\n            this.x + this.width > other.x &&\n            this.y < other.y + other.height &&\n            this.y + this.height > other.y);\n    };\n    BBox.prototype.isInfinite = function () {\n        return (Math.abs(this.x) === Infinity ||\n            Math.abs(this.y) === Infinity ||\n            Math.abs(this.width) === Infinity ||\n            Math.abs(this.height) === Infinity);\n    };\n    BBox.prototype.shrink = function (amount, position) {\n        var _this = this;\n        var apply = function (pos, amt) {\n            switch (pos) {\n                case 'top':\n                    _this.y += amt;\n                // eslint-disable-next-line no-fallthrough\n                case 'bottom':\n                    _this.height -= amt;\n                    break;\n                case 'left':\n                    _this.x += amt;\n                // eslint-disable-next-line no-fallthrough\n                case 'right':\n                    _this.width -= amt;\n                    break;\n                case 'vertical':\n                    _this.y += amt;\n                    _this.height -= amt * 2;\n                    break;\n                case 'horizontal':\n                    _this.x += amt;\n                    _this.width -= amt * 2;\n                    break;\n                default:\n                    _this.x += amt;\n                    _this.width -= amt * 2;\n                    _this.y += amt;\n                    _this.height -= amt * 2;\n            }\n        };\n        if (typeof amount === 'number') {\n            apply(position, amount);\n        }\n        else {\n            Object.entries(amount).forEach(function (_a) {\n                var _b = __read$K(_a, 2), pos = _b[0], amt = _b[1];\n                return apply(pos, amt);\n            });\n        }\n        return this;\n    };\n    BBox.prototype.grow = function (amount, position) {\n        if (typeof amount === 'number') {\n            this.shrink(-amount, position);\n        }\n        else {\n            var paddingCopy = __assign$v({}, amount);\n            for (var key in paddingCopy) {\n                paddingCopy[key] *= -1;\n            }\n            this.shrink(paddingCopy);\n        }\n        return this;\n    };\n    BBox.merge = function (boxes) {\n        var left = Infinity;\n        var top = Infinity;\n        var right = -Infinity;\n        var bottom = -Infinity;\n        boxes.forEach(function (box) {\n            if (box.x < left) {\n                left = box.x;\n            }\n            if (box.y < top) {\n                top = box.y;\n            }\n            if (box.x + box.width > right) {\n                right = box.x + box.width;\n            }\n            if (box.y + box.height > bottom) {\n                bottom = box.y + box.height;\n            }\n        });\n        return new BBox(left, top, right - left, bottom - top);\n    };\n    return BBox;\n}());\n\nvar __read$J = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$t = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\n/**\n * As of Jan 8, 2019, Firefox still doesn't implement\n * `getTransform(): DOMMatrix;`\n * `setTransform(transform?: DOMMatrix2DInit)`\n * in the `CanvasRenderingContext2D`.\n * Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=928150\n * IE11 and Edge 44 also don't have the support.\n * Thus this class, to keep track of the current transform and\n * combine transformations.\n * Standards:\n * https://html.spec.whatwg.org/dev/canvas.html\n * https://www.w3.org/TR/geometry-1/\n */\nvar Matrix = /** @class */ (function () {\n    function Matrix(elements) {\n        if (elements === void 0) { elements = [1, 0, 0, 1, 0, 0]; }\n        this.elements = elements;\n    }\n    Object.defineProperty(Matrix.prototype, \"e\", {\n        get: function () {\n            return __spreadArray$t([], __read$J(this.elements));\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Matrix.prototype.setElements = function (elements) {\n        var e = this.elements;\n        // `this.elements = elements.slice()` is 4-5 times slower\n        // (in Chrome 71 and FF 64) than manually copying elements,\n        // since slicing allocates new memory.\n        // The performance of passing parameters individually\n        // vs as an array is about the same in both browsers, so we\n        // go with a single (array of elements) parameter, because\n        // `setElements(elements)` and `setElements([a, b, c, d, e, f])`\n        // calls give us roughly the same performance, versus\n        // `setElements(...elements)` and `setElements(a, b, c, d, e, f)`,\n        // where the spread operator causes a 20-30x performance drop\n        // (30x when compiled to ES5's `.apply(this, elements)`\n        //  20x when used natively).\n        e[0] = elements[0];\n        e[1] = elements[1];\n        e[2] = elements[2];\n        e[3] = elements[3];\n        e[4] = elements[4];\n        e[5] = elements[5];\n        return this;\n    };\n    Object.defineProperty(Matrix.prototype, \"identity\", {\n        get: function () {\n            var e = this.elements;\n            return e[0] === 1 && e[1] === 0 && e[2] === 0 && e[3] === 1 && e[4] === 0 && e[5] === 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Performs the AxB matrix multiplication and saves the result\n     * to `C`, if given, or to `A` otherwise.\n     */\n    Matrix.prototype.AxB = function (A, B, C) {\n        var a = A[0] * B[0] + A[2] * B[1], b = A[1] * B[0] + A[3] * B[1], c = A[0] * B[2] + A[2] * B[3], d = A[1] * B[2] + A[3] * B[3], e = A[0] * B[4] + A[2] * B[5] + A[4], f = A[1] * B[4] + A[3] * B[5] + A[5];\n        C = C !== null && C !== void 0 ? C : A;\n        C[0] = a;\n        C[1] = b;\n        C[2] = c;\n        C[3] = d;\n        C[4] = e;\n        C[5] = f;\n    };\n    /**\n     * The `other` matrix gets post-multiplied to the current matrix.\n     * Returns the current matrix.\n     * @param other\n     */\n    Matrix.prototype.multiplySelf = function (other) {\n        this.AxB(this.elements, other.elements);\n        return this;\n    };\n    /**\n     * The `other` matrix gets post-multiplied to the current matrix.\n     * Returns a new matrix.\n     * @param other\n     */\n    Matrix.prototype.multiply = function (other) {\n        var elements = new Array(6);\n        this.AxB(this.elements, other.elements, elements);\n        return new Matrix(elements);\n    };\n    Matrix.prototype.preMultiplySelf = function (other) {\n        this.AxB(other.elements, this.elements, this.elements);\n        return this;\n    };\n    /**\n     * Returns the inverse of this matrix as a new matrix.\n     */\n    Matrix.prototype.inverse = function () {\n        var el = this.elements;\n        var a = el[0], b = el[1], c = el[2], d = el[3];\n        var e = el[4], f = el[5];\n        var rD = 1 / (a * d - b * c); // reciprocal of determinant\n        a *= rD;\n        b *= rD;\n        c *= rD;\n        d *= rD;\n        return new Matrix([d, -b, -c, a, c * f - d * e, b * e - a * f]);\n    };\n    /**\n     * Save the inverse of this matrix to the given matrix.\n     */\n    Matrix.prototype.inverseTo = function (other) {\n        var el = this.elements;\n        var a = el[0], b = el[1], c = el[2], d = el[3];\n        var e = el[4], f = el[5];\n        var rD = 1 / (a * d - b * c); // reciprocal of determinant\n        a *= rD;\n        b *= rD;\n        c *= rD;\n        d *= rD;\n        other.setElements([d, -b, -c, a, c * f - d * e, b * e - a * f]);\n        return this;\n    };\n    Matrix.prototype.invertSelf = function () {\n        var el = this.elements;\n        var a = el[0], b = el[1], c = el[2], d = el[3];\n        var e = el[4], f = el[5];\n        var rD = 1 / (a * d - b * c); // reciprocal of determinant\n        a *= rD;\n        b *= rD;\n        c *= rD;\n        d *= rD;\n        el[0] = d;\n        el[1] = -b;\n        el[2] = -c;\n        el[3] = a;\n        el[4] = c * f - d * e;\n        el[5] = b * e - a * f;\n        return this;\n    };\n    Matrix.prototype.transformPoint = function (x, y) {\n        var e = this.elements;\n        return {\n            x: x * e[0] + y * e[2] + e[4],\n            y: x * e[1] + y * e[3] + e[5],\n        };\n    };\n    Matrix.prototype.transformBBox = function (bbox, target) {\n        var elements = this.elements;\n        var xx = elements[0];\n        var xy = elements[1];\n        var yx = elements[2];\n        var yy = elements[3];\n        var h_w = bbox.width * 0.5;\n        var h_h = bbox.height * 0.5;\n        var cx = bbox.x + h_w;\n        var cy = bbox.y + h_h;\n        var w = Math.abs(h_w * xx) + Math.abs(h_h * yx);\n        var h = Math.abs(h_w * xy) + Math.abs(h_h * yy);\n        if (!target) {\n            target = new BBox(0, 0, 0, 0);\n        }\n        target.x = cx * xx + cy * yx + elements[4] - w;\n        target.y = cx * xy + cy * yy + elements[5] - h;\n        target.width = w + w;\n        target.height = h + h;\n        return target;\n    };\n    Matrix.prototype.toContext = function (ctx) {\n        // It's fair to say that matrix multiplications are not cheap.\n        // However, updating path definitions on every frame isn't either, so\n        // it may be cheaper to just translate paths. It's also fair to\n        // say, that most paths will have to be re-rendered anyway, say\n        // rectangle paths in a bar chart, where an animation would happen when\n        // the data set changes and existing bars are morphed into new ones.\n        // Or a pie chart, where old sectors are also morphed into new ones.\n        // Same for the line chart. The only plausible case where translating\n        // existing paths would be enough, is the scatter chart, where marker\n        // icons, typically circles, stay the same size. But if circle radii\n        // are bound to some data points, even circle paths would have to be\n        // updated. And thus it makes sense to optimize for fewer matrix\n        // transforms, where transform matrices of paths are mostly identity\n        // matrices and `x`/`y`, `centerX`/`centerY` and similar properties\n        // are used to define a path at specific coordinates. And only groups\n        // are used to collectively apply a transform to a set of nodes.\n        // If the matrix is mostly identity (95% of the time),\n        // the `if (this.isIdentity)` check can make this call 3-4 times\n        // faster on average: https://jsperf.com/matrix-check-first-vs-always-set\n        if (this.identity) {\n            return;\n        }\n        var e = this.elements;\n        ctx.transform(e[0], e[1], e[2], e[3], e[4], e[5]);\n    };\n    Matrix.flyweight = function (sourceMatrix) {\n        return Matrix.instance.setElements(sourceMatrix.elements);\n    };\n    Matrix.updateTransformMatrix = function (matrix, scalingX, scalingY, rotation, translationX, translationY, opts) {\n        // Assume that centers of scaling and rotation are at the origin.\n        var _a = __read$J([0, 0], 2), bbcx = _a[0], bbcy = _a[1];\n        var sx = scalingX;\n        var sy = scalingY;\n        var scx;\n        var scy;\n        if (sx === 1 && sy === 1) {\n            scx = 0;\n            scy = 0;\n        }\n        else {\n            scx = (opts === null || opts === void 0 ? void 0 : opts.scalingCenterX) == null ? bbcx : opts === null || opts === void 0 ? void 0 : opts.scalingCenterX;\n            scy = (opts === null || opts === void 0 ? void 0 : opts.scalingCenterY) == null ? bbcy : opts === null || opts === void 0 ? void 0 : opts.scalingCenterY;\n        }\n        var r = rotation;\n        var cos = Math.cos(r);\n        var sin = Math.sin(r);\n        var rcx;\n        var rcy;\n        if (r === 0) {\n            rcx = 0;\n            rcy = 0;\n        }\n        else {\n            rcx = (opts === null || opts === void 0 ? void 0 : opts.rotationCenterX) == null ? bbcx : opts === null || opts === void 0 ? void 0 : opts.rotationCenterX;\n            rcy = (opts === null || opts === void 0 ? void 0 : opts.rotationCenterY) == null ? bbcy : opts === null || opts === void 0 ? void 0 : opts.rotationCenterY;\n        }\n        var tx = translationX;\n        var ty = translationY;\n        // The transform matrix `M` is a result of the following transformations:\n        // 1) translate the center of scaling to the origin\n        // 2) scale\n        // 3) translate back\n        // 4) translate the center of rotation to the origin\n        // 5) rotate\n        // 6) translate back\n        // 7) translate\n        //         (7)          (6)             (5)             (4)           (3)           (2)           (1)\n        //     | 1 0 tx |   | 1 0 rcx |   | cos -sin 0 |   | 1 0 -rcx |   | 1 0 scx |   | sx 0 0 |   | 1 0 -scx |\n        // M = | 0 1 ty | * | 0 1 rcy | * | sin  cos 0 | * | 0 1 -rcy | * | 0 1 scy | * | 0 sy 0 | * | 0 1 -scy |\n        //     | 0 0  1 |   | 0 0  1  |   |  0    0  1 |   | 0 0  1   |   | 0 0  1  |   | 0  0 0 |   | 0 0  1   |\n        // Translation after steps 1-4 above:\n        var tx4 = scx * (1 - sx) - rcx;\n        var ty4 = scy * (1 - sy) - rcy;\n        matrix.setElements([\n            cos * sx,\n            sin * sx,\n            -sin * sy,\n            cos * sy,\n            cos * tx4 - sin * ty4 + rcx + tx,\n            sin * tx4 + cos * ty4 + rcy + ty,\n        ]);\n        return matrix;\n    };\n    Matrix.fromContext = function (ctx) {\n        var domMatrix = ctx.getTransform();\n        return new Matrix([domMatrix.a, domMatrix.b, domMatrix.c, domMatrix.d, domMatrix.e, domMatrix.f]);\n    };\n    Matrix.instance = new Matrix();\n    return Matrix;\n}());\n\nvar ID_MAP = {};\nfunction resetIds() {\n    for (var key in ID_MAP) {\n        delete ID_MAP[key];\n    }\n}\nfunction createId$1(instance) {\n    var _a;\n    var constructor = instance.constructor;\n    var className = Object.prototype.hasOwnProperty.call(constructor, 'className')\n        ? constructor.className\n        : constructor.name;\n    if (!className) {\n        throw new Error(\"The \" + constructor + \" is missing the 'className' property.\");\n    }\n    var nextId = ((_a = ID_MAP[className]) !== null && _a !== void 0 ? _a : 0) + 1;\n    ID_MAP[className] = nextId;\n    return className + '-' + nextId;\n}\n\nvar RedrawType;\n(function (RedrawType) {\n    RedrawType[RedrawType[\"NONE\"] = 0] = \"NONE\";\n    // Canvas doesn't need clearing, an incremental re-rerender is sufficient.\n    RedrawType[RedrawType[\"TRIVIAL\"] = 1] = \"TRIVIAL\";\n    // Group needs clearing, a semi-incremental re-render is sufficient.\n    RedrawType[RedrawType[\"MINOR\"] = 2] = \"MINOR\";\n    // Canvas needs to be cleared for these redraw types.\n    RedrawType[RedrawType[\"MAJOR\"] = 3] = \"MAJOR\";\n})(RedrawType || (RedrawType = {}));\n/** @returns true if new Function() is disabled in the current execution context. */\nfunction functionConstructorAvailable() {\n    try {\n        new Function('return true');\n        return true;\n    }\n    catch (e) {\n        return false;\n    }\n}\nvar STRING_FUNCTION_USEABLE = functionConstructorAvailable();\nfunction SceneChangeDetection(opts) {\n    var _a = opts !== null && opts !== void 0 ? opts : {}, changeCb = _a.changeCb, convertor = _a.convertor;\n    return function (target, key) {\n        // `target` is either a constructor (static member) or prototype (instance member)\n        var privateKey = \"__\" + key;\n        if (target[key]) {\n            return;\n        }\n        if (STRING_FUNCTION_USEABLE && changeCb == null && convertor == null) {\n            prepareFastGetSet(target, key, privateKey, opts);\n        }\n        else {\n            prepareSlowGetSet(target, key, privateKey, opts);\n        }\n    };\n}\nfunction prepareFastGetSet(target, key, privateKey, opts) {\n    var _a = opts !== null && opts !== void 0 ? opts : {}, _b = _a.redraw, redraw = _b === void 0 ? RedrawType.TRIVIAL : _b, _c = _a.type, type = _c === void 0 ? 'normal' : _c, _d = _a.checkDirtyOnAssignment, checkDirtyOnAssignment = _d === void 0 ? false : _d;\n    // Optimised code-path.\n    // Remove all conditional logic from runtime - generate a setter with the exact necessary\n    // steps, as these setters are called a LOT during update cycles.\n    var setterJs = new Function('value', \"\\n        const oldValue = this.\" + privateKey + \";\\n        if (value !== oldValue) {\\n            this.\" + privateKey + \" = value;\\n            \" + (type === 'normal' ? \"this.markDirty(this, \" + redraw + \");\" : '') + \"\\n            \" + (type === 'transform' ? \"this.markDirtyTransform(\" + redraw + \");\" : '') + \"\\n            \" + (type === 'path'\n        ? \"if (!this._dirtyPath) { this._dirtyPath = true; this.markDirty(this, \" + redraw + \"); }\"\n        : '') + \"\\n            \" + (type === 'font'\n        ? \"if (!this._dirtyFont) { this._dirtyFont = true; this.markDirty(this, \" + redraw + \"); }\"\n        : '') + \"\\n        }\\n        \" + (checkDirtyOnAssignment\n        ? \"if (value != null && value._dirty > \" + RedrawType.NONE + \") { this.markDirty(value, value._dirty); }\"\n        : '') + \"\\n\");\n    var getterJs = new Function(\"return this.\" + privateKey + \";\");\n    Object.defineProperty(target, key, {\n        set: setterJs,\n        get: getterJs,\n        enumerable: true,\n        configurable: true,\n    });\n}\nfunction prepareSlowGetSet(target, key, privateKey, opts) {\n    var _a = opts !== null && opts !== void 0 ? opts : {}, _b = _a.redraw, redraw = _b === void 0 ? RedrawType.TRIVIAL : _b, _c = _a.type, type = _c === void 0 ? 'normal' : _c, changeCb = _a.changeCb, convertor = _a.convertor, _d = _a.checkDirtyOnAssignment, checkDirtyOnAssignment = _d === void 0 ? false : _d;\n    // Unoptimised but 'safe' code-path, for environments with CSP headers and no 'unsafe-eval'.\n    // We deliberately do not support debug branches found in the optimised path above, since\n    // for large data-set series performance deteriorates with every extra branch here.\n    var setter = function (value) {\n        var oldValue = this[privateKey];\n        value = convertor ? convertor(value) : value;\n        if (value !== oldValue) {\n            this[privateKey] = value;\n            if (type === 'normal')\n                this.markDirty(this, redraw);\n            if (type === 'transform')\n                this.markDirtyTransform(redraw);\n            if (type === 'path' && !this._dirtyPath) {\n                this._dirtyPath = true;\n                this.markDirty(this, redraw);\n            }\n            if (type === 'font' && !this._dirtyFont) {\n                this._dirtyFont = true;\n                this.markDirty(this, redraw);\n            }\n            if (changeCb)\n                changeCb(this);\n        }\n        if (checkDirtyOnAssignment && value != null && value._dirty > RedrawType.NONE)\n            this.markDirty(value, value._dirty);\n    };\n    var getter = function () {\n        return this[privateKey];\n    };\n    Object.defineProperty(target, key, {\n        set: setter,\n        get: getter,\n        enumerable: true,\n        configurable: true,\n    });\n}\nvar ChangeDetectable = /** @class */ (function () {\n    function ChangeDetectable() {\n        this._dirty = RedrawType.MAJOR;\n    }\n    ChangeDetectable.prototype.markDirty = function (_source, type) {\n        if (type === void 0) { type = RedrawType.TRIVIAL; }\n        if (this._dirty > type) {\n            return;\n        }\n        this._dirty = type;\n    };\n    ChangeDetectable.prototype.markClean = function (_opts) {\n        this._dirty = RedrawType.NONE;\n    };\n    ChangeDetectable.prototype.isDirty = function () {\n        return this._dirty > RedrawType.NONE;\n    };\n    return ChangeDetectable;\n}());\n\nvar __extends$12 = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1X = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __values$A = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read$I = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$s = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar PointerEvents;\n(function (PointerEvents) {\n    PointerEvents[PointerEvents[\"All\"] = 0] = \"All\";\n    PointerEvents[PointerEvents[\"None\"] = 1] = \"None\";\n})(PointerEvents || (PointerEvents = {}));\nvar zIndexChangedCallback = function (o) {\n    if (o.parent) {\n        o.parent.dirtyZIndex = true;\n    }\n    o.zIndexChanged();\n};\n/**\n * Abstract scene graph node.\n * Each node can have zero or one parent and belong to zero or one scene.\n */\nvar Node = /** @class */ (function (_super) {\n    __extends$12(Node, _super);\n    function Node() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** Unique number to allow creation order to be easily determined. */\n        _this.serialNumber = Node._nextSerialNumber++;\n        /**\n         * Unique node ID in the form `ClassName-NaturalNumber`.\n         */\n        _this.id = createId$1(_this);\n        /**\n         * Some number to identify this node, typically within a `Group` node.\n         * Usually this will be some enum value used as a selector.\n         */\n        _this.tag = NaN;\n        /**\n         * To simplify the type system (especially in Selections) we don't have the `Parent` node\n         * (one that has children). Instead, we mimic HTML DOM, where any node can have children.\n         * But we still need to distinguish regular leaf nodes from container leafs somehow.\n         */\n        _this.isContainerNode = false;\n        _this._children = [];\n        // Used to check for duplicate nodes.\n        _this.childSet = {}; // new Set<Node>()\n        // These matrices may need to have package level visibility\n        // for performance optimization purposes.\n        _this.matrix = new Matrix();\n        _this.inverseMatrix = new Matrix();\n        _this._dirtyTransform = false;\n        _this.scalingX = 1;\n        _this.scalingY = 1;\n        /**\n         * The center of scaling.\n         * The default value of `null` means the scaling center will be\n         * determined automatically, as the center of the bounding box\n         * of a node.\n         */\n        _this.scalingCenterX = null;\n        _this.scalingCenterY = null;\n        _this.rotationCenterX = null;\n        _this.rotationCenterY = null;\n        /**\n         * Rotation angle in radians.\n         * The value is set as is. No normalization to the [-180, 180) or [0, 360)\n         * interval is performed.\n         */\n        _this.rotation = 0;\n        _this.translationX = 0;\n        _this.translationY = 0;\n        _this.visible = true;\n        _this.dirtyZIndex = false;\n        _this.zIndex = 0;\n        /** Discriminators for render order within a zIndex. */\n        _this.zIndexSubOrder = undefined;\n        _this.pointerEvents = PointerEvents.All;\n        return _this;\n    }\n    Object.defineProperty(Node.prototype, \"datum\", {\n        /**\n         * Some arbitrary data bound to the node.\n         */\n        get: function () {\n            var _a;\n            if (this._datum !== undefined) {\n                return this._datum;\n            }\n            return (_a = this._parent) === null || _a === void 0 ? void 0 : _a.datum;\n        },\n        set: function (datum) {\n            this._datum = datum;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Node.prototype._setLayerManager = function (value) {\n        var e_1, _a;\n        this._layerManager = value;\n        this._debug = value === null || value === void 0 ? void 0 : value.debug;\n        try {\n            for (var _b = __values$A(this.children), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var child = _c.value;\n                child._setLayerManager(value);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n    };\n    Object.defineProperty(Node.prototype, \"layerManager\", {\n        get: function () {\n            return this._layerManager;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Node.prototype, \"parent\", {\n        get: function () {\n            return this._parent;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Node.prototype, \"children\", {\n        get: function () {\n            return this._children;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Appends one or more new node instances to this parent.\n     * If one needs to:\n     * - move a child to the end of the list of children\n     * - move a child from one parent to another (including parents in other scenes)\n     * one should use the {@link insertBefore} method instead.\n     * @param nodes A node or nodes to append.\n     */\n    Node.prototype.append = function (nodes) {\n        var e_2, _a;\n        // Passing a single parameter to an open-ended version of `append`\n        // would be 30-35% slower than this.\n        if (!Array.isArray(nodes)) {\n            nodes = [nodes];\n        }\n        try {\n            for (var nodes_1 = __values$A(nodes), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) {\n                var node = nodes_1_1.value;\n                if (node.parent) {\n                    throw new Error(node + \" already belongs to another parent: \" + node.parent + \".\");\n                }\n                if (node.layerManager) {\n                    throw new Error(node + \" already belongs to a scene: \" + node.layerManager + \".\");\n                }\n                if (this.childSet[node.id]) {\n                    // Cast to `any` to avoid `Property 'name' does not exist on type 'Function'`.\n                    throw new Error(\"Duplicate \" + node.constructor.name + \" node: \" + node);\n                }\n                this._children.push(node);\n                this.childSet[node.id] = true;\n                node._parent = this;\n                node._setLayerManager(this.layerManager);\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (nodes_1_1 && !nodes_1_1.done && (_a = nodes_1.return)) _a.call(nodes_1);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        this.dirtyZIndex = true;\n        this.markDirty(this, RedrawType.MAJOR);\n    };\n    Node.prototype.appendChild = function (node) {\n        this.append(node);\n        return node;\n    };\n    Node.prototype.removeChild = function (node) {\n        if (node.parent === this) {\n            var i = this.children.indexOf(node);\n            if (i >= 0) {\n                this._children.splice(i, 1);\n                delete this.childSet[node.id];\n                node._parent = undefined;\n                node._setLayerManager();\n                this.dirtyZIndex = true;\n                this.markDirty(node, RedrawType.MAJOR);\n                return node;\n            }\n        }\n        throw new Error(\"The node to be removed is not a child of this node.\");\n    };\n    /**\n     * Inserts the node `node` before the existing child node `nextNode`.\n     * If `nextNode` is null, insert `node` at the end of the list of children.\n     * If the `node` belongs to another parent, it is first removed.\n     * Returns the `node`.\n     * @param node\n     * @param nextNode\n     */\n    Node.prototype.insertBefore = function (node, nextNode) {\n        var parent = node.parent;\n        if (node.parent) {\n            node.parent.removeChild(node);\n        }\n        if (nextNode && nextNode.parent === this) {\n            var i = this.children.indexOf(nextNode);\n            if (i >= 0) {\n                this._children.splice(i, 0, node);\n                this.childSet[node.id] = true;\n                node._parent = this;\n                node._setLayerManager(this.layerManager);\n            }\n            else {\n                throw new Error(nextNode + \" has \" + parent + \" as the parent, \" + \"but is not in its list of children.\");\n            }\n            this.dirtyZIndex = true;\n            this.markDirty(node, RedrawType.MAJOR);\n        }\n        else {\n            this.append(node);\n        }\n        return node;\n    };\n    Node.prototype.calculateCumulativeMatrix = function () {\n        this.computeTransformMatrix();\n        var matrix = Matrix.flyweight(this.matrix);\n        var parent = this.parent;\n        while (parent) {\n            parent.computeTransformMatrix();\n            matrix.preMultiplySelf(parent.matrix);\n            parent = parent.parent;\n        }\n        return matrix;\n    };\n    Node.prototype.transformPoint = function (x, y) {\n        var matrix = this.calculateCumulativeMatrix();\n        return matrix.invertSelf().transformPoint(x, y);\n    };\n    Node.prototype.inverseTransformPoint = function (x, y) {\n        var matrix = this.calculateCumulativeMatrix();\n        return matrix.transformPoint(x, y);\n    };\n    Node.prototype.transformBBox = function (bbox) {\n        var matrix = this.calculateCumulativeMatrix();\n        return matrix.invertSelf().transformBBox(bbox);\n    };\n    Node.prototype.inverseTransformBBox = function (bbox) {\n        var matrix = this.calculateCumulativeMatrix();\n        return matrix.transformBBox(bbox);\n    };\n    Node.prototype.markDirtyTransform = function () {\n        this._dirtyTransform = true;\n        this.markDirty(this, RedrawType.MAJOR);\n    };\n    Node.prototype.containsPoint = function (_x, _y) {\n        return false;\n    };\n    /**\n     * Hit testing method.\n     * Recursively checks if the given point is inside this node or any of its children.\n     * Returns the first matching node or `undefined`.\n     * Nodes that render later (show on top) are hit tested first.\n     */\n    Node.prototype.pickNode = function (x, y) {\n        var _a;\n        if (!this.visible || this.pointerEvents === PointerEvents.None || !this.containsPoint(x, y)) {\n            return;\n        }\n        var children = this.children;\n        if (children.length > 1000) {\n            // Try to optimise which children to interrogate; BBox calculation is an approximation\n            // for more complex shapes, so discarding items based on this will save a lot of\n            // processing when the point is nowhere near the child.\n            for (var i = children.length - 1; i >= 0; i--) {\n                var child = children[i];\n                var containsPoint = (_a = child.computeTransformedBBox()) === null || _a === void 0 ? void 0 : _a.containsPoint(x, y);\n                var hit = containsPoint ? child.pickNode(x, y) : undefined;\n                if (hit) {\n                    return hit;\n                }\n            }\n        }\n        else if (children.length) {\n            // Nodes added later should be hit-tested first,\n            // as they are rendered on top of the previously added nodes.\n            for (var i = children.length - 1; i >= 0; i--) {\n                var hit = children[i].pickNode(x, y);\n                if (hit) {\n                    return hit;\n                }\n            }\n        }\n        else if (!this.isContainerNode) {\n            // a leaf node, but not a container leaf\n            return this;\n        }\n    };\n    Node.prototype.findNodes = function (predicate) {\n        var e_3, _a;\n        var result = predicate(this) ? [this] : [];\n        try {\n            for (var _b = __values$A(this.children), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var child = _c.value;\n                var childResult = child.findNodes(predicate);\n                if (childResult) {\n                    result.push.apply(result, __spreadArray$s([], __read$I(childResult)));\n                }\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n        return result;\n    };\n    Node.prototype.computeBBox = function () {\n        return;\n    };\n    Node.prototype.computeTransformedBBox = function () {\n        var bbox = this.computeBBox();\n        if (!bbox) {\n            return undefined;\n        }\n        this.computeTransformMatrix();\n        var matrix = Matrix.flyweight(this.matrix);\n        var parent = this.parent;\n        while (parent) {\n            parent.computeTransformMatrix();\n            matrix.preMultiplySelf(parent.matrix);\n            parent = parent.parent;\n        }\n        matrix.transformBBox(bbox, bbox);\n        return bbox;\n    };\n    Node.prototype.computeTransformMatrix = function () {\n        if (!this._dirtyTransform) {\n            return;\n        }\n        var _a = this, matrix = _a.matrix, scalingX = _a.scalingX, scalingY = _a.scalingY, rotation = _a.rotation, translationX = _a.translationX, translationY = _a.translationY, scalingCenterX = _a.scalingCenterX, scalingCenterY = _a.scalingCenterY, rotationCenterX = _a.rotationCenterX, rotationCenterY = _a.rotationCenterY;\n        Matrix.updateTransformMatrix(matrix, scalingX, scalingY, rotation, translationX, translationY, {\n            scalingCenterX: scalingCenterX,\n            scalingCenterY: scalingCenterY,\n            rotationCenterX: rotationCenterX,\n            rotationCenterY: rotationCenterY,\n        });\n        matrix.inverseTo(this.inverseMatrix);\n        this._dirtyTransform = false;\n    };\n    Node.prototype.render = function (renderCtx) {\n        var stats = renderCtx.stats;\n        this._dirty = RedrawType.NONE;\n        if (stats)\n            stats.nodesRendered++;\n    };\n    Node.prototype.clearBBox = function (ctx) {\n        var bbox = this.computeBBox();\n        if (bbox == null) {\n            return;\n        }\n        var x = bbox.x, y = bbox.y, width = bbox.width, height = bbox.height;\n        var topLeft = this.transformPoint(x, y);\n        var bottomRight = this.transformPoint(x + width, y + height);\n        ctx.clearRect(topLeft.x, topLeft.y, bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);\n    };\n    Node.prototype.markDirty = function (_source, type, parentType) {\n        if (type === void 0) { type = RedrawType.TRIVIAL; }\n        if (parentType === void 0) { parentType = type; }\n        if (this._dirty > type) {\n            return;\n        }\n        if (this._dirty === type && type === parentType) {\n            return;\n        }\n        this._dirty = type;\n        if (this.parent) {\n            this.parent.markDirty(this, parentType);\n        }\n        else if (this.layerManager) {\n            this.layerManager.markDirty();\n        }\n    };\n    Object.defineProperty(Node.prototype, \"dirty\", {\n        get: function () {\n            return this._dirty;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Node.prototype.markClean = function (opts) {\n        var e_4, _a;\n        var _b = opts !== null && opts !== void 0 ? opts : {}, _c = _b.force, force = _c === void 0 ? false : _c, _d = _b.recursive, recursive = _d === void 0 ? true : _d;\n        if (this._dirty === RedrawType.NONE && !force) {\n            return;\n        }\n        this._dirty = RedrawType.NONE;\n        if (recursive) {\n            try {\n                for (var _e = __values$A(this.children), _f = _e.next(); !_f.done; _f = _e.next()) {\n                    var child = _f.value;\n                    child.markClean();\n                }\n            }\n            catch (e_4_1) { e_4 = { error: e_4_1 }; }\n            finally {\n                try {\n                    if (_f && !_f.done && (_a = _e.return)) _a.call(_e);\n                }\n                finally { if (e_4) throw e_4.error; }\n            }\n        }\n    };\n    Node.prototype.visibilityChanged = function () {\n        // Override point for sub-classes to react to visibility changes.\n    };\n    Object.defineProperty(Node.prototype, \"nodeCount\", {\n        get: function () {\n            var e_5, _a;\n            var count = 1;\n            var dirtyCount = this._dirty >= RedrawType.NONE || this._dirtyTransform ? 1 : 0;\n            var visibleCount = this.visible ? 1 : 0;\n            try {\n                for (var _b = __values$A(this._children), _c = _b.next(); !_c.done; _c = _b.next()) {\n                    var child = _c.value;\n                    var _d = child.nodeCount, childCount = _d.count, childVisibleCount = _d.visibleCount, childDirtyCount = _d.dirtyCount;\n                    count += childCount;\n                    visibleCount += childVisibleCount;\n                    dirtyCount += childDirtyCount;\n                }\n            }\n            catch (e_5_1) { e_5 = { error: e_5_1 }; }\n            finally {\n                try {\n                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n                }\n                finally { if (e_5) throw e_5.error; }\n            }\n            return { count: count, visibleCount: visibleCount, dirtyCount: dirtyCount };\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Node.prototype.zIndexChanged = function () {\n        // Override point for sub-classes.\n    };\n    Node._nextSerialNumber = 0;\n    __decorate$1X([\n        SceneChangeDetection({ type: 'transform' })\n    ], Node.prototype, \"scalingX\", void 0);\n    __decorate$1X([\n        SceneChangeDetection({ type: 'transform' })\n    ], Node.prototype, \"scalingY\", void 0);\n    __decorate$1X([\n        SceneChangeDetection({ type: 'transform' })\n    ], Node.prototype, \"scalingCenterX\", void 0);\n    __decorate$1X([\n        SceneChangeDetection({ type: 'transform' })\n    ], Node.prototype, \"scalingCenterY\", void 0);\n    __decorate$1X([\n        SceneChangeDetection({ type: 'transform' })\n    ], Node.prototype, \"rotationCenterX\", void 0);\n    __decorate$1X([\n        SceneChangeDetection({ type: 'transform' })\n    ], Node.prototype, \"rotationCenterY\", void 0);\n    __decorate$1X([\n        SceneChangeDetection({ type: 'transform' })\n    ], Node.prototype, \"rotation\", void 0);\n    __decorate$1X([\n        SceneChangeDetection({ type: 'transform' })\n    ], Node.prototype, \"translationX\", void 0);\n    __decorate$1X([\n        SceneChangeDetection({ type: 'transform' })\n    ], Node.prototype, \"translationY\", void 0);\n    __decorate$1X([\n        SceneChangeDetection({ redraw: RedrawType.MAJOR, changeCb: function (o) { return o.visibilityChanged(); } })\n    ], Node.prototype, \"visible\", void 0);\n    __decorate$1X([\n        SceneChangeDetection({\n            redraw: RedrawType.TRIVIAL,\n            changeCb: zIndexChangedCallback,\n        })\n    ], Node.prototype, \"zIndex\", void 0);\n    __decorate$1X([\n        SceneChangeDetection({\n            redraw: RedrawType.TRIVIAL,\n            changeCb: zIndexChangedCallback,\n        })\n    ], Node.prototype, \"zIndexSubOrder\", void 0);\n    return Node;\n}(ChangeDetectable));\n\nfunction ascendingStringNumberUndefined(a, b) {\n    var diff = 0;\n    if (typeof a === 'number' && typeof b === 'number') {\n        diff = a - b;\n    }\n    else if (typeof a === 'string' && typeof b === 'string') {\n        diff = a.localeCompare(b);\n    }\n    else if (a == null && b == null) ;\n    else if (a == null) {\n        diff = -1;\n    }\n    else if (b == null) {\n        diff = 1;\n    }\n    else {\n        diff = String(a).localeCompare(String(b));\n    }\n    return diff;\n}\nfunction compoundAscending(a, b, comparator) {\n    var toLiteral = function (v) {\n        if (typeof v === 'function') {\n            return v();\n        }\n        return v;\n    };\n    for (var idx in a) {\n        var diff = comparator(toLiteral(a[idx]), toLiteral(b[idx]));\n        if (diff !== 0) {\n            return diff;\n        }\n    }\n    return 0;\n}\n\nvar doOnceFlags$1 = {};\n/**\n * If the key was passed before, then doesn't execute the func\n */\nfunction doOnce$1(func, key) {\n    if (doOnceFlags$1[key]) {\n        return;\n    }\n    func();\n    doOnceFlags$1[key] = true;\n}\n\nvar __read$H = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$r = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar Logger = {\n    debug: function () {\n        var logContent = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            logContent[_i] = arguments[_i];\n        }\n        console.log.apply(console, __spreadArray$r([], __read$H(logContent)));\n    },\n    warn: function (message) {\n        var logContent = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            logContent[_i - 1] = arguments[_i];\n        }\n        console.warn.apply(console, __spreadArray$r([\"AG Charts - \" + message], __read$H(logContent)));\n    },\n    error: function (message) {\n        var logContent = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            logContent[_i - 1] = arguments[_i];\n        }\n        if (typeof message === 'object') {\n            console.error.apply(console, __spreadArray$r([\"AG Charts error\", message], __read$H(logContent)));\n        }\n        else {\n            console.error.apply(console, __spreadArray$r([\"AG Charts - \" + message], __read$H(logContent)));\n        }\n    },\n    warnOnce: function (message) {\n        var logContent = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            logContent[_i - 1] = arguments[_i];\n        }\n        doOnce$1(function () { return Logger.warn.apply(Logger, __spreadArray$r([message], __read$H(logContent))); }, \"Logger.warn: \" + message);\n    },\n    errorOnce: function (message) {\n        var logContent = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            logContent[_i - 1] = arguments[_i];\n        }\n        doOnce$1(function () { return Logger.error.apply(Logger, __spreadArray$r([message], __read$H(logContent))); }, \"Logger.warn: \" + message);\n    },\n};\n\nvar __extends$11 = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign$u = (undefined && undefined.__assign) || function () {\n    __assign$u = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$u.apply(this, arguments);\n};\nvar __decorate$1W = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __values$z = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read$G = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$q = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar Group = /** @class */ (function (_super) {\n    __extends$11(Group, _super);\n    function Group(opts) {\n        var _a;\n        var _this = _super.call(this) || this;\n        _this.opts = opts;\n        _this.opacity = 1;\n        _this.lastBBox = undefined;\n        var _b = opts !== null && opts !== void 0 ? opts : {}, zIndex = _b.zIndex, zIndexSubOrder = _b.zIndexSubOrder;\n        _this.isContainerNode = true;\n        if (zIndex !== undefined) {\n            _this.zIndex = zIndex;\n        }\n        if (zIndexSubOrder !== undefined) {\n            _this.zIndexSubOrder = zIndexSubOrder;\n        }\n        _this.name = (_a = _this.opts) === null || _a === void 0 ? void 0 : _a.name;\n        return _this;\n    }\n    Group.prototype.zIndexChanged = function () {\n        var _a;\n        if (this.layer) {\n            (_a = this._layerManager) === null || _a === void 0 ? void 0 : _a.moveLayer(this.layer, this.zIndex, this.zIndexSubOrder);\n        }\n    };\n    Group.prototype.isLayer = function () {\n        return this.layer != null;\n    };\n    Group.prototype._setLayerManager = function (scene) {\n        var _this = this;\n        var _a, _b;\n        if (this._layerManager && this.layer) {\n            this._layerManager.removeLayer(this.layer);\n            this.layer = undefined;\n        }\n        if (this.layer) {\n            throw new Error('AG Charts - unable to deregister scene rendering layer!');\n        }\n        _super.prototype._setLayerManager.call(this, scene);\n        if (scene && ((_a = this.opts) === null || _a === void 0 ? void 0 : _a.layer)) {\n            var _c = (_b = this.opts) !== null && _b !== void 0 ? _b : {}, zIndex = _c.zIndex, zIndexSubOrder = _c.zIndexSubOrder, name_1 = _c.name;\n            var getComputedOpacity = function () { return _this.getComputedOpacity(); };\n            var getVisibility = function () { return _this.getVisibility(); };\n            this.layer = scene.addLayer({ zIndex: zIndex, zIndexSubOrder: zIndexSubOrder, name: name_1, getComputedOpacity: getComputedOpacity, getVisibility: getVisibility });\n        }\n    };\n    Group.prototype.getComputedOpacity = function () {\n        var opacity = 1;\n        var node = this;\n        do {\n            if (node instanceof Group) {\n                opacity *= node.opacity;\n            }\n        } while ((node = node.parent));\n        return opacity;\n    };\n    Group.prototype.getVisibility = function () {\n        var node = this;\n        var visible = this.visible;\n        while ((node = node.parent)) {\n            if (node.visible) {\n                continue;\n            }\n            visible = node.visible;\n        }\n        return visible;\n    };\n    Group.prototype.visibilityChanged = function () {\n        if (this.layer) {\n            this.layer.enabled = this.visible;\n        }\n    };\n    Group.prototype.markDirty = function (source, type) {\n        if (type === void 0) { type = RedrawType.TRIVIAL; }\n        var parentType = type <= RedrawType.MINOR ? RedrawType.TRIVIAL : type;\n        _super.prototype.markDirty.call(this, source, type, parentType);\n    };\n    // We consider a group to be boundless, thus any point belongs to it.\n    Group.prototype.containsPoint = function (_x, _y) {\n        return true;\n    };\n    Group.prototype.computeBBox = function () {\n        this.computeTransformMatrix();\n        return Group.computeBBox(this.children);\n    };\n    Group.prototype.computeTransformedBBox = function () {\n        return this.computeBBox();\n    };\n    Group.prototype.render = function (renderCtx) {\n        var e_1, _a;\n        var _b, _c;\n        var _d = this.opts, _e = _d === void 0 ? {} : _d, _f = _e.name, name = _f === void 0 ? undefined : _f;\n        var _g = this._debug, _h = _g === void 0 ? {} : _g, _j = _h.consoleLog, consoleLog = _j === void 0 ? false : _j;\n        var _k = this, dirty = _k.dirty, dirtyZIndex = _k.dirtyZIndex, layer = _k.layer, children = _k.children, clipRect = _k.clipRect;\n        var ctx = renderCtx.ctx, forceRender = renderCtx.forceRender, clipBBox = renderCtx.clipBBox;\n        var resized = renderCtx.resized, stats = renderCtx.stats;\n        var canvasCtxTransform = ctx.getTransform();\n        var isDirty = dirty >= RedrawType.MINOR || dirtyZIndex || resized;\n        var isChildDirty = isDirty || children.some(function (n) { return n.dirty >= RedrawType.TRIVIAL; });\n        if (name && consoleLog) {\n            Logger.debug({ name: name, group: this, isDirty: isDirty, isChildDirty: isChildDirty, renderCtx: renderCtx, forceRender: forceRender });\n        }\n        if (layer) {\n            // If bounding-box of a layer changes, force re-render.\n            var currentBBox = this.computeBBox();\n            if (this.lastBBox === undefined || !this.lastBBox.equals(currentBBox)) {\n                forceRender = true;\n                this.lastBBox = currentBBox;\n            }\n            else if (!currentBBox.isInfinite()) {\n                // bbox for path2D is currently (Infinity) not calculated\n                // If it's not a path2D, turn off forceRender\n                // By default there is no need to force redraw a group which has it's own canvas layer\n                // as the layer is independent of any other layer\n                forceRender = false;\n            }\n        }\n        if (!isDirty && !isChildDirty && !forceRender) {\n            if (name && consoleLog && stats) {\n                var counts = this.nodeCount;\n                Logger.debug({ name: name, result: 'skipping', renderCtx: renderCtx, counts: counts, group: this });\n            }\n            if (layer && stats) {\n                stats.layersSkipped++;\n                stats.nodesSkipped += this.nodeCount.count;\n            }\n            this.markClean({ recursive: false });\n            // Nothing to do.\n            return;\n        }\n        var groupVisible = this.visible;\n        if (layer) {\n            // Switch context to the canvas layer we use for this group.\n            ctx = layer.context;\n            ctx.save();\n            ctx.resetTransform();\n            forceRender = true;\n            layer.clear();\n            if (clipBBox) {\n                // clipBBox is in the canvas coordinate space, when we hit a layer we apply the new clipping at which point there are no transforms in play\n                var width = clipBBox.width, height = clipBBox.height, x = clipBBox.x, y = clipBBox.y;\n                if (consoleLog) {\n                    Logger.debug({ name: name, clipBBox: clipBBox, ctxTransform: ctx.getTransform(), renderCtx: renderCtx, group: this });\n                }\n                this.clipCtx(ctx, x, y, width, height);\n            }\n            ctx.setTransform(canvasCtxTransform);\n        }\n        else {\n            // Only apply opacity if this isn't a distinct layer - opacity will be applied\n            // at composition time.\n            ctx.globalAlpha *= this.opacity;\n        }\n        // A group can have `scaling`, `rotation`, `translation` properties\n        // that are applied to the canvas context before children are rendered,\n        // so all children can be transformed at once.\n        this.computeTransformMatrix();\n        this.matrix.toContext(ctx);\n        if (clipRect) {\n            // clipRect is in the group's coordinate space\n            var x = clipRect.x, y = clipRect.y, width = clipRect.width, height = clipRect.height;\n            ctx.save();\n            if (consoleLog) {\n                Logger.debug({ name: name, clipRect: clipRect, ctxTransform: ctx.getTransform(), renderCtx: renderCtx, group: this });\n            }\n            this.clipCtx(ctx, x, y, width, height);\n            // clipBBox is in the canvas coordinate space, when we hit a layer we apply the new clipping at which point there are no transforms in play\n            clipBBox = this.matrix.inverse().transformBBox(clipRect);\n        }\n        if (dirtyZIndex) {\n            this.sortChildren();\n            forceRender = true;\n        }\n        // Reduce churn if renderCtx is identical.\n        var renderContextChanged = forceRender !== renderCtx.forceRender || clipBBox !== renderCtx.clipBBox || ctx !== renderCtx.ctx;\n        var childRenderContext = renderContextChanged ? __assign$u(__assign$u({}, renderCtx), { ctx: ctx, forceRender: forceRender, clipBBox: clipBBox }) : renderCtx;\n        // Render visible children.\n        var skipped = 0;\n        try {\n            for (var children_1 = __values$z(children), children_1_1 = children_1.next(); !children_1_1.done; children_1_1 = children_1.next()) {\n                var child = children_1_1.value;\n                if (!child.visible || !groupVisible) {\n                    // Skip invisible children, but make sure their dirty flag is reset.\n                    child.markClean();\n                    if (stats)\n                        skipped += child.nodeCount.count;\n                    continue;\n                }\n                if (!forceRender && child.dirty === RedrawType.NONE) {\n                    // Skip children that don't need to be redrawn.\n                    if (stats)\n                        skipped += child.nodeCount.count;\n                    continue;\n                }\n                // Render marks this node (and children) as clean - no need to explicitly markClean().\n                ctx.save();\n                child.render(childRenderContext);\n                ctx.restore();\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (children_1_1 && !children_1_1.done && (_a = children_1.return)) _a.call(children_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        if (stats)\n            stats.nodesSkipped += skipped;\n        // Render marks this node as clean - no need to explicitly markClean().\n        _super.prototype.render.call(this, renderCtx);\n        if (clipRect) {\n            ctx.restore();\n        }\n        if (layer) {\n            if (stats)\n                stats.layersRendered++;\n            ctx.restore();\n            layer.snapshot();\n            // Check for save/restore depth of zero!\n            (_c = (_b = layer.context).verifyDepthZero) === null || _c === void 0 ? void 0 : _c.call(_b);\n        }\n        if (name && consoleLog && stats) {\n            var counts = this.nodeCount;\n            Logger.debug({ name: name, result: 'rendered', skipped: skipped, renderCtx: renderCtx, counts: counts, group: this });\n        }\n    };\n    Group.prototype.sortChildren = function () {\n        this.dirtyZIndex = false;\n        this.children.sort(function (a, b) {\n            var _a, _b;\n            return compoundAscending(__spreadArray$q(__spreadArray$q([a.zIndex], __read$G(((_a = a.zIndexSubOrder) !== null && _a !== void 0 ? _a : [undefined, undefined]))), [a.serialNumber]), __spreadArray$q(__spreadArray$q([b.zIndex], __read$G(((_b = b.zIndexSubOrder) !== null && _b !== void 0 ? _b : [undefined, undefined]))), [b.serialNumber]), ascendingStringNumberUndefined);\n        });\n    };\n    Group.prototype.clipCtx = function (ctx, x, y, width, height) {\n        ctx.beginPath();\n        ctx.moveTo(x, y);\n        ctx.lineTo(x + width, y);\n        ctx.lineTo(x + width, y + height);\n        ctx.lineTo(x, y + height);\n        ctx.closePath();\n        ctx.clip();\n    };\n    Group.computeBBox = function (nodes) {\n        var left = Infinity;\n        var right = -Infinity;\n        var top = Infinity;\n        var bottom = -Infinity;\n        nodes.forEach(function (n) {\n            if (!n.visible) {\n                return;\n            }\n            var bbox = n.computeTransformedBBox();\n            if (!bbox) {\n                return;\n            }\n            var x = bbox.x;\n            var y = bbox.y;\n            if (x < left) {\n                left = x;\n            }\n            if (y < top) {\n                top = y;\n            }\n            if (x + bbox.width > right) {\n                right = x + bbox.width;\n            }\n            if (y + bbox.height > bottom) {\n                bottom = y + bbox.height;\n            }\n        });\n        return new BBox(left, top, right - left, bottom - top);\n    };\n    /**\n     * Transforms bbox given in the canvas coordinate space to bbox in this group's coordinate space and\n     * sets this group's clipRect to the transformed bbox.\n     * @param bbox clipRect bbox in the canvas coordinate space.\n     */\n    Group.prototype.setClipRectInGroupCoordinateSpace = function (bbox) {\n        this.clipRect = bbox ? this.transformBBox(bbox) : undefined;\n    };\n    Group.className = 'Group';\n    __decorate$1W([\n        SceneChangeDetection({\n            convertor: function (v) { return Math.min(1, Math.max(0, v)); },\n        })\n    ], Group.prototype, \"opacity\", void 0);\n    return Group;\n}(Node));\n\n/**\n * Wraps a native OffscreenCanvas and overrides its OffscreenCanvasRenderingContext2D to\n * provide resolution independent rendering based on `window.devicePixelRatio`.\n */\nvar HdpiOffscreenCanvas = /** @class */ (function () {\n    // The width/height attributes of the Canvas element default to\n    // 300/150 according to w3.org.\n    function HdpiOffscreenCanvas(_a) {\n        var _b = _a.width, width = _b === void 0 ? 600 : _b, _c = _a.height, height = _c === void 0 ? 300 : _c, _d = _a.overrideDevicePixelRatio, overrideDevicePixelRatio = _d === void 0 ? undefined : _d;\n        this.enabled = true;\n        // `NaN` is deliberate here, so that overrides are always applied\n        // and the `resetTransform` inside the `resize` method works in IE11.\n        this._pixelRatio = NaN;\n        this._width = 0;\n        this._height = 0;\n        this.canvas = new OffscreenCanvas(width, height);\n        this.context = this.canvas.getContext('2d');\n        this.imageSource = this.canvas.transferToImageBitmap();\n        this.setPixelRatio(overrideDevicePixelRatio);\n        this.resize(width, height);\n    }\n    HdpiOffscreenCanvas.isSupported = function () {\n        return window['OffscreenCanvas'] != null;\n    };\n    HdpiOffscreenCanvas.prototype.snapshot = function () {\n        this.imageSource.close();\n        this.imageSource = this.canvas.transferToImageBitmap();\n    };\n    HdpiOffscreenCanvas.prototype.destroy = function () {\n        this.imageSource.close();\n        // Workaround memory allocation quirks in iOS Safari by resizing to 0x0 and clearing.\n        // See https://bugs.webkit.org/show_bug.cgi?id=195325.\n        this.canvas.width = 0;\n        this.canvas.height = 0;\n        this.context.clearRect(0, 0, 0, 0);\n    };\n    HdpiOffscreenCanvas.prototype.clear = function () {\n        this.context.save();\n        this.context.resetTransform();\n        this.context.clearRect(0, 0, this.width, this.height);\n        this.context.restore();\n    };\n    Object.defineProperty(HdpiOffscreenCanvas.prototype, \"pixelRatio\", {\n        get: function () {\n            return this._pixelRatio;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Changes the pixel ratio of the Canvas element to the given value,\n     * or uses the window.devicePixelRatio (default), then resizes the Canvas\n     * element accordingly (default).\n     */\n    HdpiOffscreenCanvas.prototype.setPixelRatio = function (ratio) {\n        var pixelRatio = ratio !== null && ratio !== void 0 ? ratio : window.devicePixelRatio;\n        if (!isDesktop()) {\n            // Mobile browsers have stricter memory limits, we reduce rendering resolution to\n            // improve stability on mobile browsers. iOS Safari 12->16 are pain-points since they\n            // have memory allocation quirks - see https://bugs.webkit.org/show_bug.cgi?id=195325.\n            pixelRatio = 1;\n        }\n        HdpiCanvas.overrideScale(this.context, pixelRatio);\n        this._pixelRatio = pixelRatio;\n    };\n    Object.defineProperty(HdpiOffscreenCanvas.prototype, \"width\", {\n        get: function () {\n            return this._width;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(HdpiOffscreenCanvas.prototype, \"height\", {\n        get: function () {\n            return this._height;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    HdpiOffscreenCanvas.prototype.resize = function (width, height) {\n        if (!(width > 0 && height > 0)) {\n            return;\n        }\n        var _a = this, canvas = _a.canvas, context = _a.context, pixelRatio = _a.pixelRatio;\n        canvas.width = Math.round(width * pixelRatio);\n        canvas.height = Math.round(height * pixelRatio);\n        context.resetTransform();\n        this._width = width;\n        this._height = height;\n    };\n    return HdpiOffscreenCanvas;\n}());\n\nfunction windowValue(name) {\n    /**\n     * Redeclaration of window that is safe for use with Gatsby server-side (webpack) compilation.\n     */\n    var WINDOW = typeof window !== 'undefined'\n        ? window\n        : // typeof global !== 'undefined' ? (global as any) :\n            undefined;\n    return WINDOW === null || WINDOW === void 0 ? void 0 : WINDOW[name];\n}\n\nvar __assign$t = (undefined && undefined.__assign) || function () {\n    __assign$t = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$t.apply(this, arguments);\n};\nvar __awaiter$f = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator$f = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __read$F = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$p = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar __values$y = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nfunction buildSceneNodeHighlight() {\n    var _a;\n    var config = (_a = windowValue('agChartsSceneDebug')) !== null && _a !== void 0 ? _a : [];\n    if (typeof config === 'string') {\n        config = [config];\n    }\n    var result = [];\n    config.forEach(function (name) {\n        if (name === 'layout') {\n            result.push('seriesRoot', 'legend', 'root', /.*Axis-\\d+-axis.*/);\n        }\n        else {\n            result.push(name);\n        }\n    });\n    return result;\n}\nvar Scene = /** @class */ (function () {\n    function Scene(opts) {\n        var _a, _b, _c;\n        this.id = createId$1(this);\n        this.layers = [];\n        this._nextZIndex = 0;\n        this._nextLayerId = 0;\n        this._dirty = false;\n        this._root = null;\n        this.debug = {\n            dirtyTree: false,\n            stats: false,\n            renderBoundingBoxes: false,\n            consoleLog: false,\n            sceneNodeHighlight: [],\n        };\n        var _d = opts.document, document = _d === void 0 ? window.document : _d, _e = opts.mode, mode = _e === void 0 ? (_a = windowValue('agChartsSceneRenderModel')) !== null && _a !== void 0 ? _a : 'adv-composite' : _e, width = opts.width, height = opts.height, _f = opts.overrideDevicePixelRatio, overrideDevicePixelRatio = _f === void 0 ? undefined : _f;\n        this.overrideDevicePixelRatio = overrideDevicePixelRatio;\n        this.opts = { document: document, mode: mode };\n        this.debug.consoleLog = windowValue('agChartsDebug') === true;\n        this.debug.stats = (_b = windowValue('agChartsSceneStats')) !== null && _b !== void 0 ? _b : false;\n        this.debug.dirtyTree = (_c = windowValue('agChartsSceneDirtyTree')) !== null && _c !== void 0 ? _c : false;\n        this.debug.sceneNodeHighlight = buildSceneNodeHighlight();\n        this.canvas = new HdpiCanvas({ document: document, width: width, height: height, overrideDevicePixelRatio: overrideDevicePixelRatio });\n    }\n    Object.defineProperty(Scene.prototype, \"container\", {\n        get: function () {\n            return this.canvas.container;\n        },\n        set: function (value) {\n            this.canvas.container = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Scene.prototype.download = function (fileName, fileFormat) {\n        this.canvas.download(fileName, fileFormat);\n    };\n    Scene.prototype.getDataURL = function (type) {\n        return this.canvas.getDataURL(type);\n    };\n    Object.defineProperty(Scene.prototype, \"width\", {\n        get: function () {\n            return this.pendingSize ? this.pendingSize[0] : this.canvas.width;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Scene.prototype, \"height\", {\n        get: function () {\n            return this.pendingSize ? this.pendingSize[1] : this.canvas.height;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Scene.prototype.resize = function (width, height) {\n        width = Math.round(width);\n        height = Math.round(height);\n        // HdpiCanvas doesn't allow width/height <= 0.\n        var lessThanZero = width <= 0 || height <= 0;\n        var nan = isNaN(width) || isNaN(height);\n        var unchanged = width === this.width && height === this.height;\n        if (unchanged || nan || lessThanZero) {\n            return false;\n        }\n        this.pendingSize = [width, height];\n        this.markDirty();\n        return true;\n    };\n    Scene.prototype.addLayer = function (opts) {\n        var _a;\n        var mode = this.opts.mode;\n        var layeredModes = ['composite', 'dom-composite', 'adv-composite'];\n        if (!layeredModes.includes(mode)) {\n            return undefined;\n        }\n        var _b = opts.zIndex, zIndex = _b === void 0 ? this._nextZIndex++ : _b, name = opts.name, zIndexSubOrder = opts.zIndexSubOrder, getComputedOpacity = opts.getComputedOpacity, getVisibility = opts.getVisibility;\n        var _c = this, width = _c.width, height = _c.height, overrideDevicePixelRatio = _c.overrideDevicePixelRatio;\n        var domLayer = mode === 'dom-composite';\n        var advLayer = mode === 'adv-composite';\n        var canvas = !advLayer || !HdpiOffscreenCanvas.isSupported()\n            ? new HdpiCanvas({\n                document: this.opts.document,\n                width: width,\n                height: height,\n                domLayer: domLayer,\n                zIndex: zIndex,\n                name: name,\n                overrideDevicePixelRatio: overrideDevicePixelRatio,\n            })\n            : new HdpiOffscreenCanvas({\n                width: width,\n                height: height,\n                overrideDevicePixelRatio: overrideDevicePixelRatio,\n            });\n        var newLayer = {\n            id: this._nextLayerId++,\n            name: name,\n            zIndex: zIndex,\n            zIndexSubOrder: zIndexSubOrder,\n            canvas: canvas,\n            getComputedOpacity: getComputedOpacity,\n            getVisibility: getVisibility,\n        };\n        if (zIndex >= this._nextZIndex) {\n            this._nextZIndex = zIndex + 1;\n        }\n        this.layers.push(newLayer);\n        this.sortLayers();\n        if (domLayer) {\n            var domCanvases = this.layers\n                .map(function (v) { return v.canvas; })\n                .filter(function (v) { return v instanceof HdpiCanvas; });\n            var newLayerIndex = domCanvases.findIndex(function (v) { return v === canvas; });\n            var lastLayer = (_a = domCanvases[newLayerIndex - 1]) !== null && _a !== void 0 ? _a : this.canvas;\n            lastLayer.element.insertAdjacentElement('afterend', canvas.element);\n        }\n        if (this.debug.consoleLog) {\n            Logger.debug({ layers: this.layers });\n        }\n        return newLayer.canvas;\n    };\n    Scene.prototype.removeLayer = function (canvas) {\n        var index = this.layers.findIndex(function (l) { return l.canvas === canvas; });\n        if (index >= 0) {\n            this.layers.splice(index, 1);\n            canvas.destroy();\n            this.markDirty();\n            if (this.debug.consoleLog) {\n                Logger.debug({ layers: this.layers });\n            }\n        }\n    };\n    Scene.prototype.moveLayer = function (canvas, newZIndex, newZIndexSubOrder) {\n        var layer = this.layers.find(function (l) { return l.canvas === canvas; });\n        if (layer) {\n            layer.zIndex = newZIndex;\n            layer.zIndexSubOrder = newZIndexSubOrder;\n            this.sortLayers();\n            this.markDirty();\n            if (this.debug.consoleLog) {\n                Logger.debug({ layers: this.layers });\n            }\n        }\n    };\n    Scene.prototype.sortLayers = function () {\n        this.layers.sort(function (a, b) {\n            var _a, _b;\n            return compoundAscending(__spreadArray$p(__spreadArray$p([a.zIndex], __read$F(((_a = a.zIndexSubOrder) !== null && _a !== void 0 ? _a : [undefined, undefined]))), [a.id]), __spreadArray$p(__spreadArray$p([b.zIndex], __read$F(((_b = b.zIndexSubOrder) !== null && _b !== void 0 ? _b : [undefined, undefined]))), [b.id]), ascendingStringNumberUndefined);\n        });\n    };\n    Scene.prototype.markDirty = function () {\n        this._dirty = true;\n    };\n    Object.defineProperty(Scene.prototype, \"dirty\", {\n        get: function () {\n            return this._dirty;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Scene.prototype, \"root\", {\n        get: function () {\n            return this._root;\n        },\n        set: function (node) {\n            if (node === this._root) {\n                return;\n            }\n            if (this._root) {\n                this._root._setLayerManager();\n            }\n            this._root = node;\n            if (node) {\n                // If `node` is the root node of another scene ...\n                if (node.parent === null && node.layerManager && node.layerManager !== this) {\n                    node.layerManager.root = null;\n                }\n                node._setLayerManager(this);\n            }\n            this.markDirty();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /** Alternative to destroy() that preserves re-usable resources. */\n    Scene.prototype.strip = function () {\n        var e_1, _a;\n        var layers = this.layers;\n        try {\n            for (var layers_1 = __values$y(layers), layers_1_1 = layers_1.next(); !layers_1_1.done; layers_1_1 = layers_1.next()) {\n                var layer = layers_1_1.value;\n                layer.canvas.destroy();\n                delete layer['canvas'];\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (layers_1_1 && !layers_1_1.done && (_a = layers_1.return)) _a.call(layers_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        layers.splice(0, layers.length);\n        this.root = null;\n        this._dirty = false;\n        this.canvas.context.resetTransform();\n    };\n    Scene.prototype.destroy = function () {\n        this.container = undefined;\n        this.strip();\n        this.canvas.destroy();\n        Object.assign(this, { canvas: undefined, ctx: undefined });\n    };\n    Scene.prototype.render = function (opts) {\n        var _a;\n        return __awaiter$f(this, void 0, void 0, function () {\n            var _b, _c, debugSplitTimes, _d, extraDebugStats, _e, canvas, ctx, root, layers, pendingSize, mode, renderCtx, canvasCleared, _f, dirtyTree, paths;\n            var _g;\n            return __generator$f(this, function (_h) {\n                _b = opts !== null && opts !== void 0 ? opts : {}, _c = _b.debugSplitTimes, debugSplitTimes = _c === void 0 ? [performance.now()] : _c, _d = _b.extraDebugStats, extraDebugStats = _d === void 0 ? {} : _d;\n                _e = this, canvas = _e.canvas, ctx = _e.canvas.context, root = _e.root, layers = _e.layers, pendingSize = _e.pendingSize, mode = _e.opts.mode;\n                if (pendingSize) {\n                    (_g = this.canvas).resize.apply(_g, __spreadArray$p([], __read$F(pendingSize)));\n                    this.layers.forEach(function (layer) {\n                        var _a;\n                        return (_a = layer.canvas).resize.apply(_a, __spreadArray$p([], __read$F(pendingSize)));\n                    });\n                    this.pendingSize = undefined;\n                }\n                if (root && !root.visible) {\n                    this._dirty = false;\n                    return [2 /*return*/];\n                }\n                if (root && !this.dirty) {\n                    if (this.debug.consoleLog) {\n                        Logger.debug('no-op', {\n                            redrawType: RedrawType[root.dirty],\n                            tree: this.buildTree(root),\n                        });\n                    }\n                    this.debugStats(debugSplitTimes, ctx, undefined, extraDebugStats);\n                    return [2 /*return*/];\n                }\n                renderCtx = {\n                    ctx: ctx,\n                    forceRender: true,\n                    resized: !!pendingSize,\n                    debugNodes: {},\n                };\n                if (this.debug.stats === 'detailed') {\n                    renderCtx.stats = { layersRendered: 0, layersSkipped: 0, nodesRendered: 0, nodesSkipped: 0 };\n                }\n                canvasCleared = false;\n                if (!root || root.dirty >= RedrawType.TRIVIAL) {\n                    // start with a blank canvas, clear previous drawing\n                    canvasCleared = true;\n                    canvas.clear();\n                }\n                if (root && this.debug.dirtyTree) {\n                    _f = this.buildDirtyTree(root), dirtyTree = _f.dirtyTree, paths = _f.paths;\n                    Logger.debug({ dirtyTree: dirtyTree, paths: paths });\n                }\n                if (root && canvasCleared) {\n                    if (this.debug.consoleLog) {\n                        Logger.debug('before', {\n                            redrawType: RedrawType[root.dirty],\n                            canvasCleared: canvasCleared,\n                            tree: this.buildTree(root),\n                        });\n                    }\n                    if (root.visible) {\n                        ctx.save();\n                        root.render(renderCtx);\n                        ctx.restore();\n                    }\n                }\n                if (mode !== 'dom-composite' && layers.length > 0 && canvasCleared) {\n                    this.sortLayers();\n                    ctx.save();\n                    ctx.setTransform(1 / canvas.pixelRatio, 0, 0, 1 / canvas.pixelRatio, 0, 0);\n                    layers.forEach(function (_a) {\n                        var _b = _a.canvas, imageSource = _b.imageSource, enabled = _b.enabled, getComputedOpacity = _a.getComputedOpacity, getVisibility = _a.getVisibility;\n                        if (!enabled || !getVisibility()) {\n                            return;\n                        }\n                        ctx.globalAlpha = getComputedOpacity();\n                        ctx.drawImage(imageSource, 0, 0);\n                    });\n                    ctx.restore();\n                }\n                // Check for save/restore depth of zero!\n                (_a = ctx.verifyDepthZero) === null || _a === void 0 ? void 0 : _a.call(ctx);\n                this._dirty = false;\n                this.debugStats(debugSplitTimes, ctx, renderCtx.stats, extraDebugStats);\n                this.debugSceneNodeHighlight(ctx, this.debug.sceneNodeHighlight, renderCtx.debugNodes);\n                if (root && this.debug.consoleLog) {\n                    Logger.debug('after', { redrawType: RedrawType[root.dirty], canvasCleared: canvasCleared, tree: this.buildTree(root) });\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    Scene.prototype.debugStats = function (debugSplitTimes, ctx, renderCtxStats, extraDebugStats) {\n        var e_2, _a;\n        if (extraDebugStats === void 0) { extraDebugStats = {}; }\n        var end = performance.now();\n        if (this.debug.stats) {\n            var start = debugSplitTimes[0];\n            debugSplitTimes.push(end);\n            var pct = function (rendered, skipped) {\n                var total = rendered + skipped;\n                return rendered + \" / \" + total + \" (\" + Math.round((100 * rendered) / total) + \"%)\";\n            };\n            var time_1 = function (start, end) {\n                return Math.round((end - start) * 100) / 100 + \"ms\";\n            };\n            var _b = renderCtxStats !== null && renderCtxStats !== void 0 ? renderCtxStats : {}, _c = _b.layersRendered, layersRendered = _c === void 0 ? 0 : _c, _d = _b.layersSkipped, layersSkipped = _d === void 0 ? 0 : _d, _e = _b.nodesRendered, nodesRendered = _e === void 0 ? 0 : _e, _f = _b.nodesSkipped, nodesSkipped = _f === void 0 ? 0 : _f;\n            var splits = debugSplitTimes\n                .map(function (t, i) { return (i > 0 ? time_1(debugSplitTimes[i - 1], t) : null); })\n                .filter(function (v) { return v != null; })\n                .join(' + ');\n            var extras = Object.entries(extraDebugStats)\n                .map(function (_a) {\n                var _b = __read$F(_a, 2), k = _b[0], v = _b[1];\n                return k + \": \" + v;\n            })\n                .join(' ; ');\n            var stats = [\n                time_1(start, end) + \" (\" + splits + \")\",\n                \"\" + extras,\n                this.debug.stats === 'detailed' ? \"Layers: \" + pct(layersRendered, layersSkipped) : null,\n                this.debug.stats === 'detailed' ? \"Nodes: \" + pct(nodesRendered, nodesSkipped) : null,\n            ].filter(function (v) { return v != null; });\n            var statsSize = stats.map(function (t) { return [t, HdpiCanvas.getTextSize(t, ctx.font)]; });\n            var width = Math.max.apply(Math, __spreadArray$p([], __read$F(statsSize.map(function (_a) {\n                var _b = __read$F(_a, 2), width = _b[1].width;\n                return width;\n            }))));\n            var height = statsSize.reduce(function (total, _a) {\n                var _b = __read$F(_a, 2), height = _b[1].height;\n                return total + height;\n            }, 0);\n            ctx.save();\n            ctx.fillStyle = 'white';\n            ctx.fillRect(0, 0, width, height);\n            ctx.fillStyle = 'black';\n            var y = 0;\n            try {\n                for (var statsSize_1 = __values$y(statsSize), statsSize_1_1 = statsSize_1.next(); !statsSize_1_1.done; statsSize_1_1 = statsSize_1.next()) {\n                    var _g = __read$F(statsSize_1_1.value, 2), stat = _g[0], size = _g[1];\n                    y += size.height;\n                    ctx.fillText(stat, 2, y);\n                }\n            }\n            catch (e_2_1) { e_2 = { error: e_2_1 }; }\n            finally {\n                try {\n                    if (statsSize_1_1 && !statsSize_1_1.done && (_a = statsSize_1.return)) _a.call(statsSize_1);\n                }\n                finally { if (e_2) throw e_2.error; }\n            }\n            ctx.restore();\n        }\n    };\n    Scene.prototype.debugSceneNodeHighlight = function (ctx, sceneNodeHighlight, debugNodes) {\n        var e_3, _a, e_4, _b, e_5, _c;\n        var _d;\n        var regexpPredicate = function (matcher) { return function (n) {\n            if (matcher.test(n.id)) {\n                return true;\n            }\n            return n instanceof Group && n.name != null && matcher.test(n.name);\n        }; };\n        var stringPredicate = function (match) { return function (n) {\n            if (match === n.id) {\n                return true;\n            }\n            return n instanceof Group && n.name != null && match === n.name;\n        }; };\n        try {\n            for (var sceneNodeHighlight_1 = __values$y(sceneNodeHighlight), sceneNodeHighlight_1_1 = sceneNodeHighlight_1.next(); !sceneNodeHighlight_1_1.done; sceneNodeHighlight_1_1 = sceneNodeHighlight_1.next()) {\n                var next = sceneNodeHighlight_1_1.value;\n                if (typeof next === 'string' && debugNodes[next] != null)\n                    continue;\n                var predicate = typeof next === 'string' ? stringPredicate(next) : regexpPredicate(next);\n                var nodes = (_d = this.root) === null || _d === void 0 ? void 0 : _d.findNodes(predicate);\n                if (!nodes || nodes.length === 0) {\n                    Logger.debug(\"no debugging node with id [\" + next + \"] in scene graph.\");\n                    continue;\n                }\n                try {\n                    for (var nodes_1 = (e_4 = void 0, __values$y(nodes)), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) {\n                        var node = nodes_1_1.value;\n                        if (node instanceof Group && node.name) {\n                            debugNodes[node.name] = node;\n                        }\n                        else {\n                            debugNodes[node.id] = node;\n                        }\n                    }\n                }\n                catch (e_4_1) { e_4 = { error: e_4_1 }; }\n                finally {\n                    try {\n                        if (nodes_1_1 && !nodes_1_1.done && (_b = nodes_1.return)) _b.call(nodes_1);\n                    }\n                    finally { if (e_4) throw e_4.error; }\n                }\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (sceneNodeHighlight_1_1 && !sceneNodeHighlight_1_1.done && (_a = sceneNodeHighlight_1.return)) _a.call(sceneNodeHighlight_1);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n        ctx.save();\n        try {\n            for (var _e = __values$y(Object.entries(debugNodes)), _f = _e.next(); !_f.done; _f = _e.next()) {\n                var _g = __read$F(_f.value, 2), name_1 = _g[0], node = _g[1];\n                var bbox = node.computeTransformedBBox();\n                if (!bbox) {\n                    Logger.debug(\"no bbox for debugged node [\" + name_1 + \"].\");\n                    continue;\n                }\n                ctx.globalAlpha = 0.8;\n                ctx.strokeStyle = 'red';\n                ctx.lineWidth = 1;\n                ctx.strokeRect(bbox.x, bbox.y, bbox.width, bbox.height);\n                ctx.fillStyle = 'red';\n                ctx.strokeStyle = 'white';\n                ctx.font = '16px sans-serif';\n                ctx.textBaseline = 'top';\n                ctx.textAlign = 'left';\n                ctx.lineWidth = 2;\n                ctx.strokeText(name_1, bbox.x, bbox.y, bbox.width);\n                ctx.fillText(name_1, bbox.x, bbox.y, bbox.width);\n            }\n        }\n        catch (e_5_1) { e_5 = { error: e_5_1 }; }\n        finally {\n            try {\n                if (_f && !_f.done && (_c = _e.return)) _c.call(_e);\n            }\n            finally { if (e_5) throw e_5.error; }\n        }\n        ctx.restore();\n    };\n    Scene.prototype.buildTree = function (node) {\n        var _this = this;\n        var _a;\n        var name = (_a = (node instanceof Group ? node.name : null)) !== null && _a !== void 0 ? _a : node.id;\n        return __assign$t({ name: name, node: node, dirty: RedrawType[node.dirty] }, node.children\n            .map(function (c) { return _this.buildTree(c); })\n            .reduce(function (result, childTree) {\n            var treeNodeName = childTree.name;\n            var _a = childTree.node, visible = _a.visible, opacity = _a.opacity, zIndex = _a.zIndex, zIndexSubOrder = _a.zIndexSubOrder, childNode = childTree.node;\n            if (!visible || opacity <= 0) {\n                treeNodeName = \"(\" + treeNodeName + \")\";\n            }\n            if (childNode instanceof Group && childNode.isLayer()) {\n                treeNodeName = \"*\" + treeNodeName + \"*\";\n            }\n            var key = [\n                \"\" + (treeNodeName !== null && treeNodeName !== void 0 ? treeNodeName : '<unknown>'),\n                \"z: \" + zIndex,\n                zIndexSubOrder && \"zo: \" + zIndexSubOrder.join(' / '),\n            ]\n                .filter(function (v) { return !!v; })\n                .join(' ');\n            result[key] = childTree;\n            return result;\n        }, {}));\n    };\n    Scene.prototype.buildDirtyTree = function (node) {\n        var _this = this;\n        var _a;\n        if (node.dirty === RedrawType.NONE) {\n            return { dirtyTree: {}, paths: [] };\n        }\n        var childrenDirtyTree = node.children.map(function (c) { return _this.buildDirtyTree(c); }).filter(function (c) { return c.paths.length > 0; });\n        var name = (_a = (node instanceof Group ? node.name : null)) !== null && _a !== void 0 ? _a : node.id;\n        var paths = childrenDirtyTree.length === 0\n            ? [name]\n            : childrenDirtyTree\n                .map(function (c) { return c.paths; })\n                .reduce(function (r, p) { return r.concat(p); }, [])\n                .map(function (p) { return name + \".\" + p; });\n        return {\n            dirtyTree: __assign$t({ name: name, node: node, dirty: RedrawType[node.dirty] }, childrenDirtyTree\n                .map(function (c) { return c.dirtyTree; })\n                .filter(function (t) { return t.dirty !== undefined; })\n                .reduce(function (result, childTree) {\n                var _a;\n                result[(_a = childTree.name) !== null && _a !== void 0 ? _a : '<unknown>'] = childTree;\n                return result;\n            }, {})),\n            paths: paths,\n        };\n    };\n    Scene.className = 'Scene';\n    return Scene;\n}());\n\nvar Gradient = /** @class */ (function () {\n    function Gradient() {\n        this.stops = [];\n    }\n    return Gradient;\n}());\n\nvar twoPi = Math.PI * 2;\n/**\n * Normalize the given angle to be in the [0, 2π) interval.\n * @param radians Angle in radians.\n */\nfunction normalizeAngle360(radians) {\n    radians %= twoPi;\n    radians += twoPi;\n    radians %= twoPi;\n    return radians;\n}\nfunction normalizeAngle360Inclusive(radians) {\n    radians %= twoPi;\n    radians += twoPi;\n    if (radians !== twoPi) {\n        radians %= twoPi;\n    }\n    return radians;\n}\n/**\n * Normalize the given angle to be in the [-π, π) interval.\n * @param radians Angle in radians.\n */\nfunction normalizeAngle180(radians) {\n    radians %= twoPi;\n    if (radians < -Math.PI) {\n        radians += twoPi;\n    }\n    else if (radians >= Math.PI) {\n        radians -= twoPi;\n    }\n    return radians;\n}\nfunction toRadians$1(degrees) {\n    return (degrees / 180) * Math.PI;\n}\nfunction toDegrees(radians) {\n    return (radians / Math.PI) * 180;\n}\n\nvar __extends$10 = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar LinearGradient = /** @class */ (function (_super) {\n    __extends$10(LinearGradient, _super);\n    function LinearGradient() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.angle = 0;\n        return _this;\n    }\n    LinearGradient.prototype.createGradient = function (ctx, bbox) {\n        // Gradient 0° angle starts at top according to CSS spec\n        var angleOffset = 90;\n        var _a = this, stops = _a.stops, angle = _a.angle;\n        var radians = normalizeAngle360(toRadians$1(angle + angleOffset));\n        var cos = Math.cos(radians);\n        var sin = Math.sin(radians);\n        var w = bbox.width;\n        var h = bbox.height;\n        var cx = bbox.x + w * 0.5;\n        var cy = bbox.y + h * 0.5;\n        if (w > 0 && h > 0) {\n            var diagonal = Math.sqrt(h * h + w * w) / 2;\n            var diagonalAngle = Math.atan2(h, w);\n            var quarteredAngle = void 0;\n            if (radians < Math.PI / 2) {\n                quarteredAngle = radians;\n            }\n            else if (radians < Math.PI) {\n                quarteredAngle = Math.PI - radians;\n            }\n            else if (radians < (3 * Math.PI) / 2) {\n                quarteredAngle = radians - Math.PI;\n            }\n            else {\n                quarteredAngle = 2 * Math.PI - radians;\n            }\n            var l = diagonal * Math.abs(Math.cos(quarteredAngle - diagonalAngle));\n            var gradient_1 = ctx.createLinearGradient(cx + cos * l, cy + sin * l, cx - cos * l, cy - sin * l);\n            stops.forEach(function (stop) {\n                gradient_1.addColorStop(stop.offset, stop.color);\n            });\n            return gradient_1;\n        }\n        return 'black';\n    };\n    return LinearGradient;\n}(Gradient));\n\nvar __extends$$ = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1V = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar LINEAR_GRADIENT_REGEXP = /^linear-gradient\\((.*?)deg,\\s*(.*?)\\s*\\)$/i;\nvar Shape = /** @class */ (function (_super) {\n    __extends$$(Shape, _super);\n    function Shape() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.lastInstanceId = 0;\n        _this.fillOpacity = 1;\n        _this.strokeOpacity = 1;\n        _this.fill = Shape.defaultStyles.fill;\n        /**\n         * Note that `strokeStyle = null` means invisible stroke,\n         * while `lineWidth = 0` means no stroke, and sometimes this can mean different things.\n         * For example, a rect shape with an invisible stroke may not align to the pixel grid\n         * properly because the stroke affects the rules of alignment, and arc shapes forming\n         * a pie chart will have a gap between them if they have an invisible stroke, whereas\n         * there would be not gap if there was no stroke at all.\n         * The preferred way of making the stroke invisible is setting the `lineWidth` to zero,\n         * unless specific looks that is achieved by having an invisible stroke is desired.\n         */\n        _this.stroke = Shape.defaultStyles.stroke;\n        _this.strokeWidth = Shape.defaultStyles.strokeWidth;\n        _this.lineDash = Shape.defaultStyles.lineDash;\n        _this.lineDashOffset = Shape.defaultStyles.lineDashOffset;\n        _this.lineCap = Shape.defaultStyles.lineCap;\n        _this.lineJoin = Shape.defaultStyles.lineJoin;\n        _this.opacity = Shape.defaultStyles.opacity;\n        _this.fillShadow = Shape.defaultStyles.fillShadow;\n        return _this;\n    }\n    /**\n     * Creates a light-weight instance of the given shape (that serves as a template).\n     * The created instance only stores the properites set on the instance itself\n     * and the rest of the properties come via the prototype chain from the template.\n     * This can greatly reduce memory usage in cases where one has many similar shapes,\n     * for example, circles of different size, position and color. The exact memory usage\n     * reduction will depend on the size of the template and the number of own properties\n     * set on its lightweight instances, but will typically be around an order of magnitude\n     * or more.\n     *\n     * Note: template shapes are not supposed to be part of the scene graph (they should not\n     * have a parent).\n     *\n     * @param template\n     */\n    Shape.createInstance = function (template) {\n        var shape = Object.create(template);\n        shape._setParent(undefined);\n        shape.id = template.id + '-Instance-' + String(++template.lastInstanceId);\n        return shape;\n    };\n    /**\n     * Restores the default styles introduced by this subclass.\n     */\n    Shape.prototype.restoreOwnStyles = function () {\n        var styles = this.constructor.defaultStyles;\n        var keys = Object.getOwnPropertyNames(styles);\n        // getOwnPropertyNames is about 2.5 times faster than\n        // for..in with the hasOwnProperty check and in this\n        // case, where most properties are inherited, can be\n        // more then an order of magnitude faster.\n        for (var i = 0, n = keys.length; i < n; i++) {\n            var key = keys[i];\n            this[key] = styles[key];\n        }\n    };\n    Shape.prototype.restoreAllStyles = function () {\n        var styles = this.constructor.defaultStyles;\n        for (var property in styles) {\n            this[property] = styles[property];\n        }\n    };\n    /**\n     * Restores the base class default styles that have been overridden by this subclass.\n     */\n    Shape.prototype.restoreOverriddenStyles = function () {\n        var styles = this.constructor.defaultStyles;\n        var protoStyles = Object.getPrototypeOf(styles);\n        for (var property in styles) {\n            if (Object.prototype.hasOwnProperty.call(styles, property) &&\n                Object.prototype.hasOwnProperty.call(protoStyles, property)) {\n                this[property] = styles[property];\n            }\n        }\n    };\n    Shape.prototype.updateGradient = function () {\n        var fill = this.fill;\n        var linearGradientMatch;\n        if ((fill === null || fill === void 0 ? void 0 : fill.startsWith('linear-gradient')) && (linearGradientMatch = LINEAR_GRADIENT_REGEXP.exec(fill))) {\n            var angle = parseFloat(linearGradientMatch[1]);\n            var colors_1 = [];\n            var colorsPart = linearGradientMatch[2];\n            var colorRegex = /(#[0-9a-f]+)|(rgba?\\(.+?\\))|([a-z]+)/gi;\n            var c = void 0;\n            while ((c = colorRegex.exec(colorsPart))) {\n                colors_1.push(c[0]);\n            }\n            this.gradient = new LinearGradient();\n            this.gradient.angle = angle;\n            this.gradient.stops = colors_1.map(function (color, index) {\n                var offset = index / (colors_1.length - 1);\n                return { offset: offset, color: color };\n            });\n        }\n        else {\n            this.gradient = undefined;\n        }\n    };\n    /**\n     * Returns a device-pixel aligned coordinate (or length if length is supplied).\n     *\n     * NOTE: Not suitable for strokes, since the stroke needs to be offset to the middle\n     * of a device pixel.\n     */\n    Shape.prototype.align = function (start, length) {\n        var _a, _b, _c;\n        var pixelRatio = (_c = (_b = (_a = this.layerManager) === null || _a === void 0 ? void 0 : _a.canvas) === null || _b === void 0 ? void 0 : _b.pixelRatio) !== null && _c !== void 0 ? _c : 1;\n        var alignedStart = Math.round(start * pixelRatio) / pixelRatio;\n        if (length == undefined) {\n            return alignedStart;\n        }\n        if (length === 0) {\n            return 0;\n        }\n        if (length < 1) {\n            // Avoid hiding crisp shapes\n            return Math.ceil(length * pixelRatio) / pixelRatio;\n        }\n        // Account for the rounding of alignedStart by increasing length to compensate before\n        // alignment.\n        return Math.round((length + start) * pixelRatio) / pixelRatio - alignedStart;\n    };\n    Shape.prototype.fillStroke = function (ctx) {\n        this.renderFill(ctx);\n        this.renderStroke(ctx);\n    };\n    Shape.prototype.renderFill = function (ctx) {\n        if (this.fill) {\n            var globalAlpha = ctx.globalAlpha;\n            this.applyFill(ctx);\n            this.applyFillAlpha(ctx);\n            this.applyShadow(ctx);\n            ctx.fill();\n            ctx.globalAlpha = globalAlpha;\n        }\n        ctx.shadowColor = 'rgba(0, 0, 0, 0)';\n    };\n    Shape.prototype.applyFill = function (ctx) {\n        if (this.gradient) {\n            ctx.fillStyle = this.gradient.createGradient(ctx, this.computeBBox());\n        }\n        else {\n            ctx.fillStyle = this.fill;\n        }\n    };\n    Shape.prototype.applyFillAlpha = function (ctx) {\n        var globalAlpha = ctx.globalAlpha;\n        ctx.globalAlpha = globalAlpha * this.opacity * this.fillOpacity;\n    };\n    Shape.prototype.applyShadow = function (ctx) {\n        var _a, _b;\n        // The canvas context scaling (depends on the device's pixel ratio)\n        // has no effect on shadows, so we have to account for the pixel ratio\n        // manually here.\n        var pixelRatio = (_b = (_a = this.layerManager) === null || _a === void 0 ? void 0 : _a.canvas.pixelRatio) !== null && _b !== void 0 ? _b : 1;\n        var fillShadow = this.fillShadow;\n        if (fillShadow === null || fillShadow === void 0 ? void 0 : fillShadow.enabled) {\n            ctx.shadowColor = fillShadow.color;\n            ctx.shadowOffsetX = fillShadow.xOffset * pixelRatio;\n            ctx.shadowOffsetY = fillShadow.yOffset * pixelRatio;\n            ctx.shadowBlur = fillShadow.blur * pixelRatio;\n        }\n    };\n    Shape.prototype.renderStroke = function (ctx) {\n        if (this.stroke && this.strokeWidth) {\n            var globalAlpha = ctx.globalAlpha;\n            ctx.strokeStyle = this.stroke;\n            ctx.globalAlpha = globalAlpha * this.opacity * this.strokeOpacity;\n            ctx.lineWidth = this.strokeWidth;\n            if (this.lineDash) {\n                ctx.setLineDash(this.lineDash);\n            }\n            if (this.lineDashOffset) {\n                ctx.lineDashOffset = this.lineDashOffset;\n            }\n            if (this.lineCap) {\n                ctx.lineCap = this.lineCap;\n            }\n            if (this.lineJoin) {\n                ctx.lineJoin = this.lineJoin;\n            }\n            ctx.stroke();\n            ctx.globalAlpha = globalAlpha;\n        }\n    };\n    Shape.prototype.containsPoint = function (x, y) {\n        return this.isPointInPath(x, y);\n    };\n    /**\n     * Defaults for style properties. Note that properties that affect the position\n     * and shape of the node are not considered style properties, for example:\n     * `x`, `y`, `width`, `height`, `radius`, `rotation`, etc.\n     * Can be used to reset to the original styling after some custom styling\n     * has been applied (using the `restoreOwnStyles` and `restoreAllStyles` methods).\n     * These static defaults are meant to be inherited by subclasses.\n     */\n    Shape.defaultStyles = Object.assign({}, {\n        fill: 'black',\n        stroke: undefined,\n        strokeWidth: 0,\n        lineDash: undefined,\n        lineDashOffset: 0,\n        lineCap: undefined,\n        lineJoin: undefined,\n        opacity: 1,\n        fillShadow: undefined,\n    });\n    __decorate$1V([\n        SceneChangeDetection({ redraw: RedrawType.MINOR })\n    ], Shape.prototype, \"fillOpacity\", void 0);\n    __decorate$1V([\n        SceneChangeDetection({ redraw: RedrawType.MINOR })\n    ], Shape.prototype, \"strokeOpacity\", void 0);\n    __decorate$1V([\n        SceneChangeDetection({ redraw: RedrawType.MINOR, changeCb: function (s) { return s.updateGradient(); } })\n    ], Shape.prototype, \"fill\", void 0);\n    __decorate$1V([\n        SceneChangeDetection({ redraw: RedrawType.MINOR })\n    ], Shape.prototype, \"stroke\", void 0);\n    __decorate$1V([\n        SceneChangeDetection({ redraw: RedrawType.MINOR })\n    ], Shape.prototype, \"strokeWidth\", void 0);\n    __decorate$1V([\n        SceneChangeDetection({ redraw: RedrawType.MINOR })\n    ], Shape.prototype, \"lineDash\", void 0);\n    __decorate$1V([\n        SceneChangeDetection({ redraw: RedrawType.MINOR })\n    ], Shape.prototype, \"lineDashOffset\", void 0);\n    __decorate$1V([\n        SceneChangeDetection({ redraw: RedrawType.MINOR })\n    ], Shape.prototype, \"lineCap\", void 0);\n    __decorate$1V([\n        SceneChangeDetection({ redraw: RedrawType.MINOR })\n    ], Shape.prototype, \"lineJoin\", void 0);\n    __decorate$1V([\n        SceneChangeDetection({\n            redraw: RedrawType.MINOR,\n            convertor: function (v) { return Math.min(1, Math.max(0, v)); },\n        })\n    ], Shape.prototype, \"opacity\", void 0);\n    __decorate$1V([\n        SceneChangeDetection({ redraw: RedrawType.MINOR, checkDirtyOnAssignment: true })\n    ], Shape.prototype, \"fillShadow\", void 0);\n    return Shape;\n}(Node));\n\nvar __extends$_ = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1U = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __values$x = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar ellipsis = '\\u2026';\nfunction SceneFontChangeDetection(opts) {\n    var _a = opts !== null && opts !== void 0 ? opts : {}, _b = _a.redraw, redraw = _b === void 0 ? RedrawType.MAJOR : _b, changeCb = _a.changeCb;\n    return SceneChangeDetection({ redraw: redraw, type: 'font', changeCb: changeCb });\n}\nvar Text = /** @class */ (function (_super) {\n    __extends$_(Text, _super);\n    function Text() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.x = 0;\n        _this.y = 0;\n        _this.lines = [];\n        _this.text = undefined;\n        _this._dirtyFont = true;\n        _this.fontSize = 10;\n        _this.fontFamily = 'sans-serif';\n        _this.textAlign = Text.defaultStyles.textAlign;\n        _this.textBaseline = Text.defaultStyles.textBaseline;\n        // TextMetrics are used if lineHeight is not defined.\n        _this.lineHeight = undefined;\n        return _this;\n    }\n    Text.prototype._setLines = function () {\n        this.lines = splitText(this.text);\n    };\n    Object.defineProperty(Text.prototype, \"font\", {\n        get: function () {\n            if (this._dirtyFont) {\n                this._dirtyFont = false;\n                this._font = getFont(this);\n            }\n            return this._font;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Text.prototype.computeBBox = function () {\n        return HdpiCanvas.has.textMetrics\n            ? getPreciseBBox(this.lines, this.x, this.y, this)\n            : getApproximateBBox(this.lines, this.x, this.y, this);\n    };\n    Text.prototype.getLineHeight = function (line) {\n        var _a, _b;\n        if (this.lineHeight)\n            return this.lineHeight;\n        if (HdpiCanvas.has.textMetrics) {\n            var metrics = HdpiCanvas.measureText(line, this.font, this.textBaseline, this.textAlign);\n            return (((_a = metrics.fontBoundingBoxAscent) !== null && _a !== void 0 ? _a : metrics.emHeightAscent) +\n                ((_b = metrics.fontBoundingBoxDescent) !== null && _b !== void 0 ? _b : metrics.emHeightDescent));\n        }\n        return HdpiCanvas.getTextSize(line, this.font).height;\n    };\n    Text.prototype.isPointInPath = function (x, y) {\n        var point = this.transformPoint(x, y);\n        var bbox = this.computeBBox();\n        return bbox ? bbox.containsPoint(point.x, point.y) : false;\n    };\n    Text.prototype.render = function (renderCtx) {\n        var ctx = renderCtx.ctx, forceRender = renderCtx.forceRender, stats = renderCtx.stats;\n        if (this.dirty === RedrawType.NONE && !forceRender) {\n            if (stats)\n                stats.nodesSkipped += this.nodeCount.count;\n            return;\n        }\n        if (!this.lines.length || !this.layerManager) {\n            if (stats)\n                stats.nodesSkipped += this.nodeCount.count;\n            return;\n        }\n        this.computeTransformMatrix();\n        this.matrix.toContext(ctx);\n        var _a = this, fill = _a.fill, stroke = _a.stroke, strokeWidth = _a.strokeWidth;\n        ctx.font = this.font;\n        ctx.textAlign = this.textAlign;\n        ctx.textBaseline = this.textBaseline;\n        var pixelRatio = this.layerManager.canvas.pixelRatio || 1;\n        var globalAlpha = ctx.globalAlpha;\n        if (fill) {\n            ctx.fillStyle = fill;\n            ctx.globalAlpha = globalAlpha * this.opacity * this.fillOpacity;\n            var fillShadow = this.fillShadow;\n            if (fillShadow === null || fillShadow === void 0 ? void 0 : fillShadow.enabled) {\n                ctx.shadowColor = fillShadow.color;\n                ctx.shadowOffsetX = fillShadow.xOffset * pixelRatio;\n                ctx.shadowOffsetY = fillShadow.yOffset * pixelRatio;\n                ctx.shadowBlur = fillShadow.blur * pixelRatio;\n            }\n            this.renderLines(function (line, x, y) { return ctx.fillText(line, x, y); });\n        }\n        if (stroke && strokeWidth) {\n            ctx.strokeStyle = stroke;\n            ctx.lineWidth = strokeWidth;\n            ctx.globalAlpha = globalAlpha * this.opacity * this.strokeOpacity;\n            var _b = this, lineDash = _b.lineDash, lineDashOffset = _b.lineDashOffset, lineCap = _b.lineCap, lineJoin = _b.lineJoin;\n            if (lineDash) {\n                ctx.setLineDash(lineDash);\n            }\n            if (lineDashOffset) {\n                ctx.lineDashOffset = lineDashOffset;\n            }\n            if (lineCap) {\n                ctx.lineCap = lineCap;\n            }\n            if (lineJoin) {\n                ctx.lineJoin = lineJoin;\n            }\n            this.renderLines(function (line, x, y) { return ctx.strokeText(line, x, y); });\n        }\n        _super.prototype.render.call(this, renderCtx);\n    };\n    Text.prototype.renderLines = function (renderCallback) {\n        var _this = this;\n        var _a = this, lines = _a.lines, x = _a.x, y = _a.y;\n        var lineHeights = this.lines.map(function (line) { return _this.getLineHeight(line); });\n        var totalHeight = lineHeights.reduce(function (a, b) { return a + b; }, 0);\n        var offsetY = -(totalHeight - lineHeights[0]) * getVerticalOffset(this.textBaseline);\n        for (var i = 0; i < lines.length; i++) {\n            renderCallback(lines[i], x, y + offsetY);\n            offsetY += lineHeights[i];\n        }\n    };\n    Text.wrap = function (text, maxWidth, maxHeight, textProps, wrapping) {\n        var e_1, _a;\n        var font = getFont(textProps);\n        var measurer = createTextMeasurer(font);\n        var lines = text.split(/\\r?\\n/g);\n        if (lines.length === 0) {\n            return '';\n        }\n        if (wrapping === 'never') {\n            return Text.truncateLine(lines[0], maxWidth, measurer, false);\n        }\n        var result = [];\n        var cumulativeHeight = 0;\n        try {\n            for (var lines_1 = __values$x(lines), lines_1_1 = lines_1.next(); !lines_1_1.done; lines_1_1 = lines_1.next()) {\n                var line = lines_1_1.value;\n                var wrappedLine = Text.wrapLine(line, maxWidth, maxHeight, measurer, textProps, wrapping, cumulativeHeight);\n                result.push(wrappedLine.result);\n                cumulativeHeight = wrappedLine.cumulativeHeight;\n                if (wrappedLine.truncated) {\n                    break;\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (lines_1_1 && !lines_1_1.done && (_a = lines_1.return)) _a.call(lines_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return result.join('\\n').trim();\n    };\n    Text.wrapLine = function (text, maxWidth, maxHeight, measurer, textProps, wrapping, cumulativeHeight) {\n        text = text.trim();\n        if (!text) {\n            return { result: '', truncated: false, cumulativeHeight: cumulativeHeight };\n        }\n        var initialSize = measurer.size(text);\n        if (initialSize.width <= maxWidth) {\n            // Text fits into a single line\n            return { result: text, truncated: false, cumulativeHeight: cumulativeHeight + initialSize.height };\n        }\n        if (initialSize.height > maxHeight || measurer.width('W') > maxWidth) {\n            // Not enough space for a single line or character\n            return { result: '', truncated: true, cumulativeHeight: cumulativeHeight };\n        }\n        var words = text.split(/\\s+/g);\n        var wrapResult = Text.wrapLineSequentially(words, maxWidth, maxHeight, measurer, textProps, wrapping, cumulativeHeight);\n        cumulativeHeight = wrapResult.cumulativeHeight;\n        var lines = wrapResult.lines;\n        if (!(wrapResult.wordsBrokenOrTruncated || wrapResult.linesTruncated)) {\n            // If no word breaks or truncations, try the balanced wrapping\n            var linesCount = wrapResult.lines.length;\n            var balanced = Text.wrapLineBalanced(words, maxWidth, measurer, linesCount);\n            if (balanced.length === lines.length) {\n                // Some lines can't be balanced properly because of unusually long words\n                lines = balanced;\n            }\n        }\n        var wrappedText = lines.map(function (ln) { return ln.join(' '); }).join('\\n');\n        return { result: wrappedText, truncated: wrapResult.linesTruncated, cumulativeHeight: cumulativeHeight };\n    };\n    Text.breakWord = function (word, firstLineWidth, maxWidth, hyphens, measurer) {\n        var e_2, _a;\n        var isPunctuationAt = function (index) { return Text.punctuationMarks.includes(word[index]); };\n        var h = hyphens ? measurer.width('-') : 0;\n        var breaks = [];\n        var partWidth = 0;\n        var p = 0;\n        for (var i = 0; i < word.length; i++) {\n            var c = word[i];\n            var w = measurer.width(c);\n            var limit = p === 0 ? firstLineWidth : maxWidth;\n            if (partWidth + w + h > limit) {\n                breaks.push(i);\n                partWidth = 0;\n                p++;\n            }\n            partWidth += w;\n        }\n        var parts = [];\n        var start = 0;\n        try {\n            for (var breaks_1 = __values$x(breaks), breaks_1_1 = breaks_1.next(); !breaks_1_1.done; breaks_1_1 = breaks_1.next()) {\n                var index = breaks_1_1.value;\n                var part = word.substring(start, index);\n                if (hyphens && part.length > 0 && !isPunctuationAt(index - 1) && !isPunctuationAt(index)) {\n                    part += '-';\n                }\n                parts.push(part);\n                start = index;\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (breaks_1_1 && !breaks_1_1.done && (_a = breaks_1.return)) _a.call(breaks_1);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        parts.push(word.substring(start));\n        return parts;\n    };\n    Text.truncateLine = function (text, maxWidth, measurer, forceEllipsis) {\n        var lineWidth = measurer.width(text);\n        if (lineWidth < maxWidth && !forceEllipsis) {\n            return text;\n        }\n        var ellipsisWidth = measurer.width(ellipsis);\n        if (lineWidth + ellipsisWidth <= maxWidth) {\n            return \"\" + text + ellipsis;\n        }\n        var index = Math.floor((text.length * maxWidth) / lineWidth) + 1;\n        var trunc;\n        var truncWidth;\n        do {\n            trunc = text.substring(0, index);\n            truncWidth = measurer.width(trunc);\n        } while (--index >= 0 && truncWidth + ellipsisWidth > maxWidth);\n        return \"\" + trunc + ellipsis;\n    };\n    Text.wrapLineSequentially = function (words, maxWidth, maxHeight, measurer, textProps, wrapping, cumulativeHeight) {\n        var fontSize = textProps.fontSize, _a = textProps.lineHeight, lineHeight = _a === void 0 ? fontSize * Text.defaultLineHeightRatio : _a;\n        var breakWord = wrapping === 'always' || wrapping === 'hyphenate';\n        var hyphenate = wrapping === 'hyphenate';\n        var spaceWidth = measurer.width(' ');\n        var wordsBrokenOrTruncated = false;\n        var linesTruncated = false;\n        var lines = [];\n        var currentLine = [];\n        var lineWidth = 0;\n        var addNewLine = function () {\n            var expectedHeight = cumulativeHeight + lineHeight;\n            if (expectedHeight >= maxHeight) {\n                // Truncate the last line\n                var lastLine = currentLine.join(' ');\n                var trunc = Text.truncateLine(lastLine, maxWidth, measurer, true);\n                currentLine.splice(0, currentLine.length, trunc);\n                linesTruncated = true;\n                return false;\n            }\n            // Add new line\n            currentLine = [];\n            lineWidth = 0;\n            cumulativeHeight = expectedHeight;\n            lines.push(currentLine);\n            return true;\n        };\n        if (!addNewLine()) {\n            return { lines: lines, linesTruncated: true, wordsBrokenOrTruncated: wordsBrokenOrTruncated, cumulativeHeight: cumulativeHeight };\n        }\n        for (var i = 0; i < words.length; i++) {\n            var word = words[i];\n            var wordWidth = measurer.width(word);\n            var expectedSpaceWidth = currentLine.length === 0 ? 0 : spaceWidth;\n            var expectedLineWidth = lineWidth + expectedSpaceWidth + wordWidth;\n            if (expectedLineWidth <= maxWidth) {\n                // If the word fits, add it to the current line\n                currentLine.push(word);\n                lineWidth = expectedLineWidth;\n                continue;\n            }\n            if (wordWidth <= maxWidth) {\n                // If the word is not too long, put it onto new line\n                if (!addNewLine()) {\n                    break;\n                }\n                currentLine.push(word);\n                lineWidth = wordWidth;\n                continue;\n            }\n            // Handle a long word\n            wordsBrokenOrTruncated = true;\n            if (breakWord) {\n                // Break the word into parts\n                var availWidth = maxWidth - lineWidth - expectedSpaceWidth;\n                var parts = Text.breakWord(word, availWidth, maxWidth, hyphenate, measurer);\n                var breakLoop = false;\n                for (var p = 0; p < parts.length; p++) {\n                    var part = parts[p];\n                    part && currentLine.push(part);\n                    if (p === parts.length - 1) {\n                        lineWidth = measurer.width(part);\n                    }\n                    else if (!addNewLine()) {\n                        breakLoop = true;\n                        break;\n                    }\n                }\n                if (breakLoop)\n                    break;\n            }\n            else {\n                // Truncate the word\n                if (!addNewLine()) {\n                    break;\n                }\n                var trunc = Text.truncateLine(word, maxWidth, measurer, true);\n                currentLine.push(trunc);\n                if (i < words.length - 1) {\n                    linesTruncated = true;\n                }\n                break;\n            }\n        }\n        return { lines: lines, linesTruncated: linesTruncated, wordsBrokenOrTruncated: wordsBrokenOrTruncated, cumulativeHeight: cumulativeHeight };\n    };\n    Text.wrapLineBalanced = function (words, maxWidth, measurer, linesCount) {\n        var e_3, _a;\n        var totalWordsWidth = words.reduce(function (sum, w) { return sum + measurer.width(w); }, 0);\n        var spaceWidth = measurer.width(' ');\n        var totalSpaceWidth = spaceWidth * (words.length - linesCount - 2);\n        var averageLineWidth = (totalWordsWidth + totalSpaceWidth) / linesCount;\n        var lines = [];\n        var currentLine = [];\n        var lineWidth = measurer.width(words[0]);\n        var newLine = true;\n        try {\n            for (var words_1 = __values$x(words), words_1_1 = words_1.next(); !words_1_1.done; words_1_1 = words_1.next()) {\n                var word = words_1_1.value;\n                var width = measurer.width(word);\n                if (newLine) {\n                    // New line\n                    currentLine = [];\n                    currentLine.push(word);\n                    lineWidth = width;\n                    newLine = false;\n                    lines.push(currentLine);\n                    continue;\n                }\n                var expectedLineWidth = lineWidth + spaceWidth + width;\n                if (expectedLineWidth <= averageLineWidth) {\n                    // Keep adding words to the line\n                    currentLine.push(word);\n                    lineWidth = expectedLineWidth;\n                }\n                else if (expectedLineWidth <= maxWidth) {\n                    // Add the last word to the line\n                    currentLine.push(word);\n                    newLine = true;\n                }\n                else {\n                    // Put the word onto the next line\n                    currentLine = [word];\n                    lineWidth = width;\n                    lines.push(currentLine);\n                }\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (words_1_1 && !words_1_1.done && (_a = words_1.return)) _a.call(words_1);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n        return lines;\n    };\n    Text.className = 'Text';\n    // The default line spacing for document editors is usually 1.15\n    Text.defaultLineHeightRatio = 1.15;\n    Text.defaultStyles = Object.assign({}, Shape.defaultStyles, {\n        textAlign: 'start',\n        fontStyle: undefined,\n        fontWeight: undefined,\n        fontSize: 10,\n        fontFamily: 'sans-serif',\n        textBaseline: 'alphabetic',\n    });\n    Text.punctuationMarks = ['.', ',', '-', ':', ';', '!', '?', \"'\", '\"', '(', ')'];\n    __decorate$1U([\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], Text.prototype, \"x\", void 0);\n    __decorate$1U([\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], Text.prototype, \"y\", void 0);\n    __decorate$1U([\n        SceneChangeDetection({ redraw: RedrawType.MAJOR, changeCb: function (o) { return o._setLines(); } })\n    ], Text.prototype, \"text\", void 0);\n    __decorate$1U([\n        SceneFontChangeDetection()\n    ], Text.prototype, \"fontStyle\", void 0);\n    __decorate$1U([\n        SceneFontChangeDetection()\n    ], Text.prototype, \"fontWeight\", void 0);\n    __decorate$1U([\n        SceneFontChangeDetection()\n    ], Text.prototype, \"fontSize\", void 0);\n    __decorate$1U([\n        SceneFontChangeDetection()\n    ], Text.prototype, \"fontFamily\", void 0);\n    __decorate$1U([\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], Text.prototype, \"textAlign\", void 0);\n    __decorate$1U([\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], Text.prototype, \"textBaseline\", void 0);\n    __decorate$1U([\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], Text.prototype, \"lineHeight\", void 0);\n    return Text;\n}(Shape));\nfunction createTextMeasurer(font) {\n    var cache = new Map();\n    var getTextSize = function (text) { return HdpiCanvas.getTextSize(text, font); };\n    var getLineWidth = function (text) {\n        if (cache.has(text)) {\n            return cache.get(text);\n        }\n        var width = getTextSize(text).width;\n        cache.set(text, width);\n        return width;\n    };\n    return { size: getTextSize, width: getLineWidth };\n}\nfunction getFont(fontProps) {\n    var fontFamily = fontProps.fontFamily, fontSize = fontProps.fontSize, fontStyle = fontProps.fontStyle, fontWeight = fontProps.fontWeight;\n    return [fontStyle !== null && fontStyle !== void 0 ? fontStyle : '', fontWeight !== null && fontWeight !== void 0 ? fontWeight : '', fontSize + 'px', fontFamily].join(' ').trim();\n}\nfunction measureText(lines, x, y, textProps) {\n    return HdpiCanvas.has.textMetrics\n        ? getPreciseBBox(lines, x, y, textProps)\n        : getApproximateBBox(lines, x, y, textProps);\n}\nfunction getPreciseBBox(lines, x, y, textProps) {\n    var _a, _b;\n    var left = 0;\n    var top = 0;\n    var width = 0;\n    var height = 0;\n    // Distance between first and last base lines.\n    var baselineDistance = 0;\n    var font = getFont(textProps);\n    var lineHeight = textProps.lineHeight, _c = textProps.textBaseline, textBaseline = _c === void 0 ? Text.defaultStyles.textBaseline : _c, _d = textProps.textAlign, textAlign = _d === void 0 ? Text.defaultStyles.textAlign : _d;\n    for (var i = 0; i < lines.length; i++) {\n        var metrics = HdpiCanvas.measureText(lines[i], font, textBaseline, textAlign);\n        left = Math.max(left, metrics.actualBoundingBoxLeft);\n        width = Math.max(width, metrics.width);\n        if (i == 0) {\n            top += metrics.actualBoundingBoxAscent;\n            height += metrics.actualBoundingBoxAscent;\n        }\n        else {\n            baselineDistance += (_a = metrics.fontBoundingBoxAscent) !== null && _a !== void 0 ? _a : metrics.emHeightAscent;\n        }\n        if (i == lines.length - 1) {\n            height += metrics.actualBoundingBoxDescent;\n        }\n        else {\n            baselineDistance += (_b = metrics.fontBoundingBoxDescent) !== null && _b !== void 0 ? _b : metrics.emHeightDescent;\n        }\n    }\n    if (lineHeight !== undefined) {\n        baselineDistance = (lines.length - 1) * lineHeight;\n    }\n    height += baselineDistance;\n    top += baselineDistance * getVerticalOffset(textBaseline);\n    return new BBox(x - left, y - top, width, height);\n}\nfunction getApproximateBBox(lines, x, y, textProps) {\n    var width = 0;\n    var firstLineHeight = 0;\n    // Distance between first and last base lines.\n    var baselineDistance = 0;\n    var font = getFont(textProps);\n    var lineHeight = textProps.lineHeight, _a = textProps.textBaseline, textBaseline = _a === void 0 ? Text.defaultStyles.textBaseline : _a, _b = textProps.textAlign, textAlign = _b === void 0 ? Text.defaultStyles.textAlign : _b;\n    if (lines.length > 0) {\n        var lineSize = HdpiCanvas.getTextSize(lines[0], font);\n        width = lineSize.width;\n        firstLineHeight = lineSize.height;\n    }\n    for (var i = 1; i < lines.length; i++) {\n        var lineSize = HdpiCanvas.getTextSize(lines[i], font);\n        width = Math.max(width, lineSize.width);\n        baselineDistance += lineHeight !== null && lineHeight !== void 0 ? lineHeight : lineSize.height;\n    }\n    switch (textAlign) {\n        case 'end':\n        case 'right':\n            x -= width;\n            break;\n        case 'center':\n            x -= width / 2;\n    }\n    switch (textBaseline) {\n        case 'alphabetic':\n            y -= firstLineHeight * 0.7 + baselineDistance * 0.5;\n            break;\n        case 'middle':\n            y -= firstLineHeight * 0.45 + baselineDistance * 0.5;\n            break;\n        case 'ideographic':\n            y -= firstLineHeight + baselineDistance;\n            break;\n        case 'hanging':\n            y -= firstLineHeight * 0.2 + baselineDistance * 0.5;\n            break;\n        case 'bottom':\n            y -= firstLineHeight + baselineDistance;\n            break;\n    }\n    return new BBox(x, y, width, firstLineHeight + baselineDistance);\n}\nfunction getVerticalOffset(textBaseline) {\n    switch (textBaseline) {\n        case 'top':\n        case 'hanging':\n            return 0;\n        case 'bottom':\n        case 'alphabetic':\n        case 'ideographic':\n            return 1;\n        case 'middle':\n            return 0.5;\n    }\n}\nfunction splitText(text) {\n    return typeof text === 'string' ? text.split(/\\r?\\n/g) : [];\n}\n\nvar Observable = /** @class */ (function () {\n    function Observable() {\n        this.allEventListeners = new Map();\n    }\n    Observable.prototype.addEventListener = function (type, listener) {\n        if (typeof listener !== 'function') {\n            throw new Error('AG Charts - listener must be a Function');\n        }\n        var allEventListeners = this.allEventListeners;\n        var eventListeners = allEventListeners.get(type);\n        if (!eventListeners) {\n            eventListeners = new Set();\n            allEventListeners.set(type, eventListeners);\n        }\n        if (!eventListeners.has(listener)) {\n            eventListeners.add(listener);\n        }\n    };\n    Observable.prototype.removeEventListener = function (type, listener) {\n        var allEventListeners = this.allEventListeners;\n        var eventListeners = allEventListeners.get(type);\n        if (!eventListeners) {\n            return;\n        }\n        eventListeners.delete(listener);\n        if (eventListeners.size === 0) {\n            allEventListeners.delete(type);\n        }\n    };\n    Observable.prototype.hasEventListener = function (type) {\n        return this.allEventListeners.has(type);\n    };\n    Observable.prototype.clearEventListeners = function () {\n        this.allEventListeners.clear();\n    };\n    Observable.prototype.fireEvent = function (event) {\n        var listeners = this.allEventListeners.get(event.type);\n        listeners === null || listeners === void 0 ? void 0 : listeners.forEach(function (listener) { return listener(event); });\n    };\n    return Observable;\n}());\n\nvar isString$2 = function (v) { return typeof v === 'string'; };\nvar isStringObject$1 = function (v) {\n    return !!v && Object.prototype.hasOwnProperty.call(v, 'toString') && isString$2(v.toString());\n};\nvar isDate$1 = function (v) { return v instanceof Date && !isNaN(+v); };\nfunction isDiscrete(value) {\n    return isString$2(value) || isStringObject$1(value);\n}\nfunction isContinuous(value) {\n    var isNumberObject = function (v) {\n        return !!v && Object.prototype.hasOwnProperty.call(v, 'valueOf') && isNumber$4(v.valueOf());\n    };\n    var isDate = function (v) { return v instanceof Date && !isNaN(+v); };\n    return isNumber$4(value) || isNumberObject(value) || isDate(value);\n}\nfunction checkDatum(value, isContinuousScale) {\n    if (isContinuousScale && isContinuous(value)) {\n        return value;\n    }\n    else if (!isContinuousScale) {\n        if (!isDiscrete(value)) {\n            return String(value);\n        }\n        return value;\n    }\n    return undefined;\n}\nvar isNumber$4 = function (v) { return typeof v === 'number' && Number.isFinite(v); };\n\nvar __read$E = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar Color = /** @class */ (function () {\n    /**\n     * Every color component should be in the [0, 1] range.\n     * Some easing functions (such as elastic easing) can overshoot the target value by some amount.\n     * So, when animating colors, if the source or target color components are already near\n     * or at the edge of the allowed [0, 1] range, it is possible for the intermediate color\n     * component value to end up outside of that range mid-animation. For this reason the constructor\n     * performs range checking/constraining.\n     * @param r Red component.\n     * @param g Green component.\n     * @param b Blue component.\n     * @param a Alpha (opacity) component.\n     */\n    function Color(r, g, b, a) {\n        if (a === void 0) { a = 1; }\n        // NaN is treated as 0.\n        this.r = Math.min(1, Math.max(0, r || 0));\n        this.g = Math.min(1, Math.max(0, g || 0));\n        this.b = Math.min(1, Math.max(0, b || 0));\n        this.a = Math.min(1, Math.max(0, a || 0));\n    }\n    /**\n     * A color string can be in one of the following formats to be valid:\n     * - #rgb\n     * - #rrggbb\n     * - rgb(r, g, b)\n     * - rgba(r, g, b, a)\n     * - CSS color name such as 'white', 'orange', 'cyan', etc.\n     */\n    Color.validColorString = function (str) {\n        if (str.indexOf('#') >= 0) {\n            return !!Color.parseHex(str);\n        }\n        if (str.indexOf('rgb') >= 0) {\n            return !!Color.stringToRgba(str);\n        }\n        return !!Color.nameToHex[str.toLowerCase()];\n    };\n    /**\n     * The given string can be in one of the following formats:\n     * - #rgb\n     * - #rrggbb\n     * - rgb(r, g, b)\n     * - rgba(r, g, b, a)\n     * - CSS color name such as 'white', 'orange', 'cyan', etc.\n     * @param str\n     */\n    Color.fromString = function (str) {\n        // hexadecimal notation\n        if (str.indexOf('#') >= 0) {\n            // there can be some leading whitespace\n            return Color.fromHexString(str);\n        }\n        // color name\n        var hex = Color.nameToHex[str.toLowerCase()];\n        if (hex) {\n            return Color.fromHexString(hex);\n        }\n        // rgb(a) notation\n        if (str.indexOf('rgb') >= 0) {\n            return Color.fromRgbaString(str);\n        }\n        throw new Error(\"Invalid color string: '\" + str + \"'\");\n    };\n    Color.tryParseFromString = function (str) {\n        try {\n            return Color.fromString(str);\n        }\n        catch (e) {\n            Logger.warnOnce(\"invalid color string: '\" + str + \"'.\");\n            return Color.fromArray([0, 0, 0]);\n        }\n    };\n    // See https://drafts.csswg.org/css-color/#hex-notation\n    Color.parseHex = function (input) {\n        input = input.replace(/ /g, '').slice(1);\n        var parts;\n        switch (input.length) {\n            case 6:\n            case 8:\n                parts = [];\n                for (var i = 0; i < input.length; i += 2) {\n                    parts.push(parseInt(\"\" + input[i] + input[i + 1], 16));\n                }\n                break;\n            case 3:\n            case 4:\n                parts = input\n                    .split('')\n                    .map(function (p) { return parseInt(p, 16); })\n                    .map(function (p) { return p + p * 16; });\n                break;\n        }\n        if ((parts === null || parts === void 0 ? void 0 : parts.length) >= 3) {\n            if (parts.every(function (p) { return p >= 0; })) {\n                if (parts.length === 3) {\n                    parts.push(255);\n                }\n                return parts;\n            }\n        }\n    };\n    Color.fromHexString = function (str) {\n        var values = Color.parseHex(str);\n        if (values) {\n            var _a = __read$E(values, 4), r = _a[0], g = _a[1], b = _a[2], a = _a[3];\n            return new Color(r / 255, g / 255, b / 255, a / 255);\n        }\n        throw new Error(\"Malformed hexadecimal color string: '\" + str + \"'\");\n    };\n    Color.stringToRgba = function (str) {\n        // Find positions of opening and closing parentheses.\n        var _a = __read$E([NaN, NaN], 2), po = _a[0], pc = _a[1];\n        for (var i = 0; i < str.length; i++) {\n            var c = str[i];\n            if (!po && c === '(') {\n                po = i;\n            }\n            else if (c === ')') {\n                pc = i;\n                break;\n            }\n        }\n        var contents = po && pc && str.substring(po + 1, pc);\n        if (!contents) {\n            return;\n        }\n        var parts = contents.split(',');\n        var rgba = [];\n        for (var i = 0; i < parts.length; i++) {\n            var part = parts[i];\n            var value = parseFloat(part);\n            if (isNaN(value)) {\n                return;\n            }\n            if (part.indexOf('%') >= 0) {\n                // percentage r, g, or b value\n                value = Math.max(0, Math.min(100, value));\n                value /= 100;\n            }\n            else {\n                if (i === 3) {\n                    // alpha component\n                    value = Math.max(0, Math.min(1, value));\n                }\n                else {\n                    // absolute r, g, or b value\n                    value = Math.max(0, Math.min(255, value));\n                    value /= 255;\n                }\n            }\n            rgba.push(value);\n        }\n        return rgba;\n    };\n    Color.fromRgbaString = function (str) {\n        var rgba = Color.stringToRgba(str);\n        if (rgba) {\n            if (rgba.length === 3) {\n                return new Color(rgba[0], rgba[1], rgba[2]);\n            }\n            else if (rgba.length === 4) {\n                return new Color(rgba[0], rgba[1], rgba[2], rgba[3]);\n            }\n        }\n        throw new Error(\"Malformed rgb/rgba color string: '\" + str + \"'\");\n    };\n    Color.fromArray = function (arr) {\n        if (arr.length === 4) {\n            return new Color(arr[0], arr[1], arr[2], arr[3]);\n        }\n        if (arr.length === 3) {\n            return new Color(arr[0], arr[1], arr[2]);\n        }\n        throw new Error('The given array should contain 3 or 4 color components (numbers).');\n    };\n    Color.fromHSB = function (h, s, b, alpha) {\n        if (alpha === void 0) { alpha = 1; }\n        var rgb = Color.HSBtoRGB(h, s, b);\n        return new Color(rgb[0], rgb[1], rgb[2], alpha);\n    };\n    Color.padHex = function (str) {\n        // Can't use `padStart(2, '0')` here because of IE.\n        return str.length === 1 ? '0' + str : str;\n    };\n    Color.prototype.toHexString = function () {\n        var hex = '#' +\n            Color.padHex(Math.round(this.r * 255).toString(16)) +\n            Color.padHex(Math.round(this.g * 255).toString(16)) +\n            Color.padHex(Math.round(this.b * 255).toString(16));\n        if (this.a < 1) {\n            hex += Color.padHex(Math.round(this.a * 255).toString(16));\n        }\n        return hex;\n    };\n    Color.prototype.toRgbaString = function (fractionDigits) {\n        if (fractionDigits === void 0) { fractionDigits = 3; }\n        var components = [Math.round(this.r * 255), Math.round(this.g * 255), Math.round(this.b * 255)];\n        var k = Math.pow(10, fractionDigits);\n        if (this.a !== 1) {\n            components.push(Math.round(this.a * k) / k);\n            return \"rgba(\" + components.join(', ') + \")\";\n        }\n        return \"rgb(\" + components.join(', ') + \")\";\n    };\n    Color.prototype.toString = function () {\n        if (this.a === 1) {\n            return this.toHexString();\n        }\n        return this.toRgbaString();\n    };\n    Color.prototype.toHSB = function () {\n        return Color.RGBtoHSB(this.r, this.g, this.b);\n    };\n    /**\n     * Converts the given RGB triple to an array of HSB (HSV) components.\n     * The hue component will be `NaN` for achromatic colors.\n     */\n    Color.RGBtoHSB = function (r, g, b) {\n        var min = Math.min(r, g, b);\n        var max = Math.max(r, g, b);\n        var S = max !== 0 ? (max - min) / max : 0;\n        var H = NaN;\n        // min == max, means all components are the same\n        // and the color is a shade of gray with no hue (H is NaN)\n        if (min !== max) {\n            var delta = max - min;\n            var rc = (max - r) / delta;\n            var gc = (max - g) / delta;\n            var bc = (max - b) / delta;\n            if (r === max) {\n                H = bc - gc;\n            }\n            else if (g === max) {\n                H = 2.0 + rc - bc;\n            }\n            else {\n                H = 4.0 + gc - rc;\n            }\n            H /= 6.0;\n            if (H < 0) {\n                H = H + 1.0;\n            }\n        }\n        return [H * 360, S, max];\n    };\n    /**\n     * Converts the given HSB (HSV) triple to an array of RGB components.\n     */\n    Color.HSBtoRGB = function (H, S, B) {\n        if (isNaN(H)) {\n            H = 0;\n        }\n        H = (((H % 360) + 360) % 360) / 360; // normalize hue to [0, 360] interval, then scale to [0, 1]\n        var r = 0;\n        var g = 0;\n        var b = 0;\n        if (S === 0) {\n            r = g = b = B;\n        }\n        else {\n            var h = (H - Math.floor(H)) * 6;\n            var f = h - Math.floor(h);\n            var p = B * (1 - S);\n            var q = B * (1 - S * f);\n            var t = B * (1 - S * (1 - f));\n            switch (h >> 0 // discard the floating point part of the number\n            ) {\n                case 0:\n                    r = B;\n                    g = t;\n                    b = p;\n                    break;\n                case 1:\n                    r = q;\n                    g = B;\n                    b = p;\n                    break;\n                case 2:\n                    r = p;\n                    g = B;\n                    b = t;\n                    break;\n                case 3:\n                    r = p;\n                    g = q;\n                    b = B;\n                    break;\n                case 4:\n                    r = t;\n                    g = p;\n                    b = B;\n                    break;\n                case 5:\n                    r = B;\n                    g = p;\n                    b = q;\n                    break;\n            }\n        }\n        return [r, g, b];\n    };\n    Color.prototype.derive = function (hueShift, saturationFactor, brightnessFactor, opacityFactor) {\n        var hsb = Color.RGBtoHSB(this.r, this.g, this.b);\n        var b = hsb[2];\n        if (b == 0 && brightnessFactor > 1.0) {\n            b = 0.05;\n        }\n        var h = (((hsb[0] + hueShift) % 360) + 360) % 360;\n        var s = Math.max(Math.min(hsb[1] * saturationFactor, 1.0), 0.0);\n        b = Math.max(Math.min(b * brightnessFactor, 1.0), 0.0);\n        var a = Math.max(Math.min(this.a * opacityFactor, 1.0), 0.0);\n        var rgba = Color.HSBtoRGB(h, s, b);\n        rgba.push(a);\n        return Color.fromArray(rgba);\n    };\n    Color.prototype.brighter = function () {\n        return this.derive(0, 1.0, 1.0 / 0.7, 1.0);\n    };\n    Color.prototype.darker = function () {\n        return this.derive(0, 1.0, 0.7, 1.0);\n    };\n    Color.interpolate = function (color, other) {\n        var c0 = Color.tryParseFromString(color);\n        var c1 = Color.tryParseFromString(other);\n        return function (t) {\n            var i = function (x, y) { return x * (1 - t) + y * t; };\n            var c = new Color(i(c0.r, c1.r), i(c0.g, c1.g), i(c0.b, c1.b), i(c0.a, c1.a));\n            return c.toString();\n        };\n    };\n    /**\n     * CSS Color Module Level 4:\n     * https://drafts.csswg.org/css-color/#named-colors\n     */\n    Color.nameToHex = Object.freeze({\n        aliceblue: '#F0F8FF',\n        antiquewhite: '#FAEBD7',\n        aqua: '#00FFFF',\n        aquamarine: '#7FFFD4',\n        azure: '#F0FFFF',\n        beige: '#F5F5DC',\n        bisque: '#FFE4C4',\n        black: '#000000',\n        blanchedalmond: '#FFEBCD',\n        blue: '#0000FF',\n        blueviolet: '#8A2BE2',\n        brown: '#A52A2A',\n        burlywood: '#DEB887',\n        cadetblue: '#5F9EA0',\n        chartreuse: '#7FFF00',\n        chocolate: '#D2691E',\n        coral: '#FF7F50',\n        cornflowerblue: '#6495ED',\n        cornsilk: '#FFF8DC',\n        crimson: '#DC143C',\n        cyan: '#00FFFF',\n        darkblue: '#00008B',\n        darkcyan: '#008B8B',\n        darkgoldenrod: '#B8860B',\n        darkgray: '#A9A9A9',\n        darkgreen: '#006400',\n        darkgrey: '#A9A9A9',\n        darkkhaki: '#BDB76B',\n        darkmagenta: '#8B008B',\n        darkolivegreen: '#556B2F',\n        darkorange: '#FF8C00',\n        darkorchid: '#9932CC',\n        darkred: '#8B0000',\n        darksalmon: '#E9967A',\n        darkseagreen: '#8FBC8F',\n        darkslateblue: '#483D8B',\n        darkslategray: '#2F4F4F',\n        darkslategrey: '#2F4F4F',\n        darkturquoise: '#00CED1',\n        darkviolet: '#9400D3',\n        deeppink: '#FF1493',\n        deepskyblue: '#00BFFF',\n        dimgray: '#696969',\n        dimgrey: '#696969',\n        dodgerblue: '#1E90FF',\n        firebrick: '#B22222',\n        floralwhite: '#FFFAF0',\n        forestgreen: '#228B22',\n        fuchsia: '#FF00FF',\n        gainsboro: '#DCDCDC',\n        ghostwhite: '#F8F8FF',\n        gold: '#FFD700',\n        goldenrod: '#DAA520',\n        gray: '#808080',\n        green: '#008000',\n        greenyellow: '#ADFF2F',\n        grey: '#808080',\n        honeydew: '#F0FFF0',\n        hotpink: '#FF69B4',\n        indianred: '#CD5C5C',\n        indigo: '#4B0082',\n        ivory: '#FFFFF0',\n        khaki: '#F0E68C',\n        lavender: '#E6E6FA',\n        lavenderblush: '#FFF0F5',\n        lawngreen: '#7CFC00',\n        lemonchiffon: '#FFFACD',\n        lightblue: '#ADD8E6',\n        lightcoral: '#F08080',\n        lightcyan: '#E0FFFF',\n        lightgoldenrodyellow: '#FAFAD2',\n        lightgray: '#D3D3D3',\n        lightgreen: '#90EE90',\n        lightgrey: '#D3D3D3',\n        lightpink: '#FFB6C1',\n        lightsalmon: '#FFA07A',\n        lightseagreen: '#20B2AA',\n        lightskyblue: '#87CEFA',\n        lightslategray: '#778899',\n        lightslategrey: '#778899',\n        lightsteelblue: '#B0C4DE',\n        lightyellow: '#FFFFE0',\n        lime: '#00FF00',\n        limegreen: '#32CD32',\n        linen: '#FAF0E6',\n        magenta: '#FF00FF',\n        maroon: '#800000',\n        mediumaquamarine: '#66CDAA',\n        mediumblue: '#0000CD',\n        mediumorchid: '#BA55D3',\n        mediumpurple: '#9370DB',\n        mediumseagreen: '#3CB371',\n        mediumslateblue: '#7B68EE',\n        mediumspringgreen: '#00FA9A',\n        mediumturquoise: '#48D1CC',\n        mediumvioletred: '#C71585',\n        midnightblue: '#191970',\n        mintcream: '#F5FFFA',\n        mistyrose: '#FFE4E1',\n        moccasin: '#FFE4B5',\n        navajowhite: '#FFDEAD',\n        navy: '#000080',\n        oldlace: '#FDF5E6',\n        olive: '#808000',\n        olivedrab: '#6B8E23',\n        orange: '#FFA500',\n        orangered: '#FF4500',\n        orchid: '#DA70D6',\n        palegoldenrod: '#EEE8AA',\n        palegreen: '#98FB98',\n        paleturquoise: '#AFEEEE',\n        palevioletred: '#DB7093',\n        papayawhip: '#FFEFD5',\n        peachpuff: '#FFDAB9',\n        peru: '#CD853F',\n        pink: '#FFC0CB',\n        plum: '#DDA0DD',\n        powderblue: '#B0E0E6',\n        purple: '#800080',\n        rebeccapurple: '#663399',\n        red: '#FF0000',\n        rosybrown: '#BC8F8F',\n        royalblue: '#4169E1',\n        saddlebrown: '#8B4513',\n        salmon: '#FA8072',\n        sandybrown: '#F4A460',\n        seagreen: '#2E8B57',\n        seashell: '#FFF5EE',\n        sienna: '#A0522D',\n        silver: '#C0C0C0',\n        skyblue: '#87CEEB',\n        slateblue: '#6A5ACD',\n        slategray: '#708090',\n        slategrey: '#708090',\n        snow: '#FFFAFA',\n        springgreen: '#00FF7F',\n        steelblue: '#4682B4',\n        tan: '#D2B48C',\n        teal: '#008080',\n        thistle: '#D8BFD8',\n        tomato: '#FF6347',\n        transparent: '#00000000',\n        turquoise: '#40E0D0',\n        violet: '#EE82EE',\n        wheat: '#F5DEB3',\n        white: '#FFFFFF',\n        whitesmoke: '#F5F5F5',\n        yellow: '#FFFF00',\n        yellowgreen: '#9ACD32',\n    });\n    return Color;\n}());\n\nvar __values$w = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar BREAK_TRANSFORM_CHAIN = Symbol('BREAK');\nvar CONFIG_KEY = '__decorator_config';\nfunction initialiseConfig(target, propertyKeyOrSymbol, propertyKey, valueStoreKey) {\n    if (Object.getOwnPropertyDescriptor(target, CONFIG_KEY) == null) {\n        Object.defineProperty(target, CONFIG_KEY, { value: {} });\n    }\n    var config = target[CONFIG_KEY];\n    if (config[propertyKey] != null) {\n        return config[propertyKey];\n    }\n    config[propertyKey] = { setters: [], getters: [] };\n    var descriptor = Object.getOwnPropertyDescriptor(target, propertyKeyOrSymbol);\n    var prevSet = descriptor === null || descriptor === void 0 ? void 0 : descriptor.set;\n    var prevGet = descriptor === null || descriptor === void 0 ? void 0 : descriptor.get;\n    var getter = function () {\n        var e_1, _a;\n        var _b, _c;\n        var value = prevGet ? prevGet.call(this) : this[valueStoreKey];\n        try {\n            for (var _d = __values$w((_c = (_b = config[propertyKey]) === null || _b === void 0 ? void 0 : _b.getters) !== null && _c !== void 0 ? _c : []), _e = _d.next(); !_e.done; _e = _d.next()) {\n                var transformFn = _e.value;\n                value = transformFn(this, propertyKeyOrSymbol, value);\n                if (value === BREAK_TRANSFORM_CHAIN) {\n                    return undefined;\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return value;\n    };\n    var setter = function (value) {\n        var e_2, _a;\n        var _b, _c;\n        var setters = (_c = (_b = config[propertyKey]) === null || _b === void 0 ? void 0 : _b.setters) !== null && _c !== void 0 ? _c : [];\n        var oldValue;\n        if (setters.some(function (f) { return f.length > 2; })) {\n            // Lazily retrieve old value.\n            oldValue = prevGet ? prevGet.call(this) : this[valueStoreKey];\n        }\n        try {\n            for (var setters_1 = __values$w(setters), setters_1_1 = setters_1.next(); !setters_1_1.done; setters_1_1 = setters_1.next()) {\n                var transformFn = setters_1_1.value;\n                value = transformFn(this, propertyKeyOrSymbol, value, oldValue);\n                if (value === BREAK_TRANSFORM_CHAIN) {\n                    return;\n                }\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (setters_1_1 && !setters_1_1.done && (_a = setters_1.return)) _a.call(setters_1);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        if (prevSet) {\n            prevSet.call(this, value);\n        }\n        else {\n            this[valueStoreKey] = value;\n        }\n    };\n    Object.defineProperty(target, propertyKeyOrSymbol, {\n        set: setter,\n        get: getter,\n        enumerable: true,\n        configurable: false,\n    });\n    return config[propertyKey];\n}\nfunction addTransformToInstanceProperty(setTransform, getTransform) {\n    return function (target, propertyKeyOrSymbol) {\n        var propertyKey = propertyKeyOrSymbol.toString();\n        var valueStoreKey = \"__\" + propertyKey;\n        var _a = initialiseConfig(target, propertyKeyOrSymbol, propertyKey, valueStoreKey), getters = _a.getters, setters = _a.setters;\n        setters.push(setTransform);\n        if (getTransform) {\n            getters.splice(0, 0, getTransform);\n        }\n    };\n}\n\nfunction Validate(predicate) {\n    return addTransformToInstanceProperty(function (target, prop, v) {\n        var _a, _b, _c;\n        if (predicate(v, { target: target })) {\n            return v;\n        }\n        var cleanKey = prop.toString().replace(/^_*/, '');\n        var targetClass = (_b = (_a = target.constructor) === null || _a === void 0 ? void 0 : _a.className) !== null && _b !== void 0 ? _b : (_c = target.constructor) === null || _c === void 0 ? void 0 : _c.name;\n        if ((targetClass === null || targetClass === void 0 ? void 0 : targetClass.length) < 3) {\n            targetClass = null;\n        }\n        var targetClassName = targetClass ? \"of [\" + targetClass + \"] \" : '';\n        if (predicate.message) {\n            Logger.warn(\"Property [\" + cleanKey + \"] \" + targetClassName + \"cannot be set to [\" + JSON.stringify(v) + \"]; \" + predicate.message + \", ignoring.\");\n        }\n        else {\n            Logger.warn(\"Property [\" + cleanKey + \"] \" + targetClassName + \"cannot be set to [\" + JSON.stringify(v) + \"], ignoring.\");\n        }\n        return BREAK_TRANSFORM_CHAIN;\n    });\n}\nfunction predicateWithMessage(predicate, message) {\n    predicate.message = message;\n    return predicate;\n}\nvar OPTIONAL = function (v, ctx, predicate) {\n    return v === undefined || predicate(v, ctx);\n};\nvar ARRAY = function (length, predicate) {\n    return predicateWithMessage(function (v, ctx) {\n        return Array.isArray(v) &&\n            (length ? v.length === length : true) &&\n            (predicate ? v.every(function (e) { return predicate(e, ctx); }) : true);\n    }, \"expecting an Array\");\n};\nvar OPT_ARRAY = function (length) {\n    return predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, ARRAY(length)); }, 'expecting an optional Array');\n};\nvar AND = function () {\n    var predicates = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        predicates[_i] = arguments[_i];\n    }\n    return predicateWithMessage(function (v, ctx) { return predicates.every(function (p) { return p(v, ctx); }); }, predicates\n        .map(function (p) { return p.message; })\n        .filter(function (m) { return m != null; })\n        .join(' AND '));\n};\nvar OR = function () {\n    var predicates = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        predicates[_i] = arguments[_i];\n    }\n    return predicateWithMessage(function (v, ctx) { return predicates.some(function (p) { return p(v, ctx); }); }, predicates\n        .map(function (p) { return p.message; })\n        .filter(function (m) { return m != null; })\n        .join(' OR '));\n};\nvar isComparable = function (v) {\n    return v != null && !isNaN(v);\n};\nvar LESS_THAN = function (otherField) {\n    return predicateWithMessage(function (v, ctx) {\n        return !isComparable(v) || !isComparable(ctx.target[otherField]) || v < ctx.target[otherField];\n    }, \"expected to be less than \" + otherField);\n};\nvar GREATER_THAN = function (otherField) {\n    return predicateWithMessage(function (v, ctx) {\n        return !isComparable(v) || !isComparable(ctx.target[otherField]) || v > ctx.target[otherField];\n    }, \"expected to be greater than \" + otherField);\n};\nvar FUNCTION = predicateWithMessage(function (v) { return typeof v === 'function'; }, 'expecting a Function');\nvar OPT_FUNCTION = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, FUNCTION); }, \"expecting an optional Function\");\nvar BOOLEAN = predicateWithMessage(function (v) { return v === true || v === false; }, 'expecting a Boolean');\nvar OPT_BOOLEAN = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, BOOLEAN); }, 'expecting an optional Boolean');\nvar STRING = predicateWithMessage(function (v) { return typeof v === 'string'; }, 'expecting a String');\nvar OPT_STRING = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, STRING); }, 'expecting an optional String');\nvar DATE = predicateWithMessage(function (v) { return v instanceof Date && !isNaN(+v); }, 'expecting a Date object');\nvar OPT_DATE = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, DATE); }, 'expecting an optional Date');\npredicateWithMessage(ARRAY(undefined, DATE), 'expecting an Array of Date objects');\nvar DATETIME_MS = NUMBER(0);\nvar OPT_DATETIME_MS = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, DATETIME_MS); }, 'expecting an optional number');\nvar OPT_DATE_OR_DATETIME_MS = OR(OPT_DATE, OPT_DATETIME_MS);\nvar colorMessage = \"A color string can be in one of the following formats to be valid: #rgb, #rrggbb, rgb(r, g, b), rgba(r, g, b, a) or a CSS color name such as 'white', 'orange', 'cyan', etc\";\nvar COLOR_STRING = predicateWithMessage(function (v) {\n    if (typeof v !== 'string') {\n        return false;\n    }\n    return Color.validColorString(v);\n}, \"expecting a color String. \" + colorMessage);\nvar OPT_COLOR_STRING = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, COLOR_STRING); }, \"expecting an optional color String. \" + colorMessage);\nvar COLOR_STRING_ARRAY = predicateWithMessage(ARRAY(undefined, COLOR_STRING), \"expecting an Array of color strings. \" + colorMessage);\nvar OPT_COLOR_STRING_ARRAY = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, COLOR_STRING_ARRAY); }, \"expecting an optional Array of color strings. \" + colorMessage);\nfunction NUMBER(min, max) {\n    var message = \"expecting a finite Number\" + ((min !== undefined ? ', more than or equal to ' + min : '') +\n        (max !== undefined ? ', less than or equal to ' + max : ''));\n    return predicateWithMessage(function (v) {\n        return typeof v === 'number' &&\n            Number.isFinite(v) &&\n            (min !== undefined ? v >= min : true) &&\n            (max !== undefined ? v <= max : true);\n    }, message);\n}\nfunction OPT_NUMBER(min, max) {\n    var message = \"expecting an optional finite Number\" + ((min !== undefined ? ', more than or equal to ' + min : '') +\n        (max !== undefined ? ', less than or equal to ' + max : ''));\n    return predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, NUMBER(min, max)); }, message);\n}\nfunction NUMBER_OR_NAN(min, max) {\n    // Can be NaN or finite number\n    var message = \"expecting a finite Number\" + ((min !== undefined ? ', more than or equal to ' + min : '') +\n        (max !== undefined ? ', less than or equal to ' + max : ''));\n    return predicateWithMessage(function (v) {\n        return typeof v === 'number' &&\n            (isNaN(v) ||\n                (Number.isFinite(v) && (min !== undefined ? v >= min : true) && (max !== undefined ? v <= max : true)));\n    }, message);\n}\nvar NUMBER_ARRAY = predicateWithMessage(ARRAY(undefined, NUMBER()), 'expecting an Array of numbers');\nvar OPT_NUMBER_ARRAY = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, NUMBER_ARRAY); }, 'expecting an optional Array of numbers');\nvar STRING_ARRAY = predicateWithMessage(ARRAY(undefined, STRING), 'expecting an Array of strings');\npredicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, STRING_ARRAY); }, 'expecting an optional Array of strings');\nfunction STRING_UNION() {\n    var values = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        values[_i] = arguments[_i];\n    }\n    var message = \"expecting one of: \" + values.join(', ');\n    return predicateWithMessage(function (v) { return typeof v === 'string' && values.indexOf(v) >= 0; }, message);\n}\nvar BOOLEAN_ARRAY = predicateWithMessage(ARRAY(undefined, BOOLEAN), 'expecting an Array of boolean values');\npredicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, BOOLEAN_ARRAY); }, 'expecting an optional Array of boolean values');\nvar FONT_WEIGHTS = [\n    'normal',\n    'bold',\n    'bolder',\n    'lighter',\n    '100',\n    '200',\n    '300',\n    '400',\n    '500',\n    '600',\n    '700',\n    '800',\n    '900',\n];\nvar FONT_STYLE = predicateWithMessage(function (v) { return v === 'normal' || v === 'italic' || v === 'oblique'; }, \"expecting a font style keyword such as 'normal', 'italic' or 'oblique'\");\nvar OPT_FONT_STYLE = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, FONT_STYLE); }, \"expecting an optional font style keyword such as 'normal', 'italic' or 'oblique'\");\nvar FONT_WEIGHT = predicateWithMessage(function (v) { return FONT_WEIGHTS.includes(v); }, \"expecting a font weight keyword such as 'normal', 'bold' or 'bolder' or a numeric value such as 100, 300 or 600\");\nvar OPT_FONT_WEIGHT = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, FONT_WEIGHT); }, \"expecting an optional font weight keyword such as 'normal', 'bold' or 'bolder' or a numeric value such as 100, 300 or 600\");\nvar LINE_DASH = predicateWithMessage(ARRAY(undefined, NUMBER(0)), 'expecting an Array of numbers specifying the length in pixels of alternating dashes and gaps, for example, [6, 3] means dashes with a length of 6 pixels with gaps between of 3 pixels.');\nvar OPT_LINE_DASH = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, LINE_DASH); }, 'expecting an optional Array of numbers specifying the length in pixels of alternating dashes and gaps, for example, [6, 3] means dashes with a length of 6 pixels with gaps between of 3 pixels.');\nvar LINE_CAPS = ['butt', 'round', 'square'];\nvar LINE_CAP = predicateWithMessage(function (v) { return LINE_CAPS.includes(v); }, \"expecting a line cap keyword such as 'butt', 'round' or 'square'\");\npredicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, LINE_CAP); }, \"expecting an optional line cap keyword such as 'butt', 'round' or 'square'\");\nvar LINE_JOINS = ['round', 'bevel', 'miter'];\nvar LINE_JOIN = predicateWithMessage(function (v) { return LINE_JOINS.includes(v); }, \"expecting a line join keyword such as 'round', 'bevel' or 'miter'\");\npredicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, LINE_JOIN); }, \"expecting an optional line join keyword such as 'round', 'bevel' or 'miter'\");\nvar POSITIONS = ['top', 'right', 'bottom', 'left'];\nvar POSITION = predicateWithMessage(function (v) { return POSITIONS.includes(v); }, \"expecting a position keyword such as 'top', 'right', 'bottom' or 'left\");\nvar INTERACTION_RANGES = ['exact', 'nearest'];\nvar INTERACTION_RANGE = predicateWithMessage(function (v) { return (typeof v === 'number' && Number.isFinite(v)) || INTERACTION_RANGES.includes(v); }, \"expecting an interaction range of 'exact', 'nearest' or a number\");\nvar TEXT_WRAPS = ['never', 'always', 'hyphenate', 'on-space'];\nvar TEXT_WRAP = predicateWithMessage(function (v) { return TEXT_WRAPS.includes(v); }, \"expecting a text wrap strategy keyword such as 'never', 'always', 'hyphenate', 'on-space'\");\n\n/**\n * Constants to declare the expected nominal zIndex for all types of layer in chart rendering.\n */\nvar Layers;\n(function (Layers) {\n    Layers[Layers[\"SERIES_BACKGROUND_ZINDEX\"] = -10] = \"SERIES_BACKGROUND_ZINDEX\";\n    Layers[Layers[\"AXIS_GRID_ZINDEX\"] = 0] = \"AXIS_GRID_ZINDEX\";\n    Layers[Layers[\"AXIS_ZINDEX\"] = 20] = \"AXIS_ZINDEX\";\n    Layers[Layers[\"SERIES_CROSSLINE_RANGE_ZINDEX\"] = 30] = \"SERIES_CROSSLINE_RANGE_ZINDEX\";\n    Layers[Layers[\"SERIES_LAYER_ZINDEX\"] = 500] = \"SERIES_LAYER_ZINDEX\";\n    Layers[Layers[\"SERIES_CROSSHAIR_ZINDEX\"] = 1000] = \"SERIES_CROSSHAIR_ZINDEX\";\n    Layers[Layers[\"SERIES_LABEL_ZINDEX\"] = 1500] = \"SERIES_LABEL_ZINDEX\";\n    Layers[Layers[\"SERIES_CROSSLINE_LINE_ZINDEX\"] = 2500] = \"SERIES_CROSSLINE_LINE_ZINDEX\";\n    Layers[Layers[\"LEGEND_ZINDEX\"] = 3000] = \"LEGEND_ZINDEX\";\n})(Layers || (Layers = {}));\n\nvar ChartAxisDirection;\n(function (ChartAxisDirection) {\n    ChartAxisDirection[\"X\"] = \"x\";\n    ChartAxisDirection[\"Y\"] = \"y\";\n})(ChartAxisDirection || (ChartAxisDirection = {}));\n\nvar __values$v = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nfunction extendDomain(values, domain) {\n    var e_1, _a;\n    if (domain === void 0) { domain = [Infinity, -Infinity]; }\n    try {\n        for (var values_1 = __values$v(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {\n            var value = values_1_1.value;\n            if (typeof value !== 'number') {\n                continue;\n            }\n            if (value < domain[0]) {\n                domain[0] = value;\n            }\n            if (value > domain[1]) {\n                domain[1] = value;\n            }\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    return domain;\n}\n\nvar __assign$s = (undefined && undefined.__assign) || function () {\n    __assign$s = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$s.apply(this, arguments);\n};\nvar __read$D = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __values$u = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __spreadArray$o = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nfunction toKeyString(keys) {\n    return keys\n        .map(function (v) {\n        if (v == null) {\n            return v;\n        }\n        else if (typeof v === 'number' || typeof v === 'string' || typeof v === 'boolean') {\n            return v;\n        }\n        else if (typeof v === 'object') {\n            return JSON.stringify(v);\n        }\n        return v;\n    })\n        .join('-');\n}\nfunction round(val) {\n    var accuracy = 10000;\n    if (Number.isInteger(val)) {\n        return val;\n    }\n    else if (Math.abs(val) > accuracy) {\n        return Math.trunc(val);\n    }\n    return Math.round(val * accuracy) / accuracy;\n}\nfunction fixNumericExtent(extent) {\n    if (extent === undefined) {\n        // Don't return a range, there is no range.\n        return [];\n    }\n    var _a = __read$D(extent, 2), min = _a[0], max = _a[1];\n    min = +min;\n    max = +max;\n    if (min === 0 && max === 0) {\n        // domain has zero length and the single valid value is 0. Use the default of [0, 1].\n        return [0, 1];\n    }\n    if (min === Infinity && max === -Infinity) {\n        // There's no data in the domain.\n        return [];\n    }\n    if (min === Infinity) {\n        min = 0;\n    }\n    if (max === -Infinity) {\n        max = 0;\n    }\n    if (!(isNumber$4(min) && isNumber$4(max))) {\n        return [];\n    }\n    return [min, max];\n}\nvar INVALID_VALUE = Symbol('invalid');\nvar DataModel = /** @class */ (function () {\n    function DataModel(opts) {\n        var e_1, _a, e_2, _b, e_3, _c;\n        var _d;\n        var props = opts.props;\n        // Validate that keys appear before values in the definitions, as output ordering depends\n        // on configuration ordering, but we process keys before values.\n        var keys = true;\n        try {\n            for (var props_1 = __values$u(props), props_1_1 = props_1.next(); !props_1_1.done; props_1_1 = props_1.next()) {\n                var next = props_1_1.value;\n                if (next.type === 'key' && !keys) {\n                    throw new Error('AG Charts - internal config error: keys must come before values.');\n                }\n                if (next.type === 'value' && keys) {\n                    keys = false;\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (props_1_1 && !props_1_1.done && (_a = props_1.return)) _a.call(props_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        this.opts = __assign$s({ dataVisible: true }, opts);\n        this.keys = props\n            .filter(function (def) { return def.type === 'key'; })\n            .map(function (def, index) { return (__assign$s(__assign$s({}, def), { index: index, missing: false })); });\n        this.values = props\n            .filter(function (def) { return def.type === 'value'; })\n            .map(function (def, index) { return (__assign$s(__assign$s({}, def), { index: index, missing: false })); });\n        this.aggregates = props.filter(function (def) { return def.type === 'aggregate'; });\n        this.groupProcessors = props.filter(function (def) { return def.type === 'group-value-processor'; });\n        this.propertyProcessors = props.filter(function (def) { return def.type === 'property-value-processor'; });\n        this.reducers = props.filter(function (def) { return def.type === 'reducer'; });\n        this.processors = props.filter(function (def) { return def.type === 'processor'; });\n        try {\n            for (var _e = __values$u((_d = this.aggregates) !== null && _d !== void 0 ? _d : []), _f = _e.next(); !_f.done; _f = _e.next()) {\n                var properties = _f.value.properties;\n                if (properties.length === 0)\n                    continue;\n                var _loop_1 = function (property) {\n                    if (typeof property === 'string' && !this_1.values.some(function (def) { return def.property === property; })) {\n                        throw new Error(\"AG Charts - internal config error: aggregate properties must match defined properties (\" + properties + \").\");\n                    }\n                    if (typeof property !== 'string' && !this_1.values.some(function (def) { return def.id === property.id; })) {\n                        throw new Error(\"AG Charts - internal config error: aggregate properties must match defined properties (\" + properties + \").\");\n                    }\n                };\n                var this_1 = this;\n                try {\n                    for (var properties_1 = (e_3 = void 0, __values$u(properties)), properties_1_1 = properties_1.next(); !properties_1_1.done; properties_1_1 = properties_1.next()) {\n                        var property = properties_1_1.value;\n                        _loop_1(property);\n                    }\n                }\n                catch (e_3_1) { e_3 = { error: e_3_1 }; }\n                finally {\n                    try {\n                        if (properties_1_1 && !properties_1_1.done && (_c = properties_1.return)) _c.call(properties_1);\n                    }\n                    finally { if (e_3) throw e_3.error; }\n                }\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n    }\n    DataModel.prototype.resolveProcessedDataIndexById = function (searchId) {\n        var _a = this, keys = _a.keys, values = _a.values;\n        var def = __spreadArray$o(__spreadArray$o([], __read$D(keys)), __read$D(values)).find(function (_a) {\n            var id = _a.id;\n            return id === searchId;\n        });\n        if (!def)\n            return undefined;\n        if ((def === null || def === void 0 ? void 0 : def.type) === 'key' || (def === null || def === void 0 ? void 0 : def.type) === 'value') {\n            return { type: def.type, index: def.index };\n        }\n    };\n    DataModel.prototype.resolveProcessedDataDefById = function (searchId) {\n        var _a = this, keys = _a.keys, values = _a.values;\n        var def = __spreadArray$o(__spreadArray$o([], __read$D(keys)), __read$D(values)).find(function (_a) {\n            var id = _a.id;\n            return id === searchId;\n        });\n        if (!def)\n            return undefined;\n        return def;\n    };\n    DataModel.prototype.getDomain = function (searchId, processedData) {\n        var idx = this.resolveProcessedDataIndexById(searchId);\n        if (!idx) {\n            return [];\n        }\n        return processedData.domain[idx.type === 'key' ? 'keys' : 'values'][idx.index];\n    };\n    DataModel.prototype.processData = function (data) {\n        var e_4, _a, e_5, _b;\n        var _c = this, _d = _c.opts, groupByKeys = _d.groupByKeys, groupByFn = _d.groupByFn, aggregates = _c.aggregates, groupProcessors = _c.groupProcessors, reducers = _c.reducers, processors = _c.processors, propertyProcessors = _c.propertyProcessors;\n        var start = performance.now();\n        try {\n            for (var _e = __values$u(__spreadArray$o(__spreadArray$o([], __read$D(this.keys)), __read$D(this.values))), _f = _e.next(); !_f.done; _f = _e.next()) {\n                var def = _f.value;\n                def.missing = false;\n            }\n        }\n        catch (e_4_1) { e_4 = { error: e_4_1 }; }\n        finally {\n            try {\n                if (_f && !_f.done && (_a = _e.return)) _a.call(_e);\n            }\n            finally { if (e_4) throw e_4.error; }\n        }\n        if (groupByKeys && this.keys.length === 0) {\n            return undefined;\n        }\n        var processedData = this.extractData(data);\n        if (groupByKeys) {\n            processedData = this.groupData(processedData);\n        }\n        else if (groupByFn) {\n            processedData = this.groupData(processedData, groupByFn(processedData));\n        }\n        if (groupProcessors.length > 0) {\n            this.postProcessGroups(processedData);\n        }\n        if (aggregates.length > 0) {\n            this.aggregateData(processedData);\n        }\n        if (propertyProcessors.length > 0) {\n            this.postProcessProperties(processedData);\n        }\n        if (reducers.length > 0) {\n            this.reduceData(processedData);\n        }\n        if (processors.length > 0) {\n            this.postProcessData(processedData);\n        }\n        try {\n            for (var _g = __values$u(__spreadArray$o(__spreadArray$o([], __read$D(this.keys)), __read$D(this.values))), _h = _g.next(); !_h.done; _h = _g.next()) {\n                var def = _h.value;\n                if (def.missing) {\n                    Logger.warnOnce(\"the key '\" + def.property + \"' was not found in at least one data element.\");\n                }\n            }\n        }\n        catch (e_5_1) { e_5 = { error: e_5_1 }; }\n        finally {\n            try {\n                if (_h && !_h.done && (_b = _g.return)) _b.call(_g);\n            }\n            finally { if (e_5) throw e_5.error; }\n        }\n        var end = performance.now();\n        processedData.time = end - start;\n        if (DataModel.DEBUG()) {\n            logProcessedData(processedData);\n        }\n        return processedData;\n    };\n    DataModel.prototype.valueIdxLookup = function (prop) {\n        var result;\n        if (typeof prop === 'string') {\n            result = this.values.findIndex(function (def) { return def.property === prop; });\n        }\n        else {\n            result = this.values.findIndex(function (def) { return def.id === prop.id; });\n        }\n        if (result >= 0) {\n            return result;\n        }\n        throw new Error('AG Charts - configuration error, unknown property: ' + prop);\n    };\n    DataModel.prototype.extractData = function (data) {\n        var e_6, _a, e_7, _b, e_8, _c;\n        var _d = this, keyDefs = _d.keys, valueDefs = _d.values, dataVisible = _d.opts.dataVisible;\n        var _e = this.initDataDomainProcessor(), dataDomain = _e.dataDomain, processValue = _e.processValue;\n        var resultData = new Array(dataVisible ? data.length : 0);\n        var resultDataIdx = 0;\n        try {\n            for (var data_1 = __values$u(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\n                var datum = data_1_1.value;\n                var keys = dataVisible ? new Array(keyDefs.length) : undefined;\n                var keyIdx = 0;\n                var key = void 0;\n                try {\n                    for (var keyDefs_1 = (e_7 = void 0, __values$u(keyDefs)), keyDefs_1_1 = keyDefs_1.next(); !keyDefs_1_1.done; keyDefs_1_1 = keyDefs_1.next()) {\n                        var def = keyDefs_1_1.value;\n                        key = processValue(def, datum, key);\n                        if (key === INVALID_VALUE)\n                            break;\n                        if (keys) {\n                            keys[keyIdx++] = key;\n                        }\n                    }\n                }\n                catch (e_7_1) { e_7 = { error: e_7_1 }; }\n                finally {\n                    try {\n                        if (keyDefs_1_1 && !keyDefs_1_1.done && (_b = keyDefs_1.return)) _b.call(keyDefs_1);\n                    }\n                    finally { if (e_7) throw e_7.error; }\n                }\n                if (key === INVALID_VALUE)\n                    continue;\n                var values = dataVisible && valueDefs.length > 0 ? new Array(valueDefs.length) : undefined;\n                var valueIdx = 0;\n                var value = void 0;\n                try {\n                    for (var valueDefs_1 = (e_8 = void 0, __values$u(valueDefs)), valueDefs_1_1 = valueDefs_1.next(); !valueDefs_1_1.done; valueDefs_1_1 = valueDefs_1.next()) {\n                        var def = valueDefs_1_1.value;\n                        value = processValue(def, datum, value);\n                        if (value === INVALID_VALUE)\n                            break;\n                        if (values) {\n                            values[valueIdx++] = value;\n                        }\n                    }\n                }\n                catch (e_8_1) { e_8 = { error: e_8_1 }; }\n                finally {\n                    try {\n                        if (valueDefs_1_1 && !valueDefs_1_1.done && (_c = valueDefs_1.return)) _c.call(valueDefs_1);\n                    }\n                    finally { if (e_8) throw e_8.error; }\n                }\n                if (value === INVALID_VALUE)\n                    continue;\n                if (dataVisible) {\n                    resultData[resultDataIdx++] = {\n                        datum: datum,\n                        keys: keys,\n                        values: values,\n                    };\n                }\n            }\n        }\n        catch (e_6_1) { e_6 = { error: e_6_1 }; }\n        finally {\n            try {\n                if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);\n            }\n            finally { if (e_6) throw e_6.error; }\n        }\n        resultData.length = resultDataIdx;\n        var propertyDomain = function (def) {\n            var _a;\n            var result = dataDomain.get((_a = def.id) !== null && _a !== void 0 ? _a : def.property).domain;\n            if (Array.isArray(result) && result[0] > result[1]) {\n                // Ignore starting values.\n                return [];\n            }\n            return __spreadArray$o([], __read$D(result));\n        };\n        return {\n            type: 'ungrouped',\n            data: resultData,\n            domain: {\n                keys: keyDefs.map(function (def) { return propertyDomain(def); }),\n                values: valueDefs.map(function (def) { return propertyDomain(def); }),\n            },\n            indices: {\n                keys: keyDefs.reduce(function (r, _a) {\n                    var property = _a.property, index = _a.index;\n                    r[property] = index;\n                    return r;\n                }, {}),\n                values: valueDefs.reduce(function (r, _a) {\n                    var property = _a.property, index = _a.index;\n                    r[property] = index;\n                    return r;\n                }, {}),\n            },\n            defs: {\n                keys: keyDefs,\n                values: valueDefs,\n            },\n            time: 0,\n        };\n    };\n    DataModel.prototype.groupData = function (data, groupingFn) {\n        var e_9, _a, e_10, _b;\n        var processedData = new Map();\n        try {\n            for (var _c = __values$u(data.data), _d = _c.next(); !_d.done; _d = _c.next()) {\n                var dataEntry = _d.value;\n                var keys = dataEntry.keys, values = dataEntry.values, datum = dataEntry.datum;\n                var group = groupingFn ? groupingFn(dataEntry) : keys;\n                var groupStr = toKeyString(group);\n                if (processedData.has(groupStr)) {\n                    var existingData = processedData.get(groupStr);\n                    existingData.values.push(values);\n                    existingData.datum.push(datum);\n                }\n                else {\n                    processedData.set(groupStr, { keys: group, values: [values], datum: [datum] });\n                }\n            }\n        }\n        catch (e_9_1) { e_9 = { error: e_9_1 }; }\n        finally {\n            try {\n                if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n            }\n            finally { if (e_9) throw e_9.error; }\n        }\n        var resultData = new Array(processedData.size);\n        var resultGroups = new Array(processedData.size);\n        var dataIndex = 0;\n        try {\n            for (var _e = __values$u(processedData.entries()), _f = _e.next(); !_f.done; _f = _e.next()) {\n                var _g = __read$D(_f.value, 2), _h = _g[1], keys = _h.keys, values = _h.values, datum = _h.datum;\n                resultGroups[dataIndex] = keys;\n                resultData[dataIndex++] = {\n                    keys: keys,\n                    values: values,\n                    datum: datum,\n                };\n            }\n        }\n        catch (e_10_1) { e_10 = { error: e_10_1 }; }\n        finally {\n            try {\n                if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n            }\n            finally { if (e_10) throw e_10.error; }\n        }\n        return __assign$s(__assign$s({}, data), { type: 'grouped', data: resultData, domain: __assign$s(__assign$s({}, data.domain), { groups: resultGroups }) });\n    };\n    DataModel.prototype.aggregateData = function (processedData) {\n        var e_11, _a, e_12, _b, e_13, _c;\n        var _this = this;\n        var _d, _e, _f, _g, _h, _j, _k;\n        var aggDefs = this.aggregates;\n        if (!aggDefs)\n            return;\n        var resultAggValues = aggDefs.map(function () { return [Infinity, -Infinity]; });\n        var resultAggValueIndices = aggDefs.map(function (defs) { return defs.properties.map(function (prop) { return _this.valueIdxLookup(prop); }); });\n        var resultAggFns = aggDefs.map(function (def) { return def.aggregateFunction; });\n        var resultGroupAggFns = aggDefs.map(function (def) { return def.groupAggregateFunction; });\n        var resultFinalFns = aggDefs.map(function (def) { return def.finalFunction; });\n        try {\n            for (var _l = __values$u(processedData.data), _m = _l.next(); !_m.done; _m = _l.next()) {\n                var group = _m.value;\n                var values = group.values;\n                (_d = group.aggValues) !== null && _d !== void 0 ? _d : (group.aggValues = new Array(resultAggValueIndices.length));\n                if (processedData.type === 'ungrouped') {\n                    values = [values];\n                }\n                var resultIdx = 0;\n                try {\n                    for (var resultAggValueIndices_1 = (e_12 = void 0, __values$u(resultAggValueIndices)), resultAggValueIndices_1_1 = resultAggValueIndices_1.next(); !resultAggValueIndices_1_1.done; resultAggValueIndices_1_1 = resultAggValueIndices_1.next()) {\n                        var indices = resultAggValueIndices_1_1.value;\n                        var groupAggValues = (_f = (_e = resultGroupAggFns[resultIdx]) === null || _e === void 0 ? void 0 : _e.call(resultGroupAggFns)) !== null && _f !== void 0 ? _f : extendDomain([]);\n                        var _loop_2 = function (distinctValues) {\n                            var valuesToAgg = indices.map(function (valueIdx) { return distinctValues[valueIdx]; });\n                            var valuesAgg = resultAggFns[resultIdx](valuesToAgg, group.keys);\n                            if (valuesAgg) {\n                                groupAggValues =\n                                    (_h = (_g = resultGroupAggFns[resultIdx]) === null || _g === void 0 ? void 0 : _g.call(resultGroupAggFns, valuesAgg, groupAggValues)) !== null && _h !== void 0 ? _h : extendDomain(valuesAgg, groupAggValues);\n                            }\n                        };\n                        try {\n                            for (var values_1 = (e_13 = void 0, __values$u(values)), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {\n                                var distinctValues = values_1_1.value;\n                                _loop_2(distinctValues);\n                            }\n                        }\n                        catch (e_13_1) { e_13 = { error: e_13_1 }; }\n                        finally {\n                            try {\n                                if (values_1_1 && !values_1_1.done && (_c = values_1.return)) _c.call(values_1);\n                            }\n                            finally { if (e_13) throw e_13.error; }\n                        }\n                        var finalValues = ((_k = (_j = resultFinalFns[resultIdx]) === null || _j === void 0 ? void 0 : _j.call(resultFinalFns, groupAggValues)) !== null && _k !== void 0 ? _k : groupAggValues).map(function (v) {\n                            return round(v);\n                        });\n                        extendDomain(finalValues, resultAggValues[resultIdx]);\n                        group.aggValues[resultIdx++] = finalValues;\n                    }\n                }\n                catch (e_12_1) { e_12 = { error: e_12_1 }; }\n                finally {\n                    try {\n                        if (resultAggValueIndices_1_1 && !resultAggValueIndices_1_1.done && (_b = resultAggValueIndices_1.return)) _b.call(resultAggValueIndices_1);\n                    }\n                    finally { if (e_12) throw e_12.error; }\n                }\n            }\n        }\n        catch (e_11_1) { e_11 = { error: e_11_1 }; }\n        finally {\n            try {\n                if (_m && !_m.done && (_a = _l.return)) _a.call(_l);\n            }\n            finally { if (e_11) throw e_11.error; }\n        }\n        processedData.domain.aggValues = resultAggValues;\n    };\n    DataModel.prototype.postProcessGroups = function (processedData) {\n        var e_14, _a, e_15, _b, e_16, _c, e_17, _d;\n        var _this = this;\n        var groupProcessors = this.groupProcessors;\n        if (!groupProcessors)\n            return;\n        try {\n            for (var groupProcessors_1 = __values$u(groupProcessors), groupProcessors_1_1 = groupProcessors_1.next(); !groupProcessors_1_1.done; groupProcessors_1_1 = groupProcessors_1.next()) {\n                var processor = groupProcessors_1_1.value;\n                var valueIndexes = processor.properties.map(function (p) { return _this.valueIdxLookup(p); });\n                var adjustFn = processor.adjust();\n                if (processedData.type === 'grouped') {\n                    try {\n                        for (var _e = (e_15 = void 0, __values$u(processedData.data)), _f = _e.next(); !_f.done; _f = _e.next()) {\n                            var group = _f.value;\n                            try {\n                                for (var _g = (e_16 = void 0, __values$u(group.values)), _h = _g.next(); !_h.done; _h = _g.next()) {\n                                    var values = _h.value;\n                                    if (values) {\n                                        adjustFn(values, valueIndexes);\n                                    }\n                                }\n                            }\n                            catch (e_16_1) { e_16 = { error: e_16_1 }; }\n                            finally {\n                                try {\n                                    if (_h && !_h.done && (_c = _g.return)) _c.call(_g);\n                                }\n                                finally { if (e_16) throw e_16.error; }\n                            }\n                        }\n                    }\n                    catch (e_15_1) { e_15 = { error: e_15_1 }; }\n                    finally {\n                        try {\n                            if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n                        }\n                        finally { if (e_15) throw e_15.error; }\n                    }\n                }\n                else {\n                    try {\n                        for (var _j = (e_17 = void 0, __values$u(processedData.data)), _k = _j.next(); !_k.done; _k = _j.next()) {\n                            var group = _k.value;\n                            if (group.values) {\n                                adjustFn(group.values, valueIndexes);\n                            }\n                        }\n                    }\n                    catch (e_17_1) { e_17 = { error: e_17_1 }; }\n                    finally {\n                        try {\n                            if (_k && !_k.done && (_d = _j.return)) _d.call(_j);\n                        }\n                        finally { if (e_17) throw e_17.error; }\n                    }\n                }\n            }\n        }\n        catch (e_14_1) { e_14 = { error: e_14_1 }; }\n        finally {\n            try {\n                if (groupProcessors_1_1 && !groupProcessors_1_1.done && (_a = groupProcessors_1.return)) _a.call(groupProcessors_1);\n            }\n            finally { if (e_14) throw e_14.error; }\n        }\n    };\n    DataModel.prototype.postProcessProperties = function (processedData) {\n        var e_18, _a;\n        var propertyProcessors = this.propertyProcessors;\n        if (!propertyProcessors)\n            return;\n        try {\n            for (var propertyProcessors_1 = __values$u(propertyProcessors), propertyProcessors_1_1 = propertyProcessors_1.next(); !propertyProcessors_1_1.done; propertyProcessors_1_1 = propertyProcessors_1.next()) {\n                var _b = propertyProcessors_1_1.value, adjust = _b.adjust, property = _b.property;\n                adjust()(processedData, this.valueIdxLookup(property));\n            }\n        }\n        catch (e_18_1) { e_18 = { error: e_18_1 }; }\n        finally {\n            try {\n                if (propertyProcessors_1_1 && !propertyProcessors_1_1.done && (_a = propertyProcessors_1.return)) _a.call(propertyProcessors_1);\n            }\n            finally { if (e_18) throw e_18.error; }\n        }\n    };\n    DataModel.prototype.reduceData = function (processedData) {\n        var e_19, _a, e_20, _b;\n        var _c;\n        var reducerDefs = this.reducers;\n        var reducers = reducerDefs.map(function (def) { return def.reducer(); });\n        var accValues = reducerDefs.map(function (def) { return def.initialValue; });\n        try {\n            for (var _d = __values$u(processedData.data), _e = _d.next(); !_e.done; _e = _d.next()) {\n                var group = _e.value;\n                var reducerIndex = 0;\n                try {\n                    for (var reducers_1 = (e_20 = void 0, __values$u(reducers)), reducers_1_1 = reducers_1.next(); !reducers_1_1.done; reducers_1_1 = reducers_1.next()) {\n                        var reducer = reducers_1_1.value;\n                        accValues[reducerIndex] = reducer(accValues[reducerIndex], group);\n                        reducerIndex++;\n                    }\n                }\n                catch (e_20_1) { e_20 = { error: e_20_1 }; }\n                finally {\n                    try {\n                        if (reducers_1_1 && !reducers_1_1.done && (_b = reducers_1.return)) _b.call(reducers_1);\n                    }\n                    finally { if (e_20) throw e_20.error; }\n                }\n            }\n        }\n        catch (e_19_1) { e_19 = { error: e_19_1 }; }\n        finally {\n            try {\n                if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n            }\n            finally { if (e_19) throw e_19.error; }\n        }\n        for (var accIdx = 0; accIdx < accValues.length; accIdx++) {\n            (_c = processedData.reduced) !== null && _c !== void 0 ? _c : (processedData.reduced = {});\n            processedData.reduced[reducerDefs[accIdx].property] = accValues[accIdx];\n        }\n    };\n    DataModel.prototype.postProcessData = function (processedData) {\n        var e_21, _a;\n        var _b;\n        var processorDefs = this.processors;\n        try {\n            for (var processorDefs_1 = __values$u(processorDefs), processorDefs_1_1 = processorDefs_1.next(); !processorDefs_1_1.done; processorDefs_1_1 = processorDefs_1.next()) {\n                var def = processorDefs_1_1.value;\n                (_b = processedData.reduced) !== null && _b !== void 0 ? _b : (processedData.reduced = {});\n                processedData.reduced[def.property] = def.calculate(processedData);\n            }\n        }\n        catch (e_21_1) { e_21 = { error: e_21_1 }; }\n        finally {\n            try {\n                if (processorDefs_1_1 && !processorDefs_1_1.done && (_a = processorDefs_1.return)) _a.call(processorDefs_1);\n            }\n            finally { if (e_21) throw e_21.error; }\n        }\n    };\n    DataModel.prototype.initDataDomainProcessor = function () {\n        var _a = this, keyDefs = _a.keys, valueDefs = _a.values;\n        var dataDomain = new Map();\n        var processorFns = new Map();\n        var initDataDomainKey = function (key, type, updateDataDomain) {\n            if (type === 'category') {\n                updateDataDomain.set(key, { type: type, domain: new Set() });\n            }\n            else {\n                updateDataDomain.set(key, { type: type, domain: [Infinity, -Infinity] });\n            }\n        };\n        var initDataDomain = function (updateDataDomain) {\n            if (updateDataDomain === void 0) { updateDataDomain = dataDomain; }\n            keyDefs.forEach(function (def) { var _a; return initDataDomainKey((_a = def.id) !== null && _a !== void 0 ? _a : def.property, def.valueType, updateDataDomain); });\n            valueDefs.forEach(function (def) { var _a; return initDataDomainKey((_a = def.id) !== null && _a !== void 0 ? _a : def.property, def.valueType, updateDataDomain); });\n            return updateDataDomain;\n        };\n        initDataDomain();\n        var processValue = function (def, datum, previousDatum) {\n            var _a, _b, _c, _d, _e;\n            var valueInDatum = def.property in datum;\n            var missingValueDef = 'missingValue' in def;\n            if (!def.missing && !valueInDatum && !missingValueDef) {\n                def.missing = true;\n            }\n            if (!dataDomain.has((_a = def.id) !== null && _a !== void 0 ? _a : def.property)) {\n                initDataDomain(dataDomain);\n            }\n            var value = valueInDatum ? datum[def.property] : def.missingValue;\n            if (valueInDatum) {\n                var valid = (_c = (_b = def.validation) === null || _b === void 0 ? void 0 : _b.call(def, value)) !== null && _c !== void 0 ? _c : true;\n                if (!valid) {\n                    if ('invalidValue' in def) {\n                        value = def.invalidValue;\n                    }\n                    else {\n                        return INVALID_VALUE;\n                    }\n                }\n            }\n            if (def.processor) {\n                if (!processorFns.has(def)) {\n                    processorFns.set(def, def.processor());\n                }\n                value = (_d = processorFns.get(def)) === null || _d === void 0 ? void 0 : _d(value, previousDatum !== INVALID_VALUE ? previousDatum : undefined);\n            }\n            var meta = dataDomain.get((_e = def.id) !== null && _e !== void 0 ? _e : def.property);\n            if ((meta === null || meta === void 0 ? void 0 : meta.type) === 'category') {\n                meta.domain.add(value);\n            }\n            else if ((meta === null || meta === void 0 ? void 0 : meta.type) === 'range') {\n                if (meta.domain[0] > value) {\n                    meta.domain[0] = value;\n                }\n                if (meta.domain[1] < value) {\n                    meta.domain[1] = value;\n                }\n            }\n            return value;\n        };\n        return { dataDomain: dataDomain, processValue: processValue, initDataDomain: initDataDomain };\n    };\n    DataModel.DEBUG = function () { var _a; return (_a = [true, 'data-model'].includes(windowValue('agChartsDebug'))) !== null && _a !== void 0 ? _a : false; };\n    return DataModel;\n}());\nfunction logProcessedData(processedData) {\n    var _a, _b;\n    var log = function (name, data) {\n        if (data.length > 0) {\n            // eslint-disable-next-line no-console\n            console.log(name);\n            // eslint-disable-next-line no-console\n            console.table(data);\n        }\n    };\n    // eslint-disable-next-line no-console\n    console.log({ processedData: processedData });\n    log('Key Domains', processedData.domain.keys);\n    log('Group Domains', (_a = processedData.domain.groups) !== null && _a !== void 0 ? _a : []);\n    log('Value Domains', processedData.domain.values);\n    log('Aggregate Domains', (_b = processedData.domain.aggValues) !== null && _b !== void 0 ? _b : []);\n    if (processedData.type === 'grouped') {\n        var flattenedValues = processedData.data.reduce(function (acc, next) {\n            var _a, _b;\n            var keys = (_a = next.keys) !== null && _a !== void 0 ? _a : [];\n            var aggValues = (_b = next.aggValues) !== null && _b !== void 0 ? _b : [];\n            var skipKeys = next.keys.map(function () { return undefined; });\n            var skipAggValues = aggValues === null || aggValues === void 0 ? void 0 : aggValues.map(function () { return undefined; });\n            acc.push.apply(acc, __spreadArray$o([], __read$D(next.values.map(function (v, i) { return __spreadArray$o(__spreadArray$o(__spreadArray$o([], __read$D((i === 0 ? keys : skipKeys))), __read$D((v !== null && v !== void 0 ? v : []))), __read$D((i == 0 ? aggValues : skipAggValues))); }))));\n            return acc;\n        }, []);\n        log('Values', flattenedValues);\n    }\n    else {\n        var flattenedValues = processedData.data.reduce(function (acc, next) {\n            var _a;\n            var aggValues = (_a = next.aggValues) !== null && _a !== void 0 ? _a : [];\n            acc.push(__spreadArray$o(__spreadArray$o(__spreadArray$o([], __read$D(next.keys)), __read$D(next.values)), __read$D(aggValues)));\n            return acc;\n        }, []);\n        log('Values', flattenedValues);\n    }\n}\n\nfunction createDeprecationWarning() {\n    return function (key, message) {\n        var msg = [\"Property [\" + key + \"] is deprecated.\", message].filter(function (v) { return v != null; }).join(' ');\n        Logger.warnOnce(msg);\n    };\n}\nfunction Deprecated(message, opts) {\n    var def = opts === null || opts === void 0 ? void 0 : opts.default;\n    var warn = createDeprecationWarning();\n    return addTransformToInstanceProperty(function (_, key, value) {\n        if (value !== def) {\n            warn(key.toString(), message);\n        }\n        return value;\n    });\n}\nfunction DeprecatedAndRenamedTo(newPropName, mapValue) {\n    var warnDeprecated = createDeprecationWarning();\n    return addTransformToInstanceProperty(function (target, key, value) {\n        if (value !== target[newPropName]) {\n            warnDeprecated(key.toString(), \"Use [\" + newPropName + \"] instead.\");\n            target[newPropName] = mapValue ? mapValue(value) : value;\n        }\n        return BREAK_TRANSFORM_CHAIN;\n    }, function (target, key) {\n        warnDeprecated(key.toString(), \"Use [\" + newPropName + \"] instead.\");\n        return target[newPropName];\n    });\n}\n\nvar __decorate$1T = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __values$t = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar DEFAULT_TOOLTIP_CLASS = 'ag-chart-tooltip';\nvar defaultTooltipCss$1 = \"\\n.\" + DEFAULT_TOOLTIP_CLASS + \" {\\n    transition: transform 0.1s ease;\\n    display: table;\\n    position: fixed;\\n    left: 0px;\\n    top: 0px;\\n    white-space: nowrap;\\n    z-index: 99999;\\n    font: 12px Verdana, sans-serif;\\n    color: black;\\n    background: rgb(244, 244, 244);\\n    border-radius: 5px;\\n    box-shadow: 0 0 1px rgba(3, 3, 3, 0.7), 0.5vh 0.5vh 1vh rgba(3, 3, 3, 0.25);\\n}\\n\\n.\" + DEFAULT_TOOLTIP_CLASS + \"-no-interaction {\\n    pointer-events: none;\\n    user-select: none;\\n}\\n\\n.\" + DEFAULT_TOOLTIP_CLASS + \"-no-animation {\\n    transition: none !important;\\n}\\n\\n.\" + DEFAULT_TOOLTIP_CLASS + \"-hidden {\\n    visibility: hidden;\\n}\\n\\n.\" + DEFAULT_TOOLTIP_CLASS + \"-title {\\n    font-weight: bold;\\n    padding: 7px;\\n    border-top-left-radius: 5px;\\n    border-top-right-radius: 5px;\\n    color: white;\\n    background-color: #888888;\\n    border-top-left-radius: 5px;\\n    border-top-right-radius: 5px;\\n}\\n\\n.\" + DEFAULT_TOOLTIP_CLASS + \"-content {\\n    padding: 7px;\\n    line-height: 1.7em;\\n    border-bottom-left-radius: 5px;\\n    border-bottom-right-radius: 5px;\\n    overflow: hidden;\\n}\\n\\n.\" + DEFAULT_TOOLTIP_CLASS + \"-content:empty {\\n    padding: 0;\\n    height: 7px;\\n}\\n\\n.\" + DEFAULT_TOOLTIP_CLASS + \"-arrow::before {\\n    content: \\\"\\\";\\n\\n    position: absolute;\\n    top: 100%;\\n    left: 50%;\\n    transform: translateX(-50%);\\n\\n    border: 6px solid #989898;\\n\\n    border-left-color: transparent;\\n    border-right-color: transparent;\\n    border-top-color: #989898;\\n    border-bottom-color: transparent;\\n\\n    width: 0;\\n    height: 0;\\n\\n    margin: 0 auto;\\n}\\n\\n.\" + DEFAULT_TOOLTIP_CLASS + \"-arrow::after {\\n    content: \\\"\\\";\\n\\n    position: absolute;\\n    top: 100%;\\n    left: 50%;\\n    transform: translateX(-50%);\\n\\n    border: 5px solid black;\\n\\n    border-left-color: transparent;\\n    border-right-color: transparent;\\n    border-top-color: rgb(244, 244, 244);\\n    border-bottom-color: transparent;\\n\\n    width: 0;\\n    height: 0;\\n\\n    margin: 0 auto;\\n}\\n\\n.ag-chart-wrapper {\\n    box-sizing: border-box;\\n    overflow: hidden;\\n}\\n\";\nfunction toTooltipHtml$1(input, defaults) {\n    var _a, _b, _c, _d;\n    if (typeof input === 'string') {\n        return input;\n    }\n    defaults = defaults !== null && defaults !== void 0 ? defaults : {};\n    var _e = input.content, content = _e === void 0 ? (_a = defaults.content) !== null && _a !== void 0 ? _a : '' : _e, _f = input.title, title = _f === void 0 ? (_b = defaults.title) !== null && _b !== void 0 ? _b : undefined : _f, _g = input.color, color = _g === void 0 ? (_c = defaults.color) !== null && _c !== void 0 ? _c : 'white' : _g, _h = input.backgroundColor, backgroundColor = _h === void 0 ? (_d = defaults.backgroundColor) !== null && _d !== void 0 ? _d : '#888' : _h;\n    var titleHtml = title\n        ? \"<div class=\\\"\" + DEFAULT_TOOLTIP_CLASS + \"-title\\\"\\n        style=\\\"color: \" + color + \"; background-color: \" + backgroundColor + \"\\\">\" + title + \"</div>\"\n        : '';\n    return titleHtml + \"<div class=\\\"\" + DEFAULT_TOOLTIP_CLASS + \"-content\\\">\" + content + \"</div>\";\n}\nvar POSITION_TYPES = ['pointer', 'node'];\nvar POSITION_TYPE = predicateWithMessage(function (v) { return POSITION_TYPES.includes(v); }, \"expecting a position type keyword such as 'pointer' or 'node'\");\nvar TooltipPosition = /** @class */ (function () {\n    function TooltipPosition() {\n        /** The type of positioning for the tooltip. By default, the tooltip follows the pointer. */\n        this.type = 'pointer';\n        /** The horizontal offset in pixels for the position of the tooltip. */\n        this.xOffset = 0;\n        /** The vertical offset in pixels for the position of the tooltip. */\n        this.yOffset = 0;\n    }\n    __decorate$1T([\n        Validate(POSITION_TYPE)\n    ], TooltipPosition.prototype, \"type\", void 0);\n    __decorate$1T([\n        Validate(NUMBER())\n    ], TooltipPosition.prototype, \"xOffset\", void 0);\n    __decorate$1T([\n        Validate(NUMBER())\n    ], TooltipPosition.prototype, \"yOffset\", void 0);\n    return TooltipPosition;\n}());\nvar Tooltip = /** @class */ (function () {\n    function Tooltip(canvasElement, document, container) {\n        var _this = this;\n        this.enableInteraction = false;\n        this.enabled = true;\n        this.showArrow = undefined;\n        this.class = undefined;\n        this.lastClass = undefined;\n        this.delay = 0;\n        this.range = 'nearest';\n        this.position = new TooltipPosition();\n        this.showTimeout = 0;\n        this._showArrow = true;\n        this.tooltipRoot = container;\n        var element = document.createElement('div');\n        this.element = this.tooltipRoot.appendChild(element);\n        this.element.classList.add(DEFAULT_TOOLTIP_CLASS);\n        this.canvasElement = canvasElement;\n        // Detect when the chart becomes invisible and hide the tooltip as well.\n        if (window.IntersectionObserver) {\n            var observer = new IntersectionObserver(function (entries) {\n                var e_1, _a;\n                try {\n                    for (var entries_1 = __values$t(entries), entries_1_1 = entries_1.next(); !entries_1_1.done; entries_1_1 = entries_1.next()) {\n                        var entry = entries_1_1.value;\n                        if (entry.target === _this.canvasElement && entry.intersectionRatio === 0) {\n                            _this.toggle(false);\n                        }\n                    }\n                }\n                catch (e_1_1) { e_1 = { error: e_1_1 }; }\n                finally {\n                    try {\n                        if (entries_1_1 && !entries_1_1.done && (_a = entries_1.return)) _a.call(entries_1);\n                    }\n                    finally { if (e_1) throw e_1.error; }\n                }\n            }, { root: this.tooltipRoot });\n            observer.observe(this.canvasElement);\n            this.observer = observer;\n        }\n        if (Tooltip.tooltipDocuments.indexOf(document) < 0) {\n            var styleElement = document.createElement('style');\n            styleElement.innerHTML = defaultTooltipCss$1;\n            // Make sure the default tooltip style goes before other styles so it can be overridden.\n            document.head.insertBefore(styleElement, document.head.querySelector('style'));\n            Tooltip.tooltipDocuments.push(document);\n        }\n    }\n    Tooltip.prototype.destroy = function () {\n        var parentNode = this.element.parentNode;\n        if (parentNode) {\n            parentNode.removeChild(this.element);\n        }\n        if (this.observer) {\n            this.observer.unobserve(this.canvasElement);\n        }\n    };\n    Tooltip.prototype.isVisible = function () {\n        var element = this.element;\n        return !element.classList.contains(DEFAULT_TOOLTIP_CLASS + '-hidden');\n    };\n    Tooltip.prototype.updateClass = function (visible, showArrow) {\n        var _a = this, element = _a.element, newClass = _a.class, lastClass = _a.lastClass, enableInteraction = _a.enableInteraction;\n        var wasVisible = this.isVisible();\n        var toggleClass = function (name, include) {\n            var className = DEFAULT_TOOLTIP_CLASS + \"-\" + name;\n            if (include) {\n                element.classList.add(className);\n            }\n            else {\n                element.classList.remove(className);\n            }\n        };\n        toggleClass('no-animation', !wasVisible && !!visible); // No animation on first show.\n        toggleClass('no-interaction', !enableInteraction); // Prevent interaction.\n        toggleClass('hidden', !visible); // Hide if not visible.\n        toggleClass('arrow', !!showArrow); // Add arrow if tooltip is constrained.\n        if (newClass !== lastClass) {\n            if (lastClass) {\n                element.classList.remove(lastClass);\n            }\n            if (newClass) {\n                element.classList.add(newClass);\n            }\n            this.lastClass = newClass;\n        }\n    };\n    /**\n     * Shows tooltip at the given event's coordinates.\n     * If the `html` parameter is missing, moves the existing tooltip to the new position.\n     */\n    Tooltip.prototype.show = function (meta, html, instantly) {\n        var _this = this;\n        var _a, _b, _c, _d, _e, _f, _g;\n        if (instantly === void 0) { instantly = false; }\n        var _h = this, element = _h.element, canvasElement = _h.canvasElement;\n        if (html !== undefined) {\n            element.innerHTML = html;\n        }\n        else if (!element.innerHTML) {\n            return;\n        }\n        var limit = function (low, actual, high) {\n            return Math.max(Math.min(actual, high), low);\n        };\n        var xOffset = (_b = (_a = meta.position) === null || _a === void 0 ? void 0 : _a.xOffset) !== null && _b !== void 0 ? _b : 0;\n        var yOffset = (_d = (_c = meta.position) === null || _c === void 0 ? void 0 : _c.yOffset) !== null && _d !== void 0 ? _d : 0;\n        var canvasRect = canvasElement.getBoundingClientRect();\n        var naiveLeft = canvasRect.left + meta.offsetX - element.clientWidth / 2 + xOffset;\n        var naiveTop = canvasRect.top + meta.offsetY - element.clientHeight - 8 + yOffset;\n        var windowBounds = this.getWindowBoundingBox();\n        var maxLeft = windowBounds.x + windowBounds.width - element.clientWidth - 1;\n        var maxTop = windowBounds.y + windowBounds.height - element.clientHeight;\n        var left = limit(windowBounds.x, naiveLeft, maxLeft);\n        var top = limit(windowBounds.y, naiveTop, maxTop);\n        var constrained = left !== naiveLeft || top !== naiveTop;\n        var defaultShowArrow = !constrained && !xOffset && !yOffset;\n        var showArrow = (_f = (_e = meta.showArrow) !== null && _e !== void 0 ? _e : this.showArrow) !== null && _f !== void 0 ? _f : defaultShowArrow;\n        this.updateShowArrow(showArrow);\n        element.style.transform = \"translate(\" + Math.round(left) + \"px, \" + Math.round(top) + \"px)\";\n        this.enableInteraction = (_g = meta.enableInteraction) !== null && _g !== void 0 ? _g : false;\n        if (this.delay > 0 && !instantly) {\n            this.toggle(false);\n            this.showTimeout = window.setTimeout(function () {\n                _this.toggle(true);\n            }, this.delay);\n            return;\n        }\n        this.toggle(true);\n    };\n    Tooltip.prototype.getWindowBoundingBox = function () {\n        return new BBox(0, 0, window.innerWidth, window.innerHeight);\n    };\n    Tooltip.prototype.toggle = function (visible) {\n        if (!visible) {\n            window.clearTimeout(this.showTimeout);\n        }\n        this.updateClass(visible, this._showArrow);\n    };\n    Tooltip.prototype.pointerLeftOntoTooltip = function (event) {\n        var _a;\n        if (!this.enableInteraction)\n            return false;\n        var classList = (_a = event.sourceEvent.relatedTarget) === null || _a === void 0 ? void 0 : _a.classList;\n        var classes = ['', '-title', '-content'];\n        var classListContains = Boolean(classes.filter(function (c) { return classList === null || classList === void 0 ? void 0 : classList.contains(\"\" + DEFAULT_TOOLTIP_CLASS + c); }));\n        return classList !== undefined && classListContains;\n    };\n    Tooltip.prototype.updateShowArrow = function (show) {\n        this._showArrow = show;\n    };\n    Tooltip.tooltipDocuments = [];\n    __decorate$1T([\n        Validate(BOOLEAN)\n    ], Tooltip.prototype, \"enabled\", void 0);\n    __decorate$1T([\n        Validate(OPT_BOOLEAN)\n    ], Tooltip.prototype, \"showArrow\", void 0);\n    __decorate$1T([\n        Validate(OPT_STRING)\n    ], Tooltip.prototype, \"class\", void 0);\n    __decorate$1T([\n        Validate(NUMBER(0))\n    ], Tooltip.prototype, \"delay\", void 0);\n    __decorate$1T([\n        DeprecatedAndRenamedTo('range', function (value) { return (value ? 'nearest' : 'exact'); })\n    ], Tooltip.prototype, \"tracking\", void 0);\n    __decorate$1T([\n        Validate(INTERACTION_RANGE)\n    ], Tooltip.prototype, \"range\", void 0);\n    return Tooltip;\n}());\n\nvar __values$s = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nfunction sumValues(values, accumulator) {\n    var e_1, _a;\n    if (accumulator === void 0) { accumulator = [0, 0]; }\n    try {\n        for (var values_1 = __values$s(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {\n            var value = values_1_1.value;\n            if (typeof value !== 'number') {\n                continue;\n            }\n            if (value < 0) {\n                accumulator[0] += value;\n            }\n            if (value > 0) {\n                accumulator[1] += value;\n            }\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    return accumulator;\n}\nfunction sum(props) {\n    var result = {\n        properties: props,\n        type: 'aggregate',\n        aggregateFunction: function (values) { return sumValues(values); },\n    };\n    return result;\n}\nfunction groupSum(props) {\n    return {\n        type: 'aggregate',\n        properties: props,\n        aggregateFunction: function (values) { return sumValues(values); },\n        groupAggregateFunction: function (next, acc) {\n            var _a, _b;\n            if (acc === void 0) { acc = [0, 0]; }\n            acc[0] += (_a = next === null || next === void 0 ? void 0 : next[0]) !== null && _a !== void 0 ? _a : 0;\n            acc[1] += (_b = next === null || next === void 0 ? void 0 : next[1]) !== null && _b !== void 0 ? _b : 0;\n            return acc;\n        },\n    };\n}\nfunction groupCount() {\n    return {\n        type: 'aggregate',\n        properties: [],\n        aggregateFunction: function () { return [0, 1]; },\n        groupAggregateFunction: function (next, acc) {\n            var _a, _b;\n            if (acc === void 0) { acc = [0, 0]; }\n            acc[0] += (_a = next === null || next === void 0 ? void 0 : next[0]) !== null && _a !== void 0 ? _a : 0;\n            acc[1] += (_b = next === null || next === void 0 ? void 0 : next[1]) !== null && _b !== void 0 ? _b : 0;\n            return acc;\n        },\n    };\n}\nfunction groupAverage(props) {\n    var result = {\n        properties: props,\n        type: 'aggregate',\n        aggregateFunction: function (values) { return sumValues(values); },\n        groupAggregateFunction: function (next, acc) {\n            var _a, _b;\n            if (acc === void 0) { acc = [0, 0, -1]; }\n            acc[0] += (_a = next === null || next === void 0 ? void 0 : next[0]) !== null && _a !== void 0 ? _a : 0;\n            acc[1] += (_b = next === null || next === void 0 ? void 0 : next[1]) !== null && _b !== void 0 ? _b : 0;\n            acc[2]++;\n            return acc;\n        },\n        finalFunction: function (acc) {\n            if (acc === void 0) { acc = [0, 0, 0]; }\n            var result = acc[0] + acc[1];\n            if (result >= 0) {\n                return [0, result / acc[2]];\n            }\n            return [result / acc[2], 0];\n        },\n    };\n    return result;\n}\nfunction area(props, aggFn) {\n    var result = {\n        properties: props,\n        type: 'aggregate',\n        aggregateFunction: function (values, keyRange) {\n            if (keyRange === void 0) { keyRange = []; }\n            var keyWidth = keyRange[1] - keyRange[0];\n            return aggFn.aggregateFunction(values).map(function (v) { return v / keyWidth; });\n        },\n    };\n    if (aggFn.groupAggregateFunction) {\n        result.groupAggregateFunction = aggFn.groupAggregateFunction;\n    }\n    return result;\n}\nfunction accumulatedValue() {\n    return function () {\n        var value = 0;\n        return function (datum) {\n            if (typeof datum !== 'number')\n                return datum;\n            if (isNaN(datum))\n                return datum;\n            value += datum;\n            return value;\n        };\n    };\n}\n\nvar __extends$Z = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign$r = (undefined && undefined.__assign) || function () {\n    __assign$r = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$r.apply(this, arguments);\n};\nvar __decorate$1S = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __rest$4 = (undefined && undefined.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nvar __values$r = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read$C = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$n = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\n/** Modes of matching user interactions to rendered nodes (e.g. hover or click) */\nvar SeriesNodePickMode;\n(function (SeriesNodePickMode) {\n    /** Pick matches based upon pick coordinates being inside a matching shape/marker. */\n    SeriesNodePickMode[SeriesNodePickMode[\"EXACT_SHAPE_MATCH\"] = 0] = \"EXACT_SHAPE_MATCH\";\n    /** Pick matches by nearest category/X-axis value, then distance within that category/X-value. */\n    SeriesNodePickMode[SeriesNodePickMode[\"NEAREST_BY_MAIN_AXIS_FIRST\"] = 1] = \"NEAREST_BY_MAIN_AXIS_FIRST\";\n    /** Pick matches by nearest category value, then distance within that category. */\n    SeriesNodePickMode[SeriesNodePickMode[\"NEAREST_BY_MAIN_CATEGORY_AXIS_FIRST\"] = 2] = \"NEAREST_BY_MAIN_CATEGORY_AXIS_FIRST\";\n    /** Pick matches based upon distance to ideal position */\n    SeriesNodePickMode[SeriesNodePickMode[\"NEAREST_NODE\"] = 3] = \"NEAREST_NODE\";\n})(SeriesNodePickMode || (SeriesNodePickMode = {}));\nfunction keyProperty(propName, continuous, opts) {\n    if (opts === void 0) { opts = {}; }\n    var result = __assign$r({ property: propName, type: 'key', valueType: continuous ? 'range' : 'category', validation: function (v) { return checkDatum(v, continuous) != null; } }, opts);\n    return result;\n}\nfunction valueProperty(propName, continuous, opts) {\n    if (opts === void 0) { opts = {}; }\n    var result = __assign$r({ property: propName, type: 'value', valueType: continuous ? 'range' : 'category', validation: function (v) { return checkDatum(v, continuous) != null; } }, opts);\n    return result;\n}\nfunction rangedValueProperty(propName, opts) {\n    if (opts === void 0) { opts = {}; }\n    var _a = opts.min, min = _a === void 0 ? -Infinity : _a, _b = opts.max, max = _b === void 0 ? Infinity : _b, defOpts = __rest$4(opts, [\"min\", \"max\"]);\n    return __assign$r({ type: 'value', property: propName, valueType: 'range', validation: function (v) { return checkDatum(v, true) != null; }, processor: function () { return function (datum) {\n            if (typeof datum !== 'number')\n                return datum;\n            if (isNaN(datum))\n                return datum;\n            return Math.min(Math.max(datum, min), max);\n        }; } }, defOpts);\n}\nfunction accumulativeValueProperty(propName, continuous, opts) {\n    if (opts === void 0) { opts = {}; }\n    var result = __assign$r(__assign$r({}, valueProperty(propName, continuous, opts)), { processor: accumulatedValue() });\n    return result;\n}\nvar SeriesNodeBaseClickEvent = /** @class */ (function () {\n    function SeriesNodeBaseClickEvent(nativeEvent, datum, series) {\n        this.type = 'nodeClick';\n        this.event = nativeEvent;\n        this.datum = datum.datum;\n        this.seriesId = series.id;\n    }\n    return SeriesNodeBaseClickEvent;\n}());\nvar SeriesNodeClickEvent = /** @class */ (function (_super) {\n    __extends$Z(SeriesNodeClickEvent, _super);\n    function SeriesNodeClickEvent() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return SeriesNodeClickEvent;\n}(SeriesNodeBaseClickEvent));\nvar SeriesNodeDoubleClickEvent = /** @class */ (function (_super) {\n    __extends$Z(SeriesNodeDoubleClickEvent, _super);\n    function SeriesNodeDoubleClickEvent() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'nodeDoubleClick';\n        return _this;\n    }\n    return SeriesNodeDoubleClickEvent;\n}(SeriesNodeBaseClickEvent));\nvar SeriesItemHighlightStyle = /** @class */ (function () {\n    function SeriesItemHighlightStyle() {\n        this.fill = 'yellow';\n        this.fillOpacity = undefined;\n        this.stroke = undefined;\n        this.strokeWidth = undefined;\n    }\n    __decorate$1S([\n        Validate(OPT_COLOR_STRING)\n    ], SeriesItemHighlightStyle.prototype, \"fill\", void 0);\n    __decorate$1S([\n        Validate(OPT_NUMBER(0, 1))\n    ], SeriesItemHighlightStyle.prototype, \"fillOpacity\", void 0);\n    __decorate$1S([\n        Validate(OPT_COLOR_STRING)\n    ], SeriesItemHighlightStyle.prototype, \"stroke\", void 0);\n    __decorate$1S([\n        Validate(OPT_NUMBER(0))\n    ], SeriesItemHighlightStyle.prototype, \"strokeWidth\", void 0);\n    return SeriesItemHighlightStyle;\n}());\nvar SeriesHighlightStyle = /** @class */ (function () {\n    function SeriesHighlightStyle() {\n        this.strokeWidth = undefined;\n        this.dimOpacity = undefined;\n        this.enabled = undefined;\n    }\n    __decorate$1S([\n        Validate(OPT_NUMBER(0))\n    ], SeriesHighlightStyle.prototype, \"strokeWidth\", void 0);\n    __decorate$1S([\n        Validate(OPT_NUMBER(0, 1))\n    ], SeriesHighlightStyle.prototype, \"dimOpacity\", void 0);\n    __decorate$1S([\n        Validate(OPT_BOOLEAN)\n    ], SeriesHighlightStyle.prototype, \"enabled\", void 0);\n    return SeriesHighlightStyle;\n}());\nvar TextHighlightStyle = /** @class */ (function () {\n    function TextHighlightStyle() {\n        this.color = 'black';\n    }\n    __decorate$1S([\n        Validate(OPT_COLOR_STRING)\n    ], TextHighlightStyle.prototype, \"color\", void 0);\n    return TextHighlightStyle;\n}());\nvar HighlightStyle = /** @class */ (function () {\n    function HighlightStyle() {\n        this.item = new SeriesItemHighlightStyle();\n        this.series = new SeriesHighlightStyle();\n        this.text = new TextHighlightStyle();\n    }\n    return HighlightStyle;\n}());\nvar SeriesTooltip = /** @class */ (function () {\n    function SeriesTooltip() {\n        this.enabled = true;\n        this.showArrow = undefined;\n        this.interaction = new SeriesTooltipInteraction();\n        this.position = new TooltipPosition();\n    }\n    __decorate$1S([\n        Validate(BOOLEAN)\n    ], SeriesTooltip.prototype, \"enabled\", void 0);\n    __decorate$1S([\n        Validate(OPT_BOOLEAN)\n    ], SeriesTooltip.prototype, \"showArrow\", void 0);\n    return SeriesTooltip;\n}());\nvar SeriesTooltipInteraction = /** @class */ (function () {\n    function SeriesTooltipInteraction() {\n        this.enabled = false;\n    }\n    __decorate$1S([\n        Validate(BOOLEAN)\n    ], SeriesTooltipInteraction.prototype, \"enabled\", void 0);\n    return SeriesTooltipInteraction;\n}());\nvar Series = /** @class */ (function (_super) {\n    __extends$Z(Series, _super);\n    function Series(opts) {\n        var _this = _super.call(this) || this;\n        _this.id = createId$1(_this);\n        // The group node that contains all the nodes used to render this series.\n        _this.rootGroup = new Group({ name: 'seriesRoot' });\n        _this.directions = [ChartAxisDirection.X, ChartAxisDirection.Y];\n        // Flag to determine if we should recalculate node data.\n        _this.nodeDataRefresh = true;\n        _this._data = undefined;\n        _this._visible = true;\n        _this.showInLegend = true;\n        _this.cursor = 'default';\n        _this.nodeClickRange = 'exact';\n        _this._declarationOrder = -1;\n        _this.highlightStyle = new HighlightStyle();\n        _this.ctx = opts.moduleCtx;\n        var _a = opts.useSeriesGroupLayer, useSeriesGroupLayer = _a === void 0 ? true : _a, _b = opts.useLabelLayer, useLabelLayer = _b === void 0 ? false : _b, _c = opts.pickModes, pickModes = _c === void 0 ? [SeriesNodePickMode.NEAREST_BY_MAIN_AXIS_FIRST] : _c, _d = opts.directionKeys, directionKeys = _d === void 0 ? {} : _d, _e = opts.directionNames, directionNames = _e === void 0 ? {} : _e;\n        var rootGroup = _this.rootGroup;\n        _this.directionKeys = directionKeys;\n        _this.directionNames = directionNames;\n        _this.contentGroup = rootGroup.appendChild(new Group({\n            name: _this.id + \"-content\",\n            layer: useSeriesGroupLayer,\n            zIndex: Layers.SERIES_LAYER_ZINDEX,\n            zIndexSubOrder: [function () { return _this._declarationOrder; }, 0],\n        }));\n        _this.highlightGroup = rootGroup.appendChild(new Group({\n            name: _this.id + \"-highlight\",\n            layer: true,\n            zIndex: Layers.SERIES_LAYER_ZINDEX,\n            zIndexSubOrder: [function () { return _this._declarationOrder; }, 15000],\n        }));\n        _this.highlightNode = _this.highlightGroup.appendChild(new Group({ name: 'highlightNode' }));\n        _this.highlightLabel = _this.highlightGroup.appendChild(new Group({ name: 'highlightLabel' }));\n        _this.highlightNode.zIndex = 0;\n        _this.highlightLabel.zIndex = 10;\n        _this.pickModes = pickModes;\n        if (useLabelLayer) {\n            _this.labelGroup = rootGroup.appendChild(new Group({\n                name: _this.id + \"-series-labels\",\n                layer: true,\n                zIndex: Layers.SERIES_LABEL_ZINDEX,\n            }));\n        }\n        return _this;\n    }\n    Object.defineProperty(Series.prototype, \"type\", {\n        get: function () {\n            var _a;\n            return (_a = this.constructor.type) !== null && _a !== void 0 ? _a : '';\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Series.prototype, \"data\", {\n        get: function () {\n            return this._data;\n        },\n        set: function (input) {\n            this._data = input;\n            this.nodeDataRefresh = true;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Series.prototype.hasData = function () {\n        var data = this.data;\n        return data && (!Array.isArray(data) || data.length > 0);\n    };\n    Object.defineProperty(Series.prototype, \"visible\", {\n        get: function () {\n            return this._visible;\n        },\n        set: function (value) {\n            this._visible = value;\n            this.visibleChanged();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Series.prototype.getBandScalePadding = function () {\n        return { inner: 1, outer: 0 };\n    };\n    Series.prototype.addChartEventListeners = function () {\n        return;\n    };\n    Series.prototype.destroy = function () {\n        // Override point for sub-classes.\n    };\n    Series.prototype.getDirectionValues = function (direction, properties) {\n        var _this = this;\n        var resolvedDirection = this.resolveKeyDirection(direction);\n        var keys = properties === null || properties === void 0 ? void 0 : properties[resolvedDirection];\n        var values = [];\n        var flatten = function () {\n            var e_1, _a;\n            var array = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                array[_i] = arguments[_i];\n            }\n            try {\n                for (var array_1 = __values$r(array), array_1_1 = array_1.next(); !array_1_1.done; array_1_1 = array_1.next()) {\n                    var value = array_1_1.value;\n                    addValue(value);\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (array_1_1 && !array_1_1.done && (_a = array_1.return)) _a.call(array_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n        };\n        var addValue = function (value) {\n            if (Array.isArray(value)) {\n                flatten.apply(void 0, __spreadArray$n([], __read$C(value)));\n            }\n            else if (typeof value === 'object') {\n                flatten(Object.values(value));\n            }\n            else {\n                values.push(value);\n            }\n        };\n        if (!keys)\n            return values;\n        keys.forEach(function (key) {\n            var value = _this[key];\n            addValue(value);\n        });\n        return values;\n    };\n    Series.prototype.getKeys = function (direction) {\n        return this.getDirectionValues(direction, this.directionKeys);\n    };\n    Series.prototype.getNames = function (direction) {\n        return this.getDirectionValues(direction, this.directionNames);\n    };\n    Series.prototype.resolveKeyDirection = function (direction) {\n        return direction;\n    };\n    // Indicate that something external changed and we should recalculate nodeData.\n    Series.prototype.markNodeDataDirty = function () {\n        this.nodeDataRefresh = true;\n    };\n    Series.prototype.visibleChanged = function () {\n        // Override point for this.visible change post-processing.\n    };\n    Series.prototype.getOpacity = function (datum) {\n        var _a = this.highlightStyle.series, _b = _a.dimOpacity, dimOpacity = _b === void 0 ? 1 : _b, _c = _a.enabled, enabled = _c === void 0 ? true : _c;\n        var defaultOpacity = 1;\n        if (enabled === false || dimOpacity === defaultOpacity) {\n            return defaultOpacity;\n        }\n        switch (this.isItemIdHighlighted(datum)) {\n            case 'no-highlight':\n            case 'highlighted':\n                return defaultOpacity;\n            case 'peer-highlighted':\n            case 'other-highlighted':\n                return dimOpacity;\n        }\n    };\n    Series.prototype.getStrokeWidth = function (defaultStrokeWidth, datum) {\n        var _a = this.highlightStyle.series, strokeWidth = _a.strokeWidth, _b = _a.enabled, enabled = _b === void 0 ? true : _b;\n        if (enabled === false || strokeWidth === undefined) {\n            // No change in styling for highlight cases.\n            return defaultStrokeWidth;\n        }\n        switch (this.isItemIdHighlighted(datum)) {\n            case 'highlighted':\n                return strokeWidth;\n            case 'no-highlight':\n            case 'other-highlighted':\n            case 'peer-highlighted':\n                return defaultStrokeWidth;\n        }\n    };\n    Series.prototype.isItemIdHighlighted = function (datum) {\n        var _a;\n        var highlightedDatum = (_a = this.highlightManager) === null || _a === void 0 ? void 0 : _a.getActiveHighlight();\n        var _b = highlightedDatum !== null && highlightedDatum !== void 0 ? highlightedDatum : {}, series = _b.series, itemId = _b.itemId;\n        var highlighting = series != null;\n        if (!highlighting) {\n            // Highlighting not active.\n            return 'no-highlight';\n        }\n        if (series !== this) {\n            // Highlighting active, this series not highlighted.\n            return 'other-highlighted';\n        }\n        if (itemId === undefined) {\n            // Series doesn't use itemIds - so no further refinement needed, series is highlighted.\n            return 'highlighted';\n        }\n        if (datum && highlightedDatum !== datum && itemId !== datum.itemId) {\n            // A peer (in same Series instance) sub-series has highlight active, but this sub-series\n            // does not.\n            return 'peer-highlighted';\n        }\n        return 'highlighted';\n    };\n    Series.prototype.pickNode = function (point, limitPickModes) {\n        var e_2, _a;\n        var _b = this, pickModes = _b.pickModes, visible = _b.visible, rootGroup = _b.rootGroup;\n        if (!visible || !rootGroup.visible) {\n            return;\n        }\n        try {\n            for (var pickModes_1 = __values$r(pickModes), pickModes_1_1 = pickModes_1.next(); !pickModes_1_1.done; pickModes_1_1 = pickModes_1.next()) {\n                var pickMode = pickModes_1_1.value;\n                if (limitPickModes && !limitPickModes.includes(pickMode)) {\n                    continue;\n                }\n                var match = undefined;\n                switch (pickMode) {\n                    case SeriesNodePickMode.EXACT_SHAPE_MATCH:\n                        match = this.pickNodeExactShape(point);\n                        break;\n                    case SeriesNodePickMode.NEAREST_BY_MAIN_AXIS_FIRST:\n                    case SeriesNodePickMode.NEAREST_BY_MAIN_CATEGORY_AXIS_FIRST:\n                        match = this.pickNodeMainAxisFirst(point, pickMode === SeriesNodePickMode.NEAREST_BY_MAIN_CATEGORY_AXIS_FIRST);\n                        break;\n                    case SeriesNodePickMode.NEAREST_NODE:\n                        match = this.pickNodeClosestDatum(point);\n                        break;\n                }\n                if (match) {\n                    return { pickMode: pickMode, match: match.datum, distance: match.distance };\n                }\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (pickModes_1_1 && !pickModes_1_1.done && (_a = pickModes_1.return)) _a.call(pickModes_1);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n    };\n    Series.prototype.pickNodeExactShape = function (point) {\n        var match = this.contentGroup.pickNode(point.x, point.y);\n        if (match) {\n            return {\n                datum: match.datum,\n                distance: 0,\n            };\n        }\n    };\n    Series.prototype.pickNodeClosestDatum = function (_point) {\n        // Override point for sub-classes - but if this is invoked, the sub-class specified it wants\n        // to use this feature.\n        throw new Error('AG Charts - Series.pickNodeClosestDatum() not implemented');\n    };\n    Series.prototype.pickNodeMainAxisFirst = function (_point, _requireCategoryAxis) {\n        // Override point for sub-classes - but if this is invoked, the sub-class specified it wants\n        // to use this feature.\n        throw new Error('AG Charts - Series.pickNodeMainAxisFirst() not implemented');\n    };\n    Series.prototype.fireNodeClickEvent = function (event, _datum) {\n        var eventObject = this.getNodeClickEvent(event, _datum);\n        this.fireEvent(eventObject);\n    };\n    Series.prototype.fireNodeDoubleClickEvent = function (event, _datum) {\n        var eventObject = this.getNodeDoubleClickEvent(event, _datum);\n        this.fireEvent(eventObject);\n    };\n    Series.prototype.getNodeClickEvent = function (event, datum) {\n        return new SeriesNodeClickEvent(event, datum, this);\n    };\n    Series.prototype.getNodeDoubleClickEvent = function (event, datum) {\n        return new SeriesNodeDoubleClickEvent(event, datum, this);\n    };\n    Series.prototype.toggleSeriesItem = function (_itemId, enabled) {\n        this.visible = enabled;\n        this.nodeDataRefresh = true;\n    };\n    Series.prototype.isEnabled = function () {\n        return this.visible;\n    };\n    Series.prototype.fixNumericExtent = function (extent, axis) {\n        var _a;\n        var fixedExtent = fixNumericExtent(extent);\n        if (fixedExtent.length === 0) {\n            return fixedExtent;\n        }\n        var _b = __read$C(fixedExtent, 2), min = _b[0], max = _b[1];\n        if (min === max) {\n            // domain has zero length, there is only a single valid value in data\n            var padding = (_a = axis === null || axis === void 0 ? void 0 : axis.calculatePadding(min, max)) !== null && _a !== void 0 ? _a : 1;\n            min -= padding;\n            max += padding;\n        }\n        return [min, max];\n    };\n    Series.highlightedZIndex = 1000000000000;\n    __decorate$1S([\n        Validate(STRING)\n    ], Series.prototype, \"id\", void 0);\n    __decorate$1S([\n        Validate(BOOLEAN)\n    ], Series.prototype, \"_visible\", void 0);\n    __decorate$1S([\n        Validate(BOOLEAN)\n    ], Series.prototype, \"showInLegend\", void 0);\n    __decorate$1S([\n        Validate(STRING)\n    ], Series.prototype, \"cursor\", void 0);\n    __decorate$1S([\n        Validate(INTERACTION_RANGE)\n    ], Series.prototype, \"nodeClickRange\", void 0);\n    return Series;\n}(Observable));\n\nvar __decorate$1R = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar Padding$1 = /** @class */ (function () {\n    function Padding(top, right, bottom, left) {\n        if (top === void 0) { top = 0; }\n        if (right === void 0) { right = top; }\n        if (bottom === void 0) { bottom = top; }\n        if (left === void 0) { left = right; }\n        this.top = top;\n        this.right = right;\n        this.bottom = bottom;\n        this.left = left;\n    }\n    Padding.prototype.clear = function () {\n        this.top = this.right = this.bottom = this.left = 0;\n    };\n    __decorate$1R([\n        Validate(NUMBER(0))\n    ], Padding.prototype, \"top\", void 0);\n    __decorate$1R([\n        Validate(NUMBER(0))\n    ], Padding.prototype, \"right\", void 0);\n    __decorate$1R([\n        Validate(NUMBER(0))\n    ], Padding.prototype, \"bottom\", void 0);\n    __decorate$1R([\n        Validate(NUMBER(0))\n    ], Padding.prototype, \"left\", void 0);\n    return Padding;\n}());\n\nvar __values$q = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar SizeMonitor = /** @class */ (function () {\n    function SizeMonitor() {\n    }\n    SizeMonitor.init = function () {\n        var _this = this;\n        var NativeResizeObserver = window.ResizeObserver;\n        if (NativeResizeObserver) {\n            this.resizeObserver = new NativeResizeObserver(function (entries) {\n                var e_1, _a;\n                try {\n                    for (var entries_1 = __values$q(entries), entries_1_1 = entries_1.next(); !entries_1_1.done; entries_1_1 = entries_1.next()) {\n                        var entry = entries_1_1.value;\n                        var _b = entry.contentRect, width = _b.width, height = _b.height;\n                        _this.checkSize(_this.elements.get(entry.target), entry.target, width, height);\n                    }\n                }\n                catch (e_1_1) { e_1 = { error: e_1_1 }; }\n                finally {\n                    try {\n                        if (entries_1_1 && !entries_1_1.done && (_a = entries_1.return)) _a.call(entries_1);\n                    }\n                    finally { if (e_1) throw e_1.error; }\n                }\n            });\n        }\n        else {\n            // polyfill (more reliable even in browsers that support ResizeObserver)\n            var step = function () {\n                _this.elements.forEach(function (entry, element) {\n                    _this.checkClientSize(element, entry);\n                });\n            };\n            window.setInterval(step, 100);\n        }\n        this.ready = true;\n    };\n    SizeMonitor.checkSize = function (entry, element, width, height) {\n        if (entry) {\n            if (!entry.size || width !== entry.size.width || height !== entry.size.height) {\n                entry.size = { width: width, height: height };\n                entry.cb(entry.size, element);\n            }\n        }\n    };\n    // Only a single callback is supported.\n    SizeMonitor.observe = function (element, cb) {\n        if (!this.ready) {\n            this.init();\n        }\n        this.unobserve(element);\n        if (this.resizeObserver) {\n            this.resizeObserver.observe(element);\n        }\n        this.elements.set(element, { cb: cb });\n        // Ensure first size callback happens synchronously.\n        this.checkClientSize(element, { cb: cb });\n    };\n    SizeMonitor.unobserve = function (element) {\n        if (this.resizeObserver) {\n            this.resizeObserver.unobserve(element);\n        }\n        this.elements.delete(element);\n    };\n    SizeMonitor.checkClientSize = function (element, entry) {\n        var width = element.clientWidth ? element.clientWidth : 0;\n        var height = element.clientHeight ? element.clientHeight : 0;\n        this.checkSize(entry, element, width, height);\n    };\n    SizeMonitor.elements = new Map();\n    SizeMonitor.ready = false;\n    return SizeMonitor;\n}());\n\nfunction circleRectOverlap(c, x, y, w, h) {\n    // Find closest horizontal and vertical edges.\n    var edgeX = c.x;\n    if (c.x < x) {\n        edgeX = x;\n    }\n    else if (c.x > x + w) {\n        edgeX = x + w;\n    }\n    var edgeY = c.y;\n    if (c.y < y) {\n        edgeY = y;\n    }\n    else if (c.y > y + h) {\n        edgeY = y + h;\n    }\n    // Find distance to closest edges.\n    var dx = c.x - edgeX;\n    var dy = c.y - edgeY;\n    var d = Math.sqrt(dx * dx + dy * dy);\n    return d <= c.size * 0.5;\n}\nfunction rectRectOverlap(r1, x2, y2, w2, h2) {\n    var xOverlap = r1.x + r1.width > x2 && r1.x < x2 + w2;\n    var yOverlap = r1.y + r1.height > y2 && r1.y < y2 + h2;\n    return xOverlap && yOverlap;\n}\nfunction rectContainsRect(r1, r2x, r2y, r2w, r2h) {\n    return r2x + r2w < r1.x + r1.width && r2x > r1.x && r2y > r1.y && r2y + r2h < r1.y + r1.height;\n}\nfunction isPointLabelDatum(x) {\n    return x != null && typeof x.point === 'object' && typeof x.label === 'object';\n}\n/**\n * @param data Points and labels for one or more series. The order of series determines label placement precedence.\n * @param bounds Bounds to fit the labels into. If a label can't be fully contained, it doesn't fit.\n * @returns Placed labels for the given series (in the given order).\n */\nfunction placeLabels(data, bounds, padding) {\n    if (padding === void 0) { padding = 5; }\n    var result = [];\n    data = data.map(function (d) { return d.slice().sort(function (a, b) { return b.point.size - a.point.size; }); });\n    for (var j = 0; j < data.length; j++) {\n        var labels = (result[j] = []);\n        var datum = data[j];\n        if (!((datum === null || datum === void 0 ? void 0 : datum.length) && datum[0].label)) {\n            continue;\n        }\n        var _loop_1 = function (i, ln) {\n            var d = datum[i];\n            var l = d.label;\n            var r = d.point.size * 0.5;\n            var x = d.point.x - l.width * 0.5;\n            var y = d.point.y - r - l.height - padding;\n            var width = l.width, height = l.height;\n            var withinBounds = !bounds || rectContainsRect(bounds, x, y, width, height);\n            if (!withinBounds) {\n                return \"continue\";\n            }\n            var overlapPoints = data.some(function (datum) {\n                return datum.some(function (d) { return circleRectOverlap(d.point, x, y, width, height); });\n            });\n            if (overlapPoints) {\n                return \"continue\";\n            }\n            var overlapLabels = result.some(function (labels) { return labels.some(function (l) { return rectRectOverlap(l, x, y, width, height); }); });\n            if (overlapLabels) {\n                return \"continue\";\n            }\n            labels.push({\n                index: i,\n                text: l.text,\n                x: x,\n                y: y,\n                width: width,\n                height: height,\n                datum: d,\n            });\n        };\n        for (var i = 0, ln = datum.length; i < ln; i++) {\n            _loop_1(i, ln);\n        }\n    }\n    return result;\n}\nfunction axisLabelsOverlap(data, padding) {\n    var result = [];\n    var _loop_2 = function (i) {\n        var datum = data[i];\n        var _a = datum.point, x = _a.x, y = _a.y, text = datum.label.text;\n        var _b = datum.label, width = _b.width, height = _b.height;\n        width += padding !== null && padding !== void 0 ? padding : 0;\n        height += padding !== null && padding !== void 0 ? padding : 0;\n        var overlapLabels = result.some(function (l) {\n            var overlap = rectRectOverlap(l, x, y, width, height);\n            return overlap;\n        });\n        if (overlapLabels) {\n            return { value: true };\n        }\n        result.push({\n            index: i,\n            text: text,\n            x: x,\n            y: y,\n            width: width,\n            height: height,\n            datum: datum,\n        });\n    };\n    for (var i = 0; i < data.length; i++) {\n        var state_1 = _loop_2(i);\n        if (typeof state_1 === \"object\")\n            return state_1.value;\n    }\n    return false;\n}\n\nvar __awaiter$e = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator$e = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\n/**\n * Wrap a function in debouncing trigger function. A requestAnimationFrame() is scheduled\n * after the first schedule() call, and subsequent schedule() calls will be ignored until the\n * animation callback executes.\n */\nfunction debouncedAnimationFrame(cb) {\n    return buildScheduler(function (cb) { return requestAnimationFrame(cb); }, cb);\n}\nfunction debouncedCallback(cb) {\n    return buildScheduler(function (cb) { return setTimeout(cb, 0); }, cb);\n}\nfunction buildScheduler(scheduleFn, cb) {\n    var scheduleCount = 0;\n    var promiseRunning = false;\n    var awaitingPromise;\n    var awaitingDone;\n    var busy = function () {\n        return promiseRunning;\n    };\n    var done = function () {\n        promiseRunning = false;\n        awaitingDone === null || awaitingDone === void 0 ? void 0 : awaitingDone();\n        awaitingDone = undefined;\n        awaitingPromise = undefined;\n        if (scheduleCount > 0) {\n            scheduleFn(scheduleCb);\n        }\n    };\n    var scheduleCb = function () {\n        var count = scheduleCount;\n        scheduleCount = 0;\n        promiseRunning = true;\n        var maybePromise = cb({ count: count });\n        if (!maybePromise) {\n            done();\n            return;\n        }\n        maybePromise.then(done).catch(done);\n    };\n    return {\n        schedule: function () {\n            if (scheduleCount === 0 && !busy()) {\n                scheduleFn(scheduleCb);\n            }\n            scheduleCount++;\n        },\n        await: function () {\n            return __awaiter$e(this, void 0, void 0, function () {\n                return __generator$e(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            if (!busy()) {\n                                return [2 /*return*/];\n                            }\n                            if (!awaitingPromise) {\n                                awaitingPromise = new Promise(function (resolve) {\n                                    awaitingDone = resolve;\n                                });\n                            }\n                            _a.label = 1;\n                        case 1:\n                            if (!busy()) return [3 /*break*/, 3];\n                            return [4 /*yield*/, awaitingPromise];\n                        case 2:\n                            _a.sent();\n                            return [3 /*break*/, 1];\n                        case 3: return [2 /*return*/];\n                    }\n                });\n            });\n        },\n    };\n}\n\n/**\n * Finds the roots of a parametric linear equation in `t`,\n * where `t` lies in the interval of `[0,1]`.\n */\nfunction linearRoot(a, b) {\n    var t = -b / a;\n    return a !== 0 && t >= 0 && t <= 1 ? [t] : [];\n}\n/**\n * Finds the roots of a parametric quadratic equation in `t`,\n * where `t` lies in the interval of `[0,1]`.\n */\nfunction quadraticRoots(a, b, c) {\n    if (a === 0) {\n        return linearRoot(b, c);\n    }\n    var D = b * b - 4 * a * c; // The polynomial's discriminant.\n    var roots = [];\n    if (D === 0) {\n        // A single real root.\n        var t = -b / (2 * a);\n        if (t >= 0 && t <= 1) {\n            roots.push(t);\n        }\n    }\n    else if (D > 0) {\n        // A pair of distinct real roots.\n        var rD = Math.sqrt(D);\n        var t1 = (-b - rD) / (2 * a);\n        var t2 = (-b + rD) / (2 * a);\n        if (t1 >= 0 && t1 <= 1) {\n            roots.push(t1);\n        }\n        if (t2 >= 0 && t2 <= 1) {\n            roots.push(t2);\n        }\n    }\n    // else -> Complex roots.\n    return roots;\n}\n/**\n * Finds the roots of a parametric cubic equation in `t`,\n * where `t` lies in the interval of `[0,1]`.\n * Returns an array of parametric intersection locations along the cubic,\n * excluding out-of-bounds intersections (before or after the end point\n * or in the imaginary plane).\n * An adaptation of http://www.particleincell.com/blog/2013/cubic-line-intersection/\n */\nfunction cubicRoots(a, b, c, d) {\n    if (a === 0) {\n        return quadraticRoots(b, c, d);\n    }\n    var A = b / a;\n    var B = c / a;\n    var C = d / a;\n    var Q = (3 * B - A * A) / 9;\n    var R = (9 * A * B - 27 * C - 2 * A * A * A) / 54;\n    var D = Q * Q * Q + R * R; // The polynomial's discriminant.\n    var third = 1 / 3;\n    var roots = [];\n    if (D >= 0) {\n        // Complex or duplicate roots.\n        var rD = Math.sqrt(D);\n        var S = Math.sign(R + rD) * Math.pow(Math.abs(R + rD), third);\n        var T = Math.sign(R - rD) * Math.pow(Math.abs(R - rD), third);\n        var Im = Math.abs((Math.sqrt(3) * (S - T)) / 2); // Complex part of the root pair.\n        var t = -third * A + (S + T); // A real root.\n        if (t >= 0 && t <= 1) {\n            roots.push(t);\n        }\n        if (Im === 0) {\n            var t_1 = -third * A - (S + T) / 2; // The real part of a complex root.\n            if (t_1 >= 0 && t_1 <= 1) {\n                roots.push(t_1);\n            }\n        }\n    }\n    else {\n        // Distinct real roots.\n        var theta = Math.acos(R / Math.sqrt(-Q * Q * Q));\n        var thirdA = third * A;\n        var twoSqrtQ = 2 * Math.sqrt(-Q);\n        var t1 = twoSqrtQ * Math.cos(third * theta) - thirdA;\n        var t2 = twoSqrtQ * Math.cos(third * (theta + 2 * Math.PI)) - thirdA;\n        var t3 = twoSqrtQ * Math.cos(third * (theta + 4 * Math.PI)) - thirdA;\n        if (t1 >= 0 && t1 <= 1) {\n            roots.push(t1);\n        }\n        if (t2 >= 0 && t2 <= 1) {\n            roots.push(t2);\n        }\n        if (t3 >= 0 && t3 <= 1) {\n            roots.push(t3);\n        }\n    }\n    return roots;\n}\n\nvar __values$p = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/**\n * Returns the intersection point for the given pair of line segments, or null,\n * if the segments are parallel or don't intersect.\n * Based on http://paulbourke.net/geometry/pointlineplane/\n */\nfunction segmentIntersection(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2) {\n    var d = (ax2 - ax1) * (by2 - by1) - (ay2 - ay1) * (bx2 - bx1);\n    if (d === 0) {\n        // The lines are parallel.\n        return null;\n    }\n    var ua = ((bx2 - bx1) * (ay1 - by1) - (ax1 - bx1) * (by2 - by1)) / d;\n    var ub = ((ax2 - ax1) * (ay1 - by1) - (ay2 - ay1) * (ax1 - bx1)) / d;\n    if (ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1) {\n        return {\n            x: ax1 + ua * (ax2 - ax1),\n            y: ay1 + ua * (ay2 - ay1),\n        };\n    }\n    return null; // The intersection point is outside either or both segments.\n}\n/**\n * Returns intersection points of the given cubic curve and the line segment.\n * Takes in x/y components of cubic control points and line segment start/end points\n * as parameters.\n */\nfunction cubicSegmentIntersections(px1, py1, px2, py2, px3, py3, px4, py4, x1, y1, x2, y2) {\n    var e_1, _a;\n    var intersections = [];\n    // Find line equation coefficients.\n    var A = y1 - y2;\n    var B = x2 - x1;\n    var C = x1 * (y2 - y1) - y1 * (x2 - x1);\n    // Find cubic Bezier curve equation coefficients from control points.\n    var bx = bezierCoefficients(px1, px2, px3, px4);\n    var by = bezierCoefficients(py1, py2, py3, py4);\n    var a = A * bx[0] + B * by[0]; // t^3\n    var b = A * bx[1] + B * by[1]; // t^2\n    var c = A * bx[2] + B * by[2]; // t\n    var d = A * bx[3] + B * by[3] + C; // 1\n    var roots = cubicRoots(a, b, c, d);\n    try {\n        // Verify that the roots are within bounds of the linear segment.\n        for (var roots_1 = __values$p(roots), roots_1_1 = roots_1.next(); !roots_1_1.done; roots_1_1 = roots_1.next()) {\n            var t = roots_1_1.value;\n            var tt = t * t;\n            var ttt = t * tt;\n            // Find the cartesian plane coordinates for the parametric root `t`.\n            var x = bx[0] * ttt + bx[1] * tt + bx[2] * t + bx[3];\n            var y = by[0] * ttt + by[1] * tt + by[2] * t + by[3];\n            // The parametric cubic roots we found are intersection points\n            // with an infinite line, and so the x/y coordinates above are as well.\n            // Make sure the x/y is also within the bounds of the given segment.\n            var s = void 0;\n            if (x1 !== x2) {\n                s = (x - x1) / (x2 - x1);\n            }\n            else {\n                // the line is vertical\n                s = (y - y1) / (y2 - y1);\n            }\n            if (s >= 0 && s <= 1) {\n                intersections.push({ x: x, y: y });\n            }\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (roots_1_1 && !roots_1_1.done && (_a = roots_1.return)) _a.call(roots_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    return intersections;\n}\n/**\n * Returns the given coordinates vector multiplied by the coefficient matrix\n * of the parametric cubic Bézier equation.\n */\nfunction bezierCoefficients(P1, P2, P3, P4) {\n    return [\n        // Bézier expressed as matrix operations:\n        -P1 + 3 * P2 - 3 * P3 + P4,\n        3 * P1 - 6 * P2 + 3 * P3,\n        -3 * P1 + 3 * P2,\n        P1, //                 | 1  0  0  0| |P4|\n    ];\n}\n/**\n * Returns intersection points of the arc and the line segment.\n * Takes in arc parameters and line segment start/end points.\n */\nfunction arcIntersections(cx, cy, r, startAngle, endAngle, counterClockwise, x1, y1, x2, y2) {\n    // Solving the quadratic equation:\n    // 1. y = k * x + y0\n    // 2. (x - cx)^2 + (y - cy)^2 = r^2\n    var k = (y2 - y1) / (x2 - x1);\n    var y0 = y1 - k * x1;\n    var a = Math.pow(k, 2) + 1;\n    var b = 2 * (k * (y0 - cy) - cx);\n    var c = Math.pow(cx, 2) + Math.pow(y0 - cy, 2) - Math.pow(r, 2);\n    var d = Math.pow(b, 2) - 4 * a * c;\n    if (d < 0) {\n        return [];\n    }\n    var i1x = (-b + Math.sqrt(d)) / 2 / a;\n    var i2x = (-b - Math.sqrt(d)) / 2 / a;\n    var intersections = [];\n    [i1x, i2x].forEach(function (x) {\n        var isXInsideLine = x >= Math.min(x1, x2) && x <= Math.max(x1, x2);\n        if (!isXInsideLine) {\n            return;\n        }\n        var y = k * x;\n        var a1 = normalizeAngle360(counterClockwise ? endAngle : startAngle);\n        var a2 = normalizeAngle360(counterClockwise ? startAngle : endAngle);\n        var intersectionAngle = normalizeAngle360(Math.atan2(y, x));\n        // Order angles clockwise after the start angle\n        // (end angle if counter-clockwise)\n        if (a2 <= a1) {\n            a2 += 2 * Math.PI;\n        }\n        if (intersectionAngle < a1) {\n            intersectionAngle += 2 * Math.PI;\n        }\n        if (intersectionAngle >= a1 && intersectionAngle <= a2) {\n            intersections.push({ x: x, y: y });\n        }\n    });\n    return intersections;\n}\n\nvar __values$o = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar Command;\n(function (Command) {\n    Command[Command[\"Move\"] = 0] = \"Move\";\n    Command[Command[\"Line\"] = 1] = \"Line\";\n    Command[Command[\"Arc\"] = 2] = \"Arc\";\n    Command[Command[\"Curve\"] = 3] = \"Curve\";\n    Command[Command[\"ClosePath\"] = 4] = \"ClosePath\";\n})(Command || (Command = {}));\nvar Path2D = /** @class */ (function () {\n    function Path2D() {\n        // The methods of this class will likely be called many times per animation frame,\n        // and any allocation can trigger a GC cycle during animation, so we attempt\n        // to minimize the number of allocations.\n        this.previousCommands = [];\n        this.previousParams = [];\n        this.previousClosedPath = false;\n        this.commands = [];\n        this.params = [];\n        this._closedPath = false;\n    }\n    Path2D.prototype.isDirty = function () {\n        if (this._closedPath !== this.previousClosedPath) {\n            return true;\n        }\n        if (this.previousCommands.length !== this.commands.length) {\n            return true;\n        }\n        if (this.previousParams.length !== this.params.length) {\n            return true;\n        }\n        for (var i = 0; i < this.commands.length; i++) {\n            if (this.commands[i] !== this.previousCommands[i]) {\n                return true;\n            }\n        }\n        for (var i = 0; i < this.params.length; i++) {\n            if (this.params[i] !== this.previousParams[i]) {\n                return true;\n            }\n        }\n        return false;\n    };\n    Path2D.prototype.draw = function (ctx) {\n        var e_1, _a;\n        var commands = this.commands;\n        var params = this.params;\n        var j = 0;\n        ctx.beginPath();\n        try {\n            for (var commands_1 = __values$o(commands), commands_1_1 = commands_1.next(); !commands_1_1.done; commands_1_1 = commands_1.next()) {\n                var command = commands_1_1.value;\n                switch (command) {\n                    case Command.Move:\n                        ctx.moveTo(params[j++], params[j++]);\n                        break;\n                    case Command.Line:\n                        ctx.lineTo(params[j++], params[j++]);\n                        break;\n                    case Command.Curve:\n                        ctx.bezierCurveTo(params[j++], params[j++], params[j++], params[j++], params[j++], params[j++]);\n                        break;\n                    case Command.Arc:\n                        ctx.arc(params[j++], params[j++], params[j++], params[j++], params[j++], params[j++] === 1);\n                        break;\n                    case Command.ClosePath:\n                        ctx.closePath();\n                        break;\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (commands_1_1 && !commands_1_1.done && (_a = commands_1.return)) _a.call(commands_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        if (commands.length === 0) {\n            ctx.closePath();\n        }\n    };\n    Path2D.prototype.moveTo = function (x, y) {\n        if (this.xy) {\n            this.xy[0] = x;\n            this.xy[1] = y;\n        }\n        else {\n            this.xy = [x, y];\n        }\n        this.commands.push(Command.Move);\n        this.params.push(x, y);\n    };\n    Path2D.prototype.lineTo = function (x, y) {\n        if (this.xy) {\n            this.commands.push(Command.Line);\n            this.params.push(x, y);\n            this.xy[0] = x;\n            this.xy[1] = y;\n        }\n        else {\n            this.moveTo(x, y);\n        }\n    };\n    Path2D.prototype.rect = function (x, y, width, height) {\n        this.moveTo(x, y);\n        this.lineTo(x + width, y);\n        this.lineTo(x + width, y + height);\n        this.lineTo(x, y + height);\n        this.closePath();\n    };\n    Path2D.prototype.arc = function (x, y, r, sAngle, eAngle, antiClockwise) {\n        if (antiClockwise === void 0) { antiClockwise = false; }\n        var endX = x + r * Math.cos(eAngle);\n        var endY = y + r * Math.sin(eAngle);\n        if (this.xy) {\n            this.xy[0] = endX;\n            this.xy[1] = endY;\n        }\n        else {\n            this.xy = [endX, endY];\n        }\n        this.commands.push(Command.Arc);\n        this.params.push(x, y, r, sAngle, eAngle, antiClockwise ? 1 : 0);\n    };\n    Path2D.prototype.cubicCurveTo = function (cx1, cy1, cx2, cy2, x, y) {\n        if (!this.xy) {\n            this.moveTo(cx1, cy1);\n        }\n        this.commands.push(Command.Curve);\n        this.params.push(cx1, cy1, cx2, cy2, x, y);\n        this.xy[0] = x;\n        this.xy[1] = y;\n    };\n    Object.defineProperty(Path2D.prototype, \"closedPath\", {\n        get: function () {\n            return this._closedPath;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Path2D.prototype.closePath = function () {\n        if (this.xy) {\n            this.xy = undefined;\n            this.commands.push(Command.ClosePath);\n            this._closedPath = true;\n        }\n    };\n    Path2D.prototype.clear = function (_a) {\n        var _b = _a === void 0 ? { trackChanges: false } : _a, trackChanges = _b.trackChanges;\n        if (trackChanges) {\n            this.previousCommands = this.commands;\n            this.previousParams = this.params;\n            this.previousClosedPath = this._closedPath;\n            this.commands = [];\n            this.params = [];\n        }\n        else {\n            this.commands.length = 0;\n            this.params.length = 0;\n        }\n        this.xy = undefined;\n        this._closedPath = false;\n    };\n    Path2D.prototype.isPointInPath = function (x, y) {\n        var commands = this.commands;\n        var params = this.params;\n        var cn = commands.length;\n        // Hit testing using ray casting method, where the ray's origin is some point\n        // outside the path. In this case, an offscreen point that is remote enough, so that\n        // even if the path itself is large and is partially offscreen, the ray's origin\n        // will likely be outside the path anyway. To test if the given point is inside the\n        // path or not, we cast a ray from the origin to the given point and check the number\n        // of intersections of this segment with the path. If the number of intersections is\n        // even, then the ray both entered and exited the path an equal number of times,\n        // therefore the point is outside the path, and inside the path, if the number of\n        // intersections is odd. Since the path is compound, we check if the ray segment\n        // intersects with each of the path's segments, which can be either a line segment\n        // (one or no intersection points) or a Bézier curve segment (up to 3 intersection\n        // points).\n        var ox = -10000;\n        var oy = -10000;\n        // the starting point of the  current path\n        var sx = NaN;\n        var sy = NaN;\n        // the previous point of the current path\n        var px = 0;\n        var py = 0;\n        var intersectionCount = 0;\n        for (var ci = 0, pi = 0; ci < cn; ci++) {\n            switch (commands[ci]) {\n                case Command.Move:\n                    if (!isNaN(sx)) {\n                        if (segmentIntersection(sx, sy, px, py, ox, oy, x, y)) {\n                            intersectionCount++;\n                        }\n                    }\n                    px = params[pi++];\n                    sx = px;\n                    py = params[pi++];\n                    sy = py;\n                    break;\n                case Command.Line:\n                    if (segmentIntersection(px, py, params[pi++], params[pi++], ox, oy, x, y)) {\n                        intersectionCount++;\n                    }\n                    px = params[pi - 2];\n                    py = params[pi - 1];\n                    break;\n                case Command.Curve:\n                    intersectionCount += cubicSegmentIntersections(px, py, params[pi++], params[pi++], params[pi++], params[pi++], params[pi++], params[pi++], ox, oy, x, y).length;\n                    px = params[pi - 2];\n                    py = params[pi - 1];\n                    break;\n                case Command.Arc:\n                    intersectionCount += arcIntersections(params[pi++], params[pi++], params[pi++], params[pi++], params[pi++], Boolean(params[pi++]), ox, oy, x, y).length;\n                    px = params[pi - 2];\n                    py = params[pi - 1];\n                    break;\n                case Command.ClosePath:\n                    if (!isNaN(sx)) {\n                        if (segmentIntersection(sx, sy, px, py, ox, oy, x, y)) {\n                            intersectionCount++;\n                        }\n                    }\n                    break;\n            }\n        }\n        return intersectionCount % 2 === 1;\n    };\n    return Path2D;\n}());\n\nvar __extends$Y = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1Q = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nfunction ScenePathChangeDetection(opts) {\n    var _a = opts !== null && opts !== void 0 ? opts : {}, _b = _a.redraw, redraw = _b === void 0 ? RedrawType.MAJOR : _b, changeCb = _a.changeCb, convertor = _a.convertor;\n    return SceneChangeDetection({ redraw: redraw, type: 'path', convertor: convertor, changeCb: changeCb });\n}\nvar Path = /** @class */ (function (_super) {\n    __extends$Y(Path, _super);\n    function Path() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /**\n         * Declare a path to retain for later rendering and hit testing\n         * using custom Path2D class. Think of it as a TypeScript version\n         * of the native Path2D (with some differences) that works in all browsers.\n         */\n        _this.path = new Path2D();\n        /**\n         * The path only has to be updated when certain attributes change.\n         * For example, if transform attributes (such as `translationX`)\n         * are changed, we don't have to update the path. The `dirtyPath` flag\n         * is how we keep track if the path has to be updated or not.\n         */\n        _this._dirtyPath = true;\n        return _this;\n    }\n    Object.defineProperty(Path.prototype, \"dirtyPath\", {\n        get: function () {\n            return this._dirtyPath;\n        },\n        set: function (value) {\n            if (this._dirtyPath !== value) {\n                this._dirtyPath = value;\n                if (value) {\n                    this.markDirty(this, RedrawType.MAJOR);\n                }\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Path.prototype.checkPathDirty = function () {\n        var _a, _b;\n        if (this._dirtyPath) {\n            return;\n        }\n        this.dirtyPath = this.path.isDirty() || ((_b = (_a = this.fillShadow) === null || _a === void 0 ? void 0 : _a.isDirty()) !== null && _b !== void 0 ? _b : false);\n    };\n    Path.prototype.isPointInPath = function (x, y) {\n        var point = this.transformPoint(x, y);\n        return this.path.closedPath && this.path.isPointInPath(point.x, point.y);\n    };\n    Path.prototype.isDirtyPath = function () {\n        // Override point for more expensive dirty checks.\n        return false;\n    };\n    Path.prototype.updatePath = function () {\n        // Override point for subclasses.\n    };\n    Path.prototype.render = function (renderCtx) {\n        var _a, _b;\n        var ctx = renderCtx.ctx, forceRender = renderCtx.forceRender, stats = renderCtx.stats;\n        if (this.dirty === RedrawType.NONE && !forceRender) {\n            if (stats)\n                stats.nodesSkipped += this.nodeCount.count;\n            return;\n        }\n        this.computeTransformMatrix();\n        this.matrix.toContext(ctx);\n        if (this.dirtyPath || this.isDirtyPath()) {\n            this.updatePath();\n            this.dirtyPath = false;\n        }\n        if (this.clipPath) {\n            ctx.save();\n            if (this.clipMode === 'normal') {\n                // Bound the shape rendered to the clipping path.\n                this.clipPath.draw(ctx);\n                ctx.clip();\n            }\n            this.path.draw(ctx);\n            this.fillStroke(ctx);\n            if (this.clipMode === 'punch-out') {\n                // Bound the shape rendered to outside the clipping path.\n                this.clipPath.draw(ctx);\n                ctx.clip();\n                // Fallback values, but practically these should never be used.\n                var _c = (_a = this.computeBBox()) !== null && _a !== void 0 ? _a : {}, _d = _c.x, x = _d === void 0 ? -10000 : _d, _e = _c.y, y = _e === void 0 ? -10000 : _e, _f = _c.width, width = _f === void 0 ? 20000 : _f, _g = _c.height, height = _g === void 0 ? 20000 : _g;\n                ctx.clearRect(x, y, width, height);\n            }\n            ctx.restore();\n        }\n        else {\n            this.path.draw(ctx);\n            this.fillStroke(ctx);\n        }\n        (_b = this.fillShadow) === null || _b === void 0 ? void 0 : _b.markClean();\n        _super.prototype.render.call(this, renderCtx);\n    };\n    Path.className = 'Path';\n    __decorate$1Q([\n        ScenePathChangeDetection()\n    ], Path.prototype, \"clipPath\", void 0);\n    __decorate$1Q([\n        ScenePathChangeDetection()\n    ], Path.prototype, \"clipMode\", void 0);\n    return Path;\n}(Shape));\n\nvar __extends$X = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1P = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __values$n = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar Marker = /** @class */ (function (_super) {\n    __extends$X(Marker, _super);\n    function Marker() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.x = 0;\n        _this.y = 0;\n        _this.size = 12;\n        return _this;\n    }\n    Marker.prototype.computeBBox = function () {\n        var _a = this, x = _a.x, y = _a.y, size = _a.size;\n        var half = size / 2;\n        return new BBox(x - half, y - half, size, size);\n    };\n    Marker.prototype.applyPath = function (s, moves) {\n        var e_1, _a;\n        var path = this.path;\n        var _b = this, x = _b.x, y = _b.y;\n        path.clear();\n        try {\n            for (var moves_1 = __values$n(moves), moves_1_1 = moves_1.next(); !moves_1_1.done; moves_1_1 = moves_1.next()) {\n                var _c = moves_1_1.value, mx = _c.x, my = _c.y, t = _c.t;\n                x += mx * s;\n                y += my * s;\n                if (t === 'move') {\n                    path.moveTo(x, y);\n                }\n                else {\n                    path.lineTo(x, y);\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (moves_1_1 && !moves_1_1.done && (_a = moves_1.return)) _a.call(moves_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        path.closePath();\n    };\n    __decorate$1P([\n        ScenePathChangeDetection()\n    ], Marker.prototype, \"x\", void 0);\n    __decorate$1P([\n        ScenePathChangeDetection()\n    ], Marker.prototype, \"y\", void 0);\n    __decorate$1P([\n        ScenePathChangeDetection({ convertor: Math.abs })\n    ], Marker.prototype, \"size\", void 0);\n    return Marker;\n}(Path));\n\nvar __extends$W = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar Circle = /** @class */ (function (_super) {\n    __extends$W(Circle, _super);\n    function Circle() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Circle.prototype.updatePath = function () {\n        var _a = this, x = _a.x, y = _a.y, path = _a.path, size = _a.size;\n        var r = size / 2;\n        path.clear();\n        path.arc(x, y, r, 0, Math.PI * 2);\n        path.closePath();\n    };\n    Circle.className = 'Circle';\n    return Circle;\n}(Marker));\n\nvar __extends$V = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1O = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar MARKER_SHAPES = ['circle', 'cross', 'diamond', 'heart', 'plus', 'square', 'triangle'];\nvar MARKER_SHAPE = predicateWithMessage(function (v) { return MARKER_SHAPES.includes(v) || Object.getPrototypeOf(v) === Marker; }, \"expecting a marker shape keyword such as 'circle', 'diamond' or 'square' or an object extending the Marker class\");\nvar SeriesMarker = /** @class */ (function (_super) {\n    __extends$V(SeriesMarker, _super);\n    function SeriesMarker() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.enabled = true;\n        /**\n         * One of the predefined marker names, or a marker constructor function (for user-defined markers).\n         * A series will create one marker instance per data point.\n         */\n        _this.shape = Circle;\n        _this.size = 6;\n        /**\n         * In case a series has the `sizeKey` set, the `sizeKey` values along with the `size` and `maxSize` configs\n         * will be used to determine the size of the marker. All values will be mapped to a marker size\n         * within the `[size, maxSize]` range, where the largest values will correspond to the `maxSize`\n         * and the lowest to the `size`.\n         */\n        _this.maxSize = 30;\n        _this.domain = undefined;\n        _this.fill = undefined;\n        _this.stroke = undefined;\n        _this.strokeWidth = 1;\n        _this.fillOpacity = undefined;\n        _this.strokeOpacity = undefined;\n        return _this;\n    }\n    __decorate$1O([\n        Validate(BOOLEAN),\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], SeriesMarker.prototype, \"enabled\", void 0);\n    __decorate$1O([\n        Validate(MARKER_SHAPE),\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], SeriesMarker.prototype, \"shape\", void 0);\n    __decorate$1O([\n        Validate(NUMBER(0)),\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], SeriesMarker.prototype, \"size\", void 0);\n    __decorate$1O([\n        Validate(NUMBER(0)),\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], SeriesMarker.prototype, \"maxSize\", void 0);\n    __decorate$1O([\n        Validate(OPT_NUMBER_ARRAY),\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], SeriesMarker.prototype, \"domain\", void 0);\n    __decorate$1O([\n        Validate(OPT_COLOR_STRING),\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], SeriesMarker.prototype, \"fill\", void 0);\n    __decorate$1O([\n        Validate(OPT_COLOR_STRING),\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], SeriesMarker.prototype, \"stroke\", void 0);\n    __decorate$1O([\n        Validate(OPT_NUMBER(0)),\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], SeriesMarker.prototype, \"strokeWidth\", void 0);\n    __decorate$1O([\n        Validate(OPT_NUMBER(0, 1)),\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], SeriesMarker.prototype, \"fillOpacity\", void 0);\n    __decorate$1O([\n        Validate(OPT_NUMBER(0, 1)),\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], SeriesMarker.prototype, \"strokeOpacity\", void 0);\n    return SeriesMarker;\n}(ChangeDetectable));\n\nvar Selection = /** @class */ (function () {\n    function Selection(parent, classOrFactory) {\n        this._nodes = [];\n        this._data = [];\n        this._parent = parent;\n        this._factory = Object.prototype.isPrototypeOf.call(Node, classOrFactory)\n            ? function () { return new classOrFactory(); }\n            : classOrFactory;\n    }\n    Selection.select = function (parent, classOrFactory) {\n        return new Selection(parent, classOrFactory);\n    };\n    Selection.prototype.each = function (iterate) {\n        this._nodes.forEach(function (node, i) { return iterate(node, node.datum, i); });\n        return this;\n    };\n    Selection.prototype.update = function (data, init) {\n        var _this = this;\n        var old = this._data;\n        var parent = this._parent;\n        var factory = this._factory;\n        if (data.length > old.length) {\n            data.slice(old.length).forEach(function (datum) {\n                var node = factory(datum);\n                node.datum = datum;\n                init === null || init === void 0 ? void 0 : init(node);\n                parent.appendChild(node);\n                _this._nodes.push(node);\n            });\n        }\n        else if (data.length < old.length) {\n            this._nodes.splice(data.length).forEach(function (node) {\n                parent.removeChild(node);\n            });\n        }\n        this._data = data.slice(0);\n        for (var i = 0; i < data.length; i++) {\n            this._nodes[i].datum = this._data[i];\n        }\n        return this;\n    };\n    Selection.prototype.clear = function () {\n        this.update([]);\n        return this;\n    };\n    Selection.selectAll = function (parent, predicate) {\n        var results = [];\n        var traverse = function (node) {\n            if (predicate(node)) {\n                results.push(node);\n            }\n            node.children.forEach(traverse);\n        };\n        traverse(parent);\n        return results;\n    };\n    Selection.selectByClass = function (node, Class) {\n        return Selection.selectAll(node, function (node) { return node instanceof Class; });\n    };\n    Selection.selectByTag = function (node, tag) {\n        return Selection.selectAll(node, function (node) { return node.tag === tag; });\n    };\n    Selection.prototype.select = function (predicate) {\n        return Selection.selectAll(this._parent, predicate);\n    };\n    Selection.prototype.selectByClass = function (Class) {\n        return this.select(function (node) { return node instanceof Class; });\n    };\n    Selection.prototype.selectByTag = function (tag) {\n        return this.select(function (node) { return node.tag === tag; });\n    };\n    Selection.prototype.nodes = function () {\n        return this._nodes;\n    };\n    return Selection;\n}());\n\nvar __read$B = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nfunction clamp(x, min, max) {\n    return Math.max(min, Math.min(max, x));\n}\n/**\n * Maps a discrete domain to a continuous numeric range.\n */\nvar BandScale$5 = /** @class */ (function () {\n    function BandScale() {\n        this.type = 'band';\n        this.cache = null;\n        this.cacheProps = ['_domain', 'range', '_paddingInner', '_paddingOuter', 'round', 'interval'];\n        /**\n         * Maps datum to its index in the {@link domain} array.\n         * Used to check for duplicate datums (not allowed).\n         */\n        this.index = new Map();\n        /**\n         * The output range values for datum at each index.\n         */\n        this.ordinalRange = [];\n        /**\n         * Contains unique datums only. Since `{}` is used in place of `Map`\n         * for IE11 compatibility, the datums are converted `toString` before\n         * the uniqueness check.\n         */\n        this._domain = [];\n        this.range = [0, 1];\n        this._bandwidth = 1;\n        this._rawBandwidth = 1;\n        /**\n         * The ratio of the range that is reserved for space between bands.\n         */\n        this._paddingInner = 0;\n        /**\n         * The ratio of the range that is reserved for space before the first\n         * and after the last band.\n         */\n        this._paddingOuter = 0;\n        this.round = false;\n    }\n    BandScale.prototype.didChange = function () {\n        var _this = this;\n        var cache = this.cache;\n        var didChange = !cache || this.cacheProps.some(function (p) { return _this[p] !== cache[p]; });\n        if (didChange) {\n            this.cache = {};\n            this.cacheProps.forEach(function (p) { return (_this.cache[p] = _this[p]); });\n            return true;\n        }\n        return false;\n    };\n    BandScale.prototype.refresh = function () {\n        if (this.didChange()) {\n            this.update();\n        }\n    };\n    Object.defineProperty(BandScale.prototype, \"domain\", {\n        get: function () {\n            return this._domain;\n        },\n        set: function (values) {\n            var domain = [];\n            this.index = new Map();\n            var index = this.index;\n            // In case one wants to have duplicate domain values, for example, two 'Italy' categories,\n            // one should use objects rather than strings for domain values like so:\n            // { toString: () => 'Italy' }\n            // { toString: () => 'Italy' }\n            values.forEach(function (value) {\n                if (index.get(value) === undefined) {\n                    index.set(value, domain.push(value) - 1);\n                }\n            });\n            this._domain = domain;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    BandScale.prototype.ticks = function () {\n        this.refresh();\n        var _a = this.interval, interval = _a === void 0 ? 1 : _a;\n        var step = Math.abs(Math.round(interval));\n        return this._domain.filter(function (_, i) { return i % step === 0; });\n    };\n    BandScale.prototype.convert = function (d) {\n        this.refresh();\n        var i = this.index.get(d);\n        if (i === undefined) {\n            return NaN;\n        }\n        var r = this.ordinalRange[i];\n        if (r === undefined) {\n            return NaN;\n        }\n        return r;\n    };\n    BandScale.prototype.invert = function (position) {\n        this.refresh();\n        var index = this.ordinalRange.findIndex(function (p) { return p === position; });\n        return this.domain[index];\n    };\n    Object.defineProperty(BandScale.prototype, \"bandwidth\", {\n        get: function () {\n            this.refresh();\n            return this._bandwidth;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BandScale.prototype, \"rawBandwidth\", {\n        get: function () {\n            this.refresh();\n            return this._rawBandwidth;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BandScale.prototype, \"padding\", {\n        get: function () {\n            return this._paddingInner;\n        },\n        set: function (value) {\n            value = clamp(value, 0, 1);\n            this._paddingInner = value;\n            this._paddingOuter = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BandScale.prototype, \"paddingInner\", {\n        get: function () {\n            return this._paddingInner;\n        },\n        set: function (value) {\n            this._paddingInner = clamp(value, 0, 1);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BandScale.prototype, \"paddingOuter\", {\n        get: function () {\n            return this._paddingOuter;\n        },\n        set: function (value) {\n            this._paddingOuter = clamp(value, 0, 1);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    BandScale.prototype.update = function () {\n        var count = this._domain.length;\n        if (count === 0) {\n            return;\n        }\n        var round = this.round;\n        var paddingInner = this._paddingInner;\n        var paddingOuter = this._paddingOuter;\n        var _a = __read$B(this.range, 2), r0 = _a[0], r1 = _a[1];\n        var width = r1 - r0;\n        var rawStep = width / Math.max(1, count + 2 * paddingOuter - paddingInner);\n        var step = round ? Math.floor(rawStep) : rawStep;\n        var fullBandWidth = step * (count - paddingInner);\n        var x0 = r0 + (width - fullBandWidth) / 2;\n        var start = round ? Math.round(x0) : x0;\n        var bw = step * (1 - paddingInner);\n        var bandwidth = round ? Math.round(bw) : bw;\n        var rawBandwidth = rawStep * (1 - paddingInner);\n        var values = [];\n        for (var i = 0; i < count; i++) {\n            values.push(start + step * i);\n        }\n        this._bandwidth = bandwidth;\n        this._rawBandwidth = rawBandwidth;\n        this.ordinalRange = values;\n    };\n    return BandScale;\n}());\n\nvar __extends$U = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1N = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar Line = /** @class */ (function (_super) {\n    __extends$U(Line, _super);\n    function Line() {\n        var _this = _super.call(this) || this;\n        _this.x1 = 0;\n        _this.y1 = 0;\n        _this.x2 = 0;\n        _this.y2 = 0;\n        _this.restoreOwnStyles();\n        return _this;\n    }\n    Line.prototype.computeBBox = function () {\n        return new BBox(this.x1, this.y1, this.x2 - this.x1, this.y2 - this.y1);\n    };\n    Line.prototype.isPointInPath = function (_x, _y) {\n        return false;\n    };\n    Line.prototype.render = function (renderCtx) {\n        var _a;\n        var ctx = renderCtx.ctx, forceRender = renderCtx.forceRender, stats = renderCtx.stats;\n        if (this.dirty === RedrawType.NONE && !forceRender) {\n            if (stats)\n                stats.nodesSkipped += this.nodeCount.count;\n            return;\n        }\n        this.computeTransformMatrix();\n        this.matrix.toContext(ctx);\n        var x1 = this.x1;\n        var y1 = this.y1;\n        var x2 = this.x2;\n        var y2 = this.y2;\n        // Align to the pixel grid if the line is strictly vertical\n        // or horizontal (but not both, i.e. a dot).\n        if (x1 === x2) {\n            var x = Math.round(x1) + (Math.floor(this.strokeWidth) % 2) / 2;\n            x1 = x;\n            x2 = x;\n        }\n        else if (y1 === y2) {\n            var y = Math.round(y1) + (Math.floor(this.strokeWidth) % 2) / 2;\n            y1 = y;\n            y2 = y;\n        }\n        ctx.beginPath();\n        ctx.moveTo(x1, y1);\n        ctx.lineTo(x2, y2);\n        this.fillStroke(ctx);\n        (_a = this.fillShadow) === null || _a === void 0 ? void 0 : _a.markClean();\n        _super.prototype.render.call(this, renderCtx);\n    };\n    Line.className = 'Line';\n    Line.defaultStyles = Object.assign({}, Shape.defaultStyles, {\n        fill: undefined,\n        strokeWidth: 1,\n    });\n    __decorate$1N([\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], Line.prototype, \"x1\", void 0);\n    __decorate$1N([\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], Line.prototype, \"y1\", void 0);\n    __decorate$1N([\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], Line.prototype, \"x2\", void 0);\n    __decorate$1N([\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], Line.prototype, \"y2\", void 0);\n    return Line;\n}(Shape));\n\nfunction isEqual$2(a, b, epsilon) {\n    if (epsilon === void 0) { epsilon = 1e-10; }\n    return Math.abs(a - b) < epsilon;\n}\n/**\n * `Number.toFixed(n)` always formats a number so that it has `n` digits after the decimal point.\n * For example, `Number(0.00003427).toFixed(2)` returns `0.00`.\n * That's not very helpful, because all the meaningful information is lost.\n * In this case we would want the formatted value to have at least two significant digits: `0.000034`,\n * not two fraction digits.\n * @param value\n * @param fractionOrSignificantDigits\n */\nfunction toFixed(value, fractionOrSignificantDigits) {\n    if (fractionOrSignificantDigits === void 0) { fractionOrSignificantDigits = 2; }\n    var power = Math.floor(Math.log(Math.abs(value)) / Math.LN10);\n    if (power >= 0 || !isFinite(power)) {\n        return value.toFixed(fractionOrSignificantDigits); // fraction digits\n    }\n    return value.toFixed(Math.abs(power) - 1 + fractionOrSignificantDigits); // significant digits\n}\n/**\n * Returns the mathematically correct n modulus of m. For context, the JS % operator is remainder\n * NOT modulus, which is why this is needed.\n */\nfunction mod(n, m) {\n    if (n >= 0) {\n        return Math.floor(n % m);\n    }\n    return Math.floor((n % m) + m);\n}\n\nvar __extends$T = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1M = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar ArcType;\n(function (ArcType) {\n    ArcType[ArcType[\"Open\"] = 0] = \"Open\";\n    ArcType[ArcType[\"Chord\"] = 1] = \"Chord\";\n    ArcType[ArcType[\"Round\"] = 2] = \"Round\";\n})(ArcType || (ArcType = {}));\n/**\n * Elliptical arc node.\n */\nvar Arc = /** @class */ (function (_super) {\n    __extends$T(Arc, _super);\n    function Arc() {\n        var _this = _super.call(this) || this;\n        _this.centerX = 0;\n        _this.centerY = 0;\n        _this.radius = 10;\n        _this.startAngle = 0;\n        _this.endAngle = Math.PI * 2;\n        _this.counterClockwise = false;\n        /**\n         * The type of arc to render:\n         * - {@link ArcType.Open} - end points of the arc segment are not connected (default)\n         * - {@link ArcType.Chord} - end points of the arc segment are connected by a line segment\n         * - {@link ArcType.Round} - each of the end points of the arc segment are connected\n         *                           to the center of the arc\n         * Arcs with {@link ArcType.Open} do not support hit testing, even if they have their\n         * {@link Shape.fillStyle} set, because they are not closed paths. Hit testing support\n         * would require using two paths - one for rendering, another for hit testing - and there\n         * doesn't seem to be a compelling reason to do that, when one can just use {@link ArcType.Chord}\n         * to create a closed path.\n         */\n        _this.type = ArcType.Open;\n        _this.restoreOwnStyles();\n        return _this;\n    }\n    Object.defineProperty(Arc.prototype, \"fullPie\", {\n        get: function () {\n            return isEqual$2(normalizeAngle360(this.startAngle), normalizeAngle360(this.endAngle));\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Arc.prototype.updatePath = function () {\n        var path = this.path;\n        path.clear(); // No need to recreate the Path, can simply clear the existing one.\n        path.arc(this.centerX, this.centerY, this.radius, this.startAngle, this.endAngle, this.counterClockwise);\n        if (this.type === ArcType.Chord) {\n            path.closePath();\n        }\n        else if (this.type === ArcType.Round && !this.fullPie) {\n            path.lineTo(this.centerX, this.centerY);\n            path.closePath();\n        }\n    };\n    Arc.prototype.computeBBox = function () {\n        // Only works with full arcs (circles) and untransformed ellipses.\n        return new BBox(this.centerX - this.radius, this.centerY - this.radius, this.radius * 2, this.radius * 2);\n    };\n    Arc.prototype.isPointInPath = function (x, y) {\n        var point = this.transformPoint(x, y);\n        var bbox = this.computeBBox();\n        return (this.type !== ArcType.Open &&\n            bbox.containsPoint(point.x, point.y) &&\n            this.path.isPointInPath(point.x, point.y));\n    };\n    Arc.className = 'Arc';\n    Arc.defaultStyles = Object.assign({}, Shape.defaultStyles, {\n        lineWidth: 1,\n        fillStyle: null,\n    });\n    __decorate$1M([\n        ScenePathChangeDetection()\n    ], Arc.prototype, \"centerX\", void 0);\n    __decorate$1M([\n        ScenePathChangeDetection()\n    ], Arc.prototype, \"centerY\", void 0);\n    __decorate$1M([\n        ScenePathChangeDetection()\n    ], Arc.prototype, \"radius\", void 0);\n    __decorate$1M([\n        ScenePathChangeDetection()\n    ], Arc.prototype, \"startAngle\", void 0);\n    __decorate$1M([\n        ScenePathChangeDetection()\n    ], Arc.prototype, \"endAngle\", void 0);\n    __decorate$1M([\n        ScenePathChangeDetection()\n    ], Arc.prototype, \"counterClockwise\", void 0);\n    __decorate$1M([\n        ScenePathChangeDetection()\n    ], Arc.prototype, \"type\", void 0);\n    return Arc;\n}(Path));\n\nfunction ProxyPropertyOnWrite(childName, childProperty) {\n    return addTransformToInstanceProperty(function (target, key, value) {\n        target[childName][childProperty !== null && childProperty !== void 0 ? childProperty : key] = value;\n        return value;\n    });\n}\n/**\n * Allows side-effects to be triggered on property write.\n *\n * @param opts.newValue called when a new value is set - never called for undefined values.\n * @param opts.oldValue called with the old value before a new value is set - never called for\n *                      undefined values.\n * @param opts.changeValue called on any change to the value - always called.\n */\nfunction ActionOnSet(opts) {\n    var newValueFn = opts.newValue, oldValueFn = opts.oldValue, changeValueFn = opts.changeValue;\n    return addTransformToInstanceProperty(function (target, _, newValue, oldValue) {\n        if (newValue !== oldValue) {\n            if (oldValue !== undefined) {\n                oldValueFn === null || oldValueFn === void 0 ? void 0 : oldValueFn.call(target, oldValue);\n            }\n            if (newValue !== undefined) {\n                newValueFn === null || newValueFn === void 0 ? void 0 : newValueFn.call(target, newValue);\n            }\n            changeValueFn === null || changeValueFn === void 0 ? void 0 : changeValueFn.call(target, newValue, oldValue);\n        }\n        return newValue;\n    });\n}\n\nvar __decorate$1L = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar Caption = /** @class */ (function () {\n    function Caption() {\n        this.node = new Text();\n        this.enabled = false;\n        this.text = undefined;\n        this.fontSize = 10;\n        this.fontFamily = 'sans-serif';\n        this.spacing = Caption.PADDING;\n        this.lineHeight = undefined;\n        this.maxWidth = undefined;\n        this.maxHeight = undefined;\n        this.wrapping = 'always';\n        var node = this.node;\n        node.textAlign = 'center';\n        node.pointerEvents = PointerEvents.None;\n    }\n    Caption.prototype.computeTextWrap = function (containerWidth, containerHeight) {\n        var _a, _b;\n        var _c = this, text = _c.text, wrapping = _c.wrapping;\n        var maxWidth = Math.min((_a = this.maxWidth) !== null && _a !== void 0 ? _a : Infinity, containerWidth);\n        var maxHeight = (_b = this.maxHeight) !== null && _b !== void 0 ? _b : containerHeight;\n        if (!isFinite(maxWidth) && !isFinite(maxHeight)) {\n            this.node.text = text;\n            return;\n        }\n        var wrapped = Text.wrap(text !== null && text !== void 0 ? text : '', maxWidth, maxHeight, this, wrapping);\n        this.node.text = wrapped;\n    };\n    Caption.PADDING = 10;\n    __decorate$1L([\n        Validate(BOOLEAN)\n    ], Caption.prototype, \"enabled\", void 0);\n    __decorate$1L([\n        Validate(OPT_STRING),\n        ProxyPropertyOnWrite('node')\n    ], Caption.prototype, \"text\", void 0);\n    __decorate$1L([\n        Validate(OPT_FONT_STYLE),\n        ProxyPropertyOnWrite('node')\n    ], Caption.prototype, \"fontStyle\", void 0);\n    __decorate$1L([\n        Validate(OPT_FONT_WEIGHT),\n        ProxyPropertyOnWrite('node')\n    ], Caption.prototype, \"fontWeight\", void 0);\n    __decorate$1L([\n        Validate(NUMBER(0)),\n        ProxyPropertyOnWrite('node')\n    ], Caption.prototype, \"fontSize\", void 0);\n    __decorate$1L([\n        Validate(STRING),\n        ProxyPropertyOnWrite('node')\n    ], Caption.prototype, \"fontFamily\", void 0);\n    __decorate$1L([\n        Validate(OPT_COLOR_STRING),\n        ProxyPropertyOnWrite('node', 'fill')\n    ], Caption.prototype, \"color\", void 0);\n    __decorate$1L([\n        Validate(OPT_NUMBER(0))\n    ], Caption.prototype, \"spacing\", void 0);\n    __decorate$1L([\n        Validate(OPT_NUMBER(0))\n    ], Caption.prototype, \"lineHeight\", void 0);\n    __decorate$1L([\n        Validate(OPT_NUMBER(0))\n    ], Caption.prototype, \"maxWidth\", void 0);\n    __decorate$1L([\n        Validate(OPT_NUMBER(0))\n    ], Caption.prototype, \"maxHeight\", void 0);\n    __decorate$1L([\n        Validate(TEXT_WRAP)\n    ], Caption.prototype, \"wrapping\", void 0);\n    return Caption;\n}());\n\nfunction areArrayItemsStrictlyEqual(arrA, arrB) {\n    return (arrA.length === arrB.length &&\n        arrA.every(function (a, i) {\n            var b = arrB[i];\n            if (Array.isArray(a) && Array.isArray(b)) {\n                return areArrayItemsStrictlyEqual(a, b);\n            }\n            return a === b;\n        }));\n}\nfunction areArrayNumbersEqual(arrA, arrB) {\n    return arrA.length === arrB.length && arrA.every(function (item, i) { return Number(item) === Number(arrB[i]); });\n}\n\nvar __read$A = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar ContinuousScale = /** @class */ (function () {\n    function ContinuousScale(domain, range) {\n        this.domain = domain;\n        this.range = range;\n        this.nice = false;\n        this.tickCount = ContinuousScale.defaultTickCount;\n        this.minTickCount = 0;\n        this.maxTickCount = Infinity;\n        this.niceDomain = null;\n        this.strictClampByDefault = false;\n        this.cache = null;\n        this.cacheProps = ['domain', 'range', 'nice', 'tickCount', 'minTickCount', 'maxTickCount'];\n    }\n    ContinuousScale.prototype.transform = function (x) {\n        return x;\n    };\n    ContinuousScale.prototype.transformInvert = function (x) {\n        return x;\n    };\n    ContinuousScale.prototype.fromDomain = function (d) {\n        if (typeof d === 'number') {\n            return d;\n        }\n        else if (d instanceof Date) {\n            return d.getTime();\n        }\n        return NaN;\n    };\n    ContinuousScale.prototype.getDomain = function () {\n        if (this.nice) {\n            this.refresh();\n            if (this.niceDomain) {\n                return this.niceDomain;\n            }\n        }\n        return this.domain;\n    };\n    ContinuousScale.prototype.convert = function (x, params) {\n        var _this = this;\n        var _a;\n        if (!this.domain || this.domain.length < 2) {\n            return NaN;\n        }\n        this.refresh();\n        var strict = (_a = params === null || params === void 0 ? void 0 : params.strict) !== null && _a !== void 0 ? _a : this.strictClampByDefault;\n        var domain = this.getDomain().map(function (d) { return _this.transform(d); });\n        var _b = __read$A(domain, 2), d0 = _b[0], d1 = _b[1];\n        var range = this.range;\n        var _c = __read$A(range, 2), r0 = _c[0], r1 = _c[1];\n        x = this.transform(x);\n        if (x < d0) {\n            return strict ? NaN : r0;\n        }\n        else if (x > d1) {\n            return strict ? NaN : r1;\n        }\n        if (d0 === d1) {\n            return (r0 + r1) / 2;\n        }\n        else if (x === d0) {\n            return r0;\n        }\n        else if (x === d1) {\n            return r1;\n        }\n        return (r0 + ((this.fromDomain(x) - this.fromDomain(d0)) / (this.fromDomain(d1) - this.fromDomain(d0))) * (r1 - r0));\n    };\n    ContinuousScale.prototype.invert = function (x) {\n        var _this = this;\n        this.refresh();\n        var domain = this.getDomain().map(function (d) { return _this.transform(d); });\n        var _a = __read$A(domain, 2), d0 = _a[0], d1 = _a[1];\n        var range = this.range;\n        var _b = __read$A(range, 2), r0 = _b[0], r1 = _b[1];\n        var isReversed = r0 > r1;\n        var rMin = isReversed ? r1 : r0;\n        var rMax = isReversed ? r0 : r1;\n        var d;\n        if (x < rMin) {\n            return isReversed ? d1 : d0;\n        }\n        else if (x > rMax) {\n            return isReversed ? d0 : d1;\n        }\n        else if (r0 === r1) {\n            d = this.toDomain((this.fromDomain(d0) + this.fromDomain(d1)) / 2);\n        }\n        else {\n            d = this.toDomain(this.fromDomain(d0) + ((x - r0) / (r1 - r0)) * (this.fromDomain(d1) - this.fromDomain(d0)));\n        }\n        return this.transformInvert(d);\n    };\n    ContinuousScale.prototype.didChange = function () {\n        var _this = this;\n        var cache = this.cache;\n        var didChange = !cache || this.cacheProps.some(function (p) { return _this[p] !== cache[p]; });\n        if (didChange) {\n            this.cache = {};\n            this.cacheProps.forEach(function (p) { return (_this.cache[p] = _this[p]); });\n            return true;\n        }\n        return false;\n    };\n    ContinuousScale.prototype.refresh = function () {\n        if (this.didChange()) {\n            this.update();\n        }\n    };\n    ContinuousScale.prototype.isDenseInterval = function (_a) {\n        var start = _a.start, stop = _a.stop, interval = _a.interval, count = _a.count;\n        var range = this.range;\n        var domain = stop - start;\n        var min = Math.min(range[0], range[1]);\n        var max = Math.max(range[0], range[1]);\n        var availableRange = max - min;\n        var step = typeof interval === 'number' ? interval : 1;\n        count !== null && count !== void 0 ? count : (count = domain / step);\n        if (count >= availableRange) {\n            Logger.warn(\"the configured tick interval results in more than 1 tick per pixel, ignoring. Supply a larger tick interval or omit this configuration.\");\n            return true;\n        }\n        return false;\n    };\n    ContinuousScale.defaultTickCount = 5;\n    ContinuousScale.defaultMaxTickCount = 6;\n    return ContinuousScale;\n}());\n\nvar __extends$S = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nfunction ticks (start, stop, count, minCount, maxCount) {\n    if (count < 2) {\n        return range(start, stop, stop - start);\n    }\n    var step = tickStep(start, stop, count, minCount, maxCount);\n    if (isNaN(step)) {\n        return new NumericTicks(0);\n    }\n    start = Math.ceil(start / step) * step;\n    stop = Math.floor(stop / step) * step;\n    return range(start, stop, step);\n}\nvar tickMultipliers = [1, 2, 5, 10];\nfunction tickStep(a, b, count, minCount, maxCount) {\n    if (minCount === void 0) { minCount = 0; }\n    if (maxCount === void 0) { maxCount = Infinity; }\n    var rawStep = (b - a) / count;\n    var power = Math.floor(Math.log10(rawStep));\n    var step = Math.pow(10, power);\n    var m = tickMultipliers\n        .map(function (multiplier) {\n        var s = multiplier * step;\n        var c = Math.ceil((b - a) / s);\n        var isWithinBounds = c >= minCount && c <= maxCount;\n        var diffCount = Math.abs(c - count);\n        return { multiplier: multiplier, isWithinBounds: isWithinBounds, diffCount: diffCount };\n    })\n        .sort(function (a, b) {\n        if (a.isWithinBounds !== b.isWithinBounds) {\n            return a.isWithinBounds ? -1 : 1;\n        }\n        return a.diffCount - b.diffCount;\n    })[0].multiplier;\n    if (!m || isNaN(m)) {\n        return NaN;\n    }\n    return m * step;\n}\nfunction singleTickDomain(a, b) {\n    var power = Math.floor(Math.log10(b - a));\n    var step = Math.pow(10, power);\n    return tickMultipliers\n        .map(function (multiplier) {\n        var s = multiplier * step;\n        var start = Math.floor(a / s) * s;\n        var end = Math.ceil(b / s) * s;\n        var error = 1 - (b - a) / (end - start);\n        var domain = [start, end];\n        return { error: error, domain: domain };\n    })\n        .sort(function (a, b) { return a.error - b.error; })[0].domain;\n}\nvar NumericTicks = /** @class */ (function (_super) {\n    __extends$S(NumericTicks, _super);\n    function NumericTicks(fractionDigits, elements) {\n        var _this = _super.call(this) || this;\n        if (elements) {\n            for (var i = 0, n = elements.length; i < n; i++) {\n                _this[i] = elements[i];\n            }\n        }\n        _this.fractionDigits = fractionDigits;\n        return _this;\n    }\n    return NumericTicks;\n}(Array));\nfunction range(start, stop, step) {\n    var countDigits = function (expNo) {\n        var _a, _b;\n        var parts = expNo.split('e');\n        return Math.max(((_b = (_a = parts[0].split('.')[1]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) - Number(parts[1]), 0);\n    };\n    var fractionalDigits = countDigits((step % 1).toExponential());\n    var f = Math.pow(10, fractionalDigits);\n    var n = Math.ceil((stop - start) / step);\n    var values = new NumericTicks(fractionalDigits);\n    for (var i = 0; i <= n; i++) {\n        var value = start + step * i;\n        values.push(Math.round(value * f) / f);\n    }\n    return values;\n}\n\nvar CONSTANTS = {\n    periods: ['AM', 'PM'],\n    days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n    shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n    months: [\n        'January',\n        'February',\n        'March',\n        'April',\n        'May',\n        'June',\n        'July',\n        'August',\n        'September',\n        'October',\n        'November',\n        'December',\n    ],\n    shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n};\nfunction dayOfYear(date, startOfYear) {\n    if (startOfYear === void 0) { startOfYear = new Date(date.getFullYear(), 0, 1); }\n    var startOffset = date.getTimezoneOffset() - startOfYear.getTimezoneOffset();\n    var timeDiff = date.getTime() - startOfYear.getTime() + startOffset * 60000;\n    var timeOneDay = 3600000 * 24;\n    return Math.floor(timeDiff / timeOneDay);\n}\nfunction weekOfYear(date, startDay) {\n    var startOfYear = new Date(date.getFullYear(), 0, 1);\n    var startOfYearDay = startOfYear.getDay();\n    var firstWeekStartOffset = (startDay - startOfYearDay + 7) % 7;\n    var startOffset = new Date(date.getFullYear(), 0, firstWeekStartOffset + 1);\n    if (startOffset <= date) {\n        return Math.floor(dayOfYear(date, startOffset) / 7) + 1;\n    }\n    // Days before week 1 are in week 0.\n    return 0;\n}\nvar SUNDAY = 0;\nvar MONDAY = 1;\nvar THURSDAY = 4;\nfunction isoWeekOfYear(date, year) {\n    if (year === void 0) { year = date.getFullYear(); }\n    var firstOfYear = new Date(year, 0, 1);\n    var firstOfYearDay = firstOfYear.getDay();\n    var firstThursdayOffset = (THURSDAY - firstOfYearDay + 7) % 7;\n    var startOffset = new Date(year, 0, firstThursdayOffset - (THURSDAY - MONDAY) + 1);\n    if (startOffset <= date) {\n        return Math.floor(dayOfYear(date, startOffset) / 7) + 1;\n    }\n    // Days before week 1 are in week 52/53 of previous year.\n    return isoWeekOfYear(date, year - 1);\n}\nfunction timezone(date) {\n    var offset = date.getTimezoneOffset();\n    var unsignedOffset = Math.abs(offset);\n    var sign = offset > 0 ? '-' : '+';\n    return \"\" + sign + pad(Math.floor(unsignedOffset / 60), 2, '0') + pad(Math.floor(unsignedOffset % 60), 2, '0');\n}\nvar FORMATTERS = {\n    a: function (d) { return CONSTANTS.shortDays[d.getDay()]; },\n    A: function (d) { return CONSTANTS.days[d.getDay()]; },\n    b: function (d) { return CONSTANTS.shortMonths[d.getMonth()]; },\n    B: function (d) { return CONSTANTS.months[d.getMonth()]; },\n    c: '%x, %X',\n    d: function (d, p) { return pad(d.getDate(), 2, p !== null && p !== void 0 ? p : '0'); },\n    e: '%_d',\n    f: function (d, p) { return pad(d.getMilliseconds() * 1000, 6, p !== null && p !== void 0 ? p : '0'); },\n    H: function (d, p) { return pad(d.getHours(), 2, p !== null && p !== void 0 ? p : '0'); },\n    I: function (d, p) {\n        var hours = d.getHours() % 12;\n        return hours === 0 ? '12' : pad(hours, 2, p !== null && p !== void 0 ? p : '0');\n    },\n    j: function (d, p) { return pad(dayOfYear(d) + 1, 3, p !== null && p !== void 0 ? p : '0'); },\n    m: function (d, p) { return pad(d.getMonth() + 1, 2, p !== null && p !== void 0 ? p : '0'); },\n    M: function (d, p) { return pad(d.getMinutes(), 2, p !== null && p !== void 0 ? p : '0'); },\n    L: function (d, p) { return pad(d.getMilliseconds(), 3, p !== null && p !== void 0 ? p : '0'); },\n    p: function (d) { return (d.getHours() < 12 ? 'AM' : 'PM'); },\n    Q: function (d) { return String(d.getTime()); },\n    s: function (d) { return String(Math.floor(d.getTime() / 1000)); },\n    S: function (d, p) { return pad(d.getSeconds(), 2, p !== null && p !== void 0 ? p : '0'); },\n    u: function (d) {\n        var day = d.getDay();\n        if (day < 1)\n            day += 7;\n        return String(day % 7);\n    },\n    U: function (d, p) { return pad(weekOfYear(d, SUNDAY), 2, p !== null && p !== void 0 ? p : '0'); },\n    V: function (d, p) { return pad(isoWeekOfYear(d), 2, p !== null && p !== void 0 ? p : '0'); },\n    w: function (d, p) { return pad(d.getDay(), 2, p !== null && p !== void 0 ? p : '0'); },\n    W: function (d, p) { return pad(weekOfYear(d, MONDAY), 2, p !== null && p !== void 0 ? p : '0'); },\n    x: '%-m/%-d/%Y',\n    X: '%-I:%M:%S %p',\n    y: function (d, p) { return pad(d.getFullYear() % 100, 2, p !== null && p !== void 0 ? p : '0'); },\n    Y: function (d, p) { return pad(d.getFullYear(), 4, p !== null && p !== void 0 ? p : '0'); },\n    Z: function (d) { return timezone(d); },\n    '%': function () { return '%'; },\n};\nvar PADS = {\n    _: ' ',\n    '0': '0',\n    '-': '',\n};\nfunction pad(value, size, padChar) {\n    var output = String(Math.floor(value));\n    if (output.length >= size) {\n        return output;\n    }\n    return \"\" + padChar.repeat(size - output.length) + output;\n}\nfunction buildFormatter(formatString) {\n    var formatParts = [];\n    while (formatString.length > 0) {\n        var nextEscapeIdx = formatString.indexOf('%');\n        if (nextEscapeIdx !== 0) {\n            var literalPart = nextEscapeIdx > 0 ? formatString.substring(0, nextEscapeIdx) : formatString;\n            formatParts.push(literalPart);\n        }\n        if (nextEscapeIdx < 0)\n            break;\n        var maybePadSpecifier = formatString[nextEscapeIdx + 1];\n        var maybePad = PADS[maybePadSpecifier];\n        if (maybePad != null) {\n            nextEscapeIdx++;\n        }\n        var maybeFormatterSpecifier = formatString[nextEscapeIdx + 1];\n        var maybeFormatter = FORMATTERS[maybeFormatterSpecifier];\n        if (typeof maybeFormatter === 'function') {\n            formatParts.push([maybeFormatter, maybePad]);\n        }\n        else if (typeof maybeFormatter === 'string') {\n            var formatter = buildFormatter(maybeFormatter);\n            formatParts.push([formatter, maybePad]);\n        }\n        else {\n            formatParts.push(\"\" + (maybePad !== null && maybePad !== void 0 ? maybePad : '') + maybeFormatterSpecifier);\n        }\n        formatString = formatString.substring(nextEscapeIdx + 2);\n    }\n    return function (dateTime) {\n        var dateTimeAsDate = typeof dateTime === 'number' ? new Date(dateTime) : dateTime;\n        return formatParts.map(function (c) { return (typeof c === 'string' ? c : c[0](dateTimeAsDate, c[1])); }).join('');\n    };\n}\n\nvar __extends$R = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __values$m = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read$z = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$m = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar _a$2;\nvar DefaultTimeFormats;\n(function (DefaultTimeFormats) {\n    DefaultTimeFormats[DefaultTimeFormats[\"MILLISECOND\"] = 0] = \"MILLISECOND\";\n    DefaultTimeFormats[DefaultTimeFormats[\"SECOND\"] = 1] = \"SECOND\";\n    DefaultTimeFormats[DefaultTimeFormats[\"MINUTE\"] = 2] = \"MINUTE\";\n    DefaultTimeFormats[DefaultTimeFormats[\"HOUR\"] = 3] = \"HOUR\";\n    DefaultTimeFormats[DefaultTimeFormats[\"WEEK_DAY\"] = 4] = \"WEEK_DAY\";\n    DefaultTimeFormats[DefaultTimeFormats[\"SHORT_MONTH\"] = 5] = \"SHORT_MONTH\";\n    DefaultTimeFormats[DefaultTimeFormats[\"MONTH\"] = 6] = \"MONTH\";\n    DefaultTimeFormats[DefaultTimeFormats[\"SHORT_YEAR\"] = 7] = \"SHORT_YEAR\";\n    DefaultTimeFormats[DefaultTimeFormats[\"YEAR\"] = 8] = \"YEAR\";\n})(DefaultTimeFormats || (DefaultTimeFormats = {}));\nvar formatStrings = (_a$2 = {},\n    _a$2[DefaultTimeFormats.MILLISECOND] = '.%L',\n    _a$2[DefaultTimeFormats.SECOND] = ':%S',\n    _a$2[DefaultTimeFormats.MINUTE] = '%I:%M',\n    _a$2[DefaultTimeFormats.HOUR] = '%I %p',\n    _a$2[DefaultTimeFormats.WEEK_DAY] = '%a',\n    _a$2[DefaultTimeFormats.SHORT_MONTH] = '%b %d',\n    _a$2[DefaultTimeFormats.MONTH] = '%B',\n    _a$2[DefaultTimeFormats.SHORT_YEAR] = '%y',\n    _a$2[DefaultTimeFormats.YEAR] = '%Y',\n    _a$2);\nfunction toNumber(x) {\n    return x instanceof Date ? x.getTime() : x;\n}\nvar TimeScale$1 = /** @class */ (function (_super) {\n    __extends$R(TimeScale, _super);\n    function TimeScale() {\n        var _this = _super.call(this, [new Date(2022, 11, 7), new Date(2022, 11, 8)], [0, 1]) || this;\n        _this.type = 'time';\n        _this.cacheProps = [\n            'domain',\n            'range',\n            'nice',\n            'tickCount',\n            'interval',\n            'minTickCount',\n            'maxTickCount',\n        ];\n        _this.year = year;\n        _this.month = month;\n        _this.week = sunday;\n        _this.day = day;\n        _this.hour = hour;\n        _this.minute = minute;\n        _this.second = second;\n        _this.millisecond = millisecond;\n        /**\n         * Array of default tick intervals in the following format:\n         *\n         *     [\n         *         interval (unit of time),\n         *         number of units (step),\n         *         the length of that number of units in milliseconds\n         *     ]\n         */\n        _this.tickIntervals = [\n            [_this.second, 1, durationSecond],\n            [_this.second, 5, 5 * durationSecond],\n            [_this.second, 15, 15 * durationSecond],\n            [_this.second, 30, 30 * durationSecond],\n            [_this.minute, 1, durationMinute],\n            [_this.minute, 5, 5 * durationMinute],\n            [_this.minute, 15, 15 * durationMinute],\n            [_this.minute, 30, 30 * durationMinute],\n            [_this.hour, 1, durationHour],\n            [_this.hour, 3, 3 * durationHour],\n            [_this.hour, 6, 6 * durationHour],\n            [_this.hour, 12, 12 * durationHour],\n            [_this.day, 1, durationDay],\n            [_this.day, 2, 2 * durationDay],\n            [_this.week, 1, durationWeek],\n            [_this.week, 2, 2 * durationWeek],\n            [_this.week, 3, 3 * durationWeek],\n            [_this.month, 1, durationMonth],\n            [_this.month, 2, 2 * durationMonth],\n            [_this.month, 3, 3 * durationMonth],\n            [_this.month, 4, 4 * durationMonth],\n            [_this.month, 6, 6 * durationMonth],\n            [_this.year, 1, durationYear],\n        ];\n        return _this;\n    }\n    TimeScale.prototype.toDomain = function (d) {\n        return new Date(d);\n    };\n    TimeScale.prototype.calculateDefaultTickFormat = function (ticks) {\n        var e_1, _a;\n        if (ticks === void 0) { ticks = []; }\n        var defaultTimeFormat = DefaultTimeFormats.YEAR;\n        var updateFormat = function (format) {\n            if (format < defaultTimeFormat) {\n                defaultTimeFormat = format;\n            }\n        };\n        try {\n            for (var ticks_1 = __values$m(ticks), ticks_1_1 = ticks_1.next(); !ticks_1_1.done; ticks_1_1 = ticks_1.next()) {\n                var value = ticks_1_1.value;\n                var format = this.getLowestGranularityFormat(value);\n                updateFormat(format);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (ticks_1_1 && !ticks_1_1.done && (_a = ticks_1.return)) _a.call(ticks_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        var firstTick = toNumber(ticks[0]);\n        var lastTick = toNumber(ticks[ticks.length - 1]);\n        var startYear = new Date(firstTick).getFullYear();\n        var stopYear = new Date(lastTick).getFullYear();\n        var yearChange = stopYear - startYear > 0;\n        return this.buildFormatString(defaultTimeFormat, yearChange);\n    };\n    TimeScale.prototype.buildFormatString = function (defaultTimeFormat, yearChange) {\n        var formatStringArray = [formatStrings[defaultTimeFormat]];\n        var timeEndIndex = 0;\n        var domain = this.getDomain();\n        var start = Math.min.apply(Math, __spreadArray$m([], __read$z(domain.map(toNumber))));\n        var stop = Math.max.apply(Math, __spreadArray$m([], __read$z(domain.map(toNumber))));\n        var extent = stop - start;\n        switch (defaultTimeFormat) {\n            case DefaultTimeFormats.SECOND:\n                if (extent / durationMinute > 1) {\n                    formatStringArray.push(formatStrings[DefaultTimeFormats.MINUTE]);\n                }\n            // fall through deliberately\n            case DefaultTimeFormats.MINUTE:\n                if (extent / durationHour > 1) {\n                    formatStringArray.push(formatStrings[DefaultTimeFormats.HOUR]);\n                }\n            // fall through deliberately\n            case DefaultTimeFormats.HOUR:\n                timeEndIndex = formatStringArray.length;\n                if (extent / durationDay > 1) {\n                    formatStringArray.push(formatStrings[DefaultTimeFormats.WEEK_DAY]);\n                }\n            // fall through deliberately\n            case DefaultTimeFormats.WEEK_DAY:\n                if (extent / durationWeek > 1 || yearChange) {\n                    // if it's more than a week or there is a year change, don't show week day\n                    var weekDayIndex = formatStringArray.indexOf(formatStrings[DefaultTimeFormats.WEEK_DAY]);\n                    if (weekDayIndex > -1) {\n                        formatStringArray.splice(weekDayIndex, 1, formatStrings[DefaultTimeFormats.SHORT_MONTH]);\n                    }\n                }\n            // fall through deliberately\n            case DefaultTimeFormats.SHORT_MONTH:\n            case DefaultTimeFormats.MONTH:\n                if (extent / durationYear > 1 || yearChange) {\n                    formatStringArray.push(formatStrings[DefaultTimeFormats.YEAR]);\n                }\n        }\n        if (timeEndIndex < formatStringArray.length) {\n            // Insert a gap between all date components.\n            formatStringArray = __spreadArray$m(__spreadArray$m([], __read$z(formatStringArray.slice(0, timeEndIndex))), [\n                formatStringArray.slice(timeEndIndex).join(' '),\n            ]);\n        }\n        if (timeEndIndex > 0) {\n            // Reverse order of time components, since they should be displayed in descending\n            // granularity.\n            formatStringArray = __spreadArray$m(__spreadArray$m([], __read$z(formatStringArray.slice(0, timeEndIndex).reverse())), __read$z(formatStringArray.slice(timeEndIndex)));\n            if (timeEndIndex < formatStringArray.length) {\n                // Insert a gap between time and date components.\n                formatStringArray.splice(timeEndIndex, 0, ' ');\n            }\n        }\n        return formatStringArray.join('');\n    };\n    TimeScale.prototype.getLowestGranularityFormat = function (value) {\n        if (this.second.floor(value) < value) {\n            return DefaultTimeFormats.MILLISECOND;\n        }\n        else if (this.minute.floor(value) < value) {\n            return DefaultTimeFormats.SECOND;\n        }\n        else if (this.hour.floor(value) < value) {\n            return DefaultTimeFormats.MINUTE;\n        }\n        else if (this.day.floor(value) < value) {\n            return DefaultTimeFormats.HOUR;\n        }\n        else if (this.month.floor(value) < value) {\n            if (this.week.floor(value) < value) {\n                return DefaultTimeFormats.WEEK_DAY;\n            }\n            return DefaultTimeFormats.SHORT_MONTH;\n        }\n        else if (this.year.floor(value) < value) {\n            return DefaultTimeFormats.MONTH;\n        }\n        return DefaultTimeFormats.YEAR;\n    };\n    TimeScale.prototype.defaultTickFormat = function (ticks) {\n        var formatString = this.calculateDefaultTickFormat(ticks);\n        return function (date) { return buildFormatter(formatString)(date); };\n    };\n    /**\n     * @param options Tick interval options.\n     * @param options.start The start time (timestamp).\n     * @param options.stop The end time (timestamp).\n     * @param options.count Number of intervals between ticks.\n     */\n    TimeScale.prototype.getTickInterval = function (_a) {\n        var _b;\n        var start = _a.start, stop = _a.stop, count = _a.count, minCount = _a.minCount, maxCount = _a.maxCount;\n        var tickIntervals = this.tickIntervals;\n        var countableTimeInterval;\n        var step;\n        var tickCount = count !== null && count !== void 0 ? count : ContinuousScale.defaultTickCount;\n        var target = Math.abs(stop - start) / Math.max(tickCount, 1);\n        var i = 0;\n        while (i < tickIntervals.length && target > tickIntervals[i][2]) {\n            i++;\n        }\n        if (i === 0) {\n            step = Math.max(tickStep(start, stop, tickCount, minCount, maxCount), 1);\n            countableTimeInterval = this.millisecond;\n        }\n        else if (i === tickIntervals.length) {\n            var y0 = start / durationYear;\n            var y1 = stop / durationYear;\n            step = tickStep(y0, y1, tickCount, minCount, maxCount);\n            countableTimeInterval = this.year;\n        }\n        else {\n            var diff0 = target - tickIntervals[i - 1][2];\n            var diff1 = tickIntervals[i][2] - target;\n            var index = diff0 < diff1 ? i - 1 : i;\n            _b = __read$z(tickIntervals[index], 2), countableTimeInterval = _b[0], step = _b[1];\n        }\n        return countableTimeInterval.every(step);\n    };\n    TimeScale.prototype.invert = function (y) {\n        return new Date(_super.prototype.invert.call(this, y));\n    };\n    /**\n     * Returns uniformly-spaced dates that represent the scale's domain.\n     */\n    TimeScale.prototype.ticks = function () {\n        if (!this.domain || this.domain.length < 2) {\n            return [];\n        }\n        this.refresh();\n        var _a = __read$z(this.getDomain().map(toNumber), 2), t0 = _a[0], t1 = _a[1];\n        if (this.interval !== undefined) {\n            return this.getTicksForInterval({ start: t0, stop: t1 });\n        }\n        if (this.nice) {\n            var tickCount = this.tickCount;\n            if (tickCount === 2) {\n                return this.niceDomain;\n            }\n            if (tickCount === 1) {\n                return this.niceDomain.slice(0, 1);\n            }\n        }\n        return this.getDefaultTicks({ start: t0, stop: t1 });\n    };\n    TimeScale.prototype.getDefaultTicks = function (_a) {\n        var start = _a.start, stop = _a.stop;\n        var t = this.getTickInterval({\n            start: start,\n            stop: stop,\n            count: this.tickCount,\n            minCount: this.minTickCount,\n            maxCount: this.maxTickCount,\n        });\n        return t ? t.range(new Date(start), new Date(stop)) : []; // inclusive stop\n    };\n    TimeScale.prototype.getTicksForInterval = function (_a) {\n        var start = _a.start, stop = _a.stop;\n        var _b = this, interval = _b.interval, tickIntervals = _b.tickIntervals;\n        if (!interval) {\n            return [];\n        }\n        if (interval instanceof TimeInterval) {\n            var ticks_2 = interval.range(new Date(start), new Date(stop));\n            if (this.isDenseInterval({ start: start, stop: stop, interval: interval, count: ticks_2.length })) {\n                return this.getDefaultTicks({ start: start, stop: stop });\n            }\n            return ticks_2;\n        }\n        var absInterval = Math.abs(interval);\n        if (this.isDenseInterval({ start: start, stop: stop, interval: absInterval })) {\n            return this.getDefaultTicks({ start: start, stop: stop });\n        }\n        var reversedInterval = __spreadArray$m([], __read$z(tickIntervals));\n        reversedInterval.reverse();\n        var timeInterval = reversedInterval.find(function (tickInterval) { return absInterval % tickInterval[2] === 0; });\n        if (timeInterval) {\n            var i = timeInterval[0].every(absInterval / (timeInterval[2] / timeInterval[1]));\n            return i.range(new Date(start), new Date(stop));\n        }\n        var date = new Date(start);\n        var stopDate = new Date(stop);\n        var ticks = [];\n        while (date <= stopDate) {\n            ticks.push(date);\n            date = new Date(date);\n            date.setMilliseconds(date.getMilliseconds() + absInterval);\n        }\n        return ticks;\n    };\n    /**\n     * Returns a time format function suitable for displaying tick values.\n     * @param specifier If the specifier string is provided, this method is equivalent to\n     * the {@link TimeLocaleObject.format} method.\n     * If no specifier is provided, this method returns the default time format function.\n     */\n    TimeScale.prototype.tickFormat = function (_a) {\n        var ticks = _a.ticks, specifier = _a.specifier;\n        return specifier == undefined ? this.defaultTickFormat(ticks) : buildFormatter(specifier);\n    };\n    TimeScale.prototype.update = function () {\n        if (!this.domain || this.domain.length < 2) {\n            return;\n        }\n        if (this.nice) {\n            this.updateNiceDomain();\n        }\n    };\n    /**\n     * Extends the domain so that it starts and ends on nice round values.\n     * This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value.\n     */\n    TimeScale.prototype.updateNiceDomain = function () {\n        var maxAttempts = 4;\n        var _a = __read$z(this.domain, 2), d0 = _a[0], d1 = _a[1];\n        for (var i = 0; i < maxAttempts; i++) {\n            this.updateNiceDomainIteration(d0, d1);\n            var _b = __read$z(this.niceDomain, 2), n0 = _b[0], n1 = _b[1];\n            if (toNumber(d0) === toNumber(n0) && toNumber(d1) === toNumber(n1)) {\n                break;\n            }\n            d0 = n0;\n            d1 = n1;\n        }\n    };\n    TimeScale.prototype.updateNiceDomainIteration = function (d0, d1) {\n        var start = toNumber(d0);\n        var stop = toNumber(d1);\n        var interval = this.interval;\n        var i;\n        if (interval instanceof TimeInterval) {\n            i = interval;\n        }\n        else {\n            var tickCount = typeof interval === 'number' ? (stop - start) / Math.max(interval, 1) : this.tickCount;\n            i = this.getTickInterval({\n                start: start,\n                stop: stop,\n                count: tickCount,\n                minCount: this.minTickCount,\n                maxCount: this.maxTickCount,\n            });\n        }\n        if (i) {\n            var intervalRange = i.range(d0, d1, true);\n            var n0 = intervalRange[0];\n            var n1 = intervalRange[intervalRange.length - 1];\n            this.niceDomain = [n0, n1];\n        }\n    };\n    return TimeScale;\n}(ContinuousScale));\n\nvar __read$y = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$l = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar _a$1;\nvar group = function (content) { return \"(\" + content + \")\"; };\nvar optionalGroup = function (content) { return group(content) + \"?\"; };\nvar nonCapturingGroup = function (content) { return optionalGroup(\"?:\" + content); };\nvar formatRegEx = (function () {\n    var fill = '.';\n    var align = '[<>=^]';\n    var sign = '[+\\\\-( ]';\n    var symbol = '[$€£¥₣₹#]';\n    var zero = '0';\n    var width = '\\\\d+';\n    var comma = ',';\n    var precision = '\\\\d+';\n    var tilde = '~';\n    var type = '[%a-z]';\n    return new RegExp([\n        '^',\n        nonCapturingGroup(\"\" + optionalGroup(fill) + group(align)),\n        optionalGroup(sign),\n        optionalGroup(symbol),\n        optionalGroup(zero),\n        optionalGroup(width),\n        optionalGroup(comma),\n        nonCapturingGroup(\"\\\\.\" + group(precision)),\n        optionalGroup(tilde),\n        optionalGroup(type),\n        '$',\n    ].join(''), 'i');\n})();\nvar surroundedRegEx = (function () {\n    var prefix = '.*?';\n    var content = '.+?';\n    var suffix = '.*?';\n    return new RegExp(['^', group(prefix), \"#\\\\{\" + group(content) + \"\\\\}\", group(suffix), '$'].join(''));\n})();\nfunction parseFormatter(formatter) {\n    var _a;\n    var prefix;\n    var suffix;\n    var surrounded = surroundedRegEx.exec(formatter);\n    if (surrounded) {\n        _a = __read$y(surrounded, 4), prefix = _a[1], formatter = _a[2], suffix = _a[3];\n    }\n    var match = formatRegEx.exec(formatter);\n    if (!match) {\n        throw new Error(\"The number formatter is invalid: \" + formatter);\n    }\n    var _b = __read$y(match, 11), fill = _b[1], align = _b[2], sign = _b[3], symbol = _b[4], zero = _b[5], width = _b[6], comma = _b[7], precision = _b[8], trim = _b[9], type = _b[10];\n    return {\n        fill: fill,\n        align: align,\n        sign: sign,\n        symbol: symbol,\n        zero: zero,\n        width: parseInt(width),\n        comma: comma,\n        precision: parseInt(precision),\n        trim: Boolean(trim),\n        type: type,\n        prefix: prefix,\n        suffix: suffix,\n    };\n}\nfunction format(formatter) {\n    var options = typeof formatter === 'string' ? parseFormatter(formatter) : formatter;\n    var fill = options.fill, align = options.align, _a = options.sign, sign = _a === void 0 ? '-' : _a, symbol = options.symbol, zero = options.zero, width = options.width, comma = options.comma, type = options.type, _b = options.prefix, prefix = _b === void 0 ? '' : _b, _c = options.suffix, suffix = _c === void 0 ? '' : _c;\n    var precision = options.precision, trim = options.trim;\n    var formatBody;\n    if (!type) {\n        formatBody = decimalTypes['g'];\n        trim = true;\n    }\n    else if (type in decimalTypes && type in integerTypes) {\n        formatBody = isNaN(precision) ? integerTypes[type] : decimalTypes[type];\n    }\n    else if (type in decimalTypes) {\n        formatBody = decimalTypes[type];\n    }\n    else if (type in integerTypes) {\n        formatBody = integerTypes[type];\n    }\n    else {\n        throw new Error(\"The number formatter type is invalid: \" + type);\n    }\n    if (isNaN(precision)) {\n        precision = type ? 6 : 12;\n    }\n    return function (n) {\n        var result = formatBody(n, precision);\n        if (trim) {\n            result = removeTrailingZeros(result);\n        }\n        if (comma) {\n            result = insertSeparator(result, comma);\n        }\n        result = addSign(n, result, sign);\n        if (symbol && symbol !== '#') {\n            result = \"\" + symbol + result;\n        }\n        if (symbol === '#' && type === 'x') {\n            result = \"0x\" + result;\n        }\n        if (type === 's') {\n            result = \"\" + result + getSIPrefix(n);\n        }\n        if (type === '%' || type === 'p') {\n            result = result + \"%\";\n        }\n        if (!isNaN(width)) {\n            result = addPadding(result, width, fill !== null && fill !== void 0 ? fill : zero, align);\n        }\n        result = \"\" + prefix + result + suffix;\n        return result;\n    };\n}\nvar absFloor = function (n) { return Math.floor(Math.abs(n)); };\nvar integerTypes = {\n    b: function (n) { return absFloor(n).toString(2); },\n    c: function (n) { return String.fromCharCode(n); },\n    d: function (n) { return Math.round(Math.abs(n)).toFixed(0); },\n    o: function (n) { return absFloor(n).toString(8); },\n    x: function (n) { return absFloor(n).toString(16); },\n    X: function (n) { return integerTypes.x(n).toUpperCase(); },\n    n: function (n) { return integerTypes.d(n); },\n    '%': function (n) { return \"\" + absFloor(n * 100).toFixed(0); },\n};\nvar decimalTypes = {\n    e: function (n, f) { return Math.abs(n).toExponential(f); },\n    E: function (n, f) { return decimalTypes.e(n, f).toUpperCase(); },\n    f: function (n, f) { return Math.abs(n).toFixed(f); },\n    F: function (n, f) { return decimalTypes.f(n, f).toUpperCase(); },\n    g: function (n, f) {\n        if (n === 0) {\n            return '0';\n        }\n        var a = Math.abs(n);\n        var p = Math.floor(Math.log10(a));\n        if (p >= -4 && p < f) {\n            return a.toFixed(f - 1 - p);\n        }\n        return a.toExponential(f - 1);\n    },\n    G: function (n, f) { return decimalTypes.g(n, f).toUpperCase(); },\n    n: function (n, f) { return decimalTypes.g(n, f); },\n    p: function (n, f) { return decimalTypes.r(n * 100, f); },\n    r: function (n, f) {\n        if (n === 0) {\n            return '0';\n        }\n        var a = Math.abs(n);\n        var p = Math.floor(Math.log10(a));\n        var q = p - (f - 1);\n        if (q <= 0) {\n            return a.toFixed(-q);\n        }\n        var x = Math.pow(10, q);\n        return (Math.round(a / x) * x).toFixed();\n    },\n    s: function (n, f) {\n        var p = getSIPrefixPower(n);\n        return decimalTypes.r(n / Math.pow(10, p), f);\n    },\n    '%': function (n, f) { return decimalTypes.f(n * 100, f); },\n};\nfunction removeTrailingZeros(numString) {\n    return numString.replace(/\\.0+$/, '').replace(/(\\.[1-9])0+$/, '$1');\n}\nfunction insertSeparator(numString, separator) {\n    var dotIndex = numString.indexOf('.');\n    if (dotIndex < 0) {\n        dotIndex = numString.length;\n    }\n    var integerChars = numString.substring(0, dotIndex).split('');\n    var fractionalPart = numString.substring(dotIndex);\n    for (var i = integerChars.length - 3; i > 0; i -= 3) {\n        integerChars.splice(i, 0, separator);\n    }\n    return \"\" + integerChars.join('') + fractionalPart;\n}\nfunction getSIPrefix(n) {\n    return siPrefixes[getSIPrefixPower(n)];\n}\nfunction getSIPrefixPower(n) {\n    var power = Math.log10(Math.abs(n));\n    var p = Math.floor(power / 3) * 3;\n    return Math.max(minSIPrefix, Math.min(maxSIPrefix, p));\n}\nvar minSIPrefix = -24;\nvar maxSIPrefix = 24;\nvar siPrefixes = (_a$1 = {},\n    _a$1[minSIPrefix] = 'y',\n    _a$1[-21] = 'z',\n    _a$1[-18] = 'a',\n    _a$1[-15] = 'f',\n    _a$1[-12] = 'p',\n    _a$1[-9] = 'n',\n    _a$1[-6] = 'µ',\n    _a$1[-3] = 'm',\n    _a$1[0] = '',\n    _a$1[3] = 'k',\n    _a$1[6] = 'M',\n    _a$1[9] = 'G',\n    _a$1[12] = 'T',\n    _a$1[15] = 'P',\n    _a$1[18] = 'E',\n    _a$1[21] = 'Z',\n    _a$1[maxSIPrefix] = 'Y',\n    _a$1);\nvar minusSign = '\\u2212';\nfunction addSign(num, numString, signType) {\n    if (signType === void 0) { signType = ''; }\n    if (signType === '(') {\n        return num >= 0 ? numString : \"(\" + numString + \")\";\n    }\n    var plusSign = signType === '+' ? '+' : '';\n    return \"\" + (num >= 0 ? plusSign : minusSign) + numString;\n}\nfunction addPadding(numString, width, fill, align) {\n    if (fill === void 0) { fill = ' '; }\n    if (align === void 0) { align = '>'; }\n    var result = numString;\n    if (align === '>' || !align) {\n        result = result.padStart(width, fill);\n    }\n    else if (align === '<') {\n        result = result.padEnd(width, fill);\n    }\n    else if (align === '^') {\n        var padWidth = Math.max(0, width - result.length);\n        var padLeft = Math.ceil(padWidth / 2);\n        var padRight = Math.floor(padWidth / 2);\n        result = result.padStart(padLeft + result.length, fill);\n        result = result.padEnd(padRight + result.length, fill);\n    }\n    return result;\n}\nfunction tickFormat(ticks, formatter) {\n    var options = parseFormatter(formatter !== null && formatter !== void 0 ? formatter : ',f');\n    if (isNaN(options.precision)) {\n        if (options.type === 'f' || options.type === '%') {\n            options.precision = Math.max.apply(Math, __spreadArray$l([], __read$y(ticks.map(function (x) {\n                if (typeof x !== 'number' || x === 0) {\n                    return 0;\n                }\n                var l = Math.floor(Math.log10(Math.abs(x)));\n                var digits = options.type ? 6 : 12;\n                var exp = x.toExponential(digits - 1).replace(/\\.?0+e/, 'e');\n                var dotIndex = exp.indexOf('.');\n                if (dotIndex < 0) {\n                    return l >= 0 ? 0 : -l;\n                }\n                var s = exp.indexOf('e') - dotIndex;\n                return Math.max(0, s - l - 1);\n            }))));\n        }\n        else if (!options.type || options.type in decimalTypes) {\n            options.precision = Math.max.apply(Math, __spreadArray$l([], __read$y(ticks.map(function (x) {\n                if (typeof x !== 'number') {\n                    return 0;\n                }\n                var exp = x.toExponential((options.type ? 6 : 12) - 1).replace(/\\.?0+e/, 'e');\n                return exp.substring(0, exp.indexOf('e')).replace('.', '').length;\n            }))));\n        }\n    }\n    var f = format(options);\n    return function (n) { return f(Number(n)); };\n}\n\nvar __extends$Q = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1K = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __read$x = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$k = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar identity = function (x) { return x; };\nvar LogScale = /** @class */ (function (_super) {\n    __extends$Q(LogScale, _super);\n    function LogScale() {\n        var _this = _super.call(this, [1, 10], [0, 1]) || this;\n        _this.type = 'log';\n        _this.base = 10;\n        _this.cacheProps = ['domain', 'range', 'nice', 'tickCount', 'base'];\n        _this.baseLog = identity;\n        _this.basePow = identity;\n        _this.log = function (x) {\n            return _this.domain[0] >= 0 ? _this.baseLog(x) : -_this.baseLog(-x);\n        };\n        _this.pow = function (x) {\n            return _this.domain[0] >= 0 ? _this.basePow(x) : -_this.basePow(-x);\n        };\n        return _this;\n    }\n    LogScale.prototype.toDomain = function (d) {\n        return d;\n    };\n    LogScale.prototype.transform = function (x) {\n        return this.domain[0] >= 0 ? Math.log(x) : -Math.log(-x);\n    };\n    LogScale.prototype.transformInvert = function (x) {\n        return this.domain[0] >= 0 ? Math.exp(x) : -Math.exp(-x);\n    };\n    LogScale.prototype.update = function () {\n        if (!this.domain || this.domain.length < 2) {\n            return;\n        }\n        this.updateLogFn();\n        this.updatePowFn();\n        if (this.nice) {\n            this.updateNiceDomain();\n        }\n    };\n    LogScale.prototype.updateLogFn = function () {\n        var base = this.base;\n        var log;\n        if (base === 10) {\n            log = Math.log10;\n        }\n        else if (base === Math.E) {\n            log = Math.log;\n        }\n        else if (base === 2) {\n            log = Math.log2;\n        }\n        else {\n            var logBase_1 = Math.log(base);\n            log = function (x) { return Math.log(x) / logBase_1; };\n        }\n        this.baseLog = log;\n    };\n    LogScale.prototype.updatePowFn = function () {\n        var base = this.base;\n        var pow;\n        if (base === 10) {\n            pow = LogScale.pow10;\n        }\n        else if (base === Math.E) {\n            pow = Math.exp;\n        }\n        else {\n            pow = function (x) { return Math.pow(base, x); };\n        }\n        this.basePow = pow;\n    };\n    LogScale.prototype.updateNiceDomain = function () {\n        var _a = __read$x(this.domain, 2), d0 = _a[0], d1 = _a[1];\n        var n0 = this.pow(Math.floor(this.log(d0)));\n        var n1 = this.pow(Math.ceil(this.log(d1)));\n        this.niceDomain = [n0, n1];\n    };\n    LogScale.pow10 = function (x) {\n        return x >= 0 ? Math.pow(10, x) : 1 / Math.pow(10, -x);\n    };\n    LogScale.prototype.ticks = function () {\n        var _this = this;\n        var _a;\n        var count = (_a = this.tickCount) !== null && _a !== void 0 ? _a : 10;\n        if (!this.domain || this.domain.length < 2 || count < 1) {\n            return [];\n        }\n        this.refresh();\n        var base = this.base;\n        var _b = __read$x(this.getDomain(), 2), d0 = _b[0], d1 = _b[1];\n        var p0 = this.log(d0);\n        var p1 = this.log(d1);\n        if (this.interval) {\n            var step = Math.abs(this.interval);\n            var absDiff = Math.abs(p1 - p0);\n            var ticks_1 = range(p0, p1, Math.min(absDiff, step))\n                .map(function (x) { return _this.pow(x); })\n                .filter(function (t) { return t >= d0 && t <= d1; });\n            if (!this.isDenseInterval({ start: d0, stop: d1, interval: step, count: ticks_1.length })) {\n                return ticks_1;\n            }\n        }\n        var isBaseInteger = base % 1 === 0;\n        var isDiffLarge = p1 - p0 >= count;\n        if (!isBaseInteger || isDiffLarge) {\n            // Returns [10^1, 10^2, 10^3, 10^4, ...]\n            return ticks(p0, p1, Math.min(p1 - p0, count)).map(function (x) { return _this.pow(x); });\n        }\n        var ticks$1 = [];\n        var isPositive = d0 > 0;\n        p0 = Math.floor(p0) - 1;\n        p1 = Math.round(p1) + 1;\n        var min = Math.min.apply(Math, __spreadArray$k([], __read$x(this.range)));\n        var max = Math.max.apply(Math, __spreadArray$k([], __read$x(this.range)));\n        var availableSpacing = (max - min) / count;\n        var lastTickPosition = Infinity;\n        for (var p = p0; p <= p1; p++) {\n            var nextMagnitudeTickPosition = this.convert(this.pow(p + 1));\n            for (var k = 1; k < base; k++) {\n                var q = isPositive ? k : base - k + 1;\n                var t = this.pow(p) * q;\n                var tickPosition = this.convert(t);\n                var prevSpacing = Math.abs(lastTickPosition - tickPosition);\n                var nextSpacing = Math.abs(tickPosition - nextMagnitudeTickPosition);\n                var fits = prevSpacing >= availableSpacing && nextSpacing >= availableSpacing;\n                if (t >= d0 && t <= d1 && (k === 1 || fits)) {\n                    ticks$1.push(t);\n                    lastTickPosition = tickPosition;\n                }\n            }\n        }\n        return ticks$1;\n    };\n    LogScale.prototype.tickFormat = function (_a) {\n        var count = _a.count, ticks = _a.ticks, specifier = _a.specifier;\n        var base = this.base;\n        if (specifier == null) {\n            specifier = (base === 10 ? '.0e' : ',');\n        }\n        if (typeof specifier !== 'function') {\n            specifier = format(specifier);\n        }\n        if (count === Infinity) {\n            return specifier;\n        }\n        if (ticks == null) {\n            this.ticks();\n        }\n        return function (d) {\n            return specifier(d);\n        };\n    };\n    __decorate$1K([\n        Validate(NUMBER(0))\n    ], LogScale.prototype, \"base\", void 0);\n    return LogScale;\n}(ContinuousScale));\n\nfunction Default(defaultValue, replaces) {\n    if (replaces === void 0) { replaces = [undefined]; }\n    return addTransformToInstanceProperty(function (_, __, v) {\n        if (replaces.includes(v)) {\n            return defaultValue;\n        }\n        return v;\n    });\n}\n\nfunction extent$4(values) {\n    var length = values.length;\n    if (length === 0) {\n        return undefined;\n    }\n    var min = Infinity;\n    var max = -Infinity;\n    for (var i = 0; i < length; i++) {\n        var v = values[i];\n        if (v instanceof Date) {\n            v = v.getTime();\n        }\n        if (typeof v !== 'number') {\n            continue;\n        }\n        if (v < min) {\n            min = v;\n        }\n        if (v > max) {\n            max = v;\n        }\n    }\n    var extent = [min, max];\n    if (extent.some(function (v) { return !isFinite(v); })) {\n        return undefined;\n    }\n    return extent;\n}\n\nvar __decorate$1J = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar Label$1 = /** @class */ (function () {\n    function Label() {\n        this.enabled = true;\n        this.fontSize = 12;\n        this.fontFamily = 'Verdana, sans-serif';\n        this.fontStyle = undefined;\n        this.fontWeight = undefined;\n        this.color = 'rgba(70, 70, 70, 1)';\n    }\n    Label.prototype.getFont = function () {\n        return getFont(this);\n    };\n    __decorate$1J([\n        Validate(BOOLEAN)\n    ], Label.prototype, \"enabled\", void 0);\n    __decorate$1J([\n        Validate(NUMBER(0))\n    ], Label.prototype, \"fontSize\", void 0);\n    __decorate$1J([\n        Validate(STRING)\n    ], Label.prototype, \"fontFamily\", void 0);\n    __decorate$1J([\n        Validate(OPT_FONT_STYLE)\n    ], Label.prototype, \"fontStyle\", void 0);\n    __decorate$1J([\n        Validate(OPT_FONT_WEIGHT)\n    ], Label.prototype, \"fontWeight\", void 0);\n    __decorate$1J([\n        Validate(COLOR_STRING)\n    ], Label.prototype, \"color\", void 0);\n    return Label;\n}());\nfunction calculateLabelRotation(opts) {\n    var _a = opts.parallelFlipRotation, parallelFlipRotation = _a === void 0 ? 0 : _a, _b = opts.regularFlipRotation, regularFlipRotation = _b === void 0 ? 0 : _b;\n    var configuredRotation = opts.rotation ? normalizeAngle360(toRadians$1(opts.rotation)) : 0;\n    var parallelFlipFlag = !configuredRotation && parallelFlipRotation >= 0 && parallelFlipRotation <= Math.PI ? -1 : 1;\n    // Flip if the axis rotation angle is in the top hemisphere.\n    var regularFlipFlag = !configuredRotation && regularFlipRotation >= 0 && regularFlipRotation <= Math.PI ? -1 : 1;\n    var defaultRotation = 0;\n    if (opts.parallel) {\n        defaultRotation = (parallelFlipFlag * Math.PI) / 2;\n    }\n    else if (regularFlipFlag === -1) {\n        defaultRotation = Math.PI;\n    }\n    return { configuredRotation: configuredRotation, defaultRotation: defaultRotation, parallelFlipFlag: parallelFlipFlag, regularFlipFlag: regularFlipFlag };\n}\nfunction getLabelSpacing(minSpacing, rotated) {\n    if (!isNaN(minSpacing)) {\n        return minSpacing;\n    }\n    return rotated ? 0 : 10;\n}\nfunction getTextBaseline(parallel, labelRotation, sideFlag, parallelFlipFlag) {\n    if (parallel && !labelRotation) {\n        if (sideFlag * parallelFlipFlag === -1) {\n            return 'hanging';\n        }\n        else {\n            return 'bottom';\n        }\n    }\n    return 'middle';\n}\nfunction getTextAlign(parallel, labelRotation, labelAutoRotation, sideFlag, regularFlipFlag) {\n    var labelRotated = labelRotation > 0 && labelRotation <= Math.PI;\n    var labelAutoRotated = labelAutoRotation > 0 && labelAutoRotation <= Math.PI;\n    var alignFlag = labelRotated || labelAutoRotated ? -1 : 1;\n    if (parallel) {\n        if (labelRotation || labelAutoRotation) {\n            if (sideFlag * alignFlag === -1) {\n                return 'end';\n            }\n        }\n        else {\n            return 'center';\n        }\n    }\n    else if (sideFlag * regularFlipFlag === -1) {\n        return 'end';\n    }\n    return 'start';\n}\nfunction calculateLabelBBox(text, bbox, labelX, labelY, labelMatrix) {\n    // Text.computeBBox() does not take into account any of the transformations that have been applied to the label nodes, only the width and height are useful.\n    // Rather than taking into account all transformations including those of parent nodes which would be the result of `computeTransformedBBox()`, giving the x and y in the entire axis coordinate space,\n    // take into account only the rotation and translation applied to individual label nodes to get the x y coordinates of the labels relative to each other\n    // this makes label collision detection a lot simpler\n    var width = bbox.width, height = bbox.height;\n    var translatedBBox = new BBox(labelX, labelY, 0, 0);\n    labelMatrix.transformBBox(translatedBBox, bbox);\n    var _a = bbox.x, x = _a === void 0 ? 0 : _a, _b = bbox.y, y = _b === void 0 ? 0 : _b;\n    bbox.width = width;\n    bbox.height = height;\n    return {\n        point: {\n            x: x,\n            y: y,\n            size: 0,\n        },\n        label: {\n            width: width,\n            height: height,\n            text: text,\n        },\n    };\n}\n\nvar __assign$q = (undefined && undefined.__assign) || function () {\n    __assign$q = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$q.apply(this, arguments);\n};\nvar __decorate$1I = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __rest$3 = (undefined && undefined.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nvar __read$w = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __values$l = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __spreadArray$j = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar TICK_COUNT = predicateWithMessage(function (v, ctx) { return NUMBER(0)(v, ctx) || v instanceof TimeInterval; }, \"expecting a tick count Number value or, for a time axis, a Time Interval such as 'agCharts.time.month'\");\nvar OPT_TICK_COUNT = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, TICK_COUNT); }, \"expecting an optional tick count Number value or, for a time axis, a Time Interval such as 'agCharts.time.month'\");\nvar OPT_TICK_INTERVAL = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, function (v, ctx) { return (v !== 0 && NUMBER(0)(v, ctx)) || v instanceof TimeInterval; }); }, \"expecting an optional non-zero positive Number value or, for a time axis, a Time Interval such as 'agCharts.time.month'\");\nvar GRID_STYLE_KEYS = ['stroke', 'lineDash'];\nvar GRID_STYLE = predicateWithMessage(ARRAY(undefined, function (o) {\n    for (var key in o) {\n        if (!GRID_STYLE_KEYS.includes(key)) {\n            return false;\n        }\n    }\n    return true;\n}), \"expecting an Array of objects with gridline style properties such as 'stroke' and 'lineDash'\");\nvar Tags;\n(function (Tags) {\n    Tags[Tags[\"TickLine\"] = 0] = \"TickLine\";\n    Tags[Tags[\"TickLabel\"] = 1] = \"TickLabel\";\n    Tags[Tags[\"GridLine\"] = 2] = \"GridLine\";\n    Tags[Tags[\"GridArc\"] = 3] = \"GridArc\";\n    Tags[Tags[\"AxisLine\"] = 4] = \"AxisLine\";\n})(Tags || (Tags = {}));\nvar TickGenerationType;\n(function (TickGenerationType) {\n    TickGenerationType[TickGenerationType[\"CREATE\"] = 0] = \"CREATE\";\n    TickGenerationType[TickGenerationType[\"CREATE_SECONDARY\"] = 1] = \"CREATE_SECONDARY\";\n    TickGenerationType[TickGenerationType[\"FILTER\"] = 2] = \"FILTER\";\n    TickGenerationType[TickGenerationType[\"VALUES\"] = 3] = \"VALUES\";\n})(TickGenerationType || (TickGenerationType = {}));\nvar AxisLine = /** @class */ (function () {\n    function AxisLine() {\n        this.width = 1;\n        this.color = 'rgba(195, 195, 195, 1)';\n    }\n    __decorate$1I([\n        Validate(NUMBER(0))\n    ], AxisLine.prototype, \"width\", void 0);\n    __decorate$1I([\n        Validate(OPT_COLOR_STRING)\n    ], AxisLine.prototype, \"color\", void 0);\n    return AxisLine;\n}());\nvar BaseAxisTick = /** @class */ (function () {\n    function BaseAxisTick() {\n        this.enabled = true;\n        /**\n         * The line width to be used by axis ticks.\n         */\n        this.width = 1;\n        /**\n         * The line length to be used by axis ticks.\n         */\n        this.size = 6;\n        /**\n         * The color of the axis ticks.\n         * Use `undefined` rather than `rgba(0, 0, 0, 0)` to make the ticks invisible.\n         */\n        this.color = 'rgba(195, 195, 195, 1)';\n        /**\n         * A hint of how many ticks to use (the exact number of ticks might differ),\n         * a `TimeInterval` or a `CountableTimeInterval`.\n         * For example:\n         *\n         *     axis.tick.count = 5;\n         *     axis.tick.count = year;\n         *     axis.tick.count = month.every(6);\n         */\n        this.count = undefined;\n        this.interval = undefined;\n        this.values = undefined;\n        this.minSpacing = NaN;\n    }\n    __decorate$1I([\n        Validate(BOOLEAN)\n    ], BaseAxisTick.prototype, \"enabled\", void 0);\n    __decorate$1I([\n        Validate(NUMBER(0))\n    ], BaseAxisTick.prototype, \"width\", void 0);\n    __decorate$1I([\n        Validate(NUMBER(0))\n    ], BaseAxisTick.prototype, \"size\", void 0);\n    __decorate$1I([\n        Validate(OPT_COLOR_STRING)\n    ], BaseAxisTick.prototype, \"color\", void 0);\n    __decorate$1I([\n        Validate(OPT_TICK_COUNT),\n        Deprecated('Use tick.interval or tick.minSpacing and tick.maxSpacing instead')\n    ], BaseAxisTick.prototype, \"count\", void 0);\n    __decorate$1I([\n        Validate(OPT_TICK_INTERVAL)\n    ], BaseAxisTick.prototype, \"interval\", void 0);\n    __decorate$1I([\n        Validate(OPT_ARRAY())\n    ], BaseAxisTick.prototype, \"values\", void 0);\n    __decorate$1I([\n        Validate(AND(NUMBER_OR_NAN(1), LESS_THAN('maxSpacing'))),\n        Default(NaN)\n    ], BaseAxisTick.prototype, \"minSpacing\", void 0);\n    return BaseAxisTick;\n}());\nvar AxisLabel = /** @class */ (function () {\n    function AxisLabel() {\n        this.enabled = true;\n        /** If set to `false`, axis labels will not be wrapped on multiple lines. */\n        this.autoWrap = false;\n        /** Used to constrain the width of the label when `autoWrap` is `true`, if the label text width exceeds the `maxWidth`, it will be wrapped on multiple lines automatically. If `maxWidth` is omitted, a default width constraint will be applied. */\n        this.maxWidth = undefined;\n        /** Used to constrain the height of the multiline label, if the label text height exceeds the `maxHeight`, it will be truncated automatically. If `maxHeight` is omitted, a default height constraint will be applied. */\n        this.maxHeight = undefined;\n        this.fontStyle = undefined;\n        this.fontWeight = undefined;\n        this.fontSize = 12;\n        this.fontFamily = 'Verdana, sans-serif';\n        /**\n         * The padding between the labels and the ticks.\n         */\n        this.padding = 5;\n        /**\n         * Minimum gap in pixels between the axis labels before being removed to avoid collisions.\n         */\n        this.minSpacing = NaN;\n        /**\n         * The color of the labels.\n         * Use `undefined` rather than `rgba(0, 0, 0, 0)` to make labels invisible.\n         */\n        this.color = 'rgba(87, 87, 87, 1)';\n        /**\n         * Custom label rotation in degrees.\n         * Labels are rendered perpendicular to the axis line by default.\n         * Or parallel to the axis line, if the {@link parallel} is set to `true`.\n         * The value of this config is used as the angular offset/deflection\n         * from the default rotation.\n         */\n        this.rotation = undefined;\n        /**\n         * If specified and axis labels may collide, they are rotated to reduce collisions. If the\n         * `rotation` property is specified, it takes precedence.\n         */\n        this.autoRotate = undefined;\n        /**\n         * Rotation angle to use when autoRotate is applied.\n         */\n        this.autoRotateAngle = 335;\n        /**\n         * Avoid axis label collision by automatically reducing the number of ticks displayed. If set to `false`, axis labels may collide.\n         */\n        this.avoidCollisions = true;\n        /**\n         * By default labels and ticks are positioned to the left of the axis line.\n         * `true` positions the labels to the right of the axis line.\n         * However, if the axis is rotated, it's easier to think in terms\n         * of this side or the opposite side, rather than left and right.\n         * We use the term `mirror` for conciseness, although it's not\n         * true mirroring - for example, when a label is rotated, so that\n         * it is inclined at the 45 degree angle, text flowing from north-west\n         * to south-east, ending at the tick to the left of the axis line,\n         * and then we set this config to `true`, the text will still be flowing\n         * from north-west to south-east, _starting_ at the tick to the right\n         * of the axis line.\n         */\n        this.mirrored = false;\n        /**\n         * Labels are rendered perpendicular to the axis line by default.\n         * Setting this config to `true` makes labels render parallel to the axis line\n         * and center aligns labels' text at the ticks.\n         */\n        this.parallel = false;\n        /**\n         * In case {@param value} is a number, the {@param fractionDigits} parameter will\n         * be provided as well. The `fractionDigits` corresponds to the number of fraction\n         * digits used by the tick step. For example, if the tick step is `0.0005`,\n         * the `fractionDigits` is 4.\n         */\n        this.formatter = undefined;\n        this.format = undefined;\n    }\n    /**\n     * The side of the axis line to position the labels on.\n     * -1 = left (default)\n     * 1 = right\n     */\n    AxisLabel.prototype.getSideFlag = function () {\n        return this.mirrored ? 1 : -1;\n    };\n    AxisLabel.prototype.getFont = function () {\n        return getFont(this);\n    };\n    __decorate$1I([\n        Validate(BOOLEAN)\n    ], AxisLabel.prototype, \"enabled\", void 0);\n    __decorate$1I([\n        Validate(OPT_BOOLEAN)\n    ], AxisLabel.prototype, \"autoWrap\", void 0);\n    __decorate$1I([\n        Validate(OPT_NUMBER(0))\n    ], AxisLabel.prototype, \"maxWidth\", void 0);\n    __decorate$1I([\n        Validate(OPT_NUMBER(0))\n    ], AxisLabel.prototype, \"maxHeight\", void 0);\n    __decorate$1I([\n        Validate(OPT_FONT_STYLE)\n    ], AxisLabel.prototype, \"fontStyle\", void 0);\n    __decorate$1I([\n        Validate(OPT_FONT_WEIGHT)\n    ], AxisLabel.prototype, \"fontWeight\", void 0);\n    __decorate$1I([\n        Validate(NUMBER(1))\n    ], AxisLabel.prototype, \"fontSize\", void 0);\n    __decorate$1I([\n        Validate(STRING)\n    ], AxisLabel.prototype, \"fontFamily\", void 0);\n    __decorate$1I([\n        Validate(NUMBER(0))\n    ], AxisLabel.prototype, \"padding\", void 0);\n    __decorate$1I([\n        Validate(NUMBER_OR_NAN()),\n        Default(NaN)\n    ], AxisLabel.prototype, \"minSpacing\", void 0);\n    __decorate$1I([\n        Validate(OPT_COLOR_STRING)\n    ], AxisLabel.prototype, \"color\", void 0);\n    __decorate$1I([\n        Validate(OPT_NUMBER(-360, 360))\n    ], AxisLabel.prototype, \"rotation\", void 0);\n    __decorate$1I([\n        Validate(OPT_BOOLEAN)\n    ], AxisLabel.prototype, \"autoRotate\", void 0);\n    __decorate$1I([\n        Validate(NUMBER(-360, 360))\n    ], AxisLabel.prototype, \"autoRotateAngle\", void 0);\n    __decorate$1I([\n        Validate(BOOLEAN)\n    ], AxisLabel.prototype, \"avoidCollisions\", void 0);\n    __decorate$1I([\n        Validate(BOOLEAN)\n    ], AxisLabel.prototype, \"mirrored\", void 0);\n    __decorate$1I([\n        Validate(BOOLEAN)\n    ], AxisLabel.prototype, \"parallel\", void 0);\n    __decorate$1I([\n        Validate(OPT_STRING)\n    ], AxisLabel.prototype, \"format\", void 0);\n    return AxisLabel;\n}());\nvar AxisTitle = /** @class */ (function () {\n    function AxisTitle() {\n        this.enabled = false;\n        this.text = undefined;\n        this.fontStyle = undefined;\n        this.fontWeight = undefined;\n        this.fontSize = 10;\n        this.fontFamily = 'sans-serif';\n        this.color = undefined;\n        this.wrapping = 'always';\n        this.formatter = undefined;\n    }\n    __decorate$1I([\n        Validate(BOOLEAN)\n    ], AxisTitle.prototype, \"enabled\", void 0);\n    __decorate$1I([\n        Validate(OPT_STRING)\n    ], AxisTitle.prototype, \"text\", void 0);\n    __decorate$1I([\n        Validate(OPT_FONT_STYLE)\n    ], AxisTitle.prototype, \"fontStyle\", void 0);\n    __decorate$1I([\n        Validate(OPT_FONT_WEIGHT)\n    ], AxisTitle.prototype, \"fontWeight\", void 0);\n    __decorate$1I([\n        Validate(NUMBER(0))\n    ], AxisTitle.prototype, \"fontSize\", void 0);\n    __decorate$1I([\n        Validate(STRING)\n    ], AxisTitle.prototype, \"fontFamily\", void 0);\n    __decorate$1I([\n        Validate(OPT_COLOR_STRING)\n    ], AxisTitle.prototype, \"color\", void 0);\n    __decorate$1I([\n        Validate(TEXT_WRAP)\n    ], AxisTitle.prototype, \"wrapping\", void 0);\n    __decorate$1I([\n        Validate(OPT_FUNCTION)\n    ], AxisTitle.prototype, \"formatter\", void 0);\n    return AxisTitle;\n}());\n/**\n * A general purpose linear axis with no notion of orientation.\n * The axis is always rendered vertically, with horizontal labels positioned to the left\n * of the axis line by default. The axis can be {@link rotation | rotated} by an arbitrary angle,\n * so that it can be used as a top, right, bottom, left, radial or any other kind\n * of linear axis.\n * The generic `D` parameter is the type of the domain of the axis' scale.\n * The output range of the axis' scale is always numeric (screen coordinates).\n */\nvar Axis = /** @class */ (function () {\n    function Axis(moduleCtx, scale) {\n        this.moduleCtx = moduleCtx;\n        this.id = createId$1(this);\n        this.nice = true;\n        this.dataDomain = [];\n        this.axisGroup = new Group({ name: this.id + \"-axis\", zIndex: Layers.AXIS_ZINDEX });\n        this.lineNode = this.axisGroup.appendChild(new Line());\n        this.tickLineGroup = this.axisGroup.appendChild(new Group({ name: this.id + \"-Axis-tick-lines\", zIndex: Layers.AXIS_ZINDEX }));\n        this.tickLabelGroup = this.axisGroup.appendChild(new Group({ name: this.id + \"-Axis-tick-labels\", zIndex: Layers.AXIS_ZINDEX }));\n        this.crossLineGroup = new Group({ name: this.id + \"-CrossLines\" });\n        this.gridGroup = new Group({ name: this.id + \"-Axis-grid\" });\n        this.gridLineGroup = this.gridGroup.appendChild(new Group({\n            name: this.id + \"-gridLines\",\n            zIndex: Layers.AXIS_GRID_ZINDEX,\n        }));\n        this.gridArcGroup = this.gridGroup.appendChild(new Group({\n            name: this.id + \"-gridArcs\",\n            zIndex: Layers.AXIS_GRID_ZINDEX,\n        }));\n        this.tickLineGroupSelection = Selection.select(this.tickLineGroup, Line);\n        this.tickLabelGroupSelection = Selection.select(this.tickLabelGroup, Text);\n        this.gridLineGroupSelection = Selection.select(this.gridLineGroup, Line);\n        this.gridArcGroupSelection = Selection.select(this.gridArcGroup, Arc);\n        this._crossLines = [];\n        this.line = new AxisLine();\n        this.tick = this.createTick();\n        this.label = new AxisLabel();\n        this.translation = { x: 0, y: 0 };\n        this.rotation = 0; // axis rotation angle in degrees\n        this.layout = {\n            label: {\n                fractionDigits: 0,\n                padding: this.label.padding,\n                format: this.label.format,\n            },\n        };\n        this.range = [0, 1];\n        this.visibleRange = [0, 1];\n        this.title = undefined;\n        this._titleCaption = new Caption();\n        /**\n         * The length of the grid. The grid is only visible in case of a non-zero value.\n         * In case {@link radialGrid} is `true`, the value is interpreted as an angle\n         * (in degrees).\n         */\n        this._gridLength = 0;\n        /**\n         * The array of styles to cycle through when rendering grid lines.\n         * For example, use two {@link GridStyle} objects for alternating styles.\n         * Contains only one {@link GridStyle} object by default, meaning all grid lines\n         * have the same style.\n         */\n        this.gridStyle = [\n            {\n                stroke: 'rgba(219, 219, 219, 1)',\n                lineDash: [4, 2],\n            },\n        ];\n        /**\n         * `false` - render grid as lines of {@link gridLength} that extend the ticks\n         *           on the opposite side of the axis\n         * `true` - render grid as concentric circles that go through the ticks\n         */\n        this._radialGrid = false;\n        this.fractionDigits = 0;\n        /**\n         * The distance between the grid ticks and the axis ticks.\n         */\n        this.gridPadding = 0;\n        /**\n         * Is used to avoid collisions between axis labels and series.\n         */\n        this.seriesAreaPadding = 0;\n        this.thickness = 0;\n        this.maxThickness = Infinity;\n        this._scale = scale;\n        this.refreshScale();\n        this._titleCaption.node.rotation = -Math.PI / 2;\n        this.axisGroup.appendChild(this._titleCaption.node);\n    }\n    Object.defineProperty(Axis.prototype, \"scale\", {\n        get: function () {\n            return this._scale;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Axis.prototype, \"crossLines\", {\n        get: function () {\n            return this._crossLines;\n        },\n        set: function (value) {\n            var _this = this;\n            var _a, _b;\n            (_a = this._crossLines) === null || _a === void 0 ? void 0 : _a.forEach(function (crossLine) { return _this.detachCrossLine(crossLine); });\n            this._crossLines = value;\n            (_b = this._crossLines) === null || _b === void 0 ? void 0 : _b.forEach(function (crossLine) {\n                _this.attachCrossLine(crossLine);\n                _this.initCrossLine(crossLine);\n            });\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Axis.prototype.attachCrossLine = function (crossLine) {\n        this.crossLineGroup.appendChild(crossLine.group);\n    };\n    Axis.prototype.detachCrossLine = function (crossLine) {\n        this.crossLineGroup.removeChild(crossLine.group);\n    };\n    Axis.prototype.destroy = function () {\n        // For override by sub-classes.\n    };\n    Axis.prototype.refreshScale = function () {\n        var _this = this;\n        var _a;\n        this.range = this.scale.range.slice();\n        (_a = this.crossLines) === null || _a === void 0 ? void 0 : _a.forEach(function (crossLine) {\n            _this.initCrossLine(crossLine);\n        });\n    };\n    Axis.prototype.updateRange = function () {\n        var _a;\n        var _b = this, rr = _b.range, vr = _b.visibleRange, scale = _b.scale;\n        var span = (rr[1] - rr[0]) / (vr[1] - vr[0]);\n        var shift = span * vr[0];\n        var start = rr[0] - shift;\n        scale.range = [start, start + span];\n        (_a = this.crossLines) === null || _a === void 0 ? void 0 : _a.forEach(function (crossLine) {\n            crossLine.clippedRange = [rr[0], rr[1]];\n        });\n    };\n    Axis.prototype.setCrossLinesVisible = function (visible) {\n        this.crossLineGroup.visible = visible;\n    };\n    Axis.prototype.attachAxis = function (node, nextNode) {\n        node.insertBefore(this.gridGroup, nextNode);\n        node.insertBefore(this.axisGroup, nextNode);\n        node.insertBefore(this.crossLineGroup, nextNode);\n    };\n    Axis.prototype.detachAxis = function (node) {\n        node.removeChild(this.gridGroup);\n        node.removeChild(this.axisGroup);\n        node.removeChild(this.crossLineGroup);\n    };\n    /**\n     * Checks if a point or an object is in range.\n     * @param x A point (or object's starting point).\n     * @param width Object's width.\n     * @param tolerance Expands the range on both ends by this amount.\n     */\n    Axis.prototype.inRange = function (x, width, tolerance) {\n        if (width === void 0) { width = 0; }\n        if (tolerance === void 0) { tolerance = 0; }\n        return this.inRangeEx(x, width, tolerance) === 0;\n    };\n    Axis.prototype.inRangeEx = function (x, width, tolerance) {\n        if (width === void 0) { width = 0; }\n        if (tolerance === void 0) { tolerance = 0; }\n        var range = this.range;\n        // Account for inverted ranges, for example [500, 100] as well as [100, 500]\n        var min = Math.min(range[0], range[1]);\n        var max = Math.max(range[0], range[1]);\n        if (x + width < min - tolerance) {\n            return -1; // left of range\n        }\n        if (x > max + tolerance) {\n            return 1; // right of range\n        }\n        return 0; // in range\n    };\n    Axis.prototype.onLabelFormatChange = function (ticks, format) {\n        var _a = this, scale = _a.scale, fractionDigits = _a.fractionDigits;\n        var logScale = scale instanceof LogScale;\n        var defaultLabelFormatter = !logScale && fractionDigits > 0\n            ? function (x) { return (typeof x === 'number' ? x.toFixed(fractionDigits) : String(x)); }\n            : function (x) { return String(x); };\n        if (format && scale && scale.tickFormat) {\n            try {\n                this.labelFormatter = scale.tickFormat({\n                    ticks: ticks,\n                    specifier: format,\n                });\n            }\n            catch (e) {\n                this.labelFormatter = defaultLabelFormatter;\n                Logger.warnOnce(\"the axis label format string \" + format + \" is invalid. No formatting will be applied\");\n            }\n        }\n        else {\n            this.labelFormatter = defaultLabelFormatter;\n        }\n    };\n    Axis.prototype.setDomain = function () {\n        var _a;\n        var _b = this, scale = _b.scale, dataDomain = _b.dataDomain, tickValues = _b.tick.values;\n        if (tickValues && scale instanceof ContinuousScale) {\n            var _c = __read$w((_a = extent$4(tickValues)) !== null && _a !== void 0 ? _a : [Infinity, -Infinity], 2), tickMin = _c[0], tickMax = _c[1];\n            var min = Math.min(scale.fromDomain(dataDomain[0]), tickMin);\n            var max = Math.max(scale.fromDomain(dataDomain[1]), tickMax);\n            scale.domain = [scale.toDomain(min), scale.toDomain(max)];\n        }\n        else {\n            scale.domain = dataDomain;\n        }\n    };\n    Axis.prototype.setTickInterval = function (interval) {\n        var _a;\n        this.scale.interval = (_a = this.tick.interval) !== null && _a !== void 0 ? _a : interval;\n    };\n    Axis.prototype.setTickCount = function (count, minTickCount, maxTickCount) {\n        var scale = this.scale;\n        if (!(count && scale instanceof ContinuousScale)) {\n            return;\n        }\n        if (typeof count === 'number') {\n            scale.tickCount = count;\n            scale.minTickCount = minTickCount !== null && minTickCount !== void 0 ? minTickCount : 0;\n            scale.maxTickCount = maxTickCount !== null && maxTickCount !== void 0 ? maxTickCount : Infinity;\n            return;\n        }\n        if (scale instanceof TimeScale$1) {\n            this.setTickInterval(count);\n        }\n    };\n    Object.defineProperty(Axis.prototype, \"gridLength\", {\n        get: function () {\n            return this._gridLength;\n        },\n        set: function (value) {\n            var _this = this;\n            var _a;\n            // Was visible and now invisible, or was invisible and now visible.\n            if ((this._gridLength && !value) || (!this._gridLength && value)) {\n                this.gridLineGroupSelection = this.gridLineGroupSelection.clear();\n                this.gridArcGroupSelection = this.gridArcGroupSelection.clear();\n            }\n            this._gridLength = value;\n            (_a = this.crossLines) === null || _a === void 0 ? void 0 : _a.forEach(function (crossLine) {\n                _this.initCrossLine(crossLine);\n            });\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Axis.prototype, \"radialGrid\", {\n        get: function () {\n            return this._radialGrid;\n        },\n        set: function (value) {\n            if (this._radialGrid !== value) {\n                this._radialGrid = value;\n                this.gridLineGroupSelection = this.gridLineGroupSelection.clear();\n                this.gridArcGroupSelection = this.gridArcGroupSelection.clear();\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Axis.prototype.createTick = function () {\n        return new BaseAxisTick();\n    };\n    /**\n     * Creates/removes/updates the scene graph nodes that constitute the axis.\n     */\n    Axis.prototype.update = function (primaryTickCount) {\n        var _a = this.calculateRotations(), rotation = _a.rotation, parallelFlipRotation = _a.parallelFlipRotation, regularFlipRotation = _a.regularFlipRotation;\n        var sideFlag = this.label.getSideFlag();\n        var labelX = sideFlag * (this.tick.size + this.label.padding + this.seriesAreaPadding);\n        this.updateScale();\n        this.updatePosition({ rotation: rotation, sideFlag: sideFlag });\n        this.updateLine();\n        var _b = this.generateTicks({\n            primaryTickCount: primaryTickCount,\n            parallelFlipRotation: parallelFlipRotation,\n            regularFlipRotation: regularFlipRotation,\n            labelX: labelX,\n            sideFlag: sideFlag,\n        }), tickData = _b.tickData, combinedRotation = _b.combinedRotation, textBaseline = _b.textBaseline, textAlign = _b.textAlign, ticksResult = __rest$3(_b, [\"tickData\", \"combinedRotation\", \"textBaseline\", \"textAlign\"]);\n        this.updateSelections(tickData.ticks);\n        this.updateLabels({\n            tickLabelGroupSelection: this.tickLabelGroupSelection,\n            combinedRotation: combinedRotation,\n            textBaseline: textBaseline,\n            textAlign: textAlign,\n            labelX: labelX,\n        });\n        this.updateVisibility();\n        this.updateGridLines(sideFlag);\n        this.updateTickLines(sideFlag);\n        this.updateTitle({ anyTickVisible: tickData.ticks.length > 0, sideFlag: sideFlag });\n        this.updateCrossLines({ rotation: rotation, parallelFlipRotation: parallelFlipRotation, regularFlipRotation: regularFlipRotation, sideFlag: sideFlag });\n        this.updateLayoutState();\n        primaryTickCount = ticksResult.primaryTickCount;\n        return primaryTickCount;\n    };\n    Axis.prototype.updateLayoutState = function () {\n        this.layout.label = {\n            fractionDigits: this.fractionDigits,\n            padding: this.label.padding,\n            format: this.label.format,\n        };\n    };\n    Axis.prototype.updateScale = function () {\n        this.updateRange();\n        this.calculateDomain();\n        this.setDomain();\n        this.setTickInterval(this.tick.interval);\n        var _a = this, scale = _a.scale, nice = _a.nice;\n        if (!(scale instanceof ContinuousScale)) {\n            return;\n        }\n        this.setTickCount(this.tick.count);\n        scale.nice = nice;\n        scale.update();\n    };\n    Axis.prototype.calculateRotations = function () {\n        var rotation = toRadians$1(this.rotation);\n        // When labels are parallel to the axis line, the `parallelFlipFlag` is used to\n        // flip the labels to avoid upside-down text, when the axis is rotated\n        // such that it is in the right hemisphere, i.e. the angle of rotation\n        // is in the [0, π] interval.\n        // The rotation angle is normalized, so that we have an easier time checking\n        // if it's in the said interval. Since the axis is always rendered vertically\n        // and then rotated, zero rotation means 12 (not 3) o-clock.\n        // -1 = flip\n        //  1 = don't flip (default)\n        var parallelFlipRotation = normalizeAngle360(rotation);\n        var regularFlipRotation = normalizeAngle360(rotation - Math.PI / 2);\n        return { rotation: rotation, parallelFlipRotation: parallelFlipRotation, regularFlipRotation: regularFlipRotation };\n    };\n    Axis.prototype.generateTicks = function (_a) {\n        var e_1, _b, _c;\n        var _d;\n        var primaryTickCount = _a.primaryTickCount, parallelFlipRotation = _a.parallelFlipRotation, regularFlipRotation = _a.regularFlipRotation, labelX = _a.labelX, sideFlag = _a.sideFlag;\n        var _e = this, scale = _e.scale, tick = _e.tick, _f = _e.label, parallel = _f.parallel, rotation = _f.rotation, fontFamily = _f.fontFamily, fontSize = _f.fontSize, fontStyle = _f.fontStyle, fontWeight = _f.fontWeight;\n        var secondaryAxis = primaryTickCount !== undefined;\n        var _g = calculateLabelRotation({\n            rotation: rotation,\n            parallel: parallel,\n            regularFlipRotation: regularFlipRotation,\n            parallelFlipRotation: parallelFlipRotation,\n        }), defaultRotation = _g.defaultRotation, configuredRotation = _g.configuredRotation, parallelFlipFlag = _g.parallelFlipFlag, regularFlipFlag = _g.regularFlipFlag;\n        var initialRotation = configuredRotation + defaultRotation;\n        var labelMatrix = new Matrix();\n        var maxTickCount = this.estimateTickCount({\n            minSpacing: tick.minSpacing,\n            maxSpacing: (_d = tick.maxSpacing) !== null && _d !== void 0 ? _d : NaN,\n        }).maxTickCount;\n        var continuous = scale instanceof ContinuousScale;\n        var maxIterations = tick.count || !continuous || isNaN(maxTickCount) ? 10 : maxTickCount;\n        var textAlign = getTextAlign(parallel, configuredRotation, 0, sideFlag, regularFlipFlag);\n        var textBaseline = getTextBaseline(parallel, configuredRotation, sideFlag, parallelFlipFlag);\n        var textProps = {\n            fontFamily: fontFamily,\n            fontSize: fontSize,\n            fontStyle: fontStyle,\n            fontWeight: fontWeight,\n            textBaseline: textBaseline,\n            textAlign: textAlign,\n        };\n        var tickData = {\n            rawTicks: [],\n            ticks: [],\n            labelCount: 0,\n        };\n        var index = 0;\n        var autoRotation = 0;\n        var labelOverlap = true;\n        var terminate = false;\n        while (labelOverlap && index <= maxIterations) {\n            if (terminate) {\n                break;\n            }\n            autoRotation = 0;\n            textAlign = getTextAlign(parallel, configuredRotation, 0, sideFlag, regularFlipFlag);\n            var tickStrategies = this.getTickStrategies({ secondaryAxis: secondaryAxis, index: index });\n            try {\n                for (var tickStrategies_1 = (e_1 = void 0, __values$l(tickStrategies)), tickStrategies_1_1 = tickStrategies_1.next(); !tickStrategies_1_1.done; tickStrategies_1_1 = tickStrategies_1.next()) {\n                    var strategy = tickStrategies_1_1.value;\n                    (_c = strategy({\n                        index: index,\n                        tickData: tickData,\n                        textProps: textProps,\n                        labelOverlap: labelOverlap,\n                        terminate: terminate,\n                        primaryTickCount: primaryTickCount,\n                    }), tickData = _c.tickData, index = _c.index, autoRotation = _c.autoRotation, terminate = _c.terminate);\n                    var ticksResult = tickData.ticks;\n                    textAlign = getTextAlign(parallel, configuredRotation, autoRotation, sideFlag, regularFlipFlag);\n                    var rotated = configuredRotation !== 0 || autoRotation !== 0;\n                    var rotation_1 = initialRotation + autoRotation;\n                    labelOverlap = this.checkLabelOverlap(rotation_1, rotated, labelMatrix, ticksResult, labelX, __assign$q(__assign$q({}, textProps), { textAlign: textAlign }));\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (tickStrategies_1_1 && !tickStrategies_1_1.done && (_b = tickStrategies_1.return)) _b.call(tickStrategies_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n        }\n        var combinedRotation = defaultRotation + configuredRotation + autoRotation;\n        if (!secondaryAxis && tickData.rawTicks.length > 0) {\n            primaryTickCount = tickData.rawTicks.length;\n        }\n        return { tickData: tickData, primaryTickCount: primaryTickCount, combinedRotation: combinedRotation, textBaseline: textBaseline, textAlign: textAlign };\n    };\n    Axis.prototype.getTickStrategies = function (_a) {\n        var _this = this;\n        var index = _a.index, secondaryAxis = _a.secondaryAxis;\n        var _b = this, scale = _b.scale, label = _b.label, tick = _b.tick;\n        var continuous = scale instanceof ContinuousScale;\n        var avoidLabelCollisions = label.enabled && label.avoidCollisions;\n        var filterTicks = !(continuous && this.tick.count === undefined) && index !== 0 && avoidLabelCollisions;\n        var autoRotate = label.autoRotate === true && label.rotation === undefined;\n        var strategies = [];\n        var tickGenerationType;\n        if (this.tick.values) {\n            tickGenerationType = TickGenerationType.VALUES;\n        }\n        else if (secondaryAxis) {\n            tickGenerationType = TickGenerationType.CREATE_SECONDARY;\n        }\n        else if (filterTicks) {\n            tickGenerationType = TickGenerationType.FILTER;\n        }\n        else {\n            tickGenerationType = TickGenerationType.CREATE;\n        }\n        var tickGenerationStrategy = function (_a) {\n            var index = _a.index, tickData = _a.tickData, primaryTickCount = _a.primaryTickCount, terminate = _a.terminate;\n            return _this.createTickData(tickGenerationType, index, tickData, terminate, primaryTickCount);\n        };\n        strategies.push(tickGenerationStrategy);\n        if (!continuous && !isNaN(tick.minSpacing)) {\n            var tickFilterStrategy = function (_a) {\n                var index = _a.index, tickData = _a.tickData, primaryTickCount = _a.primaryTickCount, terminate = _a.terminate;\n                return _this.createTickData(TickGenerationType.FILTER, index, tickData, terminate, primaryTickCount);\n            };\n            strategies.push(tickFilterStrategy);\n        }\n        if (!avoidLabelCollisions) {\n            return strategies;\n        }\n        if (label.autoWrap) {\n            var autoWrapStrategy = function (_a) {\n                var index = _a.index, tickData = _a.tickData, textProps = _a.textProps;\n                return _this.wrapLabels(tickData, index, textProps);\n            };\n            strategies.push(autoWrapStrategy);\n        }\n        else if (autoRotate) {\n            var autoRotateStrategy = function (_a) {\n                var index = _a.index, tickData = _a.tickData, labelOverlap = _a.labelOverlap, terminate = _a.terminate;\n                return ({\n                    index: index,\n                    tickData: tickData,\n                    autoRotation: _this.getAutoRotation(labelOverlap),\n                    terminate: terminate,\n                });\n            };\n            strategies.push(autoRotateStrategy);\n        }\n        return strategies;\n    };\n    Axis.prototype.createTickData = function (tickGenerationType, index, tickData, terminate, primaryTickCount) {\n        var _a, _b, _c;\n        var _d = this, scale = _d.scale, tick = _d.tick;\n        var _e = this.estimateTickCount({\n            minSpacing: tick.minSpacing,\n            maxSpacing: (_a = tick.maxSpacing) !== null && _a !== void 0 ? _a : NaN,\n        }), maxTickCount = _e.maxTickCount, minTickCount = _e.minTickCount, defaultTickCount = _e.defaultTickCount;\n        var continuous = scale instanceof ContinuousScale;\n        var maxIterations = tick.count || !continuous || isNaN(maxTickCount) ? 10 : maxTickCount;\n        var tickCount = (_b = tick.count) !== null && _b !== void 0 ? _b : (continuous ? Math.max(defaultTickCount - index, minTickCount) : maxTickCount);\n        var regenerateTicks = tick.interval === undefined &&\n            tick.values === undefined &&\n            tick.count === undefined &&\n            tickCount > minTickCount &&\n            (continuous || tickGenerationType === TickGenerationType.FILTER);\n        var unchanged = true;\n        while (unchanged && index <= maxIterations) {\n            var prevTicks = tickData.rawTicks;\n            tickCount = (_c = tick.count) !== null && _c !== void 0 ? _c : (continuous ? Math.max(defaultTickCount - index, minTickCount) : maxTickCount);\n            var _f = this.getTicks({\n                tickGenerationType: tickGenerationType,\n                previousTicks: prevTicks,\n                tickCount: tickCount,\n                minTickCount: minTickCount,\n                maxTickCount: maxTickCount,\n                primaryTickCount: primaryTickCount,\n            }), rawTicks = _f.rawTicks, ticks = _f.ticks, labelCount = _f.labelCount;\n            tickData.rawTicks = rawTicks;\n            tickData.ticks = ticks;\n            tickData.labelCount = labelCount;\n            unchanged = regenerateTicks ? areArrayNumbersEqual(rawTicks, prevTicks) : false;\n            index++;\n        }\n        var shouldTerminate = tick.interval !== undefined || tick.values !== undefined;\n        terminate || (terminate = shouldTerminate);\n        return { tickData: tickData, index: index, autoRotation: 0, terminate: terminate };\n    };\n    Axis.prototype.checkLabelOverlap = function (rotation, rotated, labelMatrix, tickData, labelX, textProps) {\n        Matrix.updateTransformMatrix(labelMatrix, 1, 1, rotation, 0, 0);\n        var labelData = this.createLabelData(tickData, labelX, textProps, labelMatrix);\n        var labelSpacing = getLabelSpacing(this.label.minSpacing, rotated);\n        return axisLabelsOverlap(labelData, labelSpacing);\n    };\n    Axis.prototype.createLabelData = function (tickData, labelX, textProps, labelMatrix) {\n        var e_2, _a;\n        var labelData = [];\n        try {\n            for (var tickData_1 = __values$l(tickData), tickData_1_1 = tickData_1.next(); !tickData_1_1.done; tickData_1_1 = tickData_1.next()) {\n                var tickDatum = tickData_1_1.value;\n                var tickLabel = tickDatum.tickLabel, translationY = tickDatum.translationY;\n                if (tickLabel === '' || tickLabel == undefined) {\n                    // skip user hidden ticks\n                    continue;\n                }\n                var lines = splitText(tickLabel);\n                var _b = measureText(lines, labelX, translationY, textProps), width = _b.width, height = _b.height;\n                var bbox = new BBox(labelX, translationY, width, height);\n                var labelDatum = calculateLabelBBox(tickLabel, bbox, labelX, translationY, labelMatrix);\n                labelData.push(labelDatum);\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (tickData_1_1 && !tickData_1_1.done && (_a = tickData_1.return)) _a.call(tickData_1);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        return labelData;\n    };\n    Axis.prototype.getAutoRotation = function (labelOveralap) {\n        return labelOveralap ? normalizeAngle360(toRadians$1(this.label.autoRotateAngle)) : 0;\n    };\n    Axis.prototype.getTicks = function (_a) {\n        var _b;\n        var tickGenerationType = _a.tickGenerationType, previousTicks = _a.previousTicks, tickCount = _a.tickCount, minTickCount = _a.minTickCount, maxTickCount = _a.maxTickCount, primaryTickCount = _a.primaryTickCount;\n        var scale = this.scale;\n        var rawTicks = [];\n        switch (tickGenerationType) {\n            case TickGenerationType.VALUES:\n                rawTicks = this.tick.values;\n                break;\n            case TickGenerationType.CREATE_SECONDARY:\n                // `updateSecondaryAxisTicks` mutates `scale.domain` based on `primaryTickCount`\n                rawTicks = this.updateSecondaryAxisTicks(primaryTickCount);\n                break;\n            case TickGenerationType.FILTER:\n                rawTicks = this.filterTicks(previousTicks, tickCount);\n                break;\n            default:\n                rawTicks = this.createTicks(tickCount, minTickCount, maxTickCount);\n                break;\n        }\n        // When the scale domain or the ticks change, the label format may change\n        this.onLabelFormatChange(rawTicks, this.label.format);\n        // `ticks instanceof NumericTicks` doesn't work here, so we feature detect.\n        this.fractionDigits = rawTicks.fractionDigits >= 0 ? rawTicks.fractionDigits : 0;\n        var halfBandwidth = ((_b = this.scale.bandwidth) !== null && _b !== void 0 ? _b : 0) / 2;\n        var ticks = [];\n        var labelCount = 0;\n        for (var i = 0; i < rawTicks.length; i++) {\n            var rawTick = rawTicks[i];\n            var translationY = scale.convert(rawTick) + halfBandwidth;\n            var tickLabel = this.formatTick(rawTick, i);\n            ticks.push({ tick: rawTick, tickLabel: tickLabel, translationY: translationY });\n            if (tickLabel === '' || tickLabel == undefined) {\n                continue;\n            }\n            labelCount++;\n        }\n        return { rawTicks: rawTicks, ticks: ticks, labelCount: labelCount };\n    };\n    Axis.prototype.filterTicks = function (ticks, tickCount) {\n        var _a;\n        var tickSpacing = !isNaN(this.tick.minSpacing) || !isNaN((_a = this.tick.maxSpacing) !== null && _a !== void 0 ? _a : NaN);\n        var keepEvery = tickSpacing ? Math.ceil(ticks.length / tickCount) : 2;\n        return ticks.filter(function (_, i) { return i % keepEvery === 0; });\n    };\n    Axis.prototype.createTicks = function (tickCount, minTickCount, maxTickCount) {\n        this.setTickCount(tickCount, minTickCount, maxTickCount);\n        return this.scale.ticks();\n    };\n    Axis.prototype.estimateTickCount = function (_a) {\n        var minSpacing = _a.minSpacing, maxSpacing = _a.maxSpacing;\n        var availableRange = this.calculateAvailableRange();\n        var defaultMinSpacing = Math.max(Axis.defaultTickMinSpacing, availableRange / ContinuousScale.defaultMaxTickCount);\n        if (isNaN(minSpacing) && isNaN(maxSpacing)) {\n            minSpacing = defaultMinSpacing;\n            maxSpacing = availableRange;\n            if (minSpacing > maxSpacing) {\n                // Take automatic minSpacing if there is a conflict.\n                maxSpacing = minSpacing;\n            }\n        }\n        else if (isNaN(minSpacing)) {\n            minSpacing = defaultMinSpacing;\n            if (minSpacing > maxSpacing) {\n                // Take user-suplied maxSpacing if there is a conflict.\n                minSpacing = maxSpacing;\n            }\n        }\n        else if (isNaN(maxSpacing)) {\n            maxSpacing = availableRange;\n            if (minSpacing > maxSpacing) {\n                // Take user-suplied minSpacing if there is a conflict.\n                maxSpacing = minSpacing;\n            }\n        }\n        var maxTickCount = Math.max(1, Math.floor(availableRange / minSpacing));\n        var minTickCount = Math.min(maxTickCount, Math.ceil(availableRange / maxSpacing));\n        var defaultTickCount = ContinuousScale.defaultTickCount;\n        if (defaultTickCount > maxTickCount) {\n            defaultTickCount = maxTickCount;\n        }\n        else if (defaultTickCount < minTickCount) {\n            defaultTickCount = minTickCount;\n        }\n        return { minTickCount: minTickCount, maxTickCount: maxTickCount, defaultTickCount: defaultTickCount };\n    };\n    Axis.prototype.updateVisibility = function () {\n        var requestedRange = this.range;\n        var requestedRangeMin = Math.min.apply(Math, __spreadArray$j([], __read$w(requestedRange)));\n        var requestedRangeMax = Math.max.apply(Math, __spreadArray$j([], __read$w(requestedRange)));\n        var visibleFn = function (node) {\n            var min = Math.floor(requestedRangeMin);\n            var max = Math.ceil(requestedRangeMax);\n            if (min === max) {\n                node.visible = false;\n                return;\n            }\n            // Fix an effect of rounding error\n            if (node.translationY >= min - 1 && node.translationY < min) {\n                node.translationY = min;\n            }\n            if (node.translationY > max && node.translationY <= max + 1) {\n                node.translationY = max;\n            }\n            var visible = node.translationY >= min && node.translationY <= max;\n            node.visible = visible;\n        };\n        var _a = this, gridLineGroupSelection = _a.gridLineGroupSelection, gridArcGroupSelection = _a.gridArcGroupSelection, tickLineGroupSelection = _a.tickLineGroupSelection, tickLabelGroupSelection = _a.tickLabelGroupSelection;\n        gridLineGroupSelection.each(visibleFn);\n        gridArcGroupSelection.each(visibleFn);\n        tickLineGroupSelection.each(visibleFn);\n        tickLabelGroupSelection.each(visibleFn);\n        this.tickLineGroup.visible = this.tick.enabled;\n        this.tickLabelGroup.visible = this.label.enabled;\n    };\n    Axis.prototype.updateCrossLines = function (_a) {\n        var _this = this;\n        var _b;\n        var rotation = _a.rotation, parallelFlipRotation = _a.parallelFlipRotation, regularFlipRotation = _a.regularFlipRotation, sideFlag = _a.sideFlag;\n        var anySeriesActive = this.isAnySeriesActive();\n        (_b = this.crossLines) === null || _b === void 0 ? void 0 : _b.forEach(function (crossLine) {\n            var _a;\n            crossLine.sideFlag = -sideFlag;\n            crossLine.direction = rotation === -Math.PI / 2 ? ChartAxisDirection.X : ChartAxisDirection.Y;\n            crossLine.label.parallel = (_a = crossLine.label.parallel) !== null && _a !== void 0 ? _a : _this.label.parallel;\n            crossLine.parallelFlipRotation = parallelFlipRotation;\n            crossLine.regularFlipRotation = regularFlipRotation;\n            crossLine.update(anySeriesActive);\n        });\n    };\n    Axis.prototype.updateTickLines = function (sideFlag) {\n        var tick = this.tick;\n        this.tickLineGroupSelection.each(function (line) {\n            line.strokeWidth = tick.width;\n            line.stroke = tick.color;\n            line.x1 = sideFlag * tick.size;\n            line.x2 = 0;\n            line.y1 = 0;\n            line.y2 = 0;\n        });\n    };\n    Axis.prototype.calculateAvailableRange = function () {\n        var requestedRange = this.range;\n        var min = Math.min.apply(Math, __spreadArray$j([], __read$w(requestedRange)));\n        var max = Math.max.apply(Math, __spreadArray$j([], __read$w(requestedRange)));\n        return max - min;\n    };\n    Axis.prototype.calculateDomain = function () {\n        // Placeholder for subclasses to override.\n    };\n    Axis.prototype.updatePosition = function (_a) {\n        var rotation = _a.rotation, sideFlag = _a.sideFlag;\n        var _b = this, crossLineGroup = _b.crossLineGroup, axisGroup = _b.axisGroup, gridGroup = _b.gridGroup, translation = _b.translation, gridLineGroupSelection = _b.gridLineGroupSelection, gridPadding = _b.gridPadding, gridLength = _b.gridLength;\n        var translationX = Math.floor(translation.x);\n        var translationY = Math.floor(translation.y);\n        crossLineGroup.translationX = translationX;\n        crossLineGroup.translationY = translationY;\n        crossLineGroup.rotation = rotation;\n        axisGroup.translationX = translationX;\n        axisGroup.translationY = translationY;\n        axisGroup.rotation = rotation;\n        gridGroup.translationX = translationX;\n        gridGroup.translationY = translationY;\n        gridGroup.rotation = rotation;\n        gridLineGroupSelection.each(function (line) {\n            line.x1 = gridPadding;\n            line.x2 = -sideFlag * gridLength + gridPadding;\n            line.y1 = 0;\n            line.y2 = 0;\n        });\n    };\n    Axis.prototype.updateSecondaryAxisTicks = function (_primaryTickCount) {\n        throw new Error('AG Charts - unexpected call to updateSecondaryAxisTicks() - check axes configuration.');\n    };\n    Axis.prototype.updateSelections = function (data) {\n        var gridData = this.gridLength ? data : [];\n        var gridLineGroupSelection = this.radialGrid\n            ? this.gridLineGroupSelection\n            : this.gridLineGroupSelection.update(gridData, function (group) {\n                var node = new Line();\n                node.tag = Tags.GridLine;\n                group.append(node);\n            });\n        var gridArcGroupSelection = this.radialGrid\n            ? this.gridArcGroupSelection.update(gridData, function (group) {\n                var node = new Arc();\n                node.tag = Tags.GridArc;\n                group.append(node);\n            })\n            : this.gridArcGroupSelection;\n        var tickLineGroupSelection = this.tickLineGroupSelection.update(data, function (group) {\n            var line = new Line();\n            line.tag = Tags.TickLine;\n            group.appendChild(line);\n        });\n        var tickLabelGroupSelection = this.tickLabelGroupSelection.update(data, function (group) {\n            var text = new Text();\n            text.tag = Tags.TickLabel;\n            group.appendChild(text);\n        });\n        // We need raw `translationY` values on `datum` for accurate label collision detection in axes.update()\n        // But node `translationY` values must be rounded to get pixel grid alignment\n        var translationFn = function (node) { return (node.translationY = Math.round(node.datum.translationY)); };\n        gridLineGroupSelection.each(translationFn);\n        gridArcGroupSelection.each(translationFn);\n        tickLineGroupSelection.each(translationFn);\n        tickLabelGroupSelection.each(translationFn);\n        this.tickLineGroupSelection = tickLineGroupSelection;\n        this.tickLabelGroupSelection = tickLabelGroupSelection;\n        this.gridLineGroupSelection = gridLineGroupSelection;\n        this.gridArcGroupSelection = gridArcGroupSelection;\n    };\n    Axis.prototype.updateGridLines = function (sideFlag) {\n        var _a;\n        var _b = this, gridStyle = _b.gridStyle, scale = _b.scale, tick = _b.tick, gridPadding = _b.gridPadding, gridLength = _b.gridLength;\n        if (gridLength && gridStyle.length) {\n            var styleCount_1 = gridStyle.length;\n            var grid = void 0;\n            if (this.radialGrid) {\n                var angularGridLength_1 = normalizeAngle360Inclusive(toRadians$1(gridLength));\n                var halfBandwidth_1 = ((_a = this.scale.bandwidth) !== null && _a !== void 0 ? _a : 0) / 2;\n                grid = this.gridArcGroupSelection.each(function (arc, datum) {\n                    var radius = Math.round(scale.convert(datum) + halfBandwidth_1);\n                    arc.centerX = 0;\n                    arc.centerY = scale.range[0] - radius;\n                    arc.endAngle = angularGridLength_1;\n                    arc.radius = radius;\n                });\n            }\n            else {\n                grid = this.gridLineGroupSelection.each(function (line) {\n                    line.x1 = gridPadding;\n                    line.x2 = -sideFlag * gridLength + gridPadding;\n                    line.y1 = 0;\n                    line.y2 = 0;\n                });\n            }\n            grid.each(function (node, _, index) {\n                var style = gridStyle[index % styleCount_1];\n                node.stroke = style.stroke;\n                node.strokeWidth = tick.width;\n                node.lineDash = style.lineDash;\n                node.fill = undefined;\n            });\n        }\n    };\n    Axis.prototype.updateLabels = function (_a) {\n        var tickLabelGroupSelection = _a.tickLabelGroupSelection, combinedRotation = _a.combinedRotation, textBaseline = _a.textBaseline, textAlign = _a.textAlign, labelX = _a.labelX;\n        var _b = this, label = _b.label, labelsEnabled = _b.label.enabled;\n        if (!labelsEnabled) {\n            return { labelData: [], rotated: false };\n        }\n        // Apply label option values\n        tickLabelGroupSelection.each(function (node, datum) {\n            var tickLabel = datum.tickLabel;\n            node.fontStyle = label.fontStyle;\n            node.fontWeight = label.fontWeight;\n            node.fontSize = label.fontSize;\n            node.fontFamily = label.fontFamily;\n            node.fill = label.color;\n            node.text = tickLabel;\n            var userHidden = node.text === '' || node.text == undefined;\n            if (userHidden) {\n                node.visible = false; // hide empty labels\n                return;\n            }\n            // Position labels\n            node.textBaseline = textBaseline;\n            node.textAlign = textAlign;\n            node.x = labelX;\n            node.rotationCenterX = labelX;\n            node.rotation = combinedRotation;\n            node.visible = true;\n        });\n    };\n    Axis.prototype.wrapLabels = function (tickData, index, labelProps) {\n        var _a = this.label, parallel = _a.parallel, maxWidth = _a.maxWidth, maxHeight = _a.maxHeight;\n        var defaultMaxLabelWidth = parallel\n            ? Math.round(this.calculateAvailableRange() / tickData.labelCount)\n            : this.maxThickness;\n        var maxLabelWidth = maxWidth !== null && maxWidth !== void 0 ? maxWidth : defaultMaxLabelWidth;\n        var defaultMaxLabelHeight = parallel\n            ? this.maxThickness\n            : Math.round(this.calculateAvailableRange() / tickData.labelCount);\n        var maxLabelHeight = maxHeight !== null && maxHeight !== void 0 ? maxHeight : defaultMaxLabelHeight;\n        tickData.ticks.forEach(function (tickDatum) {\n            var tickLabel = tickDatum.tickLabel;\n            var wrapping = 'hyphenate';\n            var wrappedTickLabel = Text.wrap(tickLabel, maxLabelWidth, maxLabelHeight, labelProps, wrapping);\n            tickDatum.tickLabel = wrappedTickLabel;\n        });\n        return { tickData: tickData, index: index, autoRotation: 0, terminate: true };\n    };\n    Axis.prototype.updateLine = function () {\n        // Render axis line.\n        var _a = this, lineNode = _a.lineNode, requestedRange = _a.range;\n        lineNode.x1 = 0;\n        lineNode.x2 = 0;\n        lineNode.y1 = requestedRange[0];\n        lineNode.y2 = requestedRange[1];\n        lineNode.strokeWidth = this.line.width;\n        lineNode.stroke = this.line.color;\n        lineNode.visible = true;\n    };\n    Axis.prototype.updateTitle = function (_a) {\n        var _b;\n        var anyTickVisible = _a.anyTickVisible, sideFlag = _a.sideFlag;\n        var identityFormatter = function (params) { return params.defaultValue; };\n        var _c = this, rotation = _c.rotation, title = _c.title, _titleCaption = _c._titleCaption, lineNode = _c.lineNode, requestedRange = _c.range, tickLineGroup = _c.tickLineGroup, tickLabelGroup = _c.tickLabelGroup, callbackCache = _c.moduleCtx.callbackCache;\n        var _d = ((_b = this.title) !== null && _b !== void 0 ? _b : {}).formatter, formatter = _d === void 0 ? identityFormatter : _d;\n        if (!title) {\n            _titleCaption.enabled = false;\n            return;\n        }\n        _titleCaption.enabled = title.enabled;\n        _titleCaption.fontFamily = title.fontFamily;\n        _titleCaption.fontSize = title.fontSize;\n        _titleCaption.fontStyle = title.fontStyle;\n        _titleCaption.fontWeight = title.fontWeight;\n        _titleCaption.color = title.color;\n        _titleCaption.wrapping = title.wrapping;\n        var titleVisible = false;\n        var titleNode = _titleCaption.node;\n        if (title.enabled && lineNode.visible) {\n            titleVisible = true;\n            var parallelFlipRotation = normalizeAngle360(rotation);\n            var padding = Caption.PADDING;\n            var titleRotationFlag = sideFlag === -1 && parallelFlipRotation > Math.PI && parallelFlipRotation < Math.PI * 2 ? -1 : 1;\n            titleNode.rotation = (titleRotationFlag * sideFlag * Math.PI) / 2;\n            titleNode.x = Math.floor((titleRotationFlag * sideFlag * (requestedRange[0] + requestedRange[1])) / 2);\n            var bboxYDimension = 0;\n            if (anyTickVisible) {\n                var tickBBox = Group.computeBBox([tickLineGroup, tickLabelGroup]);\n                var tickWidth = rotation === 0 ? tickBBox.width : tickBBox.height;\n                if (Math.abs(tickWidth) < Infinity) {\n                    bboxYDimension += tickWidth;\n                }\n            }\n            if (sideFlag === -1) {\n                titleNode.y = Math.floor(titleRotationFlag * (-padding - bboxYDimension));\n            }\n            else {\n                titleNode.y = Math.floor(-padding - bboxYDimension);\n            }\n            titleNode.textBaseline = titleRotationFlag === 1 ? 'bottom' : 'top';\n            titleNode.text = callbackCache.call(formatter, this.getTitleFormatterParams());\n        }\n        titleNode.visible = titleVisible;\n    };\n    // For formatting (nice rounded) tick values.\n    Axis.prototype.formatTick = function (datum, index) {\n        var _a, _b;\n        var _c = this, label = _c.label, labelFormatter = _c.labelFormatter, fractionDigits = _c.fractionDigits, callbackCache = _c.moduleCtx.callbackCache;\n        if (label.formatter) {\n            var defaultValue = fractionDigits > 0 ? datum : String(datum);\n            return ((_a = callbackCache.call(label.formatter, {\n                value: defaultValue,\n                index: index,\n                fractionDigits: fractionDigits,\n                formatter: labelFormatter,\n            })) !== null && _a !== void 0 ? _a : defaultValue);\n        }\n        else if (labelFormatter) {\n            return (_b = callbackCache.call(labelFormatter, datum)) !== null && _b !== void 0 ? _b : String(datum);\n        }\n        // The axis is using a logScale or the`datum` is an integer, a string or an object\n        return String(datum);\n    };\n    // For formatting arbitrary values between the ticks.\n    Axis.prototype.formatDatum = function (datum) {\n        return String(datum);\n    };\n    Axis.prototype.computeBBox = function () {\n        return this.axisGroup.computeBBox();\n    };\n    Axis.prototype.initCrossLine = function (crossLine) {\n        crossLine.scale = this.scale;\n        crossLine.gridLength = this.gridLength;\n    };\n    Axis.prototype.isAnySeriesActive = function () {\n        return false;\n    };\n    Axis.prototype.clipTickLines = function (x, y, width, height) {\n        this.tickLineGroup.setClipRectInGroupCoordinateSpace(new BBox(x, y, width, height));\n    };\n    Axis.prototype.clipGrid = function (x, y, width, height) {\n        this.gridGroup.setClipRectInGroupCoordinateSpace(new BBox(x, y, width, height));\n    };\n    Axis.prototype.calculatePadding = function (min, _max) {\n        return Math.abs(min * 0.01);\n    };\n    Axis.defaultTickMinSpacing = 50;\n    __decorate$1I([\n        Validate(BOOLEAN)\n    ], Axis.prototype, \"nice\", void 0);\n    __decorate$1I([\n        Validate(GRID_STYLE)\n    ], Axis.prototype, \"gridStyle\", void 0);\n    __decorate$1I([\n        Validate(NUMBER(0))\n    ], Axis.prototype, \"thickness\", void 0);\n    return Axis;\n}());\n\nvar __extends$P = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __read$v = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\n/**\n * Maps continuous domain to a continuous range.\n */\nvar LinearScale$1 = /** @class */ (function (_super) {\n    __extends$P(LinearScale, _super);\n    function LinearScale() {\n        var _this = _super.call(this, [0, 1], [0, 1]) || this;\n        _this.type = 'linear';\n        return _this;\n    }\n    LinearScale.prototype.toDomain = function (d) {\n        return d;\n    };\n    LinearScale.prototype.ticks = function () {\n        var _a;\n        var count = (_a = this.tickCount) !== null && _a !== void 0 ? _a : ContinuousScale.defaultTickCount;\n        if (!this.domain || this.domain.length < 2 || count < 1 || this.domain.some(function (d) { return !isFinite(d); })) {\n            return [];\n        }\n        this.refresh();\n        var _b = __read$v(this.getDomain(), 2), d0 = _b[0], d1 = _b[1];\n        var interval = this.interval;\n        if (interval) {\n            var step = Math.abs(interval);\n            if (!this.isDenseInterval({ start: d0, stop: d1, interval: step })) {\n                return range(d0, d1, step);\n            }\n        }\n        return ticks(d0, d1, count, this.minTickCount, this.maxTickCount);\n    };\n    LinearScale.prototype.update = function () {\n        if (!this.domain || this.domain.length < 2) {\n            return;\n        }\n        if (this.nice) {\n            this.updateNiceDomain();\n        }\n    };\n    /**\n     * Extends the domain so that it starts and ends on nice round values.\n     * @param count Tick count.\n     */\n    LinearScale.prototype.updateNiceDomain = function () {\n        var _a, _b;\n        var count = (_a = this.tickCount) !== null && _a !== void 0 ? _a : ContinuousScale.defaultTickCount;\n        var _c = __read$v(this.domain, 2), start = _c[0], stop = _c[1];\n        if (count < 1) {\n            this.niceDomain = [start, stop];\n            return;\n        }\n        if (count === 1) {\n            this.niceDomain = singleTickDomain(start, stop);\n            return;\n        }\n        var maxAttempts = 4;\n        var prev0 = start;\n        var prev1 = stop;\n        for (var i = 0; i < maxAttempts; i++) {\n            var step = (_b = this.interval) !== null && _b !== void 0 ? _b : tickStep(start, stop, count, this.minTickCount, this.maxTickCount);\n            var _d = __read$v(this.domain, 2), d0 = _d[0], d1 = _d[1];\n            if (step >= 1) {\n                start = Math.floor(d0 / step) * step;\n                stop = Math.ceil(d1 / step) * step;\n            }\n            else {\n                // Prevent floating point error\n                var s = 1 / step;\n                start = Math.floor(d0 * s) / s;\n                stop = Math.ceil(d1 * s) / s;\n            }\n            if (start === prev0 && stop === prev1) {\n                break;\n            }\n            prev0 = start;\n            prev1 = stop;\n        }\n        this.niceDomain = [start, stop];\n    };\n    LinearScale.prototype.tickFormat = function (_a) {\n        var ticks = _a.ticks, specifier = _a.specifier;\n        return tickFormat(ticks !== null && ticks !== void 0 ? ticks : this.ticks(), specifier);\n    };\n    return LinearScale;\n}(ContinuousScale));\n\nvar __extends$O = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign$p = (undefined && undefined.__assign) || function () {\n    __assign$p = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$p.apply(this, arguments);\n};\nvar __decorate$1H = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __values$k = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read$u = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$i = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar ChartAxis = /** @class */ (function (_super) {\n    __extends$O(ChartAxis, _super);\n    function ChartAxis(moduleCtx, scale) {\n        var _this = _super.call(this, moduleCtx, scale) || this;\n        _this.keys = [];\n        _this.boundSeries = [];\n        _this.includeInvisibleDomains = false;\n        _this.modules = {};\n        _this.position = 'left';\n        return _this;\n    }\n    Object.defineProperty(ChartAxis.prototype, \"type\", {\n        get: function () {\n            var _a;\n            return (_a = this.constructor.type) !== null && _a !== void 0 ? _a : '';\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(ChartAxis.prototype, \"direction\", {\n        get: function () {\n            return ['top', 'bottom'].includes(this.position) ? ChartAxisDirection.X : ChartAxisDirection.Y;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    ChartAxis.prototype.useCalculatedTickCount = function () {\n        // We only want to use the new algorithm for number axes. Category axes don't use a\n        // calculated or user-supplied tick-count, and time axes need special handling depending on\n        // the time-range involved.\n        return this.scale instanceof LinearScale$1;\n    };\n    ChartAxis.prototype.update = function (primaryTickCount) {\n        this.updateDirection();\n        return _super.prototype.update.call(this, primaryTickCount);\n    };\n    ChartAxis.prototype.updateDirection = function () {\n        switch (this.position) {\n            case 'top':\n                this.rotation = -90;\n                this.label.mirrored = true;\n                this.label.parallel = true;\n                break;\n            case 'right':\n                this.rotation = 0;\n                this.label.mirrored = true;\n                this.label.parallel = false;\n                break;\n            case 'bottom':\n                this.rotation = -90;\n                this.label.mirrored = false;\n                this.label.parallel = true;\n                break;\n            case 'left':\n                this.rotation = 0;\n                this.label.mirrored = false;\n                this.label.parallel = false;\n                break;\n        }\n        if (this.axisContext) {\n            this.axisContext.position = this.position;\n            this.axisContext.direction = this.direction;\n        }\n    };\n    ChartAxis.prototype.calculateDomain = function () {\n        var e_1, _a, _b;\n        var _c = this, direction = _c.direction, boundSeries = _c.boundSeries, includeInvisibleDomains = _c.includeInvisibleDomains;\n        if (this.linkedTo) {\n            this.dataDomain = this.linkedTo.dataDomain;\n        }\n        else {\n            var domains = [];\n            var visibleSeries = boundSeries.filter(function (s) { return includeInvisibleDomains || s.isEnabled(); });\n            try {\n                for (var visibleSeries_1 = __values$k(visibleSeries), visibleSeries_1_1 = visibleSeries_1.next(); !visibleSeries_1_1.done; visibleSeries_1_1 = visibleSeries_1.next()) {\n                    var series = visibleSeries_1_1.value;\n                    domains.push(series.getDomain(direction));\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (visibleSeries_1_1 && !visibleSeries_1_1.done && (_a = visibleSeries_1.return)) _a.call(visibleSeries_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n            var domain = (_b = new Array()).concat.apply(_b, __spreadArray$i([], __read$u(domains)));\n            this.dataDomain = this.normaliseDataDomain(domain);\n        }\n    };\n    ChartAxis.prototype.normaliseDataDomain = function (d) {\n        return d;\n    };\n    ChartAxis.prototype.isAnySeriesActive = function () {\n        var _this = this;\n        return this.boundSeries.some(function (s) { return _this.includeInvisibleDomains || s.isEnabled(); });\n    };\n    ChartAxis.prototype.getLayoutState = function () {\n        return __assign$p({ rect: this.computeBBox(), gridPadding: this.gridPadding, seriesAreaPadding: this.seriesAreaPadding, tickSize: this.tick.size }, this.layout);\n    };\n    ChartAxis.prototype.addModule = function (module) {\n        var _this = this;\n        if (this.modules[module.optionsKey] != null) {\n            throw new Error('AG Charts - module already initialised: ' + module.optionsKey);\n        }\n        if (this.axisContext == null) {\n            var keys = function () {\n                return _this.boundSeries\n                    .map(function (s) { return s.getKeys(_this.direction); })\n                    .reduce(function (keys, seriesKeys) {\n                    keys.push.apply(keys, __spreadArray$i([], __read$u(seriesKeys)));\n                    return keys;\n                }, []);\n            };\n            this.axisContext = {\n                axisId: this.id,\n                position: this.position,\n                direction: this.direction,\n                continuous: this.scale instanceof ContinuousScale,\n                keys: keys,\n                scaleValueFormatter: function (specifier) { var _a, _b, _c; return (_c = (_b = (_a = _this.scale).tickFormat) === null || _b === void 0 ? void 0 : _b.call(_a, { specifier: specifier })) !== null && _c !== void 0 ? _c : undefined; },\n                scaleBandwidth: function () { var _a; return (_a = _this.scale.bandwidth) !== null && _a !== void 0 ? _a : 0; },\n                scaleConvert: function (val) { return _this.scale.convert(val); },\n                scaleInvert: function (val) { var _a, _b, _c; return (_c = (_b = (_a = _this.scale).invert) === null || _b === void 0 ? void 0 : _b.call(_a, val)) !== null && _c !== void 0 ? _c : undefined; },\n            };\n        }\n        var moduleInstance = new module.instanceConstructor(__assign$p(__assign$p({}, this.moduleCtx), { parent: this.axisContext }));\n        this.modules[module.optionsKey] = { instance: moduleInstance };\n        this[module.optionsKey] = moduleInstance;\n    };\n    ChartAxis.prototype.removeModule = function (module) {\n        var _a, _b;\n        (_b = (_a = this.modules[module.optionsKey]) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b.destroy();\n        delete this.modules[module.optionsKey];\n        delete this[module.optionsKey];\n    };\n    ChartAxis.prototype.isModuleEnabled = function (module) {\n        return this.modules[module.optionsKey] != null;\n    };\n    ChartAxis.prototype.destroy = function () {\n        var e_2, _a;\n        _super.prototype.destroy.call(this);\n        try {\n            for (var _b = __values$k(Object.entries(this.modules)), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var _d = __read$u(_c.value, 2), key = _d[0], module = _d[1];\n                module.instance.destroy();\n                delete this.modules[key];\n                delete this[key];\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n    };\n    ChartAxis.prototype.getTitleFormatterParams = function () {\n        var _this = this;\n        var _a;\n        var boundSeries = this.boundSeries.reduce(function (acc, next) {\n            var keys = next.getKeys(_this.direction);\n            var names = next.getNames(_this.direction);\n            for (var idx = 0; idx < keys.length; idx++) {\n                acc.push({\n                    key: keys[idx],\n                    name: names[idx],\n                });\n            }\n            return acc;\n        }, []);\n        return {\n            direction: this.direction,\n            boundSeries: boundSeries,\n            defaultValue: (_a = this.title) === null || _a === void 0 ? void 0 : _a.text,\n        };\n    };\n    __decorate$1H([\n        Validate(STRING_ARRAY)\n    ], ChartAxis.prototype, \"keys\", void 0);\n    __decorate$1H([\n        Validate(POSITION)\n    ], ChartAxis.prototype, \"position\", void 0);\n    return ChartAxis;\n}(Axis));\n\nvar __extends$N = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1G = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __read$t = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$h = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar CategoryAxis = /** @class */ (function (_super) {\n    __extends$N(CategoryAxis, _super);\n    function CategoryAxis(moduleCtx) {\n        var _this = _super.call(this, moduleCtx, new BandScale$5()) || this;\n        _this._paddingOverrideEnabled = false;\n        _this.groupPaddingInner = 0.1;\n        _this.includeInvisibleDomains = true;\n        return _this;\n    }\n    Object.defineProperty(CategoryAxis.prototype, \"paddingInner\", {\n        get: function () {\n            this._paddingOverrideEnabled = true;\n            return this.scale.paddingInner;\n        },\n        set: function (value) {\n            this._paddingOverrideEnabled = true;\n            this.scale.paddingInner = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(CategoryAxis.prototype, \"paddingOuter\", {\n        get: function () {\n            return this.scale.paddingOuter;\n        },\n        set: function (value) {\n            this.scale.paddingOuter = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    CategoryAxis.prototype.normaliseDataDomain = function (d) {\n        // Prevent duplicate categories.\n        var valuesSet = new Set(d);\n        return new (Array.bind.apply(Array, __spreadArray$h([void 0], __read$t(valuesSet.values()))))();\n    };\n    CategoryAxis.prototype.calculateDomain = function () {\n        if (!this._paddingOverrideEnabled) {\n            var boundSeries = this.boundSeries;\n            var paddings = boundSeries.map(function (s) { var _a; return (_a = s.getBandScalePadding) === null || _a === void 0 ? void 0 : _a.call(s); }).filter(function (p) { return p != null; });\n            if (paddings.length > 0) {\n                this.scale.paddingInner = Math.min.apply(Math, __spreadArray$h([], __read$t(paddings.map(function (p) { return p.inner; }))));\n                this.scale.paddingOuter = Math.max.apply(Math, __spreadArray$h([], __read$t(paddings.map(function (p) { return p.outer; }))));\n            }\n        }\n        return _super.prototype.calculateDomain.call(this);\n    };\n    CategoryAxis.className = 'CategoryAxis';\n    CategoryAxis.type = 'category';\n    __decorate$1G([\n        Validate(NUMBER(0, 1))\n    ], CategoryAxis.prototype, \"groupPaddingInner\", void 0);\n    return CategoryAxis;\n}(ChartAxis));\n\nvar __assign$o = (undefined && undefined.__assign) || function () {\n    __assign$o = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$o.apply(this, arguments);\n};\nvar __read$s = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$g = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar __values$j = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/**\n * Performs a JSON-diff between a source and target JSON structure.\n *\n * On a per property basis, takes the target property value where:\n * - types are different.\n * - type is primitive.\n * - type is array and length or content have changed.\n *\n * Recurses for object types.\n *\n * @param source starting point for diff\n * @param target target for diff vs. source\n *\n * @returns `null` if no differences, or an object with the subset of properties that have changed.\n */\nfunction jsonDiff(source, target) {\n    var e_1, _a;\n    var sourceType = classify(source);\n    var targetType = classify(target);\n    if (targetType === 'array') {\n        var targetArray = target;\n        if (sourceType !== 'array' || source.length !== targetArray.length) {\n            return __spreadArray$g([], __read$s(targetArray));\n        }\n        if (targetArray.some(function (targetElement, i) { var _a; return jsonDiff((_a = source) === null || _a === void 0 ? void 0 : _a[i], targetElement) != null; })) {\n            return __spreadArray$g([], __read$s(targetArray));\n        }\n        return null;\n    }\n    if (targetType === 'primitive') {\n        if (sourceType !== 'primitive') {\n            return __assign$o({}, target);\n        }\n        if (source !== target) {\n            return target;\n        }\n        return null;\n    }\n    var lhs = source || {};\n    var rhs = target || {};\n    var allProps = new Set(__spreadArray$g(__spreadArray$g([], __read$s(Object.keys(lhs))), __read$s(Object.keys(rhs))));\n    var propsChangedCount = 0;\n    var result = {};\n    var _loop_1 = function (prop) {\n        // Cheap-and-easy equality check.\n        if (lhs[prop] === rhs[prop]) {\n            return \"continue\";\n        }\n        var take = function (v) {\n            result[prop] = v;\n            propsChangedCount++;\n        };\n        var lhsType = classify(lhs[prop]);\n        var rhsType = classify(rhs[prop]);\n        if (lhsType !== rhsType) {\n            // Types changed, just take RHS.\n            take(rhs[prop]);\n            return \"continue\";\n        }\n        if (rhsType === 'primitive' || rhsType === null) {\n            take(rhs[prop]);\n            return \"continue\";\n        }\n        if (rhsType === 'array' && lhs[prop].length !== rhs[prop].length) {\n            // Arrays are different sizes, so just take target array.\n            take(rhs[prop]);\n            return \"continue\";\n        }\n        if (rhsType === 'class-instance') {\n            // Don't try to do anything tricky with array diffs!\n            take(rhs[prop]);\n            return \"continue\";\n        }\n        if (rhsType === 'function' && lhs[prop] !== rhs[prop]) {\n            take(rhs[prop]);\n            return \"continue\";\n        }\n        var diff = jsonDiff(lhs[prop], rhs[prop]);\n        if (diff !== null) {\n            take(diff);\n        }\n    };\n    try {\n        for (var allProps_1 = __values$j(allProps), allProps_1_1 = allProps_1.next(); !allProps_1_1.done; allProps_1_1 = allProps_1.next()) {\n            var prop = allProps_1_1.value;\n            _loop_1(prop);\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (allProps_1_1 && !allProps_1_1.done && (_a = allProps_1.return)) _a.call(allProps_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    return propsChangedCount === 0 ? null : result;\n}\n/**\n * Special value used by `jsonMerge` to signal that a property should be removed from the merged\n * output.\n */\nvar DELETE = Symbol('<delete-property>');\nvar NOT_SPECIFIED = Symbol('<unspecified-property>');\n/**\n * Merge together the provide JSON object structures, with the precedence of application running\n * from higher indexes to lower indexes.\n *\n * Deep-clones all objects to avoid mutation of the inputs changing the output object. For arrays,\n * just performs a deep-clone of the entire array, no merging of elements attempted.\n *\n * @param json all json objects to merge\n * @param opts merge options\n * @param opts.avoidDeepClone contains a list of properties where deep clones should be avoided\n *\n * @returns the combination of all of the json inputs\n */\nfunction jsonMerge(json, opts) {\n    var e_2, _a;\n    var _b;\n    var avoidDeepClone = (_b = opts === null || opts === void 0 ? void 0 : opts.avoidDeepClone) !== null && _b !== void 0 ? _b : [];\n    var jsonTypes = json.map(function (v) { return classify(v); });\n    if (jsonTypes.some(function (v) { return v === 'array'; })) {\n        // Clone final array.\n        var finalValue = json[json.length - 1];\n        if (finalValue instanceof Array) {\n            return finalValue.map(function (v) {\n                var type = classify(v);\n                if (type === 'array')\n                    return jsonMerge([[], v], opts);\n                if (type === 'object')\n                    return jsonMerge([{}, v], opts);\n                return v;\n            });\n        }\n        return finalValue;\n    }\n    var result = {};\n    var props = new Set(json.map(function (v) { return (v != null ? Object.keys(v) : []); }).reduce(function (r, n) { return r.concat(n); }, []));\n    var _loop_2 = function (nextProp) {\n        var values = json\n            .map(function (j) { return (j != null && nextProp in j ? j[nextProp] : NOT_SPECIFIED); })\n            .filter(function (v) { return v !== NOT_SPECIFIED; });\n        if (values.length === 0) {\n            return \"continue\";\n        }\n        var lastValue = values[values.length - 1];\n        if (lastValue === DELETE) {\n            return \"continue\";\n        }\n        var types = values.map(function (v) { return classify(v); });\n        var type = types[0];\n        if (types.some(function (t) { return t !== type; })) {\n            // Short-circuit if mismatching types.\n            result[nextProp] = lastValue;\n            return \"continue\";\n        }\n        if ((type === 'array' || type === 'object') && !avoidDeepClone.includes(nextProp)) {\n            result[nextProp] = jsonMerge(values, opts);\n        }\n        else if (type === 'array') {\n            // Arrays need to be shallow copied to avoid external mutation and allow jsonDiff to\n            // detect changes.\n            result[nextProp] = __spreadArray$g([], __read$s(lastValue));\n        }\n        else {\n            // Just directly assign/overwrite.\n            result[nextProp] = lastValue;\n        }\n    };\n    try {\n        for (var props_1 = __values$j(props), props_1_1 = props_1.next(); !props_1_1.done; props_1_1 = props_1.next()) {\n            var nextProp = props_1_1.value;\n            _loop_2(nextProp);\n        }\n    }\n    catch (e_2_1) { e_2 = { error: e_2_1 }; }\n    finally {\n        try {\n            if (props_1_1 && !props_1_1.done && (_a = props_1.return)) _a.call(props_1);\n        }\n        finally { if (e_2) throw e_2.error; }\n    }\n    return result;\n}\n/**\n * Recursively apply a JSON object into a class-hierarchy, optionally instantiating certain classes\n * by property name.\n *\n * @param target to apply source JSON properties into\n * @param source to be applied\n * @param params.path path for logging/error purposes, to aid with pinpointing problems\n * @param params.matcherPath path for pattern matching, to lookup allowedTypes override.\n * @param params.skip property names to skip from the source\n * @param params.constructors dictionary of property name to class constructors for properties that\n *                            require object construction\n * @param params.allowedTypes overrides by path for allowed property types\n */\nfunction jsonApply(target, source, params) {\n    var _a, _b;\n    if (params === void 0) { params = {}; }\n    var _c = params.path, path = _c === void 0 ? undefined : _c, _d = params.matcherPath, matcherPath = _d === void 0 ? path ? path.replace(/(\\[[0-9+]+\\])/i, '[]') : undefined : _d, _e = params.skip, skip = _e === void 0 ? [] : _e, _f = params.constructors, constructors = _f === void 0 ? {} : _f, _g = params.allowedTypes, allowedTypes = _g === void 0 ? {} : _g, idx = params.idx;\n    if (target == null) {\n        throw new Error(\"AG Charts - target is uninitialised: \" + (path !== null && path !== void 0 ? path : '<root>'));\n    }\n    if (source == null) {\n        return target;\n    }\n    var targetAny = target;\n    if (idx != null && '_declarationOrder' in targetAny) {\n        targetAny['_declarationOrder'] = idx;\n    }\n    var targetType = classify(target);\n    var _loop_3 = function (property) {\n        var propertyMatcherPath = \"\" + (matcherPath ? matcherPath + '.' : '') + property;\n        if (skip.indexOf(propertyMatcherPath) >= 0) {\n            return \"continue\";\n        }\n        var newValue = source[property];\n        var propertyPath = \"\" + (path ? path + '.' : '') + property;\n        var targetClass = targetAny.constructor;\n        var currentValue = targetAny[property];\n        var ctr = (_a = constructors[propertyMatcherPath]) !== null && _a !== void 0 ? _a : constructors[property];\n        try {\n            var currentValueType = classify(currentValue);\n            var newValueType = classify(newValue);\n            if (targetType === 'class-instance' &&\n                !(property in target || Object.prototype.hasOwnProperty.call(targetAny, property))) {\n                Logger.warn(\"unable to set [\" + propertyPath + \"] in \" + (targetClass === null || targetClass === void 0 ? void 0 : targetClass.name) + \" - property is unknown\");\n                return \"continue\";\n            }\n            var allowableTypes = (_b = allowedTypes[propertyMatcherPath]) !== null && _b !== void 0 ? _b : [currentValueType];\n            if (currentValueType === 'class-instance' && newValueType === 'object') {\n                // Allowed, this is the common case! - do not error.\n            }\n            else if (currentValueType != null && newValueType != null && !allowableTypes.includes(newValueType)) {\n                Logger.warn(\"unable to set [\" + propertyPath + \"] in \" + (targetClass === null || targetClass === void 0 ? void 0 : targetClass.name) + \" - can't apply type of [\" + newValueType + \"], allowed types are: [\" + allowableTypes + \"]\");\n                return \"continue\";\n            }\n            if (newValueType === 'array') {\n                ctr = ctr !== null && ctr !== void 0 ? ctr : constructors[propertyMatcherPath + \"[]\"];\n                if (ctr != null) {\n                    var newValueArray = newValue;\n                    targetAny[property] = newValueArray.map(function (v, idx) {\n                        return jsonApply(new ctr(), v, __assign$o(__assign$o({}, params), { path: propertyPath, matcherPath: propertyMatcherPath + '[]', idx: idx }));\n                    });\n                }\n                else {\n                    targetAny[property] = newValue;\n                }\n            }\n            else if (newValueType === 'class-instance') {\n                targetAny[property] = newValue;\n            }\n            else if (newValueType === 'object') {\n                if (currentValue != null) {\n                    jsonApply(currentValue, newValue, __assign$o(__assign$o({}, params), { path: propertyPath, matcherPath: propertyMatcherPath, idx: undefined }));\n                }\n                else if (ctr != null) {\n                    targetAny[property] = jsonApply(new ctr(), newValue, __assign$o(__assign$o({}, params), { path: propertyPath, matcherPath: propertyMatcherPath, idx: undefined }));\n                }\n                else {\n                    targetAny[property] = newValue;\n                }\n            }\n            else {\n                targetAny[property] = newValue;\n            }\n        }\n        catch (error) {\n            var err = error;\n            Logger.warn(\"unable to set [\" + propertyPath + \"] in [\" + (targetClass === null || targetClass === void 0 ? void 0 : targetClass.name) + \"]; nested error is: \" + err.message);\n            return \"continue\";\n        }\n    };\n    for (var property in source) {\n        _loop_3(property);\n    }\n    return target;\n}\n/**\n * Walk the given JSON object graphs, invoking the visit() callback for every object encountered.\n * Arrays are descended into without a callback, however their elements will have the visit()\n * callback invoked if they are objects.\n *\n * @param json to traverse\n * @param visit callback for each non-primitive and non-array object found\n * @param opts.skip property names to skip when walking\n * @param jsons to traverse in parallel\n */\nfunction jsonWalk(json, visit, opts) {\n    var _a;\n    var jsons = [];\n    for (var _i = 3; _i < arguments.length; _i++) {\n        jsons[_i - 3] = arguments[_i];\n    }\n    var jsonType = classify(json);\n    var skip = (_a = opts.skip) !== null && _a !== void 0 ? _a : [];\n    if (jsonType === 'array') {\n        json.forEach(function (element, index) {\n            jsonWalk.apply(void 0, __spreadArray$g([element, visit, opts], __read$s((jsons !== null && jsons !== void 0 ? jsons : []).map(function (o) { return o === null || o === void 0 ? void 0 : o[index]; }))));\n        });\n        return;\n    }\n    else if (jsonType !== 'object') {\n        return;\n    }\n    visit.apply(void 0, __spreadArray$g([jsonType, json], __read$s(jsons)));\n    var _loop_4 = function (property) {\n        if (skip.indexOf(property) >= 0) {\n            return \"continue\";\n        }\n        var value = json[property];\n        var otherValues = jsons === null || jsons === void 0 ? void 0 : jsons.map(function (o) { return o === null || o === void 0 ? void 0 : o[property]; });\n        var valueType = classify(value);\n        if (valueType === 'object' || valueType === 'array') {\n            jsonWalk.apply(void 0, __spreadArray$g([value, visit, opts], __read$s(otherValues)));\n        }\n    };\n    for (var property in json) {\n        _loop_4(property);\n    }\n}\nvar isBrowser = typeof window !== 'undefined';\n/**\n * Classify the type of a value to assist with handling for merge purposes.\n */\nfunction classify(value) {\n    if (value == null) {\n        return null;\n    }\n    else if (isBrowser && value instanceof HTMLElement) {\n        return 'primitive';\n    }\n    else if (value instanceof Array) {\n        return 'array';\n    }\n    else if (value instanceof Date) {\n        return 'primitive';\n    }\n    else if (typeof value === 'object' && value.constructor === Object) {\n        return 'object';\n    }\n    else if (typeof value === 'function') {\n        return 'function';\n    }\n    else if (typeof value === 'object' && value.constructor != null) {\n        return 'class-instance';\n    }\n    return 'primitive';\n}\n\nvar __extends$M = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar Square = /** @class */ (function (_super) {\n    __extends$M(Square, _super);\n    function Square() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Square.prototype.updatePath = function () {\n        var _a = this, path = _a.path, x = _a.x, y = _a.y;\n        var hs = this.size / 2;\n        path.clear();\n        path.moveTo(this.align(x - hs), this.align(y - hs));\n        path.lineTo(this.align(x + hs), this.align(y - hs));\n        path.lineTo(this.align(x + hs), this.align(y + hs));\n        path.lineTo(this.align(x - hs), this.align(y + hs));\n        path.closePath();\n    };\n    Square.className = 'Square';\n    return Square;\n}(Marker));\n\nvar __extends$L = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar Cross = /** @class */ (function (_super) {\n    __extends$L(Cross, _super);\n    function Cross() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Cross.prototype.updatePath = function () {\n        var s = this.size / 4.2;\n        _super.prototype.applyPath.call(this, s, Cross.moves);\n    };\n    Cross.className = 'Cross';\n    Cross.moves = [\n        { x: -1, y: 0, t: 'move' },\n        { x: -1, y: -1 },\n        { x: +1, y: -1 },\n        { x: +1, y: +1 },\n        { x: +1, y: -1 },\n        { x: +1, y: +1 },\n        { x: -1, y: +1 },\n        { x: +1, y: +1 },\n        { x: -1, y: +1 },\n        { x: -1, y: -1 },\n        { x: -1, y: +1 },\n        { x: -1, y: -1 },\n    ];\n    return Cross;\n}(Marker));\n\nvar __extends$K = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar Diamond = /** @class */ (function (_super) {\n    __extends$K(Diamond, _super);\n    function Diamond() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Diamond.prototype.updatePath = function () {\n        var s = this.size / 2;\n        _super.prototype.applyPath.call(this, s, Diamond.moves);\n    };\n    Diamond.className = 'Diamond';\n    Diamond.moves = [\n        { x: 0, y: -1, t: 'move' },\n        { x: +1, y: +1 },\n        { x: -1, y: +1 },\n        { x: -1, y: -1 },\n        { x: +1, y: -1 },\n    ];\n    return Diamond;\n}(Marker));\n\nvar __extends$J = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar Heart = /** @class */ (function (_super) {\n    __extends$J(Heart, _super);\n    function Heart() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Heart.prototype.rad = function (degree) {\n        return (degree / 180) * Math.PI;\n    };\n    Heart.prototype.updatePath = function () {\n        var _a = this, x = _a.x, path = _a.path, size = _a.size, rad = _a.rad;\n        var r = size / 4;\n        var y = this.y + r / 2;\n        path.clear();\n        path.arc(x - r, y - r, r, rad(130), rad(330));\n        path.arc(x + r, y - r, r, rad(220), rad(50));\n        path.lineTo(x, y + r);\n        path.closePath();\n    };\n    Heart.className = 'Heart';\n    return Heart;\n}(Marker));\n\nvar __extends$I = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar Plus = /** @class */ (function (_super) {\n    __extends$I(Plus, _super);\n    function Plus() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Plus.prototype.updatePath = function () {\n        var s = this.size / 3;\n        _super.prototype.applyPath.call(this, s, Plus.moves);\n    };\n    Plus.className = 'Plus';\n    Plus.moves = [\n        { x: -0.5, y: -0.5, t: 'move' },\n        { x: 0, y: -1 },\n        { x: +1, y: 0 },\n        { x: 0, y: +1 },\n        { x: +1, y: 0 },\n        { x: 0, y: +1 },\n        { x: -1, y: 0 },\n        { x: 0, y: +1 },\n        { x: -1, y: 0 },\n        { x: 0, y: -1 },\n        { x: -1, y: 0 },\n        { x: 0, y: -1 },\n    ];\n    return Plus;\n}(Marker));\n\nvar __extends$H = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar Triangle = /** @class */ (function (_super) {\n    __extends$H(Triangle, _super);\n    function Triangle() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Triangle.prototype.updatePath = function () {\n        var s = this.size * 1.1;\n        _super.prototype.applyPath.call(this, s, Triangle.moves);\n    };\n    Triangle.className = 'Triangle';\n    Triangle.moves = [\n        { x: 0, y: -0.48, t: 'move' },\n        { x: 0.5, y: 0.87 },\n        { x: -1, y: 0 },\n    ];\n    return Triangle;\n}(Marker));\n\n// This function is in its own file because putting it into SeriesMarker makes the Legend\n// suddenly aware of the series (it's an agnostic component), and putting it into Marker\n// introduces circular dependencies.\nfunction getMarker$1(shape) {\n    if (shape === void 0) { shape = Square; }\n    if (typeof shape === 'string') {\n        switch (shape) {\n            case 'circle':\n                return Circle;\n            case 'cross':\n                return Cross;\n            case 'diamond':\n                return Diamond;\n            case 'heart':\n                return Heart;\n            case 'plus':\n                return Plus;\n            case 'triangle':\n                return Triangle;\n            default:\n                return Square;\n        }\n    }\n    if (typeof shape === 'function') {\n        return shape;\n    }\n    return Square;\n}\n\nvar StateMachine = /** @class */ (function () {\n    function StateMachine(initialState, states) {\n        this.debug = false;\n        this.state = initialState;\n        this.states = states;\n        if (this.debug)\n            Logger.debug(\"%c\" + this.constructor.name + \" | init -> \" + initialState, 'color: green');\n    }\n    StateMachine.prototype.transition = function (event, data) {\n        var _a, _b, _c, _d, _e;\n        var currentStateConfig = this.states[this.state];\n        var destinationTransition = (_a = currentStateConfig === null || currentStateConfig === void 0 ? void 0 : currentStateConfig.on) === null || _a === void 0 ? void 0 : _a[event];\n        if (!destinationTransition) {\n            if (this.debug) {\n                Logger.debug(\"%c\" + this.constructor.name + \" | \" + this.state + \" -> \" + event + \" -> \" + this.state, 'color: grey');\n            }\n            return;\n        }\n        var destinationState = destinationTransition.target;\n        var destinationStateConfig = this.states[destinationState];\n        if (this.debug) {\n            Logger.debug(\"%c\" + this.constructor.name + \" | \" + this.state + \" -> \" + event + \" -> \" + destinationState, 'color: green');\n        }\n        destinationTransition.action(data);\n        (_c = (_b = currentStateConfig === null || currentStateConfig === void 0 ? void 0 : currentStateConfig.actions) === null || _b === void 0 ? void 0 : _b.onExit) === null || _c === void 0 ? void 0 : _c.call(_b);\n        (_e = (_d = destinationStateConfig === null || destinationStateConfig === void 0 ? void 0 : destinationStateConfig.actions) === null || _d === void 0 ? void 0 : _d.onEnter) === null || _e === void 0 ? void 0 : _e.call(_d);\n        this.state = destinationState;\n        return this.state;\n    };\n    return StateMachine;\n}());\n\nvar __extends$G = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign$n = (undefined && undefined.__assign) || function () {\n    __assign$n = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$n.apply(this, arguments);\n};\nvar __decorate$1F = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter$d = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator$d = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __read$r = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$f = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar __values$i = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar _a, _b;\nvar DEFAULT_DIRECTION_KEYS = (_a = {},\n    _a[ChartAxisDirection.X] = ['xKey'],\n    _a[ChartAxisDirection.Y] = ['yKey'],\n    _a);\nvar DEFAULT_DIRECTION_NAMES = (_b = {},\n    _b[ChartAxisDirection.X] = ['xName'],\n    _b[ChartAxisDirection.Y] = ['yName'],\n    _b);\nvar CartesianSeriesNodeBaseClickEvent = /** @class */ (function (_super) {\n    __extends$G(CartesianSeriesNodeBaseClickEvent, _super);\n    function CartesianSeriesNodeBaseClickEvent(xKey, yKey, nativeEvent, datum, series) {\n        var _this = _super.call(this, nativeEvent, datum, series) || this;\n        _this.xKey = xKey;\n        _this.yKey = yKey;\n        return _this;\n    }\n    return CartesianSeriesNodeBaseClickEvent;\n}(SeriesNodeBaseClickEvent));\nvar CartesianSeriesNodeClickEvent = /** @class */ (function (_super) {\n    __extends$G(CartesianSeriesNodeClickEvent, _super);\n    function CartesianSeriesNodeClickEvent() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'nodeClick';\n        return _this;\n    }\n    return CartesianSeriesNodeClickEvent;\n}(CartesianSeriesNodeBaseClickEvent));\nvar CartesianSeriesNodeDoubleClickEvent = /** @class */ (function (_super) {\n    __extends$G(CartesianSeriesNodeDoubleClickEvent, _super);\n    function CartesianSeriesNodeDoubleClickEvent() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'nodeDoubleClick';\n        return _this;\n    }\n    return CartesianSeriesNodeDoubleClickEvent;\n}(CartesianSeriesNodeBaseClickEvent));\nvar CartesianStateMachine = /** @class */ (function (_super) {\n    __extends$G(CartesianStateMachine, _super);\n    function CartesianStateMachine() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return CartesianStateMachine;\n}(StateMachine));\nvar CartesianSeries = /** @class */ (function (_super) {\n    __extends$G(CartesianSeries, _super);\n    function CartesianSeries(opts) {\n        var _a, _b;\n        var _this = _super.call(this, __assign$n(__assign$n({}, opts), { useSeriesGroupLayer: true, directionKeys: (_a = opts.directionKeys) !== null && _a !== void 0 ? _a : DEFAULT_DIRECTION_KEYS, directionNames: (_b = opts.directionNames) !== null && _b !== void 0 ? _b : DEFAULT_DIRECTION_NAMES })) || this;\n        _this._contextNodeData = [];\n        _this.nodeDataDependencies = {};\n        _this.highlightSelection = Selection.select(_this.highlightNode, function () {\n            return _this.opts.hasMarkers ? _this.markerFactory() : _this.nodeFactory();\n        });\n        _this.highlightLabelSelection = Selection.select(_this.highlightLabel, Text);\n        _this.subGroups = [];\n        _this.subGroupId = 0;\n        /**\n         * The assumption is that the values will be reset (to `true`)\n         * in the {@link yKeys} setter.\n         */\n        _this.seriesItemEnabled = new Map();\n        var _c = opts.pathsPerSeries, pathsPerSeries = _c === void 0 ? 1 : _c, _d = opts.hasMarkers, hasMarkers = _d === void 0 ? false : _d, _e = opts.pathsZIndexSubOrderOffset, pathsZIndexSubOrderOffset = _e === void 0 ? [] : _e;\n        _this.opts = { pathsPerSeries: pathsPerSeries, hasMarkers: hasMarkers, pathsZIndexSubOrderOffset: pathsZIndexSubOrderOffset };\n        _this.animationState = new CartesianStateMachine('empty', {\n            empty: {\n                on: {\n                    update: {\n                        target: 'ready',\n                        action: function (data) { return _this.animateEmptyUpdateReady(data); },\n                    },\n                },\n            },\n            ready: {\n                on: {\n                    update: {\n                        target: 'ready',\n                        action: function (data) { return _this.animateReadyUpdate(data); },\n                    },\n                    highlight: {\n                        target: 'ready',\n                        action: function (data) { return _this.animateReadyHighlight(data); },\n                    },\n                    highlightMarkers: {\n                        target: 'ready',\n                        action: function (data) { return _this.animateReadyHighlightMarkers(data); },\n                    },\n                    resize: {\n                        target: 'ready',\n                        action: function (data) { return _this.animateReadyResize(data); },\n                    },\n                },\n            },\n        });\n        return _this;\n    }\n    Object.defineProperty(CartesianSeries.prototype, \"contextNodeData\", {\n        get: function () {\n            var _a;\n            return (_a = this._contextNodeData) === null || _a === void 0 ? void 0 : _a.slice();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    CartesianSeries.prototype.addChartEventListeners = function () {\n        var _this = this;\n        var _a, _b;\n        (_a = this.chartEventManager) === null || _a === void 0 ? void 0 : _a.addListener('legend-item-click', function (event) { return _this.onLegendItemClick(event); });\n        (_b = this.chartEventManager) === null || _b === void 0 ? void 0 : _b.addListener('legend-item-double-click', function (event) { return _this.onLegendItemDoubleClick(event); });\n    };\n    CartesianSeries.prototype.destroy = function () {\n        _super.prototype.destroy.call(this);\n        this._contextNodeData.splice(0, this._contextNodeData.length);\n        this.subGroups.splice(0, this.subGroups.length);\n    };\n    /**\n     * Note: we are passing `isContinuousX` and `isContinuousY` into this method because it will\n     *       typically be called inside a loop and this check only needs to happen once.\n     * @param x A domain value to be plotted along the x-axis.\n     * @param y A domain value to be plotted along the y-axis.\n     * @param isContinuousX Typically this will be the value of `xAxis.scale instanceof ContinuousScale`.\n     * @param isContinuousY Typically this will be the value of `yAxis.scale instanceof ContinuousScale`.\n     * @returns `[x, y]`, if both x and y are valid domain values for their respective axes/scales, or `undefined`.\n     */\n    CartesianSeries.prototype.checkDomainXY = function (x, y, isContinuousX, isContinuousY) {\n        var isValidDatum = ((isContinuousX && isContinuous(x)) || (!isContinuousX && isDiscrete(x))) &&\n            ((isContinuousY && isContinuous(y)) || (!isContinuousY && isDiscrete(y)));\n        return isValidDatum ? [x, y] : undefined;\n    };\n    /**\n     * Note: we are passing the xAxis and yAxis because the calling code is supposed to make sure\n     *       that series has both of them defined, and also to avoid one level of indirection,\n     *       e.g. `this.xAxis!.inRange(x)`, both of which are suboptimal in tight loops where this method is used.\n     * @param x A range value to be plotted along the x-axis.\n     * @param y A range value to be plotted along the y-axis.\n     * @param xAxis The series' x-axis.\n     * @param yAxis The series' y-axis.\n     * @returns\n     */\n    CartesianSeries.prototype.checkRangeXY = function (x, y, xAxis, yAxis) {\n        return !isNaN(x) && !isNaN(y) && xAxis.inRange(x) && yAxis.inRange(y);\n    };\n    CartesianSeries.prototype.update = function (_a) {\n        var _b, _c;\n        var seriesRect = _a.seriesRect;\n        return __awaiter$d(this, void 0, void 0, function () {\n            var _d, seriesItemEnabled, visible, series, seriesHighlighted, anySeriesItemEnabled, newNodeDataDependencies;\n            return __generator$d(this, function (_e) {\n                switch (_e.label) {\n                    case 0:\n                        _d = this, seriesItemEnabled = _d.seriesItemEnabled, visible = _d.visible;\n                        series = ((_c = (_b = this.highlightManager) === null || _b === void 0 ? void 0 : _b.getActiveHighlight()) !== null && _c !== void 0 ? _c : {}).series;\n                        seriesHighlighted = series ? series === this : undefined;\n                        anySeriesItemEnabled = (visible && seriesItemEnabled.size === 0) || __spreadArray$f([], __read$r(seriesItemEnabled.values())).some(function (v) { return v === true; });\n                        newNodeDataDependencies = {\n                            seriesRectWidth: seriesRect === null || seriesRect === void 0 ? void 0 : seriesRect.width,\n                            seriesRectHeight: seriesRect === null || seriesRect === void 0 ? void 0 : seriesRect.height,\n                        };\n                        if (jsonDiff(this.nodeDataDependencies, newNodeDataDependencies) != null) {\n                            this.nodeDataDependencies = newNodeDataDependencies;\n                            this.markNodeDataDirty();\n                            this.animationState.transition('resize', {\n                                datumSelections: this.subGroups.map(function (_a) {\n                                    var datumSelection = _a.datumSelection;\n                                    return datumSelection;\n                                }),\n                                markerSelections: this.subGroups.map(function (_a) {\n                                    var markerSelection = _a.markerSelection;\n                                    return markerSelection;\n                                }),\n                                contextData: this._contextNodeData,\n                                paths: this.subGroups.map(function (_a) {\n                                    var paths = _a.paths;\n                                    return paths;\n                                }),\n                            });\n                        }\n                        return [4 /*yield*/, this.updateSelections(seriesHighlighted, anySeriesItemEnabled)];\n                    case 1:\n                        _e.sent();\n                        return [4 /*yield*/, this.updateNodes(seriesHighlighted, anySeriesItemEnabled)];\n                    case 2:\n                        _e.sent();\n                        this.animationState.transition('update', {\n                            datumSelections: this.subGroups.map(function (_a) {\n                                var datumSelection = _a.datumSelection;\n                                return datumSelection;\n                            }),\n                            markerSelections: this.subGroups.map(function (_a) {\n                                var markerSelection = _a.markerSelection;\n                                return markerSelection;\n                            }),\n                            labelSelections: this.subGroups.map(function (_a) {\n                                var labelSelection = _a.labelSelection;\n                                return labelSelection;\n                            }),\n                            contextData: this._contextNodeData,\n                            paths: this.subGroups.map(function (_a) {\n                                var paths = _a.paths;\n                                return paths;\n                            }),\n                            seriesRect: seriesRect,\n                        });\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    CartesianSeries.prototype.updateSelections = function (seriesHighlighted, anySeriesItemEnabled) {\n        return __awaiter$d(this, void 0, void 0, function () {\n            var _a;\n            var _this = this;\n            return __generator$d(this, function (_b) {\n                switch (_b.label) {\n                    case 0: return [4 /*yield*/, this.updateHighlightSelection(seriesHighlighted)];\n                    case 1:\n                        _b.sent();\n                        if (!anySeriesItemEnabled) {\n                            return [2 /*return*/];\n                        }\n                        if (!this.nodeDataRefresh && !this.isPathOrSelectionDirty()) {\n                            return [2 /*return*/];\n                        }\n                        if (!this.nodeDataRefresh) return [3 /*break*/, 4];\n                        this.nodeDataRefresh = false;\n                        _a = this;\n                        return [4 /*yield*/, this.createNodeData()];\n                    case 2:\n                        _a._contextNodeData = _b.sent();\n                        return [4 /*yield*/, this.updateSeriesGroups()];\n                    case 3:\n                        _b.sent();\n                        _b.label = 4;\n                    case 4: return [4 /*yield*/, Promise.all(this.subGroups.map(function (g, i) { return _this.updateSeriesGroupSelections(g, i); }))];\n                    case 5:\n                        _b.sent();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    CartesianSeries.prototype.updateSeriesGroupSelections = function (subGroup, seriesIdx) {\n        return __awaiter$d(this, void 0, void 0, function () {\n            var datumSelection, labelSelection, markerSelection, contextData, nodeData, labelData, _a, _b, _c;\n            return __generator$d(this, function (_d) {\n                switch (_d.label) {\n                    case 0:\n                        datumSelection = subGroup.datumSelection, labelSelection = subGroup.labelSelection, markerSelection = subGroup.markerSelection;\n                        contextData = this._contextNodeData[seriesIdx];\n                        nodeData = contextData.nodeData, labelData = contextData.labelData;\n                        _a = subGroup;\n                        return [4 /*yield*/, this.updateDatumSelection({ nodeData: nodeData, datumSelection: datumSelection, seriesIdx: seriesIdx })];\n                    case 1:\n                        _a.datumSelection = _d.sent();\n                        _b = subGroup;\n                        return [4 /*yield*/, this.updateLabelSelection({ labelData: labelData, labelSelection: labelSelection, seriesIdx: seriesIdx })];\n                    case 2:\n                        _b.labelSelection = _d.sent();\n                        if (!markerSelection) return [3 /*break*/, 4];\n                        _c = subGroup;\n                        return [4 /*yield*/, this.updateMarkerSelection({\n                                nodeData: nodeData,\n                                markerSelection: markerSelection,\n                                seriesIdx: seriesIdx,\n                            })];\n                    case 3:\n                        _c.markerSelection = _d.sent();\n                        _d.label = 4;\n                    case 4: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    CartesianSeries.prototype.nodeFactory = function () {\n        return new Group();\n    };\n    CartesianSeries.prototype.markerFactory = function () {\n        var MarkerShape = getMarker$1();\n        return new MarkerShape();\n    };\n    CartesianSeries.prototype.updateSeriesGroups = function () {\n        var _a;\n        return __awaiter$d(this, void 0, void 0, function () {\n            var _b, contextNodeData, contentGroup, subGroups, _c, pathsPerSeries, hasMarkers, pathsZIndexSubOrderOffset, totalGroups, layer, subGroupId, subGroupZOffset, dataNodeGroup, markerGroup, labelGroup, paths, index;\n            var _this = this;\n            return __generator$d(this, function (_d) {\n                _b = this, contextNodeData = _b._contextNodeData, contentGroup = _b.contentGroup, subGroups = _b.subGroups, _c = _b.opts, pathsPerSeries = _c.pathsPerSeries, hasMarkers = _c.hasMarkers, pathsZIndexSubOrderOffset = _c.pathsZIndexSubOrderOffset;\n                if (contextNodeData.length === subGroups.length) {\n                    return [2 /*return*/];\n                }\n                if (contextNodeData.length < subGroups.length) {\n                    subGroups.splice(contextNodeData.length).forEach(function (_a) {\n                        var e_1, _b;\n                        var dataNodeGroup = _a.dataNodeGroup, markerGroup = _a.markerGroup, labelGroup = _a.labelGroup, paths = _a.paths;\n                        contentGroup.removeChild(dataNodeGroup);\n                        if (markerGroup) {\n                            contentGroup.removeChild(markerGroup);\n                        }\n                        if (labelGroup) {\n                            contentGroup.removeChild(labelGroup);\n                        }\n                        try {\n                            for (var paths_1 = __values$i(paths), paths_1_1 = paths_1.next(); !paths_1_1.done; paths_1_1 = paths_1.next()) {\n                                var path = paths_1_1.value;\n                                contentGroup.removeChild(path);\n                            }\n                        }\n                        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n                        finally {\n                            try {\n                                if (paths_1_1 && !paths_1_1.done && (_b = paths_1.return)) _b.call(paths_1);\n                            }\n                            finally { if (e_1) throw e_1.error; }\n                        }\n                    });\n                }\n                totalGroups = contextNodeData.length;\n                while (totalGroups > subGroups.length) {\n                    layer = false;\n                    subGroupId = this.subGroupId++;\n                    subGroupZOffset = subGroupId;\n                    dataNodeGroup = new Group({\n                        name: this.id + \"-series-sub\" + subGroupId + \"-dataNodes\",\n                        layer: layer,\n                        zIndex: Layers.SERIES_LAYER_ZINDEX,\n                        zIndexSubOrder: [function () { return _this._declarationOrder; }, subGroupZOffset],\n                    });\n                    markerGroup = hasMarkers\n                        ? new Group({\n                            name: this.id + \"-series-sub\" + this.subGroupId++ + \"-markers\",\n                            layer: layer,\n                            zIndex: Layers.SERIES_LAYER_ZINDEX,\n                            zIndexSubOrder: [function () { return _this._declarationOrder; }, 10000 + subGroupId],\n                        })\n                        : undefined;\n                    labelGroup = new Group({\n                        name: this.id + \"-series-sub\" + this.subGroupId++ + \"-labels\",\n                        layer: layer,\n                        zIndex: Layers.SERIES_LABEL_ZINDEX,\n                        zIndexSubOrder: [function () { return _this._declarationOrder; }, subGroupId],\n                    });\n                    contentGroup.appendChild(dataNodeGroup);\n                    contentGroup.appendChild(labelGroup);\n                    if (markerGroup) {\n                        contentGroup.appendChild(markerGroup);\n                    }\n                    paths = [];\n                    for (index = 0; index < pathsPerSeries; index++) {\n                        paths[index] = new Path();\n                        paths[index].zIndex = Layers.SERIES_LAYER_ZINDEX;\n                        paths[index].zIndexSubOrder = [\n                            function () { return _this._declarationOrder; },\n                            ((_a = pathsZIndexSubOrderOffset[index]) !== null && _a !== void 0 ? _a : 0) + subGroupZOffset,\n                        ];\n                        contentGroup.appendChild(paths[index]);\n                    }\n                    subGroups.push({\n                        paths: paths,\n                        dataNodeGroup: dataNodeGroup,\n                        markerGroup: markerGroup,\n                        labelGroup: labelGroup,\n                        labelSelection: Selection.select(labelGroup, Text),\n                        datumSelection: Selection.select(dataNodeGroup, function () { return _this.nodeFactory(); }),\n                        markerSelection: markerGroup ? Selection.select(markerGroup, function () { return _this.markerFactory(); }) : undefined,\n                    });\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    CartesianSeries.prototype.updateNodes = function (seriesHighlighted, anySeriesItemEnabled) {\n        var _a;\n        return __awaiter$d(this, void 0, void 0, function () {\n            var _b, highlightSelection, highlightLabelSelection, contextNodeData, seriesItemEnabled, hasMarkers, visible, seriesOpacity, subGroupOpacities, isSubGroupOpacityDifferent;\n            var _this = this;\n            return __generator$d(this, function (_c) {\n                switch (_c.label) {\n                    case 0:\n                        _b = this, highlightSelection = _b.highlightSelection, highlightLabelSelection = _b.highlightLabelSelection, contextNodeData = _b._contextNodeData, seriesItemEnabled = _b.seriesItemEnabled, hasMarkers = _b.opts.hasMarkers;\n                        visible = this.visible && ((_a = this._contextNodeData) === null || _a === void 0 ? void 0 : _a.length) > 0 && anySeriesItemEnabled;\n                        this.rootGroup.visible = visible;\n                        this.contentGroup.visible = visible;\n                        this.highlightGroup.visible = visible && !!seriesHighlighted;\n                        seriesOpacity = this.getOpacity();\n                        subGroupOpacities = this.subGroups.map(function (_, index) {\n                            var itemId = contextNodeData[index].itemId;\n                            return _this.getOpacity({ itemId: itemId });\n                        });\n                        isSubGroupOpacityDifferent = subGroupOpacities.some(function (subOp) { return subOp !== seriesOpacity; });\n                        this.contentGroup.opacity = isSubGroupOpacityDifferent ? 1 : seriesOpacity;\n                        if (!hasMarkers) return [3 /*break*/, 2];\n                        return [4 /*yield*/, this.updateMarkerNodes({\n                                markerSelection: highlightSelection,\n                                isHighlight: true,\n                                seriesIdx: -1,\n                            })];\n                    case 1:\n                        _c.sent();\n                        this.animationState.transition('highlightMarkers', highlightSelection);\n                        return [3 /*break*/, 4];\n                    case 2: return [4 /*yield*/, this.updateDatumNodes({ datumSelection: highlightSelection, isHighlight: true, seriesIdx: -1 })];\n                    case 3:\n                        _c.sent();\n                        this.animationState.transition('highlight', highlightSelection);\n                        _c.label = 4;\n                    case 4: return [4 /*yield*/, this.updateLabelNodes({ labelSelection: highlightLabelSelection, seriesIdx: -1 })];\n                    case 5:\n                        _c.sent();\n                        return [4 /*yield*/, Promise.all(this.subGroups.map(function (subGroup, seriesIdx) { return __awaiter$d(_this, void 0, void 0, function () {\n                                var dataNodeGroup, markerGroup, datumSelection, labelSelection, markerSelection, paths, labelGroup, itemId, subGroupVisible, subGroupOpacity, paths_2, paths_2_1, path;\n                                var e_2, _a;\n                                var _b;\n                                return __generator$d(this, function (_c) {\n                                    switch (_c.label) {\n                                        case 0:\n                                            dataNodeGroup = subGroup.dataNodeGroup, markerGroup = subGroup.markerGroup, datumSelection = subGroup.datumSelection, labelSelection = subGroup.labelSelection, markerSelection = subGroup.markerSelection, paths = subGroup.paths, labelGroup = subGroup.labelGroup;\n                                            itemId = contextNodeData[seriesIdx].itemId;\n                                            subGroupVisible = visible && ((_b = seriesItemEnabled.get(itemId)) !== null && _b !== void 0 ? _b : true);\n                                            subGroupOpacity = isSubGroupOpacityDifferent ? subGroupOpacities[seriesIdx] : 1;\n                                            dataNodeGroup.opacity = subGroupOpacity;\n                                            dataNodeGroup.visible = subGroupVisible;\n                                            labelGroup.visible = subGroupVisible;\n                                            if (markerGroup) {\n                                                markerGroup.opacity = subGroupOpacity;\n                                                markerGroup.zIndex =\n                                                    dataNodeGroup.zIndex >= Layers.SERIES_LAYER_ZINDEX\n                                                        ? dataNodeGroup.zIndex\n                                                        : dataNodeGroup.zIndex + 1;\n                                                markerGroup.visible = subGroupVisible;\n                                            }\n                                            if (labelGroup) {\n                                                labelGroup.opacity = subGroupOpacity;\n                                            }\n                                            try {\n                                                for (paths_2 = __values$i(paths), paths_2_1 = paths_2.next(); !paths_2_1.done; paths_2_1 = paths_2.next()) {\n                                                    path = paths_2_1.value;\n                                                    path.opacity = subGroupOpacity;\n                                                    path.visible = subGroupVisible;\n                                                }\n                                            }\n                                            catch (e_2_1) { e_2 = { error: e_2_1 }; }\n                                            finally {\n                                                try {\n                                                    if (paths_2_1 && !paths_2_1.done && (_a = paths_2.return)) _a.call(paths_2);\n                                                }\n                                                finally { if (e_2) throw e_2.error; }\n                                            }\n                                            if (!dataNodeGroup.visible) {\n                                                return [2 /*return*/];\n                                            }\n                                            return [4 /*yield*/, this.updateDatumNodes({ datumSelection: datumSelection, isHighlight: false, seriesIdx: seriesIdx })];\n                                        case 1:\n                                            _c.sent();\n                                            return [4 /*yield*/, this.updateLabelNodes({ labelSelection: labelSelection, seriesIdx: seriesIdx })];\n                                        case 2:\n                                            _c.sent();\n                                            if (!(hasMarkers && markerSelection)) return [3 /*break*/, 4];\n                                            return [4 /*yield*/, this.updateMarkerNodes({ markerSelection: markerSelection, isHighlight: false, seriesIdx: seriesIdx })];\n                                        case 3:\n                                            _c.sent();\n                                            _c.label = 4;\n                                        case 4: return [2 /*return*/];\n                                    }\n                                });\n                            }); }))];\n                    case 6:\n                        _c.sent();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    CartesianSeries.prototype.updateHighlightSelection = function (seriesHighlighted) {\n        var _a;\n        return __awaiter$d(this, void 0, void 0, function () {\n            var _b, highlightSelection, highlightLabelSelection, contextNodeData, highlightedDatum, item, _c, labelItem, _d, itemId_1, contextNodeData_1, contextNodeData_1_1, labelData, _e;\n            var e_3, _f;\n            return __generator$d(this, function (_g) {\n                switch (_g.label) {\n                    case 0:\n                        _b = this, highlightSelection = _b.highlightSelection, highlightLabelSelection = _b.highlightLabelSelection, contextNodeData = _b._contextNodeData;\n                        highlightedDatum = (_a = this.highlightManager) === null || _a === void 0 ? void 0 : _a.getActiveHighlight();\n                        item = seriesHighlighted && (highlightedDatum === null || highlightedDatum === void 0 ? void 0 : highlightedDatum.datum) ? highlightedDatum : undefined;\n                        _c = this;\n                        return [4 /*yield*/, this.updateHighlightSelectionItem({ item: item, highlightSelection: highlightSelection })];\n                    case 1:\n                        _c.highlightSelection = _g.sent();\n                        if (this.isLabelEnabled() && item != null) {\n                            _d = item.itemId, itemId_1 = _d === void 0 ? undefined : _d;\n                            try {\n                                for (contextNodeData_1 = __values$i(contextNodeData), contextNodeData_1_1 = contextNodeData_1.next(); !contextNodeData_1_1.done; contextNodeData_1_1 = contextNodeData_1.next()) {\n                                    labelData = contextNodeData_1_1.value.labelData;\n                                    labelItem = labelData.find(function (ld) { return ld.datum === item.datum && ld.itemId === itemId_1; });\n                                    if (labelItem != null) {\n                                        break;\n                                    }\n                                }\n                            }\n                            catch (e_3_1) { e_3 = { error: e_3_1 }; }\n                            finally {\n                                try {\n                                    if (contextNodeData_1_1 && !contextNodeData_1_1.done && (_f = contextNodeData_1.return)) _f.call(contextNodeData_1);\n                                }\n                                finally { if (e_3) throw e_3.error; }\n                            }\n                        }\n                        _e = this;\n                        return [4 /*yield*/, this.updateHighlightSelectionLabel({\n                                item: labelItem,\n                                highlightLabelSelection: highlightLabelSelection,\n                            })];\n                    case 2:\n                        _e.highlightLabelSelection = _g.sent();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    CartesianSeries.prototype.pickNodeExactShape = function (point) {\n        var e_4, _a;\n        var result = _super.prototype.pickNodeExactShape.call(this, point);\n        if (result) {\n            return result;\n        }\n        var x = point.x, y = point.y;\n        var hasMarkers = this.opts.hasMarkers;\n        try {\n            for (var _b = __values$i(this.subGroups), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var _d = _c.value, dataNodeGroup = _d.dataNodeGroup, markerGroup = _d.markerGroup;\n                var match = dataNodeGroup.pickNode(x, y);\n                if (!match && hasMarkers) {\n                    match = markerGroup === null || markerGroup === void 0 ? void 0 : markerGroup.pickNode(x, y);\n                }\n                if (match) {\n                    return { datum: match.datum, distance: 0 };\n                }\n            }\n        }\n        catch (e_4_1) { e_4 = { error: e_4_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_4) throw e_4.error; }\n        }\n    };\n    CartesianSeries.prototype.pickNodeClosestDatum = function (point) {\n        var e_5, _a, e_6, _b;\n        var _c, _d;\n        var x = point.x, y = point.y;\n        var _e = this, xAxis = _e.xAxis, yAxis = _e.yAxis, rootGroup = _e.rootGroup, contextNodeData = _e._contextNodeData;\n        var hitPoint = rootGroup.transformPoint(x, y);\n        var minDistance = Infinity;\n        var closestDatum;\n        try {\n            for (var contextNodeData_2 = __values$i(contextNodeData), contextNodeData_2_1 = contextNodeData_2.next(); !contextNodeData_2_1.done; contextNodeData_2_1 = contextNodeData_2.next()) {\n                var context = contextNodeData_2_1.value;\n                try {\n                    for (var _f = (e_6 = void 0, __values$i(context.nodeData)), _g = _f.next(); !_g.done; _g = _f.next()) {\n                        var datum = _g.value;\n                        var _h = datum.point, _j = _h === void 0 ? {} : _h, _k = _j.x, datumX = _k === void 0 ? NaN : _k, _l = _j.y, datumY = _l === void 0 ? NaN : _l;\n                        if (isNaN(datumX) || isNaN(datumY)) {\n                            continue;\n                        }\n                        var isInRange = (xAxis === null || xAxis === void 0 ? void 0 : xAxis.inRange(datumX)) && (yAxis === null || yAxis === void 0 ? void 0 : yAxis.inRange(datumY));\n                        if (!isInRange) {\n                            continue;\n                        }\n                        // No need to use Math.sqrt() since x < y implies Math.sqrt(x) < Math.sqrt(y) for\n                        // values > 1\n                        var distance = Math.max(Math.pow((hitPoint.x - datumX), 2) + Math.pow((hitPoint.y - datumY), 2), 0);\n                        if (distance < minDistance) {\n                            minDistance = distance;\n                            closestDatum = datum;\n                        }\n                    }\n                }\n                catch (e_6_1) { e_6 = { error: e_6_1 }; }\n                finally {\n                    try {\n                        if (_g && !_g.done && (_b = _f.return)) _b.call(_f);\n                    }\n                    finally { if (e_6) throw e_6.error; }\n                }\n            }\n        }\n        catch (e_5_1) { e_5 = { error: e_5_1 }; }\n        finally {\n            try {\n                if (contextNodeData_2_1 && !contextNodeData_2_1.done && (_a = contextNodeData_2.return)) _a.call(contextNodeData_2);\n            }\n            finally { if (e_5) throw e_5.error; }\n        }\n        if (closestDatum) {\n            var distance = Math.max(Math.sqrt(minDistance) - ((_d = (_c = closestDatum.point) === null || _c === void 0 ? void 0 : _c.size) !== null && _d !== void 0 ? _d : 0), 0);\n            return { datum: closestDatum, distance: distance };\n        }\n    };\n    CartesianSeries.prototype.pickNodeMainAxisFirst = function (point, requireCategoryAxis) {\n        var e_7, _a, e_8, _b;\n        var _c, _d;\n        var x = point.x, y = point.y;\n        var _e = this, xAxis = _e.xAxis, yAxis = _e.yAxis, rootGroup = _e.rootGroup, contextNodeData = _e._contextNodeData;\n        // Prefer to start search with any available category axis.\n        var directions = [xAxis, yAxis]\n            .filter(function (a) { return a instanceof CategoryAxis; })\n            .map(function (a) { return a.direction; });\n        if (requireCategoryAxis && directions.length === 0) {\n            return;\n        }\n        // Default to X-axis unless we found a suitable category axis.\n        var _f = __read$r(directions, 1), _g = _f[0], primaryDirection = _g === void 0 ? ChartAxisDirection.X : _g;\n        var hitPoint = rootGroup.transformPoint(x, y);\n        var hitPointCoords = primaryDirection === ChartAxisDirection.X ? [hitPoint.x, hitPoint.y] : [hitPoint.y, hitPoint.x];\n        var minDistance = [Infinity, Infinity];\n        var closestDatum = undefined;\n        try {\n            for (var contextNodeData_3 = __values$i(contextNodeData), contextNodeData_3_1 = contextNodeData_3.next(); !contextNodeData_3_1.done; contextNodeData_3_1 = contextNodeData_3.next()) {\n                var context = contextNodeData_3_1.value;\n                try {\n                    for (var _h = (e_8 = void 0, __values$i(context.nodeData)), _j = _h.next(); !_j.done; _j = _h.next()) {\n                        var datum = _j.value;\n                        var _k = datum.point, _l = _k === void 0 ? {} : _k, _m = _l.x, datumX = _m === void 0 ? NaN : _m, _o = _l.y, datumY = _o === void 0 ? NaN : _o;\n                        if (isNaN(datumX) || isNaN(datumY)) {\n                            continue;\n                        }\n                        var isInRange = (xAxis === null || xAxis === void 0 ? void 0 : xAxis.inRange(datumX)) && (yAxis === null || yAxis === void 0 ? void 0 : yAxis.inRange(datumY));\n                        if (!isInRange) {\n                            continue;\n                        }\n                        var point_1 = primaryDirection === ChartAxisDirection.X ? [datumX, datumY] : [datumY, datumX];\n                        // Compare distances from most significant dimension to least.\n                        var newMinDistance = true;\n                        for (var i = 0; i < point_1.length; i++) {\n                            var dist = Math.abs(point_1[i] - hitPointCoords[i]);\n                            if (dist > minDistance[i]) {\n                                newMinDistance = false;\n                                break;\n                            }\n                            if (dist < minDistance[i]) {\n                                minDistance[i] = dist;\n                                minDistance.fill(Infinity, i + 1, minDistance.length);\n                            }\n                        }\n                        if (newMinDistance) {\n                            closestDatum = datum;\n                        }\n                    }\n                }\n                catch (e_8_1) { e_8 = { error: e_8_1 }; }\n                finally {\n                    try {\n                        if (_j && !_j.done && (_b = _h.return)) _b.call(_h);\n                    }\n                    finally { if (e_8) throw e_8.error; }\n                }\n            }\n        }\n        catch (e_7_1) { e_7 = { error: e_7_1 }; }\n        finally {\n            try {\n                if (contextNodeData_3_1 && !contextNodeData_3_1.done && (_a = contextNodeData_3.return)) _a.call(contextNodeData_3);\n            }\n            finally { if (e_7) throw e_7.error; }\n        }\n        if (closestDatum) {\n            var distance = Math.max(Math.sqrt(Math.pow(minDistance[0], 2) + Math.pow(minDistance[1], 2)) - ((_d = (_c = closestDatum.point) === null || _c === void 0 ? void 0 : _c.size) !== null && _d !== void 0 ? _d : 0), 0);\n            return { datum: closestDatum, distance: distance };\n        }\n    };\n    CartesianSeries.prototype.onLegendItemClick = function (event) {\n        var enabled = event.enabled, itemId = event.itemId, series = event.series;\n        if (series.id !== this.id)\n            return;\n        this.toggleSeriesItem(itemId, enabled);\n    };\n    CartesianSeries.prototype.onLegendItemDoubleClick = function (event) {\n        var enabled = event.enabled, itemId = event.itemId, series = event.series, numVisibleItems = event.numVisibleItems;\n        var totalVisibleItems = Object.values(numVisibleItems).reduce(function (p, v) { return p + v; }, 0);\n        var wasClicked = series.id === this.id;\n        var newEnabled = wasClicked || (enabled && totalVisibleItems === 1);\n        this.toggleSeriesItem(itemId, newEnabled);\n    };\n    CartesianSeries.prototype.toggleSeriesItem = function (itemId, enabled) {\n        if (this.seriesItemEnabled.size > 0) {\n            this.seriesItemEnabled.set(itemId, enabled);\n            this.nodeDataRefresh = true;\n        }\n        else {\n            _super.prototype.toggleSeriesItem.call(this, itemId, enabled);\n        }\n    };\n    CartesianSeries.prototype.isEnabled = function () {\n        var e_9, _a;\n        if (this.seriesItemEnabled.size > 0) {\n            try {\n                for (var _b = __values$i(this.seriesItemEnabled), _c = _b.next(); !_c.done; _c = _b.next()) {\n                    var _d = __read$r(_c.value, 2), enabled = _d[1];\n                    if (enabled) {\n                        return true;\n                    }\n                }\n            }\n            catch (e_9_1) { e_9 = { error: e_9_1 }; }\n            finally {\n                try {\n                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n                }\n                finally { if (e_9) throw e_9.error; }\n            }\n            return false;\n        }\n        return _super.prototype.isEnabled.call(this);\n    };\n    CartesianSeries.prototype.isPathOrSelectionDirty = function () {\n        // Override point to allow more sophisticated dirty selection detection.\n        return false;\n    };\n    CartesianSeries.prototype.getLabelData = function () {\n        return [];\n    };\n    CartesianSeries.prototype.isAnySeriesVisible = function () {\n        var e_10, _a;\n        try {\n            for (var _b = __values$i(this.seriesItemEnabled.values()), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var visible = _c.value;\n                if (visible) {\n                    return true;\n                }\n            }\n        }\n        catch (e_10_1) { e_10 = { error: e_10_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_10) throw e_10.error; }\n        }\n        return false;\n    };\n    CartesianSeries.prototype.updateHighlightSelectionItem = function (opts) {\n        return __awaiter$d(this, void 0, void 0, function () {\n            var hasMarkers, item, highlightSelection, nodeData, markerSelection;\n            return __generator$d(this, function (_a) {\n                hasMarkers = this.opts.hasMarkers;\n                item = opts.item, highlightSelection = opts.highlightSelection;\n                nodeData = item ? [item] : [];\n                if (hasMarkers) {\n                    markerSelection = highlightSelection;\n                    return [2 /*return*/, this.updateMarkerSelection({ nodeData: nodeData, markerSelection: markerSelection, seriesIdx: -1 })];\n                }\n                else {\n                    return [2 /*return*/, this.updateDatumSelection({ nodeData: nodeData, datumSelection: highlightSelection, seriesIdx: -1 })];\n                }\n            });\n        });\n    };\n    CartesianSeries.prototype.updateHighlightSelectionLabel = function (opts) {\n        return __awaiter$d(this, void 0, void 0, function () {\n            var item, highlightLabelSelection, labelData;\n            return __generator$d(this, function (_a) {\n                item = opts.item, highlightLabelSelection = opts.highlightLabelSelection;\n                labelData = item ? [item] : [];\n                return [2 /*return*/, this.updateLabelSelection({ labelData: labelData, labelSelection: highlightLabelSelection, seriesIdx: -1 })];\n            });\n        });\n    };\n    CartesianSeries.prototype.updateDatumSelection = function (opts) {\n        return __awaiter$d(this, void 0, void 0, function () {\n            return __generator$d(this, function (_a) {\n                // Override point for sub-classes.\n                return [2 /*return*/, opts.datumSelection];\n            });\n        });\n    };\n    CartesianSeries.prototype.updateDatumNodes = function (_opts) {\n        return __awaiter$d(this, void 0, void 0, function () {\n            return __generator$d(this, function (_a) {\n                return [2 /*return*/];\n            });\n        });\n    };\n    CartesianSeries.prototype.updateMarkerSelection = function (opts) {\n        return __awaiter$d(this, void 0, void 0, function () {\n            return __generator$d(this, function (_a) {\n                // Override point for sub-classes.\n                return [2 /*return*/, opts.markerSelection];\n            });\n        });\n    };\n    CartesianSeries.prototype.updateMarkerNodes = function (_opts) {\n        return __awaiter$d(this, void 0, void 0, function () {\n            return __generator$d(this, function (_a) {\n                return [2 /*return*/];\n            });\n        });\n    };\n    CartesianSeries.prototype.animateEmptyUpdateReady = function (_data) {\n        // Override point for sub-classes.\n    };\n    CartesianSeries.prototype.animateReadyUpdate = function (_data) {\n        // Override point for sub-classes.\n    };\n    CartesianSeries.prototype.animateReadyHighlight = function (_data) {\n        // Override point for sub-classes.\n    };\n    CartesianSeries.prototype.animateReadyHighlightMarkers = function (_data) {\n        // Override point for sub-classes.\n    };\n    CartesianSeries.prototype.animateReadyResize = function (_data) {\n        // Override point for sub-classes.\n    };\n    return CartesianSeries;\n}(Series));\nvar CartesianSeriesMarker = /** @class */ (function (_super) {\n    __extends$G(CartesianSeriesMarker, _super);\n    function CartesianSeriesMarker() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.formatter = undefined;\n        return _this;\n    }\n    __decorate$1F([\n        Validate(OPT_FUNCTION),\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], CartesianSeriesMarker.prototype, \"formatter\", void 0);\n    return CartesianSeriesMarker;\n}(SeriesMarker));\n\nfunction sleep(sleepTimeoutMs) {\n    return new Promise(function (resolve) {\n        setTimeout(function () { return resolve(undefined); }, sleepTimeoutMs);\n    });\n}\n\nvar __decorate$1E = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar Overlay = /** @class */ (function () {\n    function Overlay(className, parent) {\n        this.renderer = undefined;\n        this.text = undefined;\n        this.className = className;\n        this.parentElement = parent;\n    }\n    Overlay.prototype.show = function (rect) {\n        var _a, _b;\n        var element = this.element;\n        if (!this.element) {\n            element = document.createElement('div');\n            element.className = this.className;\n            this.element = element;\n        }\n        element.style.position = 'absolute';\n        element.style.left = rect.x + \"px\";\n        element.style.top = rect.y + \"px\";\n        element.style.width = rect.width + \"px\";\n        element.style.height = rect.height + \"px\";\n        if (this.renderer) {\n            this.element.innerHTML = this.renderer();\n        }\n        else {\n            var content = document.createElement('div');\n            content.style.alignItems = 'center';\n            content.style.boxSizing = 'border-box';\n            content.style.display = 'flex';\n            content.style.justifyContent = 'center';\n            content.style.margin = '8px';\n            content.style.height = '100%';\n            content.style.font = '12px Verdana, sans-serif';\n            content.innerText = (_a = this.text) !== null && _a !== void 0 ? _a : 'No data to display';\n            element.append(content);\n        }\n        (_b = this.parentElement) === null || _b === void 0 ? void 0 : _b.append(element);\n    };\n    Overlay.prototype.hide = function () {\n        var _a;\n        (_a = this.element) === null || _a === void 0 ? void 0 : _a.remove();\n        this.element = undefined;\n    };\n    __decorate$1E([\n        Validate(OPT_FUNCTION)\n    ], Overlay.prototype, \"renderer\", void 0);\n    __decorate$1E([\n        Validate(OPT_STRING)\n    ], Overlay.prototype, \"text\", void 0);\n    return Overlay;\n}());\n\nvar ChartOverlays = /** @class */ (function () {\n    function ChartOverlays(parent) {\n        this.noData = new Overlay('ag-chart-no-data-overlay', parent);\n    }\n    return ChartOverlays;\n}());\n\nvar __values$h = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read$q = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$e = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar Listeners = /** @class */ (function () {\n    function Listeners() {\n        this.registeredListeners = {};\n    }\n    Listeners.prototype.addListener = function (type, cb) {\n        var _a;\n        var symbol = Symbol(type);\n        if (!this.registeredListeners[type]) {\n            this.registeredListeners[type] = [];\n        }\n        (_a = this.registeredListeners[type]) === null || _a === void 0 ? void 0 : _a.push({ symbol: symbol, handler: cb });\n        return symbol;\n    };\n    Listeners.prototype.dispatch = function (type) {\n        var e_1, _a;\n        var _b;\n        var params = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            params[_i - 1] = arguments[_i];\n        }\n        var listeners = (_b = this.registeredListeners[type]) !== null && _b !== void 0 ? _b : [];\n        var results = [];\n        try {\n            for (var listeners_1 = __values$h(listeners), listeners_1_1 = listeners_1.next(); !listeners_1_1.done; listeners_1_1 = listeners_1.next()) {\n                var listener = listeners_1_1.value;\n                try {\n                    results.push(listener.handler.apply(listener, __spreadArray$e([], __read$q(params))));\n                }\n                catch (e) {\n                    Logger.errorOnce(e);\n                    results.push(undefined);\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (listeners_1_1 && !listeners_1_1.done && (_a = listeners_1.return)) _a.call(listeners_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return results;\n    };\n    Listeners.prototype.cancellableDispatch = function (type, cancelled) {\n        var e_2, _a;\n        var _b;\n        var params = [];\n        for (var _i = 2; _i < arguments.length; _i++) {\n            params[_i - 2] = arguments[_i];\n        }\n        var listeners = (_b = this.registeredListeners[type]) !== null && _b !== void 0 ? _b : [];\n        var results = [];\n        try {\n            for (var listeners_2 = __values$h(listeners), listeners_2_1 = listeners_2.next(); !listeners_2_1.done; listeners_2_1 = listeners_2.next()) {\n                var listener = listeners_2_1.value;\n                if (cancelled())\n                    break;\n                results.push(listener.handler.apply(listener, __spreadArray$e([], __read$q(params))));\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (listeners_2_1 && !listeners_2_1.done && (_a = listeners_2.return)) _a.call(listeners_2);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        return results;\n    };\n    Listeners.prototype.reduceDispatch = function (type, reduceFn) {\n        var e_3, _a;\n        var _b;\n        var params = [];\n        for (var _i = 2; _i < arguments.length; _i++) {\n            params[_i - 2] = arguments[_i];\n        }\n        var listeners = (_b = this.registeredListeners[type]) !== null && _b !== void 0 ? _b : [];\n        var listenerResult = undefined;\n        try {\n            for (var listeners_3 = __values$h(listeners), listeners_3_1 = listeners_3.next(); !listeners_3_1.done; listeners_3_1 = listeners_3.next()) {\n                var listener = listeners_3_1.value;\n                listenerResult = listener.handler.apply(listener, __spreadArray$e([], __read$q(params)));\n                params = reduceFn.apply(void 0, __spreadArray$e([listenerResult], __read$q(params)));\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (listeners_3_1 && !listeners_3_1.done && (_a = listeners_3.return)) _a.call(listeners_3);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n        return listenerResult;\n    };\n    Listeners.prototype.removeListener = function (listenerSymbol) {\n        for (var type in this.registeredListeners) {\n            var listeners = this.registeredListeners[type];\n            var match = listeners === null || listeners === void 0 ? void 0 : listeners.findIndex(function (entry) { return entry.symbol === listenerSymbol; });\n            if (match != null && match >= 0) {\n                listeners === null || listeners === void 0 ? void 0 : listeners.splice(match, 1);\n            }\n            if (match != null && (listeners === null || listeners === void 0 ? void 0 : listeners.length) === 0) {\n                delete this.registeredListeners[type];\n            }\n        }\n    };\n    return Listeners;\n}());\n\nvar BaseManager = /** @class */ (function () {\n    function BaseManager() {\n        this.listeners = new Listeners();\n    }\n    BaseManager.prototype.addListener = function (type, cb) {\n        return this.listeners.addListener(type, cb);\n    };\n    BaseManager.prototype.removeListener = function (listenerSymbol) {\n        this.listeners.removeListener(listenerSymbol);\n    };\n    return BaseManager;\n}());\n\nfunction number (a, b) {\n    a = +a;\n    b = +b;\n    return function (t) { return a * (1 - t) + b * t; };\n}\n\nfunction interpolateColor (a, b) {\n    if (typeof a === 'string') {\n        try {\n            a = Color.fromString(a);\n        }\n        catch (e) {\n            a = Color.fromArray([0, 0, 0]);\n        }\n    }\n    if (typeof b === 'string') {\n        try {\n            b = Color.fromString(b);\n        }\n        catch (e) {\n            b = Color.fromArray([0, 0, 0]);\n        }\n    }\n    var red = number(a.r, b.r);\n    var green = number(a.g, b.g);\n    var blue = number(a.b, b.b);\n    var alpha = number(a.a, b.a);\n    return function (t) {\n        return Color.fromArray([red(t), green(t), blue(t), alpha(t)]).toRgbaString();\n    };\n}\n\nfunction interpolate$1 (a, b) {\n    var t = typeof b;\n    var c;\n    if (t === 'number') {\n        return number(a, b);\n    }\n    if (t === 'string') {\n        try {\n            c = Color.fromString(b);\n            b = c;\n            return interpolateColor(a, b);\n        }\n        catch (e) {\n            // Error-case handled below.\n        }\n    }\n    throw new Error('Unable to interpolate values');\n}\n\nfunction createEase(fn) {\n    return function (_a) {\n        var from = _a.from, to = _a.to;\n        var interp = interpolate$1(from, to);\n        return function (time) { return interp(fn(time)); };\n    };\n}\nfunction linear(_a) {\n    var from = _a.from, to = _a.to;\n    return interpolate$1(from, to);\n}\nvar easeOut = createEase(function (x) { return Math.sin((x * Math.PI) / 2); });\n\nvar __assign$m = (undefined && undefined.__assign) || function () {\n    __assign$m = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$m.apply(this, arguments);\n};\nvar RepeatType;\n(function (RepeatType) {\n    RepeatType[\"Loop\"] = \"loop\";\n    RepeatType[\"Reverse\"] = \"reverse\";\n})(RepeatType || (RepeatType = {}));\nfunction animate(_a) {\n    var driver = _a.driver, duration = _a.duration, from = _a.from, to = _a.to, _b = _a.autoplay, autoplay = _b === void 0 ? true : _b, _c = _a.delay, delay = _c === void 0 ? 0 : _c, _d = _a.ease, ease = _d === void 0 ? linear : _d, _e = _a.repeat, repeatMax = _e === void 0 ? Infinity : _e, _f = _a.repeatType, repeatType = _f === void 0 ? RepeatType.Loop : _f, onComplete = _a.onComplete, onPlay = _a.onPlay, onRepeat = _a.onRepeat, onStop = _a.onStop, onUpdate = _a.onUpdate;\n    var state;\n    var delayElapsed = 0;\n    var elapsed = 0;\n    var iteration = 0;\n    var isForward = true;\n    var isComplete = false;\n    var easing = ease({ from: from, to: to });\n    var controls = { isPlaying: false, play: play, pause: pause, stop: stop, reset: reset };\n    var driverControls = driver(update);\n    function play() {\n        controls.isPlaying = true;\n        driverControls.start();\n        onPlay === null || onPlay === void 0 ? void 0 : onPlay();\n        return controls;\n    }\n    function pause() {\n        controls.isPlaying = false;\n        return controls;\n    }\n    function stop() {\n        controls.isPlaying = false;\n        driverControls.stop();\n        onStop === null || onStop === void 0 ? void 0 : onStop();\n        return controls;\n    }\n    function reset() {\n        isComplete = false;\n        elapsed = 0;\n        iteration = 0;\n        driverControls.reset();\n        return controls;\n    }\n    function repeat() {\n        iteration++;\n        if (repeatType === RepeatType.Reverse) {\n            isForward = iteration % 2 === 0;\n            elapsed = isForward ? elapsed % duration : duration - (elapsed % duration);\n        }\n        else {\n            elapsed = elapsed % duration;\n        }\n        isComplete = false;\n        onRepeat === null || onRepeat === void 0 ? void 0 : onRepeat();\n    }\n    function complete() {\n        stop();\n        onComplete === null || onComplete === void 0 ? void 0 : onComplete();\n    }\n    function update(delta) {\n        if (!isForward)\n            delta = -delta;\n        if (delayElapsed >= delay) {\n            elapsed += delta;\n        }\n        else {\n            delayElapsed += delta;\n            return;\n        }\n        if (!isComplete) {\n            state = easing(Math.min(1, Math.max(0, elapsed / duration)));\n            isComplete = isForward ? elapsed >= duration : elapsed <= 0;\n        }\n        onUpdate === null || onUpdate === void 0 ? void 0 : onUpdate(state);\n        if (isComplete) {\n            if (iteration < repeatMax) {\n                repeat();\n            }\n            else {\n                complete();\n            }\n        }\n    }\n    if (autoplay)\n        play();\n    return controls;\n}\nfunction tween(opts) {\n    var handleUpdate;\n    var animateOpts = __assign$m(__assign$m({}, opts), { repeat: 0, autoplay: false, onUpdate: function (value) {\n            handleUpdate === null || handleUpdate === void 0 ? void 0 : handleUpdate(value);\n        } });\n    var animationControls = animate(animateOpts);\n    var controls = {\n        start: function (onUpdate) {\n            animationControls.stop();\n            animationControls.reset();\n            animationControls.play();\n            handleUpdate = onUpdate;\n            return controls;\n        },\n        stop: function () {\n            animationControls.stop();\n            return controls;\n        },\n    };\n    return controls;\n}\n\nvar __extends$F = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign$l = (undefined && undefined.__assign) || function () {\n    __assign$l = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$l.apply(this, arguments);\n};\nvar __read$p = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar DEBOUNCE_DELAY = 300;\nvar AnimationManager = /** @class */ (function (_super) {\n    __extends$F(AnimationManager, _super);\n    function AnimationManager(interactionManager) {\n        var _this = _super.call(this) || this;\n        _this.controllers = {};\n        _this.debouncers = {};\n        _this.updaters = [];\n        _this.isPlaying = false;\n        _this.readyToPlay = false;\n        _this.skipAnimations = false;\n        _this.interactionManager = interactionManager;\n        window.addEventListener('DOMContentLoaded', function () {\n            _this.readyToPlay = true;\n        });\n        // Fallback if `DOMContentLoaded` event is not fired, e.g. in an iframe\n        setTimeout(function () {\n            _this.readyToPlay = true;\n        }, 10);\n        return _this;\n    }\n    AnimationManager.prototype.play = function () {\n        if (this.isPlaying)\n            return;\n        this.isPlaying = true;\n        for (var id in this.controllers) {\n            this.controllers[id].play();\n        }\n        this.startAnimationCycle();\n    };\n    AnimationManager.prototype.pause = function () {\n        if (!this.isPlaying)\n            return;\n        this.isPlaying = false;\n        this.cancelAnimationFrame();\n        for (var id in this.controllers) {\n            this.controllers[id].pause();\n        }\n    };\n    AnimationManager.prototype.stop = function () {\n        this.isPlaying = false;\n        this.cancelAnimationFrame();\n        for (var id in this.controllers) {\n            this.controllers[id].stop();\n        }\n    };\n    AnimationManager.prototype.animate = function (id, opts) {\n        var _a, _b;\n        var optsExtra = __assign$l(__assign$l({}, opts), { autoplay: this.isPlaying ? opts.autoplay : false, driver: this.createDriver(id, opts.disableInteractions) });\n        var controller = animate(optsExtra);\n        if (this.controllers[id]) {\n            this.controllers[id].stop();\n            delete this.controllers[id];\n        }\n        this.controllers[id] = controller;\n        if (this.skipAnimations) {\n            // Initialise the animation with the final values immediately and then stop the animation\n            (_a = opts.onUpdate) === null || _a === void 0 ? void 0 : _a.call(opts, opts.to);\n            controller.stop();\n        }\n        else {\n            // Initialise the animation immediately without requesting a frame to prevent flashes\n            (_b = opts.onUpdate) === null || _b === void 0 ? void 0 : _b.call(opts, opts.from);\n        }\n        return controller;\n    };\n    AnimationManager.prototype.animateMany = function (id, props, opts) {\n        var _this = this;\n        var state = props.map(function (prop) { return prop.from; });\n        var updateBatch = 0;\n        var completeBatch = 0;\n        var onUpdate = function (index) { return function (v) {\n            var _a;\n            state[index] = v;\n            if (++updateBatch >= props.length) {\n                (_a = opts.onUpdate) === null || _a === void 0 ? void 0 : _a.call(opts, state);\n                updateBatch = 0;\n            }\n        }; };\n        var onComplete = function () {\n            var _a;\n            if (++completeBatch >= props.length) {\n                (_a = opts.onComplete) === null || _a === void 0 ? void 0 : _a.call(opts);\n            }\n        };\n        var drivers = props.map(function (prop, index) {\n            var inner_id = id + \"-\" + index;\n            return _this.animate(inner_id, __assign$l(__assign$l(__assign$l({}, opts), prop), { onUpdate: onUpdate(index), onComplete: onComplete }));\n        });\n        var controls = {\n            get isPlaying() {\n                return drivers.some(function (driver) { return driver.isPlaying; });\n            },\n            play: function () {\n                drivers.forEach(function (driver) { return driver.play(); });\n                return controls;\n            },\n            pause: function () {\n                drivers.forEach(function (driver) { return driver.pause(); });\n                return controls;\n            },\n            stop: function () {\n                drivers.forEach(function (driver) { return driver.stop(); });\n                return controls;\n            },\n            reset: function () {\n                drivers.forEach(function (driver) { return driver.reset(); });\n                return controls;\n            },\n        };\n        return controls;\n    };\n    AnimationManager.prototype.debouncedAnimate = function (id, opts) {\n        var _a;\n        if (this.debouncers[id] && Date.now() - this.debouncers[id] < ((_a = opts.duration) !== null && _a !== void 0 ? _a : DEBOUNCE_DELAY)) {\n            return this.controllers[id];\n        }\n        this.debouncers[id] = Date.now();\n        return this.animate(id, opts);\n    };\n    AnimationManager.prototype.tween = function (opts) {\n        var id = \"tween-\" + btoa(JSON.stringify(opts));\n        var optsExtra = __assign$l(__assign$l({}, opts), { driver: this.createDriver(id) });\n        return tween(optsExtra);\n    };\n    AnimationManager.prototype.createDriver = function (id, disableInteractions) {\n        var _this = this;\n        return function (update) {\n            return {\n                start: function () {\n                    _this.updaters.push([id, update]);\n                    if (_this.requestId == null) {\n                        _this.startAnimationCycle();\n                    }\n                    if (disableInteractions) {\n                        _this.interactionManager.pause(\"animation_\" + id);\n                    }\n                },\n                stop: function () {\n                    _this.updaters = _this.updaters.filter(function (_a) {\n                        var _b = __read$p(_a, 1), uid = _b[0];\n                        return uid !== id;\n                    });\n                    if (_this.updaters.length <= 0) {\n                        _this.cancelAnimationFrame();\n                    }\n                    if (disableInteractions) {\n                        _this.interactionManager.resume(\"animation_\" + id);\n                    }\n                },\n                reset: function () { },\n            };\n        };\n    };\n    AnimationManager.prototype.startAnimationCycle = function () {\n        var _this = this;\n        var frame = function (time) {\n            _this.requestId = requestAnimationFrame(frame);\n            if (!_this.readyToPlay) {\n                return;\n            }\n            if (_this.lastTime === undefined)\n                _this.lastTime = time;\n            var deltaMs = time - _this.lastTime;\n            _this.lastTime = time;\n            _this.updaters.forEach(function (_a) {\n                var _b = __read$p(_a, 2); _b[0]; var update = _b[1];\n                update(deltaMs);\n            });\n            _this.listeners.dispatch('animation-frame', { type: 'animation-frame', deltaMs: deltaMs });\n        };\n        this.requestId = requestAnimationFrame(frame);\n    };\n    AnimationManager.prototype.cancelAnimationFrame = function () {\n        if (!this.requestId)\n            return;\n        cancelAnimationFrame(this.requestId);\n        this.requestId = undefined;\n    };\n    return AnimationManager;\n}(BaseManager));\n\nvar __read$o = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\n/**\n * Manages the cursor styling for an element. Tracks the requested styling from distinct\n * dependents and handles conflicting styling requests.\n */\nvar CursorManager = /** @class */ (function () {\n    function CursorManager(element) {\n        this.states = {};\n        this.element = element;\n    }\n    CursorManager.prototype.updateCursor = function (callerId, style) {\n        delete this.states[callerId];\n        if (style != null) {\n            this.states[callerId] = { style: style };\n        }\n        this.applyStates();\n    };\n    CursorManager.prototype.applyStates = function () {\n        var styleToApply = 'default';\n        // Last added entry wins.\n        Object.entries(this.states)\n            .reverse()\n            .slice(0, 1)\n            .forEach(function (_a) {\n            var _b = __read$o(_a, 2); _b[0]; var style = _b[1].style;\n            return (styleToApply = style);\n        });\n        this.element.style.cursor = styleToApply;\n    };\n    return CursorManager;\n}());\n\nvar __extends$E = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar ChartEventManager = /** @class */ (function (_super) {\n    __extends$E(ChartEventManager, _super);\n    function ChartEventManager() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ChartEventManager.prototype.legendItemClick = function (series, itemId, enabled) {\n        var event = {\n            type: 'legend-item-click',\n            series: series,\n            itemId: itemId,\n            enabled: enabled,\n        };\n        this.listeners.dispatch('legend-item-click', event);\n    };\n    ChartEventManager.prototype.legendItemDoubleClick = function (series, itemId, enabled, numVisibleItems) {\n        var event = {\n            type: 'legend-item-double-click',\n            series: series,\n            itemId: itemId,\n            enabled: enabled,\n            numVisibleItems: numVisibleItems,\n        };\n        this.listeners.dispatch('legend-item-double-click', event);\n    };\n    return ChartEventManager;\n}(BaseManager));\n\nvar __extends$D = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __read$n = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nfunction isEqual$1(a, b) {\n    if (a === b)\n        return true;\n    if ((a === null || a === void 0 ? void 0 : a.series) !== (b === null || b === void 0 ? void 0 : b.series))\n        return false;\n    if ((a === null || a === void 0 ? void 0 : a.itemId) !== (b === null || b === void 0 ? void 0 : b.itemId))\n        return false;\n    if ((a === null || a === void 0 ? void 0 : a.datum) !== (b === null || b === void 0 ? void 0 : b.datum))\n        return false;\n    return true;\n}\n/**\n * Manages the actively highlighted series/datum for a chart. Tracks the requested highlights from\n * distinct dependents and handles conflicting highlight requests.\n */\nvar HighlightManager = /** @class */ (function (_super) {\n    __extends$D(HighlightManager, _super);\n    function HighlightManager() {\n        var _this = _super.call(this) || this;\n        _this.states = {};\n        _this.activeHighlight = undefined;\n        return _this;\n    }\n    HighlightManager.prototype.updateHighlight = function (callerId, highlightedDatum) {\n        delete this.states[callerId];\n        if (highlightedDatum != null) {\n            this.states[callerId] = { highlightedDatum: highlightedDatum };\n        }\n        this.applyStates();\n    };\n    HighlightManager.prototype.getActiveHighlight = function () {\n        return this.activeHighlight;\n    };\n    HighlightManager.prototype.applyStates = function () {\n        var previousHighlight = this.activeHighlight;\n        var highlightToApply = undefined;\n        // Last added entry wins.\n        Object.entries(this.states)\n            .reverse()\n            .slice(0, 1)\n            .forEach(function (_a) {\n            var _b = __read$n(_a, 2); _b[0]; var highlightedDatum = _b[1].highlightedDatum;\n            return (highlightToApply = highlightedDatum);\n        });\n        this.activeHighlight = highlightToApply;\n        var changed = !isEqual$1(previousHighlight, this.activeHighlight);\n        if (changed) {\n            var event_1 = {\n                type: 'highlight-change',\n                previousHighlight: previousHighlight,\n                currentHighlight: this.activeHighlight,\n            };\n            this.listeners.dispatch('highlight-change', event_1);\n        }\n    };\n    return HighlightManager;\n}(BaseManager));\n\nvar __extends$C = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign$k = (undefined && undefined.__assign) || function () {\n    __assign$k = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$k.apply(this, arguments);\n};\nvar __awaiter$c = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator$c = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __values$g = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar WINDOW_EVENT_HANDLERS = ['pagehide', 'mousemove', 'mouseup', 'wheel'];\nvar EVENT_HANDLERS = [\n    'click',\n    'dblclick',\n    'contextmenu',\n    'mousedown',\n    'mouseout',\n    'mouseenter',\n    'touchstart',\n    'touchmove',\n    'touchend',\n    'touchcancel',\n];\nvar CSS = \"\\n.ag-chart-wrapper {\\n    touch-action: none;\\n}\\n\";\n/**\n * Manages user interactions with a specific HTMLElement (or interactions that bubble from it's\n * children)\n */\nvar InteractionManager = /** @class */ (function (_super) {\n    __extends$C(InteractionManager, _super);\n    function InteractionManager(element, doc) {\n        var e_1, _a, e_2, _b;\n        if (doc === void 0) { doc = document; }\n        var _this = _super.call(this) || this;\n        _this.eventHandler = function (event) { return _this.processEvent(event); };\n        _this.mouseDown = false;\n        _this.touchDown = false;\n        _this.enabled = true;\n        _this.pausers = [];\n        _this.rootElement = doc.body;\n        _this.element = element;\n        try {\n            for (var EVENT_HANDLERS_1 = __values$g(EVENT_HANDLERS), EVENT_HANDLERS_1_1 = EVENT_HANDLERS_1.next(); !EVENT_HANDLERS_1_1.done; EVENT_HANDLERS_1_1 = EVENT_HANDLERS_1.next()) {\n                var type = EVENT_HANDLERS_1_1.value;\n                if (type.startsWith('touch')) {\n                    element.addEventListener(type, _this.eventHandler, { passive: true });\n                }\n                else {\n                    element.addEventListener(type, _this.eventHandler);\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (EVENT_HANDLERS_1_1 && !EVENT_HANDLERS_1_1.done && (_a = EVENT_HANDLERS_1.return)) _a.call(EVENT_HANDLERS_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        try {\n            for (var WINDOW_EVENT_HANDLERS_1 = __values$g(WINDOW_EVENT_HANDLERS), WINDOW_EVENT_HANDLERS_1_1 = WINDOW_EVENT_HANDLERS_1.next(); !WINDOW_EVENT_HANDLERS_1_1.done; WINDOW_EVENT_HANDLERS_1_1 = WINDOW_EVENT_HANDLERS_1.next()) {\n                var type = WINDOW_EVENT_HANDLERS_1_1.value;\n                if (type === 'wheel') {\n                    window.addEventListener(type, _this.eventHandler, { passive: false });\n                }\n                else {\n                    window.addEventListener(type, _this.eventHandler);\n                }\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (WINDOW_EVENT_HANDLERS_1_1 && !WINDOW_EVENT_HANDLERS_1_1.done && (_b = WINDOW_EVENT_HANDLERS_1.return)) _b.call(WINDOW_EVENT_HANDLERS_1);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        if (InteractionManager.interactionDocuments.indexOf(doc) < 0) {\n            var styleElement = document.createElement('style');\n            styleElement.innerHTML = CSS;\n            document.head.insertBefore(styleElement, document.head.querySelector('style'));\n            InteractionManager.interactionDocuments.push(doc);\n        }\n        return _this;\n    }\n    InteractionManager.prototype.destroy = function () {\n        var e_3, _a, e_4, _b;\n        try {\n            for (var WINDOW_EVENT_HANDLERS_2 = __values$g(WINDOW_EVENT_HANDLERS), WINDOW_EVENT_HANDLERS_2_1 = WINDOW_EVENT_HANDLERS_2.next(); !WINDOW_EVENT_HANDLERS_2_1.done; WINDOW_EVENT_HANDLERS_2_1 = WINDOW_EVENT_HANDLERS_2.next()) {\n                var type = WINDOW_EVENT_HANDLERS_2_1.value;\n                window.removeEventListener(type, this.eventHandler);\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (WINDOW_EVENT_HANDLERS_2_1 && !WINDOW_EVENT_HANDLERS_2_1.done && (_a = WINDOW_EVENT_HANDLERS_2.return)) _a.call(WINDOW_EVENT_HANDLERS_2);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n        try {\n            for (var EVENT_HANDLERS_2 = __values$g(EVENT_HANDLERS), EVENT_HANDLERS_2_1 = EVENT_HANDLERS_2.next(); !EVENT_HANDLERS_2_1.done; EVENT_HANDLERS_2_1 = EVENT_HANDLERS_2.next()) {\n                var type = EVENT_HANDLERS_2_1.value;\n                this.element.removeEventListener(type, this.eventHandler);\n            }\n        }\n        catch (e_4_1) { e_4 = { error: e_4_1 }; }\n        finally {\n            try {\n                if (EVENT_HANDLERS_2_1 && !EVENT_HANDLERS_2_1.done && (_b = EVENT_HANDLERS_2.return)) _b.call(EVENT_HANDLERS_2);\n            }\n            finally { if (e_4) throw e_4.error; }\n        }\n    };\n    InteractionManager.prototype.resume = function (callerId) {\n        this.pausers = this.pausers.filter(function (id) { return id !== callerId; });\n        this.enabled = this.pausers.length <= 0;\n        return this.enabled;\n    };\n    InteractionManager.prototype.pause = function (callerId) {\n        this.enabled = false;\n        this.pausers.push(callerId);\n    };\n    InteractionManager.prototype.processEvent = function (event) {\n        var types = this.decideInteractionEventTypes(event);\n        if (types.length > 0 && this.enabled) {\n            // Async dispatch to avoid blocking the event-processing thread.\n            this.dispatchEvent(event, types).catch(function (e) { return Logger.errorOnce(e); });\n        }\n    };\n    InteractionManager.prototype.dispatchEvent = function (event, types) {\n        return __awaiter$c(this, void 0, void 0, function () {\n            var coords, _loop_1, this_1, types_1, types_1_1, type;\n            var e_5, _a;\n            return __generator$c(this, function (_b) {\n                coords = this.calculateCoordinates(event);\n                if (coords == null) {\n                    return [2 /*return*/];\n                }\n                _loop_1 = function (type) {\n                    var interactionEvent = this_1.buildEvent(__assign$k(__assign$k({ event: event }, coords), { type: type }));\n                    this_1.listeners.cancellableDispatch(type, function () { return interactionEvent.consumed; }, interactionEvent);\n                };\n                this_1 = this;\n                try {\n                    for (types_1 = __values$g(types), types_1_1 = types_1.next(); !types_1_1.done; types_1_1 = types_1.next()) {\n                        type = types_1_1.value;\n                        _loop_1(type);\n                    }\n                }\n                catch (e_5_1) { e_5 = { error: e_5_1 }; }\n                finally {\n                    try {\n                        if (types_1_1 && !types_1_1.done && (_a = types_1.return)) _a.call(types_1);\n                    }\n                    finally { if (e_5) throw e_5.error; }\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    InteractionManager.prototype.decideInteractionEventTypes = function (event) {\n        switch (event.type) {\n            case 'click':\n                return ['click'];\n            case 'dblclick':\n                return ['dblclick'];\n            case 'contextmenu':\n                return ['contextmenu'];\n            case 'mousedown':\n                this.mouseDown = true;\n                this.dragStartElement = event.target;\n                return ['drag-start'];\n            case 'touchstart':\n                this.touchDown = true;\n                this.dragStartElement = event.target;\n                return ['drag-start'];\n            case 'touchmove':\n            case 'mousemove':\n                if (!this.mouseDown && !this.touchDown && !this.isEventOverElement(event)) {\n                    // We only care about these events if the target is the canvas, unless\n                    // we're in the middle of a drag/slide.\n                    return [];\n                }\n                return this.mouseDown || this.touchDown ? ['drag'] : ['hover'];\n            case 'mouseup':\n                if (!this.mouseDown && !this.isEventOverElement(event)) {\n                    // We only care about these events if the target is the canvas, unless\n                    // we're in the middle of a drag.\n                    return [];\n                }\n                this.mouseDown = false;\n                this.dragStartElement = undefined;\n                return ['drag-end'];\n            case 'touchend':\n                if (!this.touchDown && !this.isEventOverElement(event)) {\n                    // We only care about these events if the target is the canvas, unless\n                    // we're in the middle of a slide.\n                    return [];\n                }\n                this.touchDown = false;\n                this.dragStartElement = undefined;\n                return ['drag-end'];\n            case 'mouseout':\n            case 'touchcancel':\n                return ['leave'];\n            case 'mouseenter':\n                var mouseButtonDown = event instanceof MouseEvent && (event.buttons & 1) === 1;\n                if (this.mouseDown !== mouseButtonDown) {\n                    this.mouseDown = mouseButtonDown;\n                    return [mouseButtonDown ? 'drag-start' : 'drag-end'];\n                }\n                return [];\n            case 'pagehide':\n                return ['page-left'];\n            case 'wheel':\n                return ['wheel'];\n        }\n        return [];\n    };\n    InteractionManager.prototype.isEventOverElement = function (event) {\n        var _a;\n        return event.target === this.element || ((_a = event.target) === null || _a === void 0 ? void 0 : _a.parentElement) === this.element;\n    };\n    InteractionManager.prototype.calculateCoordinates = function (event) {\n        var _a;\n        if (event instanceof MouseEvent) {\n            var clientX = event.clientX, clientY = event.clientY, pageX = event.pageX, pageY = event.pageY, offsetX = event.offsetX, offsetY = event.offsetY;\n            return this.fixOffsets(event, { clientX: clientX, clientY: clientY, pageX: pageX, pageY: pageY, offsetX: offsetX, offsetY: offsetY });\n        }\n        else if (typeof TouchEvent !== 'undefined' && event instanceof TouchEvent) {\n            var lastTouch = (_a = event.touches[0]) !== null && _a !== void 0 ? _a : event.changedTouches[0];\n            var clientX = lastTouch.clientX, clientY = lastTouch.clientY, pageX = lastTouch.pageX, pageY = lastTouch.pageY;\n            return __assign$k(__assign$k({}, InteractionManager.NULL_COORDS), { clientX: clientX, clientY: clientY, pageX: pageX, pageY: pageY });\n        }\n        else if (event instanceof PageTransitionEvent) {\n            if (event.persisted) {\n                // Don't fire the page-left event since the page maybe revisited.\n                return;\n            }\n            return InteractionManager.NULL_COORDS;\n        }\n        // Unsupported event - abort.\n    };\n    InteractionManager.prototype.fixOffsets = function (event, coords) {\n        var offsets = function (el) {\n            var x = 0;\n            var y = 0;\n            while (el) {\n                x += el.offsetLeft;\n                y += el.offsetTop;\n                el = el.offsetParent;\n            }\n            return { x: x, y: y };\n        };\n        if (this.dragStartElement != null && event.target !== this.dragStartElement) {\n            // Offsets need to be relative to the drag-start element to avoid jumps when\n            // the pointer moves between element boundaries.\n            var offsetDragStart = offsets(this.dragStartElement);\n            var offsetEvent = offsets(event.target);\n            coords.offsetX -= offsetDragStart.x - offsetEvent.x;\n            coords.offsetY -= offsetDragStart.y - offsetEvent.y;\n        }\n        return coords;\n    };\n    InteractionManager.prototype.buildEvent = function (opts) {\n        var type = opts.type, event = opts.event, clientX = opts.clientX, clientY = opts.clientY;\n        var offsetX = opts.offsetX, offsetY = opts.offsetY, pageX = opts.pageX, pageY = opts.pageY;\n        if (!isNumber$4(offsetX) || !isNumber$4(offsetY)) {\n            var rect = this.element.getBoundingClientRect();\n            offsetX = clientX - rect.left;\n            offsetY = clientY - rect.top;\n        }\n        if (!isNumber$4(pageX) || !isNumber$4(pageY)) {\n            var pageRect = this.rootElement.getBoundingClientRect();\n            pageX = clientX - pageRect.left;\n            pageY = clientY - pageRect.top;\n        }\n        var builtEvent = {\n            type: type,\n            offsetX: offsetX,\n            offsetY: offsetY,\n            pageX: pageX,\n            pageY: pageY,\n            sourceEvent: event,\n            consumed: false,\n            consume: function () { return (builtEvent.consumed = true); },\n        };\n        return builtEvent;\n    };\n    InteractionManager.interactionDocuments = [];\n    InteractionManager.NULL_COORDS = {\n        clientX: -Infinity,\n        clientY: -Infinity,\n        pageX: -Infinity,\n        pageY: -Infinity,\n        offsetX: -Infinity,\n        offsetY: -Infinity,\n    };\n    return InteractionManager;\n}(BaseManager));\n\nvar __values$f = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read$m = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\n/**\n * Manages the tooltip HTML an element. Tracks the requested HTML from distinct dependents and\n * handles conflicting tooltip requests.\n */\nvar TooltipManager = /** @class */ (function () {\n    function TooltipManager(tooltip, interactionManager) {\n        var _this = this;\n        this.states = {};\n        this.exclusiveAreas = {};\n        this.destroyFns = [];\n        this.tooltip = tooltip;\n        var hoverRef = interactionManager.addListener('hover', function (e) { return _this.checkExclusiveRects(e); });\n        this.destroyFns.push(function () { return interactionManager.removeListener(hoverRef); });\n    }\n    TooltipManager.prototype.updateTooltip = function (callerId, meta, content) {\n        var _a;\n        if (content == null) {\n            content = (_a = this.states[callerId]) === null || _a === void 0 ? void 0 : _a.content;\n        }\n        if (!content) {\n            delete this.states[callerId];\n        }\n        else {\n            this.states[callerId] = { content: content, meta: meta };\n        }\n        this.applyStates();\n    };\n    TooltipManager.prototype.updateExclusiveRect = function (callerId, area) {\n        if (area) {\n            this.exclusiveAreas[callerId] = area;\n        }\n        else {\n            delete this.exclusiveAreas[callerId];\n        }\n    };\n    TooltipManager.prototype.removeTooltip = function (callerId) {\n        delete this.states[callerId];\n        this.applyStates();\n    };\n    TooltipManager.prototype.getTooltipMeta = function (callerId) {\n        var _a;\n        return (_a = this.states[callerId]) === null || _a === void 0 ? void 0 : _a.meta;\n    };\n    TooltipManager.prototype.destroy = function () {\n        var e_1, _a;\n        try {\n            for (var _b = __values$f(this.destroyFns), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var destroyFn = _c.value;\n                destroyFn();\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n    };\n    TooltipManager.prototype.checkExclusiveRects = function (e) {\n        var e_2, _a;\n        var newAppliedExclusiveArea;\n        try {\n            for (var _b = __values$f(Object.entries(this.exclusiveAreas)), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var _d = __read$m(_c.value, 2), entryId = _d[0], area = _d[1];\n                if (!area.containsPoint(e.offsetX, e.offsetY)) {\n                    continue;\n                }\n                newAppliedExclusiveArea = entryId;\n                break;\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        if (newAppliedExclusiveArea === this.appliedExclusiveArea) {\n            return;\n        }\n        this.appliedExclusiveArea = newAppliedExclusiveArea;\n        this.applyStates();\n    };\n    TooltipManager.prototype.applyStates = function () {\n        var _this = this;\n        var _a;\n        var ids = this.appliedExclusiveArea ? [this.appliedExclusiveArea] : Object.keys(this.states);\n        var contentToApply = undefined;\n        var metaToApply = undefined;\n        // Last added entry wins.\n        ids.reverse();\n        ids.slice(0, 1).forEach(function (id) {\n            var _a;\n            var _b = (_a = _this.states[id]) !== null && _a !== void 0 ? _a : {}, content = _b.content, meta = _b.meta;\n            contentToApply = content;\n            metaToApply = meta;\n        });\n        if (metaToApply === undefined || contentToApply === undefined) {\n            this.appliedState = undefined;\n            this.tooltip.toggle(false);\n            return;\n        }\n        if (((_a = this.appliedState) === null || _a === void 0 ? void 0 : _a.content) === contentToApply) {\n            var renderInstantly = this.tooltip.isVisible();\n            this.tooltip.show(metaToApply, undefined, renderInstantly);\n        }\n        else {\n            this.tooltip.show(metaToApply, contentToApply);\n        }\n        this.appliedState = { content: contentToApply, meta: metaToApply };\n    };\n    return TooltipManager;\n}());\n\nvar __extends$B = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign$j = (undefined && undefined.__assign) || function () {\n    __assign$j = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$j.apply(this, arguments);\n};\nvar __values$e = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read$l = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nfunction isEqual(a, b) {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    if (a === b)\n        return true;\n    if (((_a = a === null || a === void 0 ? void 0 : a.x) === null || _a === void 0 ? void 0 : _a.min) !== ((_b = b === null || b === void 0 ? void 0 : b.x) === null || _b === void 0 ? void 0 : _b.min))\n        return false;\n    if (((_c = a === null || a === void 0 ? void 0 : a.x) === null || _c === void 0 ? void 0 : _c.max) !== ((_d = b === null || b === void 0 ? void 0 : b.x) === null || _d === void 0 ? void 0 : _d.max))\n        return false;\n    if (((_e = a === null || a === void 0 ? void 0 : a.y) === null || _e === void 0 ? void 0 : _e.max) !== ((_f = b === null || b === void 0 ? void 0 : b.y) === null || _f === void 0 ? void 0 : _f.max))\n        return false;\n    if (((_g = a === null || a === void 0 ? void 0 : a.y) === null || _g === void 0 ? void 0 : _g.min) !== ((_h = b === null || b === void 0 ? void 0 : b.y) === null || _h === void 0 ? void 0 : _h.min))\n        return false;\n    return true;\n}\n/**\n * Manages the current zoom state for a chart. Tracks the requested zoom from distinct dependents\n * and handles conflicting zoom requests.\n */\nvar ZoomManager = /** @class */ (function (_super) {\n    __extends$B(ZoomManager, _super);\n    function ZoomManager() {\n        var _this = _super.call(this) || this;\n        _this.states = {};\n        _this.currentZoom = undefined;\n        return _this;\n    }\n    ZoomManager.prototype.updateZoom = function (callerId, newZoom) {\n        delete this.states[callerId];\n        if (newZoom != null) {\n            this.states[callerId] = __assign$j({}, newZoom);\n        }\n        this.applyStates();\n    };\n    ZoomManager.prototype.getZoom = function () {\n        return this.currentZoom;\n    };\n    ZoomManager.prototype.applyStates = function () {\n        var e_1, _a;\n        var currentZoom = this.currentZoom;\n        var zoomToApply = {};\n        try {\n            // Last added entry wins.\n            for (var _b = __values$e(Object.entries(this.states)), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var _d = __read$l(_c.value, 2), _ = _d[0], _e = _d[1], x = _e.x, y = _e.y;\n                zoomToApply.x = x !== null && x !== void 0 ? x : zoomToApply.x;\n                zoomToApply.y = y !== null && y !== void 0 ? y : zoomToApply.y;\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        this.currentZoom = zoomToApply.x != null || zoomToApply.y != null ? zoomToApply : undefined;\n        var changed = !isEqual(currentZoom, this.currentZoom);\n        if (!changed) {\n            return;\n        }\n        var event = __assign$j({ type: 'zoom-change' }, (currentZoom !== null && currentZoom !== void 0 ? currentZoom : {}));\n        this.listeners.dispatch('zoom-change', event);\n    };\n    return ZoomManager;\n}(BaseManager));\n\nvar __assign$i = (undefined && undefined.__assign) || function () {\n    __assign$i = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$i.apply(this, arguments);\n};\nfunction isLayoutStage(t) {\n    return t !== 'layout-complete';\n}\nfunction isLayoutComplete(t) {\n    return t === 'layout-complete';\n}\nvar LayoutService = /** @class */ (function () {\n    function LayoutService() {\n        this.layoutProcessors = new Listeners();\n        this.listeners = new Listeners();\n    }\n    LayoutService.prototype.addListener = function (type, cb) {\n        if (isLayoutStage(type)) {\n            return this.layoutProcessors.addListener(type, cb);\n        }\n        else if (isLayoutComplete(type)) {\n            return this.listeners.addListener(type, cb);\n        }\n        throw new Error('AG Charts - unsupported listener type: ' + type);\n    };\n    LayoutService.prototype.removeListener = function (listenerSymbol) {\n        this.listeners.removeListener(listenerSymbol);\n        this.layoutProcessors.removeListener(listenerSymbol);\n    };\n    LayoutService.prototype.dispatchPerformLayout = function (stage, ctx) {\n        var result = this.layoutProcessors.reduceDispatch(stage, function (_a, ctx) {\n            var shrinkRect = _a.shrinkRect;\n            return [__assign$i(__assign$i({}, ctx), { shrinkRect: shrinkRect })];\n        }, ctx);\n        return result !== null && result !== void 0 ? result : ctx;\n    };\n    LayoutService.prototype.dispatchLayoutComplete = function (event) {\n        this.listeners.dispatch('layout-complete', event);\n    };\n    return LayoutService;\n}());\n\nvar DataService = /** @class */ (function () {\n    function DataService(getSeries) {\n        this.getSeries = getSeries;\n    }\n    return DataService;\n}());\n\n/** Types of chart-update, in pipeline execution order. */\nvar ChartUpdateType;\n(function (ChartUpdateType) {\n    ChartUpdateType[ChartUpdateType[\"FULL\"] = 0] = \"FULL\";\n    ChartUpdateType[ChartUpdateType[\"PROCESS_DATA\"] = 1] = \"PROCESS_DATA\";\n    ChartUpdateType[ChartUpdateType[\"PERFORM_LAYOUT\"] = 2] = \"PERFORM_LAYOUT\";\n    ChartUpdateType[ChartUpdateType[\"SERIES_UPDATE\"] = 3] = \"SERIES_UPDATE\";\n    ChartUpdateType[ChartUpdateType[\"TOOLTIP_RECALCULATION\"] = 4] = \"TOOLTIP_RECALCULATION\";\n    ChartUpdateType[ChartUpdateType[\"SCENE_RENDER\"] = 5] = \"SCENE_RENDER\";\n    ChartUpdateType[ChartUpdateType[\"NONE\"] = 6] = \"NONE\";\n})(ChartUpdateType || (ChartUpdateType = {}));\n\nvar UpdateService = /** @class */ (function () {\n    function UpdateService(updateCallback) {\n        this.updateCallback = updateCallback;\n    }\n    UpdateService.prototype.update = function (type, _a) {\n        if (type === void 0) { type = ChartUpdateType.FULL; }\n        var _b = _a === void 0 ? {} : _a, _c = _b.forceNodeDataRefresh, forceNodeDataRefresh = _c === void 0 ? false : _c;\n        this.updateCallback(type, { forceNodeDataRefresh: forceNodeDataRefresh });\n    };\n    return UpdateService;\n}());\n\nvar __decorate$1D = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar ChartHighlight = /** @class */ (function () {\n    function ChartHighlight() {\n        this.range = 'tooltip';\n    }\n    __decorate$1D([\n        Validate(STRING_UNION('tooltip', 'node'))\n    ], ChartHighlight.prototype, \"range\", void 0);\n    return ChartHighlight;\n}());\n\nvar __extends$A = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1C = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar MarkerLabel = /** @class */ (function (_super) {\n    __extends$A(MarkerLabel, _super);\n    function MarkerLabel() {\n        var _this = _super.call(this, { name: 'markerLabelGroup' }) || this;\n        _this.label = new Text();\n        _this._marker = new Square();\n        _this._markerSize = 15;\n        _this._spacing = 8;\n        var label = _this.label;\n        label.textBaseline = 'middle';\n        label.fontSize = 12;\n        label.fontFamily = 'Verdana, sans-serif';\n        label.fill = 'black';\n        // For better looking vertical alignment of labels to markers.\n        label.y = HdpiCanvas.has.textMetrics ? 1 : 0;\n        _this.append([_this.marker, label]);\n        _this.update();\n        return _this;\n    }\n    Object.defineProperty(MarkerLabel.prototype, \"marker\", {\n        get: function () {\n            return this._marker;\n        },\n        set: function (value) {\n            if (this._marker !== value) {\n                this.removeChild(this._marker);\n                this._marker = value;\n                this.appendChild(value);\n                this.update();\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MarkerLabel.prototype, \"markerSize\", {\n        get: function () {\n            return this._markerSize;\n        },\n        set: function (value) {\n            if (this._markerSize !== value) {\n                this._markerSize = value;\n                this.update();\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(MarkerLabel.prototype, \"spacing\", {\n        get: function () {\n            return this._spacing;\n        },\n        set: function (value) {\n            if (this._spacing !== value) {\n                this._spacing = value;\n                this.update();\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    MarkerLabel.prototype.update = function () {\n        var marker = this.marker;\n        var markerSize = this.markerSize;\n        marker.size = markerSize;\n        this.label.x = markerSize / 2 + this.spacing;\n    };\n    MarkerLabel.prototype.render = function (renderCtx) {\n        // Cannot override field Group.opacity with get/set pair, so\n        // propagate opacity changes here.\n        this.marker.opacity = this.opacity;\n        this.label.opacity = this.opacity;\n        _super.prototype.render.call(this, renderCtx);\n    };\n    MarkerLabel.className = 'MarkerLabel';\n    __decorate$1C([\n        ProxyPropertyOnWrite('label')\n    ], MarkerLabel.prototype, \"text\", void 0);\n    __decorate$1C([\n        ProxyPropertyOnWrite('label')\n    ], MarkerLabel.prototype, \"fontStyle\", void 0);\n    __decorate$1C([\n        ProxyPropertyOnWrite('label')\n    ], MarkerLabel.prototype, \"fontWeight\", void 0);\n    __decorate$1C([\n        ProxyPropertyOnWrite('label')\n    ], MarkerLabel.prototype, \"fontSize\", void 0);\n    __decorate$1C([\n        ProxyPropertyOnWrite('label')\n    ], MarkerLabel.prototype, \"fontFamily\", void 0);\n    __decorate$1C([\n        ProxyPropertyOnWrite('label', 'fill')\n    ], MarkerLabel.prototype, \"color\", void 0);\n    __decorate$1C([\n        ProxyPropertyOnWrite('marker', 'fill')\n    ], MarkerLabel.prototype, \"markerFill\", void 0);\n    __decorate$1C([\n        ProxyPropertyOnWrite('marker', 'stroke')\n    ], MarkerLabel.prototype, \"markerStroke\", void 0);\n    __decorate$1C([\n        ProxyPropertyOnWrite('marker', 'strokeWidth')\n    ], MarkerLabel.prototype, \"markerStrokeWidth\", void 0);\n    __decorate$1C([\n        ProxyPropertyOnWrite('marker', 'fillOpacity')\n    ], MarkerLabel.prototype, \"markerFillOpacity\", void 0);\n    __decorate$1C([\n        ProxyPropertyOnWrite('marker', 'strokeOpacity')\n    ], MarkerLabel.prototype, \"markerStrokeOpacity\", void 0);\n    return MarkerLabel;\n}(Group));\n\nvar __values$d = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nfunction gridLayout(_a) {\n    var orientation = _a.orientation, bboxes = _a.bboxes, maxHeight = _a.maxHeight, maxWidth = _a.maxWidth, _b = _a.itemPaddingY, itemPaddingY = _b === void 0 ? 0 : _b, _c = _a.itemPaddingX, itemPaddingX = _c === void 0 ? 0 : _c, _d = _a.forceResult, forceResult = _d === void 0 ? false : _d;\n    var horizontal = orientation === 'horizontal';\n    var primary = {\n        max: horizontal ? maxWidth : maxHeight,\n        fn: horizontal ? function (b) { return b.width; } : function (b) { return b.height; },\n        padding: horizontal ? itemPaddingX : itemPaddingY,\n    };\n    var secondary = {\n        max: !horizontal ? maxWidth : maxHeight,\n        fn: !horizontal ? function (b) { return b.width; } : function (b) { return b.height; },\n        padding: !horizontal ? itemPaddingX : itemPaddingY,\n    };\n    var processedBBoxCount = 0;\n    var rawPages = [];\n    while (processedBBoxCount < bboxes.length) {\n        var unprocessedBBoxes = bboxes.slice(processedBBoxCount);\n        var result = processBBoxes(unprocessedBBoxes, processedBBoxCount, primary, secondary, forceResult);\n        if (!result) {\n            return;\n        }\n        processedBBoxCount += result.processedBBoxCount;\n        rawPages.push(result.pageIndices);\n    }\n    return buildPages(rawPages, orientation, bboxes, itemPaddingY, itemPaddingX);\n}\nfunction processBBoxes(bboxes, indexOffset, primary, secondary, forceResult) {\n    // If calculatePage() fails on the first guess, we could use the number of items that fit\n    // as a good guess for the next iteration.\n    var minGuess = 1;\n    var startingGuess = estimateStartingGuess(bboxes, primary);\n    if (startingGuess < minGuess) {\n        if (!forceResult) {\n            return undefined;\n        }\n        // Legend constraints too small! Display at least one row/column if forceResult is true\n        startingGuess = minGuess;\n    }\n    for (var guess = startingGuess; guess >= minGuess; guess--) {\n        var pageIndices = calculatePage(bboxes, indexOffset, guess, primary, secondary, forceResult);\n        if (pageIndices == null && guess <= minGuess) {\n            // Can't layout!\n            return undefined;\n        }\n        if (pageIndices == null) {\n            // Guess again!\n            continue;\n        }\n        if (typeof pageIndices === 'number') {\n            // calculatePage() suggested a better guess, use that if it's more than minGuess.\n            if (pageIndices <= minGuess) {\n                // Can't layout!\n                return undefined;\n            }\n            guess = pageIndices < guess && pageIndices > minGuess ? pageIndices : guess;\n            continue;\n        }\n        var processedBBoxCount = pageIndices.length * pageIndices[0].length; // this is an estimate, not all rows/columns will have the same length\n        return { processedBBoxCount: processedBBoxCount, pageIndices: pageIndices };\n    }\n}\nfunction calculatePage(bboxes, indexOffset, primaryCount, primary, secondary, forceResult) {\n    var _a;\n    var result = [];\n    var sumSecondary = 0;\n    var currentMaxSecondary = 0;\n    var currentPrimaryIndices = [];\n    var maxPrimaryValues = [];\n    for (var bboxIndex = 0; bboxIndex < bboxes.length; bboxIndex++) {\n        var primaryValueIdx = (bboxIndex + primaryCount) % primaryCount;\n        if (primaryValueIdx === 0) {\n            sumSecondary += currentMaxSecondary;\n            currentMaxSecondary = 0;\n            if (currentPrimaryIndices.length > 0) {\n                result.push(currentPrimaryIndices);\n            }\n            currentPrimaryIndices = [];\n        }\n        var primaryValue = primary.fn(bboxes[bboxIndex]) + primary.padding;\n        maxPrimaryValues[primaryValueIdx] = Math.max((_a = maxPrimaryValues[primaryValueIdx]) !== null && _a !== void 0 ? _a : 0, primaryValue);\n        currentMaxSecondary = Math.max(currentMaxSecondary, secondary.fn(bboxes[bboxIndex]) + secondary.padding);\n        var currentSecondaryDimension = sumSecondary + currentMaxSecondary;\n        var returnResult = !forceResult || result.length > 0;\n        if (currentSecondaryDimension > secondary.max && returnResult) {\n            // Breached max secondary dimension size, return indices accumlated so far (but not in-progress row/column).\n            currentPrimaryIndices = [];\n            break;\n        }\n        var sumPrimary = maxPrimaryValues.reduce(function (sum, next) { return sum + next; }, 0);\n        if (sumPrimary > primary.max && !forceResult) {\n            // Breached max main dimension size.\n            if (maxPrimaryValues.length < primaryCount) {\n                // Feedback as guess for next iteration if we're on the first round still.\n                return maxPrimaryValues.length;\n            }\n            return undefined;\n        }\n        currentPrimaryIndices.push(bboxIndex + indexOffset);\n    }\n    if (currentPrimaryIndices.length > 0) {\n        result.push(currentPrimaryIndices);\n    }\n    return result.length > 0 ? result : undefined;\n}\nfunction buildPages(rawPages, orientation, bboxes, itemPaddingY, itemPaddingX) {\n    var maxPageWidth = 0;\n    var maxPageHeight = 0;\n    var pages = rawPages.map(function (indices) {\n        if (orientation === 'horizontal') {\n            indices = transpose(indices);\n        }\n        var endIndex = 0;\n        var columns = indices.map(function (colIndices) {\n            var colBBoxes = colIndices.map(function (bboxIndex) {\n                endIndex = Math.max(bboxIndex, endIndex);\n                return bboxes[bboxIndex];\n            });\n            var columnHeight = 0;\n            var columnWidth = 0;\n            colBBoxes.forEach(function (bbox) {\n                columnHeight += bbox.height + itemPaddingY;\n                columnWidth = Math.max(columnWidth, bbox.width + itemPaddingX);\n            });\n            return {\n                indices: colIndices,\n                bboxes: colBBoxes,\n                columnHeight: columnHeight,\n                columnWidth: columnWidth,\n            };\n        });\n        var pageWidth = 0;\n        var pageHeight = 0;\n        columns.forEach(function (column) {\n            pageWidth += column.columnWidth;\n            pageHeight = Math.max(pageHeight, column.columnHeight);\n        });\n        maxPageWidth = Math.max(pageWidth, maxPageWidth);\n        maxPageHeight = Math.max(pageHeight, maxPageHeight);\n        return {\n            columns: columns,\n            startIndex: indices[0][0],\n            endIndex: endIndex,\n            pageWidth: pageWidth,\n            pageHeight: pageHeight,\n        };\n    });\n    return { pages: pages, maxPageWidth: maxPageWidth, maxPageHeight: maxPageHeight };\n}\nfunction transpose(data) {\n    var e_1, _a;\n    var result = [];\n    try {\n        for (var _b = __values$d(data[0]), _c = _b.next(); !_c.done; _c = _b.next()) {\n            var _ = _c.value;\n            result.push([]);\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    data.forEach(function (innerData, dataIdx) {\n        innerData.forEach(function (item, itemIdx) {\n            result[itemIdx][dataIdx] = item;\n        });\n    });\n    return result;\n}\nfunction estimateStartingGuess(bboxes, primary) {\n    var n = bboxes.length;\n    var primarySum = 0;\n    for (var bboxIndex = 0; bboxIndex < n; bboxIndex++) {\n        primarySum += primary.fn(bboxes[bboxIndex]) + primary.padding;\n        if (primarySum > primary.max) {\n            var ratio = n / bboxIndex;\n            if (ratio < 2) {\n                return Math.ceil(n / 2);\n            }\n            return bboxIndex;\n        }\n    }\n    return n;\n}\n\nvar __decorate$1B = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PaginationLabel = /** @class */ (function () {\n    function PaginationLabel() {\n        this.color = 'black';\n        this.fontStyle = undefined;\n        this.fontWeight = undefined;\n        this.fontSize = 12;\n        this.fontFamily = 'Verdana, sans-serif';\n    }\n    __decorate$1B([\n        Validate(COLOR_STRING)\n    ], PaginationLabel.prototype, \"color\", void 0);\n    __decorate$1B([\n        Validate(OPT_FONT_STYLE)\n    ], PaginationLabel.prototype, \"fontStyle\", void 0);\n    __decorate$1B([\n        Validate(OPT_FONT_WEIGHT)\n    ], PaginationLabel.prototype, \"fontWeight\", void 0);\n    __decorate$1B([\n        Validate(NUMBER(0))\n    ], PaginationLabel.prototype, \"fontSize\", void 0);\n    __decorate$1B([\n        Validate(STRING)\n    ], PaginationLabel.prototype, \"fontFamily\", void 0);\n    return PaginationLabel;\n}());\nvar PaginationMarkerStyle = /** @class */ (function () {\n    function PaginationMarkerStyle() {\n        this.size = 15;\n        this.fill = undefined;\n        this.fillOpacity = undefined;\n        this.stroke = undefined;\n        this.strokeWidth = 1;\n        this.strokeOpacity = 1;\n    }\n    __decorate$1B([\n        Validate(NUMBER(0))\n    ], PaginationMarkerStyle.prototype, \"size\", void 0);\n    __decorate$1B([\n        Validate(OPT_COLOR_STRING)\n    ], PaginationMarkerStyle.prototype, \"fill\", void 0);\n    __decorate$1B([\n        Validate(OPT_NUMBER(0, 1))\n    ], PaginationMarkerStyle.prototype, \"fillOpacity\", void 0);\n    __decorate$1B([\n        Validate(OPT_COLOR_STRING)\n    ], PaginationMarkerStyle.prototype, \"stroke\", void 0);\n    __decorate$1B([\n        Validate(NUMBER(0))\n    ], PaginationMarkerStyle.prototype, \"strokeWidth\", void 0);\n    __decorate$1B([\n        Validate(NUMBER(0, 1))\n    ], PaginationMarkerStyle.prototype, \"strokeOpacity\", void 0);\n    return PaginationMarkerStyle;\n}());\nvar PaginationMarker = /** @class */ (function () {\n    function PaginationMarker() {\n        this.size = 15;\n        this._shape = Triangle;\n        /**\n         * Inner padding between a pagination button and the label.\n         */\n        this.padding = 8;\n    }\n    Object.defineProperty(PaginationMarker.prototype, \"shape\", {\n        get: function () {\n            return this._shape;\n        },\n        set: function (value) {\n            var _a;\n            this._shape = value;\n            (_a = this.parent) === null || _a === void 0 ? void 0 : _a.onMarkerShapeChange();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate$1B([\n        Validate(NUMBER(0))\n    ], PaginationMarker.prototype, \"size\", void 0);\n    __decorate$1B([\n        Validate(NUMBER(0))\n    ], PaginationMarker.prototype, \"padding\", void 0);\n    return PaginationMarker;\n}());\nvar Pagination = /** @class */ (function () {\n    function Pagination(chartUpdateCallback, pageUpdateCallback, interactionManager, cursorManager) {\n        var _this = this;\n        this.chartUpdateCallback = chartUpdateCallback;\n        this.pageUpdateCallback = pageUpdateCallback;\n        this.interactionManager = interactionManager;\n        this.cursorManager = cursorManager;\n        this.id = createId$1(this);\n        this.group = new Group({ name: 'pagination' });\n        this.labelNode = new Text();\n        this.marker = new PaginationMarker();\n        this.activeStyle = new PaginationMarkerStyle();\n        this.inactiveStyle = new PaginationMarkerStyle();\n        this.highlightStyle = new PaginationMarkerStyle();\n        this.label = new PaginationLabel();\n        this.totalPages = 0;\n        this.currentPage = 0;\n        this.translationX = 0;\n        this.translationY = 0;\n        this.nextButtonDisabled = false;\n        this.previousButtonDisabled = false;\n        this._visible = true;\n        this._enabled = true;\n        this._orientation = 'vertical';\n        this._nextButton = new Triangle();\n        this._previousButton = new Triangle();\n        var labelNode = this.labelNode;\n        labelNode.textBaseline = 'middle';\n        labelNode.fontSize = 12;\n        labelNode.fontFamily = 'Verdana, sans-serif';\n        labelNode.fill = 'black';\n        labelNode.y = HdpiCanvas.has.textMetrics ? 1 : 0;\n        this.group.append([this.nextButton, this.previousButton, labelNode]);\n        this.interactionManager.addListener('click', function (event) { return _this.onPaginationClick(event); });\n        this.interactionManager.addListener('hover', function (event) { return _this.onPaginationMouseMove(event); });\n        this.marker.parent = this;\n        this.update();\n        this.updateMarkers();\n    }\n    Object.defineProperty(Pagination.prototype, \"visible\", {\n        get: function () {\n            return this._visible;\n        },\n        set: function (value) {\n            this._visible = value;\n            this.updateGroupVisibility();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Pagination.prototype, \"enabled\", {\n        get: function () {\n            return this._enabled;\n        },\n        set: function (value) {\n            this._enabled = value;\n            this.updateGroupVisibility();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Pagination.prototype.updateGroupVisibility = function () {\n        this.group.visible = this.enabled && this.visible;\n    };\n    Object.defineProperty(Pagination.prototype, \"orientation\", {\n        get: function () {\n            return this._orientation;\n        },\n        set: function (value) {\n            this._orientation = value;\n            switch (value) {\n                case 'horizontal': {\n                    this.previousButton.rotation = -Math.PI / 2;\n                    this.nextButton.rotation = Math.PI / 2;\n                    break;\n                }\n                case 'vertical':\n                default: {\n                    this.previousButton.rotation = 0;\n                    this.nextButton.rotation = Math.PI;\n                }\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Pagination.prototype, \"nextButton\", {\n        get: function () {\n            return this._nextButton;\n        },\n        set: function (value) {\n            if (this._nextButton !== value) {\n                this.group.removeChild(this._nextButton);\n                this._nextButton = value;\n                this.group.appendChild(value);\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Pagination.prototype, \"previousButton\", {\n        get: function () {\n            return this._previousButton;\n        },\n        set: function (value) {\n            if (this._previousButton !== value) {\n                this.group.removeChild(this._previousButton);\n                this._previousButton = value;\n                this.group.appendChild(value);\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Pagination.prototype.update = function () {\n        this.updateLabel();\n        this.updatePositions();\n        this.enableOrDisableButtons();\n    };\n    Pagination.prototype.updatePositions = function () {\n        this.group.translationX = this.translationX;\n        this.group.translationY = this.translationY;\n        this.updateLabelPosition();\n        this.updateNextButtonPosition();\n    };\n    Pagination.prototype.updateLabelPosition = function () {\n        var _a = this.marker, markerSize = _a.size, markerPadding = _a.padding;\n        this.nextButton.size = markerSize;\n        this.previousButton.size = markerSize;\n        this.labelNode.x = markerSize / 2 + markerPadding;\n    };\n    Pagination.prototype.updateNextButtonPosition = function () {\n        var labelBBox = this.labelNode.computeBBox();\n        this.nextButton.translationX = labelBBox.x + labelBBox.width + this.marker.size / 2 + this.marker.padding;\n    };\n    Pagination.prototype.updateLabel = function () {\n        var _a = this, currentPage = _a.currentPage, pages = _a.totalPages, labelNode = _a.labelNode, _b = _a.label, color = _b.color, fontStyle = _b.fontStyle, fontWeight = _b.fontWeight, fontSize = _b.fontSize, fontFamily = _b.fontFamily;\n        labelNode.text = currentPage + 1 + \" / \" + pages;\n        labelNode.fill = color;\n        labelNode.fontStyle = fontStyle;\n        labelNode.fontWeight = fontWeight;\n        labelNode.fontSize = fontSize;\n        labelNode.fontFamily = fontFamily;\n    };\n    Pagination.prototype.updateMarkers = function () {\n        var _a = this, nextButton = _a.nextButton, previousButton = _a.previousButton, nextButtonDisabled = _a.nextButtonDisabled, previousButtonDisabled = _a.previousButtonDisabled, activeStyle = _a.activeStyle, inactiveStyle = _a.inactiveStyle, highlightStyle = _a.highlightStyle, highlightActive = _a.highlightActive;\n        var buttonStyle = function (button, disabled) {\n            if (disabled) {\n                return inactiveStyle;\n            }\n            else if (button === highlightActive) {\n                return highlightStyle;\n            }\n            return activeStyle;\n        };\n        this.updateMarker(nextButton, buttonStyle('next', nextButtonDisabled));\n        this.updateMarker(previousButton, buttonStyle('previous', previousButtonDisabled));\n    };\n    Pagination.prototype.updateMarker = function (marker, style) {\n        var _a;\n        var size = this.marker.size;\n        marker.size = size;\n        marker.fill = style.fill;\n        marker.fillOpacity = (_a = style.fillOpacity) !== null && _a !== void 0 ? _a : 1;\n        marker.stroke = style.stroke;\n        marker.strokeWidth = style.strokeWidth;\n        marker.strokeOpacity = style.strokeOpacity;\n    };\n    Pagination.prototype.enableOrDisableButtons = function () {\n        var _a = this, currentPage = _a.currentPage, totalPages = _a.totalPages;\n        var zeroPagesToDisplay = totalPages === 0;\n        var onLastPage = currentPage === totalPages - 1;\n        var onFirstPage = currentPage === 0;\n        this.nextButtonDisabled = onLastPage || zeroPagesToDisplay;\n        this.previousButtonDisabled = onFirstPage || zeroPagesToDisplay;\n    };\n    Pagination.prototype.nextButtonContainsPoint = function (offsetX, offsetY) {\n        return !this.nextButtonDisabled && this.nextButton.containsPoint(offsetX, offsetY);\n    };\n    Pagination.prototype.previousButtonContainsPoint = function (offsetX, offsetY) {\n        return !this.previousButtonDisabled && this.previousButton.containsPoint(offsetX, offsetY);\n    };\n    Pagination.prototype.onPaginationClick = function (event) {\n        var offsetX = event.offsetX, offsetY = event.offsetY;\n        if (this.nextButtonContainsPoint(offsetX, offsetY)) {\n            this.incrementPage();\n            this.onPaginationChanged();\n            event.consume();\n        }\n        else if (this.previousButtonContainsPoint(offsetX, offsetY)) {\n            this.decrementPage();\n            this.onPaginationChanged();\n            event.consume();\n        }\n    };\n    Pagination.prototype.onPaginationMouseMove = function (event) {\n        var offsetX = event.offsetX, offsetY = event.offsetY;\n        if (this.nextButtonContainsPoint(offsetX, offsetY)) {\n            this.cursorManager.updateCursor(this.id, 'pointer');\n            this.highlightActive = 'next';\n        }\n        else if (this.previousButtonContainsPoint(offsetX, offsetY)) {\n            this.cursorManager.updateCursor(this.id, 'pointer');\n            this.highlightActive = 'previous';\n        }\n        else {\n            this.cursorManager.updateCursor(this.id);\n            this.highlightActive = undefined;\n        }\n        this.updateMarkers();\n        this.chartUpdateCallback(ChartUpdateType.SCENE_RENDER);\n    };\n    Pagination.prototype.onPaginationChanged = function () {\n        this.pageUpdateCallback(this.currentPage);\n    };\n    Pagination.prototype.incrementPage = function () {\n        this.currentPage = Math.min(this.currentPage + 1, this.totalPages - 1);\n    };\n    Pagination.prototype.decrementPage = function () {\n        this.currentPage = Math.max(this.currentPage - 1, 0);\n    };\n    Pagination.prototype.onMarkerShapeChange = function () {\n        var Marker = getMarker$1(this.marker.shape || Triangle);\n        this.previousButton = new Marker();\n        this.nextButton = new Marker();\n        this.updatePositions();\n        this.updateMarkers();\n        this.chartUpdateCallback(ChartUpdateType.SCENE_RENDER);\n    };\n    Pagination.prototype.attachPagination = function (node) {\n        node.append(this.group);\n    };\n    Pagination.prototype.computeBBox = function () {\n        return this.group.computeBBox();\n    };\n    Pagination.className = 'Pagination';\n    return Pagination;\n}());\n\nvar __decorate$1A = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __read$k = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$d = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar __values$c = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar ORIENTATIONS = ['horizontal', 'vertical'];\nvar OPT_ORIENTATION = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, function (v) { return ORIENTATIONS.includes(v); }); }, \"expecting an orientation keyword such as 'horizontal' or 'vertical'\");\nvar LegendLabel = /** @class */ (function () {\n    function LegendLabel() {\n        this.maxLength = undefined;\n        this.color = 'black';\n        this.fontStyle = undefined;\n        this.fontWeight = undefined;\n        this.fontSize = 12;\n        this.fontFamily = 'Verdana, sans-serif';\n        this.formatter = undefined;\n    }\n    __decorate$1A([\n        Validate(OPT_NUMBER(0))\n    ], LegendLabel.prototype, \"maxLength\", void 0);\n    __decorate$1A([\n        Validate(COLOR_STRING)\n    ], LegendLabel.prototype, \"color\", void 0);\n    __decorate$1A([\n        Validate(OPT_FONT_STYLE)\n    ], LegendLabel.prototype, \"fontStyle\", void 0);\n    __decorate$1A([\n        Validate(OPT_FONT_WEIGHT)\n    ], LegendLabel.prototype, \"fontWeight\", void 0);\n    __decorate$1A([\n        Validate(NUMBER(0))\n    ], LegendLabel.prototype, \"fontSize\", void 0);\n    __decorate$1A([\n        Validate(STRING)\n    ], LegendLabel.prototype, \"fontFamily\", void 0);\n    __decorate$1A([\n        Validate(OPT_FUNCTION)\n    ], LegendLabel.prototype, \"formatter\", void 0);\n    return LegendLabel;\n}());\nvar LegendMarker = /** @class */ (function () {\n    function LegendMarker() {\n        this.size = 15;\n        /**\n         * If the marker type is set, the legend will always use that marker type for all its items,\n         * regardless of the type that comes from the `data`.\n         */\n        this._shape = undefined;\n        /**\n         * Padding between the marker and the label within each legend item.\n         */\n        this.padding = 8;\n        this.strokeWidth = 1;\n    }\n    Object.defineProperty(LegendMarker.prototype, \"shape\", {\n        get: function () {\n            return this._shape;\n        },\n        set: function (value) {\n            var _a;\n            this._shape = value;\n            (_a = this.parent) === null || _a === void 0 ? void 0 : _a.onMarkerShapeChange();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    __decorate$1A([\n        Validate(NUMBER(0))\n    ], LegendMarker.prototype, \"size\", void 0);\n    __decorate$1A([\n        Validate(NUMBER(0))\n    ], LegendMarker.prototype, \"padding\", void 0);\n    __decorate$1A([\n        Validate(NUMBER(0))\n    ], LegendMarker.prototype, \"strokeWidth\", void 0);\n    return LegendMarker;\n}());\nvar LegendItem = /** @class */ (function () {\n    function LegendItem() {\n        this.marker = new LegendMarker();\n        this.label = new LegendLabel();\n        /** Used to constrain the width of legend items. */\n        this.maxWidth = undefined;\n        /**\n         * The legend uses grid layout for its items, occupying as few columns as possible when positioned to left or right,\n         * and as few rows as possible when positioned to top or bottom. This config specifies the amount of horizontal\n         * padding between legend items.\n         */\n        this.paddingX = 16;\n        /**\n         * The legend uses grid layout for its items, occupying as few columns as possible when positioned to left or right,\n         * and as few rows as possible when positioned to top or bottom. This config specifies the amount of vertical\n         * padding between legend items.\n         */\n        this.paddingY = 8;\n        this.toggleSeriesVisible = true;\n    }\n    __decorate$1A([\n        Validate(OPT_NUMBER(0))\n    ], LegendItem.prototype, \"maxWidth\", void 0);\n    __decorate$1A([\n        Validate(NUMBER(0))\n    ], LegendItem.prototype, \"paddingX\", void 0);\n    __decorate$1A([\n        Validate(NUMBER(0))\n    ], LegendItem.prototype, \"paddingY\", void 0);\n    __decorate$1A([\n        Validate(BOOLEAN)\n    ], LegendItem.prototype, \"toggleSeriesVisible\", void 0);\n    return LegendItem;\n}());\nvar LegendListeners = /** @class */ (function () {\n    function LegendListeners() {\n        this.legendItemClick = undefined;\n        this.legendItemDoubleClick = undefined;\n    }\n    __decorate$1A([\n        Validate(OPT_FUNCTION)\n    ], LegendListeners.prototype, \"legendItemClick\", void 0);\n    return LegendListeners;\n}());\nvar Legend = /** @class */ (function () {\n    function Legend(ctx) {\n        var _a;\n        var _this = this;\n        this.ctx = ctx;\n        this.id = createId$1(this);\n        this.group = new Group({ name: 'legend', layer: true, zIndex: Layers.LEGEND_ZINDEX });\n        this.itemSelection = Selection.select(this.group, MarkerLabel);\n        this.oldSize = [0, 0];\n        this.pages = [];\n        this.maxPageSize = [0, 0];\n        /** Item index to track on re-pagination, so current page updates appropriately. */\n        this.paginationTrackingIndex = 0;\n        this.item = new LegendItem();\n        this.listeners = new LegendListeners();\n        this.truncatedItems = new Set();\n        this._data = [];\n        this._enabled = true;\n        this.position = 'bottom';\n        /** Used to constrain the width of the legend. */\n        this.maxWidth = undefined;\n        /** Used to constrain the height of the legend. */\n        this.maxHeight = undefined;\n        /** Reverse the display order of legend items if `true`. */\n        this.reverseOrder = undefined;\n        this.destroyFns = [];\n        /**\n         * Spacing between the legend and the edge of the chart's element.\n         */\n        this.spacing = 20;\n        this.characterWidths = new Map();\n        this.size = [0, 0];\n        this._visible = true;\n        this.item.marker.parent = this;\n        this.pagination = new Pagination(function (type) { return ctx.updateService.update(type); }, function (page) { return _this.updatePageNumber(page); }, ctx.interactionManager, ctx.cursorManager);\n        this.pagination.attachPagination(this.group);\n        this.item.marker.parent = this;\n        var interactionListeners = [\n            ctx.interactionManager.addListener('click', function (e) { return _this.checkLegendClick(e); }),\n            ctx.interactionManager.addListener('dblclick', function (e) { return _this.checkLegendDoubleClick(e); }),\n            ctx.interactionManager.addListener('hover', function (e) { return _this.handleLegendMouseMove(e); }),\n        ];\n        var layoutListeners = [\n            ctx.layoutService.addListener('start-layout', function (e) { return _this.positionLegend(e.shrinkRect); }),\n        ];\n        (_a = this.destroyFns).push.apply(_a, __spreadArray$d(__spreadArray$d(__spreadArray$d([], __read$k(interactionListeners.map(function (s) { return function () { return ctx.interactionManager.removeListener(s); }; }))), __read$k(layoutListeners.map(function (s) { return function () { return ctx.layoutService.removeListener(s); }; }))), [function () { return _this.detachLegend(); }]));\n    }\n    Object.defineProperty(Legend.prototype, \"data\", {\n        get: function () {\n            return this._data;\n        },\n        set: function (value) {\n            this._data = value;\n            this.updateGroupVisibility();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Legend.prototype, \"enabled\", {\n        get: function () {\n            return this._enabled;\n        },\n        set: function (value) {\n            this._enabled = value;\n            this.updateGroupVisibility();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Legend.prototype.getOrientation = function () {\n        if (this.orientation !== undefined) {\n            return this.orientation;\n        }\n        switch (this.position) {\n            case 'right':\n            case 'left':\n                return 'vertical';\n            case 'bottom':\n            case 'top':\n                return 'horizontal';\n        }\n    };\n    Legend.prototype.destroy = function () {\n        this.destroyFns.forEach(function (f) { return f(); });\n    };\n    Legend.prototype.onMarkerShapeChange = function () {\n        this.itemSelection.clear();\n        this.group.markDirty(this.group, RedrawType.MINOR);\n    };\n    Legend.prototype.getCharacterWidths = function (font) {\n        var characterWidths = this.characterWidths;\n        if (characterWidths.has(font)) {\n            return characterWidths.get(font);\n        }\n        var cw = {\n            '...': HdpiCanvas.getTextSize('...', font).width,\n        };\n        characterWidths.set(font, cw);\n        return cw;\n    };\n    Object.defineProperty(Legend.prototype, \"visible\", {\n        get: function () {\n            return this._visible;\n        },\n        set: function (value) {\n            this._visible = value;\n            this.updateGroupVisibility();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Legend.prototype.updateGroupVisibility = function () {\n        this.group.visible = this.enabled && this.visible && this.data.length > 0;\n    };\n    Legend.prototype.attachLegend = function (node) {\n        node.append(this.group);\n    };\n    Legend.prototype.detachLegend = function () {\n        var _a;\n        (_a = this.group.parent) === null || _a === void 0 ? void 0 : _a.removeChild(this.group);\n    };\n    Legend.prototype.getItemLabel = function (datum) {\n        var callbackCache = this.ctx.callbackCache;\n        var formatter = this.item.label.formatter;\n        if (formatter) {\n            return callbackCache.call(formatter, {\n                itemId: datum.itemId,\n                value: datum.label.text,\n                seriesId: datum.seriesId,\n            });\n        }\n        return datum.label.text;\n    };\n    /**\n     * The method is given the desired size of the legend, which only serves as a hint.\n     * The vertically oriented legend will take as much horizontal space as needed, but will\n     * respect the height constraints, and the horizontal legend will take as much vertical\n     * space as needed in an attempt not to exceed the given width.\n     * After the layout is done, the {@link size} will contain the actual size of the legend.\n     * If the actual size is not the same as the previous actual size, the legend will fire\n     * the 'layoutChange' event to communicate that another layout is needed, and the above\n     * process should be repeated.\n     * @param width\n     * @param height\n     */\n    Legend.prototype.performLayout = function (width, height) {\n        var _this = this;\n        var _a = this.item, paddingX = _a.paddingX, paddingY = _a.paddingY, label = _a.label, maxWidth = _a.maxWidth, _b = _a.marker, markerSize = _b.size, markerPadding = _b.padding, markerShape = _b.shape, _c = _a.label, _d = _c.maxLength, maxLength = _d === void 0 ? Infinity : _d, fontStyle = _c.fontStyle, fontWeight = _c.fontWeight, fontSize = _c.fontSize, fontFamily = _c.fontFamily;\n        var data = __spreadArray$d([], __read$k(this.data));\n        if (this.reverseOrder) {\n            data.reverse();\n        }\n        this.itemSelection.update(data);\n        // Update properties that affect the size of the legend items and measure them.\n        var bboxes = [];\n        var font = getFont(label);\n        var itemMaxWidthPercentage = 0.8;\n        var maxItemWidth = maxWidth !== null && maxWidth !== void 0 ? maxWidth : width * itemMaxWidthPercentage;\n        var paddedMarkerWidth = markerSize + markerPadding + paddingX;\n        this.itemSelection.each(function (markerLabel, datum) {\n            var _a;\n            var Marker = getMarker$1(markerShape !== null && markerShape !== void 0 ? markerShape : datum.marker.shape);\n            if (!(markerLabel.marker && markerLabel.marker instanceof Marker)) {\n                markerLabel.marker = new Marker();\n            }\n            markerLabel.markerSize = markerSize;\n            markerLabel.spacing = markerPadding;\n            markerLabel.fontStyle = fontStyle;\n            markerLabel.fontWeight = fontWeight;\n            markerLabel.fontSize = fontSize;\n            markerLabel.fontFamily = fontFamily;\n            var id = (_a = datum.itemId) !== null && _a !== void 0 ? _a : datum.id;\n            var labelText = _this.getItemLabel(datum);\n            var text = (labelText !== null && labelText !== void 0 ? labelText : '<unknown>').replace(/\\r?\\n/g, ' ');\n            markerLabel.text = _this.truncate(text, maxLength, maxItemWidth, paddedMarkerWidth, font, id);\n            bboxes.push(markerLabel.computeBBox());\n        });\n        width = Math.max(1, width);\n        height = Math.max(1, height);\n        if (!isFinite(width)) {\n            return false;\n        }\n        var size = this.size;\n        var oldSize = this.oldSize;\n        size[0] = width;\n        size[1] = height;\n        if (size[0] !== oldSize[0] || size[1] !== oldSize[1]) {\n            oldSize[0] = size[0];\n            oldSize[1] = size[1];\n        }\n        var _e = this.updatePagination(bboxes, width, height), pages = _e.pages, maxPageHeight = _e.maxPageHeight, maxPageWidth = _e.maxPageWidth;\n        this.pages = pages;\n        this.maxPageSize = [maxPageWidth - paddingX, maxPageHeight - paddingY];\n        var pageNumber = this.pagination.currentPage;\n        var page = this.pages[pageNumber];\n        if (this.pages.length < 1 || !page) {\n            this.visible = false;\n            return;\n        }\n        this.visible = true;\n        // Position legend items\n        this.updatePositions(pageNumber);\n        // Update legend item properties that don't affect the layout.\n        this.update();\n    };\n    Legend.prototype.truncate = function (text, maxCharLength, maxItemWidth, paddedMarkerWidth, font, id) {\n        var e_1, _a;\n        var ellipsis = \"...\";\n        var textChars = text.split('');\n        var addEllipsis = false;\n        if (text.length > maxCharLength) {\n            text = \"\" + text.substring(0, maxCharLength);\n            addEllipsis = true;\n        }\n        var labelWidth = Math.floor(paddedMarkerWidth + HdpiCanvas.getTextSize(text, font).width);\n        if (labelWidth > maxItemWidth) {\n            var truncatedText = '';\n            var characterWidths = this.getCharacterWidths(font);\n            var cumulativeWidth = paddedMarkerWidth + characterWidths[ellipsis];\n            try {\n                for (var textChars_1 = __values$c(textChars), textChars_1_1 = textChars_1.next(); !textChars_1_1.done; textChars_1_1 = textChars_1.next()) {\n                    var char = textChars_1_1.value;\n                    if (!characterWidths[char]) {\n                        characterWidths[char] = HdpiCanvas.getTextSize(char, font).width;\n                    }\n                    cumulativeWidth += characterWidths[char];\n                    if (cumulativeWidth > maxItemWidth) {\n                        break;\n                    }\n                    truncatedText += char;\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (textChars_1_1 && !textChars_1_1.done && (_a = textChars_1.return)) _a.call(textChars_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n            text = truncatedText;\n            addEllipsis = true;\n        }\n        if (addEllipsis) {\n            text += ellipsis;\n            this.truncatedItems.add(id);\n        }\n        else {\n            this.truncatedItems.delete(id);\n        }\n        return text;\n    };\n    Legend.prototype.updatePagination = function (bboxes, width, height) {\n        var orientation = this.getOrientation();\n        var trackingIndex = Math.min(this.paginationTrackingIndex, bboxes.length);\n        this.pagination.orientation = orientation;\n        this.pagination.translationX = 0;\n        this.pagination.translationY = 0;\n        var _a = this.calculatePagination(bboxes, width, height), pages = _a.pages, maxPageHeight = _a.maxPageHeight, maxPageWidth = _a.maxPageWidth, paginationBBox = _a.paginationBBox, paginationVertical = _a.paginationVertical;\n        var newCurrentPage = pages.findIndex(function (p) { return p.endIndex >= trackingIndex; });\n        this.pagination.currentPage = Math.min(Math.max(newCurrentPage, 0), pages.length - 1);\n        var _b = this.item, itemPaddingX = _b.paddingX, itemPaddingY = _b.paddingY;\n        var paginationComponentPadding = 8;\n        var legendItemsWidth = maxPageWidth - itemPaddingX;\n        var legendItemsHeight = maxPageHeight - itemPaddingY;\n        var paginationX = 0;\n        var paginationY = -paginationBBox.y - this.item.marker.size / 2;\n        if (paginationVertical) {\n            paginationY += legendItemsHeight + paginationComponentPadding;\n        }\n        else {\n            paginationX += -paginationBBox.x + legendItemsWidth + paginationComponentPadding;\n            paginationY += (legendItemsHeight - paginationBBox.height) / 2;\n        }\n        this.pagination.translationX = paginationX;\n        this.pagination.translationY = paginationY;\n        this.pagination.update();\n        this.pagination.updateMarkers();\n        return {\n            maxPageHeight: maxPageHeight,\n            maxPageWidth: maxPageWidth,\n            pages: pages,\n        };\n    };\n    Legend.prototype.calculatePagination = function (bboxes, width, height) {\n        var _a, _b, _c;\n        var _d = this.item, itemPaddingX = _d.paddingX, itemPaddingY = _d.paddingY;\n        var orientation = this.getOrientation();\n        var paginationVertical = ['left', 'right'].includes(this.position);\n        var paginationBBox = this.pagination.computeBBox();\n        var lastPassPaginationBBox = new BBox(0, 0, 0, 0);\n        var pages = [];\n        var maxPageWidth = 0;\n        var maxPageHeight = 0;\n        var count = 0;\n        var stableOutput = function (lastPassPaginationBBox) {\n            var width = lastPassPaginationBBox.width, height = lastPassPaginationBBox.height;\n            return width === paginationBBox.width && height === paginationBBox.height;\n        };\n        var forceResult = this.maxWidth !== undefined || this.maxHeight !== undefined;\n        do {\n            if (count++ > 10) {\n                Logger.warn('unable to find stable legend layout.');\n                break;\n            }\n            paginationBBox = lastPassPaginationBBox;\n            var maxWidth = width - (paginationVertical ? 0 : paginationBBox.width);\n            var maxHeight = height - (paginationVertical ? paginationBBox.height : 0);\n            var layout = gridLayout({\n                orientation: orientation,\n                bboxes: bboxes,\n                maxHeight: maxHeight,\n                maxWidth: maxWidth,\n                itemPaddingY: itemPaddingY,\n                itemPaddingX: itemPaddingX,\n                forceResult: forceResult,\n            });\n            pages = (_a = layout === null || layout === void 0 ? void 0 : layout.pages) !== null && _a !== void 0 ? _a : [];\n            maxPageWidth = (_b = layout === null || layout === void 0 ? void 0 : layout.maxPageWidth) !== null && _b !== void 0 ? _b : 0;\n            maxPageHeight = (_c = layout === null || layout === void 0 ? void 0 : layout.maxPageHeight) !== null && _c !== void 0 ? _c : 0;\n            var totalPages = pages.length;\n            this.pagination.visible = totalPages > 1;\n            this.pagination.totalPages = totalPages;\n            this.pagination.update();\n            lastPassPaginationBBox = this.pagination.computeBBox();\n            if (!this.pagination.visible) {\n                break;\n            }\n        } while (!stableOutput(lastPassPaginationBBox));\n        return { maxPageWidth: maxPageWidth, maxPageHeight: maxPageHeight, pages: pages, paginationBBox: paginationBBox, paginationVertical: paginationVertical };\n    };\n    Legend.prototype.updatePositions = function (pageNumber) {\n        if (pageNumber === void 0) { pageNumber = 0; }\n        var _a = this, paddingY = _a.item.paddingY, itemSelection = _a.itemSelection, pages = _a.pages;\n        if (pages.length < 1 || !pages[pageNumber]) {\n            return;\n        }\n        var _b = pages[pageNumber], columns = _b.columns, visibleStart = _b.startIndex, visibleEnd = _b.endIndex;\n        // Position legend items using the layout computed above.\n        var x = 0;\n        var y = 0;\n        var columnCount = columns.length;\n        var rowCount = columns[0].indices.length;\n        var horizontal = this.getOrientation() === 'horizontal';\n        var itemHeight = columns[0].bboxes[0].height + paddingY;\n        var rowSumColumnWidths = [];\n        itemSelection.each(function (markerLabel, _, i) {\n            var _a, _b;\n            if (i < visibleStart || i > visibleEnd) {\n                markerLabel.visible = false;\n                return;\n            }\n            var pageIndex = i - visibleStart;\n            var columnIndex = 0;\n            var rowIndex = 0;\n            if (horizontal) {\n                columnIndex = pageIndex % columnCount;\n                rowIndex = Math.floor(pageIndex / columnCount);\n            }\n            else {\n                columnIndex = Math.floor(pageIndex / rowCount);\n                rowIndex = pageIndex % rowCount;\n            }\n            markerLabel.visible = true;\n            var column = columns[columnIndex];\n            if (!column) {\n                return;\n            }\n            y = itemHeight * rowIndex;\n            x = (_a = rowSumColumnWidths[rowIndex]) !== null && _a !== void 0 ? _a : 0;\n            rowSumColumnWidths[rowIndex] = ((_b = rowSumColumnWidths[rowIndex]) !== null && _b !== void 0 ? _b : 0) + column.columnWidth;\n            // Round off for pixel grid alignment to work properly.\n            markerLabel.translationX = Math.floor(x);\n            markerLabel.translationY = Math.floor(y);\n        });\n    };\n    Legend.prototype.updatePageNumber = function (pageNumber) {\n        var pages = this.pages;\n        // Track an item on the page in re-pagination cases (e.g. resize).\n        var _a = pages[pageNumber], startIndex = _a.startIndex, endIndex = _a.endIndex;\n        if (startIndex === 0) {\n            // Stay on first page on pagination update.\n            this.paginationTrackingIndex = 0;\n        }\n        else if (pageNumber === pages.length - 1) {\n            // Stay on last page on pagination update.\n            this.paginationTrackingIndex = endIndex;\n        }\n        else {\n            // Track the middle item on the page).\n            this.paginationTrackingIndex = Math.floor((startIndex + endIndex) / 2);\n        }\n        this.pagination.update();\n        this.pagination.updateMarkers();\n        this.updatePositions(pageNumber);\n        this.ctx.updateService.update(ChartUpdateType.SCENE_RENDER);\n    };\n    Legend.prototype.update = function () {\n        var _a = this.item, strokeWidth = _a.marker.strokeWidth, color = _a.label.color;\n        this.itemSelection.each(function (markerLabel, datum) {\n            var marker = datum.marker;\n            markerLabel.markerFill = marker.fill;\n            markerLabel.markerStroke = marker.stroke;\n            markerLabel.markerStrokeWidth = strokeWidth;\n            markerLabel.markerFillOpacity = marker.fillOpacity;\n            markerLabel.markerStrokeOpacity = marker.strokeOpacity;\n            markerLabel.opacity = datum.enabled ? 1 : 0.5;\n            markerLabel.color = color;\n        });\n    };\n    Legend.prototype.getDatumForPoint = function (x, y) {\n        var e_2, _a;\n        var visibleChildBBoxes = [];\n        var closestLeftTop = { dist: Infinity, datum: undefined };\n        try {\n            for (var _b = __values$c(this.group.children), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var child = _c.value;\n                if (!child.visible)\n                    continue;\n                if (!(child instanceof MarkerLabel))\n                    continue;\n                var childBBox = child.computeBBox();\n                childBBox.grow(this.item.paddingX / 2, 'horizontal');\n                childBBox.grow(this.item.paddingY / 2, 'vertical');\n                if (childBBox.containsPoint(x, y)) {\n                    return child.datum;\n                }\n                var distX = x - childBBox.x - this.item.paddingX / 2;\n                var distY = y - childBBox.y - this.item.paddingY / 2;\n                var dist = Math.pow(distX, 2) + Math.pow(distY, 2);\n                var toTheLeftTop = distX >= 0 && distY >= 0;\n                if (toTheLeftTop && dist < closestLeftTop.dist) {\n                    closestLeftTop.dist = dist;\n                    closestLeftTop.datum = child.datum;\n                }\n                visibleChildBBoxes.push(childBBox);\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        var pageBBox = BBox.merge(visibleChildBBoxes);\n        if (!pageBBox.containsPoint(x, y)) {\n            // We're not in-between legend items.\n            return undefined;\n        }\n        // Fallback to returning closest match to the left/up.\n        return closestLeftTop.datum;\n    };\n    Legend.prototype.computeBBox = function () {\n        return this.group.computeBBox();\n    };\n    Legend.prototype.computePagedBBox = function () {\n        var actualBBox = this.group.computeBBox();\n        if (this.pages.length <= 1) {\n            return actualBBox;\n        }\n        var _a = __read$k(this.maxPageSize, 2), maxPageWidth = _a[0], maxPageHeight = _a[1];\n        actualBBox.height = Math.max(maxPageHeight, actualBBox.height);\n        actualBBox.width = Math.max(maxPageWidth, actualBBox.width);\n        return actualBBox;\n    };\n    Legend.prototype.checkLegendClick = function (event) {\n        var _a = this, legendItemClick = _a.listeners.legendItemClick, _b = _a.ctx, dataService = _b.dataService, highlightManager = _b.highlightManager, toggleSeriesVisible = _a.item.toggleSeriesVisible;\n        var offsetX = event.offsetX, offsetY = event.offsetY;\n        var legendBBox = this.computeBBox();\n        var pointerInsideLegend = this.group.visible && legendBBox.containsPoint(offsetX, offsetY);\n        var datum = this.getDatumForPoint(offsetX, offsetY);\n        if (!pointerInsideLegend || !datum) {\n            return;\n        }\n        var id = datum.id, itemId = datum.itemId, enabled = datum.enabled;\n        var chartSeries = dataService.getSeries();\n        var series = chartSeries.find(function (s) { return s.id === id; });\n        if (!series) {\n            return;\n        }\n        event.consume();\n        var newEnabled = enabled;\n        if (toggleSeriesVisible) {\n            newEnabled = !enabled;\n            this.ctx.chartEventManager.legendItemClick(series, itemId, newEnabled);\n        }\n        if (!newEnabled) {\n            highlightManager.updateHighlight(this.id);\n        }\n        else {\n            highlightManager.updateHighlight(this.id, {\n                series: series,\n                itemId: itemId,\n                datum: undefined,\n            });\n        }\n        this.ctx.updateService.update(ChartUpdateType.PROCESS_DATA, { forceNodeDataRefresh: true });\n        legendItemClick === null || legendItemClick === void 0 ? void 0 : legendItemClick({ type: 'click', enabled: newEnabled, itemId: itemId, seriesId: series.id });\n    };\n    Legend.prototype.checkLegendDoubleClick = function (event) {\n        var _a;\n        var _b = this, legendItemDoubleClick = _b.listeners.legendItemDoubleClick, dataService = _b.ctx.dataService, toggleSeriesVisible = _b.item.toggleSeriesVisible;\n        var offsetX = event.offsetX, offsetY = event.offsetY;\n        // Integrated charts do not handle double click behaviour correctly due to multiple instances of the\n        // chart being created. See https://ag-grid.atlassian.net/browse/RTI-1381\n        if (this.ctx.mode === 'integrated') {\n            return;\n        }\n        var legendBBox = this.computeBBox();\n        var pointerInsideLegend = this.group.visible && legendBBox.containsPoint(offsetX, offsetY);\n        var datum = this.getDatumForPoint(offsetX, offsetY);\n        if (!pointerInsideLegend || !datum) {\n            return;\n        }\n        var id = datum.id, itemId = datum.itemId, seriesId = datum.seriesId;\n        var chartSeries = dataService.getSeries();\n        var series = chartSeries.find(function (s) { return s.id === id; });\n        if (!series) {\n            return;\n        }\n        event.consume();\n        if (toggleSeriesVisible) {\n            var legendData = chartSeries.reduce(function (ls, s) { return __spreadArray$d(__spreadArray$d([], __read$k(ls)), __read$k(s.getLegendData().filter(function (d) { return d.legendType === 'category'; }))); }, []);\n            var numVisibleItems_1 = {};\n            legendData.forEach(function (d) {\n                var _a;\n                var _b;\n                (_a = numVisibleItems_1[_b = d.seriesId]) !== null && _a !== void 0 ? _a : (numVisibleItems_1[_b] = 0);\n                if (d.enabled)\n                    numVisibleItems_1[d.seriesId]++;\n            });\n            var clickedItem = legendData.find(function (d) { return d.itemId === itemId && d.seriesId === seriesId; });\n            this.ctx.chartEventManager.legendItemDoubleClick(series, itemId, (_a = clickedItem === null || clickedItem === void 0 ? void 0 : clickedItem.enabled) !== null && _a !== void 0 ? _a : false, numVisibleItems_1);\n        }\n        this.ctx.updateService.update(ChartUpdateType.PROCESS_DATA, { forceNodeDataRefresh: true });\n        legendItemDoubleClick === null || legendItemDoubleClick === void 0 ? void 0 : legendItemDoubleClick({ type: 'dblclick', enabled: true, itemId: itemId, seriesId: series.id });\n    };\n    Legend.prototype.handleLegendMouseMove = function (event) {\n        var _a;\n        var _b = this, enabled = _b.enabled, toggleSeriesVisible = _b.item.toggleSeriesVisible, listeners = _b.listeners;\n        if (!enabled) {\n            return;\n        }\n        var legendBBox = this.computeBBox();\n        var pageX = event.pageX, pageY = event.pageY, offsetX = event.offsetX, offsetY = event.offsetY;\n        var pointerInsideLegend = this.group.visible && legendBBox.containsPoint(offsetX, offsetY);\n        if (!pointerInsideLegend) {\n            this.ctx.cursorManager.updateCursor(this.id);\n            this.ctx.highlightManager.updateHighlight(this.id);\n            this.ctx.tooltipManager.removeTooltip(this.id);\n            return;\n        }\n        // Prevent other handlers from consuming this event if it's generated inside the legend\n        // boundaries.\n        event.consume();\n        var datum = this.getDatumForPoint(offsetX, offsetY);\n        var pointerOverLegendDatum = pointerInsideLegend && datum !== undefined;\n        if (!pointerOverLegendDatum) {\n            this.ctx.cursorManager.updateCursor(this.id);\n            this.ctx.highlightManager.updateHighlight(this.id);\n            return;\n        }\n        var series = datum ? this.ctx.dataService.getSeries().find(function (series) { return series.id === (datum === null || datum === void 0 ? void 0 : datum.id); }) : undefined;\n        if (datum && this.truncatedItems.has((_a = datum.itemId) !== null && _a !== void 0 ? _a : datum.id)) {\n            var labelText = this.getItemLabel(datum);\n            this.ctx.tooltipManager.updateTooltip(this.id, { pageX: pageX, pageY: pageY, offsetX: offsetX, offsetY: offsetY, event: event, showArrow: false }, toTooltipHtml$1({ content: labelText }));\n        }\n        else {\n            this.ctx.tooltipManager.removeTooltip(this.id);\n        }\n        if (toggleSeriesVisible || listeners.legendItemClick != null || listeners.legendItemDoubleClick != null) {\n            this.ctx.cursorManager.updateCursor(this.id, 'pointer');\n        }\n        if ((datum === null || datum === void 0 ? void 0 : datum.enabled) && series) {\n            this.ctx.highlightManager.updateHighlight(this.id, {\n                series: series,\n                itemId: datum === null || datum === void 0 ? void 0 : datum.itemId,\n                datum: undefined,\n            });\n        }\n        else {\n            this.ctx.highlightManager.updateHighlight(this.id);\n        }\n    };\n    Legend.prototype.positionLegend = function (shrinkRect) {\n        var _this = this;\n        var newShrinkRect = shrinkRect.clone();\n        if (!this.enabled || !this.data.length) {\n            return { shrinkRect: newShrinkRect };\n        }\n        var _a = __read$k(this.calculateLegendDimensions(shrinkRect), 2), legendWidth = _a[0], legendHeight = _a[1];\n        this.group.translationX = 0;\n        this.group.translationY = 0;\n        this.performLayout(legendWidth, legendHeight);\n        var legendBBox = this.computePagedBBox();\n        var calculateTranslationPerpendicularDimension = function () {\n            switch (_this.position) {\n                case 'top':\n                    return 0;\n                case 'bottom':\n                    return shrinkRect.height - legendBBox.height;\n                case 'left':\n                    return 0;\n                case 'right':\n                default:\n                    return shrinkRect.width - legendBBox.width;\n            }\n        };\n        if (this.visible) {\n            var translationX = void 0;\n            var translationY = void 0;\n            switch (this.position) {\n                case 'top':\n                case 'bottom':\n                    translationX = (shrinkRect.width - legendBBox.width) / 2;\n                    translationY = calculateTranslationPerpendicularDimension();\n                    newShrinkRect.shrink(legendBBox.height, this.position);\n                    break;\n                case 'left':\n                case 'right':\n                default:\n                    translationX = calculateTranslationPerpendicularDimension();\n                    translationY = (shrinkRect.height - legendBBox.height) / 2;\n                    newShrinkRect.shrink(legendBBox.width, this.position);\n            }\n            // Round off for pixel grid alignment to work properly.\n            this.group.translationX = Math.floor(-legendBBox.x + shrinkRect.x + translationX);\n            this.group.translationY = Math.floor(-legendBBox.y + shrinkRect.y + translationY);\n        }\n        if (this.visible && this.enabled && this.data.length) {\n            var legendPadding = this.spacing;\n            newShrinkRect.shrink(legendPadding, this.position);\n            var legendPositionedBBox = legendBBox.clone();\n            legendPositionedBBox.x += this.group.translationX;\n            legendPositionedBBox.y += this.group.translationY;\n            this.ctx.tooltipManager.updateExclusiveRect(this.id, legendPositionedBBox);\n        }\n        else {\n            this.ctx.tooltipManager.updateExclusiveRect(this.id);\n        }\n        return { shrinkRect: newShrinkRect };\n    };\n    Legend.prototype.calculateLegendDimensions = function (shrinkRect) {\n        var width = shrinkRect.width, height = shrinkRect.height;\n        var aspectRatio = width / height;\n        var maxCoefficient = 0.5;\n        var minHeightCoefficient = 0.2;\n        var minWidthCoefficient = 0.25;\n        var legendWidth = 0;\n        var legendHeight = 0;\n        switch (this.position) {\n            case 'top':\n            case 'bottom':\n                // A horizontal legend should take maximum between 20 to 50 percent of the chart height if height is larger than width\n                // and maximum 20 percent of the chart height if height is smaller than width.\n                var heightCoefficient = aspectRatio < 1\n                    ? Math.min(maxCoefficient, minHeightCoefficient * (1 / aspectRatio))\n                    : minHeightCoefficient;\n                legendWidth = this.maxWidth ? Math.min(this.maxWidth, width) : width;\n                legendHeight = this.maxHeight\n                    ? Math.min(this.maxHeight, height)\n                    : Math.round(height * heightCoefficient);\n                break;\n            case 'left':\n            case 'right':\n            default:\n                // A vertical legend should take maximum between 25 to 50 percent of the chart width if width is larger than height\n                // and maximum 25 percent of the chart width if width is smaller than height.\n                var widthCoefficient = aspectRatio > 1 ? Math.min(maxCoefficient, minWidthCoefficient * aspectRatio) : minWidthCoefficient;\n                legendWidth = this.maxWidth ? Math.min(this.maxWidth, width) : Math.round(width * widthCoefficient);\n                legendHeight = this.maxHeight ? Math.min(this.maxHeight, height) : height;\n        }\n        return [legendWidth, legendHeight];\n    };\n    Legend.className = 'Legend';\n    __decorate$1A([\n        Validate(BOOLEAN)\n    ], Legend.prototype, \"_enabled\", void 0);\n    __decorate$1A([\n        Validate(POSITION)\n    ], Legend.prototype, \"position\", void 0);\n    __decorate$1A([\n        Validate(OPT_NUMBER(0))\n    ], Legend.prototype, \"maxWidth\", void 0);\n    __decorate$1A([\n        Validate(OPT_NUMBER(0))\n    ], Legend.prototype, \"maxHeight\", void 0);\n    __decorate$1A([\n        Validate(OPT_BOOLEAN)\n    ], Legend.prototype, \"reverseOrder\", void 0);\n    __decorate$1A([\n        Validate(OPT_ORIENTATION)\n    ], Legend.prototype, \"orientation\", void 0);\n    __decorate$1A([\n        Validate(NUMBER(0))\n    ], Legend.prototype, \"spacing\", void 0);\n    return Legend;\n}());\n\nvar LEGEND_FACTORIES = {\n    category: Legend,\n};\nfunction registerLegend(type, ctr) {\n    if (LEGEND_FACTORIES[type]) {\n        throw new Error(\"AG Charts - already registered legend type: \" + type);\n    }\n    LEGEND_FACTORIES[type] = ctr;\n}\nfunction getLegend(type, ctx) {\n    if (LEGEND_FACTORIES[type]) {\n        return new LEGEND_FACTORIES[type](ctx);\n    }\n    throw new Error(\"AG Charts - unknown legend type: \" + type);\n}\n\nvar __read$j = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$c = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar CallbackCache = /** @class */ (function () {\n    function CallbackCache() {\n        this.cache = new Map();\n    }\n    CallbackCache.prototype.call = function (f) {\n        var params = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            params[_i - 1] = arguments[_i];\n        }\n        var serialisedParams;\n        var paramCache = this.cache.get(f);\n        var invoke = function () {\n            try {\n                var result = f.apply(void 0, __spreadArray$c([], __read$j(params)));\n                if (paramCache && serialisedParams != null) {\n                    paramCache.set(serialisedParams, result);\n                }\n                return result;\n            }\n            catch (e) {\n                Logger.warnOnce(\"User callback errored, ignoring\", e);\n                return undefined;\n            }\n        };\n        try {\n            serialisedParams = JSON.stringify(params);\n        }\n        catch (e) {\n            // Unable to serialise params!\n            // No caching possible.\n            return invoke();\n        }\n        if (paramCache == null) {\n            paramCache = new Map();\n            this.cache.set(f, paramCache);\n        }\n        if (!paramCache.has(serialisedParams)) {\n            return invoke();\n        }\n        return paramCache.get(serialisedParams);\n    };\n    CallbackCache.prototype.invalidateCache = function () {\n        this.cache = new Map();\n    };\n    return CallbackCache;\n}());\n\nvar __extends$z = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign$h = (undefined && undefined.__assign) || function () {\n    __assign$h = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$h.apply(this, arguments);\n};\nvar __decorate$1z = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter$b = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator$b = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __read$i = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __values$b = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __spreadArray$b = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar Chart = /** @class */ (function (_super) {\n    __extends$z(Chart, _super);\n    function Chart(document, overrideDevicePixelRatio, resources) {\n        if (document === void 0) { document = window.document; }\n        var _a;\n        var _this = _super.call(this) || this;\n        _this.id = createId$1(_this);\n        _this.processedOptions = {};\n        _this.userOptions = {};\n        _this.queuedUserOptions = [];\n        _this.seriesRoot = new Group({ name: _this.id + \"-Series-root\" });\n        _this.extraDebugStats = {};\n        _this._container = undefined;\n        _this.data = [];\n        _this.padding = new Padding$1(20);\n        _this.seriesAreaPadding = new Padding$1(0);\n        _this.title = undefined;\n        _this.subtitle = undefined;\n        _this.footnote = undefined;\n        _this.mode = 'standalone';\n        _this._destroyed = false;\n        _this.modules = {};\n        _this.legendModules = {};\n        _this._pendingFactoryUpdates = [];\n        _this._performUpdateNoRenderCount = 0;\n        _this._performUpdateType = ChartUpdateType.NONE;\n        _this.seriesToUpdate = new Set();\n        _this.performUpdateTrigger = debouncedCallback(function (_a) {\n            var count = _a.count;\n            return __awaiter$b(_this, void 0, void 0, function () {\n                var error_1;\n                return __generator$b(this, function (_b) {\n                    switch (_b.label) {\n                        case 0:\n                            if (this._destroyed)\n                                return [2 /*return*/];\n                            _b.label = 1;\n                        case 1:\n                            _b.trys.push([1, 3, , 4]);\n                            return [4 /*yield*/, this.performUpdate(count)];\n                        case 2:\n                            _b.sent();\n                            return [3 /*break*/, 4];\n                        case 3:\n                            error_1 = _b.sent();\n                            this._lastPerformUpdateError = error_1;\n                            Logger.error('update error', error_1);\n                            return [3 /*break*/, 4];\n                        case 4: return [2 /*return*/];\n                    }\n                });\n            });\n        });\n        _this._axes = [];\n        _this._series = [];\n        _this.applyLegendOptions = undefined;\n        _this.lastInteractionEvent = undefined;\n        _this.pointerScheduler = debouncedAnimationFrame(function () {\n            if (_this.lastInteractionEvent) {\n                _this.handlePointer(_this.lastInteractionEvent);\n            }\n            _this.lastInteractionEvent = undefined;\n        });\n        _this.onSeriesNodeClick = function (event) {\n            var seriesNodeClickEvent = __assign$h(__assign$h({}, event), { type: 'seriesNodeClick' });\n            Object.defineProperty(seriesNodeClickEvent, 'series', {\n                enumerable: false,\n                // Should display the deprecation warning\n                get: function () { return event.series; },\n            });\n            _this.fireEvent(seriesNodeClickEvent);\n        };\n        _this.onSeriesNodeDoubleClick = function (event) {\n            var seriesNodeDoubleClick = __assign$h(__assign$h({}, event), { type: 'seriesNodeDoubleClick' });\n            _this.fireEvent(seriesNodeDoubleClick);\n        };\n        var scene = resources === null || resources === void 0 ? void 0 : resources.scene;\n        var element = (_a = resources === null || resources === void 0 ? void 0 : resources.element) !== null && _a !== void 0 ? _a : document.createElement('div');\n        var container = resources === null || resources === void 0 ? void 0 : resources.container;\n        var root = new Group({ name: 'root' });\n        // Prevent the scene from rendering chart components in an invalid state\n        // (before first layout is performed).\n        root.visible = false;\n        root.append(_this.seriesRoot);\n        _this.axisGroup = new Group({ name: 'Axes', layer: true, zIndex: Layers.AXIS_ZINDEX });\n        root.appendChild(_this.axisGroup);\n        _this.element = element;\n        element.classList.add('ag-chart-wrapper');\n        element.style.position = 'relative';\n        _this.scene = scene !== null && scene !== void 0 ? scene : new Scene({ document: document, overrideDevicePixelRatio: overrideDevicePixelRatio });\n        _this.debug = false;\n        _this.scene.debug.consoleLog = false;\n        _this.scene.root = root;\n        _this.scene.container = element;\n        _this.autoSize = true;\n        _this.chartEventManager = new ChartEventManager();\n        _this.cursorManager = new CursorManager(element);\n        _this.highlightManager = new HighlightManager();\n        _this.interactionManager = new InteractionManager(element);\n        _this.zoomManager = new ZoomManager();\n        _this.dataService = new DataService(function () { return _this.series; });\n        _this.layoutService = new LayoutService();\n        _this.updateService = new UpdateService(function (type, _a) {\n            if (type === void 0) { type = ChartUpdateType.FULL; }\n            var forceNodeDataRefresh = _a.forceNodeDataRefresh;\n            return _this.update(type, { forceNodeDataRefresh: forceNodeDataRefresh });\n        });\n        _this.callbackCache = new CallbackCache();\n        _this.animationManager = new AnimationManager(_this.interactionManager);\n        _this.animationManager.skipAnimations = true;\n        _this.animationManager.play();\n        _this.tooltip = new Tooltip(_this.scene.canvas.element, document, document.body);\n        _this.tooltipManager = new TooltipManager(_this.tooltip, _this.interactionManager);\n        _this.overlays = new ChartOverlays(_this.element);\n        _this.highlight = new ChartHighlight();\n        _this.container = container;\n        SizeMonitor.observe(_this.element, function (size) {\n            var _a;\n            var width = size.width, height = size.height;\n            if (!_this.autoSize) {\n                return;\n            }\n            if (width === 0 && height === 0) {\n                return;\n            }\n            var _b = __read$i((_a = _this._lastAutoSize) !== null && _a !== void 0 ? _a : [], 2), _c = _b[0], autoWidth = _c === void 0 ? 0 : _c, _d = _b[1], authHeight = _d === void 0 ? 0 : _d;\n            if (autoWidth === width && authHeight === height) {\n                return;\n            }\n            _this._lastAutoSize = [width, height];\n            _this.resize();\n        });\n        _this.layoutService.addListener('start-layout', function (e) { return _this.positionPadding(e.shrinkRect); });\n        _this.layoutService.addListener('start-layout', function (e) { return _this.positionCaptions(e.shrinkRect); });\n        // Add interaction listeners last so child components are registered first.\n        _this.interactionManager.addListener('click', function (event) { return _this.onClick(event); });\n        _this.interactionManager.addListener('dblclick', function (event) { return _this.onDoubleClick(event); });\n        _this.interactionManager.addListener('hover', function (event) { return _this.onMouseMove(event); });\n        _this.interactionManager.addListener('leave', function (event) { return _this.onLeave(event); });\n        _this.interactionManager.addListener('page-left', function () { return _this.destroy(); });\n        _this.interactionManager.addListener('wheel', function () { return _this.disablePointer(); });\n        _this.animationManager.addListener('animation-frame', function (_) {\n            _this.update(ChartUpdateType.SCENE_RENDER);\n        });\n        _this.highlightManager.addListener('highlight-change', function (event) { return _this.changeHighlightDatum(event); });\n        _this.zoomManager.addListener('zoom-change', function (_) {\n            return _this.update(ChartUpdateType.PROCESS_DATA, { forceNodeDataRefresh: true });\n        });\n        _this.attachLegend('category');\n        return _this;\n    }\n    Chart.prototype.getOptions = function () {\n        var _a;\n        var queuedUserOptions = this.queuedUserOptions;\n        var lastUpdateOptions = (_a = queuedUserOptions[queuedUserOptions.length - 1]) !== null && _a !== void 0 ? _a : this.userOptions;\n        return jsonMerge([lastUpdateOptions]);\n    };\n    Object.defineProperty(Chart.prototype, \"container\", {\n        get: function () {\n            return this._container;\n        },\n        set: function (value) {\n            if (this._container !== value) {\n                var parentNode = this.element.parentNode;\n                if (parentNode != null) {\n                    parentNode.removeChild(this.element);\n                }\n                if (value && !this.destroyed) {\n                    value.appendChild(this.element);\n                }\n                this._container = value;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Chart.prototype.autoSizeChanged = function (value) {\n        var style = this.element.style;\n        if (value) {\n            style.display = 'block';\n            style.width = '100%';\n            style.height = '100%';\n            if (!this._lastAutoSize) {\n                return;\n            }\n            this.resize();\n        }\n        else {\n            style.display = 'inline-block';\n            style.width = 'auto';\n            style.height = 'auto';\n        }\n    };\n    Chart.prototype.download = function (fileName, fileFormat) {\n        this.scene.download(fileName, fileFormat);\n    };\n    Object.defineProperty(Chart.prototype, \"destroyed\", {\n        get: function () {\n            return this._destroyed;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Chart.prototype.addModule = function (module) {\n        if (this.modules[module.optionsKey] != null) {\n            throw new Error('AG Charts - module already initialised: ' + module.optionsKey);\n        }\n        var moduleInstance = new module.instanceConstructor(this.getModuleContext());\n        this.modules[module.optionsKey] = { instance: moduleInstance };\n        this[module.optionsKey] = moduleInstance;\n    };\n    Chart.prototype.removeModule = function (module) {\n        var _a, _b;\n        (_b = (_a = this.modules[module.optionsKey]) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b.destroy();\n        delete this.modules[module.optionsKey];\n        delete this[module.optionsKey];\n    };\n    Chart.prototype.isModuleEnabled = function (module) {\n        return this.modules[module.optionsKey] != null;\n    };\n    Chart.prototype.getModuleContext = function () {\n        var _a = this, scene = _a.scene, animationManager = _a.animationManager, chartEventManager = _a.chartEventManager, cursorManager = _a.cursorManager, highlightManager = _a.highlightManager, interactionManager = _a.interactionManager, tooltipManager = _a.tooltipManager, zoomManager = _a.zoomManager, dataService = _a.dataService, layoutService = _a.layoutService, updateService = _a.updateService, mode = _a.mode, callbackCache = _a.callbackCache;\n        return {\n            scene: scene,\n            animationManager: animationManager,\n            chartEventManager: chartEventManager,\n            cursorManager: cursorManager,\n            highlightManager: highlightManager,\n            interactionManager: interactionManager,\n            tooltipManager: tooltipManager,\n            zoomManager: zoomManager,\n            dataService: dataService,\n            layoutService: layoutService,\n            updateService: updateService,\n            mode: mode,\n            callbackCache: callbackCache,\n        };\n    };\n    Chart.prototype.destroy = function (opts) {\n        var e_1, _a;\n        var _b;\n        if (this._destroyed) {\n            return;\n        }\n        var keepTransferableResources = opts === null || opts === void 0 ? void 0 : opts.keepTransferableResources;\n        var result = undefined;\n        this._performUpdateType = ChartUpdateType.NONE;\n        this._pendingFactoryUpdates.splice(0);\n        this.tooltipManager.destroy();\n        this.tooltip.destroy();\n        (_b = this.legend) === null || _b === void 0 ? void 0 : _b.destroy();\n        this.overlays.noData.hide();\n        SizeMonitor.unobserve(this.element);\n        try {\n            for (var _c = __values$b(Object.entries(this.modules)), _d = _c.next(); !_d.done; _d = _c.next()) {\n                var _e = __read$i(_d.value, 2), key = _e[0], module = _e[1];\n                module.instance.destroy();\n                delete this.modules[key];\n                delete this[key];\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        this.interactionManager.destroy();\n        if (keepTransferableResources) {\n            this.scene.strip();\n            result = { container: this.container, scene: this.scene, element: this.element };\n        }\n        else {\n            this.scene.destroy();\n            this.container = undefined;\n        }\n        this.series.forEach(function (s) { return s.destroy(); });\n        this.series = [];\n        this.axes.forEach(function (a) { return a.destroy(); });\n        this.axes = [];\n        this.callbackCache.invalidateCache();\n        this._destroyed = true;\n        return result;\n    };\n    Chart.prototype.log = function (opts) {\n        if (this.debug) {\n            Logger.debug(opts);\n        }\n    };\n    Chart.prototype.disablePointer = function (highlightOnly) {\n        if (highlightOnly === void 0) { highlightOnly = false; }\n        if (!highlightOnly) {\n            this.tooltipManager.removeTooltip(this.id);\n        }\n        this.highlightManager.updateHighlight(this.id);\n        if (this.lastInteractionEvent) {\n            this.lastInteractionEvent = undefined;\n        }\n    };\n    Chart.prototype.requestFactoryUpdate = function (cb) {\n        var callbacks = this._pendingFactoryUpdates;\n        var count = callbacks.length;\n        if (count === 0) {\n            callbacks.push(cb);\n            this._processCallbacks().catch(function (e) { return Logger.errorOnce(e); });\n        }\n        else {\n            // Factory callback process already running, the callback will be invoked asynchronously.\n            // Clear the queue after the first callback to prevent unnecessary re-renderings.\n            callbacks.splice(1, count - 1, cb);\n        }\n    };\n    Chart.prototype._processCallbacks = function () {\n        return __awaiter$b(this, void 0, void 0, function () {\n            var callbacks, e_2;\n            return __generator$b(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        callbacks = this._pendingFactoryUpdates;\n                        _a.label = 1;\n                    case 1:\n                        if (!(callbacks.length > 0)) return [3 /*break*/, 7];\n                        if (!this.updatePending) return [3 /*break*/, 3];\n                        return [4 /*yield*/, sleep(1)];\n                    case 2:\n                        _a.sent();\n                        return [3 /*break*/, 1]; // Make sure to check queue has an item before continuing.\n                    case 3:\n                        _a.trys.push([3, 5, , 6]);\n                        return [4 /*yield*/, callbacks[0]()];\n                    case 4:\n                        _a.sent();\n                        this.callbackCache.invalidateCache();\n                        return [3 /*break*/, 6];\n                    case 5:\n                        e_2 = _a.sent();\n                        Logger.error('update error', e_2);\n                        return [3 /*break*/, 6];\n                    case 6:\n                        callbacks.shift();\n                        return [3 /*break*/, 1];\n                    case 7: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    Object.defineProperty(Chart.prototype, \"performUpdateType\", {\n        get: function () {\n            return this._performUpdateType;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Chart.prototype, \"updatePending\", {\n        get: function () {\n            return this._performUpdateType !== ChartUpdateType.NONE || this.lastInteractionEvent != null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Chart.prototype, \"lastPerformUpdateError\", {\n        get: function () {\n            return this._lastPerformUpdateError;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Chart.prototype.awaitUpdateCompletion = function () {\n        return __awaiter$b(this, void 0, void 0, function () {\n            return __generator$b(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.performUpdateTrigger.await()];\n                    case 1:\n                        _a.sent();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    Chart.prototype.update = function (type, opts) {\n        var e_3, _a;\n        if (type === void 0) { type = ChartUpdateType.FULL; }\n        var _b = opts !== null && opts !== void 0 ? opts : {}, _c = _b.forceNodeDataRefresh, forceNodeDataRefresh = _c === void 0 ? false : _c, _d = _b.seriesToUpdate, seriesToUpdate = _d === void 0 ? this.series : _d;\n        if (forceNodeDataRefresh) {\n            this.series.forEach(function (series) { return series.markNodeDataDirty(); });\n        }\n        try {\n            for (var seriesToUpdate_1 = __values$b(seriesToUpdate), seriesToUpdate_1_1 = seriesToUpdate_1.next(); !seriesToUpdate_1_1.done; seriesToUpdate_1_1 = seriesToUpdate_1.next()) {\n                var series = seriesToUpdate_1_1.value;\n                this.seriesToUpdate.add(series);\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (seriesToUpdate_1_1 && !seriesToUpdate_1_1.done && (_a = seriesToUpdate_1.return)) _a.call(seriesToUpdate_1);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n        if (type < this._performUpdateType) {\n            this._performUpdateType = type;\n            this.performUpdateTrigger.schedule();\n        }\n    };\n    Chart.prototype.performUpdate = function (count) {\n        var _a;\n        return __awaiter$b(this, void 0, void 0, function () {\n            var _b, performUpdateType, extraDebugStats, splits, _c, count_1, seriesRect_1, seriesUpdates, tooltipMeta, end;\n            return __generator$b(this, function (_d) {\n                switch (_d.label) {\n                    case 0:\n                        _b = this, performUpdateType = _b._performUpdateType, extraDebugStats = _b.extraDebugStats;\n                        splits = [performance.now()];\n                        _c = performUpdateType;\n                        switch (_c) {\n                            case ChartUpdateType.FULL: return [3 /*break*/, 1];\n                            case ChartUpdateType.PROCESS_DATA: return [3 /*break*/, 1];\n                            case ChartUpdateType.PERFORM_LAYOUT: return [3 /*break*/, 3];\n                            case ChartUpdateType.SERIES_UPDATE: return [3 /*break*/, 5];\n                            case ChartUpdateType.TOOLTIP_RECALCULATION: return [3 /*break*/, 7];\n                            case ChartUpdateType.SCENE_RENDER: return [3 /*break*/, 8];\n                            case ChartUpdateType.NONE: return [3 /*break*/, 10];\n                        }\n                        return [3 /*break*/, 11];\n                    case 1: return [4 /*yield*/, this.processData()];\n                    case 2:\n                        _d.sent();\n                        this.disablePointer(true);\n                        splits.push(performance.now());\n                        _d.label = 3;\n                    case 3:\n                        if (this.autoSize && !this._lastAutoSize) {\n                            count_1 = this._performUpdateNoRenderCount++;\n                            if (count_1 < 5) {\n                                // Reschedule if canvas size hasn't been set yet to avoid a race.\n                                this._performUpdateType = ChartUpdateType.PERFORM_LAYOUT;\n                                this.performUpdateTrigger.schedule();\n                                return [3 /*break*/, 11];\n                            }\n                            // After several failed passes, continue and accept there maybe a redundant\n                            // render. Sometimes this case happens when we already have the correct\n                            // width/height, and we end up never rendering the chart in that scenario.\n                        }\n                        this._performUpdateNoRenderCount = 0;\n                        return [4 /*yield*/, this.performLayout()];\n                    case 4:\n                        _d.sent();\n                        this.handleOverlays();\n                        splits.push(performance.now());\n                        _d.label = 5;\n                    case 5:\n                        seriesRect_1 = this.seriesRect;\n                        seriesUpdates = __spreadArray$b([], __read$i(this.seriesToUpdate)).map(function (series) { return series.update({ seriesRect: seriesRect_1 }); });\n                        this.seriesToUpdate.clear();\n                        return [4 /*yield*/, Promise.all(seriesUpdates)];\n                    case 6:\n                        _d.sent();\n                        splits.push(performance.now());\n                        _d.label = 7;\n                    case 7:\n                        tooltipMeta = this.tooltipManager.getTooltipMeta(this.id);\n                        if (performUpdateType < ChartUpdateType.SERIES_UPDATE && ((_a = tooltipMeta === null || tooltipMeta === void 0 ? void 0 : tooltipMeta.event) === null || _a === void 0 ? void 0 : _a.type) === 'hover') {\n                            this.handlePointer(tooltipMeta.event);\n                        }\n                        _d.label = 8;\n                    case 8: return [4 /*yield*/, this.scene.render({ debugSplitTimes: splits, extraDebugStats: extraDebugStats })];\n                    case 9:\n                        _d.sent();\n                        this.extraDebugStats = {};\n                        _d.label = 10;\n                    case 10:\n                        // Do nothing.\n                        this._performUpdateType = ChartUpdateType.NONE;\n                        _d.label = 11;\n                    case 11:\n                        end = performance.now();\n                        this.log({\n                            chart: this,\n                            durationMs: Math.round((end - splits[0]) * 100) / 100,\n                            count: count,\n                            performUpdateType: ChartUpdateType[performUpdateType],\n                        });\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    Object.defineProperty(Chart.prototype, \"axes\", {\n        get: function () {\n            return this._axes;\n        },\n        set: function (values) {\n            var _this = this;\n            var removedAxes = new Set();\n            this._axes.forEach(function (axis) {\n                axis.detachAxis(_this.axisGroup);\n                removedAxes.add(axis);\n            });\n            // make linked axes go after the regular ones (simulates stable sort by `linkedTo` property)\n            this._axes = values.filter(function (a) { return !a.linkedTo; }).concat(values.filter(function (a) { return a.linkedTo; }));\n            this._axes.forEach(function (axis) {\n                axis.attachAxis(_this.axisGroup);\n                removedAxes.delete(axis);\n            });\n            removedAxes.forEach(function (axis) { return axis.destroy(); });\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Chart.prototype, \"series\", {\n        get: function () {\n            return this._series;\n        },\n        set: function (values) {\n            var _this = this;\n            this.removeAllSeries();\n            values.forEach(function (series) { return _this.addSeries(series); });\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Chart.prototype.addSeries = function (series, before) {\n        var _a = this, allSeries = _a.series, seriesRoot = _a.seriesRoot;\n        var canAdd = allSeries.indexOf(series) < 0;\n        if (canAdd) {\n            var beforeIndex = before ? allSeries.indexOf(before) : -1;\n            if (beforeIndex >= 0) {\n                allSeries.splice(beforeIndex, 0, series);\n                seriesRoot.insertBefore(series.rootGroup, before.rootGroup);\n            }\n            else {\n                allSeries.push(series);\n                seriesRoot.append(series.rootGroup);\n            }\n            this.initSeries(series);\n            return true;\n        }\n        return false;\n    };\n    Chart.prototype.initSeries = function (series) {\n        series.chart = this;\n        series.highlightManager = this.highlightManager;\n        series.animationManager = this.animationManager;\n        if (!series.data) {\n            series.data = this.data;\n        }\n        this.addSeriesListeners(series);\n        series.chartEventManager = this.chartEventManager;\n        series.addChartEventListeners();\n    };\n    Chart.prototype.freeSeries = function (series) {\n        series.chart = undefined;\n        series.removeEventListener('nodeClick', this.onSeriesNodeClick);\n        series.removeEventListener('nodeDoubleClick', this.onSeriesNodeDoubleClick);\n    };\n    Chart.prototype.removeAllSeries = function () {\n        var _this = this;\n        this.series.forEach(function (series) {\n            _this.freeSeries(series);\n            _this.seriesRoot.removeChild(series.rootGroup);\n        });\n        this._series = []; // using `_series` instead of `series` to prevent infinite recursion\n    };\n    Chart.prototype.addSeriesListeners = function (series) {\n        if (this.hasEventListener('seriesNodeClick')) {\n            series.addEventListener('nodeClick', this.onSeriesNodeClick);\n        }\n        if (this.hasEventListener('seriesNodeDoubleClick')) {\n            series.addEventListener('nodeDoubleClick', this.onSeriesNodeDoubleClick);\n        }\n    };\n    Chart.prototype.updateAllSeriesListeners = function () {\n        var _this = this;\n        this.series.forEach(function (series) {\n            series.removeEventListener('nodeClick', _this.onSeriesNodeClick);\n            series.removeEventListener('nodeDoubleClick', _this.onSeriesNodeDoubleClick);\n            _this.addSeriesListeners(series);\n        });\n    };\n    Chart.prototype.assignSeriesToAxes = function () {\n        var _this = this;\n        this.axes.forEach(function (axis) {\n            axis.boundSeries = _this.series.filter(function (s) {\n                var seriesAxis = axis.direction === ChartAxisDirection.X ? s.xAxis : s.yAxis;\n                return seriesAxis === axis;\n            });\n        });\n    };\n    Chart.prototype.assignAxesToSeries = function (force) {\n        var _this = this;\n        if (force === void 0) { force = false; }\n        // This method has to run before `assignSeriesToAxes`.\n        var directionToAxesMap = {};\n        this.axes.forEach(function (axis) {\n            var _a;\n            var direction = axis.direction;\n            var directionAxes = ((_a = directionToAxesMap[direction]) !== null && _a !== void 0 ? _a : (directionToAxesMap[direction] = []));\n            directionAxes.push(axis);\n        });\n        this.series.forEach(function (series) {\n            series.directions.forEach(function (direction) {\n                var currentAxis = direction === ChartAxisDirection.X ? series.xAxis : series.yAxis;\n                if (currentAxis && !force) {\n                    return;\n                }\n                var directionAxes = directionToAxesMap[direction];\n                if (!directionAxes) {\n                    Logger.warn(\"no available axis for direction [\" + direction + \"]; check series and axes configuration.\");\n                    return;\n                }\n                var seriesKeys = series.getKeys(direction);\n                var newAxis = _this.findMatchingAxis(directionAxes, series.getKeys(direction));\n                if (!newAxis) {\n                    Logger.warn(\"no matching axis for direction [\" + direction + \"] and keys [\" + seriesKeys + \"]; check series and axes configuration.\");\n                    return;\n                }\n                if (direction === ChartAxisDirection.X) {\n                    series.xAxis = newAxis;\n                }\n                else {\n                    series.yAxis = newAxis;\n                }\n            });\n        });\n    };\n    Chart.prototype.findMatchingAxis = function (directionAxes, directionKeys) {\n        var e_4, _a, e_5, _b;\n        try {\n            for (var directionAxes_1 = __values$b(directionAxes), directionAxes_1_1 = directionAxes_1.next(); !directionAxes_1_1.done; directionAxes_1_1 = directionAxes_1.next()) {\n                var axis = directionAxes_1_1.value;\n                var axisKeys = axis.keys;\n                if (!axisKeys.length) {\n                    return axis;\n                }\n                if (!directionKeys) {\n                    continue;\n                }\n                try {\n                    for (var directionKeys_1 = (e_5 = void 0, __values$b(directionKeys)), directionKeys_1_1 = directionKeys_1.next(); !directionKeys_1_1.done; directionKeys_1_1 = directionKeys_1.next()) {\n                        var directionKey = directionKeys_1_1.value;\n                        if (axisKeys.indexOf(directionKey) >= 0) {\n                            return axis;\n                        }\n                    }\n                }\n                catch (e_5_1) { e_5 = { error: e_5_1 }; }\n                finally {\n                    try {\n                        if (directionKeys_1_1 && !directionKeys_1_1.done && (_b = directionKeys_1.return)) _b.call(directionKeys_1);\n                    }\n                    finally { if (e_5) throw e_5.error; }\n                }\n            }\n        }\n        catch (e_4_1) { e_4 = { error: e_4_1 }; }\n        finally {\n            try {\n                if (directionAxes_1_1 && !directionAxes_1_1.done && (_a = directionAxes_1.return)) _a.call(directionAxes_1);\n            }\n            finally { if (e_4) throw e_4.error; }\n        }\n    };\n    Chart.prototype.resize = function (width, height) {\n        var _a, _b, _c, _d;\n        width !== null && width !== void 0 ? width : (width = (_a = this.width) !== null && _a !== void 0 ? _a : (this.autoSize ? (_b = this._lastAutoSize) === null || _b === void 0 ? void 0 : _b[0] : this.scene.canvas.width));\n        height !== null && height !== void 0 ? height : (height = (_c = this.height) !== null && _c !== void 0 ? _c : (this.autoSize ? (_d = this._lastAutoSize) === null || _d === void 0 ? void 0 : _d[1] : this.scene.canvas.height));\n        if (!width || !height || !Number.isFinite(width) || !Number.isFinite(height))\n            return;\n        if (this.scene.resize(width, height)) {\n            this.disablePointer();\n            this.update(ChartUpdateType.PERFORM_LAYOUT, { forceNodeDataRefresh: true });\n        }\n    };\n    Chart.prototype.processData = function () {\n        return __awaiter$b(this, void 0, void 0, function () {\n            return __generator$b(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (this.axes.length > 0 || this.series.some(function (s) { return s instanceof CartesianSeries; })) {\n                            this.assignAxesToSeries(true);\n                            this.assignSeriesToAxes();\n                        }\n                        return [4 /*yield*/, Promise.all(this.series.map(function (s) { return s.processData(); }))];\n                    case 1:\n                        _a.sent();\n                        return [4 /*yield*/, this.updateLegend()];\n                    case 2:\n                        _a.sent();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    Chart.prototype.placeLabels = function () {\n        var e_6, _a;\n        var visibleSeries = [];\n        var data = [];\n        try {\n            for (var _b = __values$b(this.series), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var series = _c.value;\n                if (!series.visible) {\n                    continue;\n                }\n                var labelData = series.getLabelData();\n                if (!(labelData && isPointLabelDatum(labelData[0]))) {\n                    continue;\n                }\n                data.push(labelData);\n                visibleSeries.push(series);\n            }\n        }\n        catch (e_6_1) { e_6 = { error: e_6_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_6) throw e_6.error; }\n        }\n        var seriesRect = this.seriesRect;\n        var labels = seriesRect && data.length > 0\n            ? placeLabels(data, { x: 0, y: 0, width: seriesRect.width, height: seriesRect.height })\n            : [];\n        return new Map(labels.map(function (l, i) { return [visibleSeries[i], l]; }));\n    };\n    Chart.prototype.attachLegend = function (legendType) {\n        var _a;\n        if (this.legendType === legendType) {\n            return;\n        }\n        (_a = this.legend) === null || _a === void 0 ? void 0 : _a.destroy();\n        this.legend = undefined;\n        var ctx = this.getModuleContext();\n        this.legend = getLegend(legendType, ctx);\n        this.legend.attachLegend(this.scene.root);\n        this.legendType = legendType;\n    };\n    Chart.prototype.setLegendInit = function (initLegend) {\n        this.applyLegendOptions = initLegend;\n    };\n    Chart.prototype.updateLegend = function () {\n        var _a;\n        return __awaiter$b(this, void 0, void 0, function () {\n            var legendData, legendType;\n            return __generator$b(this, function (_b) {\n                legendData = [];\n                this.series\n                    .filter(function (s) { return s.showInLegend; })\n                    .forEach(function (series) {\n                    var data = series.getLegendData();\n                    legendData.push.apply(legendData, __spreadArray$b([], __read$i(data)));\n                });\n                legendType = legendData.length > 0 ? legendData[0].legendType : 'category';\n                this.attachLegend(legendType);\n                (_a = this.applyLegendOptions) === null || _a === void 0 ? void 0 : _a.call(this, this.legend);\n                if (legendType === 'category') {\n                    this.validateLegendData(legendData);\n                }\n                this.legend.data = legendData;\n                return [2 /*return*/];\n            });\n        });\n    };\n    Chart.prototype.validateLegendData = function (legendData) {\n        var _this = this;\n        // Validate each series that shares a legend item label uses the same fill colour\n        var labelMarkerFills = {};\n        legendData.forEach(function (d) {\n            var _a;\n            var _b, _c, _d;\n            var _e, _f;\n            var seriesType = (_b = _this.series.find(function (s) { return s.id === d.seriesId; })) === null || _b === void 0 ? void 0 : _b.type;\n            if (!seriesType)\n                return;\n            var dc = d;\n            (_c = labelMarkerFills[seriesType]) !== null && _c !== void 0 ? _c : (labelMarkerFills[seriesType] = (_a = {}, _a[dc.label.text] = new Set(), _a));\n            (_d = (_e = labelMarkerFills[seriesType])[_f = dc.label.text]) !== null && _d !== void 0 ? _d : (_e[_f] = new Set());\n            if (dc.marker.fill != null) {\n                labelMarkerFills[seriesType][dc.label.text].add(dc.marker.fill);\n            }\n        });\n        Object.keys(labelMarkerFills).forEach(function (seriesType) {\n            Object.keys(labelMarkerFills[seriesType]).forEach(function (name) {\n                var fills = labelMarkerFills[seriesType][name];\n                if (fills.size > 1) {\n                    Logger.warnOnce(\"legend item '\" + name + \"' has multiple fill colors, this may cause unexpected behaviour.\");\n                }\n            });\n        });\n    };\n    Chart.prototype.performLayout = function () {\n        return __awaiter$b(this, void 0, void 0, function () {\n            var _a, width, height, shrinkRect;\n            return __generator$b(this, function (_b) {\n                this.scene.root.visible = true;\n                _a = this.scene, width = _a.width, height = _a.height;\n                shrinkRect = new BBox(0, 0, width, height);\n                (shrinkRect = this.layoutService.dispatchPerformLayout('start-layout', { shrinkRect: shrinkRect }).shrinkRect);\n                (shrinkRect = this.layoutService.dispatchPerformLayout('before-series', { shrinkRect: shrinkRect }).shrinkRect);\n                return [2 /*return*/, shrinkRect];\n            });\n        });\n    };\n    Chart.prototype.positionPadding = function (shrinkRect) {\n        var padding = this.padding;\n        shrinkRect.shrink(padding.left, 'left');\n        shrinkRect.shrink(padding.top, 'top');\n        shrinkRect.shrink(padding.right, 'right');\n        shrinkRect.shrink(padding.bottom, 'bottom');\n        return { shrinkRect: shrinkRect };\n    };\n    Chart.prototype.positionCaptions = function (shrinkRect) {\n        var _a;\n        var _b = this, title = _b.title, subtitle = _b.subtitle, footnote = _b.footnote;\n        var newShrinkRect = shrinkRect.clone();\n        var updateCaption = function (caption) {\n            var _a;\n            var defaultCaptionHeight = shrinkRect.height / 10;\n            var captionLineHeight = (_a = caption.lineHeight) !== null && _a !== void 0 ? _a : caption.fontSize * Text.defaultLineHeightRatio;\n            var maxWidth = shrinkRect.width;\n            var maxHeight = Math.max(captionLineHeight, defaultCaptionHeight);\n            caption.computeTextWrap(maxWidth, maxHeight);\n        };\n        var positionTopAndShrinkBBox = function (caption) {\n            var _a;\n            var baseY = newShrinkRect.y;\n            caption.node.x = newShrinkRect.x + newShrinkRect.width / 2;\n            caption.node.y = baseY;\n            caption.node.textBaseline = 'top';\n            updateCaption(caption);\n            var bbox = caption.node.computeBBox();\n            // As the bbox (x,y) ends up at a different location than specified above, we need to\n            // take it into consideration when calculating how much space needs to be reserved to\n            // accommodate the caption.\n            var bboxHeight = Math.ceil(bbox.y - baseY + bbox.height + ((_a = caption.spacing) !== null && _a !== void 0 ? _a : 0));\n            newShrinkRect.shrink(bboxHeight, 'top');\n        };\n        var positionBottomAndShrinkBBox = function (caption) {\n            var _a;\n            var baseY = newShrinkRect.y + newShrinkRect.height;\n            caption.node.x = newShrinkRect.x + newShrinkRect.width / 2;\n            caption.node.y = baseY;\n            caption.node.textBaseline = 'bottom';\n            updateCaption(caption);\n            var bbox = caption.node.computeBBox();\n            var bboxHeight = Math.ceil(baseY - bbox.y + ((_a = caption.spacing) !== null && _a !== void 0 ? _a : 0));\n            newShrinkRect.shrink(bboxHeight, 'bottom');\n        };\n        if (title) {\n            title.node.visible = title.enabled;\n            if (title.node.visible) {\n                positionTopAndShrinkBBox(title);\n            }\n        }\n        if (subtitle) {\n            subtitle.node.visible = (_a = ((title === null || title === void 0 ? void 0 : title.enabled) && subtitle.enabled)) !== null && _a !== void 0 ? _a : false;\n            if (subtitle.node.visible) {\n                positionTopAndShrinkBBox(subtitle);\n            }\n        }\n        if (footnote) {\n            footnote.node.visible = footnote.enabled;\n            if (footnote.node.visible) {\n                positionBottomAndShrinkBBox(footnote);\n            }\n        }\n        return { shrinkRect: newShrinkRect };\n    };\n    Chart.prototype.getSeriesRect = function () {\n        return this.seriesRect;\n    };\n    // x/y are local canvas coordinates in CSS pixels, not actual pixels\n    Chart.prototype.pickSeriesNode = function (point, exactMatchOnly, maxDistance) {\n        var e_7, _a;\n        var _b, _c;\n        var start = performance.now();\n        // Disable 'nearest match' options if looking for exact matches only\n        var pickModes = exactMatchOnly ? [SeriesNodePickMode.EXACT_SHAPE_MATCH] : undefined;\n        // Iterate through series in reverse, as later declared series appears on top of earlier\n        // declared series.\n        var reverseSeries = __spreadArray$b([], __read$i(this.series)).reverse();\n        var result = undefined;\n        try {\n            for (var reverseSeries_1 = __values$b(reverseSeries), reverseSeries_1_1 = reverseSeries_1.next(); !reverseSeries_1_1.done; reverseSeries_1_1 = reverseSeries_1.next()) {\n                var series = reverseSeries_1_1.value;\n                if (!series.visible || !series.rootGroup.visible) {\n                    continue;\n                }\n                var _d = (_b = series.pickNode(point, pickModes)) !== null && _b !== void 0 ? _b : {}, match = _d.match, distance = _d.distance;\n                if (!match || distance == null) {\n                    continue;\n                }\n                if ((!result || result.distance > distance) && distance <= (maxDistance !== null && maxDistance !== void 0 ? maxDistance : Infinity)) {\n                    result = { series: series, distance: distance, datum: match };\n                }\n                if (distance === 0) {\n                    break;\n                }\n            }\n        }\n        catch (e_7_1) { e_7 = { error: e_7_1 }; }\n        finally {\n            try {\n                if (reverseSeries_1_1 && !reverseSeries_1_1.done && (_a = reverseSeries_1.return)) _a.call(reverseSeries_1);\n            }\n            finally { if (e_7) throw e_7.error; }\n        }\n        this.extraDebugStats['pickSeriesNode'] = Math.round(((_c = this.extraDebugStats['pickSeriesNode']) !== null && _c !== void 0 ? _c : 0) + (performance.now() - start));\n        return result;\n    };\n    Chart.prototype.onMouseMove = function (event) {\n        this.lastInteractionEvent = event;\n        this.pointerScheduler.schedule();\n        this.extraDebugStats['mouseX'] = event.offsetX;\n        this.extraDebugStats['mouseY'] = event.offsetY;\n        this.update(ChartUpdateType.SCENE_RENDER);\n    };\n    Chart.prototype.onLeave = function (event) {\n        if (this.tooltip.pointerLeftOntoTooltip(event)) {\n            return;\n        }\n        this.disablePointer();\n    };\n    Chart.prototype.handlePointer = function (event) {\n        var _this = this;\n        var _a = this, lastPick = _a.lastPick, hoverRect = _a.hoverRect;\n        var offsetX = event.offsetX, offsetY = event.offsetY;\n        var disablePointer = function (highlightOnly) {\n            if (highlightOnly === void 0) { highlightOnly = false; }\n            if (lastPick) {\n                // Cursor moved from a non-marker node to empty space.\n                _this.disablePointer(highlightOnly);\n            }\n        };\n        if (!(hoverRect === null || hoverRect === void 0 ? void 0 : hoverRect.containsPoint(offsetX, offsetY))) {\n            disablePointer();\n            return;\n        }\n        // Handle node highlighting and tooltip toggling when pointer within `tooltip.range`\n        this.handlePointerTooltip(event, disablePointer);\n        // Handle node highlighting and mouse cursor when pointer withing `series[].nodeClickRange`\n        this.handlePointerNode(event);\n    };\n    Chart.prototype.handlePointerTooltip = function (event, disablePointer) {\n        var _a, _b;\n        var _c = this, lastPick = _c.lastPick, tooltip = _c.tooltip;\n        var range = tooltip.range;\n        var pageX = event.pageX, pageY = event.pageY, offsetX = event.offsetX, offsetY = event.offsetY;\n        var pixelRange;\n        if (typeof range === 'number' && Number.isFinite(range)) {\n            pixelRange = range;\n        }\n        var pick = this.pickSeriesNode({ x: offsetX, y: offsetY }, range === 'exact', pixelRange);\n        if (!pick) {\n            this.tooltipManager.updateTooltip(this.id);\n            if (this.highlight.range === 'tooltip')\n                disablePointer(true);\n            return;\n        }\n        var isNewDatum = this.highlight.range === 'node' || !lastPick || lastPick.datum !== pick.datum;\n        var html;\n        if (isNewDatum) {\n            html = pick.series.getTooltipHtml(pick.datum);\n            if (this.highlight.range === 'tooltip') {\n                this.highlightManager.updateHighlight(this.id, pick.datum);\n            }\n        }\n        else if (lastPick) {\n            lastPick.event = event.sourceEvent;\n        }\n        var isPixelRange = pixelRange != null;\n        var tooltipEnabled = this.tooltip.enabled && pick.series.tooltip.enabled;\n        var exactlyMatched = range === 'exact' && pick.distance === 0;\n        var rangeMatched = range === 'nearest' || isPixelRange || exactlyMatched;\n        var shouldUpdateTooltip = tooltipEnabled && rangeMatched && (!isNewDatum || html !== undefined);\n        var position = {\n            xOffset: pick.datum.series.tooltip.position.xOffset,\n            yOffset: pick.datum.series.tooltip.position.yOffset,\n        };\n        var meta = this.mergePointerDatum({ pageX: pageX, pageY: pageY, offsetX: offsetX, offsetY: offsetY, event: event, showArrow: pick.series.tooltip.showArrow, position: position }, pick.datum);\n        meta.enableInteraction = (_b = (_a = pick.series.tooltip.interaction) === null || _a === void 0 ? void 0 : _a.enabled) !== null && _b !== void 0 ? _b : false;\n        if (shouldUpdateTooltip) {\n            this.tooltipManager.updateTooltip(this.id, meta, html);\n        }\n    };\n    Chart.prototype.handlePointerNode = function (event) {\n        var _this = this;\n        var found = this.checkSeriesNodeRange(event, function (series, datum) {\n            if (series.hasEventListener('nodeClick') || series.hasEventListener('nodeDoubleClick')) {\n                _this.cursorManager.updateCursor('chart', 'pointer');\n            }\n            if (_this.highlight.range === 'node') {\n                _this.highlightManager.updateHighlight(_this.id, datum);\n            }\n        });\n        if (!found) {\n            this.cursorManager.updateCursor('chart');\n            if (this.highlight.range === 'node') {\n                this.highlightManager.updateHighlight(this.id);\n            }\n        }\n    };\n    Chart.prototype.onClick = function (event) {\n        if (this.checkSeriesNodeClick(event)) {\n            this.update(ChartUpdateType.SERIES_UPDATE);\n            return;\n        }\n        this.fireEvent({\n            type: 'click',\n            event: event.sourceEvent,\n        });\n    };\n    Chart.prototype.onDoubleClick = function (event) {\n        if (this.checkSeriesNodeDoubleClick(event)) {\n            this.update(ChartUpdateType.SERIES_UPDATE);\n            return;\n        }\n        this.fireEvent({\n            type: 'doubleClick',\n            event: event.sourceEvent,\n        });\n    };\n    Chart.prototype.checkSeriesNodeClick = function (event) {\n        return this.checkSeriesNodeRange(event, function (series, datum) {\n            return series.fireNodeClickEvent(event.sourceEvent, datum);\n        });\n    };\n    Chart.prototype.checkSeriesNodeDoubleClick = function (event) {\n        return this.checkSeriesNodeRange(event, function (series, datum) {\n            return series.fireNodeDoubleClickEvent(event.sourceEvent, datum);\n        });\n    };\n    Chart.prototype.checkSeriesNodeRange = function (event, callback) {\n        var nearestNode = this.pickSeriesNode({ x: event.offsetX, y: event.offsetY }, false);\n        var datum = nearestNode === null || nearestNode === void 0 ? void 0 : nearestNode.datum;\n        var nodeClickRange = datum === null || datum === void 0 ? void 0 : datum.series.nodeClickRange;\n        // First check if we should trigger the callback based on nearest node\n        if (datum && nodeClickRange === 'nearest') {\n            callback(datum.series, datum);\n            return true;\n        }\n        // Then check for an exact match or within the given range\n        var pixelRange;\n        if (typeof nodeClickRange === 'number' && Number.isFinite(nodeClickRange)) {\n            pixelRange = nodeClickRange;\n        }\n        var pick = this.pickSeriesNode({ x: event.offsetX, y: event.offsetY }, nodeClickRange === 'exact', pixelRange);\n        if (!pick)\n            return false;\n        // Then if we've picked a node within the pixel range, or exactly, trigger the callback\n        var isPixelRange = pixelRange != null;\n        var exactlyMatched = nodeClickRange === 'exact' && pick.distance === 0;\n        if (isPixelRange || exactlyMatched) {\n            callback(pick.series, pick.datum);\n            return true;\n        }\n        return false;\n    };\n    Chart.prototype.mergePointerDatum = function (meta, datum) {\n        var type = datum.series.tooltip.position.type;\n        if (type === 'node' && datum.nodeMidPoint) {\n            var _a = datum.nodeMidPoint, x = _a.x, y = _a.y;\n            var canvas = this.scene.canvas;\n            var point = datum.series.rootGroup.inverseTransformPoint(x, y);\n            var canvasRect = canvas.element.getBoundingClientRect();\n            return __assign$h(__assign$h({}, meta), { pageX: Math.round(canvasRect.left + window.scrollX + point.x), pageY: Math.round(canvasRect.top + window.scrollY + point.y), offsetX: Math.round(point.x), offsetY: Math.round(point.y) });\n        }\n        return meta;\n    };\n    Chart.prototype.changeHighlightDatum = function (event) {\n        var _a, _b;\n        var seriesToUpdate = new Set();\n        var _c = (_a = event.currentHighlight) !== null && _a !== void 0 ? _a : {}, _d = _c.series, newSeries = _d === void 0 ? undefined : _d, newDatum = _c.datum;\n        var _e = (_b = event.previousHighlight) !== null && _b !== void 0 ? _b : {}, _f = _e.series, lastSeries = _f === void 0 ? undefined : _f, lastDatum = _e.datum;\n        if (lastSeries) {\n            seriesToUpdate.add(lastSeries);\n        }\n        if (newSeries) {\n            seriesToUpdate.add(newSeries);\n        }\n        // Adjust cursor if a specific datum is highlighted, rather than just a series.\n        if ((lastSeries === null || lastSeries === void 0 ? void 0 : lastSeries.cursor) && lastDatum) {\n            this.cursorManager.updateCursor(lastSeries.id);\n        }\n        if ((newSeries === null || newSeries === void 0 ? void 0 : newSeries.cursor) && newDatum) {\n            this.cursorManager.updateCursor(newSeries.id, newSeries.cursor);\n        }\n        this.lastPick = event.currentHighlight ? { datum: event.currentHighlight } : undefined;\n        var updateAll = newSeries == null || lastSeries == null;\n        if (updateAll) {\n            this.update(ChartUpdateType.SERIES_UPDATE);\n        }\n        else {\n            this.update(ChartUpdateType.SERIES_UPDATE, { seriesToUpdate: seriesToUpdate });\n        }\n    };\n    Chart.prototype.waitForUpdate = function (timeoutMs) {\n        if (timeoutMs === void 0) { timeoutMs = 5000; }\n        return __awaiter$b(this, void 0, void 0, function () {\n            var start;\n            return __generator$b(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        start = performance.now();\n                        _a.label = 1;\n                    case 1:\n                        if (!(this._pendingFactoryUpdates.length > 0 || this.updatePending)) return [3 /*break*/, 3];\n                        if (performance.now() - start > timeoutMs) {\n                            throw new Error('waitForUpdate() timeout reached.');\n                        }\n                        return [4 /*yield*/, sleep(5)];\n                    case 2:\n                        _a.sent();\n                        return [3 /*break*/, 1];\n                    case 3: return [4 /*yield*/, this.awaitUpdateCompletion()];\n                    case 4:\n                        _a.sent();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    Chart.prototype.handleOverlays = function () {\n        this.handleNoDataOverlay();\n    };\n    Chart.prototype.handleNoDataOverlay = function () {\n        var shouldDisplayNoDataOverlay = !this.series.some(function (s) { return s.hasData(); });\n        var rect = this.getSeriesRect();\n        if (shouldDisplayNoDataOverlay && rect) {\n            this.overlays.noData.show(rect);\n        }\n        else {\n            this.overlays.noData.hide();\n        }\n    };\n    __decorate$1z([\n        ActionOnSet({\n            newValue: function (value) {\n                this.scene.debug.consoleLog = value;\n            },\n        })\n    ], Chart.prototype, \"debug\", void 0);\n    __decorate$1z([\n        ActionOnSet({\n            newValue: function (value) {\n                var _a;\n                (_a = this.series) === null || _a === void 0 ? void 0 : _a.forEach(function (series) { return (series.data = value); });\n            },\n        })\n    ], Chart.prototype, \"data\", void 0);\n    __decorate$1z([\n        ActionOnSet({\n            newValue: function (value) {\n                this.resize(value);\n            },\n        })\n    ], Chart.prototype, \"width\", void 0);\n    __decorate$1z([\n        ActionOnSet({\n            newValue: function (value) {\n                this.resize(undefined, value);\n            },\n        })\n    ], Chart.prototype, \"height\", void 0);\n    __decorate$1z([\n        ActionOnSet({\n            changeValue: function (value) {\n                this.autoSizeChanged(value);\n            },\n        }),\n        Validate(BOOLEAN)\n    ], Chart.prototype, \"autoSize\", void 0);\n    __decorate$1z([\n        ActionOnSet({\n            newValue: function (value) {\n                var _a;\n                (_a = this.scene.root) === null || _a === void 0 ? void 0 : _a.appendChild(value.node);\n            },\n            oldValue: function (oldValue) {\n                var _a;\n                (_a = this.scene.root) === null || _a === void 0 ? void 0 : _a.removeChild(oldValue.node);\n            },\n        })\n    ], Chart.prototype, \"title\", void 0);\n    __decorate$1z([\n        ActionOnSet({\n            newValue: function (value) {\n                var _a;\n                (_a = this.scene.root) === null || _a === void 0 ? void 0 : _a.appendChild(value.node);\n            },\n            oldValue: function (oldValue) {\n                var _a;\n                (_a = this.scene.root) === null || _a === void 0 ? void 0 : _a.removeChild(oldValue.node);\n            },\n        })\n    ], Chart.prototype, \"subtitle\", void 0);\n    __decorate$1z([\n        ActionOnSet({\n            newValue: function (value) {\n                var _a;\n                (_a = this.scene.root) === null || _a === void 0 ? void 0 : _a.appendChild(value.node);\n            },\n            oldValue: function (oldValue) {\n                var _a;\n                (_a = this.scene.root) === null || _a === void 0 ? void 0 : _a.removeChild(oldValue.node);\n            },\n        })\n    ], Chart.prototype, \"footnote\", void 0);\n    __decorate$1z([\n        Validate(STRING_UNION('standalone', 'integrated'))\n    ], Chart.prototype, \"mode\", void 0);\n    return Chart;\n}(Observable));\n\n/**\n * The tree layout is calculated in abstract x/y coordinates, where the root is at (0, 0)\n * and the tree grows downward from the root.\n */\nvar TreeNode = /** @class */ (function () {\n    function TreeNode(label, parent, number) {\n        if (label === void 0) { label = ''; }\n        if (number === void 0) { number = 0; }\n        this.x = 0;\n        this.y = 0;\n        this.subtreeLeft = NaN;\n        this.subtreeRight = NaN;\n        this.screenX = 0;\n        this.screenY = 0;\n        this.children = [];\n        this.leafCount = 0;\n        this.prelim = 0;\n        this.mod = 0;\n        this.ancestor = this;\n        this.change = 0;\n        this.shift = 0;\n        this.label = label;\n        // screenX and screenY are meant to be recomputed from (layout) x and y\n        // when the tree is resized (without performing another layout)\n        this.parent = parent;\n        this.depth = parent ? parent.depth + 1 : 0;\n        this.number = number;\n    }\n    TreeNode.prototype.getLeftSibling = function () {\n        return this.number > 0 && this.parent ? this.parent.children[this.number - 1] : undefined;\n    };\n    TreeNode.prototype.getLeftmostSibling = function () {\n        return this.number > 0 && this.parent ? this.parent.children[0] : undefined;\n    };\n    // traverse the left contour of a subtree, return the successor of v on this contour\n    TreeNode.prototype.nextLeft = function () {\n        return this.children ? this.children[0] : this.thread;\n    };\n    // traverse the right contour of a subtree, return the successor of v on this contour\n    TreeNode.prototype.nextRight = function () {\n        return this.children ? this.children[this.children.length - 1] : this.thread;\n    };\n    TreeNode.prototype.getSiblings = function () {\n        var _this = this;\n        return this.parent ? this.parent.children.filter(function (_, i) { return i !== _this.number; }) : [];\n    };\n    return TreeNode;\n}());\n/**\n * Converts an array of ticks, where each tick has an array of labels, to a label tree.\n * If `pad` is `true`, will ensure that every branch matches the depth of the tree by\n * creating empty labels.\n */\nfunction ticksToTree(ticks, pad) {\n    if (pad === void 0) { pad = true; }\n    var root = new TreeNode();\n    var depth = 0;\n    if (pad) {\n        ticks.forEach(function (tick) { return (depth = Math.max(depth, tick.labels.length)); });\n    }\n    ticks.forEach(function (tick) {\n        if (pad) {\n            while (tick.labels.length < depth) {\n                tick.labels.unshift('');\n            }\n        }\n        insertTick(root, tick);\n    });\n    return root;\n}\nfunction insertTick(root, tick) {\n    var pathParts = tick.labels.slice().reverse(); // path elements from root to leaf label\n    var lastPartIndex = pathParts.length - 1;\n    pathParts.forEach(function (pathPart, partIndex) {\n        var children = root.children;\n        var existingNode = children.find(function (child) { return child.label === pathPart; });\n        var isNotLeaf = partIndex !== lastPartIndex;\n        if (existingNode && isNotLeaf) {\n            // the isNotLeaf check is to allow duplicate leafs\n            root = existingNode;\n        }\n        else {\n            var node = new TreeNode(pathPart, root);\n            node.number = children.length;\n            children.push(node);\n            if (isNotLeaf) {\n                root = node;\n            }\n        }\n    });\n}\n// Shift the subtree.\nfunction moveSubtree(wm, wp, shift) {\n    var subtrees = wp.number - wm.number;\n    var ratio = shift / subtrees;\n    wp.change -= ratio;\n    wp.shift += shift;\n    wm.change += ratio;\n    wp.prelim += shift;\n    wp.mod += shift;\n}\nfunction ancestor(vim, v, defaultAncestor) {\n    return v.getSiblings().indexOf(vim.ancestor) >= 0 ? vim.ancestor : defaultAncestor;\n}\n// Spaces out the children.\nfunction executeShifts(v) {\n    var children = v.children;\n    if (children) {\n        var shift = 0;\n        var change = 0;\n        for (var i = children.length - 1; i >= 0; i--) {\n            var w = children[i];\n            w.prelim += shift;\n            w.mod += shift;\n            change += w.change;\n            shift += w.shift + change;\n        }\n    }\n}\n// Moves current subtree with v as the root if some nodes are conflicting in space.\nfunction apportion(v, defaultAncestor, distance) {\n    var w = v.getLeftSibling();\n    if (w) {\n        var vop = v;\n        var vip = v;\n        var vim = w;\n        var vom = vip.getLeftmostSibling();\n        var sip = vip.mod;\n        var sop = vop.mod;\n        var sim = vim.mod;\n        var som = vom.mod;\n        while (vim.nextRight() && vip.nextLeft()) {\n            vim = vim.nextRight();\n            vip = vip.nextLeft();\n            vom = vom.nextLeft();\n            vop = vop.nextRight();\n            vop.ancestor = v;\n            var shift = vim.prelim + sim - (vip.prelim + sip) + distance;\n            if (shift > 0) {\n                moveSubtree(ancestor(vim, v, defaultAncestor), v, shift);\n                sip += shift;\n                sop += shift;\n            }\n            sim += vim.mod;\n            sip += vip.mod;\n            som += vom.mod;\n            sop += vop.mod;\n        }\n        if (vim.nextRight() && !vop.nextRight()) {\n            vop.thread = vim.nextRight();\n            vop.mod += sim - sop;\n        }\n        else {\n            if (vip.nextLeft() && !vom.nextLeft()) {\n                vom.thread = vip.nextLeft();\n                vom.mod += sip - som;\n            }\n            defaultAncestor = v;\n        }\n    }\n    return defaultAncestor;\n}\n// Compute the preliminary x-coordinate of node and its children (recursively).\nfunction firstWalk(node, distance) {\n    var children = node.children;\n    if (children.length) {\n        var defaultAncestor_1 = children[0];\n        children.forEach(function (child) {\n            firstWalk(child, distance);\n            defaultAncestor_1 = apportion(child, defaultAncestor_1, distance);\n        });\n        executeShifts(node);\n        var midpoint = (children[0].prelim + children[children.length - 1].prelim) / 2;\n        var leftSibling = node.getLeftSibling();\n        if (leftSibling) {\n            node.prelim = leftSibling.prelim + distance;\n            node.mod = node.prelim - midpoint;\n        }\n        else {\n            node.prelim = midpoint;\n        }\n    }\n    else {\n        var leftSibling = node.getLeftSibling();\n        node.prelim = leftSibling ? leftSibling.prelim + distance : 0;\n    }\n}\nvar Dimensions = /** @class */ (function () {\n    function Dimensions() {\n        this.top = Infinity;\n        this.right = -Infinity;\n        this.bottom = -Infinity;\n        this.left = Infinity;\n    }\n    Dimensions.prototype.update = function (node, xy) {\n        var _a = xy(node), x = _a.x, y = _a.y;\n        if (x > this.right) {\n            this.right = x;\n        }\n        if (x < this.left) {\n            this.left = x;\n        }\n        if (y > this.bottom) {\n            this.bottom = y;\n        }\n        if (y < this.top) {\n            this.top = y;\n        }\n    };\n    return Dimensions;\n}());\nfunction secondWalk(v, m, layout) {\n    v.x = v.prelim + m;\n    v.y = v.depth;\n    layout.update(v);\n    v.children.forEach(function (w) { return secondWalk(w, m + v.mod, layout); });\n}\n// After the second walk the parent nodes are positioned at the center of their immediate children.\n// If we want the parent nodes to be positioned at the center of the subtree for which they are roots,\n// we need a third walk to adjust the positions.\nfunction thirdWalk(v) {\n    var children = v.children;\n    var leafCount = 0;\n    children.forEach(function (w) {\n        thirdWalk(w);\n        if (w.children.length) {\n            leafCount += w.leafCount;\n        }\n        else {\n            leafCount++;\n        }\n    });\n    v.leafCount = leafCount;\n    if (children.length) {\n        v.subtreeLeft = children[0].subtreeLeft;\n        v.subtreeRight = children[v.children.length - 1].subtreeRight;\n        v.x = (v.subtreeLeft + v.subtreeRight) / 2;\n    }\n    else {\n        v.subtreeLeft = v.x;\n        v.subtreeRight = v.x;\n    }\n}\nfunction treeLayout(root) {\n    var layout = new TreeLayout();\n    firstWalk(root, 1);\n    secondWalk(root, -root.prelim, layout);\n    thirdWalk(root);\n    return layout;\n}\nvar TreeLayout = /** @class */ (function () {\n    function TreeLayout() {\n        this.dimensions = new Dimensions();\n        this.leafCount = 0;\n        this.nodes = [];\n        // One might want to process leaf nodes separately from the rest of the tree.\n        // For example, position labels corresponding to leafs vertically, rather than horizontally.\n        this.leafNodes = [];\n        this.nonLeafNodes = [];\n        this.depth = 0;\n    }\n    TreeLayout.prototype.update = function (node) {\n        this.dimensions.update(node, function (node) { return ({ x: node.x, y: node.y }); });\n        if (!node.children.length) {\n            this.leafCount++;\n            this.leafNodes.push(node);\n        }\n        else {\n            this.nonLeafNodes.push(node);\n        }\n        if (node.depth > this.depth) {\n            this.depth = node.depth;\n        }\n        this.nodes.push(node);\n    };\n    TreeLayout.prototype.resize = function (width, height, shiftX, shiftY, flipX) {\n        if (shiftX === void 0) { shiftX = 0; }\n        if (shiftY === void 0) { shiftY = 0; }\n        if (flipX === void 0) { flipX = false; }\n        var xSteps = this.leafCount - 1;\n        var ySteps = this.depth;\n        var dimensions = this.dimensions;\n        var scalingX = 1;\n        var scalingY = 1;\n        if (width > 0 && xSteps) {\n            var existingSpacingX = (dimensions.right - dimensions.left) / xSteps;\n            var desiredSpacingX = width / xSteps;\n            scalingX = desiredSpacingX / existingSpacingX;\n            if (flipX) {\n                scalingX = -scalingX;\n            }\n        }\n        if (height > 0 && ySteps) {\n            var existingSpacingY = (dimensions.bottom - dimensions.top) / ySteps;\n            var desiredSpacingY = height / ySteps;\n            scalingY = desiredSpacingY / existingSpacingY;\n        }\n        var screenDimensions = new Dimensions();\n        this.nodes.forEach(function (node) {\n            node.screenX = node.x * scalingX;\n            node.screenY = node.y * scalingY;\n            screenDimensions.update(node, function (node) { return ({ x: node.screenX, y: node.screenY }); });\n        });\n        // Normalize so that root top and leftmost leaf left start at zero.\n        var offsetX = -screenDimensions.left;\n        var offsetY = -screenDimensions.top;\n        this.nodes.forEach(function (node) {\n            node.screenX += offsetX + shiftX;\n            node.screenY += offsetY + shiftY;\n        });\n    };\n    return TreeLayout;\n}());\n\nvar __extends$y = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1y = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __read$h = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$a = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar GroupedCategoryAxisLabel = /** @class */ (function (_super) {\n    __extends$y(GroupedCategoryAxisLabel, _super);\n    function GroupedCategoryAxisLabel() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.grid = false;\n        return _this;\n    }\n    __decorate$1y([\n        Validate(BOOLEAN)\n    ], GroupedCategoryAxisLabel.prototype, \"grid\", void 0);\n    return GroupedCategoryAxisLabel;\n}(AxisLabel));\nvar GroupedCategoryAxis = /** @class */ (function (_super) {\n    __extends$y(GroupedCategoryAxis, _super);\n    function GroupedCategoryAxis(moduleCtx) {\n        var _this = _super.call(this, moduleCtx, new BandScale$5()) || this;\n        // Label scale (labels are positioned between ticks, tick count = label count + 1).\n        // We don't call is `labelScale` for consistency with other axes.\n        _this.tickScale = new BandScale$5();\n        _this.translation = {\n            x: 0,\n            y: 0,\n        };\n        _this.line = new AxisLine();\n        _this.label = new GroupedCategoryAxisLabel();\n        /**\n         * The color of the labels.\n         * Use `undefined` rather than `rgba(0, 0, 0, 0)` to make labels invisible.\n         */\n        _this.labelColor = 'rgba(87, 87, 87, 1)';\n        _this.includeInvisibleDomains = true;\n        var _a = _this, tickLineGroup = _a.tickLineGroup, tickLabelGroup = _a.tickLabelGroup, gridLineGroup = _a.gridLineGroup, tickScale = _a.tickScale, scale = _a.scale;\n        scale.paddingOuter = 0.1;\n        scale.paddingInner = scale.paddingOuter * 2;\n        _this.range = scale.range.slice();\n        _this.refreshScale();\n        tickScale.paddingInner = 1;\n        tickScale.paddingOuter = 0;\n        _this.gridLineSelection = Selection.select(gridLineGroup, Line);\n        _this.axisLineSelection = Selection.select(tickLineGroup, Line);\n        _this.separatorSelection = Selection.select(tickLineGroup, Line);\n        _this.labelSelection = Selection.select(tickLabelGroup, Text);\n        return _this;\n    }\n    GroupedCategoryAxis.prototype.updateRange = function () {\n        var _a = this, rr = _a.range, vr = _a.visibleRange, scale = _a.scale;\n        var span = (rr[1] - rr[0]) / (vr[1] - vr[0]);\n        var shift = span * vr[0];\n        var start = rr[0] - shift;\n        this.tickScale.range = scale.range = [start, start + span];\n        this.resizeTickTree();\n    };\n    GroupedCategoryAxis.prototype.resizeTickTree = function () {\n        var _a;\n        var s = this.scale;\n        var range = s.domain.length ? [s.convert(s.domain[0]), s.convert(s.domain[s.domain.length - 1])] : s.range;\n        var layout = this.tickTreeLayout;\n        var lineHeight = this.lineHeight;\n        if (layout) {\n            layout.resize(Math.abs(range[1] - range[0]), layout.depth * lineHeight, (Math.min(range[0], range[1]) || 0) + ((_a = s.bandwidth) !== null && _a !== void 0 ? _a : 0) / 2, -layout.depth * lineHeight, range[1] - range[0] < 0);\n        }\n    };\n    Object.defineProperty(GroupedCategoryAxis.prototype, \"lineHeight\", {\n        get: function () {\n            return this.label.fontSize * 1.5;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(GroupedCategoryAxis.prototype, \"gridLength\", {\n        get: function () {\n            return this._gridLength;\n        },\n        /**\n         * The length of the grid. The grid is only visible in case of a non-zero value.\n         */\n        set: function (value) {\n            // Was visible and now invisible, or was invisible and now visible.\n            if ((this._gridLength && !value) || (!this._gridLength && value)) {\n                this.gridLineSelection.clear();\n                this.labelSelection.clear();\n            }\n            this._gridLength = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    GroupedCategoryAxis.prototype.calculateDomain = function () {\n        var _a;\n        var _b;\n        var _c = this, direction = _c.direction, boundSeries = _c.boundSeries;\n        var domains = [];\n        var isNumericX = undefined;\n        boundSeries\n            .filter(function (s) { return s.visible; })\n            .forEach(function (series) {\n            if (direction === ChartAxisDirection.X) {\n                if (isNumericX === undefined) {\n                    // always add first X domain\n                    var domain_1 = series.getDomain(direction);\n                    domains.push(domain_1);\n                    isNumericX = typeof domain_1[0] === 'number';\n                }\n                else if (isNumericX) {\n                    // only add further X domains if the axis is numeric\n                    domains.push(series.getDomain(direction));\n                }\n            }\n            else {\n                domains.push(series.getDomain(direction));\n            }\n        });\n        var domain = (_a = new Array()).concat.apply(_a, __spreadArray$a([], __read$h(domains)));\n        var values = (_b = extent$4(domain)) !== null && _b !== void 0 ? _b : domain;\n        this.dataDomain = this.normaliseDataDomain(values);\n        this.scale.domain = this.dataDomain;\n    };\n    GroupedCategoryAxis.prototype.normaliseDataDomain = function (d) {\n        // Prevent duplicate categories.\n        var values = d.filter(function (s, i, arr) { return arr.indexOf(s) === i; });\n        var tickTree = ticksToTree(values);\n        this.tickTreeLayout = treeLayout(tickTree);\n        var tickScaleDomain = values.slice();\n        tickScaleDomain.push('');\n        this.tickScale.domain = tickScaleDomain;\n        this.resizeTickTree();\n        return values;\n    };\n    /**\n     * Creates/removes/updates the scene graph nodes that constitute the axis.\n     * Supposed to be called _manually_ after changing _any_ of the axis properties.\n     * This allows to bulk set axis properties before updating the nodes.\n     * The node changes made by this method are rendered on the next animation frame.\n     * We could schedule this method call automatically on the next animation frame\n     * when any of the axis properties change (the way we do when properties of scene graph's\n     * nodes change), but this will mean that we first wait for the next animation\n     * frame to make changes to the nodes of the axis, then wait for another animation\n     * frame to render those changes. It's nice to have everything update automatically,\n     * but this extra level of async indirection will not just introduce an unwanted delay,\n     * it will also make it harder to reason about the program.\n     */\n    GroupedCategoryAxis.prototype.update = function (primaryTickCount) {\n        var _this = this;\n        this.updateDirection();\n        this.calculateDomain();\n        this.updateRange();\n        var _a = this, scale = _a.scale, label = _a.label, parallel = _a.label.parallel, callbackCache = _a.moduleCtx.callbackCache, tickScale = _a.tickScale, requestedRange = _a.range, title = _a.title, _b = _a.title, _c = _b === void 0 ? {} : _b, _d = _c.formatter, formatter = _d === void 0 ? function (p) { return p.defaultValue; } : _d, _titleCaption = _a._titleCaption;\n        var rangeStart = scale.range[0];\n        var rangeEnd = scale.range[1];\n        var rangeLength = Math.abs(rangeEnd - rangeStart);\n        var bandwidth = rangeLength / scale.domain.length || 0;\n        var rotation = toRadians$1(this.rotation);\n        var isHorizontal = Math.abs(Math.cos(rotation)) < 1e-8;\n        var sideFlag = label.getSideFlag();\n        this.updatePosition({ rotation: rotation, sideFlag: sideFlag });\n        // The Text `node` of the Caption is not used to render the title of the grouped category axis.\n        // The phantom root of the tree layout is used instead.\n        _titleCaption.node.visible = false;\n        var lineHeight = this.lineHeight;\n        // Render ticks and labels.\n        var tickTreeLayout = this.tickTreeLayout;\n        var labels = scale.ticks();\n        var treeLabels = tickTreeLayout ? tickTreeLayout.nodes : [];\n        var isLabelTree = tickTreeLayout ? tickTreeLayout.depth > 1 : false;\n        var ticks = tickScale.ticks();\n        // When labels are parallel to the axis line, the `parallelFlipFlag` is used to\n        // flip the labels to avoid upside-down text, when the axis is rotated\n        // such that it is in the right hemisphere, i.e. the angle of rotation\n        // is in the [0, π] interval.\n        // The rotation angle is normalized, so that we have an easier time checking\n        // if it's in the said interval. Since the axis is always rendered vertically\n        // and then rotated, zero rotation means 12 (not 3) o-clock.\n        // -1 = flip\n        //  1 = don't flip (default)\n        var _e = calculateLabelRotation({\n            rotation: label.rotation,\n            parallel: parallel,\n            regularFlipRotation: normalizeAngle360(rotation - Math.PI / 2),\n            parallelFlipRotation: normalizeAngle360(rotation),\n        }), defaultRotation = _e.defaultRotation, configuredRotation = _e.configuredRotation, parallelFlipFlag = _e.parallelFlipFlag;\n        var gridLineSelection = this.gridLineSelection.update(this.gridLength ? ticks : []);\n        var labelSelection = this.labelSelection.update(treeLabels);\n        var labelFormatter = label.formatter;\n        var labelBBoxes = new Map();\n        var maxLeafLabelWidth = 0;\n        labelSelection.each(function (node, datum, index) {\n            var _a;\n            node.fontStyle = label.fontStyle;\n            node.fontWeight = label.fontWeight;\n            node.fontSize = label.fontSize;\n            node.fontFamily = label.fontFamily;\n            node.fill = label.color;\n            node.textBaseline = parallelFlipFlag === -1 ? 'bottom' : 'hanging';\n            node.textAlign = 'center';\n            node.translationX = datum.screenY - label.fontSize * 0.25;\n            node.translationY = datum.screenX;\n            if (index === 0) {\n                // use the phantom root as the axis title\n                if ((title === null || title === void 0 ? void 0 : title.enabled) && labels.length > 0) {\n                    node.visible = true;\n                    node.text = callbackCache.call(formatter, _this.getTitleFormatterParams());\n                    node.fontSize = title.fontSize;\n                    node.fontStyle = title.fontStyle;\n                    node.fontWeight = title.fontWeight;\n                    node.fontFamily = title.fontFamily;\n                    node.textBaseline = 'hanging';\n                }\n                else {\n                    node.visible = false;\n                }\n            }\n            else if (labelFormatter) {\n                node.text =\n                    (_a = callbackCache.call(labelFormatter, {\n                        value: String(datum.label),\n                        index: index,\n                    })) !== null && _a !== void 0 ? _a : String(datum.label);\n                node.visible = datum.screenX >= requestedRange[0] && datum.screenX <= requestedRange[1];\n            }\n            else {\n                node.text = String(datum.label);\n                node.visible = datum.screenX >= requestedRange[0] && datum.screenX <= requestedRange[1];\n            }\n            var bbox = node.computeBBox();\n            labelBBoxes.set(node.id, bbox);\n            if (bbox.width > maxLeafLabelWidth) {\n                maxLeafLabelWidth = bbox.width;\n            }\n        });\n        var labelX = sideFlag * label.padding;\n        var labelGrid = this.label.grid;\n        var separatorData = [];\n        labelSelection.each(function (label, datum, index) {\n            label.x = labelX;\n            label.rotationCenterX = labelX;\n            if (!datum.children.length) {\n                label.rotation = configuredRotation;\n                label.textAlign = 'end';\n                label.textBaseline = 'middle';\n                var bbox = labelBBoxes.get(label.id);\n                if (bbox && bbox.height > bandwidth) {\n                    label.visible = false;\n                }\n            }\n            else {\n                label.translationX -= maxLeafLabelWidth - lineHeight + _this.label.padding;\n                var availableRange = datum.leafCount * bandwidth;\n                var bbox = labelBBoxes.get(label.id);\n                if (bbox && bbox.width > availableRange) {\n                    label.visible = false;\n                }\n                else if (isHorizontal) {\n                    label.rotation = defaultRotation;\n                }\n                else {\n                    label.rotation = -Math.PI / 2;\n                }\n            }\n            // Calculate positions of label separators for all nodes except the root.\n            // Each separator is placed to the top of the current label.\n            if (datum.parent && isLabelTree) {\n                var y = !datum.children.length\n                    ? datum.screenX - bandwidth / 2\n                    : datum.screenX - (datum.leafCount * bandwidth) / 2;\n                if (!datum.children.length) {\n                    if (datum.number !== datum.children.length - 1 || labelGrid) {\n                        separatorData.push({\n                            y: y,\n                            x1: 0,\n                            x2: -maxLeafLabelWidth - _this.label.padding * 2,\n                            toString: function () { return String(index); },\n                        });\n                    }\n                }\n                else {\n                    var x = -maxLeafLabelWidth - _this.label.padding * 2 + datum.screenY;\n                    separatorData.push({\n                        y: y,\n                        x1: x + lineHeight,\n                        x2: x,\n                        toString: function () { return String(index); },\n                    });\n                }\n            }\n        });\n        // Calculate the position of the long separator on the far bottom of the axis.\n        var minX = 0;\n        separatorData.forEach(function (d) { return (minX = Math.min(minX, d.x2)); });\n        separatorData.push({\n            y: Math.max(rangeStart, rangeEnd),\n            x1: 0,\n            x2: minX,\n            toString: function () { return String(separatorData.length); },\n        });\n        var separatorSelection = this.separatorSelection.update(separatorData);\n        var epsilon = 0.0000001;\n        separatorSelection.each(function (line, datum) {\n            line.x1 = datum.x1;\n            line.x2 = datum.x2;\n            line.y1 = datum.y;\n            line.y2 = datum.y;\n            line.visible = datum.y >= requestedRange[0] - epsilon && datum.y <= requestedRange[1] + epsilon;\n            line.stroke = _this.tick.color;\n            line.fill = undefined;\n            line.strokeWidth = 1;\n        });\n        this.gridLineSelection = gridLineSelection;\n        this.labelSelection = labelSelection;\n        // Render axis lines.\n        var lineCount = tickTreeLayout ? tickTreeLayout.depth + 1 : 1;\n        var lines = [];\n        for (var i = 0; i < lineCount; i++) {\n            lines.push(i);\n        }\n        var axisLineSelection = this.axisLineSelection.update(lines);\n        axisLineSelection.each(function (line, _, index) {\n            var x = index > 0 ? -maxLeafLabelWidth - _this.label.padding * 2 - (index - 1) * lineHeight : 0;\n            line.x1 = x;\n            line.x2 = x;\n            line.y1 = requestedRange[0];\n            line.y2 = requestedRange[1];\n            line.strokeWidth = _this.line.width;\n            line.stroke = _this.line.color;\n            line.visible = labels.length > 0 && (index === 0 || (labelGrid && isLabelTree));\n        });\n        if (this.gridLength) {\n            var styles_1 = this.gridStyle;\n            var styleCount_1 = styles_1.length;\n            gridLineSelection.each(function (line, datum, index) {\n                var y = Math.round(tickScale.convert(datum));\n                line.x1 = 0;\n                line.x2 = -sideFlag * _this.gridLength;\n                line.y1 = y;\n                line.y2 = y;\n                line.visible = y >= requestedRange[0] && y <= requestedRange[1];\n                var style = styles_1[index % styleCount_1];\n                line.stroke = style.stroke;\n                line.strokeWidth = _this.tick.width;\n                line.lineDash = style.lineDash;\n                line.fill = undefined;\n            });\n        }\n        return primaryTickCount;\n    };\n    GroupedCategoryAxis.className = 'GroupedCategoryAxis';\n    GroupedCategoryAxis.type = 'groupedCategory';\n    __decorate$1y([\n        Validate(OPT_COLOR_STRING)\n    ], GroupedCategoryAxis.prototype, \"labelColor\", void 0);\n    return GroupedCategoryAxis;\n}(ChartAxis));\n\nvar __extends$x = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign$g = (undefined && undefined.__assign) || function () {\n    __assign$g = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$g.apply(this, arguments);\n};\nvar __awaiter$a = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator$a = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __values$a = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read$g = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar directions = ['top', 'right', 'bottom', 'left'];\nvar CartesianChart = /** @class */ (function (_super) {\n    __extends$x(CartesianChart, _super);\n    function CartesianChart(document, overrideDevicePixelRatio, resources) {\n        if (document === void 0) { document = window.document; }\n        var _this = _super.call(this, document, overrideDevicePixelRatio, resources) || this;\n        /** Integrated Charts feature state - not used in Standalone Charts. */\n        _this.paired = true;\n        _this._lastAxisWidths = {\n            top: 0,\n            bottom: 0,\n            left: 0,\n            right: 0,\n        };\n        _this._lastVisibility = {\n            crossLines: true,\n            series: true,\n        };\n        return _this;\n    }\n    CartesianChart.prototype.performLayout = function () {\n        return __awaiter$a(this, void 0, void 0, function () {\n            var shrinkRect, _a, seriesRect, visibility, clipSeries, _b, seriesRoot, seriesAreaPadding, seriesPaddedRect, hoverRectPadding, hoverRect;\n            return __generator$a(this, function (_c) {\n                switch (_c.label) {\n                    case 0: return [4 /*yield*/, _super.prototype.performLayout.call(this)];\n                    case 1:\n                        shrinkRect = _c.sent();\n                        _a = this.updateAxes(shrinkRect), seriesRect = _a.seriesRect, visibility = _a.visibility, clipSeries = _a.clipSeries;\n                        this.seriesRoot.visible = visibility.series;\n                        this.seriesRect = seriesRect;\n                        this.series.forEach(function (series) {\n                            series.rootGroup.translationX = Math.floor(seriesRect.x);\n                            series.rootGroup.translationY = Math.floor(seriesRect.y);\n                        });\n                        _b = this, seriesRoot = _b.seriesRoot, seriesAreaPadding = _b.seriesAreaPadding;\n                        seriesPaddedRect = seriesRect.clone().grow(seriesAreaPadding);\n                        hoverRectPadding = 20;\n                        hoverRect = seriesPaddedRect.clone().grow(hoverRectPadding);\n                        this.hoverRect = hoverRect;\n                        this.layoutService.dispatchLayoutComplete({\n                            type: 'layout-complete',\n                            chart: { width: this.scene.width, height: this.scene.height },\n                            series: { rect: seriesRect, paddedRect: seriesPaddedRect, hoverRect: hoverRect, visible: visibility.series },\n                            axes: this.axes.map(function (axis) { return (__assign$g({ id: axis.id }, axis.getLayoutState())); }),\n                        });\n                        if (clipSeries) {\n                            seriesRoot.setClipRectInGroupCoordinateSpace(seriesPaddedRect);\n                        }\n                        else {\n                            seriesRoot.setClipRectInGroupCoordinateSpace();\n                        }\n                        return [2 /*return*/, shrinkRect];\n                }\n            });\n        });\n    };\n    CartesianChart.prototype.updateAxes = function (inputShrinkRect) {\n        var e_1, _a;\n        var _b;\n        // Start with a good approximation from the last update - this should mean that in many resize\n        // cases that only a single pass is needed \\o/.\n        var axisWidths = __assign$g({}, this._lastAxisWidths);\n        var visibility = __assign$g({}, this._lastVisibility);\n        // Clean any positions which aren't valid with the current axis status (otherwise we end up\n        // never being able to find a stable result).\n        var liveAxisWidths = new Set(this._axes.map(function (a) { return a.position; }));\n        try {\n            for (var _c = __values$a(Object.keys(axisWidths)), _d = _c.next(); !_d.done; _d = _c.next()) {\n                var position = _d.value;\n                if (!liveAxisWidths.has(position)) {\n                    delete axisWidths[position];\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        var stableOutputs = function (otherAxisWidths, otherVisibility) {\n            // Check for new axis positions.\n            if (Object.keys(otherAxisWidths).some(function (k) { return axisWidths[k] == null; })) {\n                return false;\n            }\n            return (visibility.crossLines === otherVisibility.crossLines &&\n                visibility.series === otherVisibility.series &&\n                // Check for existing axis positions and equality.\n                Object.entries(axisWidths).every(function (_a) {\n                    var _b = __read$g(_a, 2), p = _b[0], w = _b[1];\n                    var otherW = otherAxisWidths[p];\n                    if (w != null || otherW != null) {\n                        return w === otherW;\n                    }\n                    return true;\n                }));\n        };\n        var ceilValues = function (records) {\n            return Object.entries(records).reduce(function (out, _a) {\n                var _b = __read$g(_a, 2), key = _b[0], value = _b[1];\n                if (value && Math.abs(value) === Infinity) {\n                    value = 0;\n                }\n                out[key] = value != null ? Math.ceil(value) : value;\n                return out;\n            }, {});\n        };\n        // Iteratively try to resolve axis widths - since X axis width affects Y axis range,\n        // and vice-versa, we need to iteratively try and find a fit for the axes and their\n        // ticks/labels.\n        var lastPassAxisWidths = {};\n        var lastPassVisibility = {};\n        var clipSeries = false;\n        var seriesRect = (_b = this.seriesRect) === null || _b === void 0 ? void 0 : _b.clone();\n        var count = 0;\n        do {\n            Object.assign(axisWidths, lastPassAxisWidths);\n            Object.assign(visibility, lastPassVisibility);\n            var result = this.updateAxesPass(axisWidths, inputShrinkRect.clone(), seriesRect);\n            lastPassAxisWidths = ceilValues(result.axisWidths);\n            lastPassVisibility = result.visibility;\n            clipSeries = result.clipSeries;\n            seriesRect = result.seriesRect;\n            if (count++ > 10) {\n                Logger.warn('unable to find stable axis layout.');\n                break;\n            }\n        } while (!stableOutputs(lastPassAxisWidths, lastPassVisibility));\n        var clipRectPadding = 5;\n        this.axes.forEach(function (axis) {\n            // update visibility of crosslines\n            axis.setCrossLinesVisible(visibility.crossLines);\n            if (!seriesRect) {\n                return;\n            }\n            axis.clipGrid(seriesRect.x, seriesRect.y, seriesRect.width + clipRectPadding, seriesRect.height + clipRectPadding);\n            switch (axis.position) {\n                case 'left':\n                case 'right':\n                    axis.clipTickLines(inputShrinkRect.x, seriesRect.y, inputShrinkRect.width + clipRectPadding, seriesRect.height + clipRectPadding);\n                    break;\n                case 'top':\n                case 'bottom':\n                    axis.clipTickLines(seriesRect.x, inputShrinkRect.y, seriesRect.width + clipRectPadding, inputShrinkRect.height + clipRectPadding);\n                    break;\n            }\n        });\n        this._lastAxisWidths = axisWidths;\n        this._lastVisibility = visibility;\n        return { seriesRect: seriesRect, visibility: visibility, clipSeries: clipSeries };\n    };\n    CartesianChart.prototype.updateAxesPass = function (axisWidths, bounds, lastPassSeriesRect) {\n        var _this = this;\n        var axes = this.axes;\n        var visited = {};\n        var newAxisWidths = {};\n        var visibility = {\n            series: true,\n            crossLines: true,\n        };\n        var clipSeries = false;\n        var primaryTickCounts = {};\n        var paddedBounds = this.applySeriesPadding(bounds);\n        var crossLinePadding = lastPassSeriesRect ? this.buildCrossLinePadding(axisWidths) : {};\n        var axisBound = this.buildAxisBound(paddedBounds, axisWidths, crossLinePadding, visibility);\n        var seriesRect = this.buildSeriesRect(axisBound, axisWidths);\n        // Set the number of ticks for continuous axes based on the available range\n        // before updating the axis domain via `this.updateAxes()` as the tick count has an effect on the calculated `nice` domain extent\n        axes.forEach(function (axis) {\n            var _a, _b;\n            var position = axis.position;\n            var _c = _this.calculateAxisDimensions({\n                axis: axis,\n                seriesRect: seriesRect,\n                paddedBounds: paddedBounds,\n                axisWidths: axisWidths,\n                newAxisWidths: newAxisWidths,\n                primaryTickCounts: primaryTickCounts,\n                clipSeries: clipSeries,\n                addInterAxisPadding: ((_a = visited[position]) !== null && _a !== void 0 ? _a : 0) > 0,\n            }), newClipSeries = _c.clipSeries, axisThickness = _c.axisThickness, axisOffset = _c.axisOffset;\n            visited[position] = ((_b = visited[position]) !== null && _b !== void 0 ? _b : 0) + 1;\n            clipSeries = clipSeries || newClipSeries;\n            _this.positionAxis({\n                axis: axis,\n                axisBound: axisBound,\n                axisOffset: axisOffset,\n                axisThickness: axisThickness,\n                axisWidths: axisWidths,\n                primaryTickCounts: primaryTickCounts,\n                seriesRect: seriesRect,\n            });\n        });\n        return { clipSeries: clipSeries, seriesRect: seriesRect, axisWidths: newAxisWidths, visibility: visibility };\n    };\n    CartesianChart.prototype.buildCrossLinePadding = function (axisWidths) {\n        var e_2, _a;\n        var _b;\n        var crossLinePadding = {};\n        this.axes.forEach(function (axis) {\n            if (axis.crossLines) {\n                axis.crossLines.forEach(function (crossLine) {\n                    crossLine.calculatePadding(crossLinePadding);\n                });\n            }\n        });\n        try {\n            // Reduce cross-line padding to account for overlap with axes.\n            for (var _c = __values$a(Object.entries(crossLinePadding)), _d = _c.next(); !_d.done; _d = _c.next()) {\n                var _e = __read$g(_d.value, 2), side = _e[0], _f = _e[1], padding = _f === void 0 ? 0 : _f;\n                crossLinePadding[side] = Math.max(padding - ((_b = axisWidths[side]) !== null && _b !== void 0 ? _b : 0), 0);\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        return crossLinePadding;\n    };\n    CartesianChart.prototype.applySeriesPadding = function (bounds) {\n        var _this = this;\n        var paddedRect = bounds.clone();\n        var reversedAxes = this.axes.slice().reverse();\n        directions.forEach(function (dir) {\n            var padding = _this.seriesAreaPadding[dir];\n            var axis = reversedAxes.find(function (axis) { return axis.position === dir; });\n            if (axis) {\n                axis.seriesAreaPadding = padding;\n            }\n            else {\n                paddedRect.shrink(padding, dir);\n            }\n        });\n        return paddedRect;\n    };\n    CartesianChart.prototype.buildAxisBound = function (bounds, axisWidths, crossLinePadding, visibility) {\n        var _a, _b, _c, _d;\n        var result = bounds.clone();\n        var _e = crossLinePadding.top, top = _e === void 0 ? 0 : _e, _f = crossLinePadding.right, right = _f === void 0 ? 0 : _f, _g = crossLinePadding.bottom, bottom = _g === void 0 ? 0 : _g, _h = crossLinePadding.left, left = _h === void 0 ? 0 : _h;\n        var horizontalPadding = left + right;\n        var verticalPadding = top + bottom;\n        var totalWidth = ((_a = axisWidths.left) !== null && _a !== void 0 ? _a : 0) + ((_b = axisWidths.right) !== null && _b !== void 0 ? _b : 0) + horizontalPadding;\n        var totalHeight = ((_c = axisWidths.top) !== null && _c !== void 0 ? _c : 0) + ((_d = axisWidths.bottom) !== null && _d !== void 0 ? _d : 0) + verticalPadding;\n        if (result.width <= totalWidth || result.height <= totalHeight) {\n            // Not enough space for crossLines and series\n            visibility.crossLines = false;\n            visibility.series = false;\n            return result;\n        }\n        result.x += left;\n        result.y += top;\n        result.width -= horizontalPadding;\n        result.height -= verticalPadding;\n        return result;\n    };\n    CartesianChart.prototype.buildSeriesRect = function (axisBound, axisWidths) {\n        var result = axisBound.clone();\n        var top = axisWidths.top, bottom = axisWidths.bottom, left = axisWidths.left, right = axisWidths.right;\n        result.x += left !== null && left !== void 0 ? left : 0;\n        result.y += top !== null && top !== void 0 ? top : 0;\n        result.width -= (left !== null && left !== void 0 ? left : 0) + (right !== null && right !== void 0 ? right : 0);\n        result.height -= (top !== null && top !== void 0 ? top : 0) + (bottom !== null && bottom !== void 0 ? bottom : 0);\n        // Width and height should not be negative.\n        result.width = Math.max(0, result.width);\n        result.height = Math.max(0, result.height);\n        return result;\n    };\n    CartesianChart.prototype.clampToOutsideSeriesRect = function (seriesRect, value, dimension, direction) {\n        var x = seriesRect.x, y = seriesRect.y, width = seriesRect.width, height = seriesRect.height;\n        var clampBounds = [x, y, x + width, y + height];\n        var fn = direction === 1 ? Math.min : Math.max;\n        var compareTo = clampBounds[(dimension === 'x' ? 0 : 1) + (direction === 1 ? 0 : 2)];\n        return fn(value, compareTo);\n    };\n    CartesianChart.prototype.calculateAxisDimensions = function (opts) {\n        var _a, _b, _c, _d, _e, _f;\n        var axis = opts.axis, seriesRect = opts.seriesRect, paddedBounds = opts.paddedBounds, axisWidths = opts.axisWidths, newAxisWidths = opts.newAxisWidths, primaryTickCounts = opts.primaryTickCounts, addInterAxisPadding = opts.addInterAxisPadding;\n        var clipSeries = opts.clipSeries;\n        var position = axis.position, direction = axis.direction;\n        var axisLeftRightRange = function (axis) {\n            if (axis instanceof CategoryAxis || axis instanceof GroupedCategoryAxis) {\n                return [0, seriesRect.height];\n            }\n            return [seriesRect.height, 0];\n        };\n        var axisOffset = (_a = newAxisWidths[position]) !== null && _a !== void 0 ? _a : 0;\n        switch (position) {\n            case 'top':\n            case 'bottom':\n                axis.range = [0, seriesRect.width];\n                axis.gridLength = seriesRect.height;\n                break;\n            case 'right':\n            case 'left':\n                axis.range = axisLeftRightRange(axis);\n                axis.gridLength = seriesRect.width;\n                break;\n        }\n        var zoom = (_b = this.zoomManager.getZoom()) === null || _b === void 0 ? void 0 : _b[axis.direction];\n        var _g = zoom !== null && zoom !== void 0 ? zoom : {}, _h = _g.min, min = _h === void 0 ? 0 : _h, _j = _g.max, max = _j === void 0 ? 1 : _j;\n        axis.visibleRange = [min, max];\n        if (!clipSeries && (axis.visibleRange[0] > 0 || axis.visibleRange[1] < 1)) {\n            clipSeries = true;\n        }\n        var primaryTickCount = axis.nice ? primaryTickCounts[direction] : undefined;\n        var paddedBoundsCoefficient = 0.3;\n        if (axis.thickness > 0) {\n            axis.maxThickness = axis.thickness;\n        }\n        else if (direction === ChartAxisDirection.Y) {\n            axis.maxThickness = paddedBounds.width * paddedBoundsCoefficient;\n        }\n        else {\n            axis.maxThickness = paddedBounds.height * paddedBoundsCoefficient;\n        }\n        primaryTickCount = axis.update(primaryTickCount);\n        primaryTickCounts[direction] = (_c = primaryTickCounts[direction]) !== null && _c !== void 0 ? _c : primaryTickCount;\n        var axisThickness = 0;\n        if (axis.thickness) {\n            axisThickness = axis.thickness;\n        }\n        else {\n            var bbox = axis.computeBBox();\n            axisThickness = direction === ChartAxisDirection.X ? bbox.height : bbox.width;\n        }\n        // for multiple axes in the same direction and position, apply padding at the top of each inner axis (i.e. between axes).\n        var axisPadding = 15;\n        if (addInterAxisPadding) {\n            axisThickness += axisPadding;\n        }\n        axisThickness = Math.ceil(axisThickness);\n        newAxisWidths[position] = ((_d = newAxisWidths[position]) !== null && _d !== void 0 ? _d : 0) + axisThickness;\n        axis.gridPadding = ((_e = axisWidths[position]) !== null && _e !== void 0 ? _e : 0) - ((_f = newAxisWidths[position]) !== null && _f !== void 0 ? _f : 0);\n        return { clipSeries: clipSeries, axisThickness: axisThickness, axisOffset: axisOffset };\n    };\n    CartesianChart.prototype.positionAxis = function (opts) {\n        var _a, _b, _c, _d;\n        var axis = opts.axis, axisBound = opts.axisBound, axisWidths = opts.axisWidths, seriesRect = opts.seriesRect, axisOffset = opts.axisOffset, axisThickness = opts.axisThickness;\n        var position = axis.position;\n        switch (position) {\n            case 'top':\n                axis.translation.x = axisBound.x + ((_a = axisWidths.left) !== null && _a !== void 0 ? _a : 0);\n                axis.translation.y = this.clampToOutsideSeriesRect(seriesRect, axisBound.y + 1 + axisOffset + axisThickness, 'y', 1);\n                break;\n            case 'bottom':\n                axis.translation.x = axisBound.x + ((_b = axisWidths.left) !== null && _b !== void 0 ? _b : 0);\n                axis.translation.y = this.clampToOutsideSeriesRect(seriesRect, axisBound.y + axisBound.height + 1 - axisThickness - axisOffset, 'y', -1);\n                break;\n            case 'left':\n                axis.translation.y = axisBound.y + ((_c = axisWidths.top) !== null && _c !== void 0 ? _c : 0);\n                axis.translation.x = this.clampToOutsideSeriesRect(seriesRect, axisBound.x + axisOffset + axisThickness, 'x', 1);\n                break;\n            case 'right':\n                axis.translation.y = axisBound.y + ((_d = axisWidths.top) !== null && _d !== void 0 ? _d : 0);\n                axis.translation.x = this.clampToOutsideSeriesRect(seriesRect, axisBound.x + axisBound.width - axisThickness - axisOffset, 'x', -1);\n                break;\n        }\n        axis.updatePosition({ rotation: toRadians$1(axis.rotation), sideFlag: axis.label.getSideFlag() });\n    };\n    CartesianChart.className = 'CartesianChart';\n    CartesianChart.type = 'cartesian';\n    return CartesianChart;\n}(Chart));\n\nvar __extends$w = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar PolarSeries = /** @class */ (function (_super) {\n    __extends$w(PolarSeries, _super);\n    function PolarSeries(_a) {\n        var _b, _c;\n        var moduleCtx = _a.moduleCtx, _d = _a.useLabelLayer, useLabelLayer = _d === void 0 ? false : _d, _e = _a.pickModes, pickModes = _e === void 0 ? [SeriesNodePickMode.EXACT_SHAPE_MATCH] : _e;\n        var _this = _super.call(this, {\n            moduleCtx: moduleCtx,\n            useLabelLayer: useLabelLayer,\n            pickModes: pickModes,\n            directionKeys: (_b = {},\n                _b[ChartAxisDirection.X] = ['angleKey'],\n                _b[ChartAxisDirection.Y] = ['radiusKey'],\n                _b),\n            directionNames: (_c = {},\n                _c[ChartAxisDirection.X] = ['angleName'],\n                _c[ChartAxisDirection.Y] = ['radiusName'],\n                _c),\n        }) || this;\n        /**\n         * The center of the polar series (for example, the center of a pie).\n         * If the polar chart has multiple series, all of them will have their\n         * center set to the same value as a result of the polar chart layout.\n         * The center coordinates are not supposed to be set by the user.\n         */\n        _this.centerX = 0;\n        _this.centerY = 0;\n        /**\n         * The maximum radius the series can use.\n         * This value is set automatically as a result of the polar chart layout\n         * and is not supposed to be set by the user.\n         */\n        _this.radius = 0;\n        return _this;\n    }\n    PolarSeries.prototype.getLabelData = function () {\n        return [];\n    };\n    PolarSeries.prototype.computeLabelsBBox = function (_options, _seriesRect) {\n        return null;\n    };\n    return PolarSeries;\n}(Series));\n\nfunction isPointInSector(x, y, sector) {\n    var radius = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));\n    var innerRadius = sector.innerRadius, outerRadius = sector.outerRadius;\n    if (radius < Math.min(innerRadius, outerRadius) || radius > Math.max(innerRadius, outerRadius)) {\n        return false;\n    }\n    // Start and End angles are expected to be [-90, 270]\n    // while Math.atan2 returns [-180, 180]\n    var angle = Math.atan2(y, x);\n    if (angle < -Math.PI / 2) {\n        angle += 2 * Math.PI;\n    }\n    // Start is actually bigger than End clock-wise\n    var startAngle = sector.startAngle, endAngle = sector.endAngle;\n    if (endAngle === -Math.PI / 2) {\n        return angle < startAngle;\n    }\n    if (startAngle === (3 * Math.PI) / 2) {\n        return angle > endAngle;\n    }\n    return angle <= endAngle && angle >= startAngle;\n}\nfunction lineCollidesSector(line, sector) {\n    var startAngle = sector.startAngle, endAngle = sector.endAngle, innerRadius = sector.innerRadius, outerRadius = sector.outerRadius;\n    var outerStart = { x: outerRadius * Math.cos(startAngle), y: outerRadius * Math.sin(startAngle) };\n    var outerEnd = { x: outerRadius * Math.cos(endAngle), y: outerRadius * Math.sin(endAngle) };\n    var innerStart = innerRadius === 0\n        ? { x: 0, y: 0 }\n        : { x: innerRadius * Math.cos(startAngle), y: innerRadius * Math.sin(startAngle) };\n    var innerEnd = innerRadius === 0\n        ? { x: 0, y: 0 }\n        : { x: innerRadius * Math.cos(endAngle), y: innerRadius * Math.sin(endAngle) };\n    return (segmentIntersection(line.start.x, line.start.y, line.end.x, line.end.y, outerStart.x, outerStart.y, innerStart.x, innerStart.y) != null ||\n        segmentIntersection(line.start.x, line.start.y, line.end.x, line.end.y, outerEnd.x, outerEnd.y, innerEnd.x, innerEnd.y) != null ||\n        arcIntersections(0, 0, outerRadius, startAngle, endAngle, true, line.start.x, line.start.y, line.end.x, line.end.y).length > 0);\n}\nfunction boxCollidesSector(box, sector) {\n    var topLeft = { x: box.x, y: box.y };\n    var topRight = { x: box.x + box.width, y: box.y };\n    var bottomLeft = { x: box.x, y: box.y + box.height };\n    var bottomRight = { x: box.x + box.width, y: box.y + box.height };\n    return (lineCollidesSector({ start: topLeft, end: topRight }, sector) ||\n        lineCollidesSector({ start: bottomLeft, end: bottomRight }, sector));\n}\n\nvar __extends$v = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1x = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar Sector = /** @class */ (function (_super) {\n    __extends$v(Sector, _super);\n    function Sector() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.centerX = 0;\n        _this.centerY = 0;\n        _this.innerRadius = 10;\n        _this.outerRadius = 20;\n        _this.startAngle = 0;\n        _this.endAngle = Math.PI * 2;\n        _this.angleOffset = 0;\n        return _this;\n    }\n    Sector.prototype.computeBBox = function () {\n        var radius = this.outerRadius;\n        return new BBox(this.centerX - radius, this.centerY - radius, radius * 2, radius * 2);\n    };\n    Sector.prototype.updatePath = function () {\n        var path = this.path;\n        var angleOffset = this.angleOffset;\n        var startAngle = Math.min(this.startAngle, this.endAngle) + angleOffset;\n        var endAngle = Math.max(this.startAngle, this.endAngle) + angleOffset;\n        var innerRadius = Math.min(this.innerRadius, this.outerRadius);\n        var outerRadius = Math.max(this.innerRadius, this.outerRadius);\n        var fullPie = isEqual$2(normalizeAngle360(this.startAngle), normalizeAngle360(this.endAngle));\n        var centerX = this.centerX;\n        var centerY = this.centerY;\n        path.clear();\n        if (fullPie) {\n            path.arc(centerX, centerY, outerRadius, startAngle, endAngle);\n            if (innerRadius > 0) {\n                path.moveTo(centerX + innerRadius * Math.cos(endAngle), centerY + innerRadius * Math.sin(endAngle));\n                path.arc(centerX, centerY, innerRadius, endAngle, startAngle, true);\n            }\n        }\n        else {\n            path.moveTo(centerX + innerRadius * Math.cos(startAngle), centerY + innerRadius * Math.sin(startAngle));\n            path.arc(centerX, centerY, outerRadius, startAngle, endAngle);\n            if (innerRadius > 0) {\n                path.arc(centerX, centerY, innerRadius, endAngle, startAngle, true);\n            }\n            else {\n                path.lineTo(centerX, centerY);\n            }\n        }\n        path.closePath();\n        this.dirtyPath = false;\n    };\n    Sector.prototype.isPointInPath = function (x, y) {\n        var angleOffset = this.angleOffset;\n        var startAngle = this.startAngle + angleOffset;\n        var endAngle = this.endAngle + angleOffset;\n        var innerRadius = Math.min(this.innerRadius, this.outerRadius);\n        var outerRadius = Math.max(this.innerRadius, this.outerRadius);\n        var point = this.transformPoint(x, y);\n        return isPointInSector(point.x, point.y, { startAngle: startAngle, endAngle: endAngle, innerRadius: innerRadius, outerRadius: outerRadius });\n    };\n    Sector.className = 'Sector';\n    __decorate$1x([\n        ScenePathChangeDetection()\n    ], Sector.prototype, \"centerX\", void 0);\n    __decorate$1x([\n        ScenePathChangeDetection()\n    ], Sector.prototype, \"centerY\", void 0);\n    __decorate$1x([\n        ScenePathChangeDetection()\n    ], Sector.prototype, \"innerRadius\", void 0);\n    __decorate$1x([\n        ScenePathChangeDetection()\n    ], Sector.prototype, \"outerRadius\", void 0);\n    __decorate$1x([\n        ScenePathChangeDetection()\n    ], Sector.prototype, \"startAngle\", void 0);\n    __decorate$1x([\n        ScenePathChangeDetection()\n    ], Sector.prototype, \"endAngle\", void 0);\n    __decorate$1x([\n        ScenePathChangeDetection()\n    ], Sector.prototype, \"angleOffset\", void 0);\n    return Sector;\n}(Path));\n\nvar __read$f = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$9 = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar __values$9 = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar SMALLEST_KEY_INTERVAL = {\n    type: 'reducer',\n    property: 'smallestKeyInterval',\n    initialValue: Infinity,\n    reducer: function () {\n        var prevX = NaN;\n        return function (smallestSoFar, next) {\n            var nextX = next.keys[0];\n            var interval = Math.abs(nextX - prevX);\n            prevX = nextX;\n            if (!isNaN(interval) && interval > 0 && interval < smallestSoFar) {\n                return interval;\n            }\n            return smallestSoFar;\n        };\n    },\n};\nvar AGG_VALUES_EXTENT = {\n    type: 'processor',\n    property: 'aggValuesExtent',\n    calculate: function (processedData) {\n        var e_1, _a;\n        var _b, _c, _d, _e;\n        var result = __spreadArray$9([], __read$f(((_c = (_b = processedData.domain.aggValues) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : [0, 0])));\n        try {\n            for (var _f = __values$9((_e = (_d = processedData.domain.aggValues) === null || _d === void 0 ? void 0 : _d.slice(1)) !== null && _e !== void 0 ? _e : []), _g = _f.next(); !_g.done; _g = _f.next()) {\n                var _h = __read$f(_g.value, 2), min = _h[0], max = _h[1];\n                if (min < result[0]) {\n                    result[0] = min;\n                }\n                if (max > result[1]) {\n                    result[1] = max;\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_g && !_g.done && (_a = _f.return)) _a.call(_f);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return result;\n    },\n};\nvar SORT_DOMAIN_GROUPS = {\n    type: 'processor',\n    property: 'sortedGroupDomain',\n    calculate: function (_a) {\n        var groups = _a.domain.groups;\n        if (groups == null)\n            return undefined;\n        return __spreadArray$9([], __read$f(groups)).sort(function (a, b) {\n            for (var i = 0; i < a.length; i++) {\n                var result = a[i] - b[i];\n                if (result !== 0) {\n                    return result;\n                }\n            }\n            return 0;\n        });\n    },\n};\nfunction normaliseGroupTo(properties, normaliseTo, mode) {\n    if (mode === void 0) { mode = 'sum'; }\n    var normalise = function (val, extent) {\n        var result = (val * normaliseTo) / extent;\n        if (result >= 0) {\n            return Math.min(normaliseTo, result);\n        }\n        return Math.max(-normaliseTo, result);\n    };\n    return {\n        type: 'group-value-processor',\n        properties: properties,\n        adjust: function () { return function (values, valueIndexes) {\n            var e_2, _a, e_3, _b;\n            var valuesExtent = [0, 0];\n            try {\n                for (var valueIndexes_1 = __values$9(valueIndexes), valueIndexes_1_1 = valueIndexes_1.next(); !valueIndexes_1_1.done; valueIndexes_1_1 = valueIndexes_1.next()) {\n                    var valueIdx = valueIndexes_1_1.value;\n                    var value = values[valueIdx];\n                    var valIdx = value < 0 ? 0 : 1;\n                    if (mode === 'sum') {\n                        valuesExtent[valIdx] += value;\n                    }\n                    else if (valIdx === 0) {\n                        valuesExtent[valIdx] = Math.min(valuesExtent[valIdx], value);\n                    }\n                    else {\n                        valuesExtent[valIdx] = Math.max(valuesExtent[valIdx], value);\n                    }\n                }\n            }\n            catch (e_2_1) { e_2 = { error: e_2_1 }; }\n            finally {\n                try {\n                    if (valueIndexes_1_1 && !valueIndexes_1_1.done && (_a = valueIndexes_1.return)) _a.call(valueIndexes_1);\n                }\n                finally { if (e_2) throw e_2.error; }\n            }\n            var extent = Math.max(Math.abs(valuesExtent[0]), valuesExtent[1]);\n            try {\n                for (var valueIndexes_2 = __values$9(valueIndexes), valueIndexes_2_1 = valueIndexes_2.next(); !valueIndexes_2_1.done; valueIndexes_2_1 = valueIndexes_2.next()) {\n                    var valueIdx = valueIndexes_2_1.value;\n                    values[valueIdx] = normalise(values[valueIdx], extent);\n                }\n            }\n            catch (e_3_1) { e_3 = { error: e_3_1 }; }\n            finally {\n                try {\n                    if (valueIndexes_2_1 && !valueIndexes_2_1.done && (_b = valueIndexes_2.return)) _b.call(valueIndexes_2);\n                }\n                finally { if (e_3) throw e_3.error; }\n            }\n        }; },\n    };\n}\nfunction normalisePropertyTo(property, normaliseTo, rangeMin, rangeMax) {\n    var normaliseSpan = normaliseTo[1] - normaliseTo[0];\n    var normalise = function (val, start, span) {\n        var result = normaliseTo[0] + ((val - start) / span) * normaliseSpan;\n        if (span === 0)\n            return normaliseTo[1];\n        if (result >= normaliseTo[1])\n            return normaliseTo[1];\n        if (result < normaliseTo[0])\n            return normaliseTo[0];\n        return result;\n    };\n    return {\n        type: 'property-value-processor',\n        property: property,\n        adjust: function () { return function (pData, pIdx) {\n            var e_4, _a, e_5, _b;\n            var _c = __read$f(pData.domain.values[pIdx], 2), start = _c[0], end = _c[1];\n            if (rangeMin != null)\n                start = rangeMin;\n            if (rangeMax != null)\n                end = rangeMax;\n            var span = end - start;\n            pData.domain.values[pIdx] = [normaliseTo[0], normaliseTo[1]];\n            try {\n                for (var _d = __values$9(pData.data), _e = _d.next(); !_e.done; _e = _d.next()) {\n                    var group = _e.value;\n                    var groupValues = group.values;\n                    if (pData.type === 'ungrouped') {\n                        groupValues = [groupValues];\n                    }\n                    try {\n                        for (var groupValues_1 = (e_5 = void 0, __values$9(groupValues)), groupValues_1_1 = groupValues_1.next(); !groupValues_1_1.done; groupValues_1_1 = groupValues_1.next()) {\n                            var values = groupValues_1_1.value;\n                            values[pIdx] = normalise(values[pIdx], start, span);\n                        }\n                    }\n                    catch (e_5_1) { e_5 = { error: e_5_1 }; }\n                    finally {\n                        try {\n                            if (groupValues_1_1 && !groupValues_1_1.done && (_b = groupValues_1.return)) _b.call(groupValues_1);\n                        }\n                        finally { if (e_5) throw e_5.error; }\n                    }\n                }\n            }\n            catch (e_4_1) { e_4 = { error: e_4_1 }; }\n            finally {\n                try {\n                    if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n                }\n                finally { if (e_4) throw e_4.error; }\n            }\n        }; },\n    };\n}\n\nvar __extends$u = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign$f = (undefined && undefined.__assign) || function () {\n    __assign$f = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$f.apply(this, arguments);\n};\nvar __decorate$1w = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter$9 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator$9 = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __read$e = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$8 = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar PieSeriesNodeBaseClickEvent = /** @class */ (function (_super) {\n    __extends$u(PieSeriesNodeBaseClickEvent, _super);\n    function PieSeriesNodeBaseClickEvent(angleKey, calloutLabelKey, sectorLabelKey, radiusKey, nativeEvent, datum, series) {\n        var _this = _super.call(this, nativeEvent, datum, series) || this;\n        _this.angleKey = angleKey;\n        _this.calloutLabelKey = calloutLabelKey;\n        _this.sectorLabelKey = sectorLabelKey;\n        _this.radiusKey = radiusKey;\n        return _this;\n    }\n    return PieSeriesNodeBaseClickEvent;\n}(SeriesNodeBaseClickEvent));\nvar PieSeriesNodeClickEvent = /** @class */ (function (_super) {\n    __extends$u(PieSeriesNodeClickEvent, _super);\n    function PieSeriesNodeClickEvent() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'nodeClick';\n        return _this;\n    }\n    return PieSeriesNodeClickEvent;\n}(PieSeriesNodeBaseClickEvent));\nvar PieSeriesNodeDoubleClickEvent = /** @class */ (function (_super) {\n    __extends$u(PieSeriesNodeDoubleClickEvent, _super);\n    function PieSeriesNodeDoubleClickEvent() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'nodeDoubleClick';\n        return _this;\n    }\n    return PieSeriesNodeDoubleClickEvent;\n}(PieSeriesNodeBaseClickEvent));\nvar PieNodeTag;\n(function (PieNodeTag) {\n    PieNodeTag[PieNodeTag[\"Sector\"] = 0] = \"Sector\";\n    PieNodeTag[PieNodeTag[\"Callout\"] = 1] = \"Callout\";\n    PieNodeTag[PieNodeTag[\"Label\"] = 2] = \"Label\";\n})(PieNodeTag || (PieNodeTag = {}));\nvar PieSeriesCalloutLabel = /** @class */ (function (_super) {\n    __extends$u(PieSeriesCalloutLabel, _super);\n    function PieSeriesCalloutLabel() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.offset = 3; // from the callout line\n        _this.minAngle = 0; // in degrees\n        _this.formatter = undefined;\n        _this.minSpacing = 4;\n        _this.maxCollisionOffset = 50;\n        return _this;\n    }\n    __decorate$1w([\n        Validate(NUMBER(0))\n    ], PieSeriesCalloutLabel.prototype, \"offset\", void 0);\n    __decorate$1w([\n        Validate(NUMBER(0))\n    ], PieSeriesCalloutLabel.prototype, \"minAngle\", void 0);\n    __decorate$1w([\n        Validate(OPT_FUNCTION)\n    ], PieSeriesCalloutLabel.prototype, \"formatter\", void 0);\n    __decorate$1w([\n        Validate(NUMBER(0))\n    ], PieSeriesCalloutLabel.prototype, \"minSpacing\", void 0);\n    __decorate$1w([\n        Validate(NUMBER(0))\n    ], PieSeriesCalloutLabel.prototype, \"maxCollisionOffset\", void 0);\n    return PieSeriesCalloutLabel;\n}(Label$1));\nvar PieSeriesSectorLabel = /** @class */ (function (_super) {\n    __extends$u(PieSeriesSectorLabel, _super);\n    function PieSeriesSectorLabel() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.positionOffset = 0;\n        _this.positionRatio = 0.5;\n        _this.formatter = undefined;\n        return _this;\n    }\n    __decorate$1w([\n        Validate(NUMBER())\n    ], PieSeriesSectorLabel.prototype, \"positionOffset\", void 0);\n    __decorate$1w([\n        Validate(NUMBER(0, 1))\n    ], PieSeriesSectorLabel.prototype, \"positionRatio\", void 0);\n    __decorate$1w([\n        Validate(OPT_FUNCTION)\n    ], PieSeriesSectorLabel.prototype, \"formatter\", void 0);\n    return PieSeriesSectorLabel;\n}(Label$1));\nvar PieSeriesCalloutLine = /** @class */ (function () {\n    function PieSeriesCalloutLine() {\n        this.colors = undefined;\n        this.length = 10;\n        this.strokeWidth = 1;\n    }\n    __decorate$1w([\n        Validate(OPT_COLOR_STRING_ARRAY)\n    ], PieSeriesCalloutLine.prototype, \"colors\", void 0);\n    __decorate$1w([\n        Validate(NUMBER(0))\n    ], PieSeriesCalloutLine.prototype, \"length\", void 0);\n    __decorate$1w([\n        Validate(NUMBER(0))\n    ], PieSeriesCalloutLine.prototype, \"strokeWidth\", void 0);\n    return PieSeriesCalloutLine;\n}());\nvar PieSeriesTooltip = /** @class */ (function (_super) {\n    __extends$u(PieSeriesTooltip, _super);\n    function PieSeriesTooltip() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.renderer = undefined;\n        return _this;\n    }\n    __decorate$1w([\n        Validate(OPT_FUNCTION)\n    ], PieSeriesTooltip.prototype, \"renderer\", void 0);\n    return PieSeriesTooltip;\n}(SeriesTooltip));\nvar PieTitle = /** @class */ (function (_super) {\n    __extends$u(PieTitle, _super);\n    function PieTitle() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.showInLegend = false;\n        return _this;\n    }\n    __decorate$1w([\n        Validate(BOOLEAN)\n    ], PieTitle.prototype, \"showInLegend\", void 0);\n    return PieTitle;\n}(Caption));\nvar DoughnutInnerLabel = /** @class */ (function (_super) {\n    __extends$u(DoughnutInnerLabel, _super);\n    function DoughnutInnerLabel() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.text = '';\n        _this.margin = 2;\n        return _this;\n    }\n    __decorate$1w([\n        Validate(STRING)\n    ], DoughnutInnerLabel.prototype, \"text\", void 0);\n    __decorate$1w([\n        Validate(NUMBER())\n    ], DoughnutInnerLabel.prototype, \"margin\", void 0);\n    return DoughnutInnerLabel;\n}(Label$1));\nvar DoughnutInnerCircle = /** @class */ (function () {\n    function DoughnutInnerCircle() {\n        this.fill = 'transparent';\n        this.fillOpacity = 1;\n    }\n    __decorate$1w([\n        Validate(COLOR_STRING)\n    ], DoughnutInnerCircle.prototype, \"fill\", void 0);\n    __decorate$1w([\n        Validate(OPT_NUMBER(0, 1))\n    ], DoughnutInnerCircle.prototype, \"fillOpacity\", void 0);\n    return DoughnutInnerCircle;\n}());\nvar PieStateMachine = /** @class */ (function (_super) {\n    __extends$u(PieStateMachine, _super);\n    function PieStateMachine() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return PieStateMachine;\n}(StateMachine));\nvar PieSeries = /** @class */ (function (_super) {\n    __extends$u(PieSeries, _super);\n    function PieSeries(moduleCtx) {\n        var _this = _super.call(this, { moduleCtx: moduleCtx, useLabelLayer: true }) || this;\n        _this.radiusScale = new LinearScale$1();\n        _this.groupSelection = Selection.select(_this.contentGroup, Group);\n        _this.highlightSelection = Selection.select(_this.highlightGroup, Group);\n        _this.nodeData = [];\n        // When a user toggles a series item (e.g. from the legend), its boolean state is recorded here.\n        _this.seriesItemEnabled = [];\n        _this.title = undefined;\n        _this.calloutLabel = new PieSeriesCalloutLabel();\n        _this.sectorLabel = new PieSeriesSectorLabel();\n        _this.calloutLine = new PieSeriesCalloutLine();\n        _this.tooltip = new PieSeriesTooltip();\n        /**\n         * The key of the numeric field to use to determine the angle (for example,\n         * a pie sector angle).\n         */\n        _this.angleKey = '';\n        _this.angleName = '';\n        _this.innerLabels = [];\n        _this.innerCircle = undefined;\n        /**\n         * The key of the numeric field to use to determine the radii of pie sectors.\n         * The largest value will correspond to the full radius and smaller values to\n         * proportionally smaller radii.\n         */\n        _this.radiusKey = undefined;\n        _this.radiusName = undefined;\n        _this.radiusMin = undefined;\n        _this.radiusMax = undefined;\n        _this.calloutLabelKey = undefined;\n        _this.calloutLabelName = undefined;\n        _this.sectorLabelKey = undefined;\n        _this.sectorLabelName = undefined;\n        _this.legendItemKey = undefined;\n        _this.fills = ['#c16068', '#a2bf8a', '#ebcc87', '#80a0c3', '#b58dae', '#85c0d1'];\n        _this.strokes = ['#874349', '#718661', '#a48f5f', '#5a7088', '#7f637a', '#5d8692'];\n        _this.fillOpacity = 1;\n        _this.strokeOpacity = 1;\n        _this.lineDash = [0];\n        _this.lineDashOffset = 0;\n        _this.formatter = undefined;\n        /**\n         * The series rotation in degrees.\n         */\n        _this.rotation = 0;\n        _this.outerRadiusOffset = 0;\n        _this.outerRadiusRatio = 1;\n        _this.innerRadiusOffset = 0;\n        _this.innerRadiusRatio = 1;\n        _this.strokeWidth = 1;\n        _this.shadow = undefined;\n        _this.highlightStyle = new HighlightStyle();\n        _this.surroundingRadius = undefined;\n        _this.angleScale = new LinearScale$1();\n        // Each sector is a ratio of the whole, where all ratios add up to 1.\n        _this.angleScale.domain = [0, 1];\n        // Add 90 deg to start the first pie at 12 o'clock.\n        _this.angleScale.range = [-Math.PI, Math.PI].map(function (angle) { return angle + Math.PI / 2; });\n        _this.backgroundGroup = _this.rootGroup.appendChild(new Group({\n            name: _this.id + \"-background\",\n            layer: true,\n            zIndex: Layers.SERIES_BACKGROUND_ZINDEX,\n        }));\n        var pieCalloutLabels = new Group({ name: 'pieCalloutLabels' });\n        var pieSectorLabels = new Group({ name: 'pieSectorLabels' });\n        var innerLabels = new Group({ name: 'innerLabels' });\n        _this.labelGroup.append(pieCalloutLabels);\n        _this.labelGroup.append(pieSectorLabels);\n        _this.labelGroup.append(innerLabels);\n        _this.calloutLabelSelection = Selection.select(pieCalloutLabels, Group);\n        _this.sectorLabelSelection = Selection.select(pieSectorLabels, Text);\n        _this.innerLabelsSelection = Selection.select(innerLabels, Text);\n        _this.animationState = new PieStateMachine('empty', {\n            empty: {\n                on: {\n                    update: {\n                        target: 'ready',\n                        action: function () { return _this.animateEmptyUpdateReady(); },\n                    },\n                },\n            },\n            ready: {\n                on: {\n                    update: {\n                        target: 'ready',\n                        action: function () { return _this.animateReadyUpdateReady(); },\n                    },\n                },\n            },\n        });\n        return _this;\n    }\n    Object.defineProperty(PieSeries.prototype, \"data\", {\n        get: function () {\n            return this._data;\n        },\n        set: function (input) {\n            this._data = input;\n            this.processSeriesItemEnabled();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    PieSeries.prototype.addChartEventListeners = function () {\n        var _this = this;\n        var _a;\n        (_a = this.chartEventManager) === null || _a === void 0 ? void 0 : _a.addListener('legend-item-click', function (event) { return _this.onLegendItemClick(event); });\n    };\n    PieSeries.prototype.visibleChanged = function () {\n        this.processSeriesItemEnabled();\n    };\n    PieSeries.prototype.processSeriesItemEnabled = function () {\n        var _a;\n        var _b = this, data = _b.data, visible = _b.visible;\n        this.seriesItemEnabled = (_a = data === null || data === void 0 ? void 0 : data.map(function () { return visible; })) !== null && _a !== void 0 ? _a : [];\n    };\n    PieSeries.prototype.getDomain = function (direction) {\n        if (direction === ChartAxisDirection.X) {\n            return this.angleScale.domain;\n        }\n        else {\n            return this.radiusScale.domain;\n        }\n    };\n    PieSeries.prototype.processData = function () {\n        var _a, _b;\n        return __awaiter$9(this, void 0, void 0, function () {\n            var _c, data, _d, angleKey, radiusKey, seriesItemEnabled, extraProps;\n            return __generator$9(this, function (_e) {\n                _c = this.data, data = _c === void 0 ? [] : _c;\n                _d = this, angleKey = _d.angleKey, radiusKey = _d.radiusKey, seriesItemEnabled = _d.seriesItemEnabled;\n                if (!angleKey)\n                    return [2 /*return*/];\n                extraProps = [];\n                if (radiusKey) {\n                    extraProps.push(rangedValueProperty(radiusKey, { id: 'radiusValue', min: (_a = this.radiusMin) !== null && _a !== void 0 ? _a : 0, max: this.radiusMax }), valueProperty(radiusKey, true, { id: \"radiusRaw\" }), // Raw value pass-through.\n                    normalisePropertyTo({ id: 'radiusValue' }, [0, 1], (_b = this.radiusMin) !== null && _b !== void 0 ? _b : 0, this.radiusMax));\n                    extraProps.push();\n                }\n                data = data.map(function (d, idx) {\n                    var _a;\n                    return (seriesItemEnabled[idx] ? d : __assign$f(__assign$f({}, d), (_a = {}, _a[angleKey] = 0, _a)));\n                });\n                this.dataModel = new DataModel({\n                    props: __spreadArray$8([\n                        accumulativeValueProperty(angleKey, true, { id: \"angleValue\" }),\n                        valueProperty(angleKey, true, { id: \"angleRaw\" }),\n                        normalisePropertyTo({ id: 'angleValue' }, [0, 1], 0)\n                    ], __read$e(extraProps)),\n                });\n                this.processedData = this.dataModel.processData(data);\n                return [2 /*return*/];\n            });\n        });\n    };\n    PieSeries.prototype.maybeRefreshNodeData = function () {\n        if (!this.nodeDataRefresh)\n            return;\n        var _a = __read$e(this._createNodeData(), 1), _b = _a[0], _c = _b === void 0 ? {} : _b, _d = _c.nodeData, nodeData = _d === void 0 ? [] : _d;\n        this.nodeData = nodeData;\n        this.nodeDataRefresh = false;\n    };\n    PieSeries.prototype.createNodeData = function () {\n        return __awaiter$9(this, void 0, void 0, function () {\n            return __generator$9(this, function (_a) {\n                return [2 /*return*/, this._createNodeData()];\n            });\n        });\n    };\n    PieSeries.prototype._createNodeData = function () {\n        var _this = this;\n        var _a, _b, _c, _d;\n        var _e = this, seriesId = _e.id, processedData = _e.processedData, dataModel = _e.dataModel, rotation = _e.rotation, angleScale = _e.angleScale;\n        if (!processedData || !dataModel || processedData.type !== 'ungrouped')\n            return [];\n        var angleIdx = (_b = (_a = dataModel.resolveProcessedDataIndexById(\"angleValue\")) === null || _a === void 0 ? void 0 : _a.index) !== null && _b !== void 0 ? _b : -1;\n        var radiusIdx = (_d = (_c = dataModel.resolveProcessedDataIndexById(\"radiusValue\")) === null || _c === void 0 ? void 0 : _c.index) !== null && _d !== void 0 ? _d : -1;\n        if (angleIdx < 0)\n            return [];\n        var currentStart = 0;\n        var nodeData = processedData.data.map(function (group, index) {\n            var _a;\n            var datum = group.datum, values = group.values;\n            var currentValue = values[angleIdx];\n            var startAngle = angleScale.convert(currentStart) + toRadians$1(rotation);\n            currentStart = currentValue;\n            var endAngle = angleScale.convert(currentStart) + toRadians$1(rotation);\n            var span = Math.abs(endAngle - startAngle);\n            var midAngle = startAngle + span / 2;\n            var angleValue = values[angleIdx + 1];\n            var radius = radiusIdx >= 0 ? (_a = values[radiusIdx]) !== null && _a !== void 0 ? _a : 1 : 1;\n            var radiusValue = radiusIdx >= 0 ? values[radiusIdx + 1] : undefined;\n            var labels = _this.getLabels(datum, midAngle, span, true);\n            var sectorFormat = _this.getSectorFormat(datum, index, index, false);\n            return __assign$f({ itemId: index, series: _this, datum: datum, index: index, angleValue: angleValue, midAngle: midAngle, midCos: Math.cos(midAngle), midSin: Math.sin(midAngle), startAngle: startAngle, endAngle: endAngle, sectorFormat: sectorFormat, radius: radius, radiusValue: radiusValue }, labels);\n        });\n        return [\n            {\n                itemId: seriesId,\n                nodeData: nodeData,\n                labelData: nodeData,\n            },\n        ];\n    };\n    PieSeries.prototype.getLabels = function (datum, midAngle, span, skipDisabled) {\n        var _a = this, calloutLabel = _a.calloutLabel, sectorLabel = _a.sectorLabel, legendItemKey = _a.legendItemKey, callbackCache = _a.ctx.callbackCache;\n        var calloutLabelKey = !skipDisabled || calloutLabel.enabled ? this.calloutLabelKey : undefined;\n        var sectorLabelKey = !skipDisabled || sectorLabel.enabled ? this.sectorLabelKey : undefined;\n        if (!calloutLabelKey && !sectorLabelKey && !legendItemKey)\n            return {};\n        var labelFormatterParams = this.getLabelFormatterParams(datum);\n        var calloutLabelText;\n        if (calloutLabelKey) {\n            var calloutLabelMinAngle = toRadians$1(calloutLabel.minAngle);\n            var calloutLabelVisible = span > calloutLabelMinAngle;\n            if (!calloutLabelVisible) {\n                calloutLabelText = undefined;\n            }\n            else if (calloutLabel.formatter) {\n                calloutLabelText = callbackCache.call(calloutLabel.formatter, labelFormatterParams);\n            }\n            else {\n                calloutLabelText = String(datum[calloutLabelKey]);\n            }\n        }\n        var sectorLabelText;\n        if (sectorLabelKey) {\n            if (sectorLabel.formatter) {\n                sectorLabelText = callbackCache.call(sectorLabel.formatter, labelFormatterParams);\n            }\n            else {\n                sectorLabelText = String(datum[sectorLabelKey]);\n            }\n        }\n        var legendItemText;\n        if (legendItemKey) {\n            legendItemText = String(datum[legendItemKey]);\n        }\n        return __assign$f(__assign$f(__assign$f({}, (calloutLabelText != null\n            ? {\n                calloutLabel: __assign$f(__assign$f({}, this.getTextAlignment(midAngle)), { text: calloutLabelText, hidden: false, collisionTextAlign: undefined, collisionOffsetY: 0, box: undefined }),\n            }\n            : {})), (sectorLabelText != null ? { sectorLabel: { text: sectorLabelText } } : {})), (legendItemKey != null && legendItemText != null\n            ? { legendItem: { key: legendItemKey, text: legendItemText } }\n            : {}));\n    };\n    PieSeries.prototype.getLabelFormatterParams = function (datum) {\n        var _a = this, seriesId = _a.id, radiusKey = _a.radiusKey, radiusName = _a.radiusName, angleKey = _a.angleKey, angleName = _a.angleName, calloutLabelKey = _a.calloutLabelKey, calloutLabelName = _a.calloutLabelName, sectorLabelKey = _a.sectorLabelKey, sectorLabelName = _a.sectorLabelName;\n        return {\n            datum: datum,\n            angleKey: angleKey,\n            angleValue: datum[angleKey],\n            angleName: angleName,\n            radiusKey: radiusKey,\n            radiusValue: radiusKey ? datum[radiusKey] : undefined,\n            radiusName: radiusName,\n            calloutLabelKey: calloutLabelKey,\n            calloutLabelValue: calloutLabelKey ? datum[calloutLabelKey] : undefined,\n            calloutLabelName: calloutLabelName,\n            sectorLabelKey: sectorLabelKey,\n            sectorLabelValue: sectorLabelKey ? datum[sectorLabelKey] : undefined,\n            sectorLabelName: sectorLabelName,\n            seriesId: seriesId,\n        };\n    };\n    PieSeries.prototype.getTextAlignment = function (midAngle) {\n        var quadrantTextOpts = [\n            { textAlign: 'center', textBaseline: 'bottom' },\n            { textAlign: 'left', textBaseline: 'middle' },\n            { textAlign: 'center', textBaseline: 'hanging' },\n            { textAlign: 'right', textBaseline: 'middle' },\n        ];\n        var midAngle180 = normalizeAngle180(midAngle);\n        // Split the circle into quadrants like so: ⊗\n        var quadrantStart = (-3 * Math.PI) / 4; // same as `normalizeAngle180(toRadians(-135))`\n        var quadrantOffset = midAngle180 - quadrantStart;\n        var quadrant = Math.floor(quadrantOffset / (Math.PI / 2));\n        var quadrantIndex = mod(quadrant, quadrantTextOpts.length);\n        return quadrantTextOpts[quadrantIndex];\n    };\n    PieSeries.prototype.getSectorFormat = function (datum, itemId, index, highlight) {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n        var _k = this, angleKey = _k.angleKey, radiusKey = _k.radiusKey, fills = _k.fills, strokes = _k.strokes, seriesFillOpacity = _k.fillOpacity, formatter = _k.formatter, seriesId = _k.id, callbackCache = _k.ctx.callbackCache;\n        var highlightedDatum = (_a = this.highlightManager) === null || _a === void 0 ? void 0 : _a.getActiveHighlight();\n        var isDatumHighlighted = highlight && (highlightedDatum === null || highlightedDatum === void 0 ? void 0 : highlightedDatum.series) === this && itemId === highlightedDatum.itemId;\n        var highlightedStyle = isDatumHighlighted ? this.highlightStyle.item : null;\n        var fill = (_b = highlightedStyle === null || highlightedStyle === void 0 ? void 0 : highlightedStyle.fill) !== null && _b !== void 0 ? _b : fills[index % fills.length];\n        var fillOpacity = (_c = highlightedStyle === null || highlightedStyle === void 0 ? void 0 : highlightedStyle.fillOpacity) !== null && _c !== void 0 ? _c : seriesFillOpacity;\n        var stroke = (_d = highlightedStyle === null || highlightedStyle === void 0 ? void 0 : highlightedStyle.stroke) !== null && _d !== void 0 ? _d : strokes[index % strokes.length];\n        var strokeWidth = (_e = highlightedStyle === null || highlightedStyle === void 0 ? void 0 : highlightedStyle.strokeWidth) !== null && _e !== void 0 ? _e : this.getStrokeWidth(this.strokeWidth);\n        var format;\n        if (formatter) {\n            format = callbackCache.call(formatter, {\n                datum: datum,\n                angleKey: angleKey,\n                radiusKey: radiusKey,\n                fill: fill,\n                stroke: stroke,\n                strokeWidth: strokeWidth,\n                highlighted: isDatumHighlighted,\n                seriesId: seriesId,\n            });\n        }\n        return {\n            fill: (_f = format === null || format === void 0 ? void 0 : format.fill) !== null && _f !== void 0 ? _f : fill,\n            fillOpacity: (_g = format === null || format === void 0 ? void 0 : format.fillOpacity) !== null && _g !== void 0 ? _g : fillOpacity,\n            stroke: (_h = format === null || format === void 0 ? void 0 : format.stroke) !== null && _h !== void 0 ? _h : stroke,\n            strokeWidth: (_j = format === null || format === void 0 ? void 0 : format.strokeWidth) !== null && _j !== void 0 ? _j : strokeWidth,\n        };\n    };\n    PieSeries.prototype.getInnerRadius = function () {\n        var _a = this, radius = _a.radius, innerRadiusRatio = _a.innerRadiusRatio, innerRadiusOffset = _a.innerRadiusOffset;\n        var innerRadius = radius * (innerRadiusRatio !== null && innerRadiusRatio !== void 0 ? innerRadiusRatio : 1) + (innerRadiusOffset ? innerRadiusOffset : 0);\n        if (innerRadius === radius || innerRadius < 0) {\n            return 0;\n        }\n        return innerRadius;\n    };\n    PieSeries.prototype.getOuterRadius = function () {\n        var _a = this, radius = _a.radius, outerRadiusRatio = _a.outerRadiusRatio, outerRadiusOffset = _a.outerRadiusOffset;\n        var outerRadius = radius * (outerRadiusRatio !== null && outerRadiusRatio !== void 0 ? outerRadiusRatio : 1) + (outerRadiusOffset ? outerRadiusOffset : 0);\n        if (outerRadius < 0) {\n            return 0;\n        }\n        return outerRadius;\n    };\n    PieSeries.prototype.updateRadiusScale = function () {\n        var innerRadius = this.getInnerRadius();\n        var outerRadius = this.getOuterRadius();\n        this.radiusScale.range = [innerRadius, outerRadius];\n    };\n    PieSeries.prototype.getTitleTranslationY = function () {\n        var _a, _b;\n        var outerRadius = Math.max(0, this.radiusScale.range[1]);\n        if (outerRadius === 0) {\n            return NaN;\n        }\n        var spacing = (_b = (_a = this.title) === null || _a === void 0 ? void 0 : _a.spacing) !== null && _b !== void 0 ? _b : 0;\n        var titleOffset = 2 + spacing;\n        var dy = Math.max(0, -outerRadius);\n        return -outerRadius - titleOffset - dy;\n    };\n    PieSeries.prototype.update = function (_a) {\n        var seriesRect = _a.seriesRect;\n        return __awaiter$9(this, void 0, void 0, function () {\n            var title, dy, titleBox;\n            return __generator$9(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        title = this.title;\n                        this.maybeRefreshNodeData();\n                        this.updateTitleNodes();\n                        this.updateRadiusScale();\n                        this.updateInnerCircleNodes();\n                        this.rootGroup.translationX = this.centerX;\n                        this.rootGroup.translationY = this.centerY;\n                        if (title) {\n                            dy = this.getTitleTranslationY();\n                            titleBox = title.node.computeBBox();\n                            title.node.visible =\n                                title.enabled && isFinite(dy) && !this.bboxIntersectsSurroundingSeries(titleBox, 0, dy);\n                            title.node.translationY = isFinite(dy) ? dy : 0;\n                        }\n                        this.updateNodeMidPoint();\n                        return [4 /*yield*/, this.updateSelections()];\n                    case 1:\n                        _b.sent();\n                        return [4 /*yield*/, this.updateNodes(seriesRect)];\n                    case 2:\n                        _b.sent();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    PieSeries.prototype.updateTitleNodes = function () {\n        var _a, _b;\n        var _c = this, title = _c.title, oldTitle = _c.oldTitle;\n        if (oldTitle !== title) {\n            if (oldTitle) {\n                (_a = this.labelGroup) === null || _a === void 0 ? void 0 : _a.removeChild(oldTitle.node);\n            }\n            if (title) {\n                title.node.textBaseline = 'bottom';\n                (_b = this.labelGroup) === null || _b === void 0 ? void 0 : _b.appendChild(title.node);\n            }\n            this.oldTitle = title;\n        }\n    };\n    PieSeries.prototype.updateInnerCircleNodes = function () {\n        var _a;\n        var _b = this, innerCircle = _b.innerCircle, oldInnerCircle = _b.oldInnerCircle, oldNode = _b.innerCircleNode;\n        if (oldInnerCircle !== innerCircle) {\n            var circle = void 0;\n            if (oldNode) {\n                this.backgroundGroup.removeChild(oldNode);\n            }\n            if (innerCircle) {\n                circle = new Circle();\n                circle.fill = innerCircle.fill;\n                circle.fillOpacity = (_a = innerCircle.fillOpacity) !== null && _a !== void 0 ? _a : 1;\n                this.backgroundGroup.appendChild(circle);\n            }\n            this.oldInnerCircle = innerCircle;\n            this.innerCircleNode = circle;\n        }\n    };\n    PieSeries.prototype.updateNodeMidPoint = function () {\n        var _this = this;\n        this.nodeData.forEach(function (d) {\n            var radius = _this.radiusScale.convert(d.radius);\n            d.nodeMidPoint = {\n                x: d.midCos * Math.max(0, radius / 2),\n                y: d.midSin * Math.max(0, radius / 2),\n            };\n        });\n    };\n    PieSeries.prototype.updateSelections = function () {\n        return __awaiter$9(this, void 0, void 0, function () {\n            return __generator$9(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.updateGroupSelection()];\n                    case 1:\n                        _a.sent();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    PieSeries.prototype.updateGroupSelection = function () {\n        return __awaiter$9(this, void 0, void 0, function () {\n            var _a, groupSelection, highlightSelection, calloutLabelSelection, sectorLabelSelection, innerLabelsSelection, update;\n            var _this = this;\n            return __generator$9(this, function (_b) {\n                _a = this, groupSelection = _a.groupSelection, highlightSelection = _a.highlightSelection, calloutLabelSelection = _a.calloutLabelSelection, sectorLabelSelection = _a.sectorLabelSelection, innerLabelsSelection = _a.innerLabelsSelection;\n                update = function (selection) {\n                    return selection.update(_this.nodeData, function (group) {\n                        var sector = new Sector();\n                        sector.tag = PieNodeTag.Sector;\n                        group.appendChild(sector);\n                    });\n                };\n                this.groupSelection = update(groupSelection);\n                this.highlightSelection = update(highlightSelection);\n                calloutLabelSelection.update(this.nodeData, function (group) {\n                    var line = new Line();\n                    line.tag = PieNodeTag.Callout;\n                    line.pointerEvents = PointerEvents.None;\n                    group.appendChild(line);\n                    var text = new Text();\n                    text.tag = PieNodeTag.Label;\n                    text.pointerEvents = PointerEvents.None;\n                    group.appendChild(text);\n                });\n                sectorLabelSelection.update(this.nodeData, function (node) {\n                    node.pointerEvents = PointerEvents.None;\n                });\n                innerLabelsSelection.update(this.innerLabels, function (node) {\n                    node.pointerEvents = PointerEvents.None;\n                });\n                return [2 /*return*/];\n            });\n        });\n    };\n    PieSeries.prototype.updateNodes = function (seriesRect) {\n        var _a;\n        return __awaiter$9(this, void 0, void 0, function () {\n            var highlightedDatum, isVisible, radiusScale, innerRadius, updateSectorFn;\n            var _this = this;\n            return __generator$9(this, function (_b) {\n                highlightedDatum = (_a = this.highlightManager) === null || _a === void 0 ? void 0 : _a.getActiveHighlight();\n                isVisible = this.seriesItemEnabled.indexOf(true) >= 0;\n                this.rootGroup.visible = isVisible;\n                this.backgroundGroup.visible = isVisible;\n                this.contentGroup.visible = isVisible;\n                this.highlightGroup.visible = isVisible && (highlightedDatum === null || highlightedDatum === void 0 ? void 0 : highlightedDatum.series) === this;\n                this.labelGroup.visible = isVisible;\n                this.contentGroup.opacity = this.getOpacity();\n                this.updateInnerCircle();\n                radiusScale = this.radiusScale;\n                innerRadius = radiusScale.convert(0);\n                updateSectorFn = function (sector, datum, index, isDatumHighlighted) {\n                    var radius = radiusScale.convert(datum.radius);\n                    // Bring highlighted sector's parent group to front.\n                    var sectorParent = sector.parent;\n                    var sectorGrandParent = sectorParent === null || sectorParent === void 0 ? void 0 : sectorParent.parent;\n                    if (isDatumHighlighted && sectorParent && sectorGrandParent) {\n                        sectorGrandParent.removeChild(sectorParent);\n                        sectorGrandParent.appendChild(sectorParent);\n                    }\n                    sector.innerRadius = Math.max(0, innerRadius);\n                    sector.outerRadius = Math.max(0, radius);\n                    if (isDatumHighlighted) {\n                        sector.startAngle = datum.startAngle;\n                        sector.endAngle = datum.endAngle;\n                    }\n                    var format = _this.getSectorFormat(datum.datum, datum.itemId, index, isDatumHighlighted);\n                    sector.fill = format.fill;\n                    sector.stroke = format.stroke;\n                    sector.strokeWidth = format.strokeWidth;\n                    sector.fillOpacity = format.fillOpacity;\n                    sector.strokeOpacity = _this.strokeOpacity;\n                    sector.lineDash = _this.lineDash;\n                    sector.lineDashOffset = _this.lineDashOffset;\n                    sector.fillShadow = _this.shadow;\n                    sector.lineJoin = 'round';\n                    sector.visible = _this.seriesItemEnabled[index];\n                };\n                this.groupSelection\n                    .selectByTag(PieNodeTag.Sector)\n                    .forEach(function (node, index) { return updateSectorFn(node, node.datum, index, false); });\n                this.highlightSelection.selectByTag(PieNodeTag.Sector).forEach(function (node, index) {\n                    var isDatumHighlighted = (highlightedDatum === null || highlightedDatum === void 0 ? void 0 : highlightedDatum.series) === _this && node.datum.itemId === highlightedDatum.itemId;\n                    node.visible = isDatumHighlighted;\n                    if (node.visible) {\n                        updateSectorFn(node, node.datum, index, isDatumHighlighted);\n                    }\n                });\n                this.animationState.transition('update');\n                this.updateCalloutLineNodes();\n                this.updateCalloutLabelNodes(seriesRect);\n                this.updateSectorLabelNodes();\n                this.updateInnerLabelNodes();\n                return [2 /*return*/];\n            });\n        });\n    };\n    PieSeries.prototype.updateCalloutLineNodes = function () {\n        var _a;\n        var _b = this, radiusScale = _b.radiusScale, calloutLine = _b.calloutLine;\n        var calloutLength = calloutLine.length;\n        var calloutStrokeWidth = calloutLine.strokeWidth;\n        var calloutColors = (_a = calloutLine.colors) !== null && _a !== void 0 ? _a : this.strokes;\n        var offset = this.calloutLabel.offset;\n        this.calloutLabelSelection.selectByTag(PieNodeTag.Callout).forEach(function (line, index) {\n            var datum = line.datum;\n            var radius = radiusScale.convert(datum.radius);\n            var outerRadius = Math.max(0, radius);\n            var label = datum.calloutLabel;\n            if ((label === null || label === void 0 ? void 0 : label.text) && !label.hidden && outerRadius !== 0) {\n                line.visible = true;\n                line.strokeWidth = calloutStrokeWidth;\n                line.stroke = calloutColors[index % calloutColors.length];\n                line.fill = undefined;\n                var x1 = datum.midCos * outerRadius;\n                var y1 = datum.midSin * outerRadius;\n                var x2 = datum.midCos * (outerRadius + calloutLength);\n                var y2 = datum.midSin * (outerRadius + calloutLength);\n                if (label.collisionTextAlign || label.collisionOffsetY !== 0) {\n                    // Get the closest point to the text bounding box\n                    var box = label.box;\n                    var cx = x2;\n                    var cy = y2;\n                    if (x2 < box.x) {\n                        cx = box.x;\n                    }\n                    else if (x2 > box.x + box.width) {\n                        cx = box.x + box.width;\n                    }\n                    if (y2 < box.y) {\n                        cy = box.y;\n                    }\n                    else if (y2 > box.y + box.height) {\n                        cy = box.y + box.height;\n                    }\n                    // Apply label offset\n                    var dx = cx - x2;\n                    var dy = cy - y2;\n                    var length_1 = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n                    var paddedLength = length_1 - offset;\n                    if (paddedLength > 0) {\n                        x2 = x2 + (dx * paddedLength) / length_1;\n                        y2 = y2 + (dy * paddedLength) / length_1;\n                    }\n                }\n                line.x1 = x1;\n                line.y1 = y1;\n                line.x2 = x2;\n                line.y2 = y2;\n            }\n            else {\n                line.visible = false;\n            }\n        });\n    };\n    PieSeries.prototype.getLabelOverflow = function (text, box, seriesRect) {\n        var seriesLeft = seriesRect.x - this.centerX;\n        var seriesRight = seriesRect.x + seriesRect.width - this.centerX;\n        var seriesTop = seriesRect.y - this.centerY;\n        var seriesBottom = seriesRect.y + seriesRect.height - this.centerY;\n        var errPx = 1; // Prevents errors related to floating point calculations\n        var visibleTextPart = 1;\n        if (box.x + errPx < seriesLeft) {\n            visibleTextPart = (box.x + box.width - seriesLeft) / box.width;\n        }\n        else if (box.x + box.width - errPx > seriesRight) {\n            visibleTextPart = (seriesRight - box.x) / box.width;\n        }\n        var hasVerticalOverflow = box.y + errPx < seriesTop || box.y + box.height - errPx > seriesBottom;\n        var textLength = Math.floor(text.length * visibleTextPart) - 1;\n        var hasSurroundingSeriesOverflow = this.bboxIntersectsSurroundingSeries(box);\n        return { visibleTextPart: visibleTextPart, textLength: textLength, hasVerticalOverflow: hasVerticalOverflow, hasSurroundingSeriesOverflow: hasSurroundingSeriesOverflow };\n    };\n    PieSeries.prototype.bboxIntersectsSurroundingSeries = function (box, dx, dy) {\n        if (dx === void 0) { dx = 0; }\n        if (dy === void 0) { dy = 0; }\n        var surroundingRadius = this.surroundingRadius;\n        if (surroundingRadius == null) {\n            return false;\n        }\n        var corners = [\n            { x: box.x + dx, y: box.y + dy },\n            { x: box.x + box.width + dx, y: box.y + dy },\n            { x: box.x + box.width + dx, y: box.y + box.height + dy },\n            { x: box.x + dx, y: box.y + box.height + dy },\n        ];\n        var sur2 = Math.pow(surroundingRadius, 2);\n        return corners.some(function (corner) { return Math.pow(corner.x, 2) + Math.pow(corner.y, 2) > sur2; });\n    };\n    PieSeries.prototype.computeCalloutLabelCollisionOffsets = function () {\n        var _this = this;\n        var _a = this, radiusScale = _a.radiusScale, calloutLabel = _a.calloutLabel, calloutLine = _a.calloutLine;\n        var offset = calloutLabel.offset, minSpacing = calloutLabel.minSpacing;\n        var innerRadius = radiusScale.convert(0);\n        var shouldSkip = function (datum) {\n            var label = datum.calloutLabel;\n            var radius = radiusScale.convert(datum.radius);\n            var outerRadius = Math.max(0, radius);\n            return !label || outerRadius === 0;\n        };\n        var fullData = this.nodeData;\n        var data = this.nodeData.filter(function (text) { return !shouldSkip(text); });\n        data.forEach(function (datum) {\n            var label = datum.calloutLabel;\n            label.hidden = false;\n            label.collisionTextAlign = undefined;\n            label.collisionOffsetY = 0;\n        });\n        if (data.length <= 1) {\n            return;\n        }\n        var leftLabels = data.filter(function (d) { return d.midCos < 0; }).sort(function (a, b) { return a.midSin - b.midSin; });\n        var rightLabels = data.filter(function (d) { return d.midCos >= 0; }).sort(function (a, b) { return a.midSin - b.midSin; });\n        var topLabels = data\n            .filter(function (d) { return d.midSin < 0 && d.calloutLabel.textAlign === 'center'; })\n            .sort(function (a, b) { return a.midCos - b.midCos; });\n        var bottomLabels = data\n            .filter(function (d) { return d.midSin >= 0 && d.calloutLabel.textAlign === 'center'; })\n            .sort(function (a, b) { return a.midCos - b.midCos; });\n        var tempTextNode = new Text();\n        var getTextBBox = function (datum) {\n            var label = datum.calloutLabel;\n            var radius = radiusScale.convert(datum.radius);\n            var outerRadius = Math.max(0, radius);\n            var labelRadius = outerRadius + calloutLine.length + offset;\n            var x = datum.midCos * labelRadius;\n            var y = datum.midSin * labelRadius + label.collisionOffsetY;\n            _this.setTextDimensionalProps(tempTextNode, x, y, _this.calloutLabel, label);\n            return tempTextNode.computeBBox();\n        };\n        var avoidNeighbourYCollision = function (label, next, direction) {\n            var box = getTextBBox(label).grow(minSpacing / 2);\n            var other = getTextBBox(next).grow(minSpacing / 2);\n            // The full collision is not detected, because sometimes\n            // the next label can appear behind the label with offset\n            var collidesOrBehind = box.x < other.x + other.width &&\n                box.x + box.width > other.x &&\n                (direction === 'to-top' ? box.y < other.y + other.height : box.y + box.height > other.y);\n            if (collidesOrBehind) {\n                var dy = direction === 'to-top' ? box.y - other.y - other.height : box.y + box.height - other.y;\n                next.calloutLabel.collisionOffsetY = dy;\n            }\n        };\n        var avoidYCollisions = function (labels) {\n            var midLabel = labels.slice().sort(function (a, b) { return Math.abs(a.midSin) - Math.abs(b.midSin); })[0];\n            var midIndex = labels.indexOf(midLabel);\n            for (var i = midIndex - 1; i >= 0; i--) {\n                var prev = labels[i + 1];\n                var next = labels[i];\n                avoidNeighbourYCollision(prev, next, 'to-top');\n            }\n            for (var i = midIndex + 1; i < labels.length; i++) {\n                var prev = labels[i - 1];\n                var next = labels[i];\n                avoidNeighbourYCollision(prev, next, 'to-bottom');\n            }\n        };\n        var avoidXCollisions = function (labels) {\n            var labelsCollideLabelsByY = data.some(function (datum) { return datum.calloutLabel.collisionOffsetY !== 0; });\n            var boxes = labels.map(function (label) { return getTextBBox(label); });\n            var paddedBoxes = boxes.map(function (box) { return box.clone().grow(minSpacing / 2); });\n            var labelsCollideLabelsByX = false;\n            for (var i = 0; i < paddedBoxes.length && !labelsCollideLabelsByX; i++) {\n                var box = paddedBoxes[i];\n                for (var j = i + 1; j < labels.length; j++) {\n                    var other = paddedBoxes[j];\n                    if (box.collidesBBox(other)) {\n                        labelsCollideLabelsByX = true;\n                        break;\n                    }\n                }\n            }\n            var sectors = fullData.map(function (datum) {\n                var startAngle = datum.startAngle, endAngle = datum.endAngle;\n                var radius = radiusScale.convert(datum.radius);\n                var outerRadius = Math.max(0, radius);\n                return { startAngle: startAngle, endAngle: endAngle, innerRadius: innerRadius, outerRadius: outerRadius };\n            });\n            var labelsCollideSectors = boxes.some(function (box) {\n                return sectors.some(function (sector) { return boxCollidesSector(box, sector); });\n            });\n            if (!labelsCollideLabelsByX && !labelsCollideLabelsByY && !labelsCollideSectors) {\n                return;\n            }\n            labels\n                .filter(function (datum) { return datum.calloutLabel.textAlign === 'center'; })\n                .forEach(function (datum) {\n                var label = datum.calloutLabel;\n                if (datum.midCos < 0) {\n                    label.collisionTextAlign = 'right';\n                }\n                else if (datum.midCos > 0) {\n                    label.collisionTextAlign = 'left';\n                }\n                else {\n                    label.collisionTextAlign = 'center';\n                }\n            });\n        };\n        avoidYCollisions(leftLabels);\n        avoidYCollisions(rightLabels);\n        avoidXCollisions(topLabels);\n        avoidXCollisions(bottomLabels);\n    };\n    PieSeries.prototype.updateCalloutLabelNodes = function (seriesRect) {\n        var _this = this;\n        var _a = this, radiusScale = _a.radiusScale, calloutLabel = _a.calloutLabel, calloutLine = _a.calloutLine;\n        var calloutLength = calloutLine.length;\n        var offset = calloutLabel.offset, color = calloutLabel.color;\n        var tempTextNode = new Text();\n        this.calloutLabelSelection.selectByTag(PieNodeTag.Label).forEach(function (text) {\n            var datum = text.datum;\n            var label = datum.calloutLabel;\n            var radius = radiusScale.convert(datum.radius);\n            var outerRadius = Math.max(0, radius);\n            if (!(label === null || label === void 0 ? void 0 : label.text) || outerRadius === 0 || label.hidden) {\n                text.visible = false;\n                return;\n            }\n            var labelRadius = outerRadius + calloutLength + offset;\n            var x = datum.midCos * labelRadius;\n            var y = datum.midSin * labelRadius + label.collisionOffsetY;\n            // Detect text overflow\n            _this.setTextDimensionalProps(tempTextNode, x, y, _this.calloutLabel, label);\n            var box = tempTextNode.computeBBox();\n            var _a = _this.getLabelOverflow(label.text, box, seriesRect), visibleTextPart = _a.visibleTextPart, textLength = _a.textLength, hasVerticalOverflow = _a.hasVerticalOverflow;\n            var displayText = visibleTextPart === 1 ? label.text : label.text.substring(0, textLength) + \"\\u2026\";\n            _this.setTextDimensionalProps(text, x, y, _this.calloutLabel, __assign$f(__assign$f({}, label), { text: displayText }));\n            text.fill = color;\n            text.visible = !hasVerticalOverflow;\n        });\n    };\n    PieSeries.prototype.computeLabelsBBox = function (options, seriesRect) {\n        var _this = this;\n        var _a;\n        var _b = this, radiusScale = _b.radiusScale, calloutLabel = _b.calloutLabel, calloutLine = _b.calloutLine;\n        var calloutLength = calloutLine.length;\n        var offset = calloutLabel.offset, maxCollisionOffset = calloutLabel.maxCollisionOffset, minSpacing = calloutLabel.minSpacing;\n        this.maybeRefreshNodeData();\n        this.updateRadiusScale();\n        this.computeCalloutLabelCollisionOffsets();\n        var textBoxes = [];\n        var text = new Text();\n        var titleBox;\n        if (((_a = this.title) === null || _a === void 0 ? void 0 : _a.text) && this.title.enabled) {\n            var dy = this.getTitleTranslationY();\n            if (isFinite(dy)) {\n                this.setTextDimensionalProps(text, 0, dy, this.title, {\n                    text: this.title.text,\n                    textBaseline: 'bottom',\n                    textAlign: 'center',\n                    hidden: false,\n                    collisionTextAlign: undefined,\n                    collisionOffsetY: 0,\n                });\n                titleBox = text.computeBBox();\n                textBoxes.push(titleBox);\n            }\n        }\n        this.nodeData.forEach(function (datum) {\n            var label = datum.calloutLabel;\n            var radius = radiusScale.convert(datum.radius);\n            var outerRadius = Math.max(0, radius);\n            if (!label || outerRadius === 0) {\n                return null;\n            }\n            var labelRadius = outerRadius + calloutLength + offset;\n            var x = datum.midCos * labelRadius;\n            var y = datum.midSin * labelRadius + label.collisionOffsetY;\n            _this.setTextDimensionalProps(text, x, y, _this.calloutLabel, label);\n            var box = text.computeBBox();\n            label.box = box;\n            // Hide labels that where pushed to far by the collision avoidance algorithm\n            if (Math.abs(label.collisionOffsetY) > maxCollisionOffset) {\n                label.hidden = true;\n                return;\n            }\n            // Hide labels intersecting or above the title\n            if (titleBox) {\n                var seriesTop = seriesRect.y - _this.centerY;\n                var titleCleanArea = new BBox(titleBox.x - minSpacing, seriesTop, titleBox.width + 2 * minSpacing, titleBox.y + titleBox.height + minSpacing - seriesTop);\n                if (box.collidesBBox(titleCleanArea)) {\n                    label.hidden = true;\n                    return;\n                }\n            }\n            if (options.hideWhenNecessary) {\n                var _a = _this.getLabelOverflow(label.text, box, seriesRect), textLength = _a.textLength, hasVerticalOverflow = _a.hasVerticalOverflow, hasSurroundingSeriesOverflow = _a.hasSurroundingSeriesOverflow;\n                var isTooShort = label.text.length > 2 && textLength < 2;\n                if (hasVerticalOverflow || isTooShort || hasSurroundingSeriesOverflow) {\n                    label.hidden = true;\n                    return;\n                }\n            }\n            label.hidden = false;\n            textBoxes.push(box);\n        });\n        if (textBoxes.length === 0) {\n            return null;\n        }\n        return BBox.merge(textBoxes);\n    };\n    PieSeries.prototype.setTextDimensionalProps = function (textNode, x, y, style, label) {\n        var _a, _b;\n        var fontStyle = style.fontStyle, fontWeight = style.fontWeight, fontSize = style.fontSize, fontFamily = style.fontFamily;\n        textNode.fontStyle = fontStyle;\n        textNode.fontWeight = fontWeight;\n        textNode.fontSize = fontSize;\n        textNode.fontFamily = fontFamily;\n        textNode.text = label.text;\n        textNode.x = x;\n        textNode.y = y;\n        textNode.textAlign = (_b = (_a = label === null || label === void 0 ? void 0 : label.collisionTextAlign) !== null && _a !== void 0 ? _a : label === null || label === void 0 ? void 0 : label.textAlign) !== null && _b !== void 0 ? _b : 'center';\n        textNode.textBaseline = label.textBaseline;\n    };\n    PieSeries.prototype.updateSectorLabelNodes = function () {\n        var radiusScale = this.radiusScale;\n        var innerRadius = radiusScale.convert(0);\n        var _a = this.sectorLabel, fontSize = _a.fontSize, fontStyle = _a.fontStyle, fontWeight = _a.fontWeight, fontFamily = _a.fontFamily, positionOffset = _a.positionOffset, positionRatio = _a.positionRatio, color = _a.color;\n        var isDoughnut = innerRadius > 0;\n        var singleVisibleSector = this.seriesItemEnabled.filter(Boolean).length === 1;\n        this.sectorLabelSelection.each(function (text, datum) {\n            var sectorLabel = datum.sectorLabel;\n            var radius = radiusScale.convert(datum.radius);\n            var outerRadius = Math.max(0, radius);\n            var isTextVisible = false;\n            if (sectorLabel && outerRadius !== 0) {\n                var labelRadius = innerRadius * (1 - positionRatio) + radius * positionRatio + positionOffset;\n                text.fill = color;\n                text.fontStyle = fontStyle;\n                text.fontWeight = fontWeight;\n                text.fontSize = fontSize;\n                text.fontFamily = fontFamily;\n                text.text = sectorLabel.text;\n                var shouldPutTextInCenter = !isDoughnut && singleVisibleSector;\n                if (shouldPutTextInCenter) {\n                    text.x = 0;\n                    text.y = 0;\n                }\n                else {\n                    text.x = datum.midCos * labelRadius;\n                    text.y = datum.midSin * labelRadius;\n                }\n                text.textAlign = 'center';\n                text.textBaseline = 'middle';\n                var bbox = text.computeBBox();\n                var corners = [\n                    [bbox.x, bbox.y],\n                    [bbox.x + bbox.width, bbox.y],\n                    [bbox.x + bbox.width, bbox.y + bbox.height],\n                    [bbox.x, bbox.y + bbox.height],\n                ];\n                var startAngle = datum.startAngle, endAngle = datum.endAngle;\n                var sectorBounds_1 = { startAngle: startAngle, endAngle: endAngle, innerRadius: innerRadius, outerRadius: outerRadius };\n                if (corners.every(function (_a) {\n                    var _b = __read$e(_a, 2), x = _b[0], y = _b[1];\n                    return isPointInSector(x, y, sectorBounds_1);\n                })) {\n                    isTextVisible = true;\n                }\n            }\n            text.visible = isTextVisible;\n        });\n    };\n    PieSeries.prototype.updateInnerCircle = function () {\n        var circle = this.innerCircleNode;\n        if (!circle) {\n            return;\n        }\n        var innerRadius = this.getInnerRadius();\n        if (innerRadius === 0) {\n            circle.size = 0;\n        }\n        else {\n            var circleRadius = Math.min(innerRadius, this.getOuterRadius());\n            var antiAliasingPadding = 1;\n            circle.size = Math.ceil(circleRadius * 2 + antiAliasingPadding);\n        }\n    };\n    PieSeries.prototype.updateInnerLabelNodes = function () {\n        var textBBoxes = [];\n        var margins = [];\n        this.innerLabelsSelection.each(function (text, datum) {\n            var fontStyle = datum.fontStyle, fontWeight = datum.fontWeight, fontSize = datum.fontSize, fontFamily = datum.fontFamily, color = datum.color;\n            text.fontStyle = fontStyle;\n            text.fontWeight = fontWeight;\n            text.fontSize = fontSize;\n            text.fontFamily = fontFamily;\n            text.text = datum.text;\n            text.x = 0;\n            text.y = 0;\n            text.fill = color;\n            text.textAlign = 'center';\n            text.textBaseline = 'alphabetic';\n            textBBoxes.push(text.computeBBox());\n            margins.push(datum.margin);\n        });\n        var getMarginTop = function (index) { return (index === 0 ? 0 : margins[index]); };\n        var getMarginBottom = function (index) { return (index === margins.length - 1 ? 0 : margins[index]); };\n        var totalHeight = textBBoxes.reduce(function (sum, bbox, i) {\n            return sum + bbox.height + getMarginTop(i) + getMarginBottom(i);\n        }, 0);\n        var totalWidth = Math.max.apply(Math, __spreadArray$8([], __read$e(textBBoxes.map(function (bbox) { return bbox.width; }))));\n        var innerRadius = this.getInnerRadius();\n        var labelRadius = Math.sqrt(Math.pow(totalWidth / 2, 2) + Math.pow(totalHeight / 2, 2));\n        var labelsVisible = labelRadius <= (innerRadius > 0 ? innerRadius : this.getOuterRadius());\n        var textBottoms = [];\n        for (var i = 0, prev = -totalHeight / 2; i < textBBoxes.length; i++) {\n            var bbox = textBBoxes[i];\n            var bottom = bbox.height + prev + getMarginTop(i);\n            textBottoms.push(bottom);\n            prev = bottom + getMarginBottom(i);\n        }\n        this.innerLabelsSelection.each(function (text, _datum, index) {\n            text.y = textBottoms[index];\n            text.visible = labelsVisible;\n        });\n    };\n    PieSeries.prototype.getNodeClickEvent = function (event, datum) {\n        return new PieSeriesNodeClickEvent(this.angleKey, this.calloutLabelKey, this.sectorLabelKey, this.radiusKey, event, datum, this);\n    };\n    PieSeries.prototype.getNodeDoubleClickEvent = function (event, datum) {\n        return new PieSeriesNodeDoubleClickEvent(this.angleKey, this.calloutLabelKey, this.sectorLabelKey, this.radiusKey, event, datum, this);\n    };\n    PieSeries.prototype.getTooltipHtml = function (nodeDatum) {\n        var _a;\n        var angleKey = this.angleKey;\n        if (!angleKey) {\n            return '';\n        }\n        var _b = this, tooltip = _b.tooltip, angleName = _b.angleName, radiusKey = _b.radiusKey, radiusName = _b.radiusName, calloutLabelKey = _b.calloutLabelKey, sectorLabelKey = _b.sectorLabelKey, calloutLabelName = _b.calloutLabelName, sectorLabelName = _b.sectorLabelName, seriesId = _b.id;\n        var tooltipRenderer = tooltip.renderer;\n        var datum = nodeDatum.datum, angleValue = nodeDatum.angleValue, radiusValue = nodeDatum.radiusValue, color = nodeDatum.sectorFormat.fill, _c = nodeDatum.calloutLabel, _d = _c === void 0 ? {} : _c, _e = _d.text, label = _e === void 0 ? '' : _e;\n        var formattedAngleValue = typeof angleValue === 'number' ? toFixed(angleValue) : String(angleValue);\n        var title = (_a = this.title) === null || _a === void 0 ? void 0 : _a.text;\n        var content = \"\" + (label ? label + \": \" : '') + formattedAngleValue;\n        var defaults = {\n            title: title,\n            backgroundColor: color,\n            content: content,\n        };\n        if (tooltipRenderer) {\n            return toTooltipHtml$1(tooltipRenderer({\n                datum: datum,\n                angleKey: angleKey,\n                angleValue: angleValue,\n                angleName: angleName,\n                radiusKey: radiusKey,\n                radiusValue: radiusValue,\n                radiusName: radiusName,\n                calloutLabelKey: calloutLabelKey,\n                calloutLabelName: calloutLabelName,\n                sectorLabelKey: sectorLabelKey,\n                sectorLabelName: sectorLabelName,\n                title: title,\n                color: color,\n                seriesId: seriesId,\n            }), defaults);\n        }\n        return toTooltipHtml$1(defaults);\n    };\n    PieSeries.prototype.getLegendData = function () {\n        var _a, _b, _c;\n        var _d = this, calloutLabelKey = _d.calloutLabelKey, legendItemKey = _d.legendItemKey, id = _d.id, data = _d.data;\n        if (!data || data.length === 0)\n            return [];\n        if (!legendItemKey && !calloutLabelKey)\n            return [];\n        var titleText = ((_a = this.title) === null || _a === void 0 ? void 0 : _a.showInLegend) && this.title.text;\n        var legendData = [];\n        for (var index = 0; index < data.length; index++) {\n            var datum = data[index];\n            var labelParts = [];\n            if (titleText) {\n                labelParts.push(titleText);\n            }\n            var labels = this.getLabels(datum, 2 * Math.PI, 2 * Math.PI, false);\n            if (legendItemKey && labels.legendItem !== undefined) {\n                labelParts.push(labels.legendItem.text);\n            }\n            else if (calloutLabelKey && ((_b = labels.calloutLabel) === null || _b === void 0 ? void 0 : _b.text) !== undefined) {\n                labelParts.push((_c = labels.calloutLabel) === null || _c === void 0 ? void 0 : _c.text);\n            }\n            if (labelParts.length === 0)\n                continue;\n            var sectorFormat = this.getSectorFormat(datum, index, index, false);\n            legendData.push({\n                legendType: 'category',\n                id: id,\n                itemId: index,\n                seriesId: id,\n                enabled: this.seriesItemEnabled[index],\n                label: {\n                    text: labelParts.join(' - '),\n                },\n                marker: {\n                    fill: sectorFormat.fill,\n                    stroke: sectorFormat.stroke,\n                    fillOpacity: this.fillOpacity,\n                    strokeOpacity: this.strokeOpacity,\n                },\n            });\n        }\n        return legendData;\n    };\n    PieSeries.prototype.onLegendItemClick = function (event) {\n        var enabled = event.enabled, itemId = event.itemId, series = event.series;\n        if (series.id === this.id) {\n            this.toggleSeriesItem(itemId, enabled);\n        }\n        else if (series.type === 'pie') {\n            this.toggleOtherSeriesItems(series, itemId, enabled);\n        }\n    };\n    PieSeries.prototype.toggleSeriesItem = function (itemId, enabled) {\n        this.seriesItemEnabled[itemId] = enabled;\n        this.nodeDataRefresh = true;\n    };\n    PieSeries.prototype.toggleOtherSeriesItems = function (series, itemId, enabled) {\n        var _this = this;\n        var _a, _b;\n        var legendItemKey = this.legendItemKey;\n        if (!legendItemKey)\n            return;\n        var datumToggledLegendItemValue = series.legendItemKey && ((_a = series.data) === null || _a === void 0 ? void 0 : _a.find(function (_, index) { return index === itemId; })[series.legendItemKey]);\n        if (!datumToggledLegendItemValue)\n            return;\n        (_b = this.data) === null || _b === void 0 ? void 0 : _b.forEach(function (datum, datumItemId) {\n            if (datum[legendItemKey] === datumToggledLegendItemValue) {\n                _this.toggleSeriesItem(datumItemId, enabled);\n            }\n        });\n    };\n    PieSeries.prototype.animateEmptyUpdateReady = function () {\n        var _this = this;\n        var duration = 1000;\n        var labelDuration = 200;\n        var rotation = Math.PI / -2 + toRadians$1(this.rotation);\n        this.groupSelection.selectByTag(PieNodeTag.Sector).forEach(function (node) {\n            var _a;\n            var datum = node.datum;\n            (_a = _this.animationManager) === null || _a === void 0 ? void 0 : _a.animateMany(_this.id + \"_empty-update-ready_\" + node.id, [\n                { from: rotation, to: datum.startAngle },\n                { from: rotation, to: datum.endAngle },\n            ], {\n                disableInteractions: true,\n                duration: duration,\n                ease: easeOut,\n                repeat: 0,\n                onUpdate: function (_a) {\n                    var _b = __read$e(_a, 2), startAngle = _b[0], endAngle = _b[1];\n                    node.startAngle = startAngle;\n                    node.endAngle = endAngle;\n                },\n            });\n        });\n        var labelAnimationOptions = {\n            from: 0,\n            to: 1,\n            delay: duration,\n            duration: labelDuration,\n            ease: linear,\n            repeat: 0,\n        };\n        this.calloutLabelSelection.each(function (label) {\n            var _a;\n            (_a = _this.animationManager) === null || _a === void 0 ? void 0 : _a.animate(_this.id + \"_empty-update-ready_\" + label.id, __assign$f(__assign$f({}, labelAnimationOptions), { onUpdate: function (opacity) {\n                    label.opacity = opacity;\n                } }));\n        });\n        this.sectorLabelSelection.each(function (label) {\n            var _a;\n            (_a = _this.animationManager) === null || _a === void 0 ? void 0 : _a.animate(_this.id + \"_empty-update-ready_\" + label.id, __assign$f(__assign$f({}, labelAnimationOptions), { onUpdate: function (opacity) {\n                    label.opacity = opacity;\n                } }));\n        });\n        this.innerLabelsSelection.each(function (label) {\n            var _a;\n            (_a = _this.animationManager) === null || _a === void 0 ? void 0 : _a.animate(_this.id + \"_empty-update-ready_\" + label.id, __assign$f(__assign$f({}, labelAnimationOptions), { onUpdate: function (opacity) {\n                    label.opacity = opacity;\n                } }));\n        });\n    };\n    PieSeries.prototype.animateReadyUpdateReady = function () {\n        this.groupSelection.selectByTag(PieNodeTag.Sector).forEach(function (node) {\n            var datum = node.datum;\n            node.startAngle = datum.startAngle;\n            node.endAngle = datum.endAngle;\n        });\n    };\n    PieSeries.className = 'PieSeries';\n    PieSeries.type = 'pie';\n    __decorate$1w([\n        Validate(STRING)\n    ], PieSeries.prototype, \"angleKey\", void 0);\n    __decorate$1w([\n        Validate(STRING)\n    ], PieSeries.prototype, \"angleName\", void 0);\n    __decorate$1w([\n        Validate(OPT_STRING)\n    ], PieSeries.prototype, \"radiusKey\", void 0);\n    __decorate$1w([\n        Validate(OPT_STRING)\n    ], PieSeries.prototype, \"radiusName\", void 0);\n    __decorate$1w([\n        Validate(OPT_NUMBER(0))\n    ], PieSeries.prototype, \"radiusMin\", void 0);\n    __decorate$1w([\n        Validate(OPT_NUMBER(0))\n    ], PieSeries.prototype, \"radiusMax\", void 0);\n    __decorate$1w([\n        Validate(OPT_STRING)\n    ], PieSeries.prototype, \"calloutLabelKey\", void 0);\n    __decorate$1w([\n        Validate(OPT_STRING)\n    ], PieSeries.prototype, \"calloutLabelName\", void 0);\n    __decorate$1w([\n        Validate(OPT_STRING)\n    ], PieSeries.prototype, \"sectorLabelKey\", void 0);\n    __decorate$1w([\n        Validate(OPT_STRING)\n    ], PieSeries.prototype, \"sectorLabelName\", void 0);\n    __decorate$1w([\n        Validate(OPT_STRING)\n    ], PieSeries.prototype, \"legendItemKey\", void 0);\n    __decorate$1w([\n        Validate(COLOR_STRING_ARRAY)\n    ], PieSeries.prototype, \"fills\", void 0);\n    __decorate$1w([\n        Validate(COLOR_STRING_ARRAY)\n    ], PieSeries.prototype, \"strokes\", void 0);\n    __decorate$1w([\n        Validate(NUMBER(0, 1))\n    ], PieSeries.prototype, \"fillOpacity\", void 0);\n    __decorate$1w([\n        Validate(NUMBER(0, 1))\n    ], PieSeries.prototype, \"strokeOpacity\", void 0);\n    __decorate$1w([\n        Validate(OPT_LINE_DASH)\n    ], PieSeries.prototype, \"lineDash\", void 0);\n    __decorate$1w([\n        Validate(NUMBER(0))\n    ], PieSeries.prototype, \"lineDashOffset\", void 0);\n    __decorate$1w([\n        Validate(OPT_FUNCTION)\n    ], PieSeries.prototype, \"formatter\", void 0);\n    __decorate$1w([\n        Validate(NUMBER(-360, 360))\n    ], PieSeries.prototype, \"rotation\", void 0);\n    __decorate$1w([\n        Validate(NUMBER())\n    ], PieSeries.prototype, \"outerRadiusOffset\", void 0);\n    __decorate$1w([\n        Validate(NUMBER(0))\n    ], PieSeries.prototype, \"outerRadiusRatio\", void 0);\n    __decorate$1w([\n        Validate(NUMBER())\n    ], PieSeries.prototype, \"innerRadiusOffset\", void 0);\n    __decorate$1w([\n        Validate(NUMBER(0))\n    ], PieSeries.prototype, \"innerRadiusRatio\", void 0);\n    __decorate$1w([\n        Validate(NUMBER(0))\n    ], PieSeries.prototype, \"strokeWidth\", void 0);\n    return PieSeries;\n}(PolarSeries));\n\nvar __extends$t = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __awaiter$8 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator$8 = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __values$8 = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar PolarChart = /** @class */ (function (_super) {\n    __extends$t(PolarChart, _super);\n    function PolarChart(document, overrideDevicePixelRatio, resources) {\n        if (document === void 0) { document = window.document; }\n        var _this = _super.call(this, document, overrideDevicePixelRatio, resources) || this;\n        _this.padding = new Padding$1(40);\n        return _this;\n    }\n    PolarChart.prototype.performLayout = function () {\n        return __awaiter$8(this, void 0, void 0, function () {\n            var shrinkRect, fullSeriesRect, hoverRectPadding, hoverRect;\n            return __generator$8(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, _super.prototype.performLayout.call(this)];\n                    case 1:\n                        shrinkRect = _a.sent();\n                        fullSeriesRect = shrinkRect.clone();\n                        this.computeSeriesRect(shrinkRect);\n                        this.computeCircle();\n                        hoverRectPadding = 20;\n                        hoverRect = shrinkRect.clone().grow(hoverRectPadding);\n                        this.hoverRect = hoverRect;\n                        this.layoutService.dispatchLayoutComplete({\n                            type: 'layout-complete',\n                            chart: { width: this.scene.width, height: this.scene.height },\n                            series: { rect: fullSeriesRect, paddedRect: shrinkRect, hoverRect: hoverRect, visible: true },\n                            axes: [],\n                        });\n                        return [2 /*return*/, shrinkRect];\n                }\n            });\n        });\n    };\n    PolarChart.prototype.computeSeriesRect = function (shrinkRect) {\n        var seriesAreaPadding = this.seriesAreaPadding;\n        shrinkRect.shrink(seriesAreaPadding.left, 'left');\n        shrinkRect.shrink(seriesAreaPadding.top, 'top');\n        shrinkRect.shrink(seriesAreaPadding.right, 'right');\n        shrinkRect.shrink(seriesAreaPadding.bottom, 'bottom');\n        this.seriesRect = shrinkRect;\n    };\n    PolarChart.prototype.computeCircle = function () {\n        var _this = this;\n        var seriesBox = this.seriesRect;\n        var polarSeries = this.series.filter(function (series) {\n            return series instanceof PolarSeries;\n        });\n        var setSeriesCircle = function (cx, cy, r) {\n            polarSeries.forEach(function (series) {\n                series.centerX = cx;\n                series.centerY = cy;\n                series.radius = r;\n            });\n            var pieSeries = polarSeries.filter(function (series) { return series instanceof PieSeries; });\n            if (pieSeries.length > 1) {\n                var innerRadii = pieSeries\n                    .map(function (series) {\n                    var innerRadius = series.getInnerRadius();\n                    return { series: series, innerRadius: innerRadius };\n                })\n                    .sort(function (a, b) { return a.innerRadius - b.innerRadius; });\n                innerRadii[innerRadii.length - 1].series.surroundingRadius = undefined;\n                for (var i = 0; i < innerRadii.length - 1; i++) {\n                    innerRadii[i].series.surroundingRadius = innerRadii[i + 1].innerRadius;\n                }\n            }\n        };\n        var centerX = seriesBox.x + seriesBox.width / 2;\n        var centerY = seriesBox.y + seriesBox.height / 2;\n        var initialRadius = Math.max(0, Math.min(seriesBox.width, seriesBox.height) / 2);\n        var radius = initialRadius;\n        setSeriesCircle(centerX, centerY, radius);\n        var shake = function (_a) {\n            var e_1, _b;\n            var _c = _a === void 0 ? {} : _a, _d = _c.hideWhenNecessary, hideWhenNecessary = _d === void 0 ? false : _d;\n            var labelBoxes = [];\n            try {\n                for (var polarSeries_1 = __values$8(polarSeries), polarSeries_1_1 = polarSeries_1.next(); !polarSeries_1_1.done; polarSeries_1_1 = polarSeries_1.next()) {\n                    var series = polarSeries_1_1.value;\n                    var box = series.computeLabelsBBox({ hideWhenNecessary: hideWhenNecessary }, seriesBox);\n                    if (box == null)\n                        continue;\n                    labelBoxes.push(box);\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (polarSeries_1_1 && !polarSeries_1_1.done && (_b = polarSeries_1.return)) _b.call(polarSeries_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n            if (labelBoxes.length === 0) {\n                setSeriesCircle(centerX, centerY, initialRadius);\n                return;\n            }\n            var labelBox = BBox.merge(labelBoxes);\n            var refined = _this.refineCircle(labelBox, radius);\n            setSeriesCircle(refined.centerX, refined.centerY, refined.radius);\n            if (refined.radius === radius) {\n                return;\n            }\n            radius = refined.radius;\n        };\n        shake(); // Initial attempt\n        shake(); // Precise attempt\n        shake(); // Just in case\n        shake({ hideWhenNecessary: true }); // Hide unnecessary labels\n        shake({ hideWhenNecessary: true }); // Final result\n    };\n    PolarChart.prototype.refineCircle = function (labelsBox, radius) {\n        var minCircleRatio = 0.5; // Prevents reduced circle to be too small\n        var seriesBox = this.seriesRect;\n        var circleLeft = -radius;\n        var circleTop = -radius;\n        var circleRight = radius;\n        var circleBottom = radius;\n        // Label padding around the circle\n        var padLeft = Math.max(0, circleLeft - labelsBox.x);\n        var padTop = Math.max(0, circleTop - labelsBox.y);\n        var padRight = Math.max(0, labelsBox.x + labelsBox.width - circleRight);\n        var padBottom = Math.max(0, labelsBox.y + labelsBox.height - circleBottom);\n        // Available area for the circle (after the padding will be applied)\n        var availCircleWidth = seriesBox.width - padLeft - padRight;\n        var availCircleHeight = seriesBox.height - padTop - padBottom;\n        var newRadius = Math.min(availCircleWidth, availCircleHeight) / 2;\n        var minHorizontalRadius = (minCircleRatio * seriesBox.width) / 2;\n        var minVerticalRadius = (minCircleRatio * seriesBox.height) / 2;\n        var minRadius = Math.min(minHorizontalRadius, minVerticalRadius);\n        if (newRadius < minRadius) {\n            // If the radius is too small, reduce the label padding\n            newRadius = minRadius;\n            var horizontalPadding = padLeft + padRight;\n            var verticalPadding = padTop + padBottom;\n            if (2 * newRadius + verticalPadding > seriesBox.height) {\n                var padHeight = seriesBox.height - 2 * newRadius;\n                if (Math.min(padTop, padBottom) * 2 > padHeight) {\n                    padTop = padHeight / 2;\n                    padBottom = padHeight / 2;\n                }\n                else if (padTop > padBottom) {\n                    padTop = padHeight - padBottom;\n                }\n                else {\n                    padBottom = padHeight - padTop;\n                }\n            }\n            if (2 * newRadius + horizontalPadding > seriesBox.width) {\n                var padWidth = seriesBox.width - 2 * newRadius;\n                if (Math.min(padLeft, padRight) * 2 > padWidth) {\n                    padLeft = padWidth / 2;\n                    padRight = padWidth / 2;\n                }\n                else if (padLeft > padRight) {\n                    padLeft = padWidth - padRight;\n                }\n                else {\n                    padRight = padWidth - padLeft;\n                }\n            }\n        }\n        var newWidth = padLeft + 2 * newRadius + padRight;\n        var newHeight = padTop + 2 * newRadius + padBottom;\n        return {\n            centerX: seriesBox.x + (seriesBox.width - newWidth) / 2 + padLeft + newRadius,\n            centerY: seriesBox.y + (seriesBox.height - newHeight) / 2 + padTop + newRadius,\n            radius: newRadius,\n        };\n    };\n    PolarChart.className = 'PolarChart';\n    PolarChart.type = 'polar';\n    return PolarChart;\n}(Chart));\n\nvar __extends$s = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __awaiter$7 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator$7 = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar HierarchyChart = /** @class */ (function (_super) {\n    __extends$s(HierarchyChart, _super);\n    function HierarchyChart(document, overrideDevicePixelRatio, resources) {\n        if (document === void 0) { document = window.document; }\n        var _this = _super.call(this, document, overrideDevicePixelRatio, resources) || this;\n        _this._data = {};\n        return _this;\n    }\n    HierarchyChart.prototype.performLayout = function () {\n        return __awaiter$7(this, void 0, void 0, function () {\n            var shrinkRect, seriesAreaPadding, fullSeriesRect, hoverRectPadding, hoverRect, seriesRoot;\n            var _this = this;\n            return __generator$7(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, _super.prototype.performLayout.call(this)];\n                    case 1:\n                        shrinkRect = _a.sent();\n                        seriesAreaPadding = this.seriesAreaPadding;\n                        fullSeriesRect = shrinkRect.clone();\n                        shrinkRect.shrink(seriesAreaPadding.left, 'left');\n                        shrinkRect.shrink(seriesAreaPadding.top, 'top');\n                        shrinkRect.shrink(seriesAreaPadding.right, 'right');\n                        shrinkRect.shrink(seriesAreaPadding.bottom, 'bottom');\n                        this.seriesRect = shrinkRect;\n                        hoverRectPadding = 20;\n                        hoverRect = shrinkRect.clone().grow(hoverRectPadding);\n                        this.hoverRect = hoverRect;\n                        return [4 /*yield*/, Promise.all(this.series.map(function (series) { return __awaiter$7(_this, void 0, void 0, function () {\n                                return __generator$7(this, function (_a) {\n                                    switch (_a.label) {\n                                        case 0:\n                                            series.rootGroup.translationX = Math.floor(shrinkRect.x);\n                                            series.rootGroup.translationY = Math.floor(shrinkRect.y);\n                                            return [4 /*yield*/, series.update({ seriesRect: shrinkRect })];\n                                        case 1:\n                                            _a.sent(); // this has to happen after the `updateAxes` call\n                                            return [2 /*return*/];\n                                    }\n                                });\n                            }); }))];\n                    case 2:\n                        _a.sent();\n                        seriesRoot = this.seriesRoot;\n                        seriesRoot.setClipRectInGroupCoordinateSpace(new BBox(shrinkRect.x, shrinkRect.y, shrinkRect.width, shrinkRect.height));\n                        this.layoutService.dispatchLayoutComplete({\n                            type: 'layout-complete',\n                            chart: { width: this.scene.width, height: this.scene.height },\n                            series: { rect: fullSeriesRect, paddedRect: shrinkRect, hoverRect: hoverRect, visible: true },\n                            axes: [],\n                        });\n                        return [2 /*return*/, shrinkRect];\n                }\n            });\n        });\n    };\n    HierarchyChart.className = 'HierarchyChart';\n    HierarchyChart.type = 'hierarchy';\n    return HierarchyChart;\n}(Chart));\n\nvar __read$d = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar interpolatePattern = /(#\\{(.*?)\\})/g;\nfunction interpolate(input, values, formats) {\n    return input.replace(interpolatePattern, function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var name = args[2];\n        var _a = __read$d(name.split(':'), 2), valueName = _a[0], formatName = _a[1];\n        var value = values[valueName];\n        if (typeof value === 'number') {\n            var format = formatName && formats && formats[formatName];\n            if (format) {\n                var _b = format, locales = _b.locales, options = _b.options;\n                return value.toLocaleString(locales, options);\n            }\n            return String(value);\n        }\n        if (value instanceof Date) {\n            var format = formatName && formats && formats[formatName];\n            if (typeof format === 'string') {\n                var formatter = buildFormatter(format);\n                return formatter(value);\n            }\n            return value.toDateString();\n        }\n        if (typeof value === 'string' || (value === null || value === void 0 ? void 0 : value.toString)) {\n            return String(value);\n        }\n        return '';\n    });\n}\n\nvar element = null;\nfunction sanitizeHtml(text) {\n    element = element !== null && element !== void 0 ? element : document.createElement('div');\n    if (!text) {\n        return '';\n    }\n    element.textContent = text;\n    return element.innerHTML;\n}\n\nfunction calculateNiceSecondaryAxis(domain, primaryTickCount) {\n    // Make secondary axis domain nice using strict tick count, matching the tick count from the primary axis.\n    // This is to make the secondary axis grid lines/ tick positions align with the ones from the primary axis.\n    var start = Math.floor(domain[0]);\n    var stop = domain[1];\n    start = calculateNiceStart(start, stop, primaryTickCount);\n    var step = getTickStep(start, stop, primaryTickCount);\n    var segments = primaryTickCount - 1;\n    stop = start + segments * step;\n    var d = [start, stop];\n    var ticks = getTicks(start, step, primaryTickCount);\n    return [d, ticks];\n}\nfunction calculateNiceStart(a, b, count) {\n    var rawStep = Math.abs(b - a) / (count - 1);\n    var order = Math.floor(Math.log10(rawStep));\n    var magnitude = Math.pow(10, order);\n    return Math.floor(a / magnitude) * magnitude;\n}\nfunction getTicks(start, step, count) {\n    // power of the step will be negative if the step is a fraction (between 0 and 1)\n    var stepPower = Math.floor(Math.log10(step));\n    var fractionDigits = step > 0 && step < 1 ? Math.abs(stepPower) : 0;\n    var f = Math.pow(10, fractionDigits);\n    var ticks = new NumericTicks(fractionDigits);\n    for (var i = 0; i < count; i++) {\n        var tick = start + step * i;\n        ticks[i] = Math.round(tick * f) / f;\n    }\n    return ticks;\n}\nfunction getTickStep(start, stop, count) {\n    var segments = count - 1;\n    var rawStep = (stop - start) / segments;\n    return calculateNextNiceStep(rawStep);\n}\nfunction calculateNextNiceStep(rawStep) {\n    var order = Math.floor(Math.log10(rawStep));\n    var magnitude = Math.pow(10, order);\n    // Make order 1\n    var step = (rawStep / magnitude) * 10;\n    if (step > 0 && step <= 1) {\n        return magnitude / 10;\n    }\n    if (step > 1 && step <= 2) {\n        return (2 * magnitude) / 10;\n    }\n    if (step > 1 && step <= 5) {\n        return (5 * magnitude) / 10;\n    }\n    if (step > 5 && step <= 10) {\n        return (10 * magnitude) / 10;\n    }\n    if (step > 10 && step <= 20) {\n        return (20 * magnitude) / 10;\n    }\n    if (step > 20 && step <= 40) {\n        return (40 * magnitude) / 10;\n    }\n    if (step > 40 && step <= 50) {\n        return (50 * magnitude) / 10;\n    }\n    if (step > 50 && step <= 100) {\n        return (100 * magnitude) / 10;\n    }\n    return step;\n}\n\nvar __extends$r = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1v = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __read$c = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar NumberAxisTick = /** @class */ (function (_super) {\n    __extends$r(NumberAxisTick, _super);\n    function NumberAxisTick() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.maxSpacing = NaN;\n        return _this;\n    }\n    __decorate$1v([\n        Validate(AND(NUMBER_OR_NAN(1), GREATER_THAN('minSpacing'))),\n        Default(NaN)\n    ], NumberAxisTick.prototype, \"maxSpacing\", void 0);\n    return NumberAxisTick;\n}(BaseAxisTick));\nvar NumberAxis = /** @class */ (function (_super) {\n    __extends$r(NumberAxis, _super);\n    function NumberAxis(moduleCtx, scale) {\n        if (scale === void 0) { scale = new LinearScale$1(); }\n        var _this = _super.call(this, moduleCtx, scale) || this;\n        _this.min = NaN;\n        _this.max = NaN;\n        scale.strictClampByDefault = true;\n        return _this;\n    }\n    NumberAxis.prototype.normaliseDataDomain = function (d) {\n        var _a;\n        var _b = this, min = _b.min, max = _b.max;\n        if (d.length > 2) {\n            d = (_a = extent$4(d)) !== null && _a !== void 0 ? _a : [NaN, NaN];\n        }\n        if (!isNaN(min)) {\n            d = [min, d[1]];\n        }\n        if (!isNaN(max)) {\n            d = [d[0], max];\n        }\n        if (d[0] > d[1]) {\n            d = [];\n        }\n        return d;\n    };\n    NumberAxis.prototype.formatDatum = function (datum) {\n        if (typeof datum === 'number') {\n            return datum.toFixed(2);\n        }\n        else {\n            Logger.warnOnce('data contains Date objects which are being plotted against a number axis, please only use a number axis for numbers.');\n            return String(datum);\n        }\n    };\n    NumberAxis.prototype.createTick = function () {\n        return new NumberAxisTick();\n    };\n    NumberAxis.prototype.updateSecondaryAxisTicks = function (primaryTickCount) {\n        if (this.dataDomain == null) {\n            throw new Error('AG Charts - dataDomain not calculated, cannot perform tick calculation.');\n        }\n        var _a = __read$c(calculateNiceSecondaryAxis(this.dataDomain, primaryTickCount !== null && primaryTickCount !== void 0 ? primaryTickCount : 0), 2), d = _a[0], ticks = _a[1];\n        this.scale.nice = false;\n        this.scale.domain = d;\n        this.scale.update();\n        return ticks;\n    };\n    NumberAxis.className = 'NumberAxis';\n    NumberAxis.type = 'number';\n    __decorate$1v([\n        Validate(AND(NUMBER_OR_NAN(), LESS_THAN('max'))),\n        Default(NaN)\n    ], NumberAxis.prototype, \"min\", void 0);\n    __decorate$1v([\n        Validate(AND(NUMBER_OR_NAN(), GREATER_THAN('min'))),\n        Default(NaN)\n    ], NumberAxis.prototype, \"max\", void 0);\n    return NumberAxis;\n}(ChartAxis));\n\nvar __extends$q = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1u = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nfunction NON_ZERO_NUMBER() {\n    // Cannot be 0\n    var message = \"expecting a non-zero Number\";\n    return predicateWithMessage(function (v) { return typeof v === 'number' && v !== 0; }, message);\n}\nvar LogAxis = /** @class */ (function (_super) {\n    __extends$q(LogAxis, _super);\n    function LogAxis(moduleCtx) {\n        var _this = _super.call(this, moduleCtx, new LogScale()) || this;\n        _this.min = NaN;\n        _this.max = NaN;\n        _this.scale.strictClampByDefault = true;\n        return _this;\n    }\n    LogAxis.prototype.normaliseDataDomain = function (d) {\n        var _a;\n        var _b = this, min = _b.min, max = _b.max;\n        if (d.length > 2) {\n            d = (_a = extent$4(d)) !== null && _a !== void 0 ? _a : [NaN, NaN];\n        }\n        if (!isNaN(min)) {\n            d = [min, d[1]];\n        }\n        if (!isNaN(max)) {\n            d = [d[0], max];\n        }\n        var isInverted = d[0] > d[1];\n        var crossesZero = d[0] < 0 && d[1] > 0;\n        var hasZeroExtent = d[0] === 0 && d[1] === 0;\n        var invalidDomain = isInverted || crossesZero || hasZeroExtent;\n        if (invalidDomain) {\n            d = [];\n            if (crossesZero) {\n                Logger.warn(\"the data domain crosses zero, the chart data cannot be rendered. See log axis documentation for more information.\");\n            }\n            else if (hasZeroExtent) {\n                Logger.warn(\"the data domain has 0 extent, no data is rendered.\");\n            }\n        }\n        if (d[0] === 0) {\n            d[0] = 1;\n        }\n        if (d[1] === 0) {\n            d[1] = -1;\n        }\n        return d;\n    };\n    Object.defineProperty(LogAxis.prototype, \"base\", {\n        get: function () {\n            return this.scale.base;\n        },\n        set: function (value) {\n            this.scale.base = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    LogAxis.className = 'LogAxis';\n    LogAxis.type = 'log';\n    __decorate$1u([\n        Validate(AND(NUMBER_OR_NAN(), LESS_THAN('max'), NON_ZERO_NUMBER())),\n        Default(NaN)\n    ], LogAxis.prototype, \"min\", void 0);\n    __decorate$1u([\n        Validate(AND(NUMBER_OR_NAN(), GREATER_THAN('min'), NON_ZERO_NUMBER())),\n        Default(NaN)\n    ], LogAxis.prototype, \"max\", void 0);\n    return LogAxis;\n}(NumberAxis));\n\nvar __extends$p = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1t = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar TimeAxisTick = /** @class */ (function (_super) {\n    __extends$p(TimeAxisTick, _super);\n    function TimeAxisTick() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.maxSpacing = NaN;\n        return _this;\n    }\n    __decorate$1t([\n        Validate(AND(NUMBER_OR_NAN(1), GREATER_THAN('minSpacing'))),\n        Default(NaN)\n    ], TimeAxisTick.prototype, \"maxSpacing\", void 0);\n    return TimeAxisTick;\n}(BaseAxisTick));\nvar TimeAxis = /** @class */ (function (_super) {\n    __extends$p(TimeAxis, _super);\n    function TimeAxis(moduleCtx) {\n        var _this = _super.call(this, moduleCtx, new TimeScale$1()) || this;\n        _this.datumFormat = '%m/%d/%y, %H:%M:%S';\n        _this.min = undefined;\n        _this.max = undefined;\n        var scale = _this.scale;\n        scale.strictClampByDefault = true;\n        _this.refreshScale();\n        _this.datumFormatter = scale.tickFormat({\n            specifier: _this.datumFormat,\n        });\n        return _this;\n    }\n    TimeAxis.prototype.normaliseDataDomain = function (d) {\n        var _a;\n        var _b = this, min = _b.min, max = _b.max;\n        if (typeof min === 'number') {\n            min = new Date(min);\n        }\n        if (typeof max === 'number') {\n            max = new Date(max);\n        }\n        if (d.length > 2) {\n            d = ((_a = extent$4(d)) !== null && _a !== void 0 ? _a : [0, 1000]).map(function (x) { return new Date(x); });\n        }\n        if (min instanceof Date) {\n            d = [min, d[1]];\n        }\n        if (max instanceof Date) {\n            d = [d[0], max];\n        }\n        if (d[0] > d[1]) {\n            d = [];\n        }\n        return d;\n    };\n    TimeAxis.prototype.createTick = function () {\n        return new TimeAxisTick();\n    };\n    TimeAxis.prototype.onLabelFormatChange = function (ticks, format) {\n        if (format) {\n            _super.prototype.onLabelFormatChange.call(this, ticks, format);\n        }\n        else {\n            // For time axis labels to look nice, even if date format wasn't set.\n            this.labelFormatter = this.scale.tickFormat({ ticks: ticks });\n        }\n    };\n    TimeAxis.prototype.formatDatum = function (datum) {\n        var _a;\n        return (_a = this.moduleCtx.callbackCache.call(this.datumFormatter, datum)) !== null && _a !== void 0 ? _a : String(datum);\n    };\n    TimeAxis.prototype.calculatePadding = function (_min, _max) {\n        // numbers in domain correspond to Unix timestamps\n        // automatically expand domain by 1 in each direction\n        return 1;\n    };\n    TimeAxis.className = 'TimeAxis';\n    TimeAxis.type = 'time';\n    __decorate$1t([\n        Validate(AND(OPT_DATE_OR_DATETIME_MS, LESS_THAN('max')))\n    ], TimeAxis.prototype, \"min\", void 0);\n    __decorate$1t([\n        Validate(AND(OPT_DATE_OR_DATETIME_MS, GREATER_THAN('min')))\n    ], TimeAxis.prototype, \"max\", void 0);\n    return TimeAxis;\n}(ChartAxis));\n\nvar __extends$o = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign$e = (undefined && undefined.__assign) || function () {\n    __assign$e = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$e.apply(this, arguments);\n};\nvar __decorate$1s = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter$6 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator$6 = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __read$b = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$7 = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar AreaSeriesLabel = /** @class */ (function (_super) {\n    __extends$o(AreaSeriesLabel, _super);\n    function AreaSeriesLabel() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.formatter = undefined;\n        return _this;\n    }\n    __decorate$1s([\n        Validate(OPT_FUNCTION)\n    ], AreaSeriesLabel.prototype, \"formatter\", void 0);\n    return AreaSeriesLabel;\n}(Label$1));\nvar AreaSeriesTooltip = /** @class */ (function (_super) {\n    __extends$o(AreaSeriesTooltip, _super);\n    function AreaSeriesTooltip() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.renderer = undefined;\n        _this.format = undefined;\n        return _this;\n    }\n    __decorate$1s([\n        Validate(OPT_FUNCTION)\n    ], AreaSeriesTooltip.prototype, \"renderer\", void 0);\n    __decorate$1s([\n        Validate(OPT_STRING)\n    ], AreaSeriesTooltip.prototype, \"format\", void 0);\n    return AreaSeriesTooltip;\n}(SeriesTooltip));\nvar AreaSeriesTag;\n(function (AreaSeriesTag) {\n    AreaSeriesTag[AreaSeriesTag[\"Fill\"] = 0] = \"Fill\";\n    AreaSeriesTag[AreaSeriesTag[\"Stroke\"] = 1] = \"Stroke\";\n    AreaSeriesTag[AreaSeriesTag[\"Marker\"] = 2] = \"Marker\";\n    AreaSeriesTag[AreaSeriesTag[\"Label\"] = 3] = \"Label\";\n})(AreaSeriesTag || (AreaSeriesTag = {}));\nvar AreaSeries = /** @class */ (function (_super) {\n    __extends$o(AreaSeries, _super);\n    function AreaSeries(moduleCtx) {\n        var _a, _b;\n        var _this = _super.call(this, {\n            moduleCtx: moduleCtx,\n            pathsPerSeries: 2,\n            pathsZIndexSubOrderOffset: [0, 1000],\n            hasMarkers: true,\n            directionKeys: (_a = {},\n                _a[ChartAxisDirection.X] = ['xKey'],\n                _a[ChartAxisDirection.Y] = ['yKeys'],\n                _a),\n            directionNames: (_b = {},\n                _b[ChartAxisDirection.X] = ['xName'],\n                _b[ChartAxisDirection.Y] = ['yNames'],\n                _b),\n        }) || this;\n        _this.tooltip = new AreaSeriesTooltip();\n        _this.marker = new CartesianSeriesMarker();\n        _this.label = new AreaSeriesLabel();\n        _this.fills = ['#c16068', '#a2bf8a', '#ebcc87', '#80a0c3', '#b58dae', '#85c0d1'];\n        _this.strokes = ['#874349', '#718661', '#a48f5f', '#5a7088', '#7f637a', '#5d8692'];\n        _this.fillOpacity = 1;\n        _this.strokeOpacity = 1;\n        _this.lineDash = [0];\n        _this.lineDashOffset = 0;\n        _this.xKey = undefined;\n        _this.xName = undefined;\n        _this._yKeys = [];\n        _this._visibles = [];\n        _this.yNames = [];\n        _this.strokeWidth = 2;\n        _this.shadow = undefined;\n        var _c = _this, marker = _c.marker, label = _c.label;\n        marker.enabled = false;\n        label.enabled = false;\n        return _this;\n    }\n    Object.defineProperty(AreaSeries.prototype, \"yKeys\", {\n        get: function () {\n            return this._yKeys;\n        },\n        set: function (values) {\n            if (!areArrayItemsStrictlyEqual(this._yKeys, values)) {\n                this._yKeys = values;\n                this.processedData = undefined;\n                this.processSeriesItemEnabled();\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(AreaSeries.prototype, \"visibles\", {\n        get: function () {\n            return this._visibles;\n        },\n        set: function (visibles) {\n            this._visibles = visibles;\n            this.processSeriesItemEnabled();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    AreaSeries.prototype.processSeriesItemEnabled = function () {\n        var _a = this, seriesItemEnabled = _a.seriesItemEnabled, _b = _a._visibles, visibles = _b === void 0 ? [] : _b;\n        seriesItemEnabled.clear();\n        this._yKeys.forEach(function (key, idx) { var _a; return seriesItemEnabled.set(key, (_a = visibles[idx]) !== null && _a !== void 0 ? _a : true); });\n    };\n    Object.defineProperty(AreaSeries.prototype, \"normalizedTo\", {\n        get: function () {\n            return this._normalizedTo;\n        },\n        set: function (value) {\n            var absValue = value ? Math.abs(value) : undefined;\n            if (this._normalizedTo !== absValue) {\n                this._normalizedTo = absValue;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    AreaSeries.prototype.processData = function () {\n        return __awaiter$6(this, void 0, void 0, function () {\n            var _a, xKey, yKeys, seriesItemEnabled, xAxis, yAxis, normalizedTo, data, isContinuousX, isContinuousY, enabledYKeys, normaliseTo, extraProps;\n            return __generator$6(this, function (_b) {\n                _a = this, xKey = _a.xKey, yKeys = _a.yKeys, seriesItemEnabled = _a.seriesItemEnabled, xAxis = _a.xAxis, yAxis = _a.yAxis, normalizedTo = _a.normalizedTo;\n                data = xKey && yKeys.length && this.data ? this.data : [];\n                isContinuousX = (xAxis === null || xAxis === void 0 ? void 0 : xAxis.scale) instanceof ContinuousScale;\n                isContinuousY = (yAxis === null || yAxis === void 0 ? void 0 : yAxis.scale) instanceof ContinuousScale;\n                enabledYKeys = __spreadArray$7([], __read$b(seriesItemEnabled.entries())).filter(function (_a) {\n                    var _b = __read$b(_a, 2), enabled = _b[1];\n                    return enabled;\n                }).map(function (_a) {\n                    var _b = __read$b(_a, 1), yKey = _b[0];\n                    return yKey;\n                });\n                normaliseTo = normalizedTo && isFinite(normalizedTo) ? normalizedTo : undefined;\n                extraProps = [];\n                if (normaliseTo) {\n                    extraProps.push(normaliseGroupTo(enabledYKeys, normaliseTo, 'sum'));\n                }\n                this.dataModel = new DataModel({\n                    props: __spreadArray$7(__spreadArray$7(__spreadArray$7([\n                        keyProperty(xKey, isContinuousX, { id: 'xValue' })\n                    ], __read$b(enabledYKeys.map(function (yKey) {\n                        return valueProperty(yKey, isContinuousY, {\n                            id: \"yValue-\" + yKey,\n                            missingValue: NaN,\n                            invalidValue: undefined,\n                        });\n                    }))), [\n                        sum(enabledYKeys)\n                    ]), __read$b(extraProps)),\n                    groupByKeys: true,\n                    dataVisible: this.visible && enabledYKeys.length > 0,\n                });\n                this.processedData = this.dataModel.processData(data);\n                return [2 /*return*/];\n            });\n        });\n    };\n    AreaSeries.prototype.getDomain = function (direction) {\n        var _a = this, processedData = _a.processedData, xAxis = _a.xAxis, yAxis = _a.yAxis;\n        if (!processedData)\n            return [];\n        var _b = __read$b(processedData.defs.keys, 1), keyDef = _b[0], _c = processedData.domain, _d = __read$b(_c.keys, 1), keys = _d[0], _e = __read$b(_c.values, 1), yExtent = _e[0], _f = _c.aggValues, _g = _f === void 0 ? [] : _f, _h = __read$b(_g, 1), ySumExtent = _h[0];\n        if (direction === ChartAxisDirection.X) {\n            if (keyDef.valueType === 'category') {\n                return keys;\n            }\n            return this.fixNumericExtent(extent$4(keys), xAxis);\n        }\n        else if (yAxis instanceof LogAxis || yAxis instanceof TimeAxis) {\n            return this.fixNumericExtent(yExtent, yAxis);\n        }\n        else {\n            return this.fixNumericExtent(ySumExtent, yAxis);\n        }\n    };\n    AreaSeries.prototype.createNodeData = function () {\n        var _a;\n        return __awaiter$6(this, void 0, void 0, function () {\n            var _b, xAxis, yAxis, data, _c, _d, groupedData, callbackCache, contexts, _e, yKeys, _f, xKey, marker, label, fills, strokes, seriesId, xScale, yScale, continuousY, xOffset, xDataCount, cumulativePathValues, cumulativeMarkerValues, createPathCoordinates, createMarkerCoordinate;\n            var _this = this;\n            return __generator$6(this, function (_g) {\n                _b = this, xAxis = _b.xAxis, yAxis = _b.yAxis, data = _b.data, _c = _b.processedData, _d = _c === void 0 ? {} : _c, groupedData = _d.data, callbackCache = _b.ctx.callbackCache;\n                if (!xAxis || !yAxis || !data) {\n                    return [2 /*return*/, []];\n                }\n                contexts = [];\n                _e = this, yKeys = _e.yKeys, _f = _e.xKey, xKey = _f === void 0 ? '' : _f, marker = _e.marker, label = _e.label, fills = _e.fills, strokes = _e.strokes, seriesId = _e.id;\n                xScale = xAxis.scale;\n                yScale = yAxis.scale;\n                continuousY = yScale instanceof ContinuousScale;\n                xOffset = ((_a = xScale.bandwidth) !== null && _a !== void 0 ? _a : 0) / 2;\n                xDataCount = data.length;\n                cumulativePathValues = new Array(xDataCount)\n                    .fill(null)\n                    .map(function () { return ({ left: 0, right: 0 }); });\n                cumulativeMarkerValues = new Array(xDataCount).fill(0);\n                createPathCoordinates = function (xDatum, yDatum, idx, side) {\n                    var x = xScale.convert(xDatum) + xOffset;\n                    var prevY = cumulativePathValues[idx][side];\n                    var currY = cumulativePathValues[idx][side] + yDatum;\n                    var prevYCoordinate = yScale.convert(prevY, { strict: false });\n                    var currYCoordinate = yScale.convert(currY, { strict: false });\n                    cumulativePathValues[idx][side] = currY;\n                    return [\n                        { x: x, y: currYCoordinate, size: marker.size },\n                        { x: x, y: prevYCoordinate, size: marker.size },\n                    ];\n                };\n                createMarkerCoordinate = function (xDatum, yDatum, idx, rawYDatum) {\n                    var currY;\n                    // if not normalized, the invalid data points will be processed as `undefined` in processData()\n                    // if normalized, the invalid data points will be processed as 0 rather than `undefined`\n                    // check if unprocessed datum is valid as we only want to show markers for valid points\n                    var normalized = _this.normalizedTo && isFinite(_this.normalizedTo);\n                    var normalizedAndValid = normalized && continuousY && isContinuous(rawYDatum);\n                    var valid = (!normalized && !isNaN(rawYDatum)) || normalizedAndValid;\n                    if (valid) {\n                        currY = cumulativeMarkerValues[idx] += yDatum;\n                    }\n                    var x = xScale.convert(xDatum) + xOffset;\n                    var y = yScale.convert(currY, { strict: false });\n                    return { x: x, y: y, size: marker.size };\n                };\n                yKeys.forEach(function (yKey, seriesIdx) {\n                    var _a;\n                    var yKeyDataIndex = (_a = _this.dataModel) === null || _a === void 0 ? void 0 : _a.resolveProcessedDataIndexById(\"yValue-\" + yKey);\n                    var labelSelectionData = [];\n                    var markerSelectionData = [];\n                    var strokeSelectionData = { itemId: yKey, points: [], yValues: [] };\n                    var fillSelectionData = { itemId: yKey, points: [] };\n                    contexts[seriesIdx] = {\n                        itemId: yKey,\n                        fillSelectionData: fillSelectionData,\n                        labelData: labelSelectionData,\n                        nodeData: markerSelectionData,\n                        strokeSelectionData: strokeSelectionData,\n                    };\n                    if (!yKeyDataIndex) {\n                        return;\n                    }\n                    var fillPoints = fillSelectionData.points;\n                    var fillPhantomPoints = [];\n                    var strokePoints = strokeSelectionData.points;\n                    var yValues = strokeSelectionData.yValues;\n                    var datumIdx = -1;\n                    groupedData === null || groupedData === void 0 ? void 0 : groupedData.forEach(function (datumGroup, dataIdx) {\n                        var _a = __read$b(datumGroup.keys, 1), xDatum = _a[0], datumArray = datumGroup.datum, valuesArray = datumGroup.values;\n                        valuesArray.forEach(function (values, valueIdx) {\n                            var _a;\n                            datumIdx++;\n                            var seriesDatum = datumArray[valueIdx];\n                            var rawYDatum = values[yKeyDataIndex.index];\n                            var yDatum = isNaN(rawYDatum) ? undefined : rawYDatum;\n                            var nextValuesSameGroup = valueIdx < valuesArray.length - 1;\n                            var nextDatumGroup = nextValuesSameGroup ? datumGroup : groupedData[dataIdx + 1];\n                            var nextXDatum = nextDatumGroup === null || nextDatumGroup === void 0 ? void 0 : nextDatumGroup.keys[0];\n                            var rawNextYIdx = nextValuesSameGroup ? valueIdx + 1 : 0;\n                            var rawNextYDatum = nextDatumGroup === null || nextDatumGroup === void 0 ? void 0 : nextDatumGroup.values[rawNextYIdx][yKeyDataIndex.index];\n                            var nextYDatum = isNaN(rawNextYDatum) ? undefined : rawNextYDatum;\n                            // marker data\n                            var point = createMarkerCoordinate(xDatum, +yDatum, datumIdx, seriesDatum[yKey]);\n                            if (marker) {\n                                markerSelectionData.push({\n                                    index: datumIdx,\n                                    series: _this,\n                                    itemId: yKey,\n                                    datum: seriesDatum,\n                                    nodeMidPoint: { x: point.x, y: point.y },\n                                    cumulativeValue: cumulativeMarkerValues[datumIdx],\n                                    yValue: yDatum,\n                                    yKey: yKey,\n                                    xKey: xKey,\n                                    point: point,\n                                    fill: fills[seriesIdx % fills.length],\n                                    stroke: strokes[seriesIdx % strokes.length],\n                                });\n                            }\n                            // label data\n                            var labelText;\n                            if (label.formatter) {\n                                labelText = (_a = callbackCache.call(label.formatter, { value: yDatum, seriesId: seriesId })) !== null && _a !== void 0 ? _a : '';\n                            }\n                            else {\n                                labelText = isNumber$4(yDatum) ? Number(yDatum).toFixed(2) : String(yDatum);\n                            }\n                            if (label) {\n                                labelSelectionData.push({\n                                    index: datumIdx,\n                                    itemId: yKey,\n                                    point: point,\n                                    label: labelText\n                                        ? {\n                                            text: labelText,\n                                            fontStyle: label.fontStyle,\n                                            fontWeight: label.fontWeight,\n                                            fontSize: label.fontSize,\n                                            fontFamily: label.fontFamily,\n                                            textAlign: 'center',\n                                            textBaseline: 'bottom',\n                                            fill: label.color,\n                                        }\n                                        : undefined,\n                                });\n                            }\n                            // fill data\n                            // Handle data in pairs of current and next x and y values\n                            var windowX = [xDatum, nextXDatum];\n                            var windowY = [yDatum, nextYDatum];\n                            if (windowX.some(function (v) { return v == undefined; })) {\n                                return;\n                            }\n                            if (windowY.some(function (v) { return v == undefined; })) {\n                                windowY[0] = 0;\n                                windowY[1] = 0;\n                            }\n                            var currCoordinates = createPathCoordinates(windowX[0], +windowY[0], datumIdx, 'right');\n                            fillPoints.push(currCoordinates[0]);\n                            fillPhantomPoints.push(currCoordinates[1]);\n                            var nextCoordinates = createPathCoordinates(windowX[1], +windowY[1], datumIdx, 'left');\n                            fillPoints.push(nextCoordinates[0]);\n                            fillPhantomPoints.push(nextCoordinates[1]);\n                            // stroke data\n                            strokePoints.push({ x: NaN, y: NaN }); // moveTo\n                            yValues.push(undefined);\n                            strokePoints.push(currCoordinates[0]);\n                            yValues.push(yDatum);\n                            if (nextYDatum !== undefined) {\n                                strokePoints.push(nextCoordinates[0]);\n                                yValues.push(yDatum);\n                            }\n                        });\n                    });\n                    for (var i = fillPhantomPoints.length - 1; i >= 0; i--) {\n                        fillPoints.push(fillPhantomPoints[i]);\n                    }\n                });\n                return [2 /*return*/, contexts];\n            });\n        });\n    };\n    AreaSeries.prototype.isPathOrSelectionDirty = function () {\n        return this.marker.isDirty();\n    };\n    AreaSeries.prototype.markerFactory = function () {\n        var shape = this.marker.shape;\n        var MarkerShape = getMarker$1(shape);\n        return new MarkerShape();\n    };\n    AreaSeries.prototype.updateMarkerSelection = function (opts) {\n        return __awaiter$6(this, void 0, void 0, function () {\n            var nodeData, markerSelection, enabled, data;\n            return __generator$6(this, function (_a) {\n                nodeData = opts.nodeData, markerSelection = opts.markerSelection;\n                enabled = this.marker.enabled;\n                data = enabled && nodeData ? nodeData : [];\n                if (this.marker.isDirty()) {\n                    markerSelection.clear();\n                }\n                return [2 /*return*/, markerSelection.update(data, function (marker) {\n                        marker.tag = AreaSeriesTag.Marker;\n                    })];\n            });\n        });\n    };\n    AreaSeries.prototype.updateMarkerNodes = function (opts) {\n        var _a;\n        return __awaiter$6(this, void 0, void 0, function () {\n            var markerSelection, isDatumHighlighted, _b, seriesId, _c, xKey, marker, seriesItemEnabled, yKeys, fills, strokes, seriesFillOpacity, _d, markerFillOpacity, strokeOpacity, _e, highlightedFill, _f, highlightFillOpacity, highlightedStroke, highlightedDatumStrokeWidth, callbackCache, size, formatter, markerStrokeWidth, customMarker;\n            return __generator$6(this, function (_g) {\n                markerSelection = opts.markerSelection, isDatumHighlighted = opts.isHighlight;\n                _b = this, seriesId = _b.id, _c = _b.xKey, xKey = _c === void 0 ? '' : _c, marker = _b.marker, seriesItemEnabled = _b.seriesItemEnabled, yKeys = _b.yKeys, fills = _b.fills, strokes = _b.strokes, seriesFillOpacity = _b.fillOpacity, _d = _b.marker.fillOpacity, markerFillOpacity = _d === void 0 ? seriesFillOpacity : _d, strokeOpacity = _b.strokeOpacity, _e = _b.highlightStyle.item, highlightedFill = _e.fill, _f = _e.fillOpacity, highlightFillOpacity = _f === void 0 ? markerFillOpacity : _f, highlightedStroke = _e.stroke, highlightedDatumStrokeWidth = _e.strokeWidth, callbackCache = _b.ctx.callbackCache;\n                size = marker.size, formatter = marker.formatter;\n                markerStrokeWidth = (_a = marker.strokeWidth) !== null && _a !== void 0 ? _a : this.strokeWidth;\n                customMarker = typeof marker.shape === 'function';\n                markerSelection.each(function (node, datum) {\n                    var _a, _b, _c, _d, _e, _f, _g, _h;\n                    var yKeyIndex = yKeys.indexOf(datum.yKey);\n                    var fill = isDatumHighlighted && highlightedFill !== undefined\n                        ? highlightedFill\n                        : (_a = marker.fill) !== null && _a !== void 0 ? _a : fills[yKeyIndex % fills.length];\n                    var fillOpacity = isDatumHighlighted ? highlightFillOpacity : markerFillOpacity;\n                    var stroke = isDatumHighlighted && highlightedStroke !== undefined\n                        ? highlightedStroke\n                        : (_b = marker.stroke) !== null && _b !== void 0 ? _b : strokes[yKeyIndex % fills.length];\n                    var strokeWidth = isDatumHighlighted && highlightedDatumStrokeWidth !== undefined\n                        ? highlightedDatumStrokeWidth\n                        : markerStrokeWidth;\n                    var format = undefined;\n                    if (formatter) {\n                        format = callbackCache.call(formatter, {\n                            datum: datum.datum,\n                            xKey: xKey,\n                            yKey: datum.yKey,\n                            fill: fill,\n                            stroke: stroke,\n                            strokeWidth: strokeWidth,\n                            size: size,\n                            highlighted: isDatumHighlighted,\n                            seriesId: seriesId,\n                        });\n                    }\n                    node.fill = (_c = format === null || format === void 0 ? void 0 : format.fill) !== null && _c !== void 0 ? _c : fill;\n                    node.stroke = (_d = format === null || format === void 0 ? void 0 : format.stroke) !== null && _d !== void 0 ? _d : stroke;\n                    node.strokeWidth = (_e = format === null || format === void 0 ? void 0 : format.strokeWidth) !== null && _e !== void 0 ? _e : strokeWidth;\n                    node.fillOpacity = fillOpacity !== null && fillOpacity !== void 0 ? fillOpacity : 1;\n                    node.strokeOpacity = (_g = (_f = marker.strokeOpacity) !== null && _f !== void 0 ? _f : strokeOpacity) !== null && _g !== void 0 ? _g : 1;\n                    node.size = (_h = format === null || format === void 0 ? void 0 : format.size) !== null && _h !== void 0 ? _h : size;\n                    node.translationX = datum.point.x;\n                    node.translationY = datum.point.y;\n                    node.visible =\n                        node.size > 0 && !!seriesItemEnabled.get(datum.yKey) && !isNaN(datum.point.x) && !isNaN(datum.point.y);\n                    if (!customMarker || node.dirtyPath) {\n                        return;\n                    }\n                    // Only for custom marker shapes\n                    node.path.clear({ trackChanges: true });\n                    node.updatePath();\n                    node.checkPathDirty();\n                });\n                if (!isDatumHighlighted) {\n                    this.marker.markClean();\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    AreaSeries.prototype.updateLabelSelection = function (opts) {\n        return __awaiter$6(this, void 0, void 0, function () {\n            var labelData, labelSelection;\n            return __generator$6(this, function (_a) {\n                labelData = opts.labelData, labelSelection = opts.labelSelection;\n                return [2 /*return*/, labelSelection.update(labelData, function (text) {\n                        text.tag = AreaSeriesTag.Label;\n                    })];\n            });\n        });\n    };\n    AreaSeries.prototype.updateLabelNodes = function (opts) {\n        return __awaiter$6(this, void 0, void 0, function () {\n            var labelSelection, _a, labelEnabled, fontStyle, fontWeight, fontSize, fontFamily, color;\n            return __generator$6(this, function (_b) {\n                labelSelection = opts.labelSelection;\n                _a = this.label, labelEnabled = _a.enabled, fontStyle = _a.fontStyle, fontWeight = _a.fontWeight, fontSize = _a.fontSize, fontFamily = _a.fontFamily, color = _a.color;\n                labelSelection.each(function (text, datum) {\n                    var point = datum.point, label = datum.label;\n                    if (label && labelEnabled) {\n                        text.fontStyle = fontStyle;\n                        text.fontWeight = fontWeight;\n                        text.fontSize = fontSize;\n                        text.fontFamily = fontFamily;\n                        text.textAlign = label.textAlign;\n                        text.textBaseline = label.textBaseline;\n                        text.text = label.text;\n                        text.x = point.x;\n                        text.y = point.y - 10;\n                        text.fill = color;\n                        text.visible = true;\n                    }\n                    else {\n                        text.visible = false;\n                    }\n                });\n                return [2 /*return*/];\n            });\n        });\n    };\n    AreaSeries.prototype.getNodeClickEvent = function (event, datum) {\n        var _a;\n        return new CartesianSeriesNodeClickEvent((_a = this.xKey) !== null && _a !== void 0 ? _a : '', datum.yKey, event, datum, this);\n    };\n    AreaSeries.prototype.getNodeDoubleClickEvent = function (event, datum) {\n        var _a;\n        return new CartesianSeriesNodeDoubleClickEvent((_a = this.xKey) !== null && _a !== void 0 ? _a : '', datum.yKey, event, datum, this);\n    };\n    AreaSeries.prototype.getTooltipHtml = function (nodeDatum) {\n        var _a, _b, _c, _d;\n        var _e = this, xKey = _e.xKey, seriesId = _e.id;\n        var yKey = nodeDatum.yKey;\n        var yKeyDataIndex = (_a = this.dataModel) === null || _a === void 0 ? void 0 : _a.resolveProcessedDataIndexById(\"yValue-\" + yKey);\n        if (!(xKey && yKey) || !yKeyDataIndex) {\n            return '';\n        }\n        var datum = nodeDatum.datum;\n        var xValue = datum[xKey];\n        var yValue = datum[yKey];\n        var _f = this, xAxis = _f.xAxis, yAxis = _f.yAxis, yKeys = _f.yKeys;\n        if (!(xAxis && yAxis && isNumber$4(yValue)) || !yKeyDataIndex) {\n            return '';\n        }\n        var _g = this, xName = _g.xName, yNames = _g.yNames, fills = _g.fills, strokes = _g.strokes, tooltip = _g.tooltip, marker = _g.marker;\n        var size = marker.size, markerFormatter = marker.formatter, markerStrokeWidth = marker.strokeWidth, markerFill = marker.fill, markerStroke = marker.stroke;\n        var xString = xAxis.formatDatum(xValue);\n        var yString = yAxis.formatDatum(yValue);\n        var yKeyIndex = yKeys.indexOf(yKey);\n        var processedYValue = (_c = (_b = this.processedData) === null || _b === void 0 ? void 0 : _b.data[nodeDatum.index]) === null || _c === void 0 ? void 0 : _c.values[0][yKeyDataIndex === null || yKeyDataIndex === void 0 ? void 0 : yKeyDataIndex.index];\n        var yName = yNames[yKeyIndex];\n        var title = sanitizeHtml(yName);\n        var content = sanitizeHtml(xString + ': ' + yString);\n        var strokeWidth = markerStrokeWidth !== null && markerStrokeWidth !== void 0 ? markerStrokeWidth : this.strokeWidth;\n        var fill = markerFill !== null && markerFill !== void 0 ? markerFill : fills[yKeyIndex % fills.length];\n        var stroke = markerStroke !== null && markerStroke !== void 0 ? markerStroke : strokes[yKeyIndex % fills.length];\n        var format = undefined;\n        if (markerFormatter) {\n            format = markerFormatter({\n                datum: datum,\n                xKey: xKey,\n                yKey: yKey,\n                fill: fill,\n                stroke: stroke,\n                strokeWidth: strokeWidth,\n                size: size,\n                highlighted: false,\n                seriesId: seriesId,\n            });\n        }\n        var color = (_d = format === null || format === void 0 ? void 0 : format.fill) !== null && _d !== void 0 ? _d : fill;\n        var defaults = {\n            title: title,\n            backgroundColor: color,\n            content: content,\n        };\n        var tooltipRenderer = tooltip.renderer, tooltipFormat = tooltip.format;\n        if (tooltipFormat || tooltipRenderer) {\n            var params = {\n                datum: datum,\n                xKey: xKey,\n                xName: xName,\n                xValue: xValue,\n                yKey: yKey,\n                yValue: yValue,\n                processedYValue: processedYValue,\n                yName: yName,\n                color: color,\n                title: title,\n                seriesId: seriesId,\n            };\n            if (tooltipFormat) {\n                return toTooltipHtml$1({\n                    content: interpolate(tooltipFormat, params),\n                }, defaults);\n            }\n            if (tooltipRenderer) {\n                return toTooltipHtml$1(tooltipRenderer(params), defaults);\n            }\n        }\n        return toTooltipHtml$1(defaults);\n    };\n    AreaSeries.prototype.getLegendData = function () {\n        var _a, _b, _c, _d, _e;\n        var _f = this, data = _f.data, id = _f.id, xKey = _f.xKey, yKeys = _f.yKeys, yNames = _f.yNames, seriesItemEnabled = _f.seriesItemEnabled, marker = _f.marker, fills = _f.fills, strokes = _f.strokes, fillOpacity = _f.fillOpacity, strokeOpacity = _f.strokeOpacity;\n        if (!(data === null || data === void 0 ? void 0 : data.length) || !xKey || !yKeys.length) {\n            return [];\n        }\n        var legendData = [];\n        // Area stacks should be listed in the legend in reverse order, for symmetry with the\n        // vertical stack display order.\n        for (var index = yKeys.length - 1; index >= 0; index--) {\n            var yKey = yKeys[index];\n            legendData.push({\n                legendType: 'category',\n                id: id,\n                itemId: yKey,\n                seriesId: id,\n                enabled: (_a = seriesItemEnabled.get(yKey)) !== null && _a !== void 0 ? _a : false,\n                label: {\n                    text: yNames[index] || yKeys[index],\n                },\n                marker: {\n                    shape: marker.shape,\n                    fill: (_b = marker.fill) !== null && _b !== void 0 ? _b : fills[index % fills.length],\n                    stroke: (_c = marker.stroke) !== null && _c !== void 0 ? _c : strokes[index % strokes.length],\n                    fillOpacity: (_d = marker.fillOpacity) !== null && _d !== void 0 ? _d : fillOpacity,\n                    strokeOpacity: (_e = marker.strokeOpacity) !== null && _e !== void 0 ? _e : strokeOpacity,\n                },\n            });\n        }\n        return legendData;\n    };\n    AreaSeries.prototype.onLegendItemDoubleClick = function (event) {\n        var _this = this;\n        var enabled = event.enabled, itemId = event.itemId, series = event.series, numVisibleItems = event.numVisibleItems;\n        var newEnableds = {};\n        var totalVisibleItems = Object.values(numVisibleItems).reduce(function (p, v) { return p + v; }, 0);\n        var singleEnabledWasClicked = totalVisibleItems === 1 && enabled;\n        if (series.id === this.id) {\n            var singleEnabledInEachSeries_1 = Object.values(numVisibleItems).filter(function (v) { return v === 1; }).length === Object.keys(numVisibleItems).length;\n            this.yKeys.forEach(function (yKey) {\n                var _a;\n                var matches = yKey === itemId;\n                var newEnabled = matches || singleEnabledWasClicked || (singleEnabledInEachSeries_1 && enabled);\n                newEnableds[yKey] = (_a = newEnableds[yKey]) !== null && _a !== void 0 ? _a : newEnabled;\n            });\n        }\n        else {\n            this.yKeys.forEach(function (yKey) {\n                newEnableds[yKey] = singleEnabledWasClicked;\n            });\n        }\n        Object.keys(newEnableds).forEach(function (yKey) {\n            _super.prototype.toggleSeriesItem.call(_this, yKey, newEnableds[yKey]);\n        });\n    };\n    AreaSeries.prototype.animateEmptyUpdateReady = function (_a) {\n        var _this = this;\n        var markerSelections = _a.markerSelections, labelSelections = _a.labelSelections, contextData = _a.contextData, paths = _a.paths, seriesRect = _a.seriesRect;\n        var _b = this, strokes = _b.strokes, fills = _b.fills, fillOpacity = _b.fillOpacity, lineDash = _b.lineDash, lineDashOffset = _b.lineDashOffset, strokeOpacity = _b.strokeOpacity, strokeWidth = _b.strokeWidth, shadow = _b.shadow;\n        contextData.forEach(function (_a, seriesIdx) {\n            var _b, _c, _d;\n            var fillSelectionData = _a.fillSelectionData, strokeSelectionData = _a.strokeSelectionData, itemId = _a.itemId;\n            var _e = __read$b(paths[seriesIdx], 2), fill = _e[0], stroke = _e[1];\n            var duration = 1000;\n            var markerDuration = 200;\n            var animationOptions = {\n                from: 0,\n                to: (_b = seriesRect === null || seriesRect === void 0 ? void 0 : seriesRect.width) !== null && _b !== void 0 ? _b : 0,\n                disableInteractions: true,\n                duration: duration,\n                ease: linear,\n                repeat: 0,\n            };\n            // Stroke\n            {\n                var points_1 = strokeSelectionData.points, yValues_1 = strokeSelectionData.yValues;\n                stroke.tag = AreaSeriesTag.Stroke;\n                stroke.fill = undefined;\n                stroke.lineJoin = stroke.lineCap = 'round';\n                stroke.pointerEvents = PointerEvents.None;\n                stroke.stroke = strokes[seriesIdx % strokes.length];\n                stroke.strokeWidth = _this.getStrokeWidth(_this.strokeWidth, { itemId: itemId });\n                stroke.strokeOpacity = strokeOpacity;\n                stroke.lineDash = lineDash;\n                stroke.lineDashOffset = lineDashOffset;\n                (_c = _this.animationManager) === null || _c === void 0 ? void 0 : _c.animate(_this.id + \"_empty-update-ready_stroke_\" + seriesIdx, __assign$e(__assign$e({}, animationOptions), { onUpdate: function (xValue) {\n                        stroke.path.clear({ trackChanges: true });\n                        var moveTo = true;\n                        points_1.forEach(function (point, index) {\n                            // Draw/move the full segment if past the end of this segment\n                            if (yValues_1[index] === undefined || isNaN(point.x) || isNaN(point.y)) {\n                                moveTo = true;\n                            }\n                            else if (point.x <= xValue) {\n                                if (moveTo) {\n                                    stroke.path.moveTo(point.x, point.y);\n                                    moveTo = false;\n                                }\n                                else {\n                                    stroke.path.lineTo(point.x, point.y);\n                                }\n                            }\n                            else if (index > 0 &&\n                                yValues_1[index] !== undefined &&\n                                yValues_1[index - 1] !== undefined &&\n                                points_1[index - 1].x <= xValue) {\n                                // Draw/move partial line if in between the start and end of this segment\n                                var start = points_1[index - 1];\n                                var end = point;\n                                var x = xValue;\n                                var y = start.y + ((x - start.x) * (end.y - start.y)) / (end.x - start.x);\n                                stroke.path.lineTo(x, y);\n                            }\n                        });\n                        stroke.checkPathDirty();\n                    } }));\n            }\n            // Fill\n            {\n                var allPoints = fillSelectionData.points;\n                var points_2 = allPoints.slice(0, allPoints.length / 2);\n                var bottomPoints_1 = allPoints.slice(allPoints.length / 2);\n                fill.tag = AreaSeriesTag.Fill;\n                fill.stroke = undefined;\n                fill.lineJoin = 'round';\n                fill.pointerEvents = PointerEvents.None;\n                fill.fill = fills[seriesIdx % fills.length];\n                fill.fillOpacity = fillOpacity;\n                fill.strokeOpacity = strokeOpacity;\n                fill.strokeWidth = strokeWidth;\n                fill.lineDash = lineDash;\n                fill.lineDashOffset = lineDashOffset;\n                fill.fillShadow = shadow;\n                (_d = _this.animationManager) === null || _d === void 0 ? void 0 : _d.animate(_this.id + \"_empty-update-ready_fill_\" + seriesIdx, __assign$e(__assign$e({}, animationOptions), { onUpdate: function (xValue) {\n                        fill.path.clear({ trackChanges: true });\n                        var x = 0;\n                        var y = 0;\n                        points_2.forEach(function (point, index) {\n                            if (point.x <= xValue) {\n                                // Draw/move the full segment if past the end of this segment\n                                x = point.x;\n                                y = point.y;\n                                fill.path.lineTo(point.x, point.y);\n                            }\n                            else if (index > 0 && points_2[index - 1].x < xValue) {\n                                // Draw/move partial line if in between the start and end of this segment\n                                var start = points_2[index - 1];\n                                var end = point;\n                                x = xValue;\n                                y = start.y + ((x - start.x) * (end.y - start.y)) / (end.x - start.x);\n                                fill.path.lineTo(x, y);\n                            }\n                        });\n                        bottomPoints_1.forEach(function (point, index) {\n                            var reverseIndex = bottomPoints_1.length - index - 1;\n                            if (point.x <= xValue) {\n                                fill.path.lineTo(point.x, point.y);\n                            }\n                            else if (reverseIndex > 0 && points_2[reverseIndex - 1].x < xValue) {\n                                var start = point;\n                                var end = bottomPoints_1[index + 1];\n                                var bottomY = start.y + ((x - start.x) * (end.y - start.y)) / (end.x - start.x);\n                                fill.path.lineTo(x, bottomY);\n                            }\n                        });\n                        if (bottomPoints_1.length > 0) {\n                            fill.path.lineTo(bottomPoints_1[bottomPoints_1.length - 1].x, bottomPoints_1[bottomPoints_1.length - 1].y);\n                        }\n                        fill.path.closePath();\n                        fill.checkPathDirty();\n                    } }));\n            }\n            markerSelections[seriesIdx].each(function (marker, datum) {\n                var _a, _b, _c, _d;\n                var delay = (seriesRect === null || seriesRect === void 0 ? void 0 : seriesRect.width) ? (datum.point.x / seriesRect.width) * duration : 0;\n                var format = _this.animateFormatter(datum);\n                var size = (_b = (_a = datum.point) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : 0;\n                (_c = _this.animationManager) === null || _c === void 0 ? void 0 : _c.animate(_this.id + \"_empty-update-ready_\" + marker.id, __assign$e(__assign$e({}, animationOptions), { to: (_d = format === null || format === void 0 ? void 0 : format.size) !== null && _d !== void 0 ? _d : size, delay: delay, duration: markerDuration, onUpdate: function (size) {\n                        marker.size = size;\n                    } }));\n            });\n            labelSelections[seriesIdx].each(function (label, datum) {\n                var _a;\n                var delay = (seriesRect === null || seriesRect === void 0 ? void 0 : seriesRect.width) ? (datum.point.x / seriesRect.width) * duration : 0;\n                (_a = _this.animationManager) === null || _a === void 0 ? void 0 : _a.animate(_this.id + \"_empty-update-ready_\" + label.id, {\n                    from: 0,\n                    to: 1,\n                    delay: delay,\n                    duration: markerDuration,\n                    ease: linear,\n                    repeat: 0,\n                    onUpdate: function (opacity) {\n                        label.opacity = opacity;\n                    },\n                });\n            });\n        });\n    };\n    AreaSeries.prototype.animateReadyUpdate = function (_a) {\n        var _this = this;\n        var contextData = _a.contextData, paths = _a.paths;\n        var _b = this, strokes = _b.strokes, fills = _b.fills, fillOpacity = _b.fillOpacity, lineDash = _b.lineDash, lineDashOffset = _b.lineDashOffset, strokeOpacity = _b.strokeOpacity, strokeWidth = _b.strokeWidth, shadow = _b.shadow;\n        contextData.forEach(function (_a, seriesIdx) {\n            var strokeSelectionData = _a.strokeSelectionData, fillSelectionData = _a.fillSelectionData, itemId = _a.itemId;\n            var _b = __read$b(paths[seriesIdx], 2), fill = _b[0], stroke = _b[1];\n            // Stroke\n            stroke.stroke = strokes[seriesIdx % strokes.length];\n            stroke.strokeWidth = _this.getStrokeWidth(_this.strokeWidth, { itemId: itemId });\n            stroke.strokeOpacity = strokeOpacity;\n            stroke.lineDash = lineDash;\n            stroke.lineDashOffset = lineDashOffset;\n            stroke.path.clear({ trackChanges: true });\n            var moveTo = true;\n            strokeSelectionData.points.forEach(function (point, index) {\n                if (strokeSelectionData.yValues[index] === undefined || isNaN(point.x) || isNaN(point.y)) {\n                    moveTo = true;\n                }\n                else if (moveTo) {\n                    stroke.path.moveTo(point.x, point.y);\n                    moveTo = false;\n                }\n                else {\n                    stroke.path.lineTo(point.x, point.y);\n                }\n            });\n            stroke.checkPathDirty();\n            // Fill\n            fill.fill = fills[seriesIdx % fills.length];\n            fill.fillOpacity = fillOpacity;\n            fill.strokeOpacity = strokeOpacity;\n            fill.strokeWidth = strokeWidth;\n            fill.lineDash = lineDash;\n            fill.lineDashOffset = lineDashOffset;\n            fill.fillShadow = shadow;\n            fill.path.clear({ trackChanges: true });\n            fillSelectionData.points.forEach(function (point) {\n                fill.path.lineTo(point.x, point.y);\n            });\n            fill.path.closePath();\n            fill.checkPathDirty();\n        });\n    };\n    AreaSeries.prototype.animateFormatter = function (datum) {\n        var _a, _b, _c;\n        var _d = this, marker = _d.marker, fills = _d.fills, strokes = _d.strokes, _e = _d.xKey, xKey = _e === void 0 ? '' : _e, yKeys = _d.yKeys, seriesId = _d.id, callbackCache = _d.ctx.callbackCache;\n        var size = marker.size, formatter = marker.formatter;\n        var yKeyIndex = yKeys.indexOf(datum.yKey);\n        var fill = (_a = marker.fill) !== null && _a !== void 0 ? _a : fills[yKeyIndex % fills.length];\n        var stroke = (_b = marker.stroke) !== null && _b !== void 0 ? _b : strokes[yKeyIndex % fills.length];\n        var strokeWidth = (_c = marker.strokeWidth) !== null && _c !== void 0 ? _c : this.strokeWidth;\n        var format = undefined;\n        if (formatter) {\n            format = callbackCache.call(formatter, {\n                datum: datum.datum,\n                xKey: xKey,\n                yKey: datum.yKey,\n                fill: fill,\n                stroke: stroke,\n                strokeWidth: strokeWidth,\n                size: size,\n                highlighted: false,\n                seriesId: seriesId,\n            });\n        }\n        return format;\n    };\n    AreaSeries.prototype.isLabelEnabled = function () {\n        return this.label.enabled;\n    };\n    AreaSeries.className = 'AreaSeries';\n    AreaSeries.type = 'area';\n    __decorate$1s([\n        Validate(COLOR_STRING_ARRAY)\n    ], AreaSeries.prototype, \"fills\", void 0);\n    __decorate$1s([\n        Validate(COLOR_STRING_ARRAY)\n    ], AreaSeries.prototype, \"strokes\", void 0);\n    __decorate$1s([\n        Validate(NUMBER(0, 1))\n    ], AreaSeries.prototype, \"fillOpacity\", void 0);\n    __decorate$1s([\n        Validate(NUMBER(0, 1))\n    ], AreaSeries.prototype, \"strokeOpacity\", void 0);\n    __decorate$1s([\n        Validate(OPT_LINE_DASH)\n    ], AreaSeries.prototype, \"lineDash\", void 0);\n    __decorate$1s([\n        Validate(NUMBER(0))\n    ], AreaSeries.prototype, \"lineDashOffset\", void 0);\n    __decorate$1s([\n        Validate(OPT_STRING)\n    ], AreaSeries.prototype, \"xKey\", void 0);\n    __decorate$1s([\n        Validate(OPT_STRING)\n    ], AreaSeries.prototype, \"xName\", void 0);\n    __decorate$1s([\n        Validate(STRING_ARRAY)\n    ], AreaSeries.prototype, \"_yKeys\", void 0);\n    __decorate$1s([\n        Validate(BOOLEAN_ARRAY)\n    ], AreaSeries.prototype, \"_visibles\", void 0);\n    __decorate$1s([\n        Validate(STRING_ARRAY)\n    ], AreaSeries.prototype, \"yNames\", void 0);\n    __decorate$1s([\n        Validate(OPT_NUMBER())\n    ], AreaSeries.prototype, \"_normalizedTo\", void 0);\n    __decorate$1s([\n        Validate(NUMBER(0))\n    ], AreaSeries.prototype, \"strokeWidth\", void 0);\n    return AreaSeries;\n}(CartesianSeries));\n\nvar __extends$n = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1r = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar Rect = /** @class */ (function (_super) {\n    __extends$n(Rect, _super);\n    function Rect() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.borderPath = new Path2D();\n        _this.x = 0;\n        _this.y = 0;\n        _this.width = 10;\n        _this.height = 10;\n        _this.radius = 0;\n        /**\n         * If `true`, the rect is aligned to the pixel grid for crisp looking lines.\n         * Animated rects may not look nice with this option enabled, for example\n         * when a rect is translated by a sub-pixel value on each frame.\n         */\n        _this.crisp = false;\n        _this.lastUpdatePathStrokeWidth = Shape.defaultStyles.strokeWidth;\n        _this.effectiveStrokeWidth = Shape.defaultStyles.strokeWidth;\n        /**\n         * When the rectangle's width or height is less than a pixel\n         * and crisp mode is on, the rectangle will still fit into the pixel,\n         * but will be less opaque to make an effect of holding less space.\n         */\n        _this.microPixelEffectOpacity = 1;\n        return _this;\n    }\n    Rect.prototype.isDirtyPath = function () {\n        var _a;\n        if (this.lastUpdatePathStrokeWidth !== this.strokeWidth) {\n            return true;\n        }\n        if (this.path.isDirty() || this.borderPath.isDirty() || ((_a = this.clipPath) === null || _a === void 0 ? void 0 : _a.isDirty())) {\n            return true;\n        }\n        return false;\n    };\n    Rect.prototype.updatePath = function () {\n        var _a, _b, _c;\n        var _d = this, path = _d.path, borderPath = _d.borderPath, crisp = _d.crisp;\n        var _e = this, x = _e.x, y = _e.y, w = _e.width, h = _e.height, strokeWidth = _e.strokeWidth;\n        var pixelRatio = (_b = (_a = this.layerManager) === null || _a === void 0 ? void 0 : _a.canvas.pixelRatio) !== null && _b !== void 0 ? _b : 1;\n        var pixelSize = 1 / pixelRatio;\n        var microPixelEffectOpacity = 1;\n        path.clear({ trackChanges: true });\n        borderPath.clear({ trackChanges: true });\n        if (crisp) {\n            if (w <= pixelSize) {\n                microPixelEffectOpacity *= w / pixelSize;\n            }\n            if (h <= pixelSize) {\n                microPixelEffectOpacity *= h / pixelSize;\n            }\n            w = this.align(x, w);\n            h = this.align(y, h);\n            x = this.align(x);\n            y = this.align(y);\n        }\n        if (strokeWidth) {\n            if (w < pixelSize) {\n                // Too narrow, draw a vertical stroke\n                var lx = x + pixelSize / 2;\n                borderPath.moveTo(lx, y);\n                borderPath.lineTo(lx, y + h);\n                strokeWidth = pixelSize;\n                this.borderClipPath = undefined;\n            }\n            else if (h < pixelSize) {\n                // Too narrow, draw a horizontal stroke\n                var ly = y + pixelSize / 2;\n                borderPath.moveTo(x, ly);\n                borderPath.lineTo(x + w, ly);\n                strokeWidth = pixelSize;\n                this.borderClipPath = undefined;\n            }\n            else if (strokeWidth < w && strokeWidth < h) {\n                var halfStrokeWidth = strokeWidth / 2;\n                x += halfStrokeWidth;\n                y += halfStrokeWidth;\n                w -= strokeWidth;\n                h -= strokeWidth;\n                // Clipping not needed in this case; fill to center of stroke.\n                this.borderClipPath = undefined;\n                path.rect(x, y, w, h);\n                borderPath.rect(x, y, w, h);\n            }\n            else {\n                // Skip the fill and just render the stroke.\n                this.borderClipPath = (_c = this.borderClipPath) !== null && _c !== void 0 ? _c : new Path2D();\n                this.borderClipPath.clear({ trackChanges: true });\n                this.borderClipPath.rect(x, y, w, h);\n                borderPath.rect(x, y, w, h);\n            }\n        }\n        else {\n            // No borderPath needed, and thus no clipPath needed either. Fill to full extent of\n            // Rect.\n            this.borderClipPath = undefined;\n            path.rect(x, y, w, h);\n        }\n        this.effectiveStrokeWidth = strokeWidth;\n        this.lastUpdatePathStrokeWidth = strokeWidth;\n        this.microPixelEffectOpacity = microPixelEffectOpacity;\n    };\n    Rect.prototype.computeBBox = function () {\n        var _a = this, x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n        return new BBox(x, y, width, height);\n    };\n    Rect.prototype.isPointInPath = function (x, y) {\n        var point = this.transformPoint(x, y);\n        var bbox = this.computeBBox();\n        return bbox.containsPoint(point.x, point.y);\n    };\n    Rect.prototype.applyFillAlpha = function (ctx) {\n        var _a = this, fillOpacity = _a.fillOpacity, microPixelEffectOpacity = _a.microPixelEffectOpacity, opacity = _a.opacity;\n        var globalAlpha = ctx.globalAlpha;\n        ctx.globalAlpha = globalAlpha * opacity * fillOpacity * microPixelEffectOpacity;\n    };\n    Rect.prototype.renderStroke = function (ctx) {\n        var _a = this, stroke = _a.stroke, effectiveStrokeWidth = _a.effectiveStrokeWidth, borderPath = _a.borderPath, borderClipPath = _a.borderClipPath, opacity = _a.opacity, microPixelEffectOpacity = _a.microPixelEffectOpacity;\n        var borderActive = !!stroke && !!effectiveStrokeWidth;\n        if (borderActive) {\n            var _b = this, strokeOpacity = _b.strokeOpacity, lineDash = _b.lineDash, lineDashOffset = _b.lineDashOffset, lineCap = _b.lineCap, lineJoin = _b.lineJoin;\n            if (borderClipPath) {\n                // strokeWidth is larger than width or height, so use clipping to render correctly.\n                // This is the simplest way to achieve the correct rendering due to nuances with ~0\n                // width/height lines in Canvas operations.\n                borderClipPath.draw(ctx);\n                ctx.clip();\n            }\n            borderPath.draw(ctx);\n            var globalAlpha = ctx.globalAlpha;\n            ctx.strokeStyle = stroke;\n            ctx.globalAlpha = globalAlpha * opacity * strokeOpacity * microPixelEffectOpacity;\n            ctx.lineWidth = effectiveStrokeWidth;\n            if (lineDash) {\n                ctx.setLineDash(lineDash);\n            }\n            if (lineDashOffset) {\n                ctx.lineDashOffset = lineDashOffset;\n            }\n            if (lineCap) {\n                ctx.lineCap = lineCap;\n            }\n            if (lineJoin) {\n                ctx.lineJoin = lineJoin;\n            }\n            ctx.stroke();\n            ctx.globalAlpha = globalAlpha;\n        }\n    };\n    Rect.className = 'Rect';\n    __decorate$1r([\n        ScenePathChangeDetection()\n    ], Rect.prototype, \"x\", void 0);\n    __decorate$1r([\n        ScenePathChangeDetection()\n    ], Rect.prototype, \"y\", void 0);\n    __decorate$1r([\n        ScenePathChangeDetection()\n    ], Rect.prototype, \"width\", void 0);\n    __decorate$1r([\n        ScenePathChangeDetection()\n    ], Rect.prototype, \"height\", void 0);\n    __decorate$1r([\n        ScenePathChangeDetection()\n    ], Rect.prototype, \"radius\", void 0);\n    __decorate$1r([\n        ScenePathChangeDetection()\n    ], Rect.prototype, \"crisp\", void 0);\n    return Rect;\n}(Path));\n\nvar __assign$d = (undefined && undefined.__assign) || function () {\n    __assign$d = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$d.apply(this, arguments);\n};\nvar __rest$2 = (undefined && undefined.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nvar __read$a = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nfunction createLabelData(_a) {\n    var value = _a.value, rect = _a.rect, placement = _a.placement, seriesId = _a.seriesId, _b = _a.padding, padding = _b === void 0 ? 0 : _b, formatter = _a.formatter, barAlongX = _a.barAlongX, callbackCache = _a.ctx.callbackCache;\n    var labelText;\n    if (formatter) {\n        labelText = callbackCache.call(formatter, {\n            value: isNumber$4(value) ? value : undefined,\n            seriesId: seriesId,\n        });\n    }\n    if (labelText === undefined) {\n        labelText = isNumber$4(value) ? value.toFixed(2) : '';\n    }\n    var labelX = rect.x + rect.width / 2;\n    var labelY = rect.y + rect.height / 2;\n    var labelTextAlign = 'center';\n    var labelTextBaseline = 'middle';\n    var isPositive = value >= 0;\n    switch (placement) {\n        case 'start': {\n            if (barAlongX) {\n                labelX = isPositive ? rect.x - padding : rect.x + rect.width + padding;\n                labelTextAlign = isPositive ? 'start' : 'end';\n            }\n            else {\n                labelY = isPositive ? rect.y + rect.height + padding : rect.y - padding;\n                labelTextBaseline = isPositive ? 'top' : 'bottom';\n            }\n            break;\n        }\n        case 'outside':\n        case 'end': {\n            if (barAlongX) {\n                labelX = isPositive ? rect.x + rect.width + padding : rect.x - padding;\n                labelTextAlign = isPositive ? 'start' : 'end';\n            }\n            else {\n                labelY = isPositive ? rect.y - padding : rect.y + rect.height + padding;\n                labelTextBaseline = isPositive ? 'bottom' : 'top';\n            }\n            break;\n        }\n        case 'inside':\n        default: {\n            labelTextBaseline = 'middle';\n            break;\n        }\n    }\n    return {\n        text: labelText,\n        textAlign: labelTextAlign,\n        textBaseline: labelTextBaseline,\n        x: labelX,\n        y: labelY,\n    };\n}\nfunction updateRect(_a) {\n    var rect = _a.rect, config = _a.config;\n    var _b = config.crisp, crisp = _b === void 0 ? true : _b, fill = config.fill, stroke = config.stroke, strokeWidth = config.strokeWidth, fillOpacity = config.fillOpacity, strokeOpacity = config.strokeOpacity, lineDash = config.lineDash, lineDashOffset = config.lineDashOffset, fillShadow = config.fillShadow, _c = config.visible, visible = _c === void 0 ? true : _c;\n    rect.crisp = crisp;\n    rect.fill = fill;\n    rect.stroke = stroke;\n    rect.strokeWidth = strokeWidth;\n    rect.fillOpacity = fillOpacity;\n    rect.strokeOpacity = strokeOpacity;\n    rect.lineDash = lineDash;\n    rect.lineDashOffset = lineDashOffset;\n    rect.fillShadow = fillShadow;\n    rect.visible = visible;\n}\nfunction getRectConfig(_a) {\n    var _b, _c, _d, _e, _f, _g, _h;\n    var datum = _a.datum, isHighlighted = _a.isHighlighted, style = _a.style, highlightStyle = _a.highlightStyle, formatter = _a.formatter, seriesId = _a.seriesId, stackGroup = _a.stackGroup, callbackCache = _a.ctx.callbackCache, opts = __rest$2(_a, [\"datum\", \"isHighlighted\", \"style\", \"highlightStyle\", \"formatter\", \"seriesId\", \"stackGroup\", \"ctx\"]);\n    var itemFill = isHighlighted ? (_b = highlightStyle.fill) !== null && _b !== void 0 ? _b : style.fill : style.fill;\n    var itemStroke = isHighlighted ? (_c = highlightStyle.stroke) !== null && _c !== void 0 ? _c : style.stroke : style.stroke;\n    var itemStrokeWidth = isHighlighted ? (_d = highlightStyle.strokeWidth) !== null && _d !== void 0 ? _d : style.strokeWidth : style.strokeWidth;\n    var fillOpacity = isHighlighted ? (_e = highlightStyle.fillOpacity) !== null && _e !== void 0 ? _e : style.fillOpacity : style.fillOpacity;\n    var strokeOpacity = style.strokeOpacity, fillShadow = style.fillShadow, lineDash = style.lineDash, lineDashOffset = style.lineDashOffset;\n    var format = undefined;\n    if (formatter) {\n        format = callbackCache.call(formatter, __assign$d({ datum: datum.datum, xKey: datum.xKey, yKey: datum.yKey, fill: itemFill, stroke: itemStroke, strokeWidth: itemStrokeWidth, highlighted: isHighlighted, seriesId: seriesId, stackGroup: stackGroup }, opts));\n    }\n    return {\n        fill: (_f = format === null || format === void 0 ? void 0 : format.fill) !== null && _f !== void 0 ? _f : itemFill,\n        stroke: (_g = format === null || format === void 0 ? void 0 : format.stroke) !== null && _g !== void 0 ? _g : itemStroke,\n        strokeWidth: (_h = format === null || format === void 0 ? void 0 : format.strokeWidth) !== null && _h !== void 0 ? _h : itemStrokeWidth,\n        fillOpacity: fillOpacity,\n        strokeOpacity: strokeOpacity,\n        lineDash: lineDash,\n        lineDashOffset: lineDashOffset,\n        fillShadow: fillShadow,\n    };\n}\nfunction checkCrisp(visibleRange) {\n    if (visibleRange === void 0) { visibleRange = []; }\n    var _a = __read$a(visibleRange, 2), visibleMin = _a[0], visibleMax = _a[1];\n    var isZoomed = visibleMin !== 0 || visibleMax !== 1;\n    var crisp = !isZoomed;\n    return crisp;\n}\nfunction updateLabel(_a) {\n    var labelNode = _a.labelNode, labelDatum = _a.labelDatum, config = _a.config, visible = _a.visible;\n    if (labelDatum && config && config.enabled) {\n        var x = labelDatum.x, y = labelDatum.y, text = labelDatum.text, textAlign = labelDatum.textAlign, textBaseline = labelDatum.textBaseline;\n        var fontStyle = config.fontStyle, fontWeight = config.fontWeight, fontSize = config.fontSize, fontFamily = config.fontFamily, color = config.color;\n        labelNode.fontStyle = fontStyle;\n        labelNode.fontWeight = fontWeight;\n        labelNode.fontSize = fontSize;\n        labelNode.fontFamily = fontFamily;\n        labelNode.textAlign = textAlign;\n        labelNode.textBaseline = textBaseline;\n        labelNode.text = text;\n        labelNode.x = x;\n        labelNode.y = y;\n        labelNode.fill = color;\n        labelNode.visible = visible;\n    }\n    else {\n        labelNode.visible = false;\n    }\n}\n\nvar __extends$m = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1q = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter$5 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator$5 = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __read$9 = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$6 = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar BAR_LABEL_PLACEMENTS = ['inside', 'outside'];\nvar OPT_BAR_LABEL_PLACEMENT = function (v, ctx) {\n    return OPTIONAL(v, ctx, function (v) { return BAR_LABEL_PLACEMENTS.includes(v); });\n};\nvar BarSeriesNodeTag;\n(function (BarSeriesNodeTag) {\n    BarSeriesNodeTag[BarSeriesNodeTag[\"Bar\"] = 0] = \"Bar\";\n    BarSeriesNodeTag[BarSeriesNodeTag[\"Label\"] = 1] = \"Label\";\n})(BarSeriesNodeTag || (BarSeriesNodeTag = {}));\nvar BarSeriesLabel = /** @class */ (function (_super) {\n    __extends$m(BarSeriesLabel, _super);\n    function BarSeriesLabel() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.formatter = undefined;\n        _this.placement = 'inside';\n        return _this;\n    }\n    __decorate$1q([\n        Validate(OPT_FUNCTION)\n    ], BarSeriesLabel.prototype, \"formatter\", void 0);\n    __decorate$1q([\n        Validate(OPT_BAR_LABEL_PLACEMENT)\n    ], BarSeriesLabel.prototype, \"placement\", void 0);\n    return BarSeriesLabel;\n}(Label$1));\nvar BarSeriesTooltip = /** @class */ (function (_super) {\n    __extends$m(BarSeriesTooltip, _super);\n    function BarSeriesTooltip() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.renderer = undefined;\n        return _this;\n    }\n    __decorate$1q([\n        Validate(OPT_FUNCTION)\n    ], BarSeriesTooltip.prototype, \"renderer\", void 0);\n    return BarSeriesTooltip;\n}(SeriesTooltip));\nfunction is2dArray$1(array) {\n    return array.length > 0 && Array.isArray(array[0]);\n}\nvar BarSeries = /** @class */ (function (_super) {\n    __extends$m(BarSeries, _super);\n    function BarSeries(moduleCtx) {\n        var _a, _b;\n        var _this = _super.call(this, {\n            moduleCtx: moduleCtx,\n            pickModes: [SeriesNodePickMode.EXACT_SHAPE_MATCH],\n            pathsPerSeries: 0,\n            directionKeys: (_a = {},\n                _a[ChartAxisDirection.X] = ['xKey'],\n                _a[ChartAxisDirection.Y] = ['yKeys'],\n                _a),\n            directionNames: (_b = {},\n                _b[ChartAxisDirection.X] = ['xName'],\n                _b[ChartAxisDirection.Y] = ['yNames'],\n                _b),\n        }) || this;\n        _this.label = new BarSeriesLabel();\n        _this.tooltip = new BarSeriesTooltip();\n        _this.fills = ['#c16068', '#a2bf8a', '#ebcc87', '#80a0c3', '#b58dae', '#85c0d1'];\n        _this.strokes = ['#874349', '#718661', '#a48f5f', '#5a7088', '#7f637a', '#5d8692'];\n        _this.fillOpacity = 1;\n        _this.strokeOpacity = 1;\n        _this.lineDash = [0];\n        _this.lineDashOffset = 0;\n        _this.formatter = undefined;\n        /**\n         * Used to get the position of bars within each group.\n         */\n        _this.groupScale = new BandScale$5();\n        _this.xKey = undefined;\n        _this.xName = undefined;\n        _this.cumYKeyCount = [];\n        _this.flatYKeys = undefined; // only set when a user used a flat array for yKeys\n        _this.hideInLegend = [];\n        _this.yKeys = [];\n        _this.yKeysCache = [];\n        _this.visibles = [];\n        _this.grouped = false;\n        _this.stackGroups = {};\n        /**\n         * A map of `yKeys` to their names (used in legends and tooltips).\n         * For example, if a key is `product_name` it's name can be a more presentable `Product Name`.\n         */\n        _this.yNames = {};\n        _this.legendItemNames = {};\n        _this.strokeWidth = 1;\n        _this.shadow = undefined;\n        _this.smallestDataInterval = undefined;\n        _this.label.enabled = false;\n        return _this;\n    }\n    BarSeries.prototype.resolveKeyDirection = function (direction) {\n        if (this.getBarDirection() === ChartAxisDirection.X) {\n            if (direction === ChartAxisDirection.X) {\n                return ChartAxisDirection.Y;\n            }\n            return ChartAxisDirection.X;\n        }\n        return direction;\n    };\n    BarSeries.prototype.processYKeys = function () {\n        var _this = this;\n        var yKeys = this.yKeys;\n        var flatYKeys = undefined;\n        // Convert from flat y-keys to grouped y-keys.\n        if (!is2dArray$1(yKeys)) {\n            flatYKeys = yKeys;\n            yKeys = this.grouped ? flatYKeys.map(function (k) { return [k]; }) : [flatYKeys];\n        }\n        var stackGroups = Object.values(this.stackGroups);\n        if (stackGroups.length > 0) {\n            var flattenKeys = function (keys) { return keys.reduce(function (res, k) { return res.concat(k); }, []); };\n            // Create a stack for items without a group\n            var flatKeys_1 = flattenKeys(yKeys);\n            var keysInStacks_1 = new Set(flattenKeys(stackGroups));\n            var ungroupedKeys = flatKeys_1.filter(function (k) { return !keysInStacks_1.has(k); });\n            yKeys = stackGroups.map(function (keys) { return keys; });\n            if (ungroupedKeys.length > 0) {\n                yKeys.push(ungroupedKeys);\n            }\n            // Preserve the order of colours and other properties\n            var indexMap = function (items) {\n                return items.reduce(function (map, key, index) { return map.set(key, index); }, new Map());\n            };\n            var newKeys = flattenKeys(yKeys);\n            var newKeysIndices_1 = indexMap(newKeys);\n            var sort = function (items) {\n                var result = Array.from({ length: items.length });\n                items.forEach(function (item, index) {\n                    var key = flatKeys_1[index];\n                    var newIndex = newKeysIndices_1.get(key);\n                    result[newIndex] = item;\n                });\n                return result;\n            };\n            this.fills = sort(this.fills);\n            this.strokes = sort(this.strokes);\n            this.visibles = sort(this.visibles);\n        }\n        if (!areArrayItemsStrictlyEqual(this.yKeysCache, yKeys)) {\n            this.flatYKeys = flatYKeys ? flatYKeys : undefined;\n            this.yKeys = yKeys;\n            var prevYKeyCount_1 = 0;\n            this.cumYKeyCount = [];\n            var visibleStacks_1 = [];\n            yKeys.forEach(function (stack, index) {\n                if (stack.length > 0) {\n                    visibleStacks_1.push(String(index));\n                }\n                _this.cumYKeyCount.push(prevYKeyCount_1);\n                prevYKeyCount_1 += stack.length;\n            });\n            this.processSeriesItemEnabled();\n            var groupScale = this.groupScale;\n            groupScale.domain = visibleStacks_1;\n        }\n        this.yKeysCache = yKeys;\n    };\n    BarSeries.prototype.processSeriesItemEnabled = function () {\n        var seriesItemEnabled = this.seriesItemEnabled;\n        var flattenFn = function (r, n) { return r.concat.apply(r, __spreadArray$6([], __read$9((Array.isArray(n) ? n : [n])))); };\n        var visibles = this.visibles.reduce(flattenFn, []);\n        seriesItemEnabled.clear();\n        var visiblesIdx = 0;\n        this.yKeys.forEach(function (stack) {\n            stack.forEach(function (yKey) { var _a; return seriesItemEnabled.set(yKey, (_a = visibles[visiblesIdx++]) !== null && _a !== void 0 ? _a : true); });\n        });\n    };\n    BarSeries.prototype.getStackGroup = function (yKey) {\n        var _a;\n        var stackGroups = this.stackGroups;\n        return (_a = Object.entries(stackGroups).find(function (_a) {\n            var _b = __read$9(_a, 2); _b[0]; var keys = _b[1];\n            return keys.includes(yKey);\n        })) === null || _a === void 0 ? void 0 : _a[0];\n    };\n    BarSeries.prototype.processYNames = function () {\n        var values = this.yNames;\n        if (Array.isArray(values) && this.flatYKeys) {\n            var map_1 = {};\n            this.flatYKeys.forEach(function (k, i) {\n                map_1[k] = values[i];\n            });\n            this.yNames = map_1;\n        }\n    };\n    BarSeries.prototype.processData = function () {\n        var _a, _b, _c, _d, _e;\n        return __awaiter$5(this, void 0, void 0, function () {\n            var _f, xKey, seriesItemEnabled, normalizedTo, _g, data, normalizedToAbs, isContinuousX, isContinuousY, activeSeriesItems, activeStacks, normaliseTo, extraProps;\n            return __generator$5(this, function (_h) {\n                this.processYKeys();\n                this.processYNames();\n                _f = this, xKey = _f.xKey, seriesItemEnabled = _f.seriesItemEnabled, normalizedTo = _f.normalizedTo, _g = _f.data, data = _g === void 0 ? [] : _g;\n                normalizedToAbs = Math.abs(normalizedTo !== null && normalizedTo !== void 0 ? normalizedTo : NaN);\n                isContinuousX = ((_a = this.getCategoryAxis()) === null || _a === void 0 ? void 0 : _a.scale) instanceof ContinuousScale;\n                isContinuousY = ((_b = this.getValueAxis()) === null || _b === void 0 ? void 0 : _b.scale) instanceof ContinuousScale;\n                activeSeriesItems = __spreadArray$6([], __read$9(seriesItemEnabled.entries())).filter(function (_a) {\n                    var _b = __read$9(_a, 2), enabled = _b[1];\n                    return enabled;\n                })\n                    .map(function (_a) {\n                    var _b = __read$9(_a, 1), yKey = _b[0];\n                    return yKey;\n                });\n                activeStacks = this.yKeys\n                    .map(function (stack) { return stack.filter(function (key) { return seriesItemEnabled.get(key); }); })\n                    .filter(function (stack) { return stack.length > 0; });\n                normaliseTo = normalizedToAbs && isFinite(normalizedToAbs) ? normalizedToAbs : undefined;\n                extraProps = [];\n                if (normaliseTo) {\n                    extraProps.push(normaliseGroupTo(activeSeriesItems, normaliseTo, 'sum'));\n                }\n                this.dataModel = new DataModel({\n                    props: __spreadArray$6(__spreadArray$6(__spreadArray$6(__spreadArray$6(__spreadArray$6([\n                        keyProperty(xKey, isContinuousX)\n                    ], __read$9(activeSeriesItems.map(function (yKey) { return valueProperty(yKey, isContinuousY, { invalidValue: null }); }))), __read$9(activeStacks.map(function (stack) { return sum(stack); }))), __read$9((isContinuousX ? [SMALLEST_KEY_INTERVAL] : []))), [\n                        AGG_VALUES_EXTENT\n                    ]), __read$9(extraProps)),\n                    groupByKeys: true,\n                    dataVisible: this.visible && activeSeriesItems.length > 0,\n                });\n                this.processedData = this.dataModel.processData(data);\n                this.smallestDataInterval = {\n                    x: (_e = (_d = (_c = this.processedData) === null || _c === void 0 ? void 0 : _c.reduced) === null || _d === void 0 ? void 0 : _d[SMALLEST_KEY_INTERVAL.property]) !== null && _e !== void 0 ? _e : Infinity,\n                    y: Infinity,\n                };\n                return [2 /*return*/];\n            });\n        });\n    };\n    BarSeries.prototype.getDomain = function (direction) {\n        var _a;\n        var processedData = this.processedData;\n        if (!processedData)\n            return [];\n        var _b = processedData, _c = __read$9(_b.defs.keys, 1), keyDef = _c[0], _d = _b.domain, _e = __read$9(_d.keys, 1), keys = _e[0], _f = __read$9(_d.values, 1), yExtent = _f[0], _g = _b.reduced, _h = _g === void 0 ? {} : _g, _j = SMALLEST_KEY_INTERVAL.property, smallestX = _h[_j], _k = AGG_VALUES_EXTENT.property, ySumExtent = _h[_k];\n        if (direction === this.getCategoryDirection()) {\n            if (keyDef.valueType === 'category') {\n                return keys;\n            }\n            var keysExtent = (_a = extent$4(keys)) !== null && _a !== void 0 ? _a : [NaN, NaN];\n            if (direction === ChartAxisDirection.Y) {\n                return [keysExtent[0] + -smallestX, keysExtent[1]];\n            }\n            return [keysExtent[0], keysExtent[1] + smallestX];\n        }\n        else if (this.getValueAxis() instanceof LogAxis) {\n            return this.fixNumericExtent(yExtent);\n        }\n        else {\n            return this.fixNumericExtent(ySumExtent);\n        }\n    };\n    BarSeries.prototype.getNodeClickEvent = function (event, datum) {\n        var _a;\n        return new CartesianSeriesNodeClickEvent((_a = this.xKey) !== null && _a !== void 0 ? _a : '', datum.yKey, event, datum, this);\n    };\n    BarSeries.prototype.getNodeDoubleClickEvent = function (event, datum) {\n        var _a;\n        return new CartesianSeriesNodeDoubleClickEvent((_a = this.xKey) !== null && _a !== void 0 ? _a : '', datum.yKey, event, datum, this);\n    };\n    BarSeries.prototype.getCategoryAxis = function () {\n        return this.getCategoryDirection() === ChartAxisDirection.Y ? this.yAxis : this.xAxis;\n    };\n    BarSeries.prototype.getValueAxis = function () {\n        return this.getBarDirection() === ChartAxisDirection.Y ? this.yAxis : this.xAxis;\n    };\n    BarSeries.prototype.calculateStep = function (range) {\n        var _a;\n        var smallestInterval = this.smallestDataInterval;\n        var xAxis = this.getCategoryAxis();\n        if (!xAxis) {\n            return;\n        }\n        // calculate step\n        var domainLength = xAxis.dataDomain[1] - xAxis.dataDomain[0];\n        var intervals = domainLength / ((_a = smallestInterval === null || smallestInterval === void 0 ? void 0 : smallestInterval.x) !== null && _a !== void 0 ? _a : 1) + 1;\n        // The number of intervals/bands is used to determine the width of individual bands by dividing the available range.\n        // Allow a maximum number of bands to ensure the step does not fall below 1 pixel.\n        // This means there could be some overlap of the bands in the chart.\n        var maxBands = Math.floor(range); // A minimum of 1px per bar/column means the maximum number of bands will equal the available range\n        var bands = Math.min(intervals, maxBands);\n        var step = range / Math.max(1, bands);\n        return step;\n    };\n    BarSeries.prototype.createNodeData = function () {\n        return __awaiter$5(this, void 0, void 0, function () {\n            var _a, data, visible, xAxis, yAxis, xScale, yScale, _b, groupScale, yKeys, _c, xKey, cumYKeyCount, fills, strokes, strokeWidth, seriesItemEnabled, label, seriesId, processedData, ctx, xBandWidth, availableRange, step, barWidth, contexts;\n            var _this = this;\n            return __generator$5(this, function (_d) {\n                _a = this, data = _a.data, visible = _a.visible;\n                xAxis = this.getCategoryAxis();\n                yAxis = this.getValueAxis();\n                if (!(data && visible && xAxis && yAxis)) {\n                    return [2 /*return*/, []];\n                }\n                xScale = xAxis.scale;\n                yScale = yAxis.scale;\n                _b = this, groupScale = _b.groupScale, yKeys = _b.yKeys, _c = _b.xKey, xKey = _c === void 0 ? '' : _c, cumYKeyCount = _b.cumYKeyCount, fills = _b.fills, strokes = _b.strokes, strokeWidth = _b.strokeWidth, seriesItemEnabled = _b.seriesItemEnabled, label = _b.label, seriesId = _b.id, processedData = _b.processedData, ctx = _b.ctx;\n                xBandWidth = xScale.bandwidth;\n                if (xScale instanceof ContinuousScale) {\n                    availableRange = Math.max(xAxis.range[0], xAxis.range[1]);\n                    step = this.calculateStep(availableRange);\n                    xBandWidth = step;\n                }\n                groupScale.range = [0, xBandWidth];\n                if (xAxis instanceof CategoryAxis) {\n                    groupScale.padding = xAxis.groupPaddingInner;\n                }\n                else if (xAxis instanceof GroupedCategoryAxis) {\n                    groupScale.padding = 0.1;\n                }\n                else {\n                    // Number or Time axis\n                    groupScale.padding = 0;\n                }\n                // To get exactly `0` padding we need to turn off rounding\n                if (groupScale.padding === 0) {\n                    groupScale.round = false;\n                }\n                else {\n                    groupScale.round = true;\n                }\n                barWidth = groupScale.bandwidth >= 1\n                    ? // Pixel-rounded value for low-volume bar charts.\n                        groupScale.bandwidth\n                    : // Handle high-volume bar charts gracefully.\n                        groupScale.rawBandwidth;\n                contexts = [];\n                processedData === null || processedData === void 0 ? void 0 : processedData.data.forEach(function (_a, dataIndex) {\n                    var _b, _c, _d, _e, _f;\n                    var _g;\n                    var keys = _a.keys, seriesDatum = _a.datum, values = _a.values;\n                    var x = xScale.convert(keys[0]);\n                    for (var stackIndex = 0; stackIndex < ((_b = yKeys === null || yKeys === void 0 ? void 0 : yKeys.length) !== null && _b !== void 0 ? _b : 0); stackIndex++) {\n                        var stackYKeys = (_c = yKeys === null || yKeys === void 0 ? void 0 : yKeys[stackIndex]) !== null && _c !== void 0 ? _c : []; // y-data for a stack within a group\n                        (_d = contexts[stackIndex]) !== null && _d !== void 0 ? _d : (contexts[stackIndex] = []);\n                        var prevMinY = 0;\n                        var prevMaxY = 0;\n                        for (var levelIndex = 0; levelIndex < stackYKeys.length; levelIndex++) {\n                            var yKey = stackYKeys[levelIndex];\n                            var yIndex = (_e = processedData === null || processedData === void 0 ? void 0 : processedData.indices.values[yKey]) !== null && _e !== void 0 ? _e : -1;\n                            (_f = (_g = contexts[stackIndex])[levelIndex]) !== null && _f !== void 0 ? _f : (_g[levelIndex] = {\n                                itemId: yKey,\n                                nodeData: [],\n                                labelData: [],\n                            });\n                            if (yIndex === undefined)\n                                continue;\n                            var yValue = values[0][yIndex];\n                            var currY = +yValue;\n                            var barX = x + groupScale.convert(String(stackIndex));\n                            // Bars outside of visible range are not rendered, so we create node data\n                            // only for the visible subset of user data.\n                            if (!xAxis.inRange(barX, barWidth)) {\n                                continue;\n                            }\n                            if (isNaN(currY)) {\n                                continue;\n                            }\n                            var prevY = currY < 0 ? prevMinY : prevMaxY;\n                            var y = yScale.convert(prevY + currY, { strict: false });\n                            var bottomY = yScale.convert(prevY, { strict: false });\n                            var barAlongX = _this.getBarDirection() === ChartAxisDirection.X;\n                            var rect = {\n                                x: barAlongX ? Math.min(y, bottomY) : barX,\n                                y: barAlongX ? barX : Math.min(y, bottomY),\n                                width: barAlongX ? Math.abs(bottomY - y) : barWidth,\n                                height: barAlongX ? barWidth : Math.abs(bottomY - y),\n                            };\n                            var nodeMidPoint = {\n                                x: rect.x + rect.width / 2,\n                                y: rect.y + rect.height / 2,\n                            };\n                            var labelFontStyle = label.fontStyle, labelFontWeight = label.fontWeight, labelFontSize = label.fontSize, labelFontFamily = label.fontFamily, labelColor = label.color, formatter = label.formatter, placement = label.placement;\n                            var _h = createLabelData({ value: yValue, rect: rect, formatter: formatter, placement: placement, seriesId: seriesId, barAlongX: barAlongX, ctx: ctx }), labelText = _h.text, labelTextAlign = _h.textAlign, labelTextBaseline = _h.textBaseline, labelX = _h.x, labelY = _h.y;\n                            var colorIndex = cumYKeyCount[stackIndex] + levelIndex;\n                            var nodeData = {\n                                index: dataIndex,\n                                series: _this,\n                                itemId: yKey,\n                                datum: seriesDatum[0],\n                                cumulativeValue: prevY + currY,\n                                yValue: yValue,\n                                yKey: yKey,\n                                xKey: xKey,\n                                x: rect.x,\n                                y: rect.y,\n                                width: rect.width,\n                                height: rect.height,\n                                nodeMidPoint: nodeMidPoint,\n                                colorIndex: colorIndex,\n                                fill: fills[colorIndex % fills.length],\n                                stroke: strokes[colorIndex % strokes.length],\n                                strokeWidth: strokeWidth,\n                                label: seriesItemEnabled.get(yKey) && labelText\n                                    ? {\n                                        text: labelText,\n                                        fontStyle: labelFontStyle,\n                                        fontWeight: labelFontWeight,\n                                        fontSize: labelFontSize,\n                                        fontFamily: labelFontFamily,\n                                        textAlign: labelTextAlign,\n                                        textBaseline: labelTextBaseline,\n                                        fill: labelColor,\n                                        x: labelX,\n                                        y: labelY,\n                                    }\n                                    : undefined,\n                            };\n                            contexts[stackIndex][levelIndex].nodeData.push(nodeData);\n                            contexts[stackIndex][levelIndex].labelData.push(nodeData);\n                            if (currY < 0) {\n                                prevMinY += currY;\n                            }\n                            else {\n                                prevMaxY += currY;\n                            }\n                        }\n                    }\n                });\n                return [2 /*return*/, contexts.reduce(function (r, n) { return r.concat.apply(r, __spreadArray$6([], __read$9(n))); }, [])];\n            });\n        });\n    };\n    BarSeries.prototype.nodeFactory = function () {\n        return new Rect();\n    };\n    BarSeries.prototype.updateDatumSelection = function (opts) {\n        return __awaiter$5(this, void 0, void 0, function () {\n            var nodeData, datumSelection;\n            return __generator$5(this, function (_a) {\n                nodeData = opts.nodeData, datumSelection = opts.datumSelection;\n                return [2 /*return*/, datumSelection.update(nodeData, function (rect) { return (rect.tag = BarSeriesNodeTag.Bar); })];\n            });\n        });\n    };\n    BarSeries.prototype.updateDatumNodes = function (opts) {\n        var _a;\n        return __awaiter$5(this, void 0, void 0, function () {\n            var datumSelection, isHighlight, _b, fills, strokes, fillOpacity, strokeOpacity, lineDash, lineDashOffset, shadow, formatter, seriesId, itemHighlightStyle, ctx, crisp, categoryAlongX;\n            var _this = this;\n            return __generator$5(this, function (_c) {\n                datumSelection = opts.datumSelection, isHighlight = opts.isHighlight;\n                _b = this, fills = _b.fills, strokes = _b.strokes, fillOpacity = _b.fillOpacity, strokeOpacity = _b.strokeOpacity, lineDash = _b.lineDash, lineDashOffset = _b.lineDashOffset, shadow = _b.shadow, formatter = _b.formatter, seriesId = _b.id, itemHighlightStyle = _b.highlightStyle.item, ctx = _b.ctx;\n                crisp = checkCrisp((_a = this.xAxis) === null || _a === void 0 ? void 0 : _a.visibleRange);\n                categoryAlongX = this.getCategoryDirection() === ChartAxisDirection.X;\n                datumSelection.each(function (rect, datum) {\n                    var colorIndex = datum.colorIndex;\n                    var style = {\n                        fill: fills[colorIndex % fills.length],\n                        stroke: strokes[colorIndex % fills.length],\n                        fillOpacity: fillOpacity,\n                        strokeOpacity: strokeOpacity,\n                        lineDash: lineDash,\n                        lineDashOffset: lineDashOffset,\n                        fillShadow: shadow,\n                        strokeWidth: _this.getStrokeWidth(_this.strokeWidth, datum),\n                    };\n                    var visible = categoryAlongX ? datum.width > 0 : datum.height > 0;\n                    var config = getRectConfig({\n                        datum: datum,\n                        isHighlighted: isHighlight,\n                        style: style,\n                        highlightStyle: itemHighlightStyle,\n                        formatter: formatter,\n                        seriesId: seriesId,\n                        stackGroup: _this.getStackGroup(datum.yKey),\n                        ctx: ctx,\n                    });\n                    config.crisp = crisp;\n                    config.visible = visible;\n                    updateRect({ rect: rect, config: config });\n                });\n                return [2 /*return*/];\n            });\n        });\n    };\n    BarSeries.prototype.updateLabelSelection = function (opts) {\n        return __awaiter$5(this, void 0, void 0, function () {\n            var labelData, labelSelection, enabled, data;\n            return __generator$5(this, function (_a) {\n                labelData = opts.labelData, labelSelection = opts.labelSelection;\n                enabled = this.label.enabled;\n                data = enabled ? labelData : [];\n                return [2 /*return*/, labelSelection.update(data, function (text) {\n                        text.tag = BarSeriesNodeTag.Label;\n                        text.pointerEvents = PointerEvents.None;\n                    })];\n            });\n        });\n    };\n    BarSeries.prototype.updateLabelNodes = function (opts) {\n        return __awaiter$5(this, void 0, void 0, function () {\n            var labelSelection;\n            var _this = this;\n            return __generator$5(this, function (_a) {\n                labelSelection = opts.labelSelection;\n                labelSelection.each(function (text, datum) {\n                    var labelDatum = datum.label;\n                    updateLabel({ labelNode: text, labelDatum: labelDatum, config: _this.label, visible: true });\n                });\n                return [2 /*return*/];\n            });\n        });\n    };\n    BarSeries.prototype.getTooltipHtml = function (nodeDatum) {\n        var _a;\n        var _b = this, xKey = _b.xKey, yKeys = _b.yKeys, processedData = _b.processedData, callbackCache = _b.ctx.callbackCache;\n        var xAxis = this.getCategoryAxis();\n        var yAxis = this.getValueAxis();\n        var yKey = nodeDatum.yKey;\n        if (!processedData || !xKey || !yKey || !xAxis || !yAxis) {\n            return '';\n        }\n        var fillIndex = 0;\n        var i = 0;\n        var j = 0;\n        for (; j < yKeys.length; j++) {\n            var stack = yKeys[j];\n            i = stack.indexOf(yKey);\n            if (i >= 0) {\n                fillIndex += i;\n                break;\n            }\n            fillIndex += stack.length;\n        }\n        var _c = this, xName = _c.xName, yNames = _c.yNames, fills = _c.fills, strokes = _c.strokes, tooltip = _c.tooltip, formatter = _c.formatter, seriesId = _c.id;\n        var tooltipRenderer = tooltip.renderer;\n        var datum = nodeDatum.datum;\n        var yName = yNames[yKey];\n        var stackGroup = this.getStackGroup(yKey);\n        var fill = fills[fillIndex % fills.length];\n        var stroke = strokes[fillIndex % fills.length];\n        var strokeWidth = this.getStrokeWidth(this.strokeWidth);\n        var xValue = datum[xKey];\n        var yValue = datum[yKey];\n        var xString = sanitizeHtml(xAxis.formatDatum(xValue));\n        var yString = sanitizeHtml(yAxis.formatDatum(yValue));\n        var title = sanitizeHtml(yName);\n        var content = xString + ': ' + yString;\n        var format = undefined;\n        if (formatter) {\n            format = callbackCache.call(formatter, {\n                datum: datum,\n                fill: fill,\n                stroke: stroke,\n                strokeWidth: strokeWidth,\n                highlighted: false,\n                xKey: xKey,\n                yKey: yKey,\n                seriesId: seriesId,\n                stackGroup: stackGroup,\n            });\n        }\n        var color = (_a = format === null || format === void 0 ? void 0 : format.fill) !== null && _a !== void 0 ? _a : fill;\n        var defaults = {\n            title: title,\n            backgroundColor: color,\n            content: content,\n        };\n        if (tooltipRenderer) {\n            return toTooltipHtml$1(tooltipRenderer({\n                datum: datum,\n                xKey: xKey,\n                xValue: xValue,\n                xName: xName,\n                yKey: yKey,\n                yValue: yValue,\n                yName: yName,\n                color: color,\n                title: title,\n                seriesId: seriesId,\n                stackGroup: stackGroup,\n            }), defaults);\n        }\n        return toTooltipHtml$1(defaults);\n    };\n    BarSeries.prototype.getLegendData = function () {\n        var _a = this, id = _a.id, data = _a.data, xKey = _a.xKey, yKeys = _a.yKeys, yNames = _a.yNames, legendItemNames = _a.legendItemNames, cumYKeyCount = _a.cumYKeyCount, seriesItemEnabled = _a.seriesItemEnabled, hideInLegend = _a.hideInLegend, fills = _a.fills, strokes = _a.strokes, fillOpacity = _a.fillOpacity, strokeOpacity = _a.strokeOpacity;\n        if (!(data === null || data === void 0 ? void 0 : data.length) || !xKey || !yKeys.length) {\n            return [];\n        }\n        var legendData = [];\n        this.validateLegendData();\n        this.yKeys.forEach(function (stack, stackIndex) {\n            var _a, _b, _c;\n            for (var levelIndex = 0; levelIndex < stack.length; levelIndex++) {\n                var yKey = stack[levelIndex];\n                if (hideInLegend.indexOf(yKey) >= 0) {\n                    return;\n                }\n                var colorIndex = cumYKeyCount[stackIndex] + levelIndex;\n                legendData.push({\n                    legendType: 'category',\n                    id: id,\n                    itemId: yKey,\n                    seriesId: id,\n                    enabled: (_a = seriesItemEnabled.get(yKey)) !== null && _a !== void 0 ? _a : false,\n                    label: {\n                        text: (_c = (_b = legendItemNames[yKey]) !== null && _b !== void 0 ? _b : yNames[yKey]) !== null && _c !== void 0 ? _c : yKey,\n                    },\n                    marker: {\n                        fill: fills[colorIndex % fills.length],\n                        stroke: strokes[colorIndex % strokes.length],\n                        fillOpacity: fillOpacity,\n                        strokeOpacity: strokeOpacity,\n                    },\n                });\n            }\n        });\n        return legendData;\n    };\n    BarSeries.prototype.validateLegendData = function () {\n        var _a = this, hideInLegend = _a.hideInLegend, legendItemNames = _a.legendItemNames;\n        var hasAnyLegendItemName = false;\n        this.yKeys.forEach(function (stack) {\n            stack.forEach(function (yKey) {\n                if (hideInLegend.indexOf(yKey) >= 0) {\n                    return;\n                }\n                var hasLegendItemName = legendItemNames[yKey] !== undefined;\n                if (hasAnyLegendItemName && !hasLegendItemName) {\n                    Logger.warnOnce(\"a series is missing the legendItemName property, unexpected behaviour may occur.\");\n                }\n                hasAnyLegendItemName = hasLegendItemName;\n            });\n        });\n    };\n    BarSeries.prototype.onLegendItemClick = function (event) {\n        var _this = this;\n        var itemId = event.itemId, enabled = event.enabled, series = event.series;\n        if (series.id !== this.id)\n            return;\n        _super.prototype.toggleSeriesItem.call(this, itemId, enabled);\n        // Toggle items where the legendItemName matches the legendItemName of the clicked item\n        Object.keys(this.legendItemNames)\n            .filter(function (id) {\n            return _this.legendItemNames[id] !== undefined && _this.legendItemNames[id] === _this.legendItemNames[itemId];\n        })\n            .forEach(function (yKey) {\n            if (yKey !== itemId) {\n                _super.prototype.toggleSeriesItem.call(_this, yKey, enabled);\n            }\n        });\n        this.calculateVisibleDomain();\n    };\n    BarSeries.prototype.onLegendItemDoubleClick = function (event) {\n        var _this = this;\n        var enabled = event.enabled, itemId = event.itemId, numVisibleItems = event.numVisibleItems;\n        var totalVisibleItems = Object.values(numVisibleItems).reduce(function (p, v) { return p + v; }, 0);\n        var singleEnabledInEachSeries = Object.values(numVisibleItems).filter(function (v) { return v === 1; }).length === Object.keys(numVisibleItems).length;\n        var newEnableds = {};\n        this.yKeys.forEach(function (stack) {\n            stack.forEach(function (yKey) {\n                var _a;\n                var matches = yKey === itemId;\n                var singleEnabledWasClicked = totalVisibleItems === 1 && enabled;\n                var newEnabled = matches || singleEnabledWasClicked || (singleEnabledInEachSeries && enabled);\n                newEnableds[yKey] = (_a = newEnableds[yKey]) !== null && _a !== void 0 ? _a : newEnabled;\n                // Toggle other items that have matching legendItemNames which have not already been processed.\n                Object.keys(_this.legendItemNames)\n                    .filter(function (id) {\n                    return _this.legendItemNames[id] !== undefined &&\n                        _this.legendItemNames[id] === _this.legendItemNames[yKey];\n                })\n                    .forEach(function (nameYKey) {\n                    var _a;\n                    newEnableds[nameYKey] = (_a = newEnableds[nameYKey]) !== null && _a !== void 0 ? _a : newEnabled;\n                });\n            });\n        });\n        Object.keys(newEnableds).forEach(function (yKey) {\n            _super.prototype.toggleSeriesItem.call(_this, yKey, newEnableds[yKey]);\n        });\n        this.calculateVisibleDomain();\n    };\n    BarSeries.prototype.calculateVisibleDomain = function () {\n        var yKeys = this.yKeys.map(function (stack) { return stack.slice(); }); // deep clone\n        this.seriesItemEnabled.forEach(function (enabled, yKey) {\n            if (!enabled) {\n                yKeys.forEach(function (stack) {\n                    var index = stack.indexOf(yKey);\n                    if (index >= 0) {\n                        stack.splice(index, 1);\n                    }\n                });\n            }\n        });\n        var visibleStacks = [];\n        yKeys.forEach(function (stack, index) {\n            if (stack.length > 0) {\n                visibleStacks.push(String(index));\n            }\n        });\n        this.groupScale.domain = visibleStacks;\n        this.nodeDataRefresh = true;\n    };\n    BarSeries.prototype.animateEmptyUpdateReady = function (_a) {\n        var _this = this;\n        var datumSelections = _a.datumSelections, labelSelections = _a.labelSelections;\n        var duration = 1000;\n        var labelDuration = 200;\n        var startingX = Infinity;\n        datumSelections.forEach(function (datumSelection) {\n            return datumSelection.each(function (_, datum) {\n                if (datum.yValue >= 0) {\n                    startingX = Math.min(startingX, datum.x);\n                }\n            });\n        });\n        datumSelections.forEach(function (datumSelection) {\n            datumSelection.each(function (rect, datum) {\n                var _a;\n                (_a = _this.animationManager) === null || _a === void 0 ? void 0 : _a.animateMany(_this.id + \"_empty-update-ready_\" + rect.id, [\n                    { from: startingX, to: datum.x },\n                    { from: 0, to: datum.width },\n                ], {\n                    disableInteractions: true,\n                    duration: duration,\n                    ease: easeOut,\n                    repeat: 0,\n                    onUpdate: function (_a) {\n                        var _b = __read$9(_a, 2), x = _b[0], width = _b[1];\n                        rect.x = x;\n                        rect.width = width;\n                        rect.y = datum.y;\n                        rect.height = datum.height;\n                    },\n                });\n            });\n        });\n        labelSelections.forEach(function (labelSelection) {\n            labelSelection.each(function (label) {\n                var _a;\n                (_a = _this.animationManager) === null || _a === void 0 ? void 0 : _a.animate(_this.id + \"_empty-update-ready_\" + label.id, {\n                    from: 0,\n                    to: 1,\n                    delay: duration,\n                    duration: labelDuration,\n                    ease: linear,\n                    repeat: 0,\n                    onUpdate: function (opacity) {\n                        label.opacity = opacity;\n                    },\n                });\n            });\n        });\n    };\n    BarSeries.prototype.animateReadyUpdate = function (_a) {\n        var _this = this;\n        var datumSelections = _a.datumSelections;\n        datumSelections.forEach(function (datumSelection) {\n            _this.resetSelectionRects(datumSelection);\n        });\n    };\n    BarSeries.prototype.animateReadyHighlight = function (highlightSelection) {\n        this.resetSelectionRects(highlightSelection);\n    };\n    BarSeries.prototype.animateReadyResize = function (_a) {\n        var _this = this;\n        var _b;\n        var datumSelections = _a.datumSelections;\n        (_b = this.animationManager) === null || _b === void 0 ? void 0 : _b.stop();\n        datumSelections.forEach(function (datumSelection) {\n            _this.resetSelectionRects(datumSelection);\n        });\n    };\n    BarSeries.prototype.resetSelectionRects = function (selection) {\n        selection.each(function (rect, datum) {\n            rect.x = datum.x;\n            rect.y = datum.y;\n            rect.width = datum.width;\n            rect.height = datum.height;\n        });\n    };\n    BarSeries.prototype.isLabelEnabled = function () {\n        return this.label.enabled;\n    };\n    BarSeries.prototype.getBandScalePadding = function () {\n        return { inner: 0.2, outer: 0.3 };\n    };\n    BarSeries.prototype.getBarDirection = function () {\n        return ChartAxisDirection.X;\n    };\n    BarSeries.prototype.getCategoryDirection = function () {\n        return ChartAxisDirection.Y;\n    };\n    BarSeries.className = 'BarSeries';\n    BarSeries.type = 'bar';\n    __decorate$1q([\n        Validate(COLOR_STRING_ARRAY)\n    ], BarSeries.prototype, \"fills\", void 0);\n    __decorate$1q([\n        Validate(COLOR_STRING_ARRAY)\n    ], BarSeries.prototype, \"strokes\", void 0);\n    __decorate$1q([\n        Validate(NUMBER(0, 1))\n    ], BarSeries.prototype, \"fillOpacity\", void 0);\n    __decorate$1q([\n        Validate(NUMBER(0, 1))\n    ], BarSeries.prototype, \"strokeOpacity\", void 0);\n    __decorate$1q([\n        Validate(OPT_LINE_DASH)\n    ], BarSeries.prototype, \"lineDash\", void 0);\n    __decorate$1q([\n        Validate(NUMBER(0))\n    ], BarSeries.prototype, \"lineDashOffset\", void 0);\n    __decorate$1q([\n        Validate(OPT_FUNCTION)\n    ], BarSeries.prototype, \"formatter\", void 0);\n    __decorate$1q([\n        Validate(OPT_STRING)\n    ], BarSeries.prototype, \"xKey\", void 0);\n    __decorate$1q([\n        Validate(OPT_STRING)\n    ], BarSeries.prototype, \"xName\", void 0);\n    __decorate$1q([\n        Validate(STRING_ARRAY)\n    ], BarSeries.prototype, \"hideInLegend\", void 0);\n    __decorate$1q([\n        Validate(BOOLEAN_ARRAY)\n    ], BarSeries.prototype, \"visibles\", void 0);\n    __decorate$1q([\n        Validate(BOOLEAN)\n    ], BarSeries.prototype, \"grouped\", void 0);\n    __decorate$1q([\n        Validate(OPT_NUMBER())\n    ], BarSeries.prototype, \"normalizedTo\", void 0);\n    __decorate$1q([\n        Validate(NUMBER(0))\n    ], BarSeries.prototype, \"strokeWidth\", void 0);\n    return BarSeries;\n}(CartesianSeries));\nvar ColumnSeries = /** @class */ (function (_super) {\n    __extends$m(ColumnSeries, _super);\n    function ColumnSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ColumnSeries.prototype.getBarDirection = function () {\n        return ChartAxisDirection.Y;\n    };\n    ColumnSeries.prototype.getCategoryDirection = function () {\n        return ChartAxisDirection.X;\n    };\n    ColumnSeries.prototype.animateEmptyUpdateReady = function (_a) {\n        var _this = this;\n        var datumSelections = _a.datumSelections, labelSelections = _a.labelSelections;\n        var duration = 1000;\n        var labelDuration = 200;\n        var startingY = 0;\n        datumSelections.forEach(function (datumSelection) {\n            return datumSelection.each(function (_, datum) {\n                if (datum.yValue >= 0) {\n                    startingY = Math.max(startingY, datum.height + datum.y);\n                }\n            });\n        });\n        datumSelections.forEach(function (datumSelection) {\n            datumSelection.each(function (rect, datum) {\n                var _a;\n                (_a = _this.animationManager) === null || _a === void 0 ? void 0 : _a.animateMany(_this.id + \"_empty-update-ready_\" + rect.id, [\n                    { from: startingY, to: datum.y },\n                    { from: 0, to: datum.height },\n                ], {\n                    disableInteractions: true,\n                    duration: duration,\n                    ease: easeOut,\n                    repeat: 0,\n                    onUpdate: function (_a) {\n                        var _b = __read$9(_a, 2), y = _b[0], height = _b[1];\n                        rect.y = y;\n                        rect.height = height;\n                        rect.x = datum.x;\n                        rect.width = datum.width;\n                    },\n                });\n            });\n        });\n        labelSelections.forEach(function (labelSelection) {\n            labelSelection.each(function (label) {\n                var _a;\n                (_a = _this.animationManager) === null || _a === void 0 ? void 0 : _a.animate(_this.id + \"_empty-update-ready_\" + label.id, {\n                    from: 0,\n                    to: 1,\n                    delay: duration,\n                    duration: labelDuration,\n                    ease: linear,\n                    repeat: 0,\n                    onUpdate: function (opacity) {\n                        label.opacity = opacity;\n                    },\n                });\n            });\n        });\n    };\n    ColumnSeries.type = 'column';\n    ColumnSeries.className = 'ColumnSeries';\n    return ColumnSeries;\n}(BarSeries));\n\nvar __extends$l = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1p = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter$4 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator$4 = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __read$8 = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$5 = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar HISTOGRAM_AGGREGATIONS = ['count', 'sum', 'mean'];\nvar HISTOGRAM_AGGREGATION = predicateWithMessage(function (v) { return HISTOGRAM_AGGREGATIONS.includes(v); }, \"expecting a histogram aggregation keyword such as 'count', 'sum' or 'mean\");\nvar HistogramSeriesNodeTag;\n(function (HistogramSeriesNodeTag) {\n    HistogramSeriesNodeTag[HistogramSeriesNodeTag[\"Bin\"] = 0] = \"Bin\";\n    HistogramSeriesNodeTag[HistogramSeriesNodeTag[\"Label\"] = 1] = \"Label\";\n})(HistogramSeriesNodeTag || (HistogramSeriesNodeTag = {}));\nvar HistogramSeriesLabel = /** @class */ (function (_super) {\n    __extends$l(HistogramSeriesLabel, _super);\n    function HistogramSeriesLabel() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.formatter = undefined;\n        return _this;\n    }\n    __decorate$1p([\n        Validate(OPT_FUNCTION)\n    ], HistogramSeriesLabel.prototype, \"formatter\", void 0);\n    return HistogramSeriesLabel;\n}(Label$1));\nvar defaultBinCount = 10;\nvar HistogramSeriesTooltip = /** @class */ (function (_super) {\n    __extends$l(HistogramSeriesTooltip, _super);\n    function HistogramSeriesTooltip() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.renderer = undefined;\n        return _this;\n    }\n    __decorate$1p([\n        Validate(OPT_FUNCTION)\n    ], HistogramSeriesTooltip.prototype, \"renderer\", void 0);\n    return HistogramSeriesTooltip;\n}(SeriesTooltip));\nvar HistogramSeries = /** @class */ (function (_super) {\n    __extends$l(HistogramSeries, _super);\n    function HistogramSeries(moduleCtx) {\n        var _this = _super.call(this, { moduleCtx: moduleCtx, pickModes: [SeriesNodePickMode.EXACT_SHAPE_MATCH] }) || this;\n        _this.label = new HistogramSeriesLabel();\n        _this.tooltip = new HistogramSeriesTooltip();\n        _this.fill = undefined;\n        _this.stroke = undefined;\n        _this.fillOpacity = 1;\n        _this.strokeOpacity = 1;\n        _this.lineDash = [0];\n        _this.lineDashOffset = 0;\n        _this.xKey = undefined;\n        _this.areaPlot = false;\n        _this.bins = undefined;\n        _this.aggregation = 'count';\n        _this.binCount = undefined;\n        _this.xName = undefined;\n        _this.yKey = undefined;\n        _this.yName = undefined;\n        _this.strokeWidth = 1;\n        _this.shadow = undefined;\n        _this.calculatedBins = [];\n        _this.label.enabled = false;\n        return _this;\n    }\n    // During processData phase, used to unify different ways of the user specifying\n    // the bins. Returns bins in format[[min1, max1], [min2, max2], ... ].\n    HistogramSeries.prototype.deriveBins = function (xDomain) {\n        if (this.binCount === undefined) {\n            var binStarts = ticks(xDomain[0], xDomain[1], defaultBinCount);\n            var binSize_1 = tickStep(xDomain[0], xDomain[1], defaultBinCount);\n            var firstBinEnd = binStarts[0];\n            var expandStartToBin = function (n) { return [n, n + binSize_1]; };\n            return __spreadArray$5([[firstBinEnd - binSize_1, firstBinEnd]], __read$8(binStarts.map(expandStartToBin)));\n        }\n        else {\n            return this.calculateNiceBins(xDomain, this.binCount);\n        }\n    };\n    HistogramSeries.prototype.calculateNiceBins = function (domain, binCount) {\n        var startGuess = Math.floor(domain[0]);\n        var stop = domain[1];\n        var segments = binCount || 1;\n        var _a = this.calculateNiceStart(startGuess, stop, segments), start = _a.start, binSize = _a.binSize;\n        return this.getBins(start, stop, binSize, segments);\n    };\n    HistogramSeries.prototype.getBins = function (start, stop, step, count) {\n        var bins = [];\n        for (var i = 0; i < count; i++) {\n            var a = Math.round((start + i * step) * 10) / 10;\n            var b = Math.round((start + (i + 1) * step) * 10) / 10;\n            if (i === count - 1) {\n                b = Math.max(b, stop);\n            }\n            bins[i] = [a, b];\n        }\n        return bins;\n    };\n    HistogramSeries.prototype.calculateNiceStart = function (a, b, segments) {\n        var binSize = Math.abs(b - a) / segments;\n        var order = Math.floor(Math.log10(binSize));\n        var magnitude = Math.pow(10, order);\n        var start = Math.floor(a / magnitude) * magnitude;\n        return {\n            start: start,\n            binSize: binSize,\n        };\n    };\n    HistogramSeries.prototype.processData = function () {\n        return __awaiter$4(this, void 0, void 0, function () {\n            var _a, xKey, yKey, data, areaPlot, aggregation, props, aggProp, aggProp, groupByFn;\n            var _this = this;\n            return __generator$4(this, function (_b) {\n                _a = this, xKey = _a.xKey, yKey = _a.yKey, data = _a.data, areaPlot = _a.areaPlot, aggregation = _a.aggregation;\n                props = [keyProperty(xKey, true), SORT_DOMAIN_GROUPS];\n                if (yKey) {\n                    aggProp = groupCount();\n                    if (aggregation === 'count') ;\n                    else if (aggregation === 'sum') {\n                        aggProp = groupSum([yKey]);\n                    }\n                    else if (aggregation === 'mean') {\n                        aggProp = groupAverage([yKey]);\n                    }\n                    if (areaPlot) {\n                        aggProp = area([yKey], aggProp);\n                    }\n                    props.push(valueProperty(yKey, true, { invalidValue: undefined }), aggProp);\n                }\n                else {\n                    aggProp = groupCount();\n                    if (areaPlot) {\n                        aggProp = area([], aggProp);\n                    }\n                    props.push(aggProp);\n                }\n                groupByFn = function (dataSet) {\n                    var _a;\n                    var xExtent = fixNumericExtent(dataSet.domain.keys[0]);\n                    if (xExtent.length === 0) {\n                        // No buckets can be calculated.\n                        dataSet.domain.groups = [];\n                        return function () { return []; };\n                    }\n                    var bins = (_a = _this.bins) !== null && _a !== void 0 ? _a : _this.deriveBins(xExtent);\n                    var binCount = bins.length;\n                    _this.calculatedBins = __spreadArray$5([], __read$8(bins));\n                    return function (item) {\n                        var xValue = item.keys[0];\n                        for (var i = 0; i < binCount; i++) {\n                            var nextBin = bins[i];\n                            if (xValue >= nextBin[0] && xValue < nextBin[1]) {\n                                return nextBin;\n                            }\n                            if (i === binCount - 1 && xValue <= nextBin[1]) {\n                                // Handle edge case of a value being at the maximum extent, and the\n                                // final bin aligning with it.\n                                return nextBin;\n                            }\n                        }\n                        return [];\n                    };\n                };\n                this.dataModel = new DataModel({\n                    props: props,\n                    dataVisible: this.visible,\n                    groupByFn: groupByFn,\n                });\n                this.processedData = this.dataModel.processData(data !== null && data !== void 0 ? data : []);\n                return [2 /*return*/];\n            });\n        });\n    };\n    HistogramSeries.prototype.getDomain = function (direction) {\n        var _a, _b, _c, _d;\n        var processedData = this.processedData;\n        if (!processedData)\n            return [];\n        var _e = processedData.domain.aggValues, _f = _e === void 0 ? [] : _e, _g = __read$8(_f, 1), yDomain = _g[0];\n        var xDomainMin = (_a = this.calculatedBins) === null || _a === void 0 ? void 0 : _a[0][0];\n        var xDomainMax = (_b = this.calculatedBins) === null || _b === void 0 ? void 0 : _b[((_d = (_c = this.calculatedBins) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0) - 1][1];\n        if (direction === ChartAxisDirection.X) {\n            return fixNumericExtent([xDomainMin, xDomainMax]);\n        }\n        return fixNumericExtent(yDomain);\n    };\n    HistogramSeries.prototype.getNodeClickEvent = function (event, datum) {\n        var _a, _b;\n        return new CartesianSeriesNodeClickEvent((_a = this.xKey) !== null && _a !== void 0 ? _a : '', (_b = this.yKey) !== null && _b !== void 0 ? _b : '', event, datum, this);\n    };\n    HistogramSeries.prototype.getNodeDoubleClickEvent = function (event, datum) {\n        var _a, _b;\n        return new CartesianSeriesNodeDoubleClickEvent((_a = this.xKey) !== null && _a !== void 0 ? _a : '', (_b = this.yKey) !== null && _b !== void 0 ? _b : '', event, datum, this);\n    };\n    HistogramSeries.prototype.createNodeData = function () {\n        var _a;\n        return __awaiter$4(this, void 0, void 0, function () {\n            var _b, xAxis, yAxis, processedData, callbackCache, xScale, yScale, _c, fill, stroke, strokeWidth, seriesId, _d, yKey, _e, xKey, nodeData, defaultLabelFormatter, _f, _g, labelFormatter, labelFontStyle, labelFontWeight, labelFontSize, labelFontFamily, labelColor;\n            var _this = this;\n            return __generator$4(this, function (_h) {\n                _b = this, xAxis = _b.xAxis, yAxis = _b.yAxis, processedData = _b.processedData, callbackCache = _b.ctx.callbackCache;\n                if (!this.seriesItemEnabled || !xAxis || !yAxis || !processedData || processedData.type !== 'grouped') {\n                    return [2 /*return*/, []];\n                }\n                xScale = xAxis.scale;\n                yScale = yAxis.scale;\n                _c = this, fill = _c.fill, stroke = _c.stroke, strokeWidth = _c.strokeWidth, seriesId = _c.id, _d = _c.yKey, yKey = _d === void 0 ? '' : _d, _e = _c.xKey, xKey = _e === void 0 ? '' : _e;\n                nodeData = [];\n                defaultLabelFormatter = function (params) { return String(params.value); };\n                _f = this.label, _g = _f.formatter, labelFormatter = _g === void 0 ? defaultLabelFormatter : _g, labelFontStyle = _f.fontStyle, labelFontWeight = _f.fontWeight, labelFontSize = _f.fontSize, labelFontFamily = _f.fontFamily, labelColor = _f.color;\n                processedData.data.forEach(function (group) {\n                    var _a;\n                    var _b = group.aggValues, _c = _b === void 0 ? [[0, 0]] : _b, _d = __read$8(_c, 1), _e = __read$8(_d[0], 2), negativeAgg = _e[0], positiveAgg = _e[1], datum = group.datum, frequency = group.datum.length, domain = group.keys, _f = __read$8(group.keys, 2), xDomainMin = _f[0], xDomainMax = _f[1];\n                    var xMinPx = xScale.convert(xDomainMin);\n                    var xMaxPx = xScale.convert(xDomainMax);\n                    var total = negativeAgg + positiveAgg;\n                    var yZeroPx = yScale.convert(0);\n                    var yMaxPx = yScale.convert(total);\n                    var w = xMaxPx - xMinPx;\n                    var h = Math.abs(yMaxPx - yZeroPx);\n                    var selectionDatumLabel = total !== 0\n                        ? {\n                            text: (_a = callbackCache.call(labelFormatter, { value: total, seriesId: seriesId })) !== null && _a !== void 0 ? _a : String(total),\n                            fontStyle: labelFontStyle,\n                            fontWeight: labelFontWeight,\n                            fontSize: labelFontSize,\n                            fontFamily: labelFontFamily,\n                            fill: labelColor,\n                            x: xMinPx + w / 2,\n                            y: yMaxPx + h / 2,\n                        }\n                        : undefined;\n                    var nodeMidPoint = {\n                        x: xMinPx + w / 2,\n                        y: yMaxPx + h / 2,\n                    };\n                    nodeData.push({\n                        series: _this,\n                        datum: datum,\n                        // since each selection is an aggregation of multiple data.\n                        aggregatedValue: total,\n                        frequency: frequency,\n                        domain: domain,\n                        yKey: yKey,\n                        xKey: xKey,\n                        x: xMinPx,\n                        y: yMaxPx,\n                        width: w,\n                        height: h,\n                        nodeMidPoint: nodeMidPoint,\n                        fill: fill,\n                        stroke: stroke,\n                        strokeWidth: strokeWidth,\n                        label: selectionDatumLabel,\n                    });\n                });\n                return [2 /*return*/, [{ itemId: (_a = this.yKey) !== null && _a !== void 0 ? _a : this.id, nodeData: nodeData, labelData: nodeData }]];\n            });\n        });\n    };\n    HistogramSeries.prototype.nodeFactory = function () {\n        return new Rect();\n    };\n    HistogramSeries.prototype.updateDatumSelection = function (opts) {\n        return __awaiter$4(this, void 0, void 0, function () {\n            var nodeData, datumSelection;\n            return __generator$4(this, function (_a) {\n                nodeData = opts.nodeData, datumSelection = opts.datumSelection;\n                return [2 /*return*/, datumSelection.update(nodeData, function (rect) {\n                        rect.tag = HistogramSeriesNodeTag.Bin;\n                        rect.crisp = true;\n                    })];\n            });\n        });\n    };\n    HistogramSeries.prototype.updateDatumNodes = function (opts) {\n        return __awaiter$4(this, void 0, void 0, function () {\n            var datumSelection, isDatumHighlighted, _a, seriesFillOpacity, strokeOpacity, shadow, _b, highlightedFill, _c, highlightFillOpacity, highlightedStroke, highlightedDatumStrokeWidth;\n            var _this = this;\n            return __generator$4(this, function (_d) {\n                datumSelection = opts.datumSelection, isDatumHighlighted = opts.isHighlight;\n                _a = this, seriesFillOpacity = _a.fillOpacity, strokeOpacity = _a.strokeOpacity, shadow = _a.shadow, _b = _a.highlightStyle.item, highlightedFill = _b.fill, _c = _b.fillOpacity, highlightFillOpacity = _c === void 0 ? seriesFillOpacity : _c, highlightedStroke = _b.stroke, highlightedDatumStrokeWidth = _b.strokeWidth;\n                datumSelection.each(function (rect, datum, index) {\n                    var _a, _b;\n                    var strokeWidth = isDatumHighlighted && highlightedDatumStrokeWidth !== undefined\n                        ? highlightedDatumStrokeWidth\n                        : datum.strokeWidth;\n                    var fillOpacity = isDatumHighlighted ? highlightFillOpacity : seriesFillOpacity;\n                    rect.x = datum.x;\n                    rect.width = datum.width;\n                    rect.fill = (_a = (isDatumHighlighted ? highlightedFill : undefined)) !== null && _a !== void 0 ? _a : datum.fill;\n                    rect.stroke = (_b = (isDatumHighlighted ? highlightedStroke : undefined)) !== null && _b !== void 0 ? _b : datum.stroke;\n                    rect.fillOpacity = fillOpacity;\n                    rect.strokeOpacity = strokeOpacity;\n                    rect.strokeWidth = strokeWidth;\n                    rect.lineDash = _this.lineDash;\n                    rect.lineDashOffset = _this.lineDashOffset;\n                    rect.fillShadow = shadow;\n                    rect.zIndex = isDatumHighlighted ? Series.highlightedZIndex : index;\n                    rect.visible = datum.height > 0; // prevent stroke from rendering for zero height columns\n                });\n                return [2 /*return*/];\n            });\n        });\n    };\n    HistogramSeries.prototype.updateLabelSelection = function (opts) {\n        return __awaiter$4(this, void 0, void 0, function () {\n            var labelData, labelSelection;\n            return __generator$4(this, function (_a) {\n                labelData = opts.labelData, labelSelection = opts.labelSelection;\n                return [2 /*return*/, labelSelection.update(labelData, function (text) {\n                        text.tag = HistogramSeriesNodeTag.Label;\n                        text.pointerEvents = PointerEvents.None;\n                        text.textAlign = 'center';\n                        text.textBaseline = 'middle';\n                    })];\n            });\n        });\n    };\n    HistogramSeries.prototype.updateLabelNodes = function (opts) {\n        return __awaiter$4(this, void 0, void 0, function () {\n            var labelSelection, labelEnabled;\n            return __generator$4(this, function (_a) {\n                labelSelection = opts.labelSelection;\n                labelEnabled = this.label.enabled;\n                labelSelection.each(function (text, datum) {\n                    var label = datum.label;\n                    if (label && labelEnabled) {\n                        text.text = label.text;\n                        text.x = label.x;\n                        text.y = label.y;\n                        text.fontStyle = label.fontStyle;\n                        text.fontWeight = label.fontWeight;\n                        text.fontSize = label.fontSize;\n                        text.fontFamily = label.fontFamily;\n                        text.fill = label.fill;\n                        text.visible = true;\n                    }\n                    else {\n                        text.visible = false;\n                    }\n                });\n                return [2 /*return*/];\n            });\n        });\n    };\n    HistogramSeries.prototype.getTooltipHtml = function (nodeDatum) {\n        var _a = this, xKey = _a.xKey, _b = _a.yKey, yKey = _b === void 0 ? '' : _b, xAxis = _a.xAxis, yAxis = _a.yAxis;\n        if (!xKey || !xAxis || !yAxis) {\n            return '';\n        }\n        var _c = this, xName = _c.xName, yName = _c.yName, color = _c.fill, tooltip = _c.tooltip, aggregation = _c.aggregation, seriesId = _c.id;\n        var tooltipRenderer = tooltip.renderer;\n        var aggregatedValue = nodeDatum.aggregatedValue, frequency = nodeDatum.frequency, domain = nodeDatum.domain, _d = __read$8(nodeDatum.domain, 2), rangeMin = _d[0], rangeMax = _d[1];\n        var title = sanitizeHtml(xName !== null && xName !== void 0 ? xName : xKey) + \": \" + xAxis.formatDatum(rangeMin) + \" - \" + xAxis.formatDatum(rangeMax);\n        var content = yKey\n            ? \"<b>\" + sanitizeHtml(yName !== null && yName !== void 0 ? yName : yKey) + \" (\" + aggregation + \")</b>: \" + yAxis.formatDatum(aggregatedValue) + \"<br>\"\n            : '';\n        content += \"<b>Frequency</b>: \" + frequency;\n        var defaults = {\n            title: title,\n            backgroundColor: color,\n            content: content,\n        };\n        if (tooltipRenderer) {\n            return toTooltipHtml$1(tooltipRenderer({\n                datum: {\n                    data: nodeDatum.datum,\n                    aggregatedValue: nodeDatum.aggregatedValue,\n                    domain: nodeDatum.domain,\n                    frequency: nodeDatum.frequency,\n                },\n                xKey: xKey,\n                xValue: domain,\n                xName: xName,\n                yKey: yKey,\n                yValue: aggregatedValue,\n                yName: yName,\n                color: color,\n                title: title,\n                seriesId: seriesId,\n            }), defaults);\n        }\n        return toTooltipHtml$1(defaults);\n    };\n    HistogramSeries.prototype.getLegendData = function () {\n        var _a;\n        var _b = this, id = _b.id, data = _b.data, xKey = _b.xKey, yName = _b.yName, visible = _b.visible, fill = _b.fill, stroke = _b.stroke, fillOpacity = _b.fillOpacity, strokeOpacity = _b.strokeOpacity;\n        if (!data || data.length === 0) {\n            return [];\n        }\n        var legendData = [\n            {\n                legendType: 'category',\n                id: id,\n                itemId: xKey,\n                seriesId: id,\n                enabled: visible,\n                label: {\n                    text: (_a = yName !== null && yName !== void 0 ? yName : xKey) !== null && _a !== void 0 ? _a : 'Frequency',\n                },\n                marker: {\n                    fill: fill !== null && fill !== void 0 ? fill : 'rgba(0, 0, 0, 0)',\n                    stroke: stroke !== null && stroke !== void 0 ? stroke : 'rgba(0, 0, 0, 0)',\n                    fillOpacity: fillOpacity,\n                    strokeOpacity: strokeOpacity,\n                },\n            },\n        ];\n        return legendData;\n    };\n    HistogramSeries.prototype.animateEmptyUpdateReady = function (_a) {\n        var _this = this;\n        var datumSelections = _a.datumSelections, labelSelections = _a.labelSelections;\n        var duration = 1000;\n        var labelDuration = 200;\n        var startingY = 0;\n        datumSelections.forEach(function (datumSelection) {\n            return datumSelection.each(function (_, datum) {\n                startingY = Math.max(startingY, datum.height + datum.y);\n            });\n        });\n        datumSelections.forEach(function (datumSelection) {\n            datumSelection.each(function (rect, datum) {\n                var _a;\n                (_a = _this.animationManager) === null || _a === void 0 ? void 0 : _a.animateMany(_this.id + \"_empty-update-ready_\" + rect.id, [\n                    { from: startingY, to: datum.y },\n                    { from: 0, to: datum.height },\n                ], {\n                    disableInteractions: true,\n                    duration: duration,\n                    ease: easeOut,\n                    repeat: 0,\n                    onUpdate: function (_a) {\n                        var _b = __read$8(_a, 2), y = _b[0], height = _b[1];\n                        rect.y = y;\n                        rect.height = height;\n                        rect.x = datum.x;\n                        rect.width = datum.width;\n                    },\n                });\n            });\n        });\n        labelSelections.forEach(function (labelSelection) {\n            labelSelection.each(function (label) {\n                var _a;\n                (_a = _this.animationManager) === null || _a === void 0 ? void 0 : _a.animate(_this.id + \"_empty-update-ready_\" + label.id, {\n                    from: 0,\n                    to: 1,\n                    delay: duration,\n                    duration: labelDuration,\n                    ease: linear,\n                    repeat: 0,\n                    onUpdate: function (opacity) {\n                        label.opacity = opacity;\n                    },\n                });\n            });\n        });\n    };\n    HistogramSeries.prototype.animateReadyUpdate = function (_a) {\n        var _this = this;\n        var datumSelections = _a.datumSelections;\n        datumSelections.forEach(function (datumSelection) {\n            _this.resetSelectionRects(datumSelection);\n        });\n    };\n    HistogramSeries.prototype.animateReadyHighlight = function (highlightSelection) {\n        this.resetSelectionRects(highlightSelection);\n    };\n    HistogramSeries.prototype.animateReadyResize = function (_a) {\n        var _this = this;\n        var _b;\n        var datumSelections = _a.datumSelections;\n        (_b = this.animationManager) === null || _b === void 0 ? void 0 : _b.stop();\n        datumSelections.forEach(function (datumSelection) {\n            _this.resetSelectionRects(datumSelection);\n        });\n    };\n    HistogramSeries.prototype.resetSelectionRects = function (selection) {\n        selection.each(function (rect, datum) {\n            rect.x = datum.x;\n            rect.y = datum.y;\n            rect.width = datum.width;\n            rect.height = datum.height;\n        });\n    };\n    HistogramSeries.prototype.isLabelEnabled = function () {\n        return this.label.enabled;\n    };\n    HistogramSeries.className = 'HistogramSeries';\n    HistogramSeries.type = 'histogram';\n    __decorate$1p([\n        Validate(OPT_COLOR_STRING)\n    ], HistogramSeries.prototype, \"fill\", void 0);\n    __decorate$1p([\n        Validate(OPT_COLOR_STRING)\n    ], HistogramSeries.prototype, \"stroke\", void 0);\n    __decorate$1p([\n        Validate(NUMBER(0, 1))\n    ], HistogramSeries.prototype, \"fillOpacity\", void 0);\n    __decorate$1p([\n        Validate(NUMBER(0, 1))\n    ], HistogramSeries.prototype, \"strokeOpacity\", void 0);\n    __decorate$1p([\n        Validate(OPT_LINE_DASH)\n    ], HistogramSeries.prototype, \"lineDash\", void 0);\n    __decorate$1p([\n        Validate(NUMBER(0))\n    ], HistogramSeries.prototype, \"lineDashOffset\", void 0);\n    __decorate$1p([\n        Validate(OPT_STRING)\n    ], HistogramSeries.prototype, \"xKey\", void 0);\n    __decorate$1p([\n        Validate(BOOLEAN)\n    ], HistogramSeries.prototype, \"areaPlot\", void 0);\n    __decorate$1p([\n        Validate(OPT_ARRAY())\n    ], HistogramSeries.prototype, \"bins\", void 0);\n    __decorate$1p([\n        Validate(HISTOGRAM_AGGREGATION)\n    ], HistogramSeries.prototype, \"aggregation\", void 0);\n    __decorate$1p([\n        Validate(OPT_NUMBER(0))\n    ], HistogramSeries.prototype, \"binCount\", void 0);\n    __decorate$1p([\n        Validate(OPT_STRING)\n    ], HistogramSeries.prototype, \"xName\", void 0);\n    __decorate$1p([\n        Validate(OPT_STRING)\n    ], HistogramSeries.prototype, \"yKey\", void 0);\n    __decorate$1p([\n        Validate(OPT_STRING)\n    ], HistogramSeries.prototype, \"yName\", void 0);\n    __decorate$1p([\n        Validate(NUMBER(0))\n    ], HistogramSeries.prototype, \"strokeWidth\", void 0);\n    return HistogramSeries;\n}(CartesianSeries));\n\nvar __extends$k = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign$c = (undefined && undefined.__assign) || function () {\n    __assign$c = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$c.apply(this, arguments);\n};\nvar __decorate$1o = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter$3 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator$3 = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __read$7 = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar LineSeriesLabel = /** @class */ (function (_super) {\n    __extends$k(LineSeriesLabel, _super);\n    function LineSeriesLabel() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.formatter = undefined;\n        return _this;\n    }\n    __decorate$1o([\n        Validate(OPT_FUNCTION)\n    ], LineSeriesLabel.prototype, \"formatter\", void 0);\n    return LineSeriesLabel;\n}(Label$1));\nvar LineSeriesTooltip = /** @class */ (function (_super) {\n    __extends$k(LineSeriesTooltip, _super);\n    function LineSeriesTooltip() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.renderer = undefined;\n        _this.format = undefined;\n        return _this;\n    }\n    __decorate$1o([\n        Validate(OPT_FUNCTION)\n    ], LineSeriesTooltip.prototype, \"renderer\", void 0);\n    __decorate$1o([\n        Validate(OPT_STRING)\n    ], LineSeriesTooltip.prototype, \"format\", void 0);\n    return LineSeriesTooltip;\n}(SeriesTooltip));\nvar LineSeries = /** @class */ (function (_super) {\n    __extends$k(LineSeries, _super);\n    function LineSeries(moduleCtx) {\n        var _this = _super.call(this, {\n            moduleCtx: moduleCtx,\n            hasMarkers: true,\n            pickModes: [\n                SeriesNodePickMode.NEAREST_BY_MAIN_CATEGORY_AXIS_FIRST,\n                SeriesNodePickMode.NEAREST_NODE,\n                SeriesNodePickMode.EXACT_SHAPE_MATCH,\n            ],\n        }) || this;\n        _this.marker = new CartesianSeriesMarker();\n        _this.label = new LineSeriesLabel();\n        _this.title = undefined;\n        _this.stroke = '#874349';\n        _this.lineDash = [0];\n        _this.lineDashOffset = 0;\n        _this.strokeWidth = 2;\n        _this.strokeOpacity = 1;\n        _this.tooltip = new LineSeriesTooltip();\n        _this.xKey = undefined;\n        _this.xName = undefined;\n        _this.yKey = undefined;\n        _this.yName = undefined;\n        var _a = _this, marker = _a.marker, label = _a.label;\n        marker.fill = '#c16068';\n        marker.stroke = '#874349';\n        label.enabled = false;\n        return _this;\n    }\n    LineSeries.prototype.processData = function () {\n        return __awaiter$3(this, void 0, void 0, function () {\n            var _a, xAxis, yAxis, _b, xKey, _c, yKey, data, isContinuousX, isContinuousY;\n            return __generator$3(this, function (_d) {\n                _a = this, xAxis = _a.xAxis, yAxis = _a.yAxis, _b = _a.xKey, xKey = _b === void 0 ? '' : _b, _c = _a.yKey, yKey = _c === void 0 ? '' : _c;\n                data = xKey && yKey && this.data ? this.data : [];\n                isContinuousX = (xAxis === null || xAxis === void 0 ? void 0 : xAxis.scale) instanceof ContinuousScale;\n                isContinuousY = (yAxis === null || yAxis === void 0 ? void 0 : yAxis.scale) instanceof ContinuousScale;\n                this.dataModel = new DataModel({\n                    props: [\n                        valueProperty(xKey, isContinuousX, { id: 'xValue' }),\n                        valueProperty(yKey, isContinuousY, { id: 'yValue', invalidValue: undefined }),\n                    ],\n                    dataVisible: this.visible,\n                });\n                this.processedData = this.dataModel.processData(data !== null && data !== void 0 ? data : []);\n                return [2 /*return*/];\n            });\n        });\n    };\n    LineSeries.prototype.getDomain = function (direction) {\n        var _a = this, xAxis = _a.xAxis, yAxis = _a.yAxis, dataModel = _a.dataModel, processedData = _a.processedData;\n        if (!processedData || !dataModel)\n            return [];\n        var xDef = dataModel.resolveProcessedDataDefById(\"xValue\");\n        if (direction === ChartAxisDirection.X) {\n            var domain = dataModel.getDomain(\"xValue\", processedData);\n            if ((xDef === null || xDef === void 0 ? void 0 : xDef.valueType) === 'category') {\n                return domain;\n            }\n            return this.fixNumericExtent(extent$4(domain), xAxis);\n        }\n        else {\n            var domain = dataModel.getDomain(\"yValue\", processedData);\n            return this.fixNumericExtent(domain, yAxis);\n        }\n    };\n    LineSeries.prototype.createNodeData = function () {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n        return __awaiter$3(this, void 0, void 0, function () {\n            var _m, processedData, dataModel, xAxis, yAxis, _o, markerEnabled, markerSize, strokeWidth, callbackCache, _p, label, _q, yKey, _r, xKey, seriesId, xScale, yScale, xOffset, yOffset, nodeData, size, xIdx, yIdx, moveTo, prevXInRange, nextPoint, actualLength, i, _s, datum, values, xDatum, yDatum, x, tolerance, nextXDatum, xInRange, nextXInRange, y, labelText;\n            return __generator$3(this, function (_t) {\n                _m = this, processedData = _m.processedData, dataModel = _m.dataModel, xAxis = _m.xAxis, yAxis = _m.yAxis, _o = _m.marker, markerEnabled = _o.enabled, markerSize = _o.size, strokeWidth = _o.strokeWidth, callbackCache = _m.ctx.callbackCache;\n                if (!processedData || !dataModel || !xAxis || !yAxis) {\n                    return [2 /*return*/, []];\n                }\n                _p = this, label = _p.label, _q = _p.yKey, yKey = _q === void 0 ? '' : _q, _r = _p.xKey, xKey = _r === void 0 ? '' : _r, seriesId = _p.id;\n                xScale = xAxis.scale;\n                yScale = yAxis.scale;\n                xOffset = ((_a = xScale.bandwidth) !== null && _a !== void 0 ? _a : 0) / 2;\n                yOffset = ((_b = yScale.bandwidth) !== null && _b !== void 0 ? _b : 0) / 2;\n                nodeData = new Array(processedData.data.length);\n                size = markerEnabled ? markerSize : 0;\n                xIdx = (_e = (_d = (_c = this.dataModel) === null || _c === void 0 ? void 0 : _c.resolveProcessedDataIndexById(\"xValue\")) === null || _d === void 0 ? void 0 : _d.index) !== null && _e !== void 0 ? _e : -1;\n                yIdx = (_h = (_g = (_f = this.dataModel) === null || _f === void 0 ? void 0 : _f.resolveProcessedDataIndexById(\"yValue\")) === null || _g === void 0 ? void 0 : _g.index) !== null && _h !== void 0 ? _h : -1;\n                moveTo = true;\n                prevXInRange = undefined;\n                nextPoint = undefined;\n                actualLength = 0;\n                for (i = 0; i < processedData.data.length; i++) {\n                    _s = nextPoint !== null && nextPoint !== void 0 ? nextPoint : processedData.data[i], datum = _s.datum, values = _s.values;\n                    xDatum = values[xIdx];\n                    yDatum = values[yIdx];\n                    if (yDatum === undefined) {\n                        prevXInRange = undefined;\n                        moveTo = true;\n                    }\n                    else {\n                        x = xScale.convert(xDatum) + xOffset;\n                        if (isNaN(x)) {\n                            prevXInRange = undefined;\n                            moveTo = true;\n                            continue;\n                        }\n                        tolerance = ((_j = xScale.bandwidth) !== null && _j !== void 0 ? _j : markerSize * 0.5 + (strokeWidth !== null && strokeWidth !== void 0 ? strokeWidth : 0)) + 1;\n                        nextPoint =\n                            ((_k = processedData.data[i + 1]) === null || _k === void 0 ? void 0 : _k.values[yIdx]) === undefined ? undefined : processedData.data[i + 1];\n                        nextXDatum = (_l = processedData.data[i + 1]) === null || _l === void 0 ? void 0 : _l.values[xIdx];\n                        xInRange = xAxis.inRangeEx(x, 0, tolerance);\n                        nextXInRange = nextPoint && xAxis.inRangeEx(xScale.convert(nextXDatum) + xOffset, 0, tolerance);\n                        if (xInRange === -1 && nextXInRange === -1) {\n                            moveTo = true;\n                            continue;\n                        }\n                        if (xInRange === 1 && prevXInRange === 1) {\n                            moveTo = true;\n                            continue;\n                        }\n                        prevXInRange = xInRange;\n                        y = yScale.convert(yDatum) + yOffset;\n                        labelText = void 0;\n                        if (label.formatter) {\n                            labelText = callbackCache.call(label.formatter, { value: yDatum, seriesId: seriesId });\n                        }\n                        if (labelText !== undefined) ;\n                        else if (typeof yDatum === 'number' && isFinite(yDatum)) {\n                            labelText = yDatum.toFixed(2);\n                        }\n                        else if (yDatum) {\n                            labelText = String(yDatum);\n                        }\n                        nodeData[actualLength++] = {\n                            series: this,\n                            datum: datum,\n                            yKey: yKey,\n                            xKey: xKey,\n                            point: { x: x, y: y, moveTo: moveTo, size: size },\n                            nodeMidPoint: { x: x, y: y },\n                            label: labelText\n                                ? {\n                                    text: labelText,\n                                    fontStyle: label.fontStyle,\n                                    fontWeight: label.fontWeight,\n                                    fontSize: label.fontSize,\n                                    fontFamily: label.fontFamily,\n                                    textAlign: 'center',\n                                    textBaseline: 'bottom',\n                                    fill: label.color,\n                                }\n                                : undefined,\n                        };\n                        moveTo = false;\n                    }\n                }\n                nodeData.length = actualLength;\n                return [2 /*return*/, [{ itemId: yKey, nodeData: nodeData, labelData: nodeData }]];\n            });\n        });\n    };\n    LineSeries.prototype.isPathOrSelectionDirty = function () {\n        return this.marker.isDirty();\n    };\n    LineSeries.prototype.markerFactory = function () {\n        var shape = this.marker.shape;\n        var MarkerShape = getMarker$1(shape);\n        return new MarkerShape();\n    };\n    LineSeries.prototype.updateMarkerSelection = function (opts) {\n        return __awaiter$3(this, void 0, void 0, function () {\n            var nodeData, markerSelection, _a, shape, enabled;\n            return __generator$3(this, function (_b) {\n                nodeData = opts.nodeData;\n                markerSelection = opts.markerSelection;\n                _a = this.marker, shape = _a.shape, enabled = _a.enabled;\n                nodeData = shape && enabled ? nodeData : [];\n                if (this.marker.isDirty()) {\n                    markerSelection.clear();\n                }\n                return [2 /*return*/, markerSelection.update(nodeData)];\n            });\n        });\n    };\n    LineSeries.prototype.updateMarkerNodes = function (opts) {\n        var _a;\n        return __awaiter$3(this, void 0, void 0, function () {\n            var markerSelection, isDatumHighlighted, _b, marker, markerFillOpacity, _c, xKey, _d, yKey, lineStroke, strokeOpacity, _e, highlightedFill, _f, highlightFillOpacity, highlightedStroke, highlightedDatumStrokeWidth, seriesId, callbackCache, size, formatter, markerStrokeWidth, customMarker;\n            return __generator$3(this, function (_g) {\n                markerSelection = opts.markerSelection, isDatumHighlighted = opts.isHighlight;\n                _b = this, marker = _b.marker, markerFillOpacity = _b.marker.fillOpacity, _c = _b.xKey, xKey = _c === void 0 ? '' : _c, _d = _b.yKey, yKey = _d === void 0 ? '' : _d, lineStroke = _b.stroke, strokeOpacity = _b.strokeOpacity, _e = _b.highlightStyle.item, highlightedFill = _e.fill, _f = _e.fillOpacity, highlightFillOpacity = _f === void 0 ? markerFillOpacity : _f, highlightedStroke = _e.stroke, highlightedDatumStrokeWidth = _e.strokeWidth, seriesId = _b.id, callbackCache = _b.ctx.callbackCache;\n                size = marker.size, formatter = marker.formatter;\n                markerStrokeWidth = (_a = marker.strokeWidth) !== null && _a !== void 0 ? _a : this.strokeWidth;\n                customMarker = typeof marker.shape === 'function';\n                markerSelection.each(function (node, datum) {\n                    var _a, _b, _c, _d, _e, _f, _g;\n                    var fill = isDatumHighlighted && highlightedFill !== undefined ? highlightedFill : marker.fill;\n                    var fillOpacity = isDatumHighlighted ? highlightFillOpacity : markerFillOpacity;\n                    var stroke = isDatumHighlighted && highlightedStroke !== undefined ? highlightedStroke : (_a = marker.stroke) !== null && _a !== void 0 ? _a : lineStroke;\n                    var strokeWidth = isDatumHighlighted && highlightedDatumStrokeWidth !== undefined\n                        ? highlightedDatumStrokeWidth\n                        : markerStrokeWidth;\n                    var format = undefined;\n                    if (formatter) {\n                        format = callbackCache.call(formatter, {\n                            datum: datum.datum,\n                            xKey: xKey,\n                            yKey: yKey,\n                            fill: fill,\n                            stroke: stroke,\n                            strokeWidth: strokeWidth,\n                            size: size,\n                            highlighted: isDatumHighlighted,\n                            seriesId: seriesId,\n                        });\n                    }\n                    node.fill = (_b = format === null || format === void 0 ? void 0 : format.fill) !== null && _b !== void 0 ? _b : fill;\n                    node.stroke = (_c = format === null || format === void 0 ? void 0 : format.stroke) !== null && _c !== void 0 ? _c : stroke;\n                    node.strokeWidth = (_d = format === null || format === void 0 ? void 0 : format.strokeWidth) !== null && _d !== void 0 ? _d : strokeWidth;\n                    node.fillOpacity = fillOpacity !== null && fillOpacity !== void 0 ? fillOpacity : 1;\n                    node.strokeOpacity = (_f = (_e = marker.strokeOpacity) !== null && _e !== void 0 ? _e : strokeOpacity) !== null && _f !== void 0 ? _f : 1;\n                    node.size = (_g = format === null || format === void 0 ? void 0 : format.size) !== null && _g !== void 0 ? _g : size;\n                    node.translationX = datum.point.x;\n                    node.translationY = datum.point.y;\n                    node.visible = node.size > 0 && !isNaN(datum.point.x) && !isNaN(datum.point.y);\n                    if (!customMarker || node.dirtyPath) {\n                        return;\n                    }\n                    // Only for cutom marker shapes\n                    node.path.clear({ trackChanges: true });\n                    node.updatePath();\n                    node.checkPathDirty();\n                });\n                if (!isDatumHighlighted) {\n                    this.marker.markClean();\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    LineSeries.prototype.updateLabelSelection = function (opts) {\n        return __awaiter$3(this, void 0, void 0, function () {\n            var labelData, labelSelection, _a, shape, enabled;\n            return __generator$3(this, function (_b) {\n                labelData = opts.labelData;\n                labelSelection = opts.labelSelection;\n                _a = this.marker, shape = _a.shape, enabled = _a.enabled;\n                labelData = shape && enabled ? labelData : [];\n                return [2 /*return*/, labelSelection.update(labelData)];\n            });\n        });\n    };\n    LineSeries.prototype.updateLabelNodes = function (opts) {\n        return __awaiter$3(this, void 0, void 0, function () {\n            var labelSelection, _a, labelEnabled, fontStyle, fontWeight, fontSize, fontFamily, color;\n            return __generator$3(this, function (_b) {\n                labelSelection = opts.labelSelection;\n                _a = this.label, labelEnabled = _a.enabled, fontStyle = _a.fontStyle, fontWeight = _a.fontWeight, fontSize = _a.fontSize, fontFamily = _a.fontFamily, color = _a.color;\n                labelSelection.each(function (text, datum) {\n                    var point = datum.point, label = datum.label;\n                    if (datum && label && labelEnabled) {\n                        text.fontStyle = fontStyle;\n                        text.fontWeight = fontWeight;\n                        text.fontSize = fontSize;\n                        text.fontFamily = fontFamily;\n                        text.textAlign = label.textAlign;\n                        text.textBaseline = label.textBaseline;\n                        text.text = label.text;\n                        text.x = point.x;\n                        text.y = point.y - 10;\n                        text.fill = color;\n                        text.visible = true;\n                    }\n                    else {\n                        text.visible = false;\n                    }\n                });\n                return [2 /*return*/];\n            });\n        });\n    };\n    LineSeries.prototype.getNodeClickEvent = function (event, datum) {\n        var _a, _b;\n        return new CartesianSeriesNodeClickEvent((_a = this.xKey) !== null && _a !== void 0 ? _a : '', (_b = this.yKey) !== null && _b !== void 0 ? _b : '', event, datum, this);\n    };\n    LineSeries.prototype.getNodeDoubleClickEvent = function (event, datum) {\n        var _a, _b;\n        return new CartesianSeriesNodeDoubleClickEvent((_a = this.xKey) !== null && _a !== void 0 ? _a : '', (_b = this.yKey) !== null && _b !== void 0 ? _b : '', event, datum, this);\n    };\n    LineSeries.prototype.getTooltipHtml = function (nodeDatum) {\n        var _a, _b;\n        var _c = this, xKey = _c.xKey, yKey = _c.yKey, xAxis = _c.xAxis, yAxis = _c.yAxis;\n        if (!xKey || !yKey || !xAxis || !yAxis) {\n            return '';\n        }\n        var _d = this, xName = _d.xName, yName = _d.yName, tooltip = _d.tooltip, marker = _d.marker, seriesId = _d.id;\n        var tooltipRenderer = tooltip.renderer, tooltipFormat = tooltip.format;\n        var datum = nodeDatum.datum;\n        var xValue = datum[xKey];\n        var yValue = datum[yKey];\n        var xString = xAxis.formatDatum(xValue);\n        var yString = yAxis.formatDatum(yValue);\n        var title = sanitizeHtml((_a = this.title) !== null && _a !== void 0 ? _a : yName);\n        var content = sanitizeHtml(xString + ': ' + yString);\n        var markerFormatter = marker.formatter, fill = marker.fill, stroke = marker.stroke, markerStrokeWidth = marker.strokeWidth, size = marker.size;\n        var strokeWidth = markerStrokeWidth !== null && markerStrokeWidth !== void 0 ? markerStrokeWidth : this.strokeWidth;\n        var format = undefined;\n        if (markerFormatter) {\n            format = markerFormatter({\n                datum: datum,\n                xKey: xKey,\n                yKey: yKey,\n                fill: fill,\n                stroke: stroke,\n                strokeWidth: strokeWidth,\n                size: size,\n                highlighted: false,\n                seriesId: seriesId,\n            });\n        }\n        var color = (_b = format === null || format === void 0 ? void 0 : format.fill) !== null && _b !== void 0 ? _b : fill;\n        var defaults = {\n            title: title,\n            backgroundColor: color,\n            content: content,\n        };\n        if (tooltipFormat || tooltipRenderer) {\n            var params = {\n                datum: datum,\n                xKey: xKey,\n                xValue: xValue,\n                xName: xName,\n                yKey: yKey,\n                yValue: yValue,\n                yName: yName,\n                title: title,\n                color: color,\n                seriesId: seriesId,\n            };\n            if (tooltipFormat) {\n                return toTooltipHtml$1({\n                    content: interpolate(tooltipFormat, params),\n                }, defaults);\n            }\n            if (tooltipRenderer) {\n                return toTooltipHtml$1(tooltipRenderer(params), defaults);\n            }\n        }\n        return toTooltipHtml$1(defaults);\n    };\n    LineSeries.prototype.getLegendData = function () {\n        var _a, _b, _c, _d, _e, _f, _g;\n        var _h = this, id = _h.id, data = _h.data, xKey = _h.xKey, yKey = _h.yKey, yName = _h.yName, visible = _h.visible, title = _h.title, marker = _h.marker, stroke = _h.stroke, strokeOpacity = _h.strokeOpacity;\n        if (!((data === null || data === void 0 ? void 0 : data.length) && xKey && yKey)) {\n            return [];\n        }\n        var legendData = [\n            {\n                legendType: 'category',\n                id: id,\n                itemId: yKey,\n                seriesId: id,\n                enabled: visible,\n                label: {\n                    text: (_a = title !== null && title !== void 0 ? title : yName) !== null && _a !== void 0 ? _a : yKey,\n                },\n                marker: {\n                    shape: marker.shape,\n                    fill: (_b = marker.fill) !== null && _b !== void 0 ? _b : 'rgba(0, 0, 0, 0)',\n                    stroke: (_d = (_c = marker.stroke) !== null && _c !== void 0 ? _c : stroke) !== null && _d !== void 0 ? _d : 'rgba(0, 0, 0, 0)',\n                    fillOpacity: (_e = marker.fillOpacity) !== null && _e !== void 0 ? _e : 1,\n                    strokeOpacity: (_g = (_f = marker.strokeOpacity) !== null && _f !== void 0 ? _f : strokeOpacity) !== null && _g !== void 0 ? _g : 1,\n                },\n            },\n        ];\n        return legendData;\n    };\n    LineSeries.prototype.animateEmptyUpdateReady = function (_a) {\n        var _this = this;\n        var markerSelections = _a.markerSelections, labelSelections = _a.labelSelections, contextData = _a.contextData, paths = _a.paths, seriesRect = _a.seriesRect;\n        contextData.forEach(function (_a, contextDataIndex) {\n            var _b, _c;\n            var nodeData = _a.nodeData;\n            var _d = __read$7(paths[contextDataIndex], 1), lineNode = _d[0];\n            var linePath = lineNode.path;\n            lineNode.fill = undefined;\n            lineNode.lineJoin = 'round';\n            lineNode.pointerEvents = PointerEvents.None;\n            lineNode.stroke = _this.stroke;\n            lineNode.strokeWidth = _this.getStrokeWidth(_this.strokeWidth);\n            lineNode.strokeOpacity = _this.strokeOpacity;\n            lineNode.lineDash = _this.lineDash;\n            lineNode.lineDashOffset = _this.lineDashOffset;\n            var duration = 1000;\n            var markerDuration = 200;\n            var animationOptions = {\n                from: 0,\n                to: (_b = seriesRect === null || seriesRect === void 0 ? void 0 : seriesRect.width) !== null && _b !== void 0 ? _b : 0,\n                disableInteractions: true,\n                ease: linear,\n                repeat: 0,\n            };\n            (_c = _this.animationManager) === null || _c === void 0 ? void 0 : _c.animate(_this.id + \"_empty-update-ready\", __assign$c(__assign$c({}, animationOptions), { duration: duration, onUpdate: function (xValue) {\n                    linePath.clear({ trackChanges: true });\n                    nodeData.forEach(function (datum, index) {\n                        if (datum.point.x <= xValue) {\n                            // Draw/move the full segment if past the end of this segment\n                            if (datum.point.moveTo) {\n                                linePath.moveTo(datum.point.x, datum.point.y);\n                            }\n                            else {\n                                linePath.lineTo(datum.point.x, datum.point.y);\n                            }\n                        }\n                        else if (index > 0 && nodeData[index - 1].point.x < xValue) {\n                            // Draw/move partial line if in between the start and end of this segment\n                            var start = nodeData[index - 1].point;\n                            var end = datum.point;\n                            var x = xValue;\n                            var y = start.y + ((x - start.x) * (end.y - start.y)) / (end.x - start.x);\n                            if (datum.point.moveTo) {\n                                linePath.moveTo(x, y);\n                            }\n                            else {\n                                linePath.lineTo(x, y);\n                            }\n                        }\n                    });\n                    lineNode.checkPathDirty();\n                } }));\n            markerSelections[contextDataIndex].each(function (marker, datum) {\n                var _a, _b, _c, _d;\n                var delay = (seriesRect === null || seriesRect === void 0 ? void 0 : seriesRect.width) ? (datum.point.x / seriesRect.width) * duration : 0;\n                var format = _this.animateFormatter(datum);\n                var size = (_b = (_a = datum.point) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : 0;\n                (_c = _this.animationManager) === null || _c === void 0 ? void 0 : _c.animate(_this.id + \"_empty-update-ready_\" + marker.id, __assign$c(__assign$c({}, animationOptions), { to: (_d = format === null || format === void 0 ? void 0 : format.size) !== null && _d !== void 0 ? _d : size, delay: delay, duration: markerDuration, onUpdate: function (size) {\n                        marker.size = size;\n                    } }));\n            });\n            labelSelections[contextDataIndex].each(function (label, datum) {\n                var _a;\n                var delay = (seriesRect === null || seriesRect === void 0 ? void 0 : seriesRect.width) ? (datum.point.x / seriesRect.width) * duration : 0;\n                (_a = _this.animationManager) === null || _a === void 0 ? void 0 : _a.animate(_this.id + \"_empty-update-ready_\" + label.id, {\n                    from: 0,\n                    to: 1,\n                    delay: delay,\n                    duration: markerDuration,\n                    ease: linear,\n                    repeat: 0,\n                    onUpdate: function (opacity) {\n                        label.opacity = opacity;\n                    },\n                });\n            });\n        });\n    };\n    LineSeries.prototype.animateReadyUpdate = function (data) {\n        this.resetMarkersAndPaths(data);\n    };\n    LineSeries.prototype.animateReadyResize = function (data) {\n        var _a;\n        (_a = this.animationManager) === null || _a === void 0 ? void 0 : _a.stop();\n        this.resetMarkersAndPaths(data);\n    };\n    LineSeries.prototype.resetMarkersAndPaths = function (_a) {\n        var _this = this;\n        var markerSelections = _a.markerSelections, contextData = _a.contextData, paths = _a.paths;\n        contextData.forEach(function (_a, contextDataIndex) {\n            var nodeData = _a.nodeData;\n            var _b = __read$7(paths[contextDataIndex], 1), lineNode = _b[0];\n            var linePath = lineNode.path;\n            lineNode.stroke = _this.stroke;\n            lineNode.strokeWidth = _this.getStrokeWidth(_this.strokeWidth);\n            lineNode.strokeOpacity = _this.strokeOpacity;\n            lineNode.lineDash = _this.lineDash;\n            lineNode.lineDashOffset = _this.lineDashOffset;\n            linePath.clear({ trackChanges: true });\n            nodeData.forEach(function (datum) {\n                if (datum.point.moveTo) {\n                    linePath.moveTo(datum.point.x, datum.point.y);\n                }\n                else {\n                    linePath.lineTo(datum.point.x, datum.point.y);\n                }\n            });\n            lineNode.checkPathDirty();\n            markerSelections[contextDataIndex].each(function (marker, datum) {\n                var _a, _b, _c;\n                var format = _this.animateFormatter(datum);\n                var size = (_b = (_a = datum.point) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : 0;\n                marker.size = (_c = format === null || format === void 0 ? void 0 : format.size) !== null && _c !== void 0 ? _c : size;\n            });\n        });\n    };\n    LineSeries.prototype.animateFormatter = function (datum) {\n        var _a, _b;\n        var _c = this, marker = _c.marker, _d = _c.xKey, xKey = _d === void 0 ? '' : _d, _e = _c.yKey, yKey = _e === void 0 ? '' : _e, lineStroke = _c.stroke, seriesId = _c.id, callbackCache = _c.ctx.callbackCache;\n        var size = marker.size, formatter = marker.formatter;\n        var fill = marker.fill;\n        var stroke = (_a = marker.stroke) !== null && _a !== void 0 ? _a : lineStroke;\n        var strokeWidth = (_b = marker.strokeWidth) !== null && _b !== void 0 ? _b : this.strokeWidth;\n        var format = undefined;\n        if (formatter) {\n            format = callbackCache.call(formatter, {\n                datum: datum.datum,\n                xKey: xKey,\n                yKey: yKey,\n                fill: fill,\n                stroke: stroke,\n                strokeWidth: strokeWidth,\n                size: size,\n                highlighted: false,\n                seriesId: seriesId,\n            });\n        }\n        return format;\n    };\n    LineSeries.prototype.isLabelEnabled = function () {\n        return this.label.enabled;\n    };\n    LineSeries.className = 'LineSeries';\n    LineSeries.type = 'line';\n    __decorate$1o([\n        Validate(OPT_STRING)\n    ], LineSeries.prototype, \"title\", void 0);\n    __decorate$1o([\n        Validate(OPT_COLOR_STRING)\n    ], LineSeries.prototype, \"stroke\", void 0);\n    __decorate$1o([\n        Validate(OPT_LINE_DASH)\n    ], LineSeries.prototype, \"lineDash\", void 0);\n    __decorate$1o([\n        Validate(NUMBER(0))\n    ], LineSeries.prototype, \"lineDashOffset\", void 0);\n    __decorate$1o([\n        Validate(NUMBER(0))\n    ], LineSeries.prototype, \"strokeWidth\", void 0);\n    __decorate$1o([\n        Validate(NUMBER(0, 1))\n    ], LineSeries.prototype, \"strokeOpacity\", void 0);\n    __decorate$1o([\n        Validate(OPT_STRING)\n    ], LineSeries.prototype, \"xKey\", void 0);\n    __decorate$1o([\n        Validate(OPT_STRING)\n    ], LineSeries.prototype, \"xName\", void 0);\n    __decorate$1o([\n        Validate(OPT_STRING)\n    ], LineSeries.prototype, \"yKey\", void 0);\n    __decorate$1o([\n        Validate(OPT_STRING)\n    ], LineSeries.prototype, \"yName\", void 0);\n    return LineSeries;\n}(CartesianSeries));\n\nvar ColorScale = /** @class */ (function () {\n    function ColorScale() {\n        this.domain = [0, 1];\n        this.range = ['red', 'blue'];\n        this.parsedRange = this.range.map(function (v) { return Color.fromString(v); });\n    }\n    ColorScale.prototype.update = function () {\n        var _a = this, domain = _a.domain, range = _a.range;\n        if (domain.length < 2) {\n            Logger.warnOnce('`colorDomain` should have at least 2 values.');\n            if (domain.length === 0) {\n                domain.push(0, 1);\n            }\n            else if (domain.length === 1) {\n                domain.push(domain[0] + 1);\n            }\n        }\n        for (var i = 1; i < domain.length; i++) {\n            var a = domain[i - 1];\n            var b = domain[i];\n            if (a >= b) {\n                Logger.warnOnce('`colorDomain` values should be supplied in ascending order.');\n                domain.sort(function (a, b) { return a - b; });\n                break;\n            }\n        }\n        var isSmallRange = range.length < domain.length;\n        if (isSmallRange || (domain.length > 2 && range.length > domain.length)) {\n            Logger.warnOnce('Number of elements in `colorRange` needs to match the number of elements in `colorDomain`.');\n            if (isSmallRange) {\n                for (var i = range.length; i < domain.length; i++) {\n                    range.push('black');\n                }\n            }\n            else {\n                range.splice(domain.length);\n            }\n        }\n        this.parsedRange = this.range.map(function (v) { return Color.fromString(v); });\n    };\n    ColorScale.prototype.convert = function (x) {\n        var _a = this, domain = _a.domain, range = _a.range, parsedRange = _a.parsedRange;\n        var d0 = domain[0];\n        var d1 = domain[domain.length - 1];\n        var r0 = range[0];\n        var r1 = range[range.length - 1];\n        if (x <= d0) {\n            return r0;\n        }\n        if (x >= d1) {\n            return r1;\n        }\n        var index;\n        var q;\n        if (domain.length === 2) {\n            var t = (x - d0) / (d1 - d0);\n            var step = 1 / (range.length - 1);\n            index = range.length <= 2 ? 0 : Math.min(Math.floor(t * (range.length - 1)), range.length - 2);\n            q = (t - index * step) / step;\n        }\n        else {\n            for (index = 0; index < domain.length - 2; index++) {\n                if (x < domain[index + 1]) {\n                    break;\n                }\n            }\n            var a = domain[index];\n            var b = domain[index + 1];\n            q = (x - a) / (b - a);\n        }\n        var c0 = parsedRange[index];\n        var c1 = parsedRange[index + 1];\n        return interpolateColor(c0, c1)(q);\n    };\n    return ColorScale;\n}());\n\nvar __extends$j = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign$b = (undefined && undefined.__assign) || function () {\n    __assign$b = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$b.apply(this, arguments);\n};\nvar __decorate$1n = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter$2 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator$2 = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __read$6 = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$4 = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar __values$7 = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar ScatterSeriesLabel = /** @class */ (function (_super) {\n    __extends$j(ScatterSeriesLabel, _super);\n    function ScatterSeriesLabel() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.formatter = undefined;\n        return _this;\n    }\n    __decorate$1n([\n        Validate(OPT_FUNCTION)\n    ], ScatterSeriesLabel.prototype, \"formatter\", void 0);\n    return ScatterSeriesLabel;\n}(Label$1));\nvar ScatterSeriesNodeBaseClickEvent = /** @class */ (function (_super) {\n    __extends$j(ScatterSeriesNodeBaseClickEvent, _super);\n    function ScatterSeriesNodeBaseClickEvent(sizeKey, xKey, yKey, nativeEvent, datum, series) {\n        var _this = _super.call(this, xKey, yKey, nativeEvent, datum, series) || this;\n        _this.sizeKey = sizeKey;\n        return _this;\n    }\n    return ScatterSeriesNodeBaseClickEvent;\n}(CartesianSeriesNodeBaseClickEvent));\nvar ScatterSeriesNodeClickEvent = /** @class */ (function (_super) {\n    __extends$j(ScatterSeriesNodeClickEvent, _super);\n    function ScatterSeriesNodeClickEvent() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'nodeClick';\n        return _this;\n    }\n    return ScatterSeriesNodeClickEvent;\n}(ScatterSeriesNodeBaseClickEvent));\nvar ScatterSeriesNodeDoubleClickEvent = /** @class */ (function (_super) {\n    __extends$j(ScatterSeriesNodeDoubleClickEvent, _super);\n    function ScatterSeriesNodeDoubleClickEvent() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'nodeDoubleClick';\n        return _this;\n    }\n    return ScatterSeriesNodeDoubleClickEvent;\n}(ScatterSeriesNodeBaseClickEvent));\nvar ScatterSeriesTooltip = /** @class */ (function (_super) {\n    __extends$j(ScatterSeriesTooltip, _super);\n    function ScatterSeriesTooltip() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.renderer = undefined;\n        return _this;\n    }\n    __decorate$1n([\n        Validate(OPT_FUNCTION)\n    ], ScatterSeriesTooltip.prototype, \"renderer\", void 0);\n    return ScatterSeriesTooltip;\n}(SeriesTooltip));\nvar ScatterSeries = /** @class */ (function (_super) {\n    __extends$j(ScatterSeries, _super);\n    function ScatterSeries(moduleCtx) {\n        var _this = _super.call(this, {\n            moduleCtx: moduleCtx,\n            pickModes: [\n                SeriesNodePickMode.NEAREST_BY_MAIN_CATEGORY_AXIS_FIRST,\n                SeriesNodePickMode.NEAREST_NODE,\n                SeriesNodePickMode.EXACT_SHAPE_MATCH,\n            ],\n            pathsPerSeries: 0,\n            hasMarkers: true,\n        }) || this;\n        _this.sizeScale = new LinearScale$1();\n        _this.marker = new CartesianSeriesMarker();\n        _this.label = new ScatterSeriesLabel();\n        _this.title = undefined;\n        _this.labelKey = undefined;\n        _this.xName = undefined;\n        _this.yName = undefined;\n        _this.sizeName = 'Size';\n        _this.labelName = 'Label';\n        _this.xKey = undefined;\n        _this.yKey = undefined;\n        _this.sizeKey = undefined;\n        _this.colorKey = undefined;\n        _this.colorName = 'Color';\n        _this.colorDomain = undefined;\n        _this.colorRange = ['#ffff00', '#00ff00', '#0000ff'];\n        _this.colorScale = new ColorScale();\n        _this.tooltip = new ScatterSeriesTooltip();\n        var label = _this.label;\n        label.enabled = false;\n        return _this;\n    }\n    ScatterSeries.prototype.processData = function () {\n        var _a, _b, _c, _d, _e, _f;\n        return __awaiter$2(this, void 0, void 0, function () {\n            var _g, _h, xKey, _j, yKey, sizeKey, xAxis, yAxis, marker, data, isContinuousX, isContinuousY, _k, colorScale, colorDomain, colorRange, colorKey, sizeKeyIdx, processedSize, colorKeyIdx;\n            return __generator$2(this, function (_l) {\n                _g = this, _h = _g.xKey, xKey = _h === void 0 ? '' : _h, _j = _g.yKey, yKey = _j === void 0 ? '' : _j, sizeKey = _g.sizeKey, xAxis = _g.xAxis, yAxis = _g.yAxis, marker = _g.marker, data = _g.data;\n                isContinuousX = (xAxis === null || xAxis === void 0 ? void 0 : xAxis.scale) instanceof ContinuousScale;\n                isContinuousY = (yAxis === null || yAxis === void 0 ? void 0 : yAxis.scale) instanceof ContinuousScale;\n                _k = this, colorScale = _k.colorScale, colorDomain = _k.colorDomain, colorRange = _k.colorRange, colorKey = _k.colorKey;\n                this.dataModel = new DataModel({\n                    props: __spreadArray$4(__spreadArray$4([\n                        valueProperty(xKey, isContinuousX, { id: \"xValue\" }),\n                        valueProperty(yKey, isContinuousY, { id: \"yValue\" })\n                    ], __read$6((sizeKey ? [valueProperty(sizeKey, true, { id: \"sizeValue\" })] : []))), __read$6((colorKey ? [valueProperty(colorKey, true, { id: \"colorValue\" })] : []))),\n                    dataVisible: this.visible,\n                });\n                this.processedData = this.dataModel.processData(data !== null && data !== void 0 ? data : []);\n                if (sizeKey) {\n                    sizeKeyIdx = (_b = (_a = this.dataModel.resolveProcessedDataIndexById(\"sizeValue\")) === null || _a === void 0 ? void 0 : _a.index) !== null && _b !== void 0 ? _b : -1;\n                    processedSize = (_d = (_c = this.processedData) === null || _c === void 0 ? void 0 : _c.domain.values[sizeKeyIdx]) !== null && _d !== void 0 ? _d : [];\n                    this.sizeScale.domain = marker.domain ? marker.domain : processedSize;\n                }\n                if (colorKey) {\n                    colorKeyIdx = (_f = (_e = this.dataModel.resolveProcessedDataIndexById(\"colorValue\")) === null || _e === void 0 ? void 0 : _e.index) !== null && _f !== void 0 ? _f : -1;\n                    colorScale.domain = colorDomain !== null && colorDomain !== void 0 ? colorDomain : this.processedData.domain.values[colorKeyIdx];\n                    colorScale.range = colorRange;\n                    colorScale.update();\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    ScatterSeries.prototype.getDomain = function (direction) {\n        var _a = this, dataModel = _a.dataModel, processedData = _a.processedData;\n        if (!processedData || !dataModel)\n            return [];\n        var id = direction === ChartAxisDirection.X ? \"xValue\" : \"yValue\";\n        var dataDef = dataModel.resolveProcessedDataDefById(id);\n        var domain = dataModel.getDomain(id, processedData);\n        if ((dataDef === null || dataDef === void 0 ? void 0 : dataDef.valueType) === 'category') {\n            return domain;\n        }\n        var axis = direction === ChartAxisDirection.X ? this.xAxis : this.yAxis;\n        return this.fixNumericExtent(extent$4(domain), axis);\n    };\n    ScatterSeries.prototype.getNodeClickEvent = function (event, datum) {\n        var _a, _b;\n        return new ScatterSeriesNodeClickEvent(this.sizeKey, (_a = this.xKey) !== null && _a !== void 0 ? _a : '', (_b = this.yKey) !== null && _b !== void 0 ? _b : '', event, datum, this);\n    };\n    ScatterSeries.prototype.getNodeDoubleClickEvent = function (event, datum) {\n        var _a, _b;\n        return new ScatterSeriesNodeDoubleClickEvent(this.sizeKey, (_a = this.xKey) !== null && _a !== void 0 ? _a : '', (_b = this.yKey) !== null && _b !== void 0 ? _b : '', event, datum, this);\n    };\n    ScatterSeries.prototype.createNodeData = function () {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n        return __awaiter$2(this, void 0, void 0, function () {\n            var _k, visible, xAxis, yAxis, _l, yKey, _m, xKey, label, labelKey, callbackCache, xDataIdx, yDataIdx, _o, colorScale, sizeKey, colorKey, seriesId, xScale, yScale, xOffset, yOffset, _p, sizeScale, marker, nodeData, font, actualLength, _q, _r, _s, values, datum, xDatum, yDatum, x, y, text, size, markerSize, colorIdx, fill;\n            var e_1, _t;\n            return __generator$2(this, function (_u) {\n                _k = this, visible = _k.visible, xAxis = _k.xAxis, yAxis = _k.yAxis, _l = _k.yKey, yKey = _l === void 0 ? '' : _l, _m = _k.xKey, xKey = _m === void 0 ? '' : _m, label = _k.label, labelKey = _k.labelKey, callbackCache = _k.ctx.callbackCache;\n                xDataIdx = (_a = this.dataModel) === null || _a === void 0 ? void 0 : _a.resolveProcessedDataIndexById(\"xValue\");\n                yDataIdx = (_b = this.dataModel) === null || _b === void 0 ? void 0 : _b.resolveProcessedDataIndexById(\"yValue\");\n                if (!(xDataIdx && yDataIdx && visible && xAxis && yAxis)) {\n                    return [2 /*return*/, []];\n                }\n                _o = this, colorScale = _o.colorScale, sizeKey = _o.sizeKey, colorKey = _o.colorKey, seriesId = _o.id;\n                xScale = xAxis.scale;\n                yScale = yAxis.scale;\n                xOffset = ((_c = xScale.bandwidth) !== null && _c !== void 0 ? _c : 0) / 2;\n                yOffset = ((_d = yScale.bandwidth) !== null && _d !== void 0 ? _d : 0) / 2;\n                _p = this, sizeScale = _p.sizeScale, marker = _p.marker;\n                nodeData = new Array((_f = (_e = this.processedData) === null || _e === void 0 ? void 0 : _e.data.length) !== null && _f !== void 0 ? _f : 0);\n                sizeScale.range = [marker.size, marker.maxSize];\n                font = label.getFont();\n                actualLength = 0;\n                try {\n                    for (_q = __values$7((_h = (_g = this.processedData) === null || _g === void 0 ? void 0 : _g.data) !== null && _h !== void 0 ? _h : []), _r = _q.next(); !_r.done; _r = _q.next()) {\n                        _s = _r.value, values = _s.values, datum = _s.datum;\n                        xDatum = values[xDataIdx.index];\n                        yDatum = values[yDataIdx.index];\n                        x = xScale.convert(xDatum) + xOffset;\n                        y = yScale.convert(yDatum) + yOffset;\n                        if (!this.checkRangeXY(x, y, xAxis, yAxis)) {\n                            continue;\n                        }\n                        text = void 0;\n                        if (label.formatter) {\n                            text = callbackCache.call(label.formatter, { value: yDatum, seriesId: seriesId, datum: datum });\n                        }\n                        if (text === undefined) {\n                            text = labelKey ? String(datum[labelKey]) : '';\n                        }\n                        size = HdpiCanvas.getTextSize(text, font);\n                        markerSize = sizeKey ? sizeScale.convert(values[2]) : marker.size;\n                        colorIdx = sizeKey ? 3 : 2;\n                        fill = colorKey ? colorScale.convert(values[colorIdx]) : undefined;\n                        nodeData[actualLength++] = {\n                            series: this,\n                            itemId: yKey,\n                            yKey: yKey,\n                            xKey: xKey,\n                            datum: datum,\n                            point: { x: x, y: y, size: markerSize },\n                            nodeMidPoint: { x: x, y: y },\n                            fill: fill,\n                            label: __assign$b({ text: text }, size),\n                        };\n                    }\n                }\n                catch (e_1_1) { e_1 = { error: e_1_1 }; }\n                finally {\n                    try {\n                        if (_r && !_r.done && (_t = _q.return)) _t.call(_q);\n                    }\n                    finally { if (e_1) throw e_1.error; }\n                }\n                nodeData.length = actualLength;\n                return [2 /*return*/, [{ itemId: (_j = this.yKey) !== null && _j !== void 0 ? _j : this.id, nodeData: nodeData, labelData: nodeData }]];\n            });\n        });\n    };\n    ScatterSeries.prototype.isPathOrSelectionDirty = function () {\n        return this.marker.isDirty();\n    };\n    ScatterSeries.prototype.getLabelData = function () {\n        var _a;\n        return (_a = this.contextNodeData) === null || _a === void 0 ? void 0 : _a.reduce(function (r, n) { return r.concat(n.labelData); }, []);\n    };\n    ScatterSeries.prototype.markerFactory = function () {\n        var shape = this.marker.shape;\n        var MarkerShape = getMarker$1(shape);\n        return new MarkerShape();\n    };\n    ScatterSeries.prototype.updateMarkerSelection = function (opts) {\n        return __awaiter$2(this, void 0, void 0, function () {\n            var nodeData, markerSelection, enabled, data;\n            return __generator$2(this, function (_a) {\n                nodeData = opts.nodeData, markerSelection = opts.markerSelection;\n                enabled = this.marker.enabled;\n                if (this.marker.isDirty()) {\n                    markerSelection.clear();\n                }\n                data = enabled ? nodeData : [];\n                return [2 /*return*/, markerSelection.update(data)];\n            });\n        });\n    };\n    ScatterSeries.prototype.updateMarkerNodes = function (opts) {\n        return __awaiter$2(this, void 0, void 0, function () {\n            var markerSelection, isDatumHighlighted, _a, marker, _b, xKey, _c, yKey, sizeScale, _d, markerFillOpacity, markerStrokeOpacity, markerStrokeWidth, _e, highlightedFill, _f, highlightFillOpacity, highlightedStroke, highlightedDatumStrokeWidth, seriesId, callbackCache, formatter, customMarker;\n            return __generator$2(this, function (_g) {\n                markerSelection = opts.markerSelection, isDatumHighlighted = opts.isHighlight;\n                _a = this, marker = _a.marker, _b = _a.xKey, xKey = _b === void 0 ? '' : _b, _c = _a.yKey, yKey = _c === void 0 ? '' : _c, sizeScale = _a.sizeScale, _d = _a.marker, markerFillOpacity = _d.fillOpacity, markerStrokeOpacity = _d.strokeOpacity, markerStrokeWidth = _d.strokeWidth, _e = _a.highlightStyle.item, highlightedFill = _e.fill, _f = _e.fillOpacity, highlightFillOpacity = _f === void 0 ? markerFillOpacity : _f, highlightedStroke = _e.stroke, highlightedDatumStrokeWidth = _e.strokeWidth, seriesId = _a.id, callbackCache = _a.ctx.callbackCache;\n                formatter = marker.formatter;\n                sizeScale.range = [marker.size, marker.maxSize];\n                customMarker = typeof marker.shape === 'function';\n                markerSelection.each(function (node, datum) {\n                    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n                    var fill = isDatumHighlighted && highlightedFill !== undefined ? highlightedFill : (_a = datum.fill) !== null && _a !== void 0 ? _a : marker.fill;\n                    var fillOpacity = isDatumHighlighted ? highlightFillOpacity : markerFillOpacity;\n                    var stroke = isDatumHighlighted && highlightedStroke !== undefined ? highlightedStroke : marker.stroke;\n                    var strokeOpacity = markerStrokeOpacity;\n                    var strokeWidth = isDatumHighlighted && highlightedDatumStrokeWidth !== undefined\n                        ? highlightedDatumStrokeWidth\n                        : markerStrokeWidth !== null && markerStrokeWidth !== void 0 ? markerStrokeWidth : 1;\n                    var size = (_c = (_b = datum.point) === null || _b === void 0 ? void 0 : _b.size) !== null && _c !== void 0 ? _c : 0;\n                    var format = undefined;\n                    if (formatter) {\n                        format = callbackCache.call(formatter, {\n                            datum: datum.datum,\n                            xKey: xKey,\n                            yKey: yKey,\n                            fill: fill,\n                            stroke: stroke,\n                            strokeWidth: strokeWidth,\n                            size: size,\n                            highlighted: isDatumHighlighted,\n                            seriesId: seriesId,\n                        });\n                    }\n                    node.fill = (_d = format === null || format === void 0 ? void 0 : format.fill) !== null && _d !== void 0 ? _d : fill;\n                    node.stroke = (_e = format === null || format === void 0 ? void 0 : format.stroke) !== null && _e !== void 0 ? _e : stroke;\n                    node.strokeWidth = (_f = format === null || format === void 0 ? void 0 : format.strokeWidth) !== null && _f !== void 0 ? _f : strokeWidth;\n                    node.fillOpacity = fillOpacity !== null && fillOpacity !== void 0 ? fillOpacity : 1;\n                    node.strokeOpacity = strokeOpacity !== null && strokeOpacity !== void 0 ? strokeOpacity : 1;\n                    node.translationX = (_h = (_g = datum.point) === null || _g === void 0 ? void 0 : _g.x) !== null && _h !== void 0 ? _h : 0;\n                    node.translationY = (_k = (_j = datum.point) === null || _j === void 0 ? void 0 : _j.y) !== null && _k !== void 0 ? _k : 0;\n                    node.visible = node.size > 0;\n                    if (!customMarker || node.dirtyPath) {\n                        return;\n                    }\n                    // Only for custom marker shapes.\n                    node.path.clear({ trackChanges: true });\n                    node.updatePath();\n                    node.checkPathDirty();\n                });\n                if (!isDatumHighlighted) {\n                    this.marker.markClean();\n                }\n                return [2 /*return*/];\n            });\n        });\n    };\n    ScatterSeries.prototype.updateLabelSelection = function (opts) {\n        var _a, _b;\n        return __awaiter$2(this, void 0, void 0, function () {\n            var labelSelection, enabled, placedLabels, placedNodeDatum;\n            return __generator$2(this, function (_c) {\n                labelSelection = opts.labelSelection;\n                enabled = this.label.enabled;\n                placedLabels = enabled ? (_b = (_a = this.chart) === null || _a === void 0 ? void 0 : _a.placeLabels().get(this)) !== null && _b !== void 0 ? _b : [] : [];\n                placedNodeDatum = placedLabels.map(function (v) { return (__assign$b(__assign$b({}, v.datum), { point: {\n                        x: v.x,\n                        y: v.y,\n                        size: v.datum.point.size,\n                    } })); });\n                return [2 /*return*/, labelSelection.update(placedNodeDatum)];\n            });\n        });\n    };\n    ScatterSeries.prototype.updateLabelNodes = function (opts) {\n        return __awaiter$2(this, void 0, void 0, function () {\n            var labelSelection, label;\n            return __generator$2(this, function (_a) {\n                labelSelection = opts.labelSelection;\n                label = this.label;\n                labelSelection.each(function (text, datum) {\n                    var _a, _b, _c, _d;\n                    text.text = datum.label.text;\n                    text.fill = label.color;\n                    text.x = (_b = (_a = datum.point) === null || _a === void 0 ? void 0 : _a.x) !== null && _b !== void 0 ? _b : 0;\n                    text.y = (_d = (_c = datum.point) === null || _c === void 0 ? void 0 : _c.y) !== null && _d !== void 0 ? _d : 0;\n                    text.fontStyle = label.fontStyle;\n                    text.fontWeight = label.fontWeight;\n                    text.fontSize = label.fontSize;\n                    text.fontFamily = label.fontFamily;\n                    text.textAlign = 'left';\n                    text.textBaseline = 'top';\n                });\n                return [2 /*return*/];\n            });\n        });\n    };\n    ScatterSeries.prototype.getTooltipHtml = function (nodeDatum) {\n        var _a, _b, _c, _d, _e, _f, _g;\n        var _h = this, xKey = _h.xKey, yKey = _h.yKey, xAxis = _h.xAxis, yAxis = _h.yAxis;\n        if (!xKey || !yKey || !xAxis || !yAxis) {\n            return '';\n        }\n        var _j = this, marker = _j.marker, tooltip = _j.tooltip, xName = _j.xName, yName = _j.yName, sizeKey = _j.sizeKey, sizeName = _j.sizeName, labelKey = _j.labelKey, labelName = _j.labelName, seriesId = _j.id, callbackCache = _j.ctx.callbackCache;\n        var stroke = marker.stroke;\n        var fill = (_a = nodeDatum.fill) !== null && _a !== void 0 ? _a : marker.fill;\n        var strokeWidth = this.getStrokeWidth((_b = marker.strokeWidth) !== null && _b !== void 0 ? _b : 1);\n        var formatter = this.marker.formatter;\n        var format = undefined;\n        if (formatter) {\n            format = callbackCache.call(formatter, {\n                datum: nodeDatum,\n                xKey: xKey,\n                yKey: yKey,\n                fill: fill,\n                stroke: stroke,\n                strokeWidth: strokeWidth,\n                size: (_d = (_c = nodeDatum.point) === null || _c === void 0 ? void 0 : _c.size) !== null && _d !== void 0 ? _d : 0,\n                highlighted: false,\n                seriesId: seriesId,\n            });\n        }\n        var color = (_f = (_e = format === null || format === void 0 ? void 0 : format.fill) !== null && _e !== void 0 ? _e : fill) !== null && _f !== void 0 ? _f : 'gray';\n        var title = (_g = this.title) !== null && _g !== void 0 ? _g : yName;\n        var datum = nodeDatum.datum;\n        var xValue = datum[xKey];\n        var yValue = datum[yKey];\n        var xString = sanitizeHtml(xAxis.formatDatum(xValue));\n        var yString = sanitizeHtml(yAxis.formatDatum(yValue));\n        var content = \"<b>\" + sanitizeHtml(xName !== null && xName !== void 0 ? xName : xKey) + \"</b>: \" + xString + \"<br>\" +\n            (\"<b>\" + sanitizeHtml(yName !== null && yName !== void 0 ? yName : yKey) + \"</b>: \" + yString);\n        if (sizeKey) {\n            content += \"<br><b>\" + sanitizeHtml(sizeName !== null && sizeName !== void 0 ? sizeName : sizeKey) + \"</b>: \" + sanitizeHtml(datum[sizeKey]);\n        }\n        if (labelKey) {\n            content = \"<b>\" + sanitizeHtml(labelName !== null && labelName !== void 0 ? labelName : labelKey) + \"</b>: \" + sanitizeHtml(datum[labelKey]) + \"<br>\" + content;\n        }\n        var defaults = {\n            title: title,\n            backgroundColor: color,\n            content: content,\n        };\n        var tooltipRenderer = tooltip.renderer;\n        if (tooltipRenderer) {\n            return toTooltipHtml$1(tooltipRenderer({\n                datum: datum,\n                xKey: xKey,\n                xValue: xValue,\n                xName: xName,\n                yKey: yKey,\n                yValue: yValue,\n                yName: yName,\n                sizeKey: sizeKey,\n                sizeName: sizeName,\n                labelKey: labelKey,\n                labelName: labelName,\n                title: title,\n                color: color,\n                seriesId: seriesId,\n            }), defaults);\n        }\n        return toTooltipHtml$1(defaults);\n    };\n    ScatterSeries.prototype.getLegendData = function () {\n        var _a, _b, _c, _d, _e;\n        var _f = this, id = _f.id, data = _f.data, xKey = _f.xKey, yKey = _f.yKey, yName = _f.yName, title = _f.title, visible = _f.visible, marker = _f.marker;\n        var fill = marker.fill, stroke = marker.stroke, fillOpacity = marker.fillOpacity, strokeOpacity = marker.strokeOpacity;\n        if (!((data === null || data === void 0 ? void 0 : data.length) && xKey && yKey)) {\n            return [];\n        }\n        var legendData = [\n            {\n                legendType: 'category',\n                id: id,\n                itemId: yKey,\n                seriesId: id,\n                enabled: visible,\n                label: {\n                    text: (_a = title !== null && title !== void 0 ? title : yName) !== null && _a !== void 0 ? _a : yKey,\n                },\n                marker: {\n                    shape: marker.shape,\n                    fill: (_c = (_b = marker.fill) !== null && _b !== void 0 ? _b : fill) !== null && _c !== void 0 ? _c : 'rgba(0, 0, 0, 0)',\n                    stroke: (_e = (_d = marker.stroke) !== null && _d !== void 0 ? _d : stroke) !== null && _e !== void 0 ? _e : 'rgba(0, 0, 0, 0)',\n                    fillOpacity: fillOpacity !== null && fillOpacity !== void 0 ? fillOpacity : 1,\n                    strokeOpacity: strokeOpacity !== null && strokeOpacity !== void 0 ? strokeOpacity : 1,\n                },\n            },\n        ];\n        return legendData;\n    };\n    ScatterSeries.prototype.animateEmptyUpdateReady = function (_a) {\n        var _this = this;\n        var markerSelections = _a.markerSelections, labelSelections = _a.labelSelections;\n        var duration = 1000;\n        var labelDuration = 200;\n        markerSelections.forEach(function (markerSelection) {\n            markerSelection.each(function (marker, datum) {\n                var _a, _b, _c, _d;\n                var format = _this.animateFormatter(marker, datum);\n                var size = (_b = (_a = datum.point) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : 0;\n                var to = (_c = format === null || format === void 0 ? void 0 : format.size) !== null && _c !== void 0 ? _c : size;\n                (_d = _this.animationManager) === null || _d === void 0 ? void 0 : _d.animate(_this.id + \"_empty-update-ready_\" + marker.id, {\n                    from: 0,\n                    to: to,\n                    disableInteractions: true,\n                    duration: duration,\n                    ease: linear,\n                    repeat: 0,\n                    onUpdate: function (size) {\n                        marker.size = size;\n                    },\n                });\n            });\n        });\n        labelSelections.forEach(function (labelSelection) {\n            labelSelection.each(function (label) {\n                var _a;\n                (_a = _this.animationManager) === null || _a === void 0 ? void 0 : _a.animate(_this.id + \"_empty-update-ready_\" + label.id, {\n                    from: 0,\n                    to: 1,\n                    delay: duration,\n                    duration: labelDuration,\n                    ease: linear,\n                    repeat: 0,\n                    onUpdate: function (opacity) {\n                        label.opacity = opacity;\n                    },\n                });\n            });\n        });\n    };\n    ScatterSeries.prototype.animateReadyUpdate = function (_a) {\n        var _this = this;\n        var markerSelections = _a.markerSelections;\n        markerSelections.forEach(function (markerSelection) {\n            _this.resetMarkers(markerSelection);\n        });\n    };\n    ScatterSeries.prototype.animateReadyHighlightMarkers = function (markerSelection) {\n        this.resetMarkers(markerSelection);\n    };\n    ScatterSeries.prototype.resetMarkers = function (markerSelection) {\n        var _this = this;\n        markerSelection.each(function (marker, datum) {\n            var _a, _b, _c;\n            var format = _this.animateFormatter(marker, datum);\n            var size = (_b = (_a = datum.point) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : 0;\n            marker.size = (_c = format === null || format === void 0 ? void 0 : format.size) !== null && _c !== void 0 ? _c : size;\n        });\n    };\n    ScatterSeries.prototype.animateFormatter = function (marker, datum) {\n        var _a, _b, _c;\n        var _d = this, _e = _d.xKey, xKey = _e === void 0 ? '' : _e, _f = _d.yKey, yKey = _f === void 0 ? '' : _f, markerStrokeWidth = _d.marker.strokeWidth, seriesId = _d.id, callbackCache = _d.ctx.callbackCache;\n        var formatter = this.marker.formatter;\n        var fill = (_a = datum.fill) !== null && _a !== void 0 ? _a : marker.fill;\n        var stroke = marker.stroke;\n        var strokeWidth = markerStrokeWidth !== null && markerStrokeWidth !== void 0 ? markerStrokeWidth : 1;\n        var size = (_c = (_b = datum.point) === null || _b === void 0 ? void 0 : _b.size) !== null && _c !== void 0 ? _c : 0;\n        var format = undefined;\n        if (formatter) {\n            format = callbackCache.call(formatter, {\n                datum: datum.datum,\n                xKey: xKey,\n                yKey: yKey,\n                fill: fill,\n                stroke: stroke,\n                strokeWidth: strokeWidth,\n                size: size,\n                highlighted: false,\n                seriesId: seriesId,\n            });\n        }\n        return format;\n    };\n    ScatterSeries.prototype.isLabelEnabled = function () {\n        return this.label.enabled;\n    };\n    ScatterSeries.className = 'ScatterSeries';\n    ScatterSeries.type = 'scatter';\n    __decorate$1n([\n        Validate(OPT_STRING)\n    ], ScatterSeries.prototype, \"title\", void 0);\n    __decorate$1n([\n        Validate(OPT_STRING)\n    ], ScatterSeries.prototype, \"labelKey\", void 0);\n    __decorate$1n([\n        Validate(OPT_STRING)\n    ], ScatterSeries.prototype, \"xName\", void 0);\n    __decorate$1n([\n        Validate(OPT_STRING)\n    ], ScatterSeries.prototype, \"yName\", void 0);\n    __decorate$1n([\n        Validate(OPT_STRING)\n    ], ScatterSeries.prototype, \"sizeName\", void 0);\n    __decorate$1n([\n        Validate(OPT_STRING)\n    ], ScatterSeries.prototype, \"labelName\", void 0);\n    __decorate$1n([\n        Validate(OPT_STRING)\n    ], ScatterSeries.prototype, \"xKey\", void 0);\n    __decorate$1n([\n        Validate(OPT_STRING)\n    ], ScatterSeries.prototype, \"yKey\", void 0);\n    __decorate$1n([\n        Validate(OPT_STRING)\n    ], ScatterSeries.prototype, \"sizeKey\", void 0);\n    __decorate$1n([\n        Validate(OPT_STRING)\n    ], ScatterSeries.prototype, \"colorKey\", void 0);\n    __decorate$1n([\n        Validate(OPT_STRING)\n    ], ScatterSeries.prototype, \"colorName\", void 0);\n    __decorate$1n([\n        Validate(OPT_NUMBER_ARRAY)\n    ], ScatterSeries.prototype, \"colorDomain\", void 0);\n    __decorate$1n([\n        Validate(COLOR_STRING_ARRAY)\n    ], ScatterSeries.prototype, \"colorRange\", void 0);\n    return ScatterSeries;\n}(CartesianSeries));\n\nvar __extends$i = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar HierarchySeries = /** @class */ (function (_super) {\n    __extends$i(HierarchySeries, _super);\n    function HierarchySeries(moduleCtx) {\n        return _super.call(this, { moduleCtx: moduleCtx, pickModes: [SeriesNodePickMode.EXACT_SHAPE_MATCH] }) || this;\n    }\n    HierarchySeries.prototype.getLabelData = function () {\n        return [];\n    };\n    return HierarchySeries;\n}(Series));\n\nvar __extends$h = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1m = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar DropShadow = /** @class */ (function (_super) {\n    __extends$h(DropShadow, _super);\n    function DropShadow() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.enabled = true;\n        _this.color = 'rgba(0, 0, 0, 0.5)';\n        _this.xOffset = 0;\n        _this.yOffset = 0;\n        _this.blur = 5;\n        return _this;\n    }\n    __decorate$1m([\n        Validate(BOOLEAN),\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], DropShadow.prototype, \"enabled\", void 0);\n    __decorate$1m([\n        Validate(COLOR_STRING),\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], DropShadow.prototype, \"color\", void 0);\n    __decorate$1m([\n        Validate(NUMBER()),\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], DropShadow.prototype, \"xOffset\", void 0);\n    __decorate$1m([\n        Validate(NUMBER()),\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], DropShadow.prototype, \"yOffset\", void 0);\n    __decorate$1m([\n        Validate(NUMBER(0)),\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], DropShadow.prototype, \"blur\", void 0);\n    return DropShadow;\n}(ChangeDetectable));\n\nvar __extends$g = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign$a = (undefined && undefined.__assign) || function () {\n    __assign$a = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$a.apply(this, arguments);\n};\nvar __decorate$1l = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator$1 = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __values$6 = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar TreemapSeriesTooltip = /** @class */ (function (_super) {\n    __extends$g(TreemapSeriesTooltip, _super);\n    function TreemapSeriesTooltip() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.renderer = undefined;\n        return _this;\n    }\n    __decorate$1l([\n        Validate(OPT_FUNCTION)\n    ], TreemapSeriesTooltip.prototype, \"renderer\", void 0);\n    return TreemapSeriesTooltip;\n}(SeriesTooltip));\nvar TreemapSeriesNodeBaseClickEvent = /** @class */ (function (_super) {\n    __extends$g(TreemapSeriesNodeBaseClickEvent, _super);\n    function TreemapSeriesNodeBaseClickEvent(labelKey, sizeKey, colorKey, nativeEvent, datum, series) {\n        var _this = _super.call(this, nativeEvent, datum, series) || this;\n        _this.labelKey = labelKey;\n        _this.sizeKey = sizeKey;\n        _this.colorKey = colorKey;\n        return _this;\n    }\n    return TreemapSeriesNodeBaseClickEvent;\n}(SeriesNodeBaseClickEvent));\nvar TreemapSeriesNodeClickEvent = /** @class */ (function (_super) {\n    __extends$g(TreemapSeriesNodeClickEvent, _super);\n    function TreemapSeriesNodeClickEvent() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'nodeClick';\n        return _this;\n    }\n    return TreemapSeriesNodeClickEvent;\n}(TreemapSeriesNodeBaseClickEvent));\nvar TreemapSeriesNodeDoubleClickEvent = /** @class */ (function (_super) {\n    __extends$g(TreemapSeriesNodeDoubleClickEvent, _super);\n    function TreemapSeriesNodeDoubleClickEvent() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.type = 'nodeDoubleClick';\n        return _this;\n    }\n    return TreemapSeriesNodeDoubleClickEvent;\n}(TreemapSeriesNodeBaseClickEvent));\nvar TreemapSeriesLabel = /** @class */ (function (_super) {\n    __extends$g(TreemapSeriesLabel, _super);\n    function TreemapSeriesLabel() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.padding = 10;\n        return _this;\n    }\n    __decorate$1l([\n        Validate(NUMBER(0))\n    ], TreemapSeriesLabel.prototype, \"padding\", void 0);\n    return TreemapSeriesLabel;\n}(Label$1));\nvar TreemapSeriesTileLabel = /** @class */ (function (_super) {\n    __extends$g(TreemapSeriesTileLabel, _super);\n    function TreemapSeriesTileLabel() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.wrapping = 'on-space';\n        return _this;\n    }\n    __decorate$1l([\n        Validate(TEXT_WRAP)\n    ], TreemapSeriesTileLabel.prototype, \"wrapping\", void 0);\n    return TreemapSeriesTileLabel;\n}(Label$1));\nvar TreemapValueLabel = /** @class */ (function () {\n    function TreemapValueLabel() {\n        this.style = (function () {\n            var label = new Label$1();\n            label.color = 'white';\n            return label;\n        })();\n    }\n    __decorate$1l([\n        Validate(OPT_STRING)\n    ], TreemapValueLabel.prototype, \"key\", void 0);\n    __decorate$1l([\n        Validate(OPT_STRING)\n    ], TreemapValueLabel.prototype, \"name\", void 0);\n    __decorate$1l([\n        Validate(OPT_FUNCTION)\n    ], TreemapValueLabel.prototype, \"formatter\", void 0);\n    return TreemapValueLabel;\n}());\nvar TextNodeTag;\n(function (TextNodeTag) {\n    TextNodeTag[TextNodeTag[\"Name\"] = 0] = \"Name\";\n    TextNodeTag[TextNodeTag[\"Value\"] = 1] = \"Value\";\n})(TextNodeTag || (TextNodeTag = {}));\nvar tempText = new Text();\nfunction getTextSize(text, style) {\n    var fontStyle = style.fontStyle, fontWeight = style.fontWeight, fontSize = style.fontSize, fontFamily = style.fontFamily;\n    tempText.fontStyle = fontStyle;\n    tempText.fontWeight = fontWeight;\n    tempText.fontSize = fontSize;\n    tempText.fontFamily = fontFamily;\n    tempText.text = text;\n    tempText.x = 0;\n    tempText.y = 0;\n    tempText.textAlign = 'left';\n    tempText.textBaseline = 'top';\n    var _a = tempText.computeBBox(), width = _a.width, height = _a.height;\n    return { width: width, height: height };\n}\nfunction validateColor(color) {\n    if (typeof color === 'string' && !Color.validColorString(color)) {\n        var fallbackColor = 'black';\n        Logger.warnOnce(\"invalid Treemap tile colour string \\\"\" + color + \"\\\". Affected treemap tiles will be coloured \" + fallbackColor + \".\");\n        return 'black';\n    }\n    return color;\n}\nvar TreemapTextHighlightStyle = /** @class */ (function () {\n    function TreemapTextHighlightStyle() {\n        this.color = 'black';\n    }\n    __decorate$1l([\n        Validate(OPT_COLOR_STRING)\n    ], TreemapTextHighlightStyle.prototype, \"color\", void 0);\n    return TreemapTextHighlightStyle;\n}());\nvar TreemapHighlightStyle = /** @class */ (function (_super) {\n    __extends$g(TreemapHighlightStyle, _super);\n    function TreemapHighlightStyle() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.text = new TreemapTextHighlightStyle();\n        return _this;\n    }\n    return TreemapHighlightStyle;\n}(HighlightStyle));\nvar TreemapSeries = /** @class */ (function (_super) {\n    __extends$g(TreemapSeries, _super);\n    function TreemapSeries() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.groupSelection = Selection.select(_this.contentGroup, Group);\n        _this.highlightSelection = Selection.select(_this.highlightGroup, Group);\n        _this.title = (function () {\n            var label = new TreemapSeriesLabel();\n            label.color = 'white';\n            label.fontWeight = 'bold';\n            label.fontSize = 12;\n            label.fontFamily = 'Verdana, sans-serif';\n            label.padding = 15;\n            return label;\n        })();\n        _this.subtitle = (function () {\n            var label = new TreemapSeriesLabel();\n            label.color = 'white';\n            label.fontSize = 9;\n            label.fontFamily = 'Verdana, sans-serif';\n            label.padding = 13;\n            return label;\n        })();\n        _this.labels = {\n            large: (function () {\n                var label = new TreemapSeriesTileLabel();\n                label.color = 'white';\n                label.fontWeight = 'bold';\n                label.fontSize = 18;\n                return label;\n            })(),\n            medium: (function () {\n                var label = new TreemapSeriesTileLabel();\n                label.color = 'white';\n                label.fontWeight = 'bold';\n                label.fontSize = 14;\n                return label;\n            })(),\n            small: (function () {\n                var label = new TreemapSeriesTileLabel();\n                label.color = 'white';\n                label.fontWeight = 'bold';\n                label.fontSize = 10;\n                return label;\n            })(),\n            formatter: undefined,\n            value: new TreemapValueLabel(),\n        };\n        _this.nodePadding = 2;\n        _this.nodeGap = 0;\n        _this.labelKey = 'label';\n        _this.sizeKey = 'size';\n        _this.colorKey = 'color';\n        _this.colorDomain = [-5, 5];\n        _this.colorRange = ['#cb4b3f', '#6acb64'];\n        _this.groupFill = '#272931';\n        _this.groupStroke = 'black';\n        _this.groupStrokeWidth = 1;\n        _this.tileStroke = 'black';\n        _this.tileStrokeWidth = 1;\n        _this.gradient = true;\n        _this.formatter = undefined;\n        _this.colorName = 'Change';\n        _this.rootName = 'Root';\n        _this.highlightGroups = true;\n        _this.tileShadow = new DropShadow();\n        _this.labelShadow = new DropShadow();\n        _this.tooltip = new TreemapSeriesTooltip();\n        _this.highlightStyle = new TreemapHighlightStyle();\n        return _this;\n    }\n    TreemapSeries.prototype.getNodePaddingTop = function (nodeDatum, bbox) {\n        var _a;\n        var _b = this, title = _b.title, subtitle = _b.subtitle, nodePadding = _b.nodePadding;\n        var label = nodeDatum.label;\n        if (nodeDatum.isLeaf || !label || nodeDatum.depth === 0) {\n            return nodePadding;\n        }\n        var font = nodeDatum.depth > 1 ? subtitle : title;\n        var textSize = getTextSize(label, font);\n        var heightRatioThreshold = 3;\n        if (font.fontSize > bbox.width / heightRatioThreshold || font.fontSize > bbox.height / heightRatioThreshold) {\n            return nodePadding;\n        }\n        if (textSize.height >= bbox.height) {\n            return nodePadding;\n        }\n        return textSize.height + nodePadding + ((_a = font.padding) !== null && _a !== void 0 ? _a : 0);\n    };\n    TreemapSeries.prototype.getNodePadding = function (nodeDatum, bbox) {\n        var nodePadding = this.nodePadding;\n        var top = this.getNodePaddingTop(nodeDatum, bbox);\n        return {\n            top: top,\n            right: nodePadding,\n            bottom: nodePadding,\n            left: nodePadding,\n        };\n    };\n    /**\n     * Squarified Treemap algorithm\n     * https://www.win.tue.nl/~vanwijk/stm.pdf\n     */\n    TreemapSeries.prototype.squarify = function (nodeDatum, bbox, outputNodesBoxes) {\n        if (outputNodesBoxes === void 0) { outputNodesBoxes = new Map(); }\n        if (bbox.width <= 0 || bbox.height <= 0) {\n            return outputNodesBoxes;\n        }\n        outputNodesBoxes.set(nodeDatum, bbox);\n        var targetTileAspectRatio = 1; // The width and height will tend to this ratio\n        var padding = this.getNodePadding(nodeDatum, bbox);\n        var width = bbox.width - padding.left - padding.right;\n        var height = bbox.height - padding.top - padding.bottom;\n        if (width <= 0 || height <= 0 || nodeDatum.value <= 0) {\n            return outputNodesBoxes;\n        }\n        var stackSum = 0;\n        var startIndex = 0;\n        var minRatioDiff = Infinity;\n        var partitionSum = nodeDatum.value;\n        var children = nodeDatum.children;\n        var innerBox = new BBox(bbox.x + padding.left, bbox.y + padding.top, width, height);\n        var partition = innerBox.clone();\n        for (var i = 0; i < children.length; i++) {\n            var value = children[i].value;\n            var firstValue = children[startIndex].value;\n            var isVertical_1 = partition.width < partition.height;\n            stackSum += value;\n            var partThickness = isVertical_1 ? partition.height : partition.width;\n            var partLength = isVertical_1 ? partition.width : partition.height;\n            var firstTileLength = (partLength * firstValue) / stackSum;\n            var stackThickness = (partThickness * stackSum) / partitionSum;\n            var ratio = Math.max(firstTileLength, stackThickness) / Math.min(firstTileLength, stackThickness);\n            var diff = Math.abs(targetTileAspectRatio - ratio);\n            if (diff < minRatioDiff) {\n                minRatioDiff = diff;\n                continue;\n            }\n            // Go one step back and process the best match\n            stackSum -= value;\n            stackThickness = (partThickness * stackSum) / partitionSum;\n            var start_1 = isVertical_1 ? partition.x : partition.y;\n            for (var j = startIndex; j < i; j++) {\n                var child = children[j];\n                var x = isVertical_1 ? start_1 : partition.x;\n                var y = isVertical_1 ? partition.y : start_1;\n                var length_1 = (partLength * child.value) / stackSum;\n                var width_1 = isVertical_1 ? length_1 : stackThickness;\n                var height_1 = isVertical_1 ? stackThickness : length_1;\n                var childBox = new BBox(x, y, width_1, height_1);\n                this.applyGap(innerBox, childBox);\n                this.squarify(child, childBox, outputNodesBoxes);\n                partitionSum -= child.value;\n                start_1 += length_1;\n            }\n            if (isVertical_1) {\n                partition.y += stackThickness;\n                partition.height -= stackThickness;\n            }\n            else {\n                partition.x += stackThickness;\n                partition.width -= stackThickness;\n            }\n            startIndex = i;\n            stackSum = 0;\n            minRatioDiff = Infinity;\n            i--;\n        }\n        // Process remaining space\n        var isVertical = partition.width < partition.height;\n        var start = isVertical ? partition.x : partition.y;\n        for (var i = startIndex; i < children.length; i++) {\n            var x = isVertical ? start : partition.x;\n            var y = isVertical ? partition.y : start;\n            var part = children[i].value / partitionSum;\n            var width_2 = partition.width * (isVertical ? part : 1);\n            var height_2 = partition.height * (isVertical ? 1 : part);\n            var childBox = new BBox(x, y, width_2, height_2);\n            this.applyGap(innerBox, childBox);\n            this.squarify(children[i], childBox, outputNodesBoxes);\n            start += isVertical ? width_2 : height_2;\n        }\n        return outputNodesBoxes;\n    };\n    TreemapSeries.prototype.applyGap = function (innerBox, childBox) {\n        var gap = this.nodeGap / 2;\n        var getBounds = function (box) {\n            return {\n                left: box.x,\n                top: box.y,\n                right: box.x + box.width,\n                bottom: box.y + box.height,\n            };\n        };\n        var innerBounds = getBounds(innerBox);\n        var childBounds = getBounds(childBox);\n        var sides = Object.keys(innerBounds);\n        sides.forEach(function (side) {\n            if (!isEqual$2(innerBounds[side], childBounds[side])) {\n                childBox.shrink(gap, side);\n            }\n        });\n    };\n    TreemapSeries.prototype.processData = function () {\n        return __awaiter$1(this, void 0, void 0, function () {\n            var _a, data, sizeKey, labelKey, colorKey, colorDomain, colorRange, groupFill, labelFormatter, colorScale, createTreeNodeDatum;\n            var _this = this;\n            return __generator$1(this, function (_b) {\n                if (!this.data) {\n                    return [2 /*return*/];\n                }\n                _a = this, data = _a.data, sizeKey = _a.sizeKey, labelKey = _a.labelKey, colorKey = _a.colorKey, colorDomain = _a.colorDomain, colorRange = _a.colorRange, groupFill = _a.groupFill;\n                labelFormatter = this.labels.formatter;\n                colorScale = new ColorScale();\n                colorScale.domain = colorDomain;\n                colorScale.range = colorRange;\n                colorScale.update();\n                createTreeNodeDatum = function (datum, depth, parent) {\n                    var _a, _b, _c;\n                    if (depth === void 0) { depth = 0; }\n                    var label;\n                    if (labelFormatter) {\n                        label = _this.ctx.callbackCache.call(labelFormatter, { datum: datum });\n                    }\n                    if (label !== undefined) ;\n                    else if (labelKey) {\n                        label = (_a = datum[labelKey]) !== null && _a !== void 0 ? _a : '';\n                    }\n                    else {\n                        label = '';\n                    }\n                    var colorScaleValue = colorKey ? (_b = datum[colorKey]) !== null && _b !== void 0 ? _b : depth : depth;\n                    colorScaleValue = validateColor(colorScaleValue);\n                    var isLeaf = !datum.children;\n                    var fill = groupFill;\n                    if (typeof colorScaleValue === 'string') {\n                        fill = colorScaleValue;\n                    }\n                    else if (isLeaf || !groupFill) {\n                        fill = colorScale.convert(colorScaleValue);\n                    }\n                    var nodeDatum = {\n                        datum: datum,\n                        depth: depth,\n                        parent: parent,\n                        value: 0,\n                        label: label,\n                        fill: fill,\n                        series: _this,\n                        isLeaf: isLeaf,\n                        children: [],\n                    };\n                    if (isLeaf) {\n                        nodeDatum.value = sizeKey ? (_c = datum[sizeKey]) !== null && _c !== void 0 ? _c : 1 : 1;\n                    }\n                    else {\n                        datum.children.forEach(function (child) {\n                            var childNodeDatum = createTreeNodeDatum(child, depth + 1, nodeDatum);\n                            var value = childNodeDatum.value;\n                            if (isNaN(value) || !isFinite(value) || value === 0) {\n                                return;\n                            }\n                            nodeDatum.value += value;\n                            nodeDatum.children.push(childNodeDatum);\n                        });\n                        nodeDatum.children.sort(function (a, b) {\n                            return b.value - a.value;\n                        });\n                    }\n                    return nodeDatum;\n                };\n                this.dataRoot = createTreeNodeDatum(data);\n                return [2 /*return*/];\n            });\n        });\n    };\n    TreemapSeries.prototype.createNodeData = function () {\n        return __awaiter$1(this, void 0, void 0, function () {\n            return __generator$1(this, function (_a) {\n                return [2 /*return*/, []];\n            });\n        });\n    };\n    TreemapSeries.prototype.update = function () {\n        return __awaiter$1(this, void 0, void 0, function () {\n            return __generator$1(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.updateSelections()];\n                    case 1:\n                        _a.sent();\n                        return [4 /*yield*/, this.updateNodes()];\n                    case 2:\n                        _a.sent();\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    TreemapSeries.prototype.updateSelections = function () {\n        return __awaiter$1(this, void 0, void 0, function () {\n            var _a, chart, dataRoot, seriesRect, descendants, traverse, _b, groupSelection, highlightSelection, update;\n            return __generator$1(this, function (_c) {\n                if (!this.nodeDataRefresh) {\n                    return [2 /*return*/];\n                }\n                this.nodeDataRefresh = false;\n                _a = this, chart = _a.chart, dataRoot = _a.dataRoot;\n                if (!chart || !dataRoot) {\n                    return [2 /*return*/];\n                }\n                seriesRect = chart.getSeriesRect();\n                if (!seriesRect) {\n                    return [2 /*return*/];\n                }\n                descendants = [];\n                traverse = function (datum) {\n                    var _a;\n                    descendants.push(datum);\n                    (_a = datum.children) === null || _a === void 0 ? void 0 : _a.forEach(traverse);\n                };\n                traverse(this.dataRoot);\n                _b = this, groupSelection = _b.groupSelection, highlightSelection = _b.highlightSelection;\n                update = function (selection) {\n                    return selection.update(descendants, function (group) {\n                        var rect = new Rect();\n                        var nameLabel = new Text();\n                        nameLabel.tag = TextNodeTag.Name;\n                        var valueLabel = new Text();\n                        valueLabel.tag = TextNodeTag.Value;\n                        group.append([rect, nameLabel, valueLabel]);\n                    });\n                };\n                this.groupSelection = update(groupSelection);\n                this.highlightSelection = update(highlightSelection);\n                return [2 /*return*/];\n            });\n        });\n    };\n    TreemapSeries.prototype.isDatumHighlighted = function (datum) {\n        var _a;\n        var highlightedDatum = (_a = this.highlightManager) === null || _a === void 0 ? void 0 : _a.getActiveHighlight();\n        return datum === highlightedDatum && (datum.isLeaf || this.highlightGroups);\n    };\n    TreemapSeries.prototype.getTileFormat = function (datum, isHighlighted) {\n        var _a;\n        var _b = this, formatter = _b.formatter, callbackCache = _b.ctx.callbackCache;\n        if (!formatter) {\n            return {};\n        }\n        var _c = this, gradient = _c.gradient, colorKey = _c.colorKey, labelKey = _c.labelKey, sizeKey = _c.sizeKey, tileStroke = _c.tileStroke, tileStrokeWidth = _c.tileStrokeWidth, groupStroke = _c.groupStroke, groupStrokeWidth = _c.groupStrokeWidth;\n        var stroke = datum.isLeaf ? tileStroke : groupStroke;\n        var strokeWidth = datum.isLeaf ? tileStrokeWidth : groupStrokeWidth;\n        var result = callbackCache.call(formatter, {\n            seriesId: this.id,\n            datum: datum.datum,\n            depth: datum.depth,\n            parent: (_a = datum.parent) === null || _a === void 0 ? void 0 : _a.datum,\n            colorKey: colorKey,\n            sizeKey: sizeKey,\n            labelKey: labelKey,\n            fill: datum.fill,\n            stroke: stroke,\n            strokeWidth: strokeWidth,\n            gradient: gradient,\n            highlighted: isHighlighted,\n        });\n        return result !== null && result !== void 0 ? result : {};\n    };\n    TreemapSeries.prototype.updateNodes = function () {\n        return __awaiter$1(this, void 0, void 0, function () {\n            var _a, gradient, _b, _c, highlightedFill, highlightedFillOpacity, highlightedStroke, highlightedDatumStrokeWidth, highlightedTextColor, tileStroke, tileStrokeWidth, groupStroke, groupStrokeWidth, tileShadow, labelShadow, seriesRect, boxes, labelMeta, highlightedSubtree, updateRectFn, updateLabelFn;\n            var _this = this;\n            return __generator$1(this, function (_d) {\n                if (!this.chart) {\n                    return [2 /*return*/];\n                }\n                _a = this, gradient = _a.gradient, _b = _a.highlightStyle, _c = _b.item, highlightedFill = _c.fill, highlightedFillOpacity = _c.fillOpacity, highlightedStroke = _c.stroke, highlightedDatumStrokeWidth = _c.strokeWidth, highlightedTextColor = _b.text.color, tileStroke = _a.tileStroke, tileStrokeWidth = _a.tileStrokeWidth, groupStroke = _a.groupStroke, groupStrokeWidth = _a.groupStrokeWidth, tileShadow = _a.tileShadow, labelShadow = _a.labelShadow;\n                seriesRect = this.chart.getSeriesRect();\n                boxes = this.squarify(this.dataRoot, new BBox(0, 0, seriesRect.width, seriesRect.height));\n                labelMeta = this.buildLabelMeta(boxes);\n                highlightedSubtree = this.getHighlightedSubtree();\n                this.updateNodeMidPoint(boxes);\n                updateRectFn = function (rect, datum, isDatumHighlighted) {\n                    var _a, _b, _c, _d, _e, _f;\n                    var box = boxes.get(datum);\n                    if (!box) {\n                        rect.visible = false;\n                        return;\n                    }\n                    var fill = isDatumHighlighted && highlightedFill !== undefined ? highlightedFill : datum.fill;\n                    var fillOpacity = (_a = (isDatumHighlighted ? highlightedFillOpacity : 1)) !== null && _a !== void 0 ? _a : 1;\n                    var stroke = groupStroke;\n                    if (isDatumHighlighted && highlightedStroke !== undefined) {\n                        stroke = highlightedStroke;\n                    }\n                    else if (datum.isLeaf) {\n                        stroke = tileStroke;\n                    }\n                    var strokeWidth = groupStrokeWidth;\n                    if (isDatumHighlighted && highlightedDatumStrokeWidth !== undefined) {\n                        strokeWidth = highlightedDatumStrokeWidth;\n                    }\n                    else if (datum.isLeaf) {\n                        strokeWidth = tileStrokeWidth;\n                    }\n                    var format = _this.getTileFormat(datum, isDatumHighlighted);\n                    var fillColor = validateColor((_b = format === null || format === void 0 ? void 0 : format.fill) !== null && _b !== void 0 ? _b : fill);\n                    if ((_c = format === null || format === void 0 ? void 0 : format.gradient) !== null && _c !== void 0 ? _c : gradient) {\n                        var start = Color.tryParseFromString(fill).brighter().toString();\n                        var end = Color.tryParseFromString(fill).darker().toString();\n                        rect.fill = \"linear-gradient(180deg, \" + start + \", \" + end + \")\";\n                    }\n                    else {\n                        rect.fill = fillColor;\n                    }\n                    rect.fillOpacity = (_d = format === null || format === void 0 ? void 0 : format.fillOpacity) !== null && _d !== void 0 ? _d : fillOpacity;\n                    rect.stroke = validateColor((_e = format === null || format === void 0 ? void 0 : format.stroke) !== null && _e !== void 0 ? _e : stroke);\n                    rect.strokeWidth = (_f = format === null || format === void 0 ? void 0 : format.strokeWidth) !== null && _f !== void 0 ? _f : strokeWidth;\n                    rect.fillShadow = tileShadow;\n                    rect.crisp = true;\n                    rect.x = box.x;\n                    rect.y = box.y;\n                    rect.width = box.width;\n                    rect.height = box.height;\n                    rect.visible = true;\n                };\n                this.groupSelection.selectByClass(Rect).forEach(function (rect) { return updateRectFn(rect, rect.datum, false); });\n                this.highlightSelection.selectByClass(Rect).forEach(function (rect) {\n                    var isDatumHighlighted = _this.isDatumHighlighted(rect.datum);\n                    rect.visible = isDatumHighlighted || highlightedSubtree.has(rect.datum);\n                    if (rect.visible) {\n                        updateRectFn(rect, rect.datum, isDatumHighlighted);\n                    }\n                });\n                updateLabelFn = function (text, datum, highlighted, key) {\n                    var meta = labelMeta.get(datum);\n                    var label = meta === null || meta === void 0 ? void 0 : meta[key];\n                    if (!label) {\n                        text.visible = false;\n                        return;\n                    }\n                    text.text = label.text;\n                    text.fontFamily = label.style.fontFamily;\n                    text.fontSize = label.style.fontSize;\n                    text.fontWeight = label.style.fontWeight;\n                    text.fill = highlighted ? highlightedTextColor !== null && highlightedTextColor !== void 0 ? highlightedTextColor : label.style.color : label.style.color;\n                    text.fillShadow = highlighted ? undefined : labelShadow;\n                    text.textAlign = label.hAlign;\n                    text.textBaseline = label.vAlign;\n                    text.x = label.x;\n                    text.y = label.y;\n                    text.visible = true;\n                };\n                this.groupSelection\n                    .selectByTag(TextNodeTag.Name)\n                    .forEach(function (text) { return updateLabelFn(text, text.datum, false, 'label'); });\n                this.highlightSelection.selectByTag(TextNodeTag.Name).forEach(function (text) {\n                    var isDatumHighlighted = _this.isDatumHighlighted(text.datum);\n                    text.visible = isDatumHighlighted || highlightedSubtree.has(text.datum);\n                    if (text.visible) {\n                        updateLabelFn(text, text.datum, isDatumHighlighted, 'label');\n                    }\n                });\n                this.groupSelection\n                    .selectByTag(TextNodeTag.Value)\n                    .forEach(function (text) { return updateLabelFn(text, text.datum, false, 'value'); });\n                this.highlightSelection.selectByTag(TextNodeTag.Value).forEach(function (text) {\n                    var isDatumHighlighted = _this.isDatumHighlighted(text.datum);\n                    text.visible = isDatumHighlighted || highlightedSubtree.has(text.datum);\n                    if (text.visible) {\n                        updateLabelFn(text, text.datum, isDatumHighlighted, 'value');\n                    }\n                });\n                return [2 /*return*/];\n            });\n        });\n    };\n    TreemapSeries.prototype.updateNodeMidPoint = function (boxes) {\n        boxes.forEach(function (box, treeNodeDatum) {\n            treeNodeDatum.nodeMidPoint = {\n                x: box.x + box.width / 2,\n                y: box.y,\n            };\n        });\n    };\n    TreemapSeries.prototype.getHighlightedSubtree = function () {\n        var _this = this;\n        var items = new Set();\n        var traverse = function (datum) {\n            var _a;\n            if (_this.isDatumHighlighted(datum) || (datum.parent && items.has(datum.parent))) {\n                items.add(datum);\n            }\n            (_a = datum.children) === null || _a === void 0 ? void 0 : _a.forEach(traverse);\n        };\n        traverse(this.dataRoot);\n        return items;\n    };\n    TreemapSeries.prototype.buildLabelMeta = function (boxes) {\n        var _a = this, labels = _a.labels, title = _a.title, subtitle = _a.subtitle, nodePadding = _a.nodePadding, labelKey = _a.labelKey, callbackCache = _a.ctx.callbackCache;\n        var wrappedRegExp = /-$/m;\n        var labelMeta = new Map();\n        boxes.forEach(function (box, datum) {\n            var _a, _b, _c;\n            if (!labelKey || datum.depth === 0) {\n                return;\n            }\n            var availTextWidth = box.width - 2 * nodePadding;\n            var availTextHeight = box.height - 2 * nodePadding;\n            var isBoxTooSmall = function (labelStyle) {\n                var minSizeRatio = 3;\n                return (labelStyle.fontSize > box.width / minSizeRatio || labelStyle.fontSize > box.height / minSizeRatio);\n            };\n            var labelText = datum.isLeaf ? datum.label : datum.label.toUpperCase();\n            var valueText = '';\n            var valueConfig = labels.value;\n            var valueStyle = valueConfig.style;\n            var valueMargin = Math.ceil(valueStyle.fontSize * 2 * (Text.defaultLineHeightRatio - 1));\n            if (datum.isLeaf) {\n                if (valueConfig.formatter) {\n                    valueText = (_a = callbackCache.call(valueConfig.formatter, { datum: datum.datum })) !== null && _a !== void 0 ? _a : '';\n                }\n                else if (valueConfig.key) {\n                    valueText = datum.datum[valueConfig.key];\n                }\n            }\n            var valueSize = getTextSize(valueText, valueStyle);\n            if (valueText && valueSize.width > availTextWidth) {\n                valueText = '';\n            }\n            var labelStyle;\n            var wrappedText = '';\n            if (datum.isLeaf) {\n                labelStyle = labels.small;\n                var pickStyle = function () {\n                    var e_1, _a;\n                    var availHeight = availTextHeight - (valueText ? valueStyle.fontSize + valueMargin : 0);\n                    var labelStyles = [labels.large, labels.medium, labels.small];\n                    try {\n                        for (var labelStyles_1 = __values$6(labelStyles), labelStyles_1_1 = labelStyles_1.next(); !labelStyles_1_1.done; labelStyles_1_1 = labelStyles_1.next()) {\n                            var style = labelStyles_1_1.value;\n                            var _b = getTextSize(labelText, style), width = _b.width, height = _b.height;\n                            if (height > availHeight || isBoxTooSmall(style)) {\n                                continue;\n                            }\n                            if (width <= availTextWidth) {\n                                return { style: style, wrappedText: undefined };\n                            }\n                            // Avoid hyphens and ellipsis for large and medium label styles\n                            var wrapped = Text.wrap(labelText, availTextWidth, availHeight, style, style.wrapping);\n                            if (wrapped &&\n                                wrapped !== '\\u2026' &&\n                                (style === labels.small || !(wrappedRegExp.exec(wrapped) || wrapped.endsWith('\\u2026')))) {\n                                return { style: style, wrappedText: wrapped };\n                            }\n                        }\n                    }\n                    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n                    finally {\n                        try {\n                            if (labelStyles_1_1 && !labelStyles_1_1.done && (_a = labelStyles_1.return)) _a.call(labelStyles_1);\n                        }\n                        finally { if (e_1) throw e_1.error; }\n                    }\n                    // Check if small font fits by height\n                    var smallSize = getTextSize(labelText, labels.small);\n                    if (smallSize.height <= availHeight && !isBoxTooSmall(labels.small)) {\n                        return { style: labels.small, wrappedText: undefined };\n                    }\n                    return { style: undefined, wrappedText: undefined };\n                };\n                var result = pickStyle();\n                if (!result.style && valueText) {\n                    valueText = '';\n                    result = pickStyle();\n                }\n                labelStyle = (_b = result.style) !== null && _b !== void 0 ? _b : labels.small;\n                wrappedText = (_c = result.wrappedText) !== null && _c !== void 0 ? _c : '';\n            }\n            else if (datum.depth === 1) {\n                labelStyle = title;\n            }\n            else {\n                labelStyle = subtitle;\n            }\n            var labelSize = getTextSize(wrappedText || labelText, labelStyle);\n            if (isBoxTooSmall(labelStyle)) {\n                // Avoid labels on too small tiles\n                return;\n            }\n            // Crop text if not enough space\n            if (labelSize.width > availTextWidth) {\n                var textLength = Math.floor((labelText.length * availTextWidth) / labelSize.width) - 1;\n                labelText = labelText.substring(0, textLength).trim() + \"\\u2026\";\n            }\n            valueSize = getTextSize(valueText, valueStyle);\n            var hasValueText = valueText &&\n                valueSize.width < availTextWidth &&\n                valueSize.height + labelSize.height + valueMargin < availTextHeight;\n            labelMeta.set(datum, {\n                label: __assign$a({ text: wrappedText || labelText, style: labelStyle }, (datum.isLeaf\n                    ? {\n                        hAlign: 'center',\n                        vAlign: 'middle',\n                        x: box.x + box.width / 2,\n                        y: box.y + box.height / 2 - (hasValueText ? valueSize.height / 2 + valueMargin / 2 : 0),\n                    }\n                    : {\n                        hAlign: 'left',\n                        vAlign: 'top',\n                        x: box.x + nodePadding,\n                        y: box.y + nodePadding,\n                    })),\n                value: hasValueText\n                    ? {\n                        text: valueText,\n                        style: valueStyle,\n                        hAlign: 'center',\n                        vAlign: 'middle',\n                        x: box.x + box.width / 2,\n                        y: box.y + box.height / 2 + labelSize.height / 2 + valueMargin / 2,\n                    }\n                    : undefined,\n            });\n        });\n        return labelMeta;\n    };\n    TreemapSeries.prototype.getDomain = function (_direction) {\n        return [0, 1];\n    };\n    TreemapSeries.prototype.getNodeClickEvent = function (event, datum) {\n        return new TreemapSeriesNodeClickEvent(this.labelKey, this.sizeKey, this.colorKey, event, datum, this);\n    };\n    TreemapSeries.prototype.getNodeDoubleClickEvent = function (event, datum) {\n        return new TreemapSeriesNodeDoubleClickEvent(this.labelKey, this.sizeKey, this.colorKey, event, datum, this);\n    };\n    TreemapSeries.prototype.getTooltipHtml = function (nodeDatum) {\n        var _a, _b, _c, _d;\n        if (!this.highlightGroups && !nodeDatum.isLeaf) {\n            return '';\n        }\n        var _e = this, tooltip = _e.tooltip, sizeKey = _e.sizeKey, labelKey = _e.labelKey, colorKey = _e.colorKey, rootName = _e.rootName, seriesId = _e.id, labels = _e.labels, callbackCache = _e.ctx.callbackCache;\n        var datum = nodeDatum.datum;\n        var tooltipRenderer = tooltip.renderer;\n        var title = nodeDatum.depth ? datum[labelKey] : (_a = datum[labelKey]) !== null && _a !== void 0 ? _a : rootName;\n        var content = '';\n        var format = this.getTileFormat(nodeDatum, false);\n        var color = (_c = (_b = format === null || format === void 0 ? void 0 : format.fill) !== null && _b !== void 0 ? _b : nodeDatum.fill) !== null && _c !== void 0 ? _c : 'gray';\n        var valueKey = labels.value.key;\n        var valueFormatter = labels.value.formatter;\n        if (valueKey || valueFormatter) {\n            var valueText = '';\n            if (valueFormatter) {\n                valueText = callbackCache.call(valueFormatter, { datum: datum });\n            }\n            else {\n                var value = datum[valueKey];\n                if (typeof value === 'number' && isFinite(value)) {\n                    valueText = toFixed(value);\n                }\n            }\n            if (valueText) {\n                if (labels.value.name) {\n                    content += \"<b>\" + labels.value.name + \":</b> \";\n                }\n                content += valueText;\n            }\n        }\n        var defaults = {\n            title: title,\n            backgroundColor: color,\n            content: content,\n        };\n        if (tooltipRenderer) {\n            return toTooltipHtml$1(tooltipRenderer({\n                datum: nodeDatum.datum,\n                parent: (_d = nodeDatum.parent) === null || _d === void 0 ? void 0 : _d.datum,\n                depth: nodeDatum.depth,\n                sizeKey: sizeKey,\n                labelKey: labelKey,\n                colorKey: colorKey,\n                title: title,\n                color: color,\n                seriesId: seriesId,\n            }), defaults);\n        }\n        if (!title && !content) {\n            return '';\n        }\n        return toTooltipHtml$1(defaults);\n    };\n    TreemapSeries.prototype.getLegendData = function () {\n        // Override point for subclasses.\n        return [];\n    };\n    TreemapSeries.className = 'TreemapSeries';\n    TreemapSeries.type = 'treemap';\n    __decorate$1l([\n        Validate(NUMBER(0))\n    ], TreemapSeries.prototype, \"nodePadding\", void 0);\n    __decorate$1l([\n        Validate(NUMBER(0))\n    ], TreemapSeries.prototype, \"nodeGap\", void 0);\n    __decorate$1l([\n        Validate(STRING)\n    ], TreemapSeries.prototype, \"labelKey\", void 0);\n    __decorate$1l([\n        Validate(OPT_STRING)\n    ], TreemapSeries.prototype, \"sizeKey\", void 0);\n    __decorate$1l([\n        Validate(OPT_STRING)\n    ], TreemapSeries.prototype, \"colorKey\", void 0);\n    __decorate$1l([\n        Validate(NUMBER_ARRAY)\n    ], TreemapSeries.prototype, \"colorDomain\", void 0);\n    __decorate$1l([\n        Validate(COLOR_STRING_ARRAY)\n    ], TreemapSeries.prototype, \"colorRange\", void 0);\n    __decorate$1l([\n        Validate(OPT_STRING)\n    ], TreemapSeries.prototype, \"groupFill\", void 0);\n    __decorate$1l([\n        Validate(OPT_COLOR_STRING)\n    ], TreemapSeries.prototype, \"groupStroke\", void 0);\n    __decorate$1l([\n        Validate(OPT_NUMBER(0))\n    ], TreemapSeries.prototype, \"groupStrokeWidth\", void 0);\n    __decorate$1l([\n        Validate(OPT_COLOR_STRING)\n    ], TreemapSeries.prototype, \"tileStroke\", void 0);\n    __decorate$1l([\n        Validate(OPT_NUMBER(0))\n    ], TreemapSeries.prototype, \"tileStrokeWidth\", void 0);\n    __decorate$1l([\n        Validate(BOOLEAN)\n    ], TreemapSeries.prototype, \"gradient\", void 0);\n    __decorate$1l([\n        Validate(OPT_FUNCTION)\n    ], TreemapSeries.prototype, \"formatter\", void 0);\n    __decorate$1l([\n        Validate(STRING)\n    ], TreemapSeries.prototype, \"colorName\", void 0);\n    __decorate$1l([\n        Validate(STRING)\n    ], TreemapSeries.prototype, \"rootName\", void 0);\n    __decorate$1l([\n        Validate(OPT_BOOLEAN)\n    ], TreemapSeries.prototype, \"highlightGroups\", void 0);\n    return TreemapSeries;\n}(HierarchySeries));\n\nvar TYPES$1 = {\n    area: 'cartesian',\n    bar: 'cartesian',\n    column: 'cartesian',\n    histogram: 'cartesian',\n    line: 'cartesian',\n    scatter: 'cartesian',\n    treemap: 'hierarchy',\n    pie: 'polar',\n};\nvar DEFAULTS = {};\nvar CHART_TYPES = {\n    has: function (seriesType) {\n        return Object.prototype.hasOwnProperty.call(TYPES$1, seriesType);\n    },\n    isCartesian: function (seriesType) {\n        return TYPES$1[seriesType] === 'cartesian';\n    },\n    isPolar: function (seriesType) {\n        return TYPES$1[seriesType] === 'polar';\n    },\n    isHierarchy: function (seriesType) {\n        return TYPES$1[seriesType] === 'hierarchy';\n    },\n    get seriesTypes() {\n        return Object.keys(TYPES$1);\n    },\n    get cartesianTypes() {\n        var _this = this;\n        return this.seriesTypes.filter(function (t) { return _this.isCartesian(t); });\n    },\n    get polarTypes() {\n        var _this = this;\n        return this.seriesTypes.filter(function (t) { return _this.isPolar(t); });\n    },\n    get hierarchyTypes() {\n        var _this = this;\n        return this.seriesTypes.filter(function (t) { return _this.isHierarchy(t); });\n    },\n};\nfunction registerChartSeriesType(seriesType, chartType) {\n    TYPES$1[seriesType] = chartType;\n}\nfunction registerChartDefaults(chartType, defaults) {\n    var _a;\n    DEFAULTS[chartType] = jsonMerge([(_a = DEFAULTS[chartType]) !== null && _a !== void 0 ? _a : {}, defaults]);\n}\nfunction getChartDefaults(chartType) {\n    var _a;\n    return (_a = DEFAULTS[chartType]) !== null && _a !== void 0 ? _a : {};\n}\n\nvar BUILT_IN_SERIES_FACTORIES = {\n    area: AreaSeries,\n    bar: BarSeries,\n    column: ColumnSeries,\n    histogram: HistogramSeries,\n    line: LineSeries,\n    pie: PieSeries,\n    scatter: ScatterSeries,\n    treemap: TreemapSeries,\n};\nvar SERIES_FACTORIES = {};\nvar SERIES_DEFAULTS = {};\nvar SERIES_THEME_TEMPLATES = {};\nfunction registerSeries(seriesType, chartType, cstr, defaults, theme) {\n    SERIES_FACTORIES[seriesType] = cstr;\n    SERIES_DEFAULTS[seriesType] = defaults;\n    SERIES_THEME_TEMPLATES[seriesType] = theme;\n    registerChartSeriesType(seriesType, chartType);\n}\nfunction getSeries(chartType, moduleCtx) {\n    var _a;\n    var seriesConstructor = (_a = SERIES_FACTORIES[chartType]) !== null && _a !== void 0 ? _a : BUILT_IN_SERIES_FACTORIES[chartType];\n    if (seriesConstructor) {\n        return new seriesConstructor(moduleCtx);\n    }\n    throw new Error(\"AG Charts - unknown series type: \" + chartType);\n}\nfunction getSeriesDefaults(chartType) {\n    return SERIES_DEFAULTS[chartType];\n}\nfunction getSeriesThemeTemplate(chartType) {\n    return SERIES_THEME_TEMPLATES[chartType];\n}\n\nvar DEFAULT_CARTESIAN_CHART_OVERRIDES = {\n    axes: [\n        {\n            type: NumberAxis.type,\n            position: 'left',\n        },\n        {\n            type: CategoryAxis.type,\n            position: 'bottom',\n        },\n    ],\n};\nvar DEFAULT_BAR_CHART_OVERRIDES = {\n    axes: [\n        {\n            type: 'number',\n            position: 'bottom',\n        },\n        {\n            type: 'category',\n            position: 'left',\n        },\n    ],\n};\nvar DEFAULT_SCATTER_HISTOGRAM_CHART_OVERRIDES = {\n    axes: [\n        {\n            type: 'number',\n            position: 'bottom',\n        },\n        {\n            type: 'number',\n            position: 'left',\n        },\n    ],\n};\n\nvar __assign$9 = (undefined && undefined.__assign) || function () {\n    __assign$9 = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$9.apply(this, arguments);\n};\nfunction transform(input, transforms) {\n    var result = {};\n    for (var p in input) {\n        var t = transforms[p] || (function (x) { return x; });\n        result[p] = t(input[p], input);\n    }\n    return result;\n}\nfunction is2dArray(input) {\n    return input != null && input instanceof Array && input[0] instanceof Array;\n}\nfunction yNamesMapping(p, src) {\n    if (p == null) {\n        return {};\n    }\n    if (!(p instanceof Array)) {\n        return p;\n    }\n    var yKeys = src.yKeys;\n    if (yKeys == null || is2dArray(yKeys)) {\n        throw new Error('AG Charts - yNames and yKeys mismatching configuration.');\n    }\n    var result = {};\n    yKeys.forEach(function (k, i) {\n        result[k] = p[i];\n    });\n    return result;\n}\nfunction yKeysMapping(p, src) {\n    if (p == null) {\n        return [[]];\n    }\n    if (is2dArray(p)) {\n        return p;\n    }\n    return src.grouped ? p.map(function (v) { return [v]; }) : [p];\n}\nfunction legendItemNamesMapping(p, src) {\n    if (p == null) {\n        return {};\n    }\n    if (!(p instanceof Array)) {\n        return p;\n    }\n    var yKeys = src.yKeys;\n    if (yKeys == null || is2dArray(yKeys)) {\n        throw new Error('AG Charts - legendItemNames and yKeys mismatching configuration.');\n    }\n    var result = {};\n    yKeys.forEach(function (k, i) {\n        result[k] = p[i];\n    });\n    return result;\n}\nfunction barSeriesTransform(options) {\n    var result = __assign$9({}, options);\n    delete result['yKey'];\n    delete result['yName'];\n    return transform(result, {\n        yNames: yNamesMapping,\n        yKeys: yKeysMapping,\n        legendItemNames: legendItemNamesMapping,\n    });\n}\nfunction columnSeriesTransform(options) {\n    var result = __assign$9({}, options);\n    delete result['yKey'];\n    delete result['yName'];\n    return transform(result, {\n        yNames: yNamesMapping,\n        yKeys: yKeysMapping,\n        legendItemNames: legendItemNamesMapping,\n    });\n}\nfunction identityTransform(input) {\n    return input;\n}\nvar SERIES_TRANSFORMS = {\n    area: identityTransform,\n    bar: barSeriesTransform,\n    column: columnSeriesTransform,\n    histogram: identityTransform,\n    line: identityTransform,\n    pie: identityTransform,\n    scatter: identityTransform,\n    treemap: identityTransform,\n};\nfunction applySeriesTransform(options) {\n    var _a;\n    var type = (_a = options.type) !== null && _a !== void 0 ? _a : 'line';\n    var transform = SERIES_TRANSFORMS[type];\n    return (transform !== null && transform !== void 0 ? transform : identityTransform)(options);\n}\n\nfunction deepMerge$1(target, source) {\n    if (isPlainObject(target) && isPlainObject(source)) {\n        var result_1 = {};\n        Object.keys(target).forEach(function (key) {\n            if (key in source) {\n                result_1[key] = deepMerge$1(target[key], source[key]);\n            }\n            else {\n                result_1[key] = target[key];\n            }\n        });\n        Object.keys(source).forEach(function (key) {\n            if (!(key in target)) {\n                result_1[key] = source[key];\n            }\n        });\n        return result_1;\n    }\n    if ((Array.isArray(target) && !Array.isArray(source)) || (isObject(target) && !isObject(source))) {\n        return target;\n    }\n    return source;\n}\nfunction isObject(value) {\n    return value && typeof value === 'object';\n}\nfunction isPlainObject(x) {\n    return isObject(x) && x.constructor === Object;\n}\n\nvar TYPES = {\n    number: 'number',\n    time: 'time',\n    log: 'log',\n    category: 'category',\n    groupedCategory: 'groupedCategory',\n};\nvar AXES_THEME_TEMPLATES = {};\nvar CHART_AXES_TYPES = {\n    has: function (axisType) {\n        return Object.prototype.hasOwnProperty.call(TYPES, axisType);\n    },\n    get axesTypes() {\n        return Object.keys(TYPES);\n    },\n};\nfunction registerAxisThemeTemplate(axisType, theme) {\n    AXES_THEME_TEMPLATES[axisType] = theme;\n}\nfunction getAxisThemeTemplate(axisType) {\n    var _a;\n    return (_a = AXES_THEME_TEMPLATES[axisType]) !== null && _a !== void 0 ? _a : {};\n}\n\nvar __assign$8 = (undefined && undefined.__assign) || function () {\n    __assign$8 = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$8.apply(this, arguments);\n};\nvar __read$5 = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __values$5 = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar palette$8 = {\n    fills: ['#f3622d', '#fba71b', '#57b757', '#41a9c9', '#4258c9', '#9a42c8', '#c84164', '#888888'],\n    strokes: ['#aa4520', '#b07513', '#3d803d', '#2d768d', '#2e3e8d', '#6c2e8c', '#8c2d46', '#5f5f5f'],\n};\nvar EXTENDS_SERIES_DEFAULTS = Symbol('extends-series-defaults');\nvar OVERRIDE_SERIES_LABEL_DEFAULTS = Symbol('override-series-label-defaults');\nvar DEFAULT_FONT_FAMILY = Symbol('default-font');\nvar BOLD = 'bold';\nvar INSIDE = 'inside';\nvar BOTTOM = 'bottom';\nvar ChartTheme = /** @class */ (function () {\n    function ChartTheme(options) {\n        options = deepMerge$1({}, options !== null && options !== void 0 ? options : {});\n        var _a = options.overrides, overrides = _a === void 0 ? null : _a, _b = options.palette, palette = _b === void 0 ? null : _b;\n        var defaults = this.createChartConfigPerChartType(this.getDefaults());\n        if (overrides) {\n            var common = overrides.common, cartesian = overrides.cartesian, polar = overrides.polar, hierarchy = overrides.hierarchy;\n            var applyOverrides = function (type, seriesTypes, overrideOpts) {\n                if (overrideOpts) {\n                    defaults[type] = deepMerge$1(defaults[type], overrideOpts);\n                    seriesTypes.forEach(function (s) {\n                        var seriesType = s;\n                        defaults[seriesType] = deepMerge$1(defaults[seriesType], overrideOpts);\n                    });\n                }\n            };\n            applyOverrides('common', Object.keys(defaults), common);\n            applyOverrides('cartesian', CHART_TYPES.cartesianTypes, cartesian);\n            applyOverrides('polar', CHART_TYPES.polarTypes, polar);\n            applyOverrides('hierarchy', CHART_TYPES.hierarchyTypes, hierarchy);\n            CHART_TYPES.seriesTypes.forEach(function (s) {\n                var _a;\n                var seriesType = s;\n                var chartConfig = overrides[seriesType];\n                if (chartConfig) {\n                    if (chartConfig.series) {\n                        chartConfig.series = (_a = {}, _a[seriesType] = chartConfig.series, _a);\n                    }\n                    defaults[seriesType] = deepMerge$1(defaults[seriesType], chartConfig);\n                }\n            });\n        }\n        this.palette = palette !== null && palette !== void 0 ? palette : this.getPalette();\n        this.config = Object.freeze(defaults);\n    }\n    ChartTheme.prototype.getPalette = function () {\n        return palette$8;\n    };\n    ChartTheme.getAxisDefaults = function () {\n        return {\n            top: {},\n            right: {},\n            bottom: {},\n            left: {},\n            thickness: 0,\n            title: {\n                enabled: false,\n                text: 'Axis Title',\n                fontStyle: undefined,\n                fontWeight: BOLD,\n                fontSize: 12,\n                fontFamily: this.fontFamily,\n                color: 'rgb(70, 70, 70)',\n            },\n            label: {\n                fontStyle: undefined,\n                fontWeight: undefined,\n                fontSize: 12,\n                fontFamily: this.fontFamily,\n                padding: 5,\n                rotation: undefined,\n                color: 'rgb(87, 87, 87)',\n                formatter: undefined,\n                autoRotate: false,\n                avoidCollisions: true,\n            },\n            line: {\n                width: 1,\n                color: 'rgb(195, 195, 195)',\n            },\n            tick: {\n                width: 1,\n                size: 6,\n                color: 'rgb(195, 195, 195)',\n            },\n            gridStyle: [\n                {\n                    stroke: 'rgb(219, 219, 219)',\n                    lineDash: [4, 2],\n                },\n            ],\n            crossLines: {\n                enabled: false,\n                fill: 'rgb(187,221,232)',\n                stroke: 'rgb(70,162,192)',\n                strokeWidth: 1,\n                label: {\n                    enabled: false,\n                    fontStyle: undefined,\n                    fontWeight: undefined,\n                    fontSize: 12,\n                    fontFamily: this.fontFamily,\n                    padding: 5,\n                    color: 'rgb(87, 87, 87)',\n                    rotation: undefined,\n                },\n            },\n        };\n    };\n    ChartTheme.getSeriesDefaults = function () {\n        return {\n            tooltip: {\n                enabled: true,\n                renderer: undefined,\n            },\n            visible: true,\n            showInLegend: true,\n            highlightStyle: {\n                item: {\n                    fill: 'yellow',\n                    fillOpacity: 1,\n                },\n                series: {\n                    dimOpacity: 1,\n                },\n                text: {\n                    color: 'black',\n                },\n            },\n            nodeClickRange: 'exact',\n        };\n    };\n    ChartTheme.getBarSeriesDefaults = function () {\n        return __assign$8(__assign$8({}, this.getSeriesDefaults()), { fillOpacity: 1, strokeOpacity: 1, normalizedTo: undefined, strokeWidth: 1, lineDash: [0], lineDashOffset: 0, label: {\n                enabled: false,\n                fontStyle: undefined,\n                fontWeight: undefined,\n                fontSize: 12,\n                fontFamily: this.fontFamily,\n                color: 'rgb(70, 70, 70)',\n                formatter: undefined,\n                placement: INSIDE,\n            }, shadow: {\n                enabled: false,\n                color: 'rgba(0, 0, 0, 0.5)',\n                xOffset: 3,\n                yOffset: 3,\n                blur: 5,\n            } });\n    };\n    ChartTheme.getLineSeriesDefaults = function () {\n        var seriesDefaults = this.getSeriesDefaults();\n        return __assign$8(__assign$8({}, seriesDefaults), { tooltip: __assign$8(__assign$8({}, seriesDefaults.tooltip), { format: undefined, position: {\n                    type: 'node',\n                } }) });\n    };\n    ChartTheme.getAreaSeriesDefaults = function () {\n        var seriesDefaults = this.getSeriesDefaults();\n        return __assign$8(__assign$8({}, seriesDefaults), { nodeClickRange: 'nearest', tooltip: __assign$8(__assign$8({}, seriesDefaults.tooltip), { position: {\n                    type: 'node',\n                } }) });\n    };\n    ChartTheme.getScatterSeriesDefaults = function () {\n        var seriesDefaults = this.getSeriesDefaults();\n        return __assign$8(__assign$8({}, seriesDefaults), { tooltip: __assign$8(__assign$8({}, seriesDefaults.tooltip), { position: {\n                    type: 'node',\n                } }) });\n    };\n    ChartTheme.getCartesianSeriesMarkerDefaults = function () {\n        return {\n            enabled: true,\n            shape: 'circle',\n            size: 6,\n            maxSize: 30,\n            strokeWidth: 1,\n            formatter: undefined,\n        };\n    };\n    ChartTheme.getCaptionWrappingDefaults = function () {\n        return 'hyphenate';\n    };\n    ChartTheme.getChartDefaults = function () {\n        return {\n            background: {\n                visible: true,\n                fill: 'white',\n            },\n            padding: {\n                top: 20,\n                right: 20,\n                bottom: 20,\n                left: 20,\n            },\n            title: {\n                enabled: false,\n                text: 'Title',\n                fontStyle: undefined,\n                fontWeight: BOLD,\n                fontSize: 16,\n                fontFamily: this.fontFamily,\n                color: 'rgb(70, 70, 70)',\n                wrapping: ChartTheme.getCaptionWrappingDefaults(),\n            },\n            subtitle: {\n                enabled: false,\n                text: 'Subtitle',\n                fontStyle: undefined,\n                fontWeight: undefined,\n                fontSize: 12,\n                fontFamily: this.fontFamily,\n                color: 'rgb(140, 140, 140)',\n                wrapping: ChartTheme.getCaptionWrappingDefaults(),\n            },\n            footnote: {\n                enabled: false,\n                text: 'Footnote',\n                fontStyle: undefined,\n                fontWeight: undefined,\n                fontSize: 12,\n                fontFamily: this.fontFamily,\n                color: 'rgb(140, 140, 140)',\n                spacing: 30,\n                wrapping: ChartTheme.getCaptionWrappingDefaults(),\n            },\n            legend: {\n                position: BOTTOM,\n                spacing: 20,\n                listeners: {},\n                item: {\n                    paddingX: 16,\n                    paddingY: 8,\n                    marker: {\n                        shape: undefined,\n                        size: 15,\n                        strokeWidth: 1,\n                        padding: 8,\n                    },\n                    label: {\n                        color: 'black',\n                        fontStyle: undefined,\n                        fontWeight: undefined,\n                        fontSize: 12,\n                        fontFamily: this.fontFamily,\n                        formatter: undefined,\n                    },\n                },\n                reverseOrder: false,\n                pagination: {\n                    marker: {\n                        size: 12,\n                    },\n                    activeStyle: {\n                        fill: 'rgb(70, 70, 70)',\n                    },\n                    inactiveStyle: {\n                        fill: 'rgb(219, 219, 219)',\n                    },\n                    highlightStyle: {\n                        fill: 'rgb(70, 70, 70)',\n                    },\n                    label: {\n                        color: 'rgb(70, 70, 70)',\n                    },\n                },\n            },\n            tooltip: {\n                enabled: true,\n                range: 'nearest',\n                delay: 0,\n            },\n            listeners: {},\n        };\n    };\n    ChartTheme.prototype.createChartConfigPerChartType = function (config) {\n        var _this = this;\n        var typeToAliases = {\n            cartesian: CHART_TYPES.cartesianTypes,\n            polar: CHART_TYPES.polarTypes,\n            hierarchy: CHART_TYPES.hierarchyTypes,\n            groupedCategory: [],\n        };\n        Object.entries(typeToAliases).forEach(function (_a) {\n            var _b = __read$5(_a, 2), nextType = _b[0], aliases = _b[1];\n            var type = nextType;\n            var typeDefaults = _this.templateTheme(getChartDefaults(type));\n            aliases.forEach(function (next) {\n                var alias = next;\n                if (!config[alias]) {\n                    config[alias] = deepMerge$1({}, config[type]);\n                    deepMerge$1(config[alias], typeDefaults);\n                }\n            });\n        });\n        return config;\n    };\n    ChartTheme.prototype.getDefaults = function () {\n        var _this = this;\n        var defaults = deepMerge$1({}, ChartTheme.defaults);\n        var getOverridesByType = function (chartType, seriesTypes) {\n            var result = _this.templateTheme(getChartDefaults(chartType));\n            result.series = seriesTypes.reduce(function (obj, seriesType) {\n                var template = getSeriesThemeTemplate(seriesType);\n                if (template) {\n                    obj[seriesType] = _this.templateTheme(template);\n                }\n                return obj;\n            }, {});\n            if (chartType === 'cartesian') {\n                result.axes = CHART_AXES_TYPES.axesTypes.reduce(function (obj, axisType) {\n                    var template = getAxisThemeTemplate(axisType);\n                    if (template) {\n                        obj[axisType] = _this.templateTheme(template);\n                    }\n                    return obj;\n                }, {});\n            }\n            return result;\n        };\n        var extension = {\n            cartesian: getOverridesByType('cartesian', CHART_TYPES.cartesianTypes),\n            groupedCategory: getOverridesByType('cartesian', CHART_TYPES.cartesianTypes),\n            polar: getOverridesByType('polar', CHART_TYPES.polarTypes),\n            hierarchy: getOverridesByType('hierarchy', CHART_TYPES.hierarchyTypes),\n        };\n        return deepMerge$1(defaults, extension);\n    };\n    ChartTheme.prototype.templateTheme = function (themeTemplate) {\n        var themeInstance = jsonMerge([themeTemplate]);\n        var _a = this.getTemplateParameters(), extensions = _a.extensions, properties = _a.properties;\n        jsonWalk(themeInstance, function (_, node) {\n            var e_1, _a;\n            if (node['__extends__']) {\n                var key = node['__extends__'];\n                var source = extensions.get(key);\n                if (source == null) {\n                    throw new Error('AG Charts - no template variable provided for: ' + key);\n                }\n                Object.assign(node, source, node);\n                delete node['__extends__'];\n            }\n            if (node['__overrides__']) {\n                var key = node['__overrides__'];\n                var source = extensions.get(key);\n                if (source == null) {\n                    throw new Error('AG Charts - no template variable provided for: ' + key);\n                }\n                Object.assign(node, source);\n                delete node['__overrides__'];\n            }\n            try {\n                for (var _b = __values$5(Object.entries(node)), _c = _b.next(); !_c.done; _c = _b.next()) {\n                    var _d = __read$5(_c.value, 2), name_1 = _d[0], value = _d[1];\n                    if (properties.has(value)) {\n                        node[name_1] = properties.get(value);\n                    }\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n        }, {});\n        return themeInstance;\n    };\n    ChartTheme.prototype.getTemplateParameters = function () {\n        var extensions = new Map();\n        extensions.set(EXTENDS_SERIES_DEFAULTS, ChartTheme.getSeriesDefaults());\n        extensions.set(OVERRIDE_SERIES_LABEL_DEFAULTS, {});\n        var properties = new Map();\n        properties.set(DEFAULT_FONT_FAMILY, ChartTheme.fontFamily);\n        return {\n            extensions: extensions,\n            properties: properties,\n        };\n    };\n    ChartTheme.prototype.mergeWithParentDefaults = function (parentDefaults, defaults) {\n        return deepMerge$1(parentDefaults, defaults);\n    };\n    ChartTheme.fontFamily = 'Verdana, sans-serif';\n    ChartTheme.cartesianDefaults = __assign$8(__assign$8({}, ChartTheme.getChartDefaults()), { axes: {\n            number: __assign$8({}, ChartTheme.getAxisDefaults()),\n            log: __assign$8(__assign$8({}, ChartTheme.getAxisDefaults()), { base: 10 }),\n            category: __assign$8(__assign$8({}, ChartTheme.getAxisDefaults()), { groupPaddingInner: 0.1, label: __assign$8(__assign$8({}, ChartTheme.getAxisDefaults().label), { autoRotate: true }) }),\n            groupedCategory: __assign$8({}, ChartTheme.getAxisDefaults()),\n            time: __assign$8({}, ChartTheme.getAxisDefaults()),\n        }, series: {\n            column: __assign$8({}, ChartTheme.getBarSeriesDefaults()),\n            bar: __assign$8({}, ChartTheme.getBarSeriesDefaults()),\n            line: __assign$8(__assign$8({}, ChartTheme.getLineSeriesDefaults()), { title: undefined, strokeWidth: 2, strokeOpacity: 1, lineDash: [0], lineDashOffset: 0, marker: __assign$8(__assign$8({}, ChartTheme.getCartesianSeriesMarkerDefaults()), { fillOpacity: 1, strokeOpacity: 1 }), label: {\n                    enabled: false,\n                    fontStyle: undefined,\n                    fontWeight: undefined,\n                    fontSize: 12,\n                    fontFamily: ChartTheme.fontFamily,\n                    color: 'rgb(70, 70, 70)',\n                    formatter: undefined,\n                } }),\n            scatter: __assign$8(__assign$8({}, ChartTheme.getScatterSeriesDefaults()), { sizeName: 'Size', labelName: 'Label', marker: __assign$8({}, ChartTheme.getCartesianSeriesMarkerDefaults()), label: {\n                    enabled: false,\n                    fontStyle: undefined,\n                    fontWeight: undefined,\n                    fontSize: 12,\n                    fontFamily: ChartTheme.fontFamily,\n                    color: 'rgb(70, 70, 70)',\n                } }),\n            area: __assign$8(__assign$8({}, ChartTheme.getAreaSeriesDefaults()), { normalizedTo: undefined, fillOpacity: 0.8, strokeOpacity: 1, strokeWidth: 2, lineDash: [0], lineDashOffset: 0, shadow: {\n                    enabled: false,\n                    color: 'rgba(0, 0, 0, 0.5)',\n                    xOffset: 3,\n                    yOffset: 3,\n                    blur: 5,\n                }, marker: __assign$8(__assign$8({}, ChartTheme.getCartesianSeriesMarkerDefaults()), { fillOpacity: 1, strokeOpacity: 1, enabled: false }), label: {\n                    enabled: false,\n                    fontStyle: undefined,\n                    fontWeight: undefined,\n                    fontSize: 12,\n                    fontFamily: ChartTheme.fontFamily,\n                    color: 'rgb(70, 70, 70)',\n                    formatter: undefined,\n                } }),\n            histogram: __assign$8(__assign$8({}, ChartTheme.getSeriesDefaults()), { strokeWidth: 1, fillOpacity: 1, strokeOpacity: 1, lineDash: [0], lineDashOffset: 0, areaPlot: false, bins: undefined, aggregation: 'sum', label: {\n                    enabled: false,\n                    fontStyle: undefined,\n                    fontWeight: undefined,\n                    fontSize: 12,\n                    fontFamily: ChartTheme.fontFamily,\n                    color: 'rgb(70, 70, 70)',\n                    formatter: undefined,\n                }, shadow: {\n                    enabled: true,\n                    color: 'rgba(0, 0, 0, 0.5)',\n                    xOffset: 0,\n                    yOffset: 0,\n                    blur: 5,\n                } }),\n        } });\n    ChartTheme.polarDefaults = __assign$8(__assign$8({}, ChartTheme.getChartDefaults()), { series: {\n            pie: __assign$8(__assign$8({}, ChartTheme.getSeriesDefaults()), { title: {\n                    enabled: true,\n                    fontStyle: undefined,\n                    fontWeight: 'bold',\n                    fontSize: 14,\n                    fontFamily: ChartTheme.fontFamily,\n                    color: 'rgb(70, 70, 70)',\n                    spacing: 0,\n                }, radiusKey: undefined, radiusName: undefined, calloutLabelKey: undefined, calloutLabelName: undefined, sectorLabelKey: undefined, sectorLabelName: undefined, calloutLabel: {\n                    enabled: true,\n                    fontStyle: undefined,\n                    fontWeight: undefined,\n                    fontSize: 12,\n                    fontFamily: ChartTheme.fontFamily,\n                    color: 'rgb(70, 70, 70)',\n                    offset: 3,\n                    minAngle: 0,\n                }, sectorLabel: {\n                    enabled: true,\n                    fontStyle: undefined,\n                    fontWeight: undefined,\n                    fontSize: 12,\n                    fontFamily: ChartTheme.fontFamily,\n                    color: 'rgb(70, 70, 70)',\n                    positionOffset: 0,\n                    positionRatio: 0.5,\n                }, calloutLine: {\n                    length: 10,\n                    strokeWidth: 2,\n                }, fillOpacity: 1, strokeOpacity: 1, strokeWidth: 1, lineDash: [0], lineDashOffset: 0, rotation: 0, outerRadiusOffset: 0, innerRadiusOffset: 0, shadow: {\n                    enabled: false,\n                    color: 'rgba(0, 0, 0, 0.5)',\n                    xOffset: 3,\n                    yOffset: 3,\n                    blur: 5,\n                }, innerLabels: {\n                    fontStyle: undefined,\n                    fontWeight: undefined,\n                    fontSize: 12,\n                    fontFamily: ChartTheme.fontFamily,\n                    color: 'rgb(70, 70, 70)',\n                    margin: 2,\n                } }),\n        } });\n    ChartTheme.hierarchyDefaults = __assign$8(__assign$8({}, ChartTheme.getChartDefaults()), { series: {\n            treemap: __assign$8(__assign$8({}, ChartTheme.getSeriesDefaults()), { showInLegend: false, labelKey: 'label', sizeKey: 'size', colorKey: 'color', colorDomain: [-5, 5], colorRange: ['#cb4b3f', '#6acb64'], groupFill: '#272931', groupStroke: 'black', groupStrokeWidth: 1, tileStroke: 'black', tileStrokeWidth: 1, gradient: true, tileShadow: {\n                    enabled: false,\n                    color: 'rgba(0, 0, 0, 0.5)',\n                    xOffset: 3,\n                    yOffset: 3,\n                    blur: 5,\n                }, labelShadow: {\n                    enabled: true,\n                    color: 'rgba(0, 0, 0, 0.4)',\n                    xOffset: 1.5,\n                    yOffset: 1.5,\n                    blur: 5,\n                }, highlightGroups: true, nodePadding: 2, nodeGap: 0, title: {\n                    enabled: true,\n                    color: 'white',\n                    fontStyle: undefined,\n                    fontWeight: 'bold',\n                    fontSize: 12,\n                    fontFamily: 'Verdana, sans-serif',\n                    padding: 2,\n                }, subtitle: {\n                    enabled: true,\n                    color: 'white',\n                    fontStyle: undefined,\n                    fontWeight: undefined,\n                    fontSize: 9,\n                    fontFamily: 'Verdana, sans-serif',\n                    padding: 2,\n                }, labels: {\n                    large: {\n                        enabled: true,\n                        fontStyle: undefined,\n                        fontWeight: 'bold',\n                        fontSize: 18,\n                        fontFamily: 'Verdana, sans-serif',\n                        color: 'white',\n                        wrapping: 'on-space',\n                    },\n                    medium: {\n                        enabled: true,\n                        fontStyle: undefined,\n                        fontWeight: 'bold',\n                        fontSize: 14,\n                        fontFamily: 'Verdana, sans-serif',\n                        color: 'white',\n                        wrapping: 'on-space',\n                    },\n                    small: {\n                        enabled: true,\n                        fontStyle: undefined,\n                        fontWeight: 'bold',\n                        fontSize: 10,\n                        fontFamily: 'Verdana, sans-serif',\n                        color: 'white',\n                        wrapping: 'on-space',\n                    },\n                    value: {\n                        style: {\n                            enabled: true,\n                            fontStyle: undefined,\n                            fontWeight: undefined,\n                            fontSize: 12,\n                            fontFamily: 'Verdana, sans-serif',\n                            color: 'white',\n                        },\n                    },\n                } }),\n        } });\n    ChartTheme.defaults = {\n        cartesian: ChartTheme.cartesianDefaults,\n        groupedCategory: ChartTheme.cartesianDefaults,\n        polar: ChartTheme.polarDefaults,\n        hierarchy: ChartTheme.hierarchyDefaults,\n    };\n    return ChartTheme;\n}());\n\nvar __extends$f = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign$7 = (undefined && undefined.__assign) || function () {\n    __assign$7 = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$7.apply(this, arguments);\n};\nvar DarkTheme = /** @class */ (function (_super) {\n    __extends$f(DarkTheme, _super);\n    function DarkTheme(options) {\n        return _super.call(this, options) || this;\n    }\n    DarkTheme.prototype.getDefaults = function () {\n        var _this = this;\n        var fontColor = DarkTheme.fontColor;\n        var mutedFontColor = DarkTheme.mutedFontColor;\n        var axisDefaults = {\n            title: {\n                color: fontColor,\n            },\n            label: {\n                color: fontColor,\n            },\n            gridStyle: [\n                {\n                    stroke: 'rgb(88, 88, 88)',\n                    lineDash: [4, 2],\n                },\n            ],\n        };\n        var seriesLabelDefaults = {\n            label: {\n                color: fontColor,\n            },\n        };\n        var chartAxesDefaults = {\n            axes: {\n                number: __assign$7({}, axisDefaults),\n                category: __assign$7({}, axisDefaults),\n                time: __assign$7({}, axisDefaults),\n            },\n        };\n        var chartDefaults = {\n            background: {\n                fill: 'rgb(34, 38, 41)',\n            },\n            title: {\n                color: fontColor,\n            },\n            subtitle: {\n                color: mutedFontColor,\n            },\n            legend: {\n                item: {\n                    label: {\n                        color: fontColor,\n                    },\n                },\n                pagination: {\n                    activeStyle: {\n                        fill: fontColor,\n                    },\n                    inactiveStyle: {\n                        fill: mutedFontColor,\n                    },\n                    highlightStyle: {\n                        fill: fontColor,\n                    },\n                    label: {\n                        color: fontColor,\n                    },\n                },\n            },\n        };\n        var getOverridesByType = function (seriesTypes) {\n            return seriesTypes.reduce(function (obj, seriesType) {\n                var template = getSeriesThemeTemplate(seriesType);\n                if (template) {\n                    obj[seriesType] = _this.templateTheme(template);\n                }\n                return obj;\n            }, {});\n        };\n        return this.mergeWithParentDefaults(_super.prototype.getDefaults.call(this), {\n            cartesian: __assign$7(__assign$7(__assign$7({}, chartDefaults), chartAxesDefaults), { series: __assign$7({ line: __assign$7({}, seriesLabelDefaults), bar: __assign$7({}, seriesLabelDefaults), column: __assign$7({}, seriesLabelDefaults), histogram: __assign$7({}, seriesLabelDefaults) }, getOverridesByType(CHART_TYPES.cartesianTypes)) }),\n            groupedCategory: __assign$7(__assign$7(__assign$7({}, chartDefaults), chartAxesDefaults), { series: __assign$7({ bar: __assign$7({}, seriesLabelDefaults), column: __assign$7({}, seriesLabelDefaults), histogram: __assign$7({}, seriesLabelDefaults) }, getOverridesByType(CHART_TYPES.cartesianTypes)) }),\n            polar: __assign$7(__assign$7({}, chartDefaults), { series: __assign$7({ pie: {\n                        calloutLabel: {\n                            color: fontColor,\n                        },\n                        sectorLabel: {\n                            color: fontColor,\n                        },\n                        title: {\n                            color: fontColor,\n                        },\n                        innerLabels: {\n                            color: fontColor,\n                        },\n                    } }, getOverridesByType(CHART_TYPES.polarTypes)) }),\n            hierarchy: __assign$7(__assign$7({}, chartDefaults), { series: __assign$7({ treemap: {\n                        tileStroke: 'white',\n                        groupStroke: 'white',\n                        title: {\n                            color: fontColor,\n                        },\n                        subtitle: {\n                            color: mutedFontColor,\n                        },\n                        labels: {\n                            large: {\n                                color: fontColor,\n                            },\n                            medium: {\n                                color: fontColor,\n                            },\n                            small: {\n                                color: fontColor,\n                            },\n                            value: {\n                                style: {\n                                    color: fontColor,\n                                },\n                            },\n                        },\n                    } }, getOverridesByType(CHART_TYPES.hierarchyTypes)) }),\n        });\n    };\n    DarkTheme.prototype.getTemplateParameters = function () {\n        var result = _super.prototype.getTemplateParameters.call(this);\n        result.extensions.set(OVERRIDE_SERIES_LABEL_DEFAULTS, DarkTheme.seriesLabelDefaults.label);\n        return result;\n    };\n    DarkTheme.fontColor = 'rgb(200, 200, 200)';\n    DarkTheme.mutedFontColor = 'rgb(150, 150, 150)';\n    DarkTheme.seriesLabelDefaults = {\n        label: {\n            color: DarkTheme.fontColor,\n        },\n    };\n    return DarkTheme;\n}(ChartTheme));\n\nvar __extends$e = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar palette$7 = {\n    fills: [\n        '#f44336',\n        '#e91e63',\n        '#9c27b0',\n        '#673ab7',\n        '#3f51b5',\n        '#2196f3',\n        '#03a9f4',\n        '#00bcd4',\n        '#009688',\n        '#4caf50',\n        '#8bc34a',\n        '#cddc39',\n        '#ffeb3b',\n        '#ffc107',\n        '#ff9800',\n        '#ff5722',\n    ],\n    strokes: [\n        '#ab2f26',\n        '#a31545',\n        '#6d1b7b',\n        '#482980',\n        '#2c397f',\n        '#1769aa',\n        '#0276ab',\n        '#008494',\n        '#00695f',\n        '#357a38',\n        '#618834',\n        '#909a28',\n        '#b3a429',\n        '#b38705',\n        '#b36a00',\n        '#b33d18',\n    ],\n};\nvar MaterialLight = /** @class */ (function (_super) {\n    __extends$e(MaterialLight, _super);\n    function MaterialLight() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    MaterialLight.prototype.getPalette = function () {\n        return palette$7;\n    };\n    return MaterialLight;\n}(ChartTheme));\n\nvar __extends$d = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar palette$6 = {\n    fills: [\n        '#f44336',\n        '#e91e63',\n        '#9c27b0',\n        '#673ab7',\n        '#3f51b5',\n        '#2196f3',\n        '#03a9f4',\n        '#00bcd4',\n        '#009688',\n        '#4caf50',\n        '#8bc34a',\n        '#cddc39',\n        '#ffeb3b',\n        '#ffc107',\n        '#ff9800',\n        '#ff5722',\n    ],\n    strokes: [\n        '#ab2f26',\n        '#a31545',\n        '#6d1b7b',\n        '#482980',\n        '#2c397f',\n        '#1769aa',\n        '#0276ab',\n        '#008494',\n        '#00695f',\n        '#357a38',\n        '#618834',\n        '#909a28',\n        '#b3a429',\n        '#b38705',\n        '#b36a00',\n        '#b33d18',\n    ],\n};\nvar MaterialDark = /** @class */ (function (_super) {\n    __extends$d(MaterialDark, _super);\n    function MaterialDark() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    MaterialDark.prototype.getPalette = function () {\n        return palette$6;\n    };\n    return MaterialDark;\n}(DarkTheme));\n\nvar __extends$c = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar palette$5 = {\n    fills: ['#c16068', '#a2bf8a', '#ebcc87', '#80a0c3', '#b58dae', '#85c0d1'],\n    strokes: ['#874349', '#718661', '#a48f5f', '#5a7088', '#7f637a', '#5d8692'],\n};\nvar PastelLight = /** @class */ (function (_super) {\n    __extends$c(PastelLight, _super);\n    function PastelLight() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PastelLight.prototype.getPalette = function () {\n        return palette$5;\n    };\n    return PastelLight;\n}(ChartTheme));\n\nvar __extends$b = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar palette$4 = {\n    fills: ['#c16068', '#a2bf8a', '#ebcc87', '#80a0c3', '#b58dae', '#85c0d1'],\n    strokes: ['#874349', '#718661', '#a48f5f', '#5a7088', '#7f637a', '#5d8692'],\n};\nvar PastelDark = /** @class */ (function (_super) {\n    __extends$b(PastelDark, _super);\n    function PastelDark() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PastelDark.prototype.getPalette = function () {\n        return palette$4;\n    };\n    return PastelDark;\n}(DarkTheme));\n\nvar __extends$a = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar palette$3 = {\n    fills: [\n        '#febe76',\n        '#ff7979',\n        '#badc58',\n        '#f9ca23',\n        '#f0932b',\n        '#eb4c4b',\n        '#6ab04c',\n        '#7ed6df',\n        '#e056fd',\n        '#686de0',\n    ],\n    strokes: [\n        '#b28553',\n        '#b35555',\n        '#829a3e',\n        '#ae8d19',\n        '#a8671e',\n        '#a43535',\n        '#4a7b35',\n        '#58969c',\n        '#9d3cb1',\n        '#494c9d',\n    ],\n};\nvar SolarLight = /** @class */ (function (_super) {\n    __extends$a(SolarLight, _super);\n    function SolarLight() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    SolarLight.prototype.getPalette = function () {\n        return palette$3;\n    };\n    return SolarLight;\n}(ChartTheme));\n\nvar __extends$9 = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar palette$2 = {\n    fills: [\n        '#febe76',\n        '#ff7979',\n        '#badc58',\n        '#f9ca23',\n        '#f0932b',\n        '#eb4c4b',\n        '#6ab04c',\n        '#7ed6df',\n        '#e056fd',\n        '#686de0',\n    ],\n    strokes: [\n        '#b28553',\n        '#b35555',\n        '#829a3e',\n        '#ae8d19',\n        '#a8671e',\n        '#a43535',\n        '#4a7b35',\n        '#58969c',\n        '#9d3cb1',\n        '#494c9d',\n    ],\n};\nvar SolarDark = /** @class */ (function (_super) {\n    __extends$9(SolarDark, _super);\n    function SolarDark() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    SolarDark.prototype.getPalette = function () {\n        return palette$2;\n    };\n    return SolarDark;\n}(DarkTheme));\n\nvar __extends$8 = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar palette$1 = {\n    fills: ['#5BC0EB', '#FDE74C', '#9BC53D', '#E55934', '#FA7921', '#fa3081'],\n    strokes: ['#4086a4', '#b1a235', '#6c8a2b', '#a03e24', '#af5517', '#af225a'],\n};\nvar VividLight = /** @class */ (function (_super) {\n    __extends$8(VividLight, _super);\n    function VividLight() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    VividLight.prototype.getPalette = function () {\n        return palette$1;\n    };\n    return VividLight;\n}(ChartTheme));\n\nvar __extends$7 = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar palette = {\n    fills: ['#5BC0EB', '#FDE74C', '#9BC53D', '#E55934', '#FA7921', '#fa3081'],\n    strokes: ['#4086a4', '#b1a235', '#6c8a2b', '#a03e24', '#af5517', '#af225a'],\n};\nvar VividDark = /** @class */ (function (_super) {\n    __extends$7(VividDark, _super);\n    function VividDark() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    VividDark.prototype.getPalette = function () {\n        return palette;\n    };\n    return VividDark;\n}(DarkTheme));\n\nvar __assign$6 = (undefined && undefined.__assign) || function () {\n    __assign$6 = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$6.apply(this, arguments);\n};\nvar lightTheme = function () { return new ChartTheme(); };\nvar darkTheme = function () { return new DarkTheme(); };\nvar lightThemes = {\n    undefined: lightTheme,\n    null: lightTheme,\n    'ag-default': lightTheme,\n    'ag-material': function () { return new MaterialLight(); },\n    'ag-pastel': function () { return new PastelLight(); },\n    'ag-solar': function () { return new SolarLight(); },\n    'ag-vivid': function () { return new VividLight(); },\n};\nvar darkThemes = {\n    undefined: darkTheme,\n    null: darkTheme,\n    'ag-default-dark': darkTheme,\n    'ag-material-dark': function () { return new MaterialDark(); },\n    'ag-pastel-dark': function () { return new PastelDark(); },\n    'ag-solar-dark': function () { return new SolarDark(); },\n    'ag-vivid-dark': function () { return new VividDark(); },\n};\nvar themes$1 = __assign$6(__assign$6({}, darkThemes), lightThemes);\nfunction getChartTheme(value) {\n    var _a;\n    if (value instanceof ChartTheme) {\n        return value;\n    }\n    var stockTheme = themes$1[value];\n    if (stockTheme) {\n        return stockTheme();\n    }\n    value = value;\n    // Flatten recursive themes.\n    var overrides = [];\n    var palette;\n    while (typeof value === 'object') {\n        overrides.push((_a = value.overrides) !== null && _a !== void 0 ? _a : {});\n        // Use first palette found, they can't be merged.\n        if (value.palette && palette == null) {\n            palette = value.palette;\n        }\n        value = value.baseTheme;\n    }\n    overrides.reverse();\n    var flattenedTheme = __assign$6({ baseTheme: value, overrides: jsonMerge(overrides) }, (palette ? { palette: palette } : {}));\n    if (flattenedTheme.baseTheme || flattenedTheme.overrides) {\n        var baseTheme = getChartTheme(flattenedTheme.baseTheme);\n        return new baseTheme.constructor(flattenedTheme);\n    }\n    return lightTheme();\n}\n\nvar __assign$5 = (undefined && undefined.__assign) || function () {\n    __assign$5 = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$5.apply(this, arguments);\n};\nvar __values$4 = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read$4 = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$3 = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\n/**\n * Groups the series options objects if they are of type `column` or `bar` and places them in an array at the index where the first instance of this series type was found.\n * Returns an array of arrays containing the ordered and grouped series options objects.\n */\nfunction groupSeriesByType(seriesOptions) {\n    var e_1, _a;\n    var _b;\n    var indexMap = {};\n    var result = [];\n    try {\n        for (var seriesOptions_1 = __values$4(seriesOptions), seriesOptions_1_1 = seriesOptions_1.next(); !seriesOptions_1_1.done; seriesOptions_1_1 = seriesOptions_1.next()) {\n            var s = seriesOptions_1_1.value;\n            if (s.type !== 'column' && s.type !== 'bar' && (s.type !== 'area' || s.stacked !== true)) {\n                // No need to use index for these cases.\n                result.push([s]);\n                continue;\n            }\n            var seriesType = (_b = s.type) !== null && _b !== void 0 ? _b : 'line';\n            var groupingKey = s.stacked ? 'stacked' : 'grouped';\n            var indexKey = seriesType + \"-\" + s.xKey + \"-\" + groupingKey;\n            if (indexMap[indexKey] == null) {\n                // Add indexed array to result on first addition.\n                indexMap[indexKey] = [];\n                result.push(indexMap[indexKey]);\n            }\n            indexMap[indexKey].push(s);\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (seriesOptions_1_1 && !seriesOptions_1_1.done && (_a = seriesOptions_1.return)) _a.call(seriesOptions_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    return result;\n}\nvar FAIL = Symbol();\nvar SKIP = Symbol();\nvar ARRAY_REDUCER = function (prop) { return function (result, next) {\n    var _a;\n    return result.concat.apply(result, __spreadArray$3([], __read$4(((_a = next[prop]) !== null && _a !== void 0 ? _a : []))));\n}; };\nvar BOOLEAN_OR_REDUCER = function (prop, defaultValue) { return function (result, next) {\n    if (typeof next[prop] === 'boolean') {\n        return (result !== null && result !== void 0 ? result : false) || next[prop];\n    }\n    return result !== null && result !== void 0 ? result : defaultValue;\n}; };\nvar DEFAULTING_ARRAY_REDUCER = function (prop, defaultValue) { return function (result, next, idx, length) {\n    var _a;\n    var sparse = defaultValue === SKIP || defaultValue === FAIL;\n    var nextValue = (_a = next[prop]) !== null && _a !== void 0 ? _a : defaultValue;\n    if (nextValue === FAIL) {\n        throw new Error(\"AG Charts - missing value for property [\" + prop + \"] on series config.\");\n    }\n    else if (nextValue === SKIP) {\n        return result;\n    }\n    if (result.length === 0 && !sparse) {\n        // Pre-populate values on first invocation as we will only be invoked for series with a\n        // value specified.\n        while (result.length < length) {\n            result = result.concat(defaultValue);\n        }\n    }\n    if (!sparse) {\n        result[idx] = nextValue;\n        return result;\n    }\n    return result.concat(nextValue);\n}; };\nvar YKEYS_REDUCER = function (prop, activationValue) { return function (result, next) {\n    if (next[prop] === activationValue) {\n        return result.concat.apply(result, __spreadArray$3([], __read$4((next.yKey ? [next.yKey] : next.yKeys))));\n    }\n    return result;\n}; };\nvar STACK_GROUPS_REDUCER = function () { return function (result, next) {\n    var _a;\n    return __assign$5(__assign$5({}, result), (_a = {}, _a[next.stackGroup] = __spreadArray$3(__spreadArray$3([], __read$4((result[next.stackGroup] || []))), [next.yKey]), _a));\n}; };\nvar REDUCE_CONFIG = {\n    hideInChart: { outputProp: 'hideInChart', reducer: ARRAY_REDUCER('hideInChart'), start: [] },\n    hideInLegend: { outputProp: 'hideInLegend', reducer: ARRAY_REDUCER('hideInLegend'), start: [] },\n    yKey: { outputProp: 'yKeys', reducer: DEFAULTING_ARRAY_REDUCER('yKey', SKIP), start: [] },\n    fill: { outputProp: 'fills', reducer: DEFAULTING_ARRAY_REDUCER('fill', SKIP), start: [] },\n    stroke: { outputProp: 'strokes', reducer: DEFAULTING_ARRAY_REDUCER('stroke', SKIP), start: [] },\n    yName: { outputProp: 'yNames', reducer: DEFAULTING_ARRAY_REDUCER('yName', SKIP), start: [] },\n    visible: { outputProp: 'visibles', reducer: DEFAULTING_ARRAY_REDUCER('visible', true), start: [] },\n    legendItemName: {\n        outputProp: 'legendItemNames',\n        reducer: DEFAULTING_ARRAY_REDUCER('legendItemName', SKIP),\n        start: [],\n    },\n    grouped: {\n        outputProp: 'grouped',\n        reducer: BOOLEAN_OR_REDUCER('grouped'),\n        seriesType: ['bar', 'column'],\n        start: undefined,\n    },\n    showInLegend: {\n        outputProp: 'hideInLegend',\n        reducer: YKEYS_REDUCER('showInLegend', false),\n        seriesType: ['bar', 'column'],\n        start: [],\n    },\n    stackGroup: {\n        outputProp: 'stackGroups',\n        reducer: STACK_GROUPS_REDUCER(),\n        seriesType: ['bar', 'column'],\n        start: {},\n    },\n};\n/**\n * Takes an array of bar or area series options objects and returns a single object with the combined area series options.\n */\nfunction reduceSeries(series) {\n    var options = {};\n    series.forEach(function (s, idx) {\n        Object.keys(s).forEach(function (prop) {\n            var _a;\n            var reducerConfig = REDUCE_CONFIG[prop];\n            var defaultReduce = function () {\n                var _a, _b;\n                options[prop] = (_b = (_a = s[prop]) !== null && _a !== void 0 ? _a : options[prop]) !== null && _b !== void 0 ? _b : undefined;\n            };\n            if (!reducerConfig) {\n                defaultReduce();\n                return;\n            }\n            var outputProp = reducerConfig.outputProp, reducer = reducerConfig.reducer, _b = reducerConfig.start, start = _b === void 0 ? undefined : _b, _c = reducerConfig.seriesType, seriesType = _c === void 0 ? [s.type] : _c;\n            if (!seriesType.includes(s.type)) {\n                defaultReduce();\n                return;\n            }\n            var result = reducer((_a = options[outputProp]) !== null && _a !== void 0 ? _a : start, s, idx, series.length);\n            if (result !== undefined) {\n                options[outputProp] = result;\n            }\n        });\n    });\n    return options;\n}\n/**\n * Transforms provided series options array into an array containing series options which are compatible with standalone charts series options.\n */\nfunction processSeriesOptions(seriesOptions) {\n    var e_2, _a;\n    var result = [];\n    var preprocessed = seriesOptions.map(function (series) {\n        var _a;\n        // Change the default for bar/columns when yKey is used to be grouped rather than stacked.\n        if ((series.type === 'bar' || series.type === 'column') && series.yKey != null && !series.stacked) {\n            return __assign$5(__assign$5({}, series), { grouped: (_a = series.grouped) !== null && _a !== void 0 ? _a : true });\n        }\n        return series;\n    });\n    try {\n        for (var _b = __values$4(groupSeriesByType(preprocessed)), _c = _b.next(); !_c.done; _c = _b.next()) {\n            var series = _c.value;\n            switch (series[0].type) {\n                case 'column':\n                case 'bar':\n                case 'area':\n                    result.push(reduceSeries(series));\n                    break;\n                case 'line':\n                default:\n                    if (series.length > 1) {\n                        Logger.warn('unexpected grouping of series type: ' + series[0].type);\n                    }\n                    result.push(series[0]);\n                    break;\n            }\n        }\n    }\n    catch (e_2_1) { e_2 = { error: e_2_1 }; }\n    finally {\n        try {\n            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n        }\n        finally { if (e_2) throw e_2.error; }\n    }\n    return result;\n}\n\nvar __assign$4 = (undefined && undefined.__assign) || function () {\n    __assign$4 = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$4.apply(this, arguments);\n};\nvar __values$3 = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read$3 = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$2 = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nfunction optionsType(input) {\n    var _a, _b, _c, _d;\n    return (_d = (_a = input.type) !== null && _a !== void 0 ? _a : (_c = (_b = input.series) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.type) !== null && _d !== void 0 ? _d : 'line';\n}\nfunction isAgCartesianChartOptions(input) {\n    var specifiedType = optionsType(input);\n    if (specifiedType == null) {\n        return true;\n    }\n    if (specifiedType === 'cartesian') {\n        Logger.warnOnce(\"type '\" + specifiedType + \"' is deprecated, use a series type instead\");\n        return true;\n    }\n    return CHART_TYPES.isCartesian(specifiedType);\n}\nfunction isAgHierarchyChartOptions(input) {\n    var specifiedType = optionsType(input);\n    if (specifiedType == null) {\n        return false;\n    }\n    if (specifiedType === 'hierarchy') {\n        Logger.warnOnce(\"type '\" + specifiedType + \"' is deprecated, use a series type instead\");\n        return true;\n    }\n    return CHART_TYPES.isHierarchy(specifiedType);\n}\nfunction isAgPolarChartOptions(input) {\n    var specifiedType = optionsType(input);\n    if (specifiedType == null) {\n        return false;\n    }\n    if (specifiedType === 'polar') {\n        Logger.warnOnce(\"type '\" + specifiedType + \"' is deprecated, use a series type instead\");\n        return true;\n    }\n    return CHART_TYPES.isPolar(specifiedType);\n}\nfunction isSeriesOptionType(input) {\n    if (input == null) {\n        return false;\n    }\n    return CHART_TYPES.has(input);\n}\nfunction isAxisOptionType(input) {\n    if (input == null) {\n        return false;\n    }\n    return CHART_AXES_TYPES.has(input);\n}\nfunction countArrayElements(input) {\n    var e_1, _a;\n    var count = 0;\n    try {\n        for (var input_1 = __values$3(input), input_1_1 = input_1.next(); !input_1_1.done; input_1_1 = input_1.next()) {\n            var next = input_1_1.value;\n            if (next instanceof Array) {\n                count += countArrayElements(next);\n            }\n            if (next != null) {\n                count++;\n            }\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (input_1_1 && !input_1_1.done && (_a = input_1.return)) _a.call(input_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    return count;\n}\nfunction takeColours(context, colours, maxCount) {\n    var result = [];\n    for (var count = 0; count < maxCount; count++) {\n        result.push(colours[(count + context.colourIndex) % colours.length]);\n    }\n    return result;\n}\nvar noDataCloneMergeOptions = {\n    avoidDeepClone: ['data'],\n};\nfunction prepareOptions(newOptions, fallbackOptions) {\n    var e_2, _a, e_3, _b;\n    var _c, _d, _e, _f, _g, _h;\n    var options = jsonMerge([fallbackOptions, newOptions], noDataCloneMergeOptions);\n    sanityCheckOptions(options);\n    // Determine type and ensure it's explicit in the options config.\n    var userSuppliedOptionsType = options.type;\n    var type = optionsType(options);\n    var globalTooltipPositionOptions = (_d = (_c = options.tooltip) === null || _c === void 0 ? void 0 : _c.position) !== null && _d !== void 0 ? _d : {};\n    var checkSeriesType = function (type) {\n        if (type != null && !(isSeriesOptionType(type) || getSeriesDefaults(type))) {\n            throw new Error(\"AG Charts - unknown series type: \" + type + \"; expected one of: \" + CHART_TYPES.seriesTypes);\n        }\n    };\n    checkSeriesType(type);\n    try {\n        for (var _j = __values$3((_e = options.series) !== null && _e !== void 0 ? _e : []), _k = _j.next(); !_k.done; _k = _j.next()) {\n            var seriesType = _k.value.type;\n            if (seriesType == null)\n                continue;\n            checkSeriesType(seriesType);\n        }\n    }\n    catch (e_2_1) { e_2 = { error: e_2_1 }; }\n    finally {\n        try {\n            if (_k && !_k.done && (_a = _j.return)) _a.call(_j);\n        }\n        finally { if (e_2) throw e_2.error; }\n    }\n    options = __assign$4(__assign$4({}, options), { type: type });\n    var defaultSeriesType = 'line';\n    if (isAgCartesianChartOptions(options)) {\n        defaultSeriesType = 'line';\n    }\n    else if (isAgHierarchyChartOptions(options)) {\n        defaultSeriesType = 'treemap';\n    }\n    else if (isAgPolarChartOptions(options)) {\n        defaultSeriesType = 'pie';\n    }\n    var defaultOverrides = {};\n    var seriesDefaults = getSeriesDefaults(type);\n    if (seriesDefaults) {\n        defaultOverrides = seriesDefaults;\n    }\n    else if (type === 'bar') {\n        defaultOverrides = DEFAULT_BAR_CHART_OVERRIDES;\n    }\n    else if (type === 'scatter' || type === 'histogram') {\n        defaultOverrides = DEFAULT_SCATTER_HISTOGRAM_CHART_OVERRIDES;\n    }\n    else if (isAgCartesianChartOptions(options)) {\n        defaultOverrides = DEFAULT_CARTESIAN_CHART_OVERRIDES;\n    }\n    removeDisabledOptions(options);\n    var _l = prepareMainOptions(defaultOverrides, options), context = _l.context, mergedOptions = _l.mergedOptions, axesThemes = _l.axesThemes, seriesThemes = _l.seriesThemes;\n    // Special cases where we have arrays of elements which need their own defaults.\n    // Apply series themes before calling processSeriesOptions() as it reduces and renames some\n    // properties, and in that case then cannot correctly have themes applied.\n    mergedOptions.series = processSeriesOptions(((_f = mergedOptions.series) !== null && _f !== void 0 ? _f : []).map(function (s) {\n        var type = defaultSeriesType;\n        if (s.type) {\n            type = s.type;\n        }\n        else if (isSeriesOptionType(userSuppliedOptionsType)) {\n            type = userSuppliedOptionsType;\n        }\n        var mergedSeries = mergeSeriesOptions(s, type, seriesThemes, globalTooltipPositionOptions);\n        if (type === 'pie') {\n            preparePieOptions(seriesThemes.pie, s, mergedSeries);\n        }\n        return mergedSeries;\n    })).map(function (s) { return prepareSeries(context, s); });\n    var checkAxisType = function (type) {\n        var isAxisType = isAxisOptionType(type);\n        if (!isAxisType) {\n            Logger.warnOnce(\"AG Charts - unknown axis type: \" + type + \"; expected one of: \" + CHART_AXES_TYPES.axesTypes + \", ignoring.\");\n        }\n        return isAxisType;\n    };\n    if (isAgCartesianChartOptions(mergedOptions)) {\n        var validAxesTypes = true;\n        try {\n            for (var _m = __values$3((_g = mergedOptions.axes) !== null && _g !== void 0 ? _g : []), _o = _m.next(); !_o.done; _o = _m.next()) {\n                var axisType = _o.value.type;\n                if (!checkAxisType(axisType)) {\n                    validAxesTypes = false;\n                }\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (_o && !_o.done && (_b = _m.return)) _b.call(_m);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n        if (!validAxesTypes) {\n            mergedOptions.axes = defaultOverrides.axes;\n        }\n        else {\n            mergedOptions.axes = (_h = mergedOptions.axes) === null || _h === void 0 ? void 0 : _h.map(function (axis) {\n                var _a, _b;\n                var axisType = axis.type;\n                var axesTheme = jsonMerge([\n                    axesThemes[axisType],\n                    (_b = axesThemes[axisType][(_a = axis.position) !== null && _a !== void 0 ? _a : 'unknown']) !== null && _b !== void 0 ? _b : {},\n                ]);\n                return prepareAxis(axis, axesTheme);\n            });\n        }\n        prepareLegendEnabledOption(options, mergedOptions);\n    }\n    prepareEnabledOptions(options, mergedOptions);\n    return mergedOptions;\n}\nfunction sanityCheckOptions(options) {\n    var deprecatedArrayProps = {\n        yKeys: 'yKey',\n        yNames: 'yName',\n    };\n    Object.entries(deprecatedArrayProps).forEach(function (_a) {\n        var _b;\n        var _c = __read$3(_a, 2), oldProp = _c[0], newProp = _c[1];\n        if ((_b = options.series) === null || _b === void 0 ? void 0 : _b.some(function (s) { return s[oldProp] != null; })) {\n            Logger.warnOnce(\"property [series.\" + oldProp + \"] is deprecated, please use [series.\" + newProp + \"] and multiple series instead.\");\n        }\n    });\n}\nfunction mergeSeriesOptions(series, type, seriesThemes, globalTooltipPositionOptions) {\n    var _a, _b;\n    var mergedTooltipPosition = jsonMerge([__assign$4({}, globalTooltipPositionOptions), (_a = series.tooltip) === null || _a === void 0 ? void 0 : _a.position], noDataCloneMergeOptions);\n    var mergedSeries = jsonMerge([\n        (_b = seriesThemes[type]) !== null && _b !== void 0 ? _b : {},\n        __assign$4(__assign$4({}, series), { type: type, tooltip: __assign$4(__assign$4({}, series.tooltip), { position: mergedTooltipPosition }) }),\n    ], noDataCloneMergeOptions);\n    return mergedSeries;\n}\nfunction prepareMainOptions(defaultOverrides, options) {\n    var _a = prepareTheme(options), theme = _a.theme, cleanedTheme = _a.cleanedTheme, axesThemes = _a.axesThemes, seriesThemes = _a.seriesThemes;\n    var context = { colourIndex: 0, palette: theme.palette };\n    var mergedOptions = jsonMerge([defaultOverrides, cleanedTheme, options], noDataCloneMergeOptions);\n    return { context: context, mergedOptions: mergedOptions, axesThemes: axesThemes, seriesThemes: seriesThemes };\n}\nfunction prepareTheme(options) {\n    var _a, _b;\n    var theme = getChartTheme(options.theme);\n    var themeConfig = theme.config[(_a = optionsType(options)) !== null && _a !== void 0 ? _a : 'cartesian'];\n    var seriesThemes = Object.entries(theme.config).reduce(function (result, _a) {\n        var _b = __read$3(_a, 2), seriesType = _b[0], series = _b[1].series;\n        result[seriesType] = series === null || series === void 0 ? void 0 : series[seriesType];\n        return result;\n    }, {});\n    return {\n        theme: theme,\n        axesThemes: (_b = themeConfig['axes']) !== null && _b !== void 0 ? _b : {},\n        seriesThemes: seriesThemes,\n        cleanedTheme: jsonMerge([themeConfig, { axes: DELETE, series: DELETE }]),\n    };\n}\nfunction prepareSeries(context, input) {\n    var defaults = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        defaults[_i - 2] = arguments[_i];\n    }\n    var paletteOptions = calculateSeriesPalette(context, input);\n    // Part of the options interface, but not directly consumed by the series implementations.\n    var removeOptions = { stacked: DELETE };\n    var mergedResult = jsonMerge(__spreadArray$2(__spreadArray$2([], __read$3(defaults)), [paletteOptions, input, removeOptions]), noDataCloneMergeOptions);\n    return applySeriesTransform(mergedResult);\n}\nfunction calculateSeriesPalette(context, input) {\n    var _a;\n    var paletteOptions = {};\n    var _b = context.palette, fills = _b.fills, strokes = _b.strokes;\n    var inputAny = input;\n    var colourCount = countArrayElements((_a = inputAny['yKeys']) !== null && _a !== void 0 ? _a : []) || 1; // Defaults to 1 if no yKeys.\n    switch (input.type) {\n        case 'pie':\n            colourCount = Math.max(fills.length, strokes.length);\n        // eslint-disable-next-line no-fallthrough\n        case 'area':\n        case 'bar':\n        case 'column':\n            paletteOptions.fills = takeColours(context, fills, colourCount);\n            paletteOptions.strokes = takeColours(context, strokes, colourCount);\n            break;\n        case 'histogram':\n            paletteOptions.fill = takeColours(context, fills, 1)[0];\n            paletteOptions.stroke = takeColours(context, strokes, 1)[0];\n            break;\n        case 'scatter':\n            paletteOptions.marker = {\n                stroke: takeColours(context, strokes, 1)[0],\n                fill: takeColours(context, fills, 1)[0],\n            };\n            break;\n        case 'line':\n            paletteOptions.stroke = takeColours(context, fills, 1)[0];\n            paletteOptions.marker = {\n                stroke: takeColours(context, strokes, 1)[0],\n                fill: takeColours(context, fills, 1)[0],\n            };\n            break;\n    }\n    context.colourIndex += colourCount;\n    return paletteOptions;\n}\nfunction prepareAxis(axis, axisTheme) {\n    // Remove redundant theme overload keys.\n    var removeOptions = { top: DELETE, bottom: DELETE, left: DELETE, right: DELETE };\n    // Special cross lines case where we have an array of cross line elements which need their own defaults.\n    if (axis.crossLines) {\n        if (!Array.isArray(axis.crossLines)) {\n            Logger.warn('axis[].crossLines should be an array.');\n            axis.crossLines = [];\n        }\n        var crossLinesTheme_1 = axisTheme.crossLines;\n        axis.crossLines = axis.crossLines.map(function (crossLine) { return jsonMerge([crossLinesTheme_1, crossLine]); });\n    }\n    var cleanTheme = { crossLines: DELETE };\n    return jsonMerge([axisTheme, cleanTheme, axis, removeOptions], noDataCloneMergeOptions);\n}\nfunction removeDisabledOptions(options) {\n    // Remove configurations from all option objects with a `false` value for the `enabled` property.\n    jsonWalk(options, function (_, visitingUserOpts) {\n        if (!('enabled' in visitingUserOpts))\n            return;\n        if (visitingUserOpts.enabled === false) {\n            Object.entries(visitingUserOpts).forEach(function (_a) {\n                var _b = __read$3(_a, 1), key = _b[0];\n                if (key === 'enabled')\n                    return;\n                delete visitingUserOpts[key];\n            });\n        }\n    }, { skip: ['data', 'theme'] });\n}\nfunction prepareLegendEnabledOption(options, mergedOptions) {\n    var _a, _b, _c, _d;\n    // Disable legend by default for single series cartesian charts\n    if (((_a = options.legend) === null || _a === void 0 ? void 0 : _a.enabled) !== undefined || ((_b = mergedOptions.legend) === null || _b === void 0 ? void 0 : _b.enabled) !== undefined) {\n        return;\n    }\n    (_c = mergedOptions.legend) !== null && _c !== void 0 ? _c : (mergedOptions.legend = {});\n    if (((_d = options.series) !== null && _d !== void 0 ? _d : []).length > 1) {\n        mergedOptions.legend.enabled = true;\n        return;\n    }\n    mergedOptions.legend.enabled = false;\n}\nfunction prepareEnabledOptions(options, mergedOptions) {\n    // Set `enabled: true` for all option objects where the user has provided values.\n    jsonWalk(options, function (_, visitingUserOpts, visitingMergedOpts) {\n        if (!visitingMergedOpts)\n            return;\n        var _enabledFromTheme = visitingMergedOpts._enabledFromTheme;\n        if (_enabledFromTheme != null) {\n            // Do not apply special handling, base enablement on theme.\n            delete visitingMergedOpts._enabledFromTheme;\n        }\n        if (!('enabled' in visitingMergedOpts))\n            return;\n        if (_enabledFromTheme)\n            return;\n        if (visitingUserOpts.enabled == null) {\n            visitingMergedOpts.enabled = true;\n        }\n    }, { skip: ['data', 'theme'] }, mergedOptions);\n    // Cleanup any special properties.\n    jsonWalk(mergedOptions, function (_, visitingMergedOpts) {\n        if (visitingMergedOpts._enabledFromTheme != null) {\n            // Do not apply special handling, base enablement on theme.\n            delete visitingMergedOpts._enabledFromTheme;\n        }\n    }, { skip: ['data', 'theme'] });\n}\nfunction preparePieOptions(pieSeriesTheme, seriesOptions, mergedSeries) {\n    if (Array.isArray(seriesOptions.innerLabels)) {\n        mergedSeries.innerLabels = seriesOptions.innerLabels.map(function (ln) {\n            return jsonMerge([pieSeriesTheme.innerLabels, ln]);\n        });\n    }\n    else {\n        mergedSeries.innerLabels = DELETE;\n    }\n}\n\nvar horizontalCrosslineTranslationDirections = {\n    top: { xTranslationDirection: 0, yTranslationDirection: -1 },\n    bottom: { xTranslationDirection: 0, yTranslationDirection: 1 },\n    left: { xTranslationDirection: -1, yTranslationDirection: 0 },\n    right: { xTranslationDirection: 1, yTranslationDirection: 0 },\n    topLeft: { xTranslationDirection: 1, yTranslationDirection: -1 },\n    topRight: { xTranslationDirection: -1, yTranslationDirection: -1 },\n    bottomLeft: { xTranslationDirection: 1, yTranslationDirection: 1 },\n    bottomRight: { xTranslationDirection: -1, yTranslationDirection: 1 },\n    inside: { xTranslationDirection: 0, yTranslationDirection: 0 },\n    insideLeft: { xTranslationDirection: 1, yTranslationDirection: 0 },\n    insideRight: { xTranslationDirection: -1, yTranslationDirection: 0 },\n    insideTop: { xTranslationDirection: 0, yTranslationDirection: 1 },\n    insideBottom: { xTranslationDirection: 0, yTranslationDirection: -1 },\n    insideTopLeft: { xTranslationDirection: 1, yTranslationDirection: 1 },\n    insideBottomLeft: { xTranslationDirection: 1, yTranslationDirection: -1 },\n    insideTopRight: { xTranslationDirection: -1, yTranslationDirection: 1 },\n    insideBottomRight: { xTranslationDirection: -1, yTranslationDirection: -1 },\n};\nvar verticalCrossLineTranslationDirections = {\n    top: { xTranslationDirection: 1, yTranslationDirection: 0 },\n    bottom: { xTranslationDirection: -1, yTranslationDirection: 0 },\n    left: { xTranslationDirection: 0, yTranslationDirection: -1 },\n    right: { xTranslationDirection: 0, yTranslationDirection: 1 },\n    topLeft: { xTranslationDirection: -1, yTranslationDirection: -1 },\n    topRight: { xTranslationDirection: -1, yTranslationDirection: 1 },\n    bottomLeft: { xTranslationDirection: 1, yTranslationDirection: -1 },\n    bottomRight: { xTranslationDirection: 1, yTranslationDirection: 1 },\n    inside: { xTranslationDirection: 0, yTranslationDirection: 0 },\n    insideLeft: { xTranslationDirection: 0, yTranslationDirection: 1 },\n    insideRight: { xTranslationDirection: 0, yTranslationDirection: -1 },\n    insideTop: { xTranslationDirection: -1, yTranslationDirection: 0 },\n    insideBottom: { xTranslationDirection: 1, yTranslationDirection: 0 },\n    insideTopLeft: { xTranslationDirection: -1, yTranslationDirection: 1 },\n    insideBottomLeft: { xTranslationDirection: 1, yTranslationDirection: 1 },\n    insideTopRight: { xTranslationDirection: -1, yTranslationDirection: -1 },\n    insideBottomRight: { xTranslationDirection: 1, yTranslationDirection: -1 },\n};\nfunction calculateLabelTranslation(_a) {\n    var yDirection = _a.yDirection, _b = _a.padding, padding = _b === void 0 ? 0 : _b, _c = _a.position, position = _c === void 0 ? 'top' : _c, bbox = _a.bbox;\n    var crossLineTranslationDirections = yDirection\n        ? horizontalCrosslineTranslationDirections\n        : verticalCrossLineTranslationDirections;\n    var _d = crossLineTranslationDirections[position], xTranslationDirection = _d.xTranslationDirection, yTranslationDirection = _d.yTranslationDirection;\n    var w = yDirection ? bbox.width : bbox.height;\n    var h = yDirection ? bbox.height : bbox.width;\n    var xTranslation = xTranslationDirection * (padding + w / 2);\n    var yTranslation = yTranslationDirection * (padding + h / 2);\n    var result = {\n        xTranslation: xTranslation,\n        yTranslation: yTranslation,\n    };\n    return result;\n}\nfunction calculateLabelChartPadding(_a) {\n    var yDirection = _a.yDirection, bbox = _a.bbox, _b = _a.padding, padding = _b === void 0 ? 0 : _b, _c = _a.position, position = _c === void 0 ? 'top' : _c;\n    var chartPadding = {};\n    if (position.startsWith('inside'))\n        return chartPadding;\n    if (position === 'top' && !yDirection) {\n        chartPadding.top = padding + bbox.height;\n    }\n    else if (position === 'bottom' && !yDirection) {\n        chartPadding.bottom = padding + bbox.height;\n    }\n    else if (position === 'left' && yDirection) {\n        chartPadding.left = padding + bbox.width;\n    }\n    else if (position === 'right' && yDirection) {\n        chartPadding.right = padding + bbox.width;\n    }\n    return chartPadding;\n}\nvar POSITION_TOP_COORDINATES = function (_a) {\n    var yDirection = _a.yDirection, xEnd = _a.xEnd, yStart = _a.yStart, yEnd = _a.yEnd;\n    if (yDirection) {\n        return { x: xEnd / 2, y: yStart };\n    }\n    else {\n        return { x: xEnd, y: !isNaN(yEnd) ? (yStart + yEnd) / 2 : yStart };\n    }\n};\nvar POSITION_LEFT_COORDINATES = function (_a) {\n    var yDirection = _a.yDirection, xStart = _a.xStart, xEnd = _a.xEnd, yStart = _a.yStart, yEnd = _a.yEnd;\n    if (yDirection) {\n        return { x: xStart, y: !isNaN(yEnd) ? (yStart + yEnd) / 2 : yStart };\n    }\n    else {\n        return { x: xEnd / 2, y: yStart };\n    }\n};\nvar POSITION_RIGHT_COORDINATES = function (_a) {\n    var yDirection = _a.yDirection, xEnd = _a.xEnd, yStart = _a.yStart, yEnd = _a.yEnd;\n    if (yDirection) {\n        return { x: xEnd, y: !isNaN(yEnd) ? (yStart + yEnd) / 2 : yStart };\n    }\n    else {\n        return { x: xEnd / 2, y: !isNaN(yEnd) ? yEnd : yStart };\n    }\n};\nvar POSITION_BOTTOM_COORDINATES = function (_a) {\n    var yDirection = _a.yDirection, xStart = _a.xStart, xEnd = _a.xEnd, yStart = _a.yStart, yEnd = _a.yEnd;\n    if (yDirection) {\n        return { x: xEnd / 2, y: !isNaN(yEnd) ? yEnd : yStart };\n    }\n    else {\n        return { x: xStart, y: !isNaN(yEnd) ? (yStart + yEnd) / 2 : yStart };\n    }\n};\nvar POSITION_INSIDE_COORDINATES = function (_a) {\n    var xEnd = _a.xEnd, yStart = _a.yStart, yEnd = _a.yEnd;\n    return { x: xEnd / 2, y: !isNaN(yEnd) ? (yStart + yEnd) / 2 : yStart };\n};\nvar POSITION_TOP_LEFT_COORDINATES = function (_a) {\n    var yDirection = _a.yDirection, xStart = _a.xStart, xEnd = _a.xEnd, yStart = _a.yStart;\n    if (yDirection) {\n        return { x: xStart / 2, y: yStart };\n    }\n    else {\n        return { x: xEnd, y: yStart };\n    }\n};\nvar POSITION_BOTTOM_LEFT_COORDINATES = function (_a) {\n    var yDirection = _a.yDirection, xStart = _a.xStart, yStart = _a.yStart, yEnd = _a.yEnd;\n    if (yDirection) {\n        return { x: xStart, y: !isNaN(yEnd) ? yEnd : yStart };\n    }\n    else {\n        return { x: xStart, y: yStart };\n    }\n};\nvar POSITION_TOP_RIGHT_COORDINATES = function (_a) {\n    var yDirection = _a.yDirection, xEnd = _a.xEnd, yStart = _a.yStart, yEnd = _a.yEnd;\n    if (yDirection) {\n        return { x: xEnd, y: yStart };\n    }\n    else {\n        return { x: xEnd, y: !isNaN(yEnd) ? yEnd : yStart };\n    }\n};\nvar POSITION_BOTTOM_RIGHT_COORDINATES = function (_a) {\n    var yDirection = _a.yDirection, xStart = _a.xStart, xEnd = _a.xEnd, yStart = _a.yStart, yEnd = _a.yEnd;\n    if (yDirection) {\n        return { x: xEnd, y: !isNaN(yEnd) ? yEnd : yStart };\n    }\n    else {\n        return { x: xStart, y: !isNaN(yEnd) ? yEnd : yStart };\n    }\n};\nvar labeldDirectionHandling = {\n    top: { c: POSITION_TOP_COORDINATES },\n    bottom: { c: POSITION_BOTTOM_COORDINATES },\n    left: { c: POSITION_LEFT_COORDINATES },\n    right: { c: POSITION_RIGHT_COORDINATES },\n    topLeft: { c: POSITION_TOP_LEFT_COORDINATES },\n    topRight: { c: POSITION_TOP_RIGHT_COORDINATES },\n    bottomLeft: { c: POSITION_BOTTOM_LEFT_COORDINATES },\n    bottomRight: { c: POSITION_BOTTOM_RIGHT_COORDINATES },\n    inside: { c: POSITION_INSIDE_COORDINATES },\n    insideLeft: { c: POSITION_LEFT_COORDINATES },\n    insideRight: { c: POSITION_RIGHT_COORDINATES },\n    insideTop: { c: POSITION_TOP_COORDINATES },\n    insideBottom: { c: POSITION_BOTTOM_COORDINATES },\n    insideTopLeft: { c: POSITION_TOP_LEFT_COORDINATES },\n    insideBottomLeft: { c: POSITION_BOTTOM_LEFT_COORDINATES },\n    insideTopRight: { c: POSITION_TOP_RIGHT_COORDINATES },\n    insideBottomRight: { c: POSITION_BOTTOM_RIGHT_COORDINATES },\n};\n\nvar __extends$6 = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign$3 = (undefined && undefined.__assign) || function () {\n    __assign$3 = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$3.apply(this, arguments);\n};\nvar __decorate$1k = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar Range = /** @class */ (function (_super) {\n    __extends$6(Range, _super);\n    function Range() {\n        var _this = _super.call(this) || this;\n        _this.x1 = 0;\n        _this.y1 = 0;\n        _this.x2 = 0;\n        _this.y2 = 0;\n        _this.startLine = false;\n        _this.endLine = false;\n        _this.isRange = false;\n        _this.restoreOwnStyles();\n        return _this;\n    }\n    Range.prototype.computeBBox = function () {\n        return new BBox(this.x1, this.y1, this.x2 - this.x1, this.y2 - this.y1);\n    };\n    Range.prototype.isPointInPath = function (_x, _y) {\n        return false;\n    };\n    Range.prototype.render = function (renderCtx) {\n        var _a;\n        var ctx = renderCtx.ctx, forceRender = renderCtx.forceRender, stats = renderCtx.stats;\n        if (this.dirty === RedrawType.NONE && !forceRender) {\n            if (stats)\n                stats.nodesSkipped += this.nodeCount.count;\n            return;\n        }\n        this.computeTransformMatrix();\n        this.matrix.toContext(ctx);\n        var _b = this, x1 = _b.x1, y1 = _b.y1, x2 = _b.x2, y2 = _b.y2;\n        x1 = this.align(x1);\n        y1 = this.align(y1);\n        x2 = this.align(x2);\n        y2 = this.align(y2);\n        var _c = this, fill = _c.fill, opacity = _c.opacity, isRange = _c.isRange;\n        var fillActive = !!(isRange && fill);\n        if (fillActive) {\n            var fillOpacity = this.fillOpacity;\n            ctx.fillStyle = fill;\n            ctx.globalAlpha = opacity * fillOpacity;\n            ctx.beginPath();\n            ctx.moveTo(x1, y1);\n            ctx.lineTo(x2, y1);\n            ctx.lineTo(x2, y2);\n            ctx.lineTo(x1, y2);\n            ctx.closePath();\n            ctx.fill();\n        }\n        var _d = this, stroke = _d.stroke, strokeWidth = _d.strokeWidth, startLine = _d.startLine, endLine = _d.endLine;\n        var strokeActive = !!((startLine || endLine) && stroke && strokeWidth);\n        if (strokeActive) {\n            var _e = this, strokeOpacity = _e.strokeOpacity, lineDash = _e.lineDash, lineDashOffset = _e.lineDashOffset, lineCap = _e.lineCap, lineJoin = _e.lineJoin;\n            ctx.strokeStyle = stroke;\n            ctx.globalAlpha = opacity * strokeOpacity;\n            ctx.lineWidth = strokeWidth;\n            if (lineDash) {\n                ctx.setLineDash(lineDash);\n            }\n            if (lineDashOffset) {\n                ctx.lineDashOffset = lineDashOffset;\n            }\n            if (lineCap) {\n                ctx.lineCap = lineCap;\n            }\n            if (lineJoin) {\n                ctx.lineJoin = lineJoin;\n            }\n            ctx.beginPath();\n            if (startLine) {\n                ctx.moveTo(x1, y1);\n                ctx.lineTo(x2, y1);\n            }\n            if (endLine) {\n                ctx.moveTo(x2, y2);\n                ctx.lineTo(x1, y2);\n            }\n            ctx.stroke();\n        }\n        (_a = this.fillShadow) === null || _a === void 0 ? void 0 : _a.markClean();\n        _super.prototype.render.call(this, renderCtx);\n    };\n    Range.className = 'Range';\n    Range.defaultStyles = __assign$3(__assign$3({}, Shape.defaultStyles), { strokeWidth: 1 });\n    __decorate$1k([\n        SceneChangeDetection({ redraw: RedrawType.MINOR })\n    ], Range.prototype, \"x1\", void 0);\n    __decorate$1k([\n        SceneChangeDetection({ redraw: RedrawType.MINOR })\n    ], Range.prototype, \"y1\", void 0);\n    __decorate$1k([\n        SceneChangeDetection({ redraw: RedrawType.MINOR })\n    ], Range.prototype, \"x2\", void 0);\n    __decorate$1k([\n        SceneChangeDetection({ redraw: RedrawType.MINOR })\n    ], Range.prototype, \"y2\", void 0);\n    __decorate$1k([\n        SceneChangeDetection({ redraw: RedrawType.MINOR })\n    ], Range.prototype, \"startLine\", void 0);\n    __decorate$1k([\n        SceneChangeDetection({ redraw: RedrawType.MINOR })\n    ], Range.prototype, \"endLine\", void 0);\n    __decorate$1k([\n        SceneChangeDetection({ redraw: RedrawType.MINOR })\n    ], Range.prototype, \"isRange\", void 0);\n    return Range;\n}(Shape));\n\nvar __decorate$1j = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __read$2 = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray$1 = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar CROSSLINE_LABEL_POSITIONS = [\n    'top',\n    'left',\n    'right',\n    'bottom',\n    'topLeft',\n    'topRight',\n    'bottomLeft',\n    'bottomRight',\n    'inside',\n    'insideLeft',\n    'insideRight',\n    'insideTop',\n    'insideBottom',\n    'insideTopLeft',\n    'insideBottomLeft',\n    'insideTopRight',\n    'insideBottomRight',\n];\nvar OPT_CROSSLINE_LABEL_POSITION = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, function (v) { return CROSSLINE_LABEL_POSITIONS.includes(v); }); }, \"expecting an optional crossLine label position keyword such as 'topLeft', 'topRight' or 'inside'\");\nvar OPT_CROSSLINE_TYPE = predicateWithMessage(function (v, ctx) { return OPTIONAL(v, ctx, function (v) { return v === 'range' || v === 'line'; }); }, \"expecting a crossLine type keyword such as 'range' or 'line'\");\nvar CrossLineLabel = /** @class */ (function () {\n    function CrossLineLabel() {\n        this.enabled = undefined;\n        this.text = undefined;\n        this.fontStyle = undefined;\n        this.fontWeight = undefined;\n        this.fontSize = 14;\n        this.fontFamily = 'Verdana, sans-serif';\n        /**\n         * The padding between the label and the line.\n         */\n        this.padding = 5;\n        /**\n         * The color of the labels.\n         */\n        this.color = 'rgba(87, 87, 87, 1)';\n        this.position = undefined;\n        this.rotation = undefined;\n        this.parallel = undefined;\n    }\n    __decorate$1j([\n        Validate(OPT_BOOLEAN)\n    ], CrossLineLabel.prototype, \"enabled\", void 0);\n    __decorate$1j([\n        Validate(OPT_STRING)\n    ], CrossLineLabel.prototype, \"text\", void 0);\n    __decorate$1j([\n        Validate(OPT_FONT_STYLE)\n    ], CrossLineLabel.prototype, \"fontStyle\", void 0);\n    __decorate$1j([\n        Validate(OPT_FONT_WEIGHT)\n    ], CrossLineLabel.prototype, \"fontWeight\", void 0);\n    __decorate$1j([\n        Validate(NUMBER(0))\n    ], CrossLineLabel.prototype, \"fontSize\", void 0);\n    __decorate$1j([\n        Validate(STRING)\n    ], CrossLineLabel.prototype, \"fontFamily\", void 0);\n    __decorate$1j([\n        Validate(NUMBER(0))\n    ], CrossLineLabel.prototype, \"padding\", void 0);\n    __decorate$1j([\n        Validate(OPT_COLOR_STRING)\n    ], CrossLineLabel.prototype, \"color\", void 0);\n    __decorate$1j([\n        Validate(OPT_CROSSLINE_LABEL_POSITION)\n    ], CrossLineLabel.prototype, \"position\", void 0);\n    __decorate$1j([\n        Validate(OPT_NUMBER(-360, 360))\n    ], CrossLineLabel.prototype, \"rotation\", void 0);\n    __decorate$1j([\n        Validate(OPT_BOOLEAN)\n    ], CrossLineLabel.prototype, \"parallel\", void 0);\n    return CrossLineLabel;\n}());\nvar CrossLine = /** @class */ (function () {\n    function CrossLine() {\n        this.id = createId$1(this);\n        this.enabled = undefined;\n        this.type = undefined;\n        this.range = undefined;\n        this.value = undefined;\n        this.fill = undefined;\n        this.fillOpacity = undefined;\n        this.stroke = undefined;\n        this.strokeWidth = undefined;\n        this.strokeOpacity = undefined;\n        this.lineDash = undefined;\n        this.label = new CrossLineLabel();\n        this.scale = undefined;\n        this.clippedRange = [-Infinity, Infinity];\n        this.gridLength = 0;\n        this.sideFlag = -1;\n        this.parallelFlipRotation = 0;\n        this.regularFlipRotation = 0;\n        this.direction = ChartAxisDirection.X;\n        this.group = new Group({ name: \"\" + this.id, layer: true, zIndex: CrossLine.LINE_LAYER_ZINDEX });\n        this.crossLineRange = new Range();\n        this.crossLineLabel = new Text();\n        this.labelPoint = undefined;\n        this.data = [];\n        this.startLine = false;\n        this.endLine = false;\n        this.isRange = false;\n        var _a = this, group = _a.group, crossLineRange = _a.crossLineRange, crossLineLabel = _a.crossLineLabel;\n        group.append([crossLineRange, crossLineLabel]);\n        crossLineRange.pointerEvents = PointerEvents.None;\n    }\n    CrossLine.prototype.update = function (visible) {\n        if (!this.enabled) {\n            return;\n        }\n        this.group.visible = visible;\n        if (!visible) {\n            return;\n        }\n        var dataCreated = this.createNodeData();\n        if (!dataCreated) {\n            this.group.visible = false;\n            return;\n        }\n        this.updateNodes();\n        this.group.zIndex = this.getZIndex(this.isRange);\n    };\n    CrossLine.prototype.updateNodes = function () {\n        this.updateRangeNode();\n        if (this.label.enabled) {\n            this.updateLabel();\n            this.positionLabel();\n        }\n    };\n    CrossLine.prototype.createNodeData = function () {\n        var _a, _b, _c;\n        var _d, _e;\n        var _f = this, scale = _f.scale, gridLength = _f.gridLength, sideFlag = _f.sideFlag, direction = _f.direction, _g = _f.label.position, position = _g === void 0 ? 'top' : _g, clippedRange = _f.clippedRange, _h = _f.strokeWidth, strokeWidth = _h === void 0 ? 0 : _h;\n        if (!scale) {\n            return false;\n        }\n        var bandwidth = (_d = scale.bandwidth) !== null && _d !== void 0 ? _d : 0;\n        var clippedRangeClamper = function (x) {\n            return Math.max(Math.min.apply(Math, __spreadArray$1([], __read$2(clippedRange))), Math.min(Math.max.apply(Math, __spreadArray$1([], __read$2(clippedRange))), x));\n        };\n        var _j = __read$2([0, sideFlag * gridLength], 2), xStart = _j[0], xEnd = _j[1];\n        var _k = __read$2(this.getRange(), 2), yStart = _k[0], yEnd = _k[1];\n        var _l = __read$2([\n            Number(scale.convert(yStart, { strict: false })),\n            scale.convert(yEnd, { strict: false }) + bandwidth,\n        ], 2), clampedYStart = _l[0], clampedYEnd = _l[1];\n        clampedYStart = clippedRangeClamper(clampedYStart);\n        clampedYEnd = clippedRangeClamper(clampedYEnd);\n        _a = __read$2([Number(scale.convert(yStart)), scale.convert(yEnd) + bandwidth], 2), yStart = _a[0], yEnd = _a[1];\n        var validRange = !isNaN(clampedYStart) &&\n            !isNaN(clampedYEnd) &&\n            (yStart === clampedYStart || yEnd === clampedYEnd || clampedYStart !== clampedYEnd) &&\n            Math.abs(clampedYEnd - clampedYStart) > 0;\n        if (validRange) {\n            var reverse = clampedYStart !== Math.min(clampedYStart, clampedYEnd);\n            if (reverse) {\n                _b = __read$2([\n                    Math.min(clampedYStart, clampedYEnd),\n                    Math.max(clampedYStart, clampedYEnd),\n                ], 2), clampedYStart = _b[0], clampedYEnd = _b[1];\n                _c = __read$2([yEnd, yStart], 2), yStart = _c[0], yEnd = _c[1];\n            }\n        }\n        this.isRange = validRange;\n        this.startLine = !isNaN(yStart) && strokeWidth > 0 && yStart === clampedYStart;\n        this.endLine = !isNaN(yEnd) && strokeWidth > 0 && yEnd === clampedYEnd;\n        if (!validRange && !this.startLine && !this.endLine) {\n            return false;\n        }\n        this.data = [clampedYStart, clampedYEnd];\n        if (this.label.enabled) {\n            var yDirection = direction === ChartAxisDirection.Y;\n            var _m = ((_e = labeldDirectionHandling[position]) !== null && _e !== void 0 ? _e : {}).c, c = _m === void 0 ? POSITION_TOP_COORDINATES : _m;\n            var _o = c({ yDirection: yDirection, xStart: xStart, xEnd: xEnd, yStart: clampedYStart, yEnd: clampedYEnd }), labelX = _o.x, labelY = _o.y;\n            this.labelPoint = {\n                x: labelX,\n                y: labelY,\n            };\n        }\n        return true;\n    };\n    CrossLine.prototype.updateRangeNode = function () {\n        var _a;\n        var _b = this, crossLineRange = _b.crossLineRange, sideFlag = _b.sideFlag, gridLength = _b.gridLength, data = _b.data, startLine = _b.startLine, endLine = _b.endLine, isRange = _b.isRange, fill = _b.fill, fillOpacity = _b.fillOpacity, stroke = _b.stroke, strokeWidth = _b.strokeWidth, lineDash = _b.lineDash;\n        crossLineRange.x1 = 0;\n        crossLineRange.x2 = sideFlag * gridLength;\n        crossLineRange.y1 = data[0];\n        crossLineRange.y2 = data[1];\n        crossLineRange.startLine = startLine;\n        crossLineRange.endLine = endLine;\n        crossLineRange.isRange = isRange;\n        crossLineRange.fill = fill;\n        crossLineRange.fillOpacity = fillOpacity !== null && fillOpacity !== void 0 ? fillOpacity : 1;\n        crossLineRange.stroke = stroke;\n        crossLineRange.strokeWidth = strokeWidth !== null && strokeWidth !== void 0 ? strokeWidth : 1;\n        crossLineRange.strokeOpacity = (_a = this.strokeOpacity) !== null && _a !== void 0 ? _a : 1;\n        crossLineRange.lineDash = lineDash;\n    };\n    CrossLine.prototype.updateLabel = function () {\n        var _a = this, crossLineLabel = _a.crossLineLabel, label = _a.label;\n        if (!label.text) {\n            return;\n        }\n        crossLineLabel.fontStyle = label.fontStyle;\n        crossLineLabel.fontWeight = label.fontWeight;\n        crossLineLabel.fontSize = label.fontSize;\n        crossLineLabel.fontFamily = label.fontFamily;\n        crossLineLabel.fill = label.color;\n        crossLineLabel.text = label.text;\n    };\n    CrossLine.prototype.positionLabel = function () {\n        var _a = this, crossLineLabel = _a.crossLineLabel, _b = _a.labelPoint, _c = _b === void 0 ? {} : _b, _d = _c.x, x = _d === void 0 ? undefined : _d, _e = _c.y, y = _e === void 0 ? undefined : _e, _f = _a.label, parallel = _f.parallel, rotation = _f.rotation, _g = _f.position, position = _g === void 0 ? 'top' : _g, _h = _f.padding, padding = _h === void 0 ? 0 : _h, direction = _a.direction, parallelFlipRotation = _a.parallelFlipRotation, regularFlipRotation = _a.regularFlipRotation;\n        if (x === undefined || y === undefined) {\n            return;\n        }\n        var _j = calculateLabelRotation({\n            rotation: rotation,\n            parallel: parallel,\n            regularFlipRotation: regularFlipRotation,\n            parallelFlipRotation: parallelFlipRotation,\n        }), defaultRotation = _j.defaultRotation, configuredRotation = _j.configuredRotation;\n        crossLineLabel.rotation = defaultRotation + configuredRotation;\n        crossLineLabel.textBaseline = 'middle';\n        crossLineLabel.textAlign = 'center';\n        var bbox = this.computeLabelBBox();\n        if (!bbox) {\n            return;\n        }\n        var yDirection = direction === ChartAxisDirection.Y;\n        var _k = calculateLabelTranslation({ yDirection: yDirection, padding: padding, position: position, bbox: bbox }), xTranslation = _k.xTranslation, yTranslation = _k.yTranslation;\n        crossLineLabel.translationX = x + xTranslation;\n        crossLineLabel.translationY = y + yTranslation;\n    };\n    CrossLine.prototype.getZIndex = function (isRange) {\n        if (isRange === void 0) { isRange = false; }\n        if (isRange) {\n            return CrossLine.RANGE_LAYER_ZINDEX;\n        }\n        return CrossLine.LINE_LAYER_ZINDEX;\n    };\n    CrossLine.prototype.getRange = function () {\n        var _a = this, value = _a.value, range = _a.range, scale = _a.scale;\n        var isContinuous = scale instanceof ContinuousScale;\n        var _b = __read$2(range !== null && range !== void 0 ? range : [value, undefined], 2), start = _b[0], end = _b[1];\n        if (!isContinuous && end === undefined) {\n            end = start;\n        }\n        start = checkDatum(start, isContinuous) != null ? start : undefined;\n        end = checkDatum(end, isContinuous) != null ? end : undefined;\n        if (isContinuous && start === end) {\n            end = undefined;\n        }\n        if (start === undefined && end !== undefined) {\n            start = end;\n            end = undefined;\n        }\n        return [start, end];\n    };\n    CrossLine.prototype.computeLabelBBox = function () {\n        return this.crossLineLabel.computeTransformedBBox();\n    };\n    CrossLine.prototype.calculatePadding = function (padding) {\n        var _a, _b, _c, _d, _e, _f, _g, _h;\n        var _j = this, isRange = _j.isRange, startLine = _j.startLine, endLine = _j.endLine, direction = _j.direction, _k = _j.label, _l = _k.padding, labelPadding = _l === void 0 ? 0 : _l, _m = _k.position, position = _m === void 0 ? 'top' : _m;\n        if (!isRange && !startLine && !endLine) {\n            return;\n        }\n        var crossLineLabelBBox = this.computeLabelBBox();\n        var labelX = crossLineLabelBBox === null || crossLineLabelBBox === void 0 ? void 0 : crossLineLabelBBox.x;\n        var labelY = crossLineLabelBBox === null || crossLineLabelBBox === void 0 ? void 0 : crossLineLabelBBox.y;\n        if (!crossLineLabelBBox || labelX == undefined || labelY == undefined) {\n            return;\n        }\n        var chartPadding = calculateLabelChartPadding({\n            yDirection: direction === ChartAxisDirection.Y,\n            padding: labelPadding,\n            position: position,\n            bbox: crossLineLabelBBox,\n        });\n        padding.left = Math.max((_a = padding.left) !== null && _a !== void 0 ? _a : 0, (_b = chartPadding.left) !== null && _b !== void 0 ? _b : 0);\n        padding.right = Math.max((_c = padding.right) !== null && _c !== void 0 ? _c : 0, (_d = chartPadding.right) !== null && _d !== void 0 ? _d : 0);\n        padding.top = Math.max((_e = padding.top) !== null && _e !== void 0 ? _e : 0, (_f = chartPadding.top) !== null && _f !== void 0 ? _f : 0);\n        padding.bottom = Math.max((_g = padding.bottom) !== null && _g !== void 0 ? _g : 0, (_h = chartPadding.bottom) !== null && _h !== void 0 ? _h : 0);\n    };\n    CrossLine.LINE_LAYER_ZINDEX = Layers.SERIES_CROSSLINE_LINE_ZINDEX;\n    CrossLine.RANGE_LAYER_ZINDEX = Layers.SERIES_CROSSLINE_RANGE_ZINDEX;\n    CrossLine.className = 'CrossLine';\n    __decorate$1j([\n        Validate(OPT_BOOLEAN)\n    ], CrossLine.prototype, \"enabled\", void 0);\n    __decorate$1j([\n        Validate(OPT_CROSSLINE_TYPE)\n    ], CrossLine.prototype, \"type\", void 0);\n    __decorate$1j([\n        Validate(OPT_ARRAY(2))\n    ], CrossLine.prototype, \"range\", void 0);\n    __decorate$1j([\n        Validate(OPT_COLOR_STRING)\n    ], CrossLine.prototype, \"fill\", void 0);\n    __decorate$1j([\n        Validate(OPT_NUMBER(0, 1))\n    ], CrossLine.prototype, \"fillOpacity\", void 0);\n    __decorate$1j([\n        Validate(OPT_COLOR_STRING)\n    ], CrossLine.prototype, \"stroke\", void 0);\n    __decorate$1j([\n        Validate(OPT_NUMBER())\n    ], CrossLine.prototype, \"strokeWidth\", void 0);\n    __decorate$1j([\n        Validate(OPT_NUMBER(0, 1))\n    ], CrossLine.prototype, \"strokeOpacity\", void 0);\n    __decorate$1j([\n        Validate(OPT_LINE_DASH)\n    ], CrossLine.prototype, \"lineDash\", void 0);\n    return CrossLine;\n}());\n\nvar __assign$2 = (undefined && undefined.__assign) || function () {\n    __assign$2 = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$2.apply(this, arguments);\n};\nvar JSON_APPLY_PLUGINS = {\n    constructors: {},\n};\nvar JSON_APPLY_OPTIONS = {\n    constructors: {\n        title: Caption,\n        subtitle: Caption,\n        footnote: Caption,\n        shadow: DropShadow,\n        innerCircle: DoughnutInnerCircle,\n        'axes[].crossLines[]': CrossLine,\n        'axes[].title': AxisTitle,\n        'series[].innerLabels[]': DoughnutInnerLabel,\n    },\n    allowedTypes: {\n        'legend.pagination.marker.shape': ['primitive', 'function'],\n        'series[].marker.shape': ['primitive', 'function'],\n        'axis[].tick.count': ['primitive', 'class-instance'],\n    },\n};\nfunction getJsonApplyOptions() {\n    return {\n        constructors: __assign$2(__assign$2({}, JSON_APPLY_OPTIONS.constructors), JSON_APPLY_PLUGINS.constructors),\n        allowedTypes: __assign$2({}, JSON_APPLY_OPTIONS.allowedTypes),\n    };\n}\n\nvar __values$2 = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar BaseModuleInstance = /** @class */ (function () {\n    function BaseModuleInstance() {\n        this.destroyFns = [];\n    }\n    BaseModuleInstance.prototype.destroy = function () {\n        var e_1, _a;\n        try {\n            for (var _b = __values$2(this.destroyFns), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var destroyFn = _c.value;\n                destroyFn();\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n    };\n    return BaseModuleInstance;\n}());\nvar REGISTERED_MODULES = [];\nfunction registerModule(module) {\n    var otherModule = REGISTERED_MODULES.find(function (other) {\n        return (module.type === other.type &&\n            module.optionsKey === other.optionsKey &&\n            module.identifier === other.identifier);\n    });\n    if (otherModule) {\n        if (module.packageType === 'enterprise' && otherModule.packageType === 'community') {\n            // Replace the community module with an enterprise version\n            var index = REGISTERED_MODULES.indexOf(otherModule);\n            REGISTERED_MODULES.splice(index, 1, module);\n        }\n    }\n    else {\n        // Simply register the module\n        REGISTERED_MODULES.push(module);\n    }\n}\n\nvar __extends$5 = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1i = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar RangeHandle$1 = /** @class */ (function (_super) {\n    __extends$5(RangeHandle, _super);\n    function RangeHandle() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this._fill = '#f2f2f2';\n        _this._stroke = '#999999';\n        _this._strokeWidth = 1;\n        _this._lineCap = 'square';\n        _this._centerX = 0;\n        _this._centerY = 0;\n        // Use an even number for better looking results.\n        _this._width = 8;\n        // Use an even number for better looking results.\n        _this._gripLineGap = 2;\n        // Use an even number for better looking results.\n        _this._gripLineLength = 8;\n        _this._height = 16;\n        return _this;\n    }\n    Object.defineProperty(RangeHandle.prototype, \"centerX\", {\n        get: function () {\n            return this._centerX;\n        },\n        set: function (value) {\n            if (this._centerX !== value) {\n                this._centerX = value;\n                this.dirtyPath = true;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(RangeHandle.prototype, \"centerY\", {\n        get: function () {\n            return this._centerY;\n        },\n        set: function (value) {\n            if (this._centerY !== value) {\n                this._centerY = value;\n                this.dirtyPath = true;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(RangeHandle.prototype, \"width\", {\n        get: function () {\n            return this._width;\n        },\n        set: function (value) {\n            if (this._width !== value) {\n                this._width = value;\n                this.dirtyPath = true;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(RangeHandle.prototype, \"gripLineGap\", {\n        get: function () {\n            return this._gripLineGap;\n        },\n        set: function (value) {\n            if (this._gripLineGap !== value) {\n                this._gripLineGap = value;\n                this.dirtyPath = true;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(RangeHandle.prototype, \"gripLineLength\", {\n        get: function () {\n            return this._gripLineLength;\n        },\n        set: function (value) {\n            if (this._gripLineLength !== value) {\n                this._gripLineLength = value;\n                this.dirtyPath = true;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(RangeHandle.prototype, \"height\", {\n        get: function () {\n            return this._height;\n        },\n        set: function (value) {\n            if (this._height !== value) {\n                this._height = value;\n                this.dirtyPath = true;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    RangeHandle.prototype.computeBBox = function () {\n        var _a = this, centerX = _a.centerX, centerY = _a.centerY, width = _a.width, height = _a.height;\n        var x = centerX - width / 2;\n        var y = centerY - height / 2;\n        return new BBox(x, y, width, height);\n    };\n    RangeHandle.prototype.isPointInPath = function (x, y) {\n        var point = this.transformPoint(x, y);\n        var bbox = this.computeBBox();\n        return bbox.containsPoint(point.x, point.y);\n    };\n    RangeHandle.prototype.updatePath = function () {\n        var _a = this, path = _a.path, centerX = _a.centerX, centerY = _a.centerY, width = _a.width, height = _a.height;\n        path.clear();\n        var x = centerX - width / 2;\n        var y = centerY - height / 2;\n        var ax = this.align(x);\n        var ay = this.align(y);\n        var axw = ax + this.align(x, width);\n        var ayh = ay + this.align(y, height);\n        // Handle.\n        path.moveTo(ax, ay);\n        path.lineTo(axw, ay);\n        path.lineTo(axw, ayh);\n        path.lineTo(ax, ayh);\n        path.lineTo(ax, ay);\n        // Grip lines.\n        var dx = this.gripLineGap / 2;\n        var dy = this.gripLineLength / 2;\n        path.moveTo(this.align(centerX - dx), this.align(centerY - dy));\n        path.lineTo(this.align(centerX - dx), this.align(centerY + dy));\n        path.moveTo(this.align(centerX + dx), this.align(centerY - dy));\n        path.lineTo(this.align(centerX + dx), this.align(centerY + dy));\n    };\n    RangeHandle.className = 'RangeHandle';\n    __decorate$1i([\n        Validate(COLOR_STRING)\n    ], RangeHandle.prototype, \"_fill\", void 0);\n    __decorate$1i([\n        Validate(COLOR_STRING)\n    ], RangeHandle.prototype, \"_stroke\", void 0);\n    __decorate$1i([\n        Validate(NUMBER(0))\n    ], RangeHandle.prototype, \"_strokeWidth\", void 0);\n    __decorate$1i([\n        Validate(LINE_CAP)\n    ], RangeHandle.prototype, \"_lineCap\", void 0);\n    __decorate$1i([\n        Validate(NUMBER(0))\n    ], RangeHandle.prototype, \"_width\", void 0);\n    __decorate$1i([\n        Validate(NUMBER(0))\n    ], RangeHandle.prototype, \"_gripLineGap\", void 0);\n    __decorate$1i([\n        Validate(NUMBER(0))\n    ], RangeHandle.prototype, \"_gripLineLength\", void 0);\n    __decorate$1i([\n        Validate(NUMBER(0))\n    ], RangeHandle.prototype, \"_height\", void 0);\n    return RangeHandle;\n}(Path));\n\nvar __extends$4 = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1h = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar RangeMask = /** @class */ (function (_super) {\n    __extends$4(RangeMask, _super);\n    function RangeMask() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this._stroke = '#999999';\n        _this._strokeWidth = 1;\n        _this._fill = '#999999';\n        _this._fillOpacity = 0.2;\n        _this._lineCap = 'square';\n        _this._x = 0;\n        _this._y = 0;\n        _this._width = 200;\n        _this._height = 30;\n        _this.minRange = 0.05;\n        _this._min = 0;\n        _this._max = 1;\n        return _this;\n    }\n    Object.defineProperty(RangeMask.prototype, \"x\", {\n        get: function () {\n            return this._x;\n        },\n        set: function (value) {\n            if (this._x !== value) {\n                this._x = value;\n                this.dirtyPath = true;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(RangeMask.prototype, \"y\", {\n        get: function () {\n            return this._y;\n        },\n        set: function (value) {\n            if (this._y !== value) {\n                this._y = value;\n                this.dirtyPath = true;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(RangeMask.prototype, \"width\", {\n        get: function () {\n            return this._width;\n        },\n        set: function (value) {\n            if (this._width !== value) {\n                this._width = value;\n                this.dirtyPath = true;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(RangeMask.prototype, \"height\", {\n        get: function () {\n            return this._height;\n        },\n        set: function (value) {\n            if (this._height !== value) {\n                this._height = value;\n                this.dirtyPath = true;\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(RangeMask.prototype, \"min\", {\n        get: function () {\n            return this._min;\n        },\n        set: function (value) {\n            var _a;\n            value = Math.min(Math.max(value, 0), this.max - this.minRange);\n            if (isNaN(value)) {\n                return;\n            }\n            if (this._min !== value) {\n                this._min = value;\n                this.dirtyPath = true;\n                (_a = this.onRangeChange) === null || _a === void 0 ? void 0 : _a.call(this);\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(RangeMask.prototype, \"max\", {\n        get: function () {\n            return this._max;\n        },\n        set: function (value) {\n            var _a;\n            value = Math.max(Math.min(value, 1), this.min + this.minRange);\n            if (isNaN(value)) {\n                return;\n            }\n            if (this._max !== value) {\n                this._max = value;\n                this.dirtyPath = true;\n                (_a = this.onRangeChange) === null || _a === void 0 ? void 0 : _a.call(this);\n            }\n        },\n        enumerable: false,\n        configurable: true\n    });\n    RangeMask.prototype.computeBBox = function () {\n        var _a = this, x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n        return new BBox(x, y, width, height);\n    };\n    RangeMask.prototype.computeVisibleRangeBBox = function () {\n        var _a = this, x = _a.x, y = _a.y, width = _a.width, height = _a.height, min = _a.min, max = _a.max;\n        var minX = x + width * min;\n        var maxX = x + width * max;\n        return new BBox(minX, y, maxX - minX, height);\n    };\n    RangeMask.prototype.updatePath = function () {\n        var _a = this, path = _a.path, x = _a.x, y = _a.y, width = _a.width, height = _a.height, min = _a.min, max = _a.max;\n        path.clear();\n        var ax = this.align(x);\n        var ay = this.align(y);\n        var axw = ax + this.align(x, width);\n        var ayh = ay + this.align(y, height);\n        // Whole range.\n        path.moveTo(ax, ay);\n        path.lineTo(axw, ay);\n        path.lineTo(axw, ayh);\n        path.lineTo(ax, ayh);\n        path.lineTo(ax, ay);\n        var minX = this.align(x + width * min);\n        var maxX = this.align(x + width * max);\n        // Visible range.\n        path.moveTo(minX, ay);\n        path.lineTo(minX, ayh);\n        path.lineTo(maxX, ayh);\n        path.lineTo(maxX, ay);\n        path.lineTo(minX, ay);\n    };\n    RangeMask.className = 'RangeMask';\n    __decorate$1h([\n        Validate(COLOR_STRING)\n    ], RangeMask.prototype, \"_stroke\", void 0);\n    __decorate$1h([\n        Validate(NUMBER(0))\n    ], RangeMask.prototype, \"_strokeWidth\", void 0);\n    __decorate$1h([\n        Validate(COLOR_STRING)\n    ], RangeMask.prototype, \"_fill\", void 0);\n    __decorate$1h([\n        Validate(NUMBER(0, 1))\n    ], RangeMask.prototype, \"_fillOpacity\", void 0);\n    __decorate$1h([\n        Validate(LINE_CAP)\n    ], RangeMask.prototype, \"_lineCap\", void 0);\n    __decorate$1h([\n        Validate(NUMBER(0))\n    ], RangeMask.prototype, \"_width\", void 0);\n    __decorate$1h([\n        Validate(NUMBER(0))\n    ], RangeMask.prototype, \"_height\", void 0);\n    __decorate$1h([\n        Validate(NUMBER())\n    ], RangeMask.prototype, \"_min\", void 0);\n    __decorate$1h([\n        Validate(NUMBER())\n    ], RangeMask.prototype, \"_max\", void 0);\n    return RangeMask;\n}(Path));\n\nvar __extends$3 = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign$1 = (undefined && undefined.__assign) || function () {\n    __assign$1 = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign$1.apply(this, arguments);\n};\nvar RangeSelector = /** @class */ (function (_super) {\n    __extends$3(RangeSelector, _super);\n    function RangeSelector() {\n        var _this = _super.call(this, { name: 'rangeSelectorGroup' }) || this;\n        _this.minHandle = new RangeHandle$1();\n        _this.maxHandle = new RangeHandle$1();\n        _this.mask = (function () {\n            var _a = RangeSelector.defaults, x = _a.x, y = _a.y, width = _a.width, height = _a.height, min = _a.min, max = _a.max;\n            var mask = new RangeMask();\n            mask.x = x;\n            mask.y = y;\n            mask.width = width;\n            mask.height = height;\n            mask.min = min;\n            mask.max = max;\n            var _b = _this, minHandle = _b.minHandle, maxHandle = _b.maxHandle;\n            minHandle.centerX = x;\n            maxHandle.centerX = x + width;\n            minHandle.centerY = maxHandle.centerY = y + height / 2;\n            _this.append([mask, minHandle, maxHandle]);\n            mask.onRangeChange = function () {\n                var _a;\n                _this.updateHandles();\n                (_a = _this.onRangeChange) === null || _a === void 0 ? void 0 : _a.call(_this);\n            };\n            return mask;\n        })();\n        _this._x = RangeSelector.defaults.x;\n        _this._y = RangeSelector.defaults.y;\n        _this._width = RangeSelector.defaults.width;\n        _this._height = RangeSelector.defaults.height;\n        _this._min = RangeSelector.defaults.min;\n        _this._max = RangeSelector.defaults.max;\n        _this.isContainerNode = true;\n        return _this;\n    }\n    Object.defineProperty(RangeSelector.prototype, \"x\", {\n        get: function () {\n            return this.mask.x;\n        },\n        set: function (value) {\n            this.mask.x = value;\n            this.updateHandles();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(RangeSelector.prototype, \"y\", {\n        get: function () {\n            return this.mask.y;\n        },\n        set: function (value) {\n            this.mask.y = value;\n            this.updateHandles();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(RangeSelector.prototype, \"width\", {\n        get: function () {\n            return this.mask.width;\n        },\n        set: function (value) {\n            this.mask.width = value;\n            this.updateHandles();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(RangeSelector.prototype, \"height\", {\n        get: function () {\n            return this.mask.height;\n        },\n        set: function (value) {\n            this.mask.height = value;\n            this.updateHandles();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(RangeSelector.prototype, \"min\", {\n        get: function () {\n            return this.mask.min;\n        },\n        set: function (value) {\n            this.mask.min = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(RangeSelector.prototype, \"max\", {\n        get: function () {\n            return this.mask.max;\n        },\n        set: function (value) {\n            this.mask.max = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    RangeSelector.prototype.updateHandles = function () {\n        var _a = this, minHandle = _a.minHandle, maxHandle = _a.maxHandle, x = _a.x, y = _a.y, width = _a.width, height = _a.height, mask = _a.mask;\n        minHandle.centerX = x + width * mask.min;\n        maxHandle.centerX = x + width * mask.max;\n        minHandle.centerY = maxHandle.centerY = y + height / 2;\n    };\n    RangeSelector.prototype.computeBBox = function () {\n        return this.mask.computeBBox();\n    };\n    RangeSelector.prototype.computeVisibleRangeBBox = function () {\n        return this.mask.computeVisibleRangeBBox();\n    };\n    RangeSelector.prototype.render = function (renderCtx) {\n        var ctx = renderCtx.ctx, forceRender = renderCtx.forceRender, stats = renderCtx.stats;\n        if (this.dirty === RedrawType.NONE && !forceRender) {\n            if (stats)\n                stats.nodesSkipped++;\n            return;\n        }\n        this.computeTransformMatrix();\n        this.matrix.toContext(ctx);\n        var _a = this, mask = _a.mask, minHandle = _a.minHandle, maxHandle = _a.maxHandle;\n        [mask, minHandle, maxHandle].forEach(function (child) {\n            if (child.visible && (forceRender || child.dirty > RedrawType.NONE)) {\n                ctx.save();\n                child.render(__assign$1(__assign$1({}, renderCtx), { ctx: ctx, forceRender: forceRender }));\n                ctx.restore();\n            }\n        });\n        this.markClean({ force: true });\n        if (stats)\n            stats.nodesRendered++;\n    };\n    RangeSelector.className = 'Range';\n    RangeSelector.defaults = {\n        x: 0,\n        y: 0,\n        width: 200,\n        height: 30,\n        min: 0,\n        max: 1,\n    };\n    return RangeSelector;\n}(Group));\n\nvar NavigatorMask = /** @class */ (function () {\n    function NavigatorMask(rangeMask) {\n        this.rm = rangeMask;\n    }\n    Object.defineProperty(NavigatorMask.prototype, \"fill\", {\n        get: function () {\n            return this.rm.fill;\n        },\n        set: function (value) {\n            this.rm.fill = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NavigatorMask.prototype, \"stroke\", {\n        get: function () {\n            return this.rm.stroke;\n        },\n        set: function (value) {\n            this.rm.stroke = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NavigatorMask.prototype, \"strokeWidth\", {\n        get: function () {\n            return this.rm.strokeWidth;\n        },\n        set: function (value) {\n            this.rm.strokeWidth = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NavigatorMask.prototype, \"fillOpacity\", {\n        get: function () {\n            return this.rm.fillOpacity;\n        },\n        set: function (value) {\n            this.rm.fillOpacity = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return NavigatorMask;\n}());\n\nvar NavigatorHandle = /** @class */ (function () {\n    function NavigatorHandle(rangeHandle) {\n        this.rh = rangeHandle;\n    }\n    Object.defineProperty(NavigatorHandle.prototype, \"fill\", {\n        get: function () {\n            return this.rh.fill;\n        },\n        set: function (value) {\n            this.rh.fill = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NavigatorHandle.prototype, \"stroke\", {\n        get: function () {\n            return this.rh.stroke;\n        },\n        set: function (value) {\n            this.rh.stroke = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NavigatorHandle.prototype, \"strokeWidth\", {\n        get: function () {\n            return this.rh.strokeWidth;\n        },\n        set: function (value) {\n            this.rh.strokeWidth = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NavigatorHandle.prototype, \"width\", {\n        get: function () {\n            return this.rh.width;\n        },\n        set: function (value) {\n            this.rh.width = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NavigatorHandle.prototype, \"height\", {\n        get: function () {\n            return this.rh.height;\n        },\n        set: function (value) {\n            this.rh.height = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NavigatorHandle.prototype, \"gripLineGap\", {\n        get: function () {\n            return this.rh.gripLineGap;\n        },\n        set: function (value) {\n            this.rh.gripLineGap = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NavigatorHandle.prototype, \"gripLineLength\", {\n        get: function () {\n            return this.rh.gripLineLength;\n        },\n        set: function (value) {\n            this.rh.gripLineLength = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return NavigatorHandle;\n}());\n\nvar __extends$2 = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1g = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar Navigator = /** @class */ (function (_super) {\n    __extends$2(Navigator, _super);\n    function Navigator(ctx) {\n        var _this = _super.call(this) || this;\n        _this.ctx = ctx;\n        _this.rs = new RangeSelector();\n        // Wrappers to allow option application to the scene graph nodes.\n        _this.mask = new NavigatorMask(_this.rs.mask);\n        _this.minHandle = new NavigatorHandle(_this.rs.minHandle);\n        _this.maxHandle = new NavigatorHandle(_this.rs.maxHandle);\n        _this.minHandleDragging = false;\n        _this.maxHandleDragging = false;\n        _this.panHandleOffset = NaN;\n        _this._enabled = false;\n        _this.margin = 10;\n        _this._visible = true;\n        _this.rs.onRangeChange = function () {\n            return _this.ctx.zoomManager.updateZoom('navigator', { x: { min: _this.rs.min, max: _this.rs.max } });\n        };\n        [\n            ctx.interactionManager.addListener('drag-start', function (event) { return _this.onDragStart(event); }),\n            ctx.interactionManager.addListener('drag', function (event) { return _this.onDrag(event); }),\n            ctx.interactionManager.addListener('hover', function (event) { return _this.onDrag(event); }),\n            ctx.interactionManager.addListener('drag-end', function () { return _this.onDragStop(); }),\n        ].forEach(function (s) { return _this.destroyFns.push(function () { return ctx.interactionManager.removeListener(s); }); });\n        [\n            ctx.layoutService.addListener('before-series', function (event) { return _this.layout(event); }),\n            ctx.layoutService.addListener('layout-complete', function (event) { return _this.layoutComplete(event); }),\n        ].forEach(function (s) { return _this.destroyFns.push(function () { return ctx.layoutService.removeListener(s); }); });\n        ctx.scene.root.appendChild(_this.rs);\n        _this.destroyFns.push(function () { var _a; return (_a = ctx.scene.root) === null || _a === void 0 ? void 0 : _a.removeChild(_this.rs); });\n        _this.destroyFns.push(function () { return _this.ctx.zoomManager.updateZoom('navigator'); });\n        _this.updateGroupVisibility();\n        return _this;\n    }\n    Object.defineProperty(Navigator.prototype, \"enabled\", {\n        get: function () {\n            return this._enabled;\n        },\n        set: function (value) {\n            this._enabled = value;\n            this.updateGroupVisibility();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Navigator.prototype, \"width\", {\n        get: function () {\n            return this.rs.width;\n        },\n        set: function (value) {\n            this.rs.width = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Navigator.prototype, \"height\", {\n        get: function () {\n            return this.rs.height;\n        },\n        set: function (value) {\n            this.rs.height = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Navigator.prototype, \"min\", {\n        get: function () {\n            return this.rs.min;\n        },\n        set: function (value) {\n            this.rs.min = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Navigator.prototype, \"max\", {\n        get: function () {\n            return this.rs.max;\n        },\n        set: function (value) {\n            this.rs.max = value;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Navigator.prototype, \"visible\", {\n        get: function () {\n            return this._visible;\n        },\n        set: function (value) {\n            this._visible = value;\n            this.updateGroupVisibility();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Navigator.prototype.updateGroupVisibility = function () {\n        var visible = this.enabled && this.visible;\n        this.rs.visible = visible;\n        if (visible) {\n            this.ctx.zoomManager.updateZoom('navigator', { x: { min: this.rs.min, max: this.rs.max } });\n        }\n        else {\n            this.ctx.zoomManager.updateZoom('navigator');\n        }\n    };\n    Navigator.prototype.layout = function (_a) {\n        var shrinkRect = _a.shrinkRect;\n        if (this.enabled) {\n            var navigatorTotalHeight = this.rs.height + this.margin;\n            shrinkRect.shrink(navigatorTotalHeight, 'bottom');\n            this.rs.y = shrinkRect.y + shrinkRect.height + this.margin;\n        }\n        return { shrinkRect: shrinkRect };\n    };\n    Navigator.prototype.layoutComplete = function (_a) {\n        var _b = _a.series, rect = _b.rect, visible = _b.visible;\n        if (this.enabled && visible) {\n            this.rs.x = rect.x;\n            this.rs.width = rect.width;\n        }\n        this.visible = visible;\n    };\n    Navigator.prototype.onDragStart = function (offset) {\n        if (!this.enabled) {\n            return;\n        }\n        var offsetX = offset.offsetX, offsetY = offset.offsetY;\n        var rs = this.rs;\n        var minHandle = rs.minHandle, maxHandle = rs.maxHandle, x = rs.x, width = rs.width, min = rs.min;\n        var visibleRange = rs.computeVisibleRangeBBox();\n        if (!(this.minHandleDragging || this.maxHandleDragging)) {\n            if (minHandle.containsPoint(offsetX, offsetY)) {\n                this.minHandleDragging = true;\n            }\n            else if (maxHandle.containsPoint(offsetX, offsetY)) {\n                this.maxHandleDragging = true;\n            }\n            else if (visibleRange.containsPoint(offsetX, offsetY)) {\n                this.panHandleOffset = (offsetX - x) / width - min;\n            }\n        }\n    };\n    Navigator.prototype.onDrag = function (offset) {\n        if (!this.enabled) {\n            return;\n        }\n        var _a = this, rs = _a.rs, panHandleOffset = _a.panHandleOffset;\n        var x = rs.x, y = rs.y, width = rs.width, height = rs.height, minHandle = rs.minHandle, maxHandle = rs.maxHandle;\n        var offsetX = offset.offsetX, offsetY = offset.offsetY;\n        var minX = x + width * rs.min;\n        var maxX = x + width * rs.max;\n        var visibleRange = new BBox(minX, y, maxX - minX, height);\n        var getRatio = function () { return Math.min(Math.max((offsetX - x) / width, 0), 1); };\n        if (minHandle.containsPoint(offsetX, offsetY) || maxHandle.containsPoint(offsetX, offsetY)) {\n            this.ctx.cursorManager.updateCursor('navigator', 'ew-resize');\n        }\n        else if (visibleRange.containsPoint(offsetX, offsetY)) {\n            this.ctx.cursorManager.updateCursor('navigator', 'grab');\n        }\n        else {\n            this.ctx.cursorManager.updateCursor('navigator');\n        }\n        if (this.minHandleDragging) {\n            rs.min = getRatio();\n        }\n        else if (this.maxHandleDragging) {\n            rs.max = getRatio();\n        }\n        else if (!isNaN(panHandleOffset)) {\n            var span = rs.max - rs.min;\n            var min = Math.min(getRatio() - panHandleOffset, 1 - span);\n            if (min <= rs.min) {\n                // pan left\n                rs.min = min;\n                rs.max = rs.min + span;\n            }\n            else {\n                // pan right\n                rs.max = min + span;\n                rs.min = rs.max - span;\n            }\n        }\n    };\n    Navigator.prototype.onDragStop = function () {\n        this.stopHandleDragging();\n    };\n    Navigator.prototype.stopHandleDragging = function () {\n        this.minHandleDragging = this.maxHandleDragging = false;\n        this.panHandleOffset = NaN;\n    };\n    __decorate$1g([\n        Validate(BOOLEAN)\n    ], Navigator.prototype, \"_enabled\", void 0);\n    __decorate$1g([\n        Validate(NUMBER(0))\n    ], Navigator.prototype, \"margin\", void 0);\n    return Navigator;\n}(BaseModuleInstance));\n\nvar CHART_NAVIGATOR_MODULE = {\n    type: 'root',\n    optionsKey: 'navigator',\n    packageType: 'community',\n    chartTypes: ['cartesian'],\n    instanceConstructor: Navigator,\n    themeTemplate: {\n        navigator: {\n            enabled: false,\n            height: 30,\n            mask: {\n                fill: '#999999',\n                stroke: '#999999',\n                strokeWidth: 1,\n                fillOpacity: 0.2,\n            },\n            minHandle: {\n                fill: '#f2f2f2',\n                stroke: '#999999',\n                strokeWidth: 1,\n                width: 8,\n                height: 16,\n                gripLineGap: 2,\n                gripLineLength: 8,\n            },\n            maxHandle: {\n                fill: '#f2f2f2',\n                stroke: '#999999',\n                strokeWidth: 1,\n                width: 8,\n                height: 16,\n                gripLineGap: 2,\n                gripLineLength: 8,\n            },\n        },\n    },\n};\nregisterModule(CHART_NAVIGATOR_MODULE);\n\nvar __extends$1 = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1f = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar Background = /** @class */ (function (_super) {\n    __extends$1(Background, _super);\n    function Background(ctx) {\n        var _a;\n        var _this = _super.call(this) || this;\n        _this.onLayoutComplete = function (e) {\n            var _a = e.chart, width = _a.width, height = _a.height;\n            _this.rectNode.width = width;\n            _this.rectNode.height = height;\n        };\n        _this.node = new Group({ name: 'background' });\n        _this.node.zIndex = Layers.SERIES_BACKGROUND_ZINDEX;\n        _this.rectNode = new Rect();\n        _this.node.appendChild(_this.rectNode);\n        _this.fill = 'white';\n        _this.visible = true;\n        (_a = ctx.scene.root) === null || _a === void 0 ? void 0 : _a.appendChild(_this.node);\n        _this.destroyFns.push(function () { var _a; return (_a = ctx.scene.root) === null || _a === void 0 ? void 0 : _a.removeChild(_this.node); });\n        var layoutHandle = ctx.layoutService.addListener('layout-complete', _this.onLayoutComplete);\n        _this.destroyFns.push(function () { return ctx.layoutService.removeListener(layoutHandle); });\n        return _this;\n    }\n    __decorate$1f([\n        Validate(BOOLEAN),\n        ProxyPropertyOnWrite('node', 'visible')\n    ], Background.prototype, \"visible\", void 0);\n    __decorate$1f([\n        Validate(OPT_COLOR_STRING),\n        ProxyPropertyOnWrite('rectNode', 'fill')\n    ], Background.prototype, \"fill\", void 0);\n    return Background;\n}(BaseModuleInstance));\n\nvar CHART_BACKGROUND_MODULE = {\n    type: 'root',\n    optionsKey: 'background',\n    packageType: 'community',\n    chartTypes: ['cartesian', 'polar', 'hierarchy'],\n    instanceConstructor: Background,\n};\nregisterModule(CHART_BACKGROUND_MODULE);\n\nvar __values$1 = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nfunction setupModules() {\n    var e_1, _a, e_2, _b, e_3, _c;\n    try {\n        for (var REGISTERED_MODULES_1 = __values$1(REGISTERED_MODULES), REGISTERED_MODULES_1_1 = REGISTERED_MODULES_1.next(); !REGISTERED_MODULES_1_1.done; REGISTERED_MODULES_1_1 = REGISTERED_MODULES_1.next()) {\n            var m = REGISTERED_MODULES_1_1.value;\n            if (m.optionConstructors != null) {\n                Object.assign(JSON_APPLY_PLUGINS.constructors, m.optionConstructors);\n            }\n            if (m.type === 'root') {\n                if (m.themeTemplate) {\n                    try {\n                        for (var _d = (e_2 = void 0, __values$1(m.chartTypes)), _e = _d.next(); !_e.done; _e = _d.next()) {\n                            var chartType = _e.value;\n                            registerChartDefaults(chartType, m.themeTemplate);\n                        }\n                    }\n                    catch (e_2_1) { e_2 = { error: e_2_1 }; }\n                    finally {\n                        try {\n                            if (_e && !_e.done && (_b = _d.return)) _b.call(_d);\n                        }\n                        finally { if (e_2) throw e_2.error; }\n                    }\n                }\n            }\n            if (m.type === 'series') {\n                if (m.chartTypes.length > 1)\n                    throw new Error('AG Charts - Module definition error: ' + m.identifier);\n                registerSeries(m.identifier, m.chartTypes[0], m.instanceConstructor, m.seriesDefaults, m.themeTemplate);\n            }\n            if (m.type === 'axis') {\n                if (m.themeTemplate) {\n                    try {\n                        for (var _f = (e_3 = void 0, __values$1(m.axisTypes)), _g = _f.next(); !_g.done; _g = _f.next()) {\n                            var axisType = _g.value;\n                            registerAxisThemeTemplate(axisType, m.themeTemplate);\n                        }\n                    }\n                    catch (e_3_1) { e_3 = { error: e_3_1 }; }\n                    finally {\n                        try {\n                            if (_g && !_g.done && (_c = _f.return)) _c.call(_f);\n                        }\n                        finally { if (e_3) throw e_3.error; }\n                    }\n                }\n            }\n            if (m.type === 'legend') {\n                registerLegend(m.identifier, m.instanceConstructor);\n            }\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (REGISTERED_MODULES_1_1 && !REGISTERED_MODULES_1_1.done && (_a = REGISTERED_MODULES_1.return)) _a.call(REGISTERED_MODULES_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n}\n\nvar __assign = (undefined && undefined.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __read$1 = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from) {\n    for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n        to[j] = from[i];\n    return to;\n};\nvar __values = (undefined && undefined.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nfunction chartType(options) {\n    if (isAgCartesianChartOptions(options)) {\n        return 'cartesian';\n    }\n    else if (isAgPolarChartOptions(options)) {\n        return 'polar';\n    }\n    else if (isAgHierarchyChartOptions(options)) {\n        return 'hierarchy';\n    }\n    throw new Error(\"AG Chart - unknown type of chart for options with type: \" + options.type);\n}\n/**\n * Factory for creating and updating instances of AgChartInstance.\n *\n * @docsInterface\n */\nvar AgChart = /** @class */ (function () {\n    function AgChart() {\n    }\n    /**\n     * Create a new `AgChartInstance` based upon the given configuration options.\n     */\n    AgChart.create = function (options) {\n        return AgChartInternal.createOrUpdate(options);\n    };\n    /**\n     * Update an existing `AgChartInstance`. Options provided should be complete and not\n     * partial.\n     * <br/>\n     * <br/>\n     * **NOTE**: As each call could trigger a chart redraw, multiple calls to update options in\n     * quick succession could result in undesirable flickering, so callers should batch up and/or\n     * debounce changes to avoid unintended partial update renderings.\n     */\n    AgChart.update = function (chart, options) {\n        if (!AgChartInstanceProxy.isInstance(chart)) {\n            throw new Error('AG Charts - invalid chart reference passed');\n        }\n        AgChartInternal.createOrUpdate(options, chart);\n    };\n    /**\n     * Update an existing `AgChartInstance` by applying a partial set of option changes.\n     * <br/>\n     * <br/>\n     * **NOTE**: As each call could trigger a chart redraw, each individual delta options update\n     * should leave the chart in a valid options state. Also, multiple calls to update options in\n     * quick succession could result in undesirable flickering, so callers should batch up and/or\n     * debounce changes to avoid unintended partial update renderings.\n     */\n    AgChart.updateDelta = function (chart, deltaOptions) {\n        if (!AgChartInstanceProxy.isInstance(chart)) {\n            throw new Error('AG Charts - invalid chart reference passed');\n        }\n        return AgChartInternal.updateUserDelta(chart, deltaOptions);\n    };\n    /**\n     * Starts a browser-based image download for the given `AgChartInstance`.\n     */\n    AgChart.download = function (chart, options) {\n        if (!(chart instanceof AgChartInstanceProxy)) {\n            throw new Error('AG Charts - invalid chart reference passed');\n        }\n        return AgChartInternal.download(chart, options);\n    };\n    /**\n     * Returns a base64-encoded image data URL for the given `AgChartInstance`.\n     */\n    AgChart.getImageDataURL = function (chart, options) {\n        if (!(chart instanceof AgChartInstanceProxy)) {\n            throw new Error('AG Charts - invalid chart reference passed');\n        }\n        return AgChartInternal.getImageDataURL(chart, options);\n    };\n    return AgChart;\n}());\n/**\n * Proxy class, to allow library users to keep a stable reference to their chart, even if we need\n * to switch concrete class (e.g. when switching between CartesianChart vs. PolarChart).\n */\nvar AgChartInstanceProxy = /** @class */ (function () {\n    function AgChartInstanceProxy(chart) {\n        this.chart = chart;\n    }\n    AgChartInstanceProxy.isInstance = function (x) {\n        var _a, _b;\n        if (x instanceof AgChartInstanceProxy) {\n            // Simple case.\n            return true;\n        }\n        if (((_a = x.constructor) === null || _a === void 0 ? void 0 : _a.name) === 'AgChartInstanceProxy' && x.chart != null) {\n            // instanceof can fail if mixing bundles (e.g. grid all-modules vs. standalone).\n            return true;\n        }\n        var signatureProps = Object.keys((_b = x.constructor) === null || _b === void 0 ? void 0 : _b.prototype);\n        var heuristicTypeCheck = Object.keys(AgChartInstanceProxy.prototype).every(function (prop) {\n            return signatureProps.includes(prop);\n        });\n        if (heuristicTypeCheck && x.chart != null) {\n            // minimised code case - the constructor name is mangled but prototype names are not :P\n            return true;\n        }\n        return false;\n    };\n    AgChartInstanceProxy.prototype.getOptions = function () {\n        return this.chart.getOptions();\n    };\n    AgChartInstanceProxy.prototype.destroy = function () {\n        this.chart.destroy();\n    };\n    return AgChartInstanceProxy;\n}());\nvar AgChartInternal = /** @class */ (function () {\n    function AgChartInternal() {\n    }\n    AgChartInternal.initialiseModules = function () {\n        if (AgChartInternal.initialised)\n            return;\n        setupModules();\n        AgChartInternal.initialised = true;\n    };\n    AgChartInternal.createOrUpdate = function (userOptions, proxy) {\n        var _this = this;\n        AgChartInternal.initialiseModules();\n        debug('>>> createOrUpdate() user options', userOptions);\n        var mixinOpts = {};\n        if (AgChartInternal.DEBUG() === true) {\n            mixinOpts['debug'] = true;\n        }\n        var overrideDevicePixelRatio = userOptions.overrideDevicePixelRatio;\n        delete userOptions['overrideDevicePixelRatio'];\n        var processedOptions = prepareOptions(userOptions, mixinOpts);\n        var chart = proxy === null || proxy === void 0 ? void 0 : proxy.chart;\n        if (chart == null || chartType(userOptions) !== chartType(chart.processedOptions)) {\n            chart = AgChartInternal.createChartInstance(processedOptions, overrideDevicePixelRatio, chart);\n        }\n        if (proxy == null) {\n            proxy = new AgChartInstanceProxy(chart);\n        }\n        else {\n            proxy.chart = chart;\n        }\n        var chartToUpdate = chart;\n        chartToUpdate.queuedUserOptions.push(userOptions);\n        var dequeue = function () {\n            // If there are a lot of update calls, `requestFactoryUpdate()` may skip callbacks,\n            // so we need to remove all queue items up to the last successfully applied item.\n            var queuedOptionsIdx = chartToUpdate.queuedUserOptions.indexOf(userOptions);\n            chartToUpdate.queuedUserOptions.splice(0, queuedOptionsIdx);\n        };\n        chartToUpdate.requestFactoryUpdate(function () { return __awaiter(_this, void 0, void 0, function () {\n            var deltaOptions;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        // Chart destroyed, skip processing.\n                        if (chartToUpdate.destroyed)\n                            return [2 /*return*/];\n                        deltaOptions = jsonDiff(chartToUpdate.processedOptions, processedOptions);\n                        if (deltaOptions == null) {\n                            dequeue();\n                            return [2 /*return*/];\n                        }\n                        return [4 /*yield*/, AgChartInternal.updateDelta(chartToUpdate, deltaOptions, userOptions)];\n                    case 1:\n                        _a.sent();\n                        dequeue();\n                        return [2 /*return*/];\n                }\n            });\n        }); });\n        return proxy;\n    };\n    AgChartInternal.updateUserDelta = function (proxy, deltaOptions) {\n        var _a;\n        var chart = proxy.chart, queuedUserOptions = proxy.chart.queuedUserOptions;\n        var lastUpdateOptions = (_a = queuedUserOptions[queuedUserOptions.length - 1]) !== null && _a !== void 0 ? _a : chart.userOptions;\n        var userOptions = jsonMerge([lastUpdateOptions, deltaOptions]);\n        debug('>>> updateUserDelta() user delta', deltaOptions);\n        debug('base options', lastUpdateOptions);\n        AgChartInternal.createOrUpdate(userOptions, proxy);\n    };\n    /**\n     * Returns the content of the current canvas as an image.\n     * @param opts The download options including `width` and `height` of the image as well as `fileName` and `fileFormat`.\n     */\n    AgChartInternal.download = function (proxy, opts) {\n        var _this = this;\n        var asyncDownload = function () { return __awaiter(_this, void 0, void 0, function () {\n            var maybeClone, chart;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, AgChartInternal.prepareResizedChart(proxy, opts)];\n                    case 1:\n                        maybeClone = _a.sent();\n                        chart = maybeClone.chart;\n                        chart.scene.download(opts === null || opts === void 0 ? void 0 : opts.fileName, opts === null || opts === void 0 ? void 0 : opts.fileFormat);\n                        if (maybeClone !== proxy) {\n                            maybeClone.destroy();\n                        }\n                        return [2 /*return*/];\n                }\n            });\n        }); };\n        asyncDownload().catch(function (e) { return Logger.errorOnce(e); });\n    };\n    AgChartInternal.getImageDataURL = function (proxy, opts) {\n        return __awaiter(this, void 0, void 0, function () {\n            var maybeClone, chart, result;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, AgChartInternal.prepareResizedChart(proxy, opts)];\n                    case 1:\n                        maybeClone = _a.sent();\n                        chart = maybeClone.chart;\n                        result = chart.scene.canvas.getDataURL(opts === null || opts === void 0 ? void 0 : opts.fileFormat);\n                        if (maybeClone !== proxy) {\n                            maybeClone.destroy();\n                        }\n                        return [2 /*return*/, result];\n                }\n            });\n        });\n    };\n    AgChartInternal.prepareResizedChart = function (proxy, opts) {\n        return __awaiter(this, void 0, void 0, function () {\n            var chart, _a, width, height, currentWidth, currentHeight, unchanged, options, clonedChart;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        chart = proxy.chart;\n                        _a = opts !== null && opts !== void 0 ? opts : {}, width = _a.width, height = _a.height;\n                        currentWidth = chart.width;\n                        currentHeight = chart.height;\n                        unchanged = (width === undefined && height === undefined) ||\n                            (chart.scene.canvas.pixelRatio === 1 && currentWidth === width && currentHeight === height);\n                        if (unchanged) {\n                            return [2 /*return*/, proxy];\n                        }\n                        width = width !== null && width !== void 0 ? width : currentWidth;\n                        height = height !== null && height !== void 0 ? height : currentHeight;\n                        options = __assign(__assign({}, chart.userOptions), { container: document.createElement('div'), width: width, height: height, autoSize: false, overrideDevicePixelRatio: 1 });\n                        clonedChart = AgChartInternal.createOrUpdate(options);\n                        return [4 /*yield*/, clonedChart.chart.waitForUpdate()];\n                    case 1:\n                        _b.sent();\n                        return [2 /*return*/, clonedChart];\n                }\n            });\n        });\n    };\n    AgChartInternal.createChartInstance = function (options, overrideDevicePixelRatio, oldChart) {\n        var transferableResource = oldChart === null || oldChart === void 0 ? void 0 : oldChart.destroy({ keepTransferableResources: true });\n        if (isAgCartesianChartOptions(options)) {\n            return new CartesianChart(document, overrideDevicePixelRatio, transferableResource);\n        }\n        else if (isAgHierarchyChartOptions(options)) {\n            return new HierarchyChart(document, overrideDevicePixelRatio, transferableResource);\n        }\n        else if (isAgPolarChartOptions(options)) {\n            return new PolarChart(document, overrideDevicePixelRatio, transferableResource);\n        }\n        throw new Error(\"AG Charts - couldn't apply configuration, check type of options: \" + options['type']);\n    };\n    AgChartInternal.updateDelta = function (chart, processedOptions, userOptions) {\n        var _a;\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        if (processedOptions.type == null) {\n                            processedOptions = __assign(__assign({}, processedOptions), { type: (_a = chart.processedOptions.type) !== null && _a !== void 0 ? _a : optionsType(processedOptions) });\n                        }\n                        return [4 /*yield*/, chart.awaitUpdateCompletion()];\n                    case 1:\n                        _b.sent();\n                        if (chart.destroyed)\n                            return [2 /*return*/];\n                        debug('applying delta', processedOptions);\n                        applyChartOptions(chart, processedOptions, userOptions);\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    AgChartInternal.DEBUG = function () { var _a; return (_a = windowValue('agChartsDebug')) !== null && _a !== void 0 ? _a : false; };\n    AgChartInternal.initialised = false;\n    return AgChartInternal;\n}());\nfunction debug(message) {\n    var optionalParams = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        optionalParams[_i - 1] = arguments[_i];\n    }\n    if ([true, 'opts'].includes(AgChartInternal.DEBUG())) {\n        Logger.debug.apply(Logger, __spreadArray([message], __read$1(optionalParams)));\n    }\n}\nfunction applyChartOptions(chart, processedOptions, userOptions) {\n    var _a, _b, _c, _d;\n    var completeOptions = jsonMerge([(_a = chart.processedOptions) !== null && _a !== void 0 ? _a : {}, processedOptions], noDataCloneMergeOptions);\n    var modulesChanged = applyModules(chart, completeOptions);\n    var skip = ['type', 'data', 'series', 'listeners', 'theme', 'legend'];\n    if (isAgCartesianChartOptions(processedOptions)) {\n        // Append axes to defaults.\n        skip.push('axes');\n    }\n    else if (isAgPolarChartOptions(processedOptions) || isAgHierarchyChartOptions(processedOptions)) ;\n    else {\n        throw new Error(\"AG Charts - couldn't apply configuration, check type of options and chart: \" + processedOptions['type']);\n    }\n    // Needs to be done before applying the series to detect if a seriesNode[Double]Click listener has been added\n    if (processedOptions.listeners) {\n        registerListeners(chart, processedOptions.listeners);\n    }\n    applyOptionValues(chart, processedOptions, { skip: skip });\n    var forceNodeDataRefresh = false;\n    if (processedOptions.series && processedOptions.series.length > 0) {\n        applySeries(chart, processedOptions);\n        forceNodeDataRefresh = true;\n    }\n    if (isAgCartesianChartOptions(processedOptions) && processedOptions.axes) {\n        var axesPresent = applyAxes(chart, processedOptions);\n        if (axesPresent) {\n            forceNodeDataRefresh = true;\n        }\n    }\n    applyLegend(chart, processedOptions);\n    var seriesOpts = processedOptions.series;\n    var seriesDataUpdate = !!processedOptions.data || (seriesOpts === null || seriesOpts === void 0 ? void 0 : seriesOpts.some(function (s) { return s.data != null; }));\n    var otherRefreshUpdate = (_c = (_b = processedOptions.legend) !== null && _b !== void 0 ? _b : processedOptions.title) !== null && _c !== void 0 ? _c : processedOptions.subtitle;\n    forceNodeDataRefresh = forceNodeDataRefresh || seriesDataUpdate || !!otherRefreshUpdate;\n    if (processedOptions.data) {\n        chart.data = processedOptions.data;\n    }\n    if (processedOptions.listeners) {\n        chart.updateAllSeriesListeners();\n    }\n    chart.processedOptions = completeOptions;\n    chart.userOptions = jsonMerge([(_d = chart.userOptions) !== null && _d !== void 0 ? _d : {}, userOptions], noDataCloneMergeOptions);\n    var majorChange = forceNodeDataRefresh || modulesChanged;\n    var updateType = majorChange ? ChartUpdateType.PROCESS_DATA : ChartUpdateType.PERFORM_LAYOUT;\n    debug('chart update type', { updateType: ChartUpdateType[updateType] });\n    chart.update(updateType, { forceNodeDataRefresh: forceNodeDataRefresh });\n}\nfunction applyModules(chart, options) {\n    var e_1, _a;\n    var matchingChartType = function (module) {\n        return ((chart instanceof CartesianChart && module.chartTypes.includes('cartesian')) ||\n            (chart instanceof PolarChart && module.chartTypes.includes('polar')) ||\n            (chart instanceof HierarchyChart && module.chartTypes.includes('hierarchy')));\n    };\n    var modulesChanged = false;\n    var rootModules = REGISTERED_MODULES.filter(function (m) { return m.type === 'root'; });\n    try {\n        for (var rootModules_1 = __values(rootModules), rootModules_1_1 = rootModules_1.next(); !rootModules_1_1.done; rootModules_1_1 = rootModules_1.next()) {\n            var next = rootModules_1_1.value;\n            var shouldBeEnabled = matchingChartType(next) && options[next.optionsKey] != null;\n            var isEnabled = chart.isModuleEnabled(next);\n            if (shouldBeEnabled === isEnabled)\n                continue;\n            modulesChanged = true;\n            if (shouldBeEnabled) {\n                chart.addModule(next);\n            }\n            else {\n                chart.removeModule(next);\n            }\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (rootModules_1_1 && !rootModules_1_1.done && (_a = rootModules_1.return)) _a.call(rootModules_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    return modulesChanged;\n}\nfunction applySeries(chart, options) {\n    var optSeries = options.series;\n    if (!optSeries) {\n        return;\n    }\n    var matchingTypes = chart.series.length === optSeries.length && chart.series.every(function (s, i) { var _a; return s.type === ((_a = optSeries[i]) === null || _a === void 0 ? void 0 : _a.type); });\n    // Try to optimise series updates if series count and types didn't change.\n    if (matchingTypes) {\n        chart.series.forEach(function (s, i) {\n            var _a, _b, _c, _d;\n            var previousOpts = (_c = (_b = (_a = chart.processedOptions) === null || _a === void 0 ? void 0 : _a.series) === null || _b === void 0 ? void 0 : _b[i]) !== null && _c !== void 0 ? _c : {};\n            var seriesDiff = jsonDiff(previousOpts, (_d = optSeries[i]) !== null && _d !== void 0 ? _d : {});\n            if (!seriesDiff) {\n                return;\n            }\n            debug(\"applying series diff idx \" + i, seriesDiff);\n            applySeriesValues(s, seriesDiff, { path: \"series[\" + i + \"]\", index: i });\n            s.markNodeDataDirty();\n        });\n        return;\n    }\n    chart.series = createSeries(chart, optSeries);\n}\nfunction applyAxes(chart, options) {\n    var optAxes = options.axes;\n    if (!optAxes) {\n        return false;\n    }\n    var matchingTypes = chart.axes.length === optAxes.length && chart.axes.every(function (a, i) { return a.type === optAxes[i].type; });\n    // Try to optimise series updates if series count and types didn't change.\n    if (matchingTypes) {\n        var oldOpts_1 = chart.processedOptions;\n        if (isAgCartesianChartOptions(oldOpts_1)) {\n            chart.axes.forEach(function (a, i) {\n                var _a, _b;\n                var previousOpts = (_b = (_a = oldOpts_1.axes) === null || _a === void 0 ? void 0 : _a[i]) !== null && _b !== void 0 ? _b : {};\n                var axisDiff = jsonDiff(previousOpts, optAxes[i]);\n                debug(\"applying axis diff idx \" + i, axisDiff);\n                var path = \"axes[\" + i + \"]\";\n                var skip = ['axes[].type'];\n                applyOptionValues(a, axisDiff, { path: path, skip: skip });\n            });\n            return true;\n        }\n    }\n    chart.axes = createAxis(chart, optAxes);\n    return true;\n}\nfunction applyLegend(chart, options) {\n    var skip = ['listeners'];\n    chart.setLegendInit(function (legend) {\n        var _a, _b, _c;\n        applyOptionValues(legend, (_a = options.legend) !== null && _a !== void 0 ? _a : {}, { skip: skip });\n        if ((_b = options.legend) === null || _b === void 0 ? void 0 : _b.listeners) {\n            Object.assign(chart.legend.listeners, (_c = options.legend.listeners) !== null && _c !== void 0 ? _c : {});\n        }\n    });\n}\nfunction createSeries(chart, options) {\n    var e_2, _a;\n    var series = [];\n    var moduleContext = chart.getModuleContext();\n    var index = 0;\n    try {\n        for (var _b = __values(options !== null && options !== void 0 ? options : []), _c = _b.next(); !_c.done; _c = _b.next()) {\n            var seriesOptions = _c.value;\n            var path = \"series[\" + index++ + \"]\";\n            var seriesInstance = getSeries(seriesOptions.type, moduleContext);\n            applySeriesValues(seriesInstance, seriesOptions, { path: path, index: index });\n            series.push(seriesInstance);\n        }\n    }\n    catch (e_2_1) { e_2 = { error: e_2_1 }; }\n    finally {\n        try {\n            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n        }\n        finally { if (e_2) throw e_2.error; }\n    }\n    return series;\n}\nfunction createAxis(chart, options) {\n    var e_3, _a;\n    var axes = [];\n    var skip = ['axes[].type'];\n    var moduleContext = chart.getModuleContext();\n    var index = 0;\n    try {\n        for (var _b = __values(options !== null && options !== void 0 ? options : []), _c = _b.next(); !_c.done; _c = _b.next()) {\n            var axisOptions = _c.value;\n            var axis = void 0;\n            switch (axisOptions.type) {\n                case 'number':\n                    axis = new NumberAxis(moduleContext);\n                    break;\n                case LogAxis.type:\n                    axis = new LogAxis(moduleContext);\n                    break;\n                case CategoryAxis.type:\n                    axis = new CategoryAxis(moduleContext);\n                    break;\n                case GroupedCategoryAxis.type:\n                    axis = new GroupedCategoryAxis(moduleContext);\n                    break;\n                case TimeAxis.type:\n                    axis = new TimeAxis(moduleContext);\n                    break;\n                default:\n                    throw new Error('AG Charts - unknown axis type: ' + axisOptions['type']);\n            }\n            var path = \"axes[\" + index++ + \"]\";\n            applyAxisModules(axis, axisOptions);\n            applyOptionValues(axis, axisOptions, { path: path, skip: skip });\n            axes.push(axis);\n        }\n    }\n    catch (e_3_1) { e_3 = { error: e_3_1 }; }\n    finally {\n        try {\n            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n        }\n        finally { if (e_3) throw e_3.error; }\n    }\n    return axes;\n}\nfunction applyAxisModules(axis, options) {\n    var e_4, _a;\n    var modulesChanged = false;\n    var rootModules = REGISTERED_MODULES.filter(function (m) { return m.type === 'axis'; });\n    try {\n        for (var rootModules_2 = __values(rootModules), rootModules_2_1 = rootModules_2.next(); !rootModules_2_1.done; rootModules_2_1 = rootModules_2.next()) {\n            var next = rootModules_2_1.value;\n            var shouldBeEnabled = options[next.optionsKey] != null;\n            var isEnabled = axis.isModuleEnabled(next);\n            if (shouldBeEnabled === isEnabled)\n                continue;\n            modulesChanged = true;\n            if (shouldBeEnabled) {\n                axis.addModule(next);\n            }\n            else {\n                axis.removeModule(next);\n            }\n        }\n    }\n    catch (e_4_1) { e_4 = { error: e_4_1 }; }\n    finally {\n        try {\n            if (rootModules_2_1 && !rootModules_2_1.done && (_a = rootModules_2.return)) _a.call(rootModules_2);\n        }\n        finally { if (e_4) throw e_4.error; }\n    }\n    return modulesChanged;\n}\nfunction registerListeners(source, listeners) {\n    source.clearEventListeners();\n    for (var property in listeners) {\n        var listener = listeners[property];\n        if (typeof listener !== 'function')\n            continue;\n        source.addEventListener(property, listener);\n    }\n}\nfunction applyOptionValues(target, options, _a) {\n    var _b = _a === void 0 ? {} : _a, skip = _b.skip, path = _b.path;\n    var applyOpts = __assign(__assign(__assign({}, getJsonApplyOptions()), { skip: skip }), (path ? { path: path } : {}));\n    return jsonApply(target, options, applyOpts);\n}\nfunction applySeriesValues(target, options, _a) {\n    var _b;\n    var _c = _a === void 0 ? {} : _a, path = _c.path, index = _c.index;\n    var skip = ['series[].listeners'];\n    var jsonApplyOptions = getJsonApplyOptions();\n    var ctrs = (_b = jsonApplyOptions.constructors) !== null && _b !== void 0 ? _b : {};\n    var seriesTypeOverrides = {\n        constructors: __assign(__assign({}, ctrs), { title: target.type === 'pie' ? PieTitle : ctrs['title'] }),\n    };\n    var applyOpts = __assign(__assign(__assign(__assign(__assign({}, jsonApplyOptions), seriesTypeOverrides), { skip: __spreadArray(['series[].type'], __read$1((skip !== null && skip !== void 0 ? skip : []))) }), (path ? { path: path } : {})), { idx: index !== null && index !== void 0 ? index : -1 });\n    var result = jsonApply(target, options, applyOpts);\n    var listeners = options === null || options === void 0 ? void 0 : options.listeners;\n    if (listeners != null) {\n        registerListeners(target, listeners);\n    }\n    return result;\n}\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nvar VERSION$b = '8.0.3';\n\nvar __extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate$1e = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/** @class */ ((function (_super) {\n    __extends(Image, _super);\n    function Image(sourceImage) {\n        var _this = _super.call(this) || this;\n        _this.x = 0;\n        _this.y = 0;\n        _this.width = 0;\n        _this.height = 0;\n        _this.opacity = 1;\n        _this.sourceImage = sourceImage;\n        return _this;\n    }\n    Image.prototype.render = function (renderCtx) {\n        var ctx = renderCtx.ctx, forceRender = renderCtx.forceRender, stats = renderCtx.stats;\n        if (this.dirty === RedrawType.NONE && !forceRender) {\n            if (stats)\n                stats.nodesSkipped++;\n            return;\n        }\n        this.computeTransformMatrix();\n        this.matrix.toContext(ctx);\n        var image = this.sourceImage;\n        ctx.globalAlpha = this.opacity;\n        ctx.drawImage(image, 0, 0, image.width, image.height, this.x, this.y, this.width, this.height);\n        _super.prototype.render.call(this, renderCtx);\n    };\n    __decorate$1e([\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], Image.prototype, \"x\", void 0);\n    __decorate$1e([\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], Image.prototype, \"y\", void 0);\n    __decorate$1e([\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], Image.prototype, \"width\", void 0);\n    __decorate$1e([\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], Image.prototype, \"height\", void 0);\n    __decorate$1e([\n        SceneChangeDetection({ redraw: RedrawType.MAJOR })\n    ], Image.prototype, \"opacity\", void 0);\n    return Image;\n})(Node));\n\nvar __read = (undefined && undefined.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar themes = Object.entries(themes$1).reduce(function (obj, _a) {\n    var _b = __read(_a, 2), name = _b[0], factory = _b[1];\n    obj[name] = factory();\n    return obj;\n}, {});\n\nvar _Scale = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    TimeScale: TimeScale$1,\n    BandScale: BandScale$5,\n    ContinuousScale: ContinuousScale,\n    ColorScale: ColorScale,\n    LinearScale: LinearScale$1\n});\n\nvar _Util = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    ticks: ticks,\n    extent: extent$4,\n    toFixed: toFixed,\n    isNumberEqual: isEqual$2,\n    tickFormat: tickFormat,\n    interpolateString: interpolate,\n    Color: Color,\n    isString: isString$2,\n    isStringObject: isStringObject$1,\n    isDate: isDate$1,\n    isDiscrete: isDiscrete,\n    isContinuous: isContinuous,\n    checkDatum: checkDatum,\n    isNumber: isNumber$4,\n    resetIds: resetIds,\n    createId: createId$1,\n    Padding: Padding$1,\n    jsonDiff: jsonDiff,\n    DELETE: DELETE,\n    jsonMerge: jsonMerge,\n    jsonApply: jsonApply,\n    jsonWalk: jsonWalk,\n    normalizeAngle360: normalizeAngle360,\n    normalizeAngle360Inclusive: normalizeAngle360Inclusive,\n    normalizeAngle180: normalizeAngle180,\n    toRadians: toRadians$1,\n    toDegrees: toDegrees,\n    sanitizeHtml: sanitizeHtml,\n    Logger: Logger\n});\n\nconst VALID_SERIES_TYPES = [\n    'area',\n    'bar',\n    'column',\n    'histogram',\n    'line',\n    'pie',\n    'scatter',\n];\nfunction getSeriesType(chartType) {\n    switch (chartType) {\n        case 'bar':\n        case 'groupedBar':\n        case 'stackedBar':\n        case 'normalizedBar':\n            return 'bar';\n        case 'column':\n        case 'groupedColumn':\n        case 'stackedColumn':\n        case 'normalizedColumn':\n            return 'column';\n        case 'line':\n            return 'line';\n        case 'area':\n        case 'stackedArea':\n        case 'normalizedArea':\n            return 'area';\n        case 'scatter':\n        case 'bubble':\n            return 'scatter';\n        case 'histogram':\n            return 'histogram';\n        case 'pie':\n        case 'doughnut':\n            return 'pie';\n        default:\n            return 'cartesian';\n    }\n}\n\nconst ALL_AXIS_TYPES = ['number', 'category', 'groupedCategory', 'log', 'time'];\nfunction getLegacyAxisType(chartType) {\n    switch (chartType) {\n        case 'bar':\n        case 'stackedBar':\n        case 'normalizedBar':\n            return ['number', 'category'];\n        case 'groupedBar':\n            return ['number', 'groupedCategory'];\n        case 'column':\n        case 'stackedColumn':\n        case 'normalizedColumn':\n        case 'line':\n        case 'area':\n        case 'stackedArea':\n        case 'normalizedArea':\n        case 'histogram':\n            return ['category', 'number'];\n        case 'groupedColumn':\n            return ['groupedCategory', 'number'];\n        case 'scatter':\n        case 'bubble':\n            return ['number', 'number'];\n        default:\n            return undefined;\n    }\n}\n\nfunction createAgChartTheme(chartProxyParams, proxy) {\n    var _a;\n    const { chartOptionsToRestore, chartPaletteToRestore, chartThemeToRestore } = chartProxyParams;\n    const themeName = getSelectedTheme(chartProxyParams);\n    const stockTheme = isStockTheme(themeName);\n    const rootTheme = stockTheme\n        ? { baseTheme: themeName }\n        : (_a = lookupCustomChartTheme(chartProxyParams, themeName)) !== null && _a !== void 0 ? _a : {};\n    const gridOptionsThemeOverrides = chartProxyParams.getGridOptionsChartThemeOverrides();\n    const apiThemeOverrides = chartProxyParams.apiChartThemeOverrides;\n    const standaloneChartType = getSeriesType(chartProxyParams.chartType);\n    const crossFilterThemeOverridePoint = standaloneChartType === 'pie' ? 'polar' : 'cartesian';\n    const crossFilteringOverrides = chartProxyParams.crossFiltering\n        ? createCrossFilterThemeOverrides(proxy, chartProxyParams, crossFilterThemeOverridePoint)\n        : undefined;\n    const formattingPanelOverrides = Object.assign({}, (chartOptionsToRestore !== null && chartOptionsToRestore !== void 0 ? chartOptionsToRestore : {}));\n    const isTitleEnabled = () => {\n        const isTitleEnabled = (obj) => {\n            if (!obj) {\n                return false;\n            }\n            return Object.keys(obj).some(key => _.get(obj[key], 'title.enabled', false));\n        };\n        return isTitleEnabled(gridOptionsThemeOverrides) || isTitleEnabled(apiThemeOverrides);\n    };\n    // Overrides in ascending precedence ordering.\n    const overrides = [\n        stockTheme ? inbuiltStockThemeOverrides(chartProxyParams, isTitleEnabled()) : undefined,\n        crossFilteringOverrides,\n        gridOptionsThemeOverrides,\n        apiThemeOverrides,\n        formattingPanelOverrides,\n    ];\n    // Recursively nest theme overrides so they are applied with correct precedence in\n    // Standalone Charts - this is an undocumented feature.\n    // Outermost theme overrides will be the formatting panel configured values, so they are\n    // differentiated from grid-config and inbuilt overrides.\n    const theme = overrides\n        .filter((v) => !!v)\n        .reduce((r, n) => ({\n        baseTheme: r,\n        overrides: n,\n    }), rootTheme);\n    // Avoid explicitly setting the `theme.palette` property unless we're using the restored theme\n    // AND the palette is actually different.\n    if (chartPaletteToRestore && themeName === chartThemeToRestore) {\n        const rootThemePalette = getChartTheme(rootTheme).palette;\n        if (!isIdenticalPalette(chartPaletteToRestore, rootThemePalette)) {\n            theme.palette = chartPaletteToRestore;\n        }\n    }\n    return theme;\n}\nfunction isIdenticalPalette(paletteA, paletteB) {\n    const arrayCompare = (arrA, arrB) => {\n        if (arrA.length !== arrB.length)\n            return false;\n        return arrA.every((v, i) => v === arrB[i]);\n    };\n    return arrayCompare(paletteA.fills, paletteB.fills) &&\n        arrayCompare(paletteA.strokes, paletteB.strokes);\n}\nfunction isStockTheme(themeName) {\n    return _.includes(Object.keys(themes), themeName);\n}\nfunction createCrossFilterThemeOverrides(proxy, chartProxyParams, overrideType) {\n    const legend = {\n        listeners: {\n            legendItemClick: (e) => {\n                const chart = proxy.getChart();\n                chart.series.forEach((s) => {\n                    s.toggleSeriesItem(e.itemId, e.enabled);\n                    s.toggleSeriesItem(`${e.itemId}-filtered-out`, e.enabled);\n                });\n            },\n        },\n    };\n    const series = {};\n    if (overrideType === 'polar') {\n        series.pie = {\n            tooltip: {\n                renderer: ({ angleName, datum, calloutLabelKey, radiusKey, angleValue, }) => {\n                    const title = angleName;\n                    const label = datum[calloutLabelKey];\n                    const ratio = datum[radiusKey];\n                    const totalValue = angleValue;\n                    return { title, content: `${label}: ${totalValue * ratio}` };\n                },\n            },\n        };\n    }\n    return {\n        [overrideType]: {\n            tooltip: {\n                delay: 500,\n            },\n            legend,\n            listeners: {\n                click: (e) => chartProxyParams.crossFilterCallback(e, true),\n            },\n            series,\n        },\n    };\n}\nconst STATIC_INBUILT_STOCK_THEME_AXES_OVERRIDES = ALL_AXIS_TYPES.reduce((r, n) => (Object.assign(Object.assign({}, r), { [n]: { title: { _enabledFromTheme: true } } })), {});\nfunction inbuiltStockThemeOverrides(params, titleEnabled) {\n    const extraPadding = params.getExtraPaddingDirections();\n    return {\n        common: {\n            axes: STATIC_INBUILT_STOCK_THEME_AXES_OVERRIDES,\n            padding: {\n                // don't add extra padding when a title is present!\n                top: !titleEnabled && extraPadding.includes('top') ? 40 : 20,\n                right: extraPadding.includes('right') ? 30 : 20,\n                bottom: extraPadding.includes('bottom') ? 40 : 20,\n                left: extraPadding.includes('left') ? 30 : 20,\n            },\n        },\n        pie: {\n            series: {\n                title: { _enabledFromTheme: true },\n                calloutLabel: { _enabledFromTheme: true },\n                sectorLabel: {\n                    enabled: false,\n                    _enabledFromTheme: true,\n                },\n            },\n        },\n    };\n}\nfunction getSelectedTheme(chartProxyParams) {\n    let chartThemeName = chartProxyParams.getChartThemeName();\n    const availableThemes = chartProxyParams.getChartThemes();\n    if (!_.includes(availableThemes, chartThemeName)) {\n        chartThemeName = availableThemes[0];\n    }\n    return chartThemeName;\n}\nfunction lookupCustomChartTheme(chartProxyParams, name) {\n    const { customChartThemes } = chartProxyParams;\n    const customChartTheme = customChartThemes && customChartThemes[name];\n    if (!customChartTheme) {\n        console.warn(`AG Grid: no stock theme exists with the name '${name}' and no ` +\n            \"custom chart theme with that name was supplied to 'customChartThemes'\");\n    }\n    return customChartTheme;\n}\n\nconst validateIfDefined = (validationFn) => {\n    return (value) => {\n        if (value === undefined)\n            return true;\n        return validationFn(value);\n    };\n};\nconst isString$1 = (value) => typeof value === 'string';\nconst isBoolean = (value) => typeof value === 'boolean';\nconst isValidSeriesChartType = (value) => typeof value === 'object';\nconst createWarnMessage = (property, expectedType) => (value) => `AG Grid - unable to update chart as invalid params supplied:  \\`${property}: ${value}\\`, expected ${expectedType}.`;\nclass UpdateParamsValidator {\n    static validateChartParams(params) {\n        let paramsToValidate = params;\n        switch (paramsToValidate.type) {\n            case 'rangeChartUpdate':\n                return UpdateParamsValidator.validateUpdateRangeChartParams(params);\n            case 'pivotChartUpdate':\n                return UpdateParamsValidator.validateUpdatePivotChartParams(params);\n            case 'crossFilterChartUpdate':\n                return UpdateParamsValidator.validateUpdateCrossFilterChartParams(params);\n            default:\n                console.warn(`AG Grid - Invalid value supplied for 'type': ${params.type}. It must be either 'rangeChartUpdate', 'pivotChartUpdate', or 'crossFilterChartUpdate'.`);\n                return false;\n        }\n    }\n    static validateUpdateRangeChartParams(params) {\n        const validations = [\n            ...UpdateParamsValidator.commonValidations,\n            ...UpdateParamsValidator.cellRangeValidations,\n            {\n                property: 'seriesChartTypes',\n                validationFn: (value) => value === undefined || (Array.isArray(value) && value.every(isValidSeriesChartType)),\n                warnMessage: createWarnMessage('seriesChartTypes', 'Array of SeriesChartType'),\n            },\n        ];\n        return UpdateParamsValidator.validateProperties(params, validations, ['type', 'chartId', 'chartType', 'chartThemeName', 'chartThemeOverrides', 'unlinkChart', 'cellRange', 'suppressChartRanges', 'aggFunc', 'seriesChartTypes'], 'UpdateRangeChartParams');\n    }\n    static validateUpdatePivotChartParams(params) {\n        const validations = [\n            ...UpdateParamsValidator.commonValidations,\n        ];\n        return UpdateParamsValidator.validateProperties(params, validations, ['type', 'chartId', 'chartType', 'chartThemeName', 'chartThemeOverrides', 'unlinkChart'], 'UpdatePivotChartParams');\n    }\n    static validateUpdateCrossFilterChartParams(params) {\n        const validations = [\n            ...UpdateParamsValidator.commonValidations,\n            ...UpdateParamsValidator.cellRangeValidations,\n        ];\n        return UpdateParamsValidator.validateProperties(params, validations, ['type', 'chartId', 'chartType', 'chartThemeName', 'chartThemeOverrides', 'unlinkChart', 'cellRange', 'suppressChartRanges', 'aggFunc'], 'UpdateCrossFilterChartParams');\n    }\n    static validateProperties(params, validations, validPropertyNames, paramsType) {\n        for (const validation of validations) {\n            const { property, validationFn, warnMessage } = validation;\n            if (property in params) {\n                const value = params[property];\n                if (!validationFn(value)) {\n                    console.warn(warnMessage(value));\n                    return false;\n                }\n            }\n        }\n        // Check for unexpected properties\n        for (const property in params) {\n            if (!validPropertyNames.includes(property)) {\n                console.warn(`AG Grid - Unexpected property supplied. ${paramsType} does not contain: \\`${property}\\`.`);\n                return false;\n            }\n        }\n        return true;\n    }\n}\nUpdateParamsValidator.validChartTypes = [\n    'column',\n    'groupedColumn',\n    'stackedColumn',\n    'normalizedColumn',\n    'bar',\n    'groupedBar',\n    'stackedBar',\n    'normalizedBar',\n    'line',\n    'scatter',\n    'bubble',\n    'pie',\n    'doughnut',\n    'area',\n    'stackedArea',\n    'normalizedArea',\n    'histogram',\n    'columnLineCombo',\n    'areaColumnCombo',\n    'customCombo'\n];\nUpdateParamsValidator.validateChartType = validateIfDefined((chartType) => {\n    return UpdateParamsValidator.validChartTypes.includes(chartType);\n});\nUpdateParamsValidator.validateAgChartThemeOverrides = validateIfDefined((themeOverrides) => {\n    // ensure supplied AgChartThemeOverrides is an object - can be improved if necessary?\n    return typeof themeOverrides === 'object';\n});\nUpdateParamsValidator.validateChartParamsCellRange = validateIfDefined((cellRange) => {\n    // ensure supplied ChartParamsCellRange is an object - can be improved if necessary?\n    return typeof cellRange === 'object';\n});\nUpdateParamsValidator.validateAggFunc = validateIfDefined((aggFunc) => {\n    // ensure supplied aggFunc is a `string` or `function` - can be improved if necessary?\n    return typeof aggFunc === 'string' || typeof aggFunc === 'function';\n});\nUpdateParamsValidator.commonValidations = [\n    { property: 'chartId', validationFn: isString$1, warnMessage: createWarnMessage('chartId', 'string') },\n    {\n        property: 'chartType',\n        validationFn: UpdateParamsValidator.validateChartType,\n        warnMessage: createWarnMessage('chartType', UpdateParamsValidator.validChartTypes.join(', '))\n    },\n    {\n        property: 'chartThemeName',\n        validationFn: isString$1,\n        warnMessage: createWarnMessage('chartThemeName', 'string')\n    },\n    {\n        property: 'chartThemeOverrides',\n        validationFn: UpdateParamsValidator.validateAgChartThemeOverrides,\n        warnMessage: createWarnMessage('chartThemeOverrides', 'AgChartThemeOverrides')\n    },\n    { property: 'unlinkChart', validationFn: isBoolean, warnMessage: createWarnMessage('unlinkChart', 'boolean') },\n];\nUpdateParamsValidator.cellRangeValidations = [\n    {\n        property: 'cellRange',\n        validationFn: UpdateParamsValidator.validateChartParamsCellRange,\n        warnMessage: createWarnMessage('cellRange', 'ChartParamsCellRange')\n    },\n    {\n        property: 'suppressChartRanges',\n        validationFn: isBoolean,\n        warnMessage: createWarnMessage('suppressChartRanges', 'boolean')\n    },\n    {\n        property: 'aggFunc',\n        validationFn: UpdateParamsValidator.validateAggFunc,\n        warnMessage: createWarnMessage('aggFunc', 'string or IAggFunc')\n    },\n];\n\nvar __decorate$1d = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst DEFAULT_THEMES = ['ag-default', 'ag-material', 'ag-pastel', 'ag-vivid', 'ag-solar'];\nclass ChartController extends BeanStub {\n    constructor(model) {\n        super();\n        this.model = model;\n    }\n    init() {\n        this.setChartRange();\n        this.addManagedListener(this.eventService, Events.EVENT_RANGE_SELECTION_CHANGED, event => {\n            if (event.id && event.id === this.model.chartId) {\n                this.updateForRangeChange();\n            }\n        });\n        if (this.model.unlinked) {\n            if (this.rangeService) {\n                this.rangeService.setCellRanges([]);\n            }\n        }\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_MOVED, this.updateForGridChange.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PINNED, this.updateForGridChange.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_VISIBLE, this.updateForGridChange.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, this.updateForGridChange.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_MODEL_UPDATED, this.updateForGridChange.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_CELL_VALUE_CHANGED, this.updateForDataChange.bind(this));\n    }\n    update(params) {\n        var _a, _b, _c, _d, _e, _f, _g;\n        if (!this.validUpdateType(params) || !UpdateParamsValidator.validateChartParams(params)) {\n            return false;\n        }\n        const { chartId, chartType, chartThemeName, unlinkChart } = params;\n        // create a common base for the chart model parameters (this covers pivot chart updates)\n        const common = {\n            chartId: chartId,\n            pivotChart: this.model.pivotChart,\n            chartType: chartType !== null && chartType !== void 0 ? chartType : this.model.chartType,\n            chartThemeName: chartThemeName !== null && chartThemeName !== void 0 ? chartThemeName : this.model.chartThemeName,\n            unlinkChart: unlinkChart !== null && unlinkChart !== void 0 ? unlinkChart : this.model.unlinked,\n            cellRange: this.model.suppliedCellRange,\n            aggFunc: this.model.aggFunc,\n            seriesChartTypes: undefined,\n            suppressChartRanges: false,\n            crossFiltering: false\n        };\n        let chartModelParams = Object.assign({}, common);\n        // modify the chart model properties based on the type of update\n        switch (params.type) {\n            case 'rangeChartUpdate':\n                chartModelParams.cellRange = (_a = this.createCellRange(params)) !== null && _a !== void 0 ? _a : this.model.suppliedCellRange;\n                chartModelParams.aggFunc = (_b = params.aggFunc) !== null && _b !== void 0 ? _b : this.model.aggFunc;\n                chartModelParams.seriesChartTypes = params.seriesChartTypes;\n                chartModelParams.suppressChartRanges = (_c = params.suppressChartRanges) !== null && _c !== void 0 ? _c : this.model.suppressChartRanges;\n                break;\n            case 'crossFilterChartUpdate':\n                chartModelParams.cellRange = (_d = this.createCellRange(params)) !== null && _d !== void 0 ? _d : this.model.suppliedCellRange;\n                chartModelParams.aggFunc = (_e = params.aggFunc) !== null && _e !== void 0 ? _e : this.model.aggFunc;\n                chartModelParams.crossFiltering = true;\n                chartModelParams.suppressChartRanges = (_f = params.suppressChartRanges) !== null && _f !== void 0 ? _f : this.model.suppressChartRanges;\n                break;\n        }\n        this.model.updateModel(chartModelParams);\n        // if the chart should be unlinked or chart ranges suppressed, remove all cell ranges; otherwise, set the chart range\n        const removeChartCellRanges = chartModelParams.unlinkChart || chartModelParams.suppressChartRanges;\n        removeChartCellRanges ? (_g = this.rangeService) === null || _g === void 0 ? void 0 : _g.setCellRanges([]) : this.setChartRange();\n        return true;\n    }\n    updateForGridChange() {\n        if (this.model.unlinked) {\n            return;\n        }\n        this.model.updateCellRanges();\n        this.model.updateData();\n        this.setChartRange();\n    }\n    updateForDataChange() {\n        if (this.model.unlinked) {\n            return;\n        }\n        this.model.updateData();\n        this.raiseChartModelUpdateEvent();\n    }\n    updateForRangeChange() {\n        this.updateForGridChange();\n        this.raiseChartRangeSelectionChangedEvent();\n    }\n    updateForPanelChange(updatedCol) {\n        this.model.updateCellRanges(updatedCol);\n        this.model.updateData();\n        this.setChartRange();\n        this.raiseChartRangeSelectionChangedEvent();\n    }\n    getChartUpdateParams(updatedOverrides) {\n        const selectedCols = this.getSelectedValueColState();\n        const fields = selectedCols.map(c => ({ colId: c.colId, displayName: c.displayName }));\n        const data = this.getChartData();\n        const selectedDimension = this.getSelectedDimension();\n        return {\n            data,\n            grouping: this.isGrouping(),\n            category: {\n                id: selectedDimension.colId,\n                name: selectedDimension.displayName,\n                chartDataType: this.model.getChartDataType(selectedDimension.colId)\n            },\n            fields,\n            chartId: this.getChartId(),\n            getCrossFilteringContext: () => ({ lastSelectedChartId: 'xxx' }),\n            seriesChartTypes: this.getSeriesChartTypes(),\n            updatedOverrides: updatedOverrides\n        };\n    }\n    getChartModel() {\n        const modelType = this.model.pivotChart ? 'pivot' : 'range';\n        const seriesChartTypes = this.isComboChart() ? this.model.comboChartModel.seriesChartTypes : undefined;\n        return {\n            modelType,\n            chartId: this.model.chartId,\n            chartType: this.model.chartType,\n            chartThemeName: this.getChartThemeName(),\n            chartOptions: this.chartProxy.getChartThemeOverrides(),\n            chartPalette: this.chartProxy.getChartPalette(),\n            cellRange: this.getCellRangeParams(),\n            suppressChartRanges: this.model.suppressChartRanges,\n            aggFunc: this.model.aggFunc,\n            unlinkChart: this.model.unlinked,\n            seriesChartTypes\n        };\n    }\n    getChartId() {\n        return this.model.chartId;\n    }\n    getChartData() {\n        return this.model.chartData;\n    }\n    getChartType() {\n        return this.model.chartType;\n    }\n    setChartType(chartType) {\n        this.model.chartType = chartType;\n        this.model.comboChartModel.updateSeriesChartTypes();\n        this.raiseChartModelUpdateEvent();\n        this.raiseChartOptionsChangedEvent();\n    }\n    setChartThemeName(chartThemeName) {\n        this.model.chartThemeName = chartThemeName;\n        this.raiseChartModelUpdateEvent();\n        this.raiseChartOptionsChangedEvent();\n    }\n    getChartThemeName() {\n        return this.model.chartThemeName;\n    }\n    isPivotChart() {\n        return this.model.pivotChart;\n    }\n    isPivotMode() {\n        return this.model.isPivotMode();\n    }\n    isGrouping() {\n        return this.model.isGrouping();\n    }\n    isCrossFilterChart() {\n        return this.model.crossFiltering;\n    }\n    getThemes() {\n        return this.gridOptionsService.get('chartThemes') || DEFAULT_THEMES;\n    }\n    getPalettes() {\n        const themeNames = this.getThemes();\n        return themeNames.map(themeName => {\n            const stockTheme = isStockTheme(themeName);\n            const theme = stockTheme ? themeName : this.chartProxy.lookupCustomChartTheme(themeName);\n            return getChartTheme(theme).palette;\n        });\n    }\n    getValueColState() {\n        return this.model.valueColState.map(this.displayNameMapper.bind(this));\n    }\n    getSelectedValueColState() {\n        return this.getValueColState().filter(cs => cs.selected);\n    }\n    getSelectedDimension() {\n        return this.model.getSelectedDimension();\n    }\n    displayNameMapper(col) {\n        const columnNames = this.model.columnNames[col.colId];\n        col.displayName = columnNames ? columnNames.join(' - ') : this.model.getColDisplayName(col.column);\n        return col;\n    }\n    getColStateForMenu() {\n        return { dimensionCols: this.model.dimensionColState, valueCols: this.getValueColState() };\n    }\n    setChartRange(silent = false) {\n        if (this.rangeService && !this.model.suppressChartRanges && !this.model.unlinked) {\n            this.rangeService.setCellRanges(this.getCellRanges());\n        }\n        if (!silent) {\n            this.raiseChartModelUpdateEvent();\n        }\n    }\n    detachChartRange() {\n        // when chart is detached it won't listen to changes from the grid\n        this.model.unlinked = !this.model.unlinked;\n        if (this.model.unlinked) {\n            // remove range from grid\n            if (this.rangeService) {\n                this.rangeService.setCellRanges([]);\n            }\n        }\n        else {\n            // update chart data may have changed\n            this.updateForGridChange();\n        }\n    }\n    setChartProxy(chartProxy) {\n        this.chartProxy = chartProxy;\n    }\n    getChartProxy() {\n        return this.chartProxy;\n    }\n    isActiveXYChart() {\n        return _.includes(['scatter', 'bubble'], this.getChartType());\n    }\n    isChartLinked() {\n        return !this.model.unlinked;\n    }\n    customComboExists() {\n        const savedCustomSeriesChartTypes = this.model.comboChartModel.savedCustomSeriesChartTypes;\n        return savedCustomSeriesChartTypes && savedCustomSeriesChartTypes.length > 0;\n    }\n    getSeriesChartTypes() {\n        return this.model.comboChartModel.seriesChartTypes;\n    }\n    isComboChart() {\n        return this.model.isComboChart();\n    }\n    updateSeriesChartType(colId, chartType, secondaryAxis) {\n        const seriesChartType = this.model.comboChartModel.seriesChartTypes.find(s => s.colId === colId);\n        if (seriesChartType) {\n            // once a combo chart has been modified it is now a 'customCombo' chart\n            const updateChartType = this.model.chartType !== 'customCombo';\n            if (updateChartType) {\n                this.model.chartType = 'customCombo';\n            }\n            const prevSeriesChartType = seriesChartType.chartType;\n            if (chartType != null) {\n                seriesChartType.chartType = chartType;\n            }\n            if (secondaryAxis != null) {\n                seriesChartType.secondaryAxis = secondaryAxis;\n            }\n            // replace existing custom series types with this latest version\n            this.model.comboChartModel.savedCustomSeriesChartTypes = this.model.comboChartModel.seriesChartTypes;\n            // series chart types can be modified, i.e. column chart types should be moved to primary axis\n            this.model.comboChartModel.updateSeriesChartTypes();\n            this.updateForDataChange();\n            if (updateChartType) {\n                // update the settings panel by raising an EVENT_CHART_TYPE_CHANGED event\n                this.dispatchEvent({\n                    type: ChartController.EVENT_CHART_TYPE_CHANGED\n                });\n            }\n            if (prevSeriesChartType !== chartType) {\n                // update the format panel by raising an EVENT_CHART_SERIES_CHART_TYPE_CHANGED event\n                this.dispatchEvent({\n                    type: ChartController.EVENT_CHART_SERIES_CHART_TYPE_CHANGED\n                });\n            }\n            this.raiseChartOptionsChangedEvent();\n        }\n    }\n    getActiveSeriesChartTypes() {\n        const selectedColIds = this.getSelectedValueColState().map(c => c.colId);\n        return this.getSeriesChartTypes().filter(s => selectedColIds.includes(s.colId));\n    }\n    getChartSeriesTypes() {\n        const supportedComboSeriesTypes = ['line', 'column', 'area'];\n        return this.isComboChart() ? supportedComboSeriesTypes : [getSeriesType(this.getChartType())];\n    }\n    getCellRanges() {\n        return [this.model.dimensionCellRange, this.model.valueCellRange].filter(r => r);\n    }\n    createCellRange(params) {\n        var _a;\n        return params.cellRange && ((_a = this.rangeService) === null || _a === void 0 ? void 0 : _a.createCellRangeFromCellRangeParams(params.cellRange));\n    }\n    validUpdateType(params) {\n        var _a;\n        if (!params.type) {\n            console.warn(`AG Grid - Unable to update chart as the 'type' is missing. It must be either 'rangeChartUpdate', 'pivotChartUpdate', or 'crossFilterChartUpdate'.`);\n            return false;\n        }\n        const chartTypeMap = {\n            'Range Chart': () => !this.isPivotChart() && !this.isCrossFilterChart(),\n            'Pivot Chart': () => this.isPivotChart(),\n            'Cross Filter Chart': () => this.isCrossFilterChart()\n        };\n        const currentChartType = (_a = Object.keys(chartTypeMap).find(type => chartTypeMap[type]())) !== null && _a !== void 0 ? _a : 'Range Chart';\n        const valid = params.type ===\n            `${currentChartType[0].toLowerCase()}${currentChartType.slice(1).replace(/ /g, '')}Update`;\n        if (!valid) {\n            console.warn(`AG Grid - Unable to update chart as a '${params.type}' update type is not permitted on a ${currentChartType}.`);\n        }\n        return valid;\n    }\n    getCellRangeParams() {\n        const cellRanges = this.getCellRanges();\n        const firstCellRange = cellRanges[0];\n        const startRow = (firstCellRange && firstCellRange.startRow) || null;\n        const endRow = (firstCellRange && firstCellRange.endRow) || null;\n        return {\n            rowStartIndex: startRow && startRow.rowIndex,\n            rowStartPinned: startRow && startRow.rowPinned,\n            rowEndIndex: endRow && endRow.rowIndex,\n            rowEndPinned: endRow && endRow.rowPinned,\n            columns: cellRanges.reduce((columns, value) => columns.concat(value.columns.map(c => c.getId())), [])\n        };\n    }\n    raiseChartModelUpdateEvent() {\n        const event = {\n            type: ChartController.EVENT_CHART_MODEL_UPDATE\n        };\n        this.dispatchEvent(event);\n    }\n    raiseChartUpdatedEvent() {\n        const event = {\n            type: ChartController.EVENT_CHART_UPDATED\n        };\n        this.dispatchEvent(event);\n    }\n    raiseChartApiUpdateEvent() {\n        const event = {\n            type: ChartController.EVENT_CHART_API_UPDATE\n        };\n        this.dispatchEvent(event);\n    }\n    raiseChartOptionsChangedEvent() {\n        const { chartId, chartType } = this.getChartModel();\n        const event = {\n            type: Events.EVENT_CHART_OPTIONS_CHANGED,\n            chartId,\n            chartType,\n            chartThemeName: this.getChartThemeName(),\n            chartOptions: this.chartProxy.getChartThemeOverrides()\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    raiseChartRangeSelectionChangedEvent() {\n        const event = {\n            type: Events.EVENT_CHART_RANGE_SELECTION_CHANGED,\n            id: this.model.chartId,\n            chartId: this.model.chartId,\n            cellRange: this.getCellRangeParams()\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    destroy() {\n        super.destroy();\n        if (this.rangeService) {\n            this.rangeService.setCellRanges([]);\n        }\n    }\n}\nChartController.EVENT_CHART_UPDATED = 'chartUpdated';\nChartController.EVENT_CHART_API_UPDATE = 'chartApiUpdate';\nChartController.EVENT_CHART_MODEL_UPDATE = 'chartModelUpdate';\nChartController.EVENT_CHART_TYPE_CHANGED = 'chartTypeChanged';\nChartController.EVENT_CHART_SERIES_CHART_TYPE_CHANGED = 'chartSeriesChartTypeChanged';\n__decorate$1d([\n    Autowired('rangeService')\n], ChartController.prototype, \"rangeService\", void 0);\n__decorate$1d([\n    PostConstruct\n], ChartController.prototype, \"init\", null);\n\nvar __decorate$1c = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst DefaultDataPanelDef = {\n    groups: [\n        { type: 'categories', isOpen: true },\n        { type: 'series', isOpen: true },\n        { type: 'seriesChartType', isOpen: true }\n    ]\n};\nclass ChartDataPanel extends Component {\n    constructor(chartController, chartOptionsService) {\n        super(ChartDataPanel.TEMPLATE);\n        this.chartController = chartController;\n        this.chartOptionsService = chartOptionsService;\n        this.columnComps = new Map();\n    }\n    init() {\n        this.updatePanels();\n        this.addManagedListener(this.chartController, ChartController.EVENT_CHART_MODEL_UPDATE, this.updatePanels.bind(this));\n        this.addManagedListener(this.chartController, ChartController.EVENT_CHART_API_UPDATE, this.updatePanels.bind(this));\n        this.createAutoScrollService();\n    }\n    destroy() {\n        this.clearComponents();\n        super.destroy();\n    }\n    updatePanels() {\n        var _a, _b;\n        const currentChartType = this.chartType;\n        const { dimensionCols, valueCols } = this.chartController.getColStateForMenu();\n        const colIds = dimensionCols.map(c => c.colId).concat(valueCols.map(c => c.colId));\n        this.chartType = this.chartController.getChartType();\n        const groupExpandedState = this.getGroupExpandedState();\n        if (_.areEqual(_.keys(this.columnComps), colIds) && this.chartType === currentChartType) {\n            // if possible, we just update existing components\n            [...dimensionCols, ...valueCols].forEach(col => {\n                this.columnComps.get(col.colId).setValue(col.selected, true);\n            });\n            if (this.chartController.isActiveXYChart()) {\n                const getSeriesLabel = this.generateGetSeriesLabel();\n                valueCols.forEach(col => {\n                    this.columnComps.get(col.colId).setLabel(getSeriesLabel(col));\n                });\n            }\n            // recreate series chart type group if it exists as series may be added or removed via series group panel\n            _.removeFromParent(this.getGui().querySelector('#seriesChartTypeGroup'));\n            this.seriesChartTypeGroupComp = this.destroyBean(this.seriesChartTypeGroupComp);\n            const seriesChartTypeIndex = (_a = this.getDataPanelDef().groups) === null || _a === void 0 ? void 0 : _a.reduce((prevVal, { type }, index) => {\n                if (type === 'seriesChartType') {\n                    return index;\n                }\n                return prevVal;\n            }, -1);\n            if (seriesChartTypeIndex !== -1) {\n                this.createSeriesChartTypeGroup(valueCols, seriesChartTypeIndex);\n            }\n        }\n        else {\n            // otherwise, we re-create everything\n            this.clearComponents();\n            (_b = this.getDataPanelDef().groups) === null || _b === void 0 ? void 0 : _b.forEach(({ type }) => {\n                if (type === 'categories') {\n                    this.createCategoriesGroup(dimensionCols);\n                }\n                else if (type === 'series') {\n                    this.createSeriesGroup(valueCols);\n                }\n                else if (type === 'seriesChartType') {\n                    this.createSeriesChartTypeGroup(valueCols);\n                }\n                else {\n                    console.warn(`AG Grid: invalid charts data panel group name supplied: '${type}'`);\n                }\n            });\n        }\n        this.restoreGroupExpandedState(groupExpandedState);\n    }\n    getGroupExpandedState() {\n        const groups = [\n            { groupType: 'categories', comp: this.categoriesGroupComp },\n            { groupType: 'series', comp: this.seriesGroupComp },\n            { groupType: 'seriesChartType', comp: this.seriesChartTypeGroupComp }\n        ];\n        return groups.map(({ groupType, comp }) => {\n            var _a, _b;\n            const defaultExpanded = Boolean((_b = (_a = this.getDataPanelDef().groups) === null || _a === void 0 ? void 0 : _a.find(({ type }) => type === groupType)) === null || _b === void 0 ? void 0 : _b.isOpen);\n            return !comp ? defaultExpanded : comp.isExpanded();\n        });\n    }\n    restoreGroupExpandedState(groupExpandedState) {\n        [\n            this.categoriesGroupComp,\n            this.seriesGroupComp,\n            this.seriesChartTypeGroupComp\n        ].forEach((group, idx) => {\n            if (!group) {\n                return;\n            }\n            group.toggleGroupExpand(groupExpandedState[idx]);\n        });\n    }\n    createAutoScrollService() {\n        const eGui = this.getGui();\n        this.autoScrollService = new AutoScrollService({\n            scrollContainer: eGui,\n            scrollAxis: 'y',\n            getVerticalPosition: () => eGui.scrollTop,\n            setVerticalPosition: (position) => eGui.scrollTop = position\n        });\n    }\n    createComponent(component, id) {\n        const eDiv = document.createElement('div');\n        eDiv.id = id;\n        eDiv.className = 'ag-chart-data-section';\n        eDiv.appendChild(component.getGui());\n        return eDiv;\n    }\n    addComponent(parent, component, id) {\n        const eDiv = this.createComponent(component, id);\n        parent.appendChild(eDiv);\n    }\n    addComponentAtIndex(parent, component, id, index) {\n        const eDiv = this.createComponent(component, id);\n        parent.insertBefore(eDiv, parent.children[index]);\n    }\n    addChangeListener(component, columnState) {\n        this.addManagedListener(component, AgAbstractField.EVENT_CHANGED, () => {\n            columnState.selected = component.getValue();\n            this.chartController.updateForPanelChange(columnState);\n        });\n    }\n    createCategoriesGroup(columns) {\n        this.categoriesGroupComp = this.createBean(new AgGroupComponent({\n            title: this.getCategoryGroupTitle(),\n            enabled: true,\n            suppressEnabledCheckbox: true,\n            suppressOpenCloseIcons: false,\n            cssIdentifier: 'charts-data'\n        }));\n        const inputName = `chartDimension${this.getCompId()}`;\n        columns.forEach(col => {\n            const comp = this.categoriesGroupComp.createManagedBean(new AgRadioButton());\n            comp.setLabel(_.escapeString(col.displayName));\n            comp.setValue(col.selected);\n            comp.setInputName(inputName);\n            this.addChangeListener(comp, col);\n            this.categoriesGroupComp.addItem(comp);\n            this.columnComps.set(col.colId, comp);\n        });\n        this.addComponent(this.getGui(), this.categoriesGroupComp, 'categoriesGroup');\n    }\n    createSeriesGroup(columns) {\n        this.seriesGroupComp = this.createManagedBean(new AgGroupComponent({\n            title: this.getSeriesGroupTitle(),\n            enabled: true,\n            suppressEnabledCheckbox: true,\n            suppressOpenCloseIcons: false,\n            cssIdentifier: 'charts-data'\n        }));\n        if (this.chartController.isActiveXYChart()) {\n            const pairedModeToggle = this.seriesGroupComp.createManagedBean(new AgToggleButton());\n            pairedModeToggle\n                .setLabel(this.chartTranslationService.translate('paired'))\n                .setLabelAlignment('left')\n                .setLabelWidth('flex')\n                .setInputWidth(45)\n                .setValue(this.chartOptionsService.getPairedMode())\n                .onValueChange(newValue => {\n                this.chartOptionsService.setPairedMode(!!newValue);\n                this.chartController.updateForGridChange();\n            });\n            this.seriesGroupComp.addItem(pairedModeToggle);\n        }\n        const getSeriesLabel = this.generateGetSeriesLabel();\n        columns.forEach(col => {\n            const comp = this.seriesGroupComp.createManagedBean(new AgCheckbox());\n            comp.addCssClass('ag-data-select-checkbox');\n            const label = getSeriesLabel(col);\n            comp.setLabel(label);\n            comp.setValue(col.selected);\n            this.addChangeListener(comp, col);\n            this.seriesGroupComp.addItem(comp);\n            this.columnComps.set(col.colId, comp);\n            this.addDragHandle(comp, col);\n        });\n        const eGui = this.getGui();\n        const seriesGroupGui = this.seriesGroupComp.getGui();\n        this.addComponent(eGui, this.seriesGroupComp, 'seriesGroup');\n        const dropTarget = {\n            getIconName: () => DragAndDropService.ICON_MOVE,\n            getContainer: () => seriesGroupGui,\n            onDragging: (params) => this.onDragging(params),\n            onDragLeave: () => this.onDragLeave(),\n            isInterestedIn: this.isInterestedIn.bind(this),\n            targetContainsSource: true\n        };\n        this.dragAndDropService.addDropTarget(dropTarget);\n        this.addDestroyFunc(() => this.dragAndDropService.removeDropTarget(dropTarget));\n    }\n    createSeriesChartTypeGroup(columns, index) {\n        if (!this.chartController.isComboChart()) {\n            return;\n        }\n        this.seriesChartTypeGroupComp = this.createManagedBean(new AgGroupComponent({\n            title: this.chartTranslationService.translate('seriesChartType'),\n            enabled: true,\n            suppressEnabledCheckbox: true,\n            suppressOpenCloseIcons: false,\n            cssIdentifier: 'charts-data'\n        }));\n        const seriesChartTypes = this.chartController.getSeriesChartTypes();\n        columns.forEach(col => {\n            if (!col.selected) {\n                return;\n            }\n            const seriesChartType = seriesChartTypes.filter(s => s.colId === col.colId)[0];\n            if (!seriesChartType) {\n                return;\n            }\n            const seriesItemGroup = this.seriesChartTypeGroupComp.createManagedBean(new AgGroupComponent({\n                title: col.displayName,\n                enabled: true,\n                suppressEnabledCheckbox: true,\n                suppressOpenCloseIcons: true,\n                cssIdentifier: 'charts-format-sub-level'\n            }));\n            const secondaryAxisComp = this.seriesChartTypeGroupComp\n                .createManagedBean(new AgCheckbox())\n                .setLabel(this.chartTranslationService.translate('secondaryAxis'))\n                .setLabelWidth(\"flex\")\n                .setDisabled(['groupedColumn', 'stackedColumn', 'stackedArea'].includes(seriesChartType.chartType))\n                .setValue(!!seriesChartType.secondaryAxis)\n                .onValueChange((enabled) => this.chartController.updateSeriesChartType(col.colId, undefined, enabled));\n            seriesItemGroup.addItem(secondaryAxisComp);\n            const translate = (key, defaultText) => {\n                return this.chartTranslationService.translate(key, defaultText);\n            };\n            const availableChartTypes = [\n                { value: 'line', text: translate('line', 'Line') },\n                { value: 'area', text: translate('area', 'Area') },\n                { value: 'stackedArea', text: translate('stackedArea', 'StackedArea') },\n                { value: 'groupedColumn', text: translate('groupedColumn', 'Grouped Column') },\n                { value: 'stackedColumn', text: translate('stackedColumn', 'Stacked Column') },\n            ];\n            const chartTypeComp = seriesItemGroup.createManagedBean(new AgSelect());\n            chartTypeComp\n                .setLabelAlignment('left')\n                .setLabelWidth(\"flex\")\n                .addOptions(availableChartTypes)\n                .setValue(seriesChartType.chartType)\n                .onValueChange((chartType) => this.chartController.updateSeriesChartType(col.colId, chartType));\n            seriesItemGroup.addItem(chartTypeComp);\n            this.seriesChartTypeGroupComp.addItem(seriesItemGroup);\n        });\n        if (index === undefined) {\n            this.addComponent(this.getGui(), this.seriesChartTypeGroupComp, 'seriesChartTypeGroup');\n        }\n        else {\n            this.addComponentAtIndex(this.getGui(), this.seriesChartTypeGroupComp, 'seriesChartTypeGroup', index);\n        }\n    }\n    addDragHandle(comp, col) {\n        const eDragHandle = _.createIconNoSpan('columnDrag', this.gridOptionsService);\n        eDragHandle.classList.add('ag-drag-handle', 'ag-chart-data-column-drag-handle');\n        comp.getGui().insertAdjacentElement('beforeend', eDragHandle);\n        const dragSource = {\n            type: DragSourceType.ChartPanel,\n            eElement: eDragHandle,\n            dragItemName: col.displayName,\n            getDragItem: () => ({ columns: [col.column] }),\n            onDragStopped: () => this.onDragStop()\n        };\n        this.dragAndDropService.addDragSource(dragSource, true);\n        this.addDestroyFunc(() => this.dragAndDropService.removeDragSource(dragSource));\n    }\n    generateGetSeriesLabel() {\n        if (!this.chartController.isActiveXYChart()) {\n            return col => _.escapeString(col.displayName);\n        }\n        const isBubble = this.chartType === 'bubble';\n        const isInPairedMode = this.isInPairedMode();\n        let selectedValuesCount = 0;\n        const indexToAxisLabel = new Map();\n        indexToAxisLabel.set(0, 'X');\n        indexToAxisLabel.set(1, 'Y');\n        indexToAxisLabel.set(2, 'size');\n        return (col) => {\n            const escapedLabel = _.escapeString(col.displayName);\n            if (!col.selected) {\n                return escapedLabel;\n            }\n            let axisLabel;\n            if (isInPairedMode) {\n                axisLabel = indexToAxisLabel.get(selectedValuesCount % (isBubble ? 3 : 2));\n            }\n            else {\n                if (selectedValuesCount === 0) {\n                    axisLabel = 'X';\n                }\n                else {\n                    axisLabel = isBubble && selectedValuesCount % 2 === 0 ? 'size' : 'Y';\n                }\n            }\n            selectedValuesCount++;\n            return `${escapedLabel} (${axisLabel})`;\n        };\n    }\n    getCategoryGroupTitle() {\n        return this.chartTranslationService.translate(this.chartController.isActiveXYChart() ? 'labels' : 'categories');\n    }\n    getSeriesGroupTitle() {\n        return this.chartTranslationService.translate(this.chartController.isActiveXYChart() ? 'xyValues' : 'series');\n    }\n    getDataPanelDef() {\n        var _a;\n        const userProvidedDataPanelDef = (_a = this.gridOptionsService.get('chartToolPanelsDef')) === null || _a === void 0 ? void 0 : _a.dataPanel;\n        return userProvidedDataPanelDef ? userProvidedDataPanelDef : DefaultDataPanelDef;\n    }\n    isInPairedMode() {\n        return this.chartController.isActiveXYChart() && this.chartOptionsService.getSeriesOption('paired', 'scatter');\n    }\n    clearComponents() {\n        _.clearElement(this.getGui());\n        this.categoriesGroupComp = this.destroyBean(this.categoriesGroupComp);\n        this.seriesGroupComp = this.destroyBean(this.seriesGroupComp);\n        this.seriesChartTypeGroupComp = this.destroyBean(this.seriesChartTypeGroupComp);\n        this.columnComps.clear();\n    }\n    onDragging(draggingEvent) {\n        const itemHovered = this.checkHoveredItem(draggingEvent);\n        if (!itemHovered) {\n            return;\n        }\n        this.lastDraggedColumn = draggingEvent.dragItem.columns[0];\n        const { comp, position } = itemHovered;\n        const { comp: lastHoveredComp, position: lastHoveredPosition } = this.lastHoveredItem || {};\n        if (comp === lastHoveredComp && position === lastHoveredPosition) {\n            return;\n        }\n        this.autoScrollService.check(draggingEvent.event);\n        this.clearHoveredItems();\n        this.lastHoveredItem = { comp, position };\n        const eGui = comp.getGui();\n        eGui.classList.add('ag-list-item-hovered', `ag-item-highlight-${position}`);\n    }\n    checkHoveredItem(draggingEvent) {\n        if (_.missing(draggingEvent.vDirection)) {\n            return null;\n        }\n        const mouseEvent = draggingEvent.event;\n        for (const comp of this.columnComps.values()) {\n            const eGui = comp.getGui();\n            if (!eGui.querySelector('.ag-chart-data-column-drag-handle')) {\n                continue;\n            }\n            const rect = eGui.getBoundingClientRect();\n            const isOverComp = mouseEvent.clientY >= rect.top && mouseEvent.clientY <= rect.bottom;\n            if (isOverComp) {\n                const height = eGui.clientHeight;\n                const position = mouseEvent.clientY > rect.top + (height / 2) ? 'bottom' : 'top';\n                return { comp, position };\n            }\n        }\n        return null;\n    }\n    onDragLeave() {\n        this.clearHoveredItems();\n    }\n    onDragStop() {\n        if (this.lastHoveredItem) {\n            const { dimensionCols, valueCols } = this.chartController.getColStateForMenu();\n            const draggedColumnState = [...dimensionCols, ...valueCols]\n                .find(state => state.column === this.lastDraggedColumn);\n            if (draggedColumnState) {\n                let targetIndex = Array.from(this.columnComps.values()).indexOf(this.lastHoveredItem.comp);\n                if (this.lastHoveredItem.position === 'bottom') {\n                    targetIndex++;\n                }\n                draggedColumnState.order = targetIndex;\n                this.chartController.updateForPanelChange(draggedColumnState);\n            }\n        }\n        this.clearHoveredItems();\n        this.lastDraggedColumn = undefined;\n        this.autoScrollService.ensureCleared();\n    }\n    clearHoveredItems() {\n        this.columnComps.forEach(columnComp => {\n            columnComp.getGui().classList.remove('ag-list-item-hovered', 'ag-item-highlight-top', 'ag-item-highlight-bottom');\n        });\n        this.lastHoveredItem = undefined;\n    }\n    isInterestedIn(type) {\n        return type === DragSourceType.ChartPanel;\n    }\n}\nChartDataPanel.TEMPLATE = `<div class=\"ag-chart-data-wrapper ag-scrollable-container\"></div>`;\n__decorate$1c([\n    Autowired('dragAndDropService')\n], ChartDataPanel.prototype, \"dragAndDropService\", void 0);\n__decorate$1c([\n    Autowired('chartTranslationService')\n], ChartDataPanel.prototype, \"chartTranslationService\", void 0);\n__decorate$1c([\n    PostConstruct\n], ChartDataPanel.prototype, \"init\", null);\n\nvar __decorate$1b = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass FontPanel extends Component {\n    constructor(params) {\n        super();\n        this.activeComps = [];\n        this.params = params;\n    }\n    init() {\n        const groupParams = {\n            cssIdentifier: 'charts-format-sub-level',\n            direction: 'vertical',\n            suppressOpenCloseIcons: true\n        };\n        this.setTemplate(FontPanel.TEMPLATE, { fontGroup: groupParams });\n        this.initGroup();\n        this.initFontFamilySelect();\n        this.initFontWeightStyleSelect();\n        this.initFontSizeSelect();\n        this.initFontColorPicker();\n    }\n    addCompToPanel(comp) {\n        this.fontGroup.addItem(comp);\n        this.activeComps.push(comp);\n    }\n    setEnabled(enabled) {\n        this.fontGroup.setEnabled(enabled);\n    }\n    initGroup() {\n        this.fontGroup\n            .setTitle(this.params.name || this.chartTranslationService.translate('font'))\n            .setEnabled(this.params.enabled)\n            .hideEnabledCheckbox(!!this.params.suppressEnabledCheckbox)\n            .hideOpenCloseIcons(true)\n            .onEnableChange(enabled => {\n            if (this.params.setEnabled) {\n                this.params.setEnabled(enabled);\n            }\n        });\n    }\n    initFontFamilySelect() {\n        const families = [\n            'Arial, sans-serif',\n            'Aria Black, sans-serif',\n            'Book Antiqua,  serif',\n            'Charcoal, sans-serif',\n            'Comic Sans MS, cursive',\n            'Courier, monospace',\n            'Courier New, monospace',\n            'Gadget, sans-serif',\n            'Geneva, sans-serif',\n            'Helvetica, sans-serif',\n            'Impact, sans-serif',\n            'Lucida Console, monospace',\n            'Lucida Grande, sans-serif',\n            'Lucida Sans Unicode,  sans-serif',\n            'Monaco, monospace',\n            'Palatino Linotype, serif',\n            'Palatino, serif',\n            'Times New Roman, serif',\n            'Times, serif',\n            'Verdana, sans-serif'\n        ];\n        const { family } = this.params.initialFont;\n        let initialValue = families[0];\n        if (family) {\n            // check for known values using lowercase\n            const lowerCaseValues = families.map(f => f.toLowerCase());\n            const valueIndex = lowerCaseValues.indexOf(family.toLowerCase());\n            if (valueIndex >= 0) {\n                initialValue = families[valueIndex];\n            }\n            else {\n                // add user provided value to list\n                const capitalisedFontValue = _.capitalise(family);\n                families.push(capitalisedFontValue);\n                initialValue = capitalisedFontValue;\n            }\n        }\n        const options = families.sort().map(value => ({ value, text: value }));\n        this.familySelect.addOptions(options)\n            .setInputWidth('flex')\n            .setValue(`${initialValue}`)\n            .onValueChange(newValue => this.params.setFont({ family: newValue }));\n    }\n    initFontSizeSelect() {\n        const sizes = [8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36];\n        const { size } = this.params.initialFont;\n        if (!_.includes(sizes, size)) {\n            sizes.push(size);\n        }\n        const options = sizes.sort((a, b) => a - b).map(value => ({ value: `${value}`, text: `${value}` }));\n        this.sizeSelect.addOptions(options)\n            .setInputWidth('flex')\n            .setValue(`${size}`)\n            .onValueChange(newValue => this.params.setFont({ size: parseInt(newValue, 10) }));\n        this.sizeSelect.setLabel(this.chartTranslationService.translate('size'));\n    }\n    initFontWeightStyleSelect() {\n        const { weight = 'normal', style = 'normal' } = this.params.initialFont;\n        const weightStyles = [\n            { name: 'normal', weight: 'normal', style: 'normal' },\n            { name: 'bold', weight: 'bold', style: 'normal' },\n            { name: 'italic', weight: 'normal', style: 'italic' },\n            { name: 'boldItalic', weight: 'bold', style: 'italic' }\n        ];\n        let selectedOption = weightStyles.find(x => x.weight === weight && x.style === style);\n        if (!selectedOption) {\n            selectedOption = { name: 'predefined', weight, style };\n            weightStyles.unshift(selectedOption);\n        }\n        const options = weightStyles.map(ws => ({\n            value: ws.name,\n            text: this.chartTranslationService.translate(ws.name),\n        }));\n        this.weightStyleSelect.addOptions(options)\n            .setInputWidth('flex')\n            .setValue(selectedOption.name)\n            .onValueChange(newValue => {\n            const selectedWeightStyle = weightStyles.find(x => x.name === newValue);\n            this.params.setFont({ weight: selectedWeightStyle.weight, style: selectedWeightStyle.style });\n        });\n    }\n    initFontColorPicker() {\n        this.colorPicker\n            .setLabel(this.chartTranslationService.translate('color'))\n            .setInputWidth(45)\n            .setValue(`${this.params.initialFont.color}`)\n            .onValueChange(newColor => this.params.setFont({ color: newColor }));\n    }\n    addItemToPanel(item) {\n        this.fontGroup.addItem(item);\n        this.activeComps.push(item);\n    }\n    destroyActiveComps() {\n        this.activeComps.forEach(comp => {\n            _.removeFromParent(comp.getGui());\n            this.destroyBean(comp);\n        });\n    }\n    destroy() {\n        this.destroyActiveComps();\n        super.destroy();\n    }\n}\nFontPanel.TEMPLATE = `<div class=\"ag-font-panel\">\n            <ag-group-component ref=\"fontGroup\">\n                <ag-select ref=\"familySelect\"></ag-select>\n                <ag-select ref=\"weightStyleSelect\"></ag-select>\n                <div class=\"ag-charts-font-size-color\">\n                    <ag-select ref=\"sizeSelect\"></ag-select>\n                    <ag-color-picker ref=\"colorPicker\"></ag-color-picker>\n                </div>\n            </ag-group-component>\n        </div>`;\n__decorate$1b([\n    RefSelector('fontGroup')\n], FontPanel.prototype, \"fontGroup\", void 0);\n__decorate$1b([\n    RefSelector('familySelect')\n], FontPanel.prototype, \"familySelect\", void 0);\n__decorate$1b([\n    RefSelector('weightStyleSelect')\n], FontPanel.prototype, \"weightStyleSelect\", void 0);\n__decorate$1b([\n    RefSelector('sizeSelect')\n], FontPanel.prototype, \"sizeSelect\", void 0);\n__decorate$1b([\n    RefSelector('colorPicker')\n], FontPanel.prototype, \"colorPicker\", void 0);\n__decorate$1b([\n    Autowired('chartTranslationService')\n], FontPanel.prototype, \"chartTranslationService\", void 0);\n__decorate$1b([\n    PostConstruct\n], FontPanel.prototype, \"init\", null);\n\nvar __decorate$1a = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass LegendPanel extends Component {\n    constructor({ chartOptionsService, isExpandedOnInit = false }) {\n        super();\n        this.activePanels = [];\n        this.chartOptionsService = chartOptionsService;\n        this.isExpandedOnInit = isExpandedOnInit;\n    }\n    init() {\n        const groupParams = {\n            cssIdentifier: 'charts-format-top-level',\n            direction: 'vertical'\n        };\n        this.setTemplate(LegendPanel.TEMPLATE, { legendGroup: groupParams });\n        this.initLegendGroup();\n        this.initLegendPosition();\n        this.initLegendPadding();\n        this.initLegendItems();\n        this.initLabelPanel();\n    }\n    initLegendGroup() {\n        this.legendGroup\n            .setTitle(this.chartTranslationService.translate(\"legend\"))\n            .hideEnabledCheckbox(false)\n            .setEnabled(this.chartOptionsService.getChartOption(\"legend.enabled\") || false)\n            .toggleGroupExpand(this.isExpandedOnInit)\n            .onEnableChange(enabled => {\n            this.chartOptionsService.setChartOption(\"legend.enabled\", enabled);\n            this.legendGroup.toggleGroupExpand(true);\n        });\n    }\n    initLegendPosition() {\n        const positions = ['top', 'right', 'bottom', 'left'];\n        this.legendPositionSelect\n            .setLabel(this.chartTranslationService.translate(\"position\"))\n            .setLabelWidth(\"flex\")\n            .setInputWidth(80)\n            .addOptions(positions.map(position => ({\n            value: position,\n            text: this.chartTranslationService.translate(position)\n        })))\n            .setValue(this.chartOptionsService.getChartOption(\"legend.position\"))\n            .onValueChange(newValue => this.chartOptionsService.setChartOption(\"legend.position\", newValue));\n    }\n    initLegendPadding() {\n        const currentValue = this.chartOptionsService.getChartOption(\"legend.spacing\");\n        this.legendPaddingSlider\n            .setLabel(this.chartTranslationService.translate(\"spacing\"))\n            .setMaxValue(getMaxValue(currentValue, 200))\n            .setValue(`${currentValue}`)\n            .setTextFieldWidth(45)\n            .onValueChange(newValue => this.chartOptionsService.setChartOption(\"legend.spacing\", newValue));\n    }\n    initLegendItems() {\n        const initSlider = (expression, labelKey, input, defaultMaxValue) => {\n            const currentValue = this.chartOptionsService.getChartOption(`legend.${expression}`);\n            input.setLabel(this.chartTranslationService.translate(labelKey))\n                .setMaxValue(getMaxValue(currentValue, defaultMaxValue))\n                .setValue(`${currentValue}`)\n                .setTextFieldWidth(45)\n                .onValueChange(newValue => {\n                this.chartOptionsService.setChartOption(`legend.${expression}`, newValue);\n            });\n        };\n        initSlider(\"item.marker.size\", \"markerSize\", this.markerSizeSlider, 40);\n        initSlider(\"item.marker.strokeWidth\", \"markerStroke\", this.markerStrokeSlider, 10);\n        initSlider(\"item.marker.padding\", \"itemSpacing\", this.markerPaddingSlider, 20);\n        initSlider(\"item.paddingX\", \"layoutHorizontalSpacing\", this.itemPaddingXSlider, 50);\n        initSlider(\"item.paddingY\", \"layoutVerticalSpacing\", this.itemPaddingYSlider, 50);\n    }\n    initLabelPanel() {\n        const chartProxy = this.chartOptionsService;\n        const initialFont = {\n            family: chartProxy.getChartOption(\"legend.item.label.fontFamily\"),\n            style: chartProxy.getChartOption(\"legend.item.label.fontStyle\"),\n            weight: chartProxy.getChartOption(\"legend.item.label.fontWeight\"),\n            size: chartProxy.getChartOption(\"legend.item.label.fontSize\"),\n            color: chartProxy.getChartOption(\"legend.item.label.color\")\n        };\n        const setFont = (font) => {\n            const proxy = this.chartOptionsService;\n            if (font.family) {\n                proxy.setChartOption(\"legend.item.label.fontFamily\", font.family);\n            }\n            if (font.weight) {\n                proxy.setChartOption(\"legend.item.label.fontWeight\", font.weight);\n            }\n            if (font.style) {\n                proxy.setChartOption(\"legend.item.label.fontStyle\", font.style);\n            }\n            if (font.size) {\n                proxy.setChartOption(\"legend.item.label.fontSize\", font.size);\n            }\n            if (font.color) {\n                proxy.setChartOption(\"legend.item.label.color\", font.color);\n            }\n        };\n        const params = {\n            enabled: true,\n            suppressEnabledCheckbox: true,\n            initialFont: initialFont,\n            setFont: setFont\n        };\n        const fontPanelComp = this.createBean(new FontPanel(params));\n        this.legendGroup.addItem(fontPanelComp);\n        this.activePanels.push(fontPanelComp);\n    }\n    destroyActivePanels() {\n        this.activePanels.forEach(panel => {\n            _.removeFromParent(panel.getGui());\n            this.destroyBean(panel);\n        });\n    }\n    destroy() {\n        this.destroyActivePanels();\n        super.destroy();\n    }\n}\nLegendPanel.TEMPLATE = `<div>\n            <ag-group-component ref=\"legendGroup\">\n                <ag-select ref=\"legendPositionSelect\"></ag-select>\n                <ag-slider ref=\"legendPaddingSlider\"></ag-slider>\n                <ag-slider ref=\"markerSizeSlider\"></ag-slider>\n                <ag-slider ref=\"markerStrokeSlider\"></ag-slider>\n                <ag-slider ref=\"markerPaddingSlider\"></ag-slider>\n                <ag-slider ref=\"itemPaddingXSlider\"></ag-slider>\n                <ag-slider ref=\"itemPaddingYSlider\"></ag-slider>\n            </ag-group-component>\n        </div>`;\n__decorate$1a([\n    RefSelector('legendGroup')\n], LegendPanel.prototype, \"legendGroup\", void 0);\n__decorate$1a([\n    RefSelector('legendPositionSelect')\n], LegendPanel.prototype, \"legendPositionSelect\", void 0);\n__decorate$1a([\n    RefSelector('legendPaddingSlider')\n], LegendPanel.prototype, \"legendPaddingSlider\", void 0);\n__decorate$1a([\n    RefSelector('markerSizeSlider')\n], LegendPanel.prototype, \"markerSizeSlider\", void 0);\n__decorate$1a([\n    RefSelector('markerStrokeSlider')\n], LegendPanel.prototype, \"markerStrokeSlider\", void 0);\n__decorate$1a([\n    RefSelector('markerPaddingSlider')\n], LegendPanel.prototype, \"markerPaddingSlider\", void 0);\n__decorate$1a([\n    RefSelector('itemPaddingXSlider')\n], LegendPanel.prototype, \"itemPaddingXSlider\", void 0);\n__decorate$1a([\n    RefSelector('itemPaddingYSlider')\n], LegendPanel.prototype, \"itemPaddingYSlider\", void 0);\n__decorate$1a([\n    Autowired('chartTranslationService')\n], LegendPanel.prototype, \"chartTranslationService\", void 0);\n__decorate$1a([\n    PostConstruct\n], LegendPanel.prototype, \"init\", null);\n\nvar __decorate$19 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AxisTicksPanel extends Component {\n    constructor(chartOptionsService) {\n        super();\n        this.chartOptionsService = chartOptionsService;\n    }\n    init() {\n        const groupParams = {\n            cssIdentifier: 'charts-format-sub-level',\n            direction: 'vertical',\n            suppressOpenCloseIcons: true\n        };\n        this.setTemplate(AxisTicksPanel.TEMPLATE, { axisTicksGroup: groupParams });\n        this.initAxisTicks();\n    }\n    initAxisTicks() {\n        this.axisTicksGroup\n            .setTitle(this.chartTranslationService.translate(\"ticks\"))\n            .hideOpenCloseIcons(true)\n            .hideEnabledCheckbox(true);\n        this.axisTicksColorPicker\n            .setLabel(this.chartTranslationService.translate(\"color\"))\n            .setLabelWidth(\"flex\")\n            .setInputWidth(45)\n            .setValue(this.chartOptionsService.getAxisProperty(\"tick.color\"))\n            .onValueChange(newColor => this.chartOptionsService.setAxisProperty(\"tick.color\", newColor));\n        const initInput = (expression, input, label, defaultMaxValue) => {\n            const currentValue = this.chartOptionsService.getAxisProperty(expression);\n            input.setLabel(label)\n                .setMaxValue(getMaxValue(currentValue, defaultMaxValue))\n                .setValue(`${currentValue}`)\n                .setTextFieldWidth(45)\n                .onValueChange(newValue => this.chartOptionsService.setAxisProperty(expression, newValue));\n        };\n        initInput(\"tick.width\", this.axisTicksWidthSlider, this.chartTranslationService.translate(\"width\"), 10);\n        initInput(\"tick.size\", this.axisTicksSizeSlider, this.chartTranslationService.translate(\"length\"), 30);\n    }\n}\nAxisTicksPanel.TEMPLATE = `<div>\n            <ag-group-component ref=\"axisTicksGroup\">\n                <ag-color-picker ref=\"axisTicksColorPicker\"></ag-color-picker>\n                <ag-slider ref=\"axisTicksWidthSlider\"></ag-slider>\n                <ag-slider ref=\"axisTicksSizeSlider\"></ag-slider>\n            </ag-group-component>\n        </div>`;\n__decorate$19([\n    RefSelector('axisTicksGroup')\n], AxisTicksPanel.prototype, \"axisTicksGroup\", void 0);\n__decorate$19([\n    RefSelector('axisTicksColorPicker')\n], AxisTicksPanel.prototype, \"axisTicksColorPicker\", void 0);\n__decorate$19([\n    RefSelector('axisTicksWidthSlider')\n], AxisTicksPanel.prototype, \"axisTicksWidthSlider\", void 0);\n__decorate$19([\n    RefSelector('axisTicksSizeSlider')\n], AxisTicksPanel.prototype, \"axisTicksSizeSlider\", void 0);\n__decorate$19([\n    Autowired('chartTranslationService')\n], AxisTicksPanel.prototype, \"chartTranslationService\", void 0);\n__decorate$19([\n    PostConstruct\n], AxisTicksPanel.prototype, \"init\", null);\n\nvar __decorate$18 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AgAngleSelect extends AgAbstractLabel {\n    constructor(config) {\n        super(config, AgAngleSelect.TEMPLATE);\n        this.radius = 0;\n        this.offsetX = 0;\n        this.offsetY = 0;\n    }\n    postConstruct() {\n        super.postConstruct();\n        this.dragListener = {\n            eElement: this.eParentCircle,\n            dragStartPixels: 0,\n            onDragStart: (e) => {\n                this.parentCircleRect = this.eParentCircle.getBoundingClientRect();\n            },\n            onDragging: (e) => this.calculateAngleDrag(e),\n            onDragStop: () => { }\n        };\n        this.dragService.addDragSource(this.dragListener);\n        this.eAngleValue\n            .setLabel('')\n            .setLabelWidth(5)\n            .setInputWidth(45)\n            .setMin(0)\n            .setMax(360)\n            .setValue(`${this.degrees}`)\n            .onValueChange((value) => {\n            if (value == null || value === '') {\n                value = '0';\n            }\n            value = this.eAngleValue.normalizeValue(value);\n            let floatValue = parseFloat(value);\n            if (floatValue > 180) {\n                floatValue = floatValue - 360;\n            }\n            this.setValue(floatValue);\n        });\n        this.updateNumberInput();\n        if (_.exists(this.getValue())) {\n            this.eAngleValue.setValue(this.normalizeNegativeValue(this.getValue()).toString());\n        }\n        this.addManagedListener(this, AgAbstractField.EVENT_CHANGED, () => {\n            const eDocument = this.gridOptionsService.getDocument();\n            if (this.eAngleValue.getInputElement().contains(eDocument.activeElement)) {\n                return;\n            }\n            this.updateNumberInput();\n        });\n    }\n    updateNumberInput() {\n        const normalizedValue = this.normalizeNegativeValue(this.getValue());\n        this.eAngleValue.setValue(normalizedValue.toString());\n    }\n    positionChildCircle(radians) {\n        const rect = this.parentCircleRect || { width: 24, height: 24 };\n        const eChildCircle = this.eChildCircle;\n        const centerX = rect.width / 2;\n        const centerY = rect.height / 2;\n        eChildCircle.style.left = `${centerX + Math.cos(radians) * 8}px`;\n        eChildCircle.style.top = `${centerY + Math.sin(radians) * 8}px`;\n    }\n    calculatePolar() {\n        const x = this.offsetX;\n        const y = this.offsetY;\n        const radians = Math.atan2(y, x);\n        this.degrees = this.toDegrees(radians);\n        this.radius = Math.sqrt((x * x) + (y * y));\n        this.positionChildCircle(radians);\n    }\n    calculateCartesian() {\n        const radians = this.toRadians(this.getValue());\n        const radius = this.getRadius();\n        this\n            .setOffsetX(Math.cos(radians) * radius)\n            .setOffsetY(Math.sin(radians) * radius);\n    }\n    setOffsetX(offset) {\n        if (this.offsetX !== offset) {\n            this.offsetX = offset;\n            this.calculatePolar();\n        }\n        return this;\n    }\n    setOffsetY(offset) {\n        if (this.offsetY !== offset) {\n            this.offsetY = offset;\n            this.calculatePolar();\n        }\n        return this;\n    }\n    calculateAngleDrag(e) {\n        const rect = this.parentCircleRect;\n        const centerX = rect.width / 2;\n        const centerY = rect.height / 2;\n        const x = e.clientX - rect.left;\n        const y = e.clientY - rect.top;\n        const dx = x - centerX;\n        const dy = y - centerY;\n        const radians = Math.atan2(dy, dx);\n        this.setValue(radians, true);\n    }\n    toDegrees(radians) {\n        return radians / Math.PI * 180;\n    }\n    toRadians(degrees) {\n        return degrees / 180 * Math.PI;\n    }\n    normalizeNegativeValue(degrees) {\n        return degrees < 0 ? 360 + degrees : degrees;\n    }\n    normalizeAngle180(radians) {\n        radians %= Math.PI * 2;\n        if (radians < -Math.PI) {\n            radians += Math.PI * 2;\n        }\n        else if (radians >= Math.PI) {\n            radians -= Math.PI * 2;\n        }\n        return radians;\n    }\n    getRadius() {\n        return this.radius;\n    }\n    setRadius(r) {\n        if (this.radius === r) {\n            return this;\n        }\n        this.radius = r;\n        this.calculateCartesian();\n        return this;\n    }\n    onValueChange(callbackFn) {\n        this.addManagedListener(this, AgAbstractField.EVENT_CHANGED, () => {\n            callbackFn(this.degrees);\n        });\n        return this;\n    }\n    getValue(radians) {\n        return radians ? this.toRadians(this.degrees) : this.degrees;\n    }\n    setValue(degrees, radians) {\n        let radiansValue;\n        if (!radians) {\n            radiansValue = this.normalizeAngle180(this.toRadians(degrees));\n        }\n        else {\n            radiansValue = degrees;\n        }\n        degrees = this.toDegrees(radiansValue);\n        if (this.degrees !== degrees) {\n            this.degrees = Math.floor(degrees);\n            this.calculateCartesian();\n            this.positionChildCircle(radiansValue);\n            this.dispatchEvent({ type: AgAbstractField.EVENT_CHANGED });\n        }\n        return this;\n    }\n    setWidth(width) {\n        _.setFixedWidth(this.getGui(), width);\n        return this;\n    }\n    setDisabled(disabled) {\n        super.setDisabled(disabled);\n        this.eAngleValue.setDisabled(disabled);\n        return this;\n    }\n    destroy() {\n        this.dragService.removeDragSource(this.dragListener);\n        super.destroy();\n    }\n}\nAgAngleSelect.TEMPLATE = `<div class=\"ag-angle-select\">\n            <div ref=\"eLabel\"></div>\n            <div class=\"ag-wrapper ag-angle-select-wrapper\">\n                <div ref=\"eAngleSelectField\" class=\"ag-angle-select-field\">\n                    <div ref=\"eParentCircle\" class=\"ag-angle-select-parent-circle\">\n                        <div ref=\"eChildCircle\" class=\"ag-angle-select-child-circle\"></div>\n                    </div>\n                </div>\n                <ag-input-number-field ref=\"eAngleValue\"></ag-input-number-field>\n            </div>\n        </div>`;\n__decorate$18([\n    RefSelector('eLabel')\n], AgAngleSelect.prototype, \"eLabel\", void 0);\n__decorate$18([\n    RefSelector('eParentCircle')\n], AgAngleSelect.prototype, \"eParentCircle\", void 0);\n__decorate$18([\n    RefSelector('eChildCircle')\n], AgAngleSelect.prototype, \"eChildCircle\", void 0);\n__decorate$18([\n    RefSelector('eAngleValue')\n], AgAngleSelect.prototype, \"eAngleValue\", void 0);\n__decorate$18([\n    Autowired('dragService')\n], AgAngleSelect.prototype, \"dragService\", void 0);\n\nvar __decorate$17 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AxisPanel extends Component {\n    constructor({ chartController, chartOptionsService, isExpandedOnInit = false }) {\n        super();\n        this.activePanels = [];\n        this.axisLabelUpdateFuncs = [];\n        this.prevXRotation = 0;\n        this.prevYRotation = 0;\n        this.chartController = chartController;\n        this.chartOptionsService = chartOptionsService;\n        this.isExpandedOnInit = isExpandedOnInit;\n    }\n    init() {\n        const groupParams = {\n            cssIdentifier: 'charts-format-top-level',\n            direction: 'vertical'\n        };\n        this.setTemplate(AxisPanel.TEMPLATE, { axisGroup: groupParams });\n        this.initAxis();\n        this.initAxisTicks();\n        this.initAxisLabels();\n        const updateAxisLabelRotations = () => this.axisLabelUpdateFuncs.forEach(func => func());\n        this.addManagedListener(this.chartController, ChartController.EVENT_CHART_UPDATED, updateAxisLabelRotations);\n    }\n    initAxis() {\n        this.axisGroup\n            .setTitle(this.translate(\"axis\"))\n            .toggleGroupExpand(this.isExpandedOnInit)\n            .hideEnabledCheckbox(true);\n        this.axisColorInput\n            .setLabel(this.translate(\"color\"))\n            .setLabelWidth(\"flex\")\n            .setInputWidth(45)\n            .setValue(this.chartOptionsService.getAxisProperty(\"line.color\"))\n            .onValueChange(newColor => this.chartOptionsService.setAxisProperty(\"line.color\", newColor));\n        const currentValue = this.chartOptionsService.getAxisProperty(\"line.width\");\n        this.axisLineWidthSlider\n            .setMaxValue(getMaxValue(currentValue, 10))\n            .setLabel(this.translate(\"thickness\"))\n            .setTextFieldWidth(45)\n            .setValue(`${currentValue}`)\n            .onValueChange(newValue => this.chartOptionsService.setAxisProperty(\"line.width\", newValue));\n    }\n    initAxisTicks() {\n        const axisTicksComp = this.createBean(new AxisTicksPanel(this.chartOptionsService));\n        this.axisGroup.addItem(axisTicksComp);\n        this.activePanels.push(axisTicksComp);\n    }\n    initAxisLabels() {\n        const initialFont = {\n            family: this.chartOptionsService.getAxisProperty(\"label.fontFamily\"),\n            style: this.chartOptionsService.getAxisProperty(\"label.fontStyle\"),\n            weight: this.chartOptionsService.getAxisProperty(\"label.fontWeight\"),\n            size: this.chartOptionsService.getAxisProperty(\"label.fontSize\"),\n            color: this.chartOptionsService.getAxisProperty(\"label.color\")\n        };\n        const setFont = (font) => {\n            if (font.family) {\n                this.chartOptionsService.setAxisProperty(\"label.fontFamily\", font.family);\n            }\n            if (font.weight) {\n                this.chartOptionsService.setAxisProperty(\"label.fontWeight\", font.weight);\n            }\n            if (font.style) {\n                this.chartOptionsService.setAxisProperty(\"label.fontStyle\", font.style);\n            }\n            if (font.size) {\n                this.chartOptionsService.setAxisProperty(\"label.fontSize\", font.size);\n            }\n            if (font.color) {\n                this.chartOptionsService.setAxisProperty(\"label.color\", font.color);\n            }\n        };\n        const params = {\n            name: this.translate(\"labels\"),\n            enabled: true,\n            suppressEnabledCheckbox: true,\n            initialFont,\n            setFont\n        };\n        const labelPanelComp = this.createBean(new FontPanel(params));\n        this.axisGroup.addItem(labelPanelComp);\n        this.activePanels.push(labelPanelComp);\n        this.addAdditionalLabelComps(labelPanelComp);\n    }\n    addAdditionalLabelComps(labelPanelComp) {\n        this.addLabelPadding(labelPanelComp);\n        const { xRotationComp, yRotationComp } = this.createRotationWidgets();\n        const autoRotateCb = this.initLabelRotations(xRotationComp, yRotationComp);\n        labelPanelComp.addCompToPanel(autoRotateCb);\n        labelPanelComp.addCompToPanel(xRotationComp);\n        labelPanelComp.addCompToPanel(yRotationComp);\n    }\n    initLabelRotations(xRotationComp, yRotationComp) {\n        const getLabelRotation = (axisType) => {\n            return this.chartOptionsService.getLabelRotation(axisType);\n        };\n        const setLabelRotation = (axisType, value) => {\n            this.chartOptionsService.setLabelRotation(axisType, value);\n        };\n        const updateAutoRotate = (autoRotate) => {\n            this.chartOptionsService.setAxisProperty(\"label.autoRotate\", autoRotate);\n            if (autoRotate) {\n                // store prev rotations before we remove them from the options\n                this.prevXRotation = getLabelRotation(\"xAxis\");\n                this.prevYRotation = getLabelRotation(\"yAxis\");\n                // `autoRotate` is only\n                setLabelRotation(\"xAxis\", undefined);\n                setLabelRotation(\"yAxis\", undefined);\n            }\n            else {\n                // reinstate prev rotations\n                setLabelRotation(\"xAxis\", this.prevXRotation);\n                setLabelRotation(\"yAxis\", this.prevYRotation);\n            }\n            xRotationComp.setDisabled(autoRotate);\n            yRotationComp.setDisabled(autoRotate);\n        };\n        const getAutoRotateValue = () => {\n            const xRotation = getLabelRotation(\"xAxis\");\n            const yRotation = getLabelRotation(\"yAxis\");\n            if (xRotation == undefined && yRotation == undefined) {\n                return this.chartOptionsService.getAxisProperty(\"label.autoRotate\");\n            }\n            return false;\n        };\n        const autoRotate = getAutoRotateValue();\n        const autoRotateCheckbox = this.createBean(new AgCheckbox())\n            .setLabel(this.translate('autoRotate'))\n            .setValue(autoRotate)\n            .onValueChange(updateAutoRotate);\n        // init rotation comp state\n        xRotationComp.setDisabled(autoRotate);\n        yRotationComp.setDisabled(autoRotate);\n        return autoRotateCheckbox;\n    }\n    createRotationWidgets() {\n        const degreesSymbol = String.fromCharCode(176);\n        const createRotationComp = (labelKey, axisType) => {\n            const label = `${this.chartTranslationService.translate(labelKey)} ${degreesSymbol}`;\n            const value = this.chartOptionsService.getLabelRotation(axisType);\n            const angleSelect = new AgAngleSelect()\n                .setLabel(label)\n                .setLabelWidth(\"flex\")\n                .setValue(value || 0)\n                .onValueChange(newValue => this.chartOptionsService.setLabelRotation(axisType, newValue));\n            // the axis label rotation needs to be updated when the default category changes in the data panel\n            this.axisLabelUpdateFuncs.push(() => {\n                const value = this.chartOptionsService.getLabelRotation(axisType);\n                angleSelect.setValue(value || 0);\n            });\n            return this.createBean(angleSelect);\n        };\n        return {\n            xRotationComp: createRotationComp(\"xRotation\", \"xAxis\"),\n            yRotationComp: createRotationComp(\"yRotation\", \"yAxis\")\n        };\n    }\n    addLabelPadding(labelPanelComp) {\n        const labelPaddingSlider = this.createBean(new AgSlider());\n        const currentValue = this.chartOptionsService.getAxisProperty(\"label.padding\");\n        labelPaddingSlider.setLabel(this.chartTranslationService.translate(\"padding\"))\n            .setMaxValue(getMaxValue(currentValue, 30))\n            .setValue(`${currentValue}`)\n            .setTextFieldWidth(45)\n            .onValueChange(newValue => this.chartOptionsService.setAxisProperty(\"label.padding\", newValue));\n        labelPanelComp.addCompToPanel(labelPaddingSlider);\n    }\n    translate(key, defaultText) {\n        return this.chartTranslationService.translate(key, defaultText);\n    }\n    destroyActivePanels() {\n        this.activePanels.forEach(panel => {\n            _.removeFromParent(panel.getGui());\n            this.destroyBean(panel);\n        });\n    }\n    destroy() {\n        this.destroyActivePanels();\n        super.destroy();\n    }\n}\nAxisPanel.TEMPLATE = `<div>\n            <ag-group-component ref=\"axisGroup\">\n                <ag-color-picker ref=\"axisColorInput\"></ag-color-picker>\n                <ag-slider ref=\"axisLineWidthSlider\"></ag-slider>\n            </ag-group-component>\n        </div>`;\n__decorate$17([\n    RefSelector('axisGroup')\n], AxisPanel.prototype, \"axisGroup\", void 0);\n__decorate$17([\n    RefSelector('axisColorInput')\n], AxisPanel.prototype, \"axisColorInput\", void 0);\n__decorate$17([\n    RefSelector('axisLineWidthSlider')\n], AxisPanel.prototype, \"axisLineWidthSlider\", void 0);\n__decorate$17([\n    Autowired('chartTranslationService')\n], AxisPanel.prototype, \"chartTranslationService\", void 0);\n__decorate$17([\n    PostConstruct\n], AxisPanel.prototype, \"init\", null);\n\nvar __decorate$16 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass NavigatorPanel extends Component {\n    constructor({ chartOptionsService, isExpandedOnInit = false }) {\n        super();\n        this.chartOptionsService = chartOptionsService;\n        this.isExpandedOnInit = isExpandedOnInit;\n    }\n    init() {\n        const groupParams = {\n            cssIdentifier: 'charts-format-top-level',\n            direction: 'vertical'\n        };\n        this.setTemplate(NavigatorPanel.TEMPLATE, { navigatorGroup: groupParams });\n        this.initNavigator();\n    }\n    initNavigator() {\n        const { chartTranslationService } = this;\n        this.navigatorGroup\n            .setTitle(chartTranslationService.translate(\"navigator\"))\n            .hideEnabledCheckbox(false)\n            .setEnabled(this.chartOptionsService.getChartOption(\"navigator.enabled\") || false)\n            .onEnableChange(enabled => {\n            this.chartOptionsService.setChartOption(\"navigator.enabled\", enabled);\n            this.navigatorGroup.toggleGroupExpand(true);\n        })\n            .toggleGroupExpand(this.isExpandedOnInit);\n        const currentValue = this.chartOptionsService.getChartOption(\"navigator.height\");\n        this.navigatorHeightSlider\n            .setLabel(chartTranslationService.translate(\"height\"))\n            .setMinValue(10)\n            .setMaxValue(getMaxValue(currentValue, 60))\n            .setTextFieldWidth(45)\n            .setValue(`${currentValue || 30}`)\n            .onValueChange(height => this.chartOptionsService.setChartOption(\"navigator.height\", height));\n    }\n    destroy() {\n        super.destroy();\n    }\n}\nNavigatorPanel.TEMPLATE = `<div>\n            <ag-group-component ref=\"navigatorGroup\">\n                <ag-slider ref=\"navigatorHeightSlider\"></ag-slider>\n            </ag-group-component>\n        </div>`;\n__decorate$16([\n    RefSelector('navigatorGroup')\n], NavigatorPanel.prototype, \"navigatorGroup\", void 0);\n__decorate$16([\n    RefSelector('navigatorHeightSlider')\n], NavigatorPanel.prototype, \"navigatorHeightSlider\", void 0);\n__decorate$16([\n    Autowired('chartTranslationService')\n], NavigatorPanel.prototype, \"chartTranslationService\", void 0);\n__decorate$16([\n    PostConstruct\n], NavigatorPanel.prototype, \"init\", null);\n\nvar __decorate$15 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass PaddingPanel extends Component {\n    constructor(chartOptionsService, chartController) {\n        super();\n        this.chartOptionsService = chartOptionsService;\n        this.chartController = chartController;\n    }\n    init() {\n        const groupParams = {\n            cssIdentifier: 'charts-format-sub-level',\n            direction: 'vertical',\n            suppressOpenCloseIcons: true\n        };\n        this.setTemplate(PaddingPanel.TEMPLATE, { chartPaddingGroup: groupParams });\n        this.addManagedListener(this.eventService, Events.EVENT_CHART_OPTIONS_CHANGED, (e) => {\n            this.updateTopPadding(e.chartOptions);\n        });\n        this.initGroup();\n        this.initChartPaddingItems();\n    }\n    initGroup() {\n        this.chartPaddingGroup\n            .setTitle(this.chartTranslationService.translate(\"padding\"))\n            .hideOpenCloseIcons(true)\n            .hideEnabledCheckbox(true);\n    }\n    initChartPaddingItems() {\n        const initInput = (property, input) => {\n            const currentValue = this.chartOptionsService.getChartOption('padding.' + property);\n            input.setLabel(this.chartTranslationService.translate(property))\n                .setMaxValue(getMaxValue(currentValue, 200))\n                .setValue(`${currentValue}`)\n                .setTextFieldWidth(45)\n                .onValueChange(newValue => this.chartOptionsService.setChartOption('padding.' + property, newValue));\n        };\n        initInput('top', this.paddingTopSlider);\n        initInput('right', this.paddingRightSlider);\n        initInput('bottom', this.paddingBottomSlider);\n        initInput('left', this.paddingLeftSlider);\n    }\n    updateTopPadding(chartOptions) {\n        var _a, _b;\n        // keep 'top' padding in sync with chart as toggling chart title on / off change the 'top' padding\n        const seriesType = this.chartController.getChartSeriesTypes()[0];\n        const topPadding = (_b = (_a = chartOptions[seriesType]) === null || _a === void 0 ? void 0 : _a.padding) === null || _b === void 0 ? void 0 : _b.top;\n        if (topPadding != null) {\n            this.paddingTopSlider.setValue(topPadding);\n        }\n    }\n}\nPaddingPanel.TEMPLATE = `<div>\n            <ag-group-component ref=\"chartPaddingGroup\">\n                <ag-slider ref=\"paddingTopSlider\"></ag-slider>\n                <ag-slider ref=\"paddingRightSlider\"></ag-slider>\n                <ag-slider ref=\"paddingBottomSlider\"></ag-slider>\n                <ag-slider ref=\"paddingLeftSlider\"></ag-slider>\n            </ag-group-component>\n        <div>`;\n__decorate$15([\n    RefSelector('chartPaddingGroup')\n], PaddingPanel.prototype, \"chartPaddingGroup\", void 0);\n__decorate$15([\n    RefSelector('paddingTopSlider')\n], PaddingPanel.prototype, \"paddingTopSlider\", void 0);\n__decorate$15([\n    RefSelector('paddingRightSlider')\n], PaddingPanel.prototype, \"paddingRightSlider\", void 0);\n__decorate$15([\n    RefSelector('paddingBottomSlider')\n], PaddingPanel.prototype, \"paddingBottomSlider\", void 0);\n__decorate$15([\n    RefSelector('paddingLeftSlider')\n], PaddingPanel.prototype, \"paddingLeftSlider\", void 0);\n__decorate$15([\n    Autowired('chartTranslationService')\n], PaddingPanel.prototype, \"chartTranslationService\", void 0);\n__decorate$15([\n    PostConstruct\n], PaddingPanel.prototype, \"init\", null);\n\nvar __decorate$14 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass BackgroundPanel extends Component {\n    constructor(chartOptionsService) {\n        super();\n        this.chartOptionsService = chartOptionsService;\n    }\n    init() {\n        const groupParams = {\n            cssIdentifier: 'charts-format-sub-level',\n            direction: 'vertical',\n            suppressOpenCloseIcons: true\n        };\n        this.setTemplate(BackgroundPanel.TEMPLATE, { chartBackgroundGroup: groupParams });\n        this.initGroup();\n        this.initColorPicker();\n    }\n    initGroup() {\n        this.group\n            .setTitle(this.chartTranslationService.translate('background'))\n            .setEnabled(this.chartOptionsService.getChartOption('background.visible'))\n            .hideOpenCloseIcons(true)\n            .hideEnabledCheckbox(false)\n            .onEnableChange(enabled => this.chartOptionsService.setChartOption('background.visible', enabled));\n    }\n    initColorPicker() {\n        this.colorPicker\n            .setLabel(this.chartTranslationService.translate('color'))\n            .setLabelWidth('flex')\n            .setInputWidth(45)\n            .setValue(this.chartOptionsService.getChartOption('background.fill'))\n            .onValueChange(newColor => this.chartOptionsService.setChartOption('background.fill', newColor));\n    }\n}\nBackgroundPanel.TEMPLATE = `<div>\n            <ag-group-component ref=\"chartBackgroundGroup\">\n                <ag-color-picker ref=\"colorPicker\"></ag-color-picker>\n            </ag-group-component>\n        <div>`;\n__decorate$14([\n    RefSelector('chartBackgroundGroup')\n], BackgroundPanel.prototype, \"group\", void 0);\n__decorate$14([\n    RefSelector('colorPicker')\n], BackgroundPanel.prototype, \"colorPicker\", void 0);\n__decorate$14([\n    Autowired('chartTranslationService')\n], BackgroundPanel.prototype, \"chartTranslationService\", void 0);\n__decorate$14([\n    PostConstruct\n], BackgroundPanel.prototype, \"init\", null);\n\nvar __decorate$13 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass TitlePanel extends Component {\n    constructor(chartOptionsService) {\n        super(TitlePanel.TEMPLATE);\n        this.chartOptionsService = chartOptionsService;\n        this.activePanels = [];\n    }\n    init() {\n        this.initFontPanel();\n        this.titlePlaceholder = this.chartTranslationService.translate('titlePlaceholder');\n    }\n    hasTitle() {\n        const title = this.getOption('title');\n        return title && title.enabled && title.text && title.text.length > 0;\n    }\n    initFontPanel() {\n        const hasTitle = this.hasTitle();\n        const setFont = (font, isSilent) => {\n            if (font.family) {\n                this.setOption('title.fontFamily', font.family, isSilent);\n            }\n            if (font.weight) {\n                this.setOption('title.fontWeight', font.weight, isSilent);\n            }\n            if (font.style) {\n                this.setOption('title.fontStyle', font.style, isSilent);\n            }\n            if (font.size) {\n                this.setOption('title.fontSize', font.size, isSilent);\n            }\n            if (font.color) {\n                this.setOption('title.color', font.color, isSilent);\n            }\n        };\n        const initialFont = {\n            family: this.getOption('title.fontFamily'),\n            style: this.getOption('title.fontStyle'),\n            weight: this.getOption('title.fontWeight'),\n            size: this.getOption('title.fontSize'),\n            color: this.getOption('title.color')\n        };\n        if (!hasTitle) {\n            setFont(initialFont, true);\n        }\n        const fontPanelParams = {\n            name: this.chartTranslationService.translate('title'),\n            enabled: hasTitle,\n            suppressEnabledCheckbox: false,\n            initialFont,\n            setFont,\n            setEnabled: (enabled) => {\n                if (this.toolbarExists()) {\n                    // extra padding is only included when the toolbar is present\n                    const topPadding = this.getOption('padding.top');\n                    this.setOption('padding.top', enabled ? topPadding - 20 : topPadding + 20);\n                }\n                this.setOption('title.enabled', enabled);\n                const currentTitleText = this.getOption('title.text');\n                const replaceableTitleText = currentTitleText === 'Title' || (currentTitleText === null || currentTitleText === void 0 ? void 0 : currentTitleText.trim().length) === 0;\n                if (enabled && replaceableTitleText) {\n                    this.setOption('title.text', this.titlePlaceholder);\n                }\n            }\n        };\n        const fontPanelComp = this.createBean(new FontPanel(fontPanelParams));\n        // add the title spacing slider to font panel\n        fontPanelComp.addItemToPanel(this.createSpacingSlicer());\n        this.getGui().appendChild(fontPanelComp.getGui());\n        this.activePanels.push(fontPanelComp);\n        // edits to the title can disable it, so keep the checkbox in sync:\n        this.addManagedListener(this.eventService, 'chartTitleEdit', () => {\n            fontPanelComp.setEnabled(this.hasTitle());\n        });\n    }\n    createSpacingSlicer() {\n        const spacingSlider = this.createBean(new AgSlider());\n        const currentValue = this.chartOptionsService.getChartOption('title.spacing');\n        spacingSlider.setLabel(this.chartTranslationService.translate('spacing'))\n            .setMaxValue(Math.max(currentValue, 100))\n            .setValue(`${currentValue}`)\n            .setTextFieldWidth(45)\n            .onValueChange(newValue => this.chartOptionsService.setChartOption('title.spacing', newValue));\n        return spacingSlider;\n    }\n    toolbarExists() {\n        const toolbarItemsFunc = this.gridOptionsService.getCallback('getChartToolbarItems');\n        if (!toolbarItemsFunc) {\n            return true;\n        }\n        const params = {\n            defaultItems: ['chartUnlink', 'chartDownload']\n        };\n        const topItems = ['chartLink', 'chartUnlink', 'chartDownload'];\n        return topItems.some(v => { var _a; return (_a = (toolbarItemsFunc && toolbarItemsFunc(params))) === null || _a === void 0 ? void 0 : _a.includes(v); });\n    }\n    getOption(expression) {\n        return this.chartOptionsService.getChartOption(expression);\n    }\n    setOption(property, value, isSilent) {\n        this.chartOptionsService.setChartOption(property, value, isSilent);\n    }\n    destroyActivePanels() {\n        this.activePanels.forEach(panel => {\n            _.removeFromParent(panel.getGui());\n            this.destroyBean(panel);\n        });\n    }\n    destroy() {\n        this.destroyActivePanels();\n        super.destroy();\n    }\n}\nTitlePanel.TEMPLATE = `<div></div>`;\n__decorate$13([\n    Autowired('chartTranslationService')\n], TitlePanel.prototype, \"chartTranslationService\", void 0);\n__decorate$13([\n    PostConstruct\n], TitlePanel.prototype, \"init\", null);\n\nvar __decorate$12 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ChartPanel extends Component {\n    constructor({ chartController, chartOptionsService, isExpandedOnInit = false }) {\n        super();\n        this.activePanels = [];\n        this.chartController = chartController;\n        this.chartOptionsService = chartOptionsService;\n        this.isExpandedOnInit = isExpandedOnInit;\n    }\n    init() {\n        const groupParams = {\n            cssIdentifier: 'charts-format-top-level',\n            direction: 'vertical'\n        };\n        this.setTemplate(ChartPanel.TEMPLATE, { chartGroup: groupParams });\n        this.initGroup();\n        this.initTitles();\n        this.initPaddingPanel();\n        this.initBackgroundPanel();\n    }\n    initGroup() {\n        this.chartGroup\n            .setTitle(this.chartTranslationService.translate('chart'))\n            .toggleGroupExpand(this.isExpandedOnInit)\n            .hideEnabledCheckbox(true);\n    }\n    initTitles() {\n        const titlePanelComp = this.createBean(new TitlePanel(this.chartOptionsService));\n        this.chartGroup.addItem(titlePanelComp);\n        this.activePanels.push(titlePanelComp);\n    }\n    initPaddingPanel() {\n        const paddingPanelComp = this.createBean(new PaddingPanel(this.chartOptionsService, this.chartController));\n        this.chartGroup.addItem(paddingPanelComp);\n        this.activePanels.push(paddingPanelComp);\n    }\n    initBackgroundPanel() {\n        const backgroundPanelComp = this.createBean(new BackgroundPanel(this.chartOptionsService));\n        this.chartGroup.addItem(backgroundPanelComp);\n        this.activePanels.push(backgroundPanelComp);\n    }\n    destroyActivePanels() {\n        this.activePanels.forEach(panel => {\n            _.removeFromParent(panel.getGui());\n            this.destroyBean(panel);\n        });\n    }\n    destroy() {\n        this.destroyActivePanels();\n        super.destroy();\n    }\n}\nChartPanel.TEMPLATE = `<div>\n            <ag-group-component ref=\"chartGroup\"></ag-group-component>\n        </div>`;\n__decorate$12([\n    RefSelector('chartGroup')\n], ChartPanel.prototype, \"chartGroup\", void 0);\n__decorate$12([\n    Autowired('chartTranslationService')\n], ChartPanel.prototype, \"chartTranslationService\", void 0);\n__decorate$12([\n    PostConstruct\n], ChartPanel.prototype, \"init\", null);\n\nvar __decorate$11 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ShadowPanel extends Component {\n    constructor(chartOptionsService, getSelectedSeries) {\n        super();\n        this.chartOptionsService = chartOptionsService;\n        this.getSelectedSeries = getSelectedSeries;\n    }\n    init() {\n        const groupParams = {\n            cssIdentifier: 'charts-format-sub-level',\n            direction: 'vertical',\n            suppressOpenCloseIcons: true\n        };\n        this.setTemplate(ShadowPanel.TEMPLATE, { shadowGroup: groupParams });\n        this.shadowBlurSlider.setTextFieldWidth(45);\n        this.shadowXOffsetSlider.setTextFieldWidth(45);\n        this.shadowYOffsetSlider.setTextFieldWidth(45);\n        this.initSeriesShadow();\n    }\n    initSeriesShadow() {\n        this.shadowGroup\n            .setTitle(this.chartTranslationService.translate(\"shadow\"))\n            .setEnabled(this.chartOptionsService.getSeriesOption(\"shadow.enabled\", this.getSelectedSeries()))\n            .hideOpenCloseIcons(true)\n            .hideEnabledCheckbox(false)\n            .onEnableChange(newValue => this.chartOptionsService.setSeriesOption(\"shadow.enabled\", newValue, this.getSelectedSeries()));\n        this.shadowColorPicker\n            .setLabel(this.chartTranslationService.translate(\"color\"))\n            .setLabelWidth(\"flex\")\n            .setInputWidth(45)\n            .setValue(this.chartOptionsService.getSeriesOption(\"shadow.color\", this.getSelectedSeries()))\n            .onValueChange(newValue => this.chartOptionsService.setSeriesOption(\"shadow.color\", newValue, this.getSelectedSeries()));\n        const initInput = (input, property, minValue, defaultMaxValue) => {\n            const currentValue = this.chartOptionsService.getSeriesOption(`shadow.${property}`, this.getSelectedSeries());\n            input.setLabel(this.chartTranslationService.translate(property))\n                .setMinValue(minValue)\n                .setMaxValue(getMaxValue(currentValue, defaultMaxValue))\n                .setValue(`${currentValue}`)\n                .onValueChange(newValue => this.chartOptionsService.setSeriesOption(`shadow.${property}`, newValue, this.getSelectedSeries()));\n        };\n        initInput(this.shadowBlurSlider, \"blur\", 0, 20);\n        initInput(this.shadowXOffsetSlider, \"xOffset\", -10, 10);\n        initInput(this.shadowYOffsetSlider, \"yOffset\", -10, 10);\n    }\n}\nShadowPanel.TEMPLATE = `<div>\n            <ag-group-component ref=\"shadowGroup\">\n                <ag-color-picker ref=\"shadowColorPicker\"></ag-color-picker>\n                <ag-slider ref=\"shadowBlurSlider\"></ag-slider>\n                <ag-slider ref=\"shadowXOffsetSlider\"></ag-slider>\n                <ag-slider ref=\"shadowYOffsetSlider\"></ag-slider>\n            </ag-group-component>\n        </div>`;\n__decorate$11([\n    RefSelector('shadowGroup')\n], ShadowPanel.prototype, \"shadowGroup\", void 0);\n__decorate$11([\n    RefSelector('shadowColorPicker')\n], ShadowPanel.prototype, \"shadowColorPicker\", void 0);\n__decorate$11([\n    RefSelector('shadowBlurSlider')\n], ShadowPanel.prototype, \"shadowBlurSlider\", void 0);\n__decorate$11([\n    RefSelector('shadowXOffsetSlider')\n], ShadowPanel.prototype, \"shadowXOffsetSlider\", void 0);\n__decorate$11([\n    RefSelector('shadowYOffsetSlider')\n], ShadowPanel.prototype, \"shadowYOffsetSlider\", void 0);\n__decorate$11([\n    Autowired('chartTranslationService')\n], ShadowPanel.prototype, \"chartTranslationService\", void 0);\n__decorate$11([\n    PostConstruct\n], ShadowPanel.prototype, \"init\", null);\n\nfunction initFontPanelParams({ labelName, chartOptionsService, getSelectedSeries, seriesOptionLabelProperty }) {\n    const getFontOptionExpression = (fontOption) => {\n        return `${seriesOptionLabelProperty}.${fontOption}`;\n    };\n    const getFontOption = (fontOption) => {\n        const expression = getFontOptionExpression(fontOption);\n        return chartOptionsService.getSeriesOption(expression, getSelectedSeries());\n    };\n    const setFontOption = (fontOption, value) => {\n        const expression = getFontOptionExpression(fontOption);\n        chartOptionsService.setSeriesOption(expression, value, getSelectedSeries());\n    };\n    const initialFont = {\n        family: getFontOption('fontFamily'),\n        style: getFontOption('fontStyle'),\n        weight: getFontOption('fontWeight'),\n        size: getFontOption('fontSize'),\n        color: getFontOption('color'),\n    };\n    const setFont = (font) => {\n        if (font.family) {\n            setFontOption('fontFamily', font.family);\n        }\n        if (font.weight) {\n            setFontOption('fontWeight', font.weight);\n        }\n        if (font.style) {\n            setFontOption('fontStyle', font.style);\n        }\n        if (font.size) {\n            setFontOption('fontSize', font.size);\n        }\n        if (font.color) {\n            setFontOption('color', font.color);\n        }\n    };\n    const params = {\n        name: labelName,\n        enabled: getFontOption('enabled') || false,\n        setEnabled: (enabled) => setFontOption('enabled', enabled),\n        suppressEnabledCheckbox: false,\n        initialFont: initialFont,\n        setFont: setFont\n    };\n    return params;\n}\n\nvar __decorate$10 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass MarkersPanel extends Component {\n    constructor(chartOptionsService, getSelectedSeries) {\n        super();\n        this.chartOptionsService = chartOptionsService;\n        this.getSelectedSeries = getSelectedSeries;\n    }\n    init() {\n        const groupParams = {\n            cssIdentifier: 'charts-format-sub-level',\n            direction: 'vertical'\n        };\n        this.setTemplate(MarkersPanel.TEMPLATE, { seriesMarkersGroup: groupParams });\n        this.initMarkers();\n    }\n    initMarkers() {\n        const seriesMarkerShapeOptions = [\n            {\n                value: 'square',\n                text: 'Square'\n            },\n            {\n                value: 'circle',\n                text: 'Circle'\n            },\n            {\n                value: 'cross',\n                text: 'Cross'\n            },\n            {\n                value: 'diamond',\n                text: 'Diamond'\n            },\n            {\n                value: 'plus',\n                text: 'Plus'\n            },\n            {\n                value: 'triangle',\n                text: 'Triangle'\n            },\n            {\n                value: 'heart',\n                text: 'Heart'\n            }\n        ];\n        this.seriesMarkerShapeSelect\n            .addOptions(seriesMarkerShapeOptions)\n            .setLabel(this.chartTranslationService.translate('shape'))\n            .setValue(this.getSeriesOption(\"marker.shape\"))\n            .onValueChange(value => this.setSeriesOption(\"marker.shape\", value));\n        // scatter charts should always show markers\n        const chartType = this.chartOptionsService.getChartType();\n        const shouldHideEnabledCheckbox = _.includes(['scatter', 'bubble'], chartType);\n        this.seriesMarkersGroup\n            .setTitle(this.chartTranslationService.translate(\"markers\"))\n            .hideEnabledCheckbox(shouldHideEnabledCheckbox)\n            .setEnabled(this.getSeriesOption(\"marker.enabled\") || false)\n            .hideOpenCloseIcons(true)\n            .onEnableChange(newValue => this.setSeriesOption(\"marker.enabled\", newValue));\n        const initInput = (expression, input, labelKey, defaultMaxValue) => {\n            const currentValue = this.getSeriesOption(expression);\n            input.setLabel(this.chartTranslationService.translate(labelKey))\n                .setMaxValue(getMaxValue(currentValue, defaultMaxValue))\n                .setValue(`${currentValue}`)\n                .setTextFieldWidth(45)\n                .onValueChange(newValue => this.setSeriesOption(expression, newValue));\n        };\n        if (chartType === 'bubble') {\n            initInput(\"marker.maxSize\", this.seriesMarkerMinSizeSlider, \"maxSize\", 60);\n            initInput(\"marker.size\", this.seriesMarkerSizeSlider, \"minSize\", 60);\n        }\n        else {\n            this.seriesMarkerMinSizeSlider.setDisplayed(false);\n            initInput(\"marker.size\", this.seriesMarkerSizeSlider, \"size\", 60);\n        }\n        initInput(\"marker.strokeWidth\", this.seriesMarkerStrokeWidthSlider, \"strokeWidth\", 10);\n    }\n    getSeriesOption(expression) {\n        return this.chartOptionsService.getSeriesOption(expression, this.getSelectedSeries());\n    }\n    setSeriesOption(expression, newValue) {\n        this.chartOptionsService.setSeriesOption(expression, newValue, this.getSelectedSeries());\n    }\n}\nMarkersPanel.TEMPLATE = `<div>\n            <ag-group-component ref=\"seriesMarkersGroup\">\n                <ag-select ref=\"seriesMarkerShapeSelect\"></ag-select>\n                <ag-slider ref=\"seriesMarkerMinSizeSlider\"></ag-slider>\n                <ag-slider ref=\"seriesMarkerSizeSlider\"></ag-slider>\n                <ag-slider ref=\"seriesMarkerStrokeWidthSlider\"></ag-slider>\n            </ag-group-component>\n        </div>`;\n__decorate$10([\n    RefSelector('seriesMarkersGroup')\n], MarkersPanel.prototype, \"seriesMarkersGroup\", void 0);\n__decorate$10([\n    RefSelector('seriesMarkerShapeSelect')\n], MarkersPanel.prototype, \"seriesMarkerShapeSelect\", void 0);\n__decorate$10([\n    RefSelector('seriesMarkerSizeSlider')\n], MarkersPanel.prototype, \"seriesMarkerSizeSlider\", void 0);\n__decorate$10([\n    RefSelector('seriesMarkerMinSizeSlider')\n], MarkersPanel.prototype, \"seriesMarkerMinSizeSlider\", void 0);\n__decorate$10([\n    RefSelector('seriesMarkerStrokeWidthSlider')\n], MarkersPanel.prototype, \"seriesMarkerStrokeWidthSlider\", void 0);\n__decorate$10([\n    Autowired('chartTranslationService')\n], MarkersPanel.prototype, \"chartTranslationService\", void 0);\n__decorate$10([\n    PostConstruct\n], MarkersPanel.prototype, \"init\", null);\n\nvar __decorate$$ = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass CalloutPanel extends Component {\n    constructor(chartOptionsService, getSelectedSeries) {\n        super();\n        this.chartOptionsService = chartOptionsService;\n        this.getSelectedSeries = getSelectedSeries;\n    }\n    init() {\n        const groupParams = {\n            cssIdentifier: 'charts-format-sub-level',\n            direction: 'vertical'\n        };\n        this.setTemplate(CalloutPanel.TEMPLATE, { calloutGroup: groupParams });\n        this.initCalloutOptions();\n    }\n    initCalloutOptions() {\n        this.calloutGroup\n            .setTitle(this.chartTranslationService.translate(\"callout\"))\n            .setEnabled(true)\n            .hideOpenCloseIcons(true)\n            .hideEnabledCheckbox(true);\n        const initInput = (expression, input, labelKey, defaultMaxValue) => {\n            const currentValue = this.chartOptionsService.getSeriesOption(expression, this.getSelectedSeries());\n            input.setLabel(this.chartTranslationService.translate(labelKey))\n                .setMaxValue(getMaxValue(currentValue, defaultMaxValue))\n                .setValue(`${currentValue}`)\n                .setTextFieldWidth(45)\n                .onValueChange(newValue => this.chartOptionsService.setSeriesOption(expression, newValue, this.getSelectedSeries()));\n        };\n        initInput('calloutLine.length', this.calloutLengthSlider, 'length', 40);\n        initInput('calloutLine.strokeWidth', this.calloutStrokeWidthSlider, 'strokeWidth', 10);\n        initInput('calloutLabel.offset', this.labelOffsetSlider, 'offset', 30);\n    }\n}\nCalloutPanel.TEMPLATE = `<div>\n            <ag-group-component ref=\"calloutGroup\">\n                <ag-slider ref=\"calloutLengthSlider\"></ag-slider>\n                <ag-slider ref=\"calloutStrokeWidthSlider\"></ag-slider>\n                <ag-slider ref=\"labelOffsetSlider\"></ag-slider>\n            </ag-group-component>\n        </div>`;\n__decorate$$([\n    RefSelector('calloutGroup')\n], CalloutPanel.prototype, \"calloutGroup\", void 0);\n__decorate$$([\n    RefSelector('calloutLengthSlider')\n], CalloutPanel.prototype, \"calloutLengthSlider\", void 0);\n__decorate$$([\n    RefSelector('calloutStrokeWidthSlider')\n], CalloutPanel.prototype, \"calloutStrokeWidthSlider\", void 0);\n__decorate$$([\n    RefSelector('labelOffsetSlider')\n], CalloutPanel.prototype, \"labelOffsetSlider\", void 0);\n__decorate$$([\n    Autowired('chartTranslationService')\n], CalloutPanel.prototype, \"chartTranslationService\", void 0);\n__decorate$$([\n    PostConstruct\n], CalloutPanel.prototype, \"init\", null);\n\nvar __decorate$_ = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass SeriesPanel extends Component {\n    constructor({ chartController, chartOptionsService, seriesType, isExpandedOnInit = false }) {\n        super();\n        this.activePanels = [];\n        this.widgetFuncs = {\n            'lineWidth': () => this.initLineWidth(),\n            'strokeWidth': () => this.initStrokeWidth(),\n            'lineDash': () => this.initLineDash(),\n            'lineOpacity': () => this.initLineOpacity(),\n            'fillOpacity': () => this.initFillOpacity(),\n            'markers': () => this.initMarkers(),\n            'labels': () => this.initLabels(),\n            'shadow': () => this.initShadow(),\n            'tooltips': () => this.initTooltips(),\n            'bins': () => this.initBins(),\n        };\n        this.seriesWidgetMappings = {\n            'area': ['tooltips', 'lineWidth', 'lineDash', 'lineOpacity', 'fillOpacity', 'markers', 'labels', 'shadow'],\n            'bar': ['tooltips', 'strokeWidth', 'lineDash', 'lineOpacity', 'fillOpacity', 'labels', 'shadow'],\n            'column': ['tooltips', 'strokeWidth', 'lineDash', 'lineOpacity', 'fillOpacity', 'labels', 'shadow'],\n            'line': ['tooltips', 'lineWidth', 'lineDash', 'lineOpacity', 'markers', 'labels'],\n            'histogram': ['tooltips', 'bins', 'strokeWidth', 'lineDash', 'lineOpacity', 'fillOpacity', 'labels', 'shadow'],\n            'scatter': ['tooltips', 'markers', 'labels'],\n            'pie': ['tooltips', 'strokeWidth', 'lineOpacity', 'fillOpacity', 'labels', 'shadow'],\n        };\n        this.chartController = chartController;\n        this.chartOptionsService = chartOptionsService;\n        this.seriesType = seriesType || this.getChartSeriesType();\n        this.isExpandedOnInit = isExpandedOnInit;\n    }\n    init() {\n        const groupParams = {\n            cssIdentifier: 'charts-format-top-level',\n            direction: 'vertical'\n        };\n        this.setTemplate(SeriesPanel.TEMPLATE, { seriesGroup: groupParams });\n        this.seriesGroup\n            .setTitle(this.translate(\"series\"))\n            .toggleGroupExpand(this.isExpandedOnInit)\n            .hideEnabledCheckbox(true);\n        this.addManagedListener(this.chartController, ChartController.EVENT_CHART_SERIES_CHART_TYPE_CHANGED, this.refreshWidgets.bind(this));\n        this.refreshWidgets();\n    }\n    refreshWidgets() {\n        this.destroyActivePanels();\n        const chart = this.chartController.getChartProxy().getChart();\n        chart.waitForUpdate().then(() => {\n            if (this.chartController.isComboChart()) {\n                this.updateSeriesType();\n                this.initSeriesSelect();\n            }\n            this.seriesWidgetMappings[this.seriesType].forEach((w) => this.widgetFuncs[w]());\n        })\n            .catch(e => console.error(`AG Grid - chart rendering failed`, e));\n    }\n    initSeriesSelect() {\n        const seriesSelect = this.seriesGroup.createManagedBean(new AgSelect());\n        seriesSelect\n            .setLabel(this.translate('seriesType'))\n            .setLabelAlignment(\"left\")\n            .setLabelWidth('flex')\n            .setInputWidth(100)\n            .addOptions(this.getSeriesSelectOptions())\n            .setValue(`${this.seriesType}`)\n            .onValueChange((newValue) => {\n            this.seriesType = newValue;\n            this.refreshWidgets();\n        });\n        this.seriesGroup.addItem(seriesSelect);\n        this.activePanels.push(seriesSelect);\n    }\n    initTooltips() {\n        const seriesTooltipsToggle = this.createBean(new AgToggleButton());\n        seriesTooltipsToggle\n            .setLabel(this.translate(\"tooltips\"))\n            .setLabelAlignment(\"left\")\n            .setLabelWidth(\"flex\")\n            .setInputWidth(45)\n            .setValue(this.getSeriesOption(\"tooltip.enabled\") || false)\n            .onValueChange(newValue => this.setSeriesOption(\"tooltip.enabled\", newValue));\n        this.addWidget(seriesTooltipsToggle);\n    }\n    initStrokeWidth() {\n        const currentValue = this.getSeriesOption(\"strokeWidth\");\n        const seriesStrokeWidthSlider = this.createBean(new AgSlider());\n        seriesStrokeWidthSlider\n            .setLabel(this.translate(\"strokeWidth\"))\n            .setMaxValue(getMaxValue(currentValue, 10))\n            .setTextFieldWidth(45)\n            .setValue(`${currentValue}`)\n            .onValueChange(newValue => this.setSeriesOption(\"strokeWidth\", newValue));\n        this.addWidget(seriesStrokeWidthSlider);\n    }\n    initLineWidth() {\n        const currentValue = this.getSeriesOption(\"strokeWidth\");\n        const seriesLineWidthSlider = this.createBean(new AgSlider());\n        seriesLineWidthSlider\n            .setLabel(this.translate('lineWidth'))\n            .setMaxValue(getMaxValue(currentValue, 10))\n            .setTextFieldWidth(45)\n            .setValue(`${currentValue}`)\n            .onValueChange(newValue => this.setSeriesOption(\"strokeWidth\", newValue));\n        this.addWidget(seriesLineWidthSlider);\n    }\n    initLineDash() {\n        const lineDash = this.getSeriesOption(\"lineDash\");\n        const currentValue = lineDash ? lineDash[0] : 0;\n        const seriesLineDashSlider = this.createBean(new AgSlider());\n        seriesLineDashSlider\n            .setLabel(this.translate('lineDash'))\n            .setMaxValue(getMaxValue(currentValue, 30))\n            .setTextFieldWidth(45)\n            .setValue(`${currentValue}`)\n            .onValueChange(newValue => this.setSeriesOption(\"lineDash\", [newValue]));\n        this.addWidget(seriesLineDashSlider);\n    }\n    initLineOpacity() {\n        const currentValue = this.getSeriesOption(\"strokeOpacity\");\n        const seriesLineOpacitySlider = this.createBean(new AgSlider());\n        seriesLineOpacitySlider\n            .setLabel(this.translate(\"strokeOpacity\"))\n            .setStep(0.05)\n            .setMaxValue(getMaxValue(currentValue, 1))\n            .setTextFieldWidth(45)\n            .setValue(`${currentValue}`)\n            .onValueChange(newValue => this.setSeriesOption(\"strokeOpacity\", newValue));\n        this.addWidget(seriesLineOpacitySlider);\n    }\n    initFillOpacity() {\n        const currentValue = this.getSeriesOption(\"fillOpacity\");\n        const seriesFillOpacitySlider = this.createBean(new AgSlider());\n        seriesFillOpacitySlider\n            .setLabel(this.translate(\"fillOpacity\"))\n            .setStep(0.05)\n            .setMaxValue(getMaxValue(currentValue, 1))\n            .setTextFieldWidth(45)\n            .setValue(`${currentValue}`)\n            .onValueChange(newValue => this.setSeriesOption(\"fillOpacity\", newValue));\n        this.addWidget(seriesFillOpacitySlider);\n    }\n    initLabels() {\n        const seriesOptionLabelProperty = this.seriesType === 'pie' ? 'calloutLabel' : 'label';\n        const labelName = this.seriesType === 'pie'\n            ? this.chartTranslationService.translate('calloutLabels')\n            : this.chartTranslationService.translate('labels');\n        const labelParams = initFontPanelParams({\n            labelName,\n            chartOptionsService: this.chartOptionsService,\n            getSelectedSeries: () => this.seriesType,\n            seriesOptionLabelProperty\n        });\n        const labelPanelComp = this.createBean(new FontPanel(labelParams));\n        if (this.seriesType === 'pie') {\n            const calloutPanelComp = this.createBean(new CalloutPanel(this.chartOptionsService, () => this.seriesType));\n            labelPanelComp.addCompToPanel(calloutPanelComp);\n            this.activePanels.push(calloutPanelComp);\n        }\n        this.addWidget(labelPanelComp);\n        if (this.seriesType === 'pie') {\n            const sectorParams = initFontPanelParams({\n                labelName: this.chartTranslationService.translate('sectorLabels'),\n                chartOptionsService: this.chartOptionsService,\n                getSelectedSeries: () => this.seriesType,\n                seriesOptionLabelProperty: 'sectorLabel'\n            });\n            const sectorPanelComp = this.createBean(new FontPanel(sectorParams));\n            const positionRatioComp = this.getSectorLabelPositionRatio();\n            sectorPanelComp.addCompToPanel(positionRatioComp);\n            this.addWidget(sectorPanelComp);\n        }\n    }\n    getSectorLabelPositionRatio() {\n        const expression = 'sectorLabel.positionRatio';\n        const currentValue = this.chartOptionsService.getSeriesOption(expression, this.seriesType);\n        const sectorLabelPositionRatioSlider = this.createBean(new AgSlider());\n        return sectorLabelPositionRatioSlider\n            .setLabel(this.translate(\"positionRatio\"))\n            .setStep(0.05)\n            .setMaxValue(getMaxValue(currentValue, 1))\n            .setTextFieldWidth(45)\n            .setValue(`${currentValue}`)\n            .onValueChange(newValue => this.chartOptionsService.setSeriesOption(expression, newValue, this.seriesType));\n    }\n    initShadow() {\n        const shadowPanelComp = this.createBean(new ShadowPanel(this.chartOptionsService, () => this.seriesType));\n        this.addWidget(shadowPanelComp);\n    }\n    initMarkers() {\n        const markersPanelComp = this.createBean(new MarkersPanel(this.chartOptionsService, () => this.seriesType));\n        this.addWidget(markersPanelComp);\n    }\n    initBins() {\n        var _a;\n        const currentValue = ((_a = this.getSeriesOption(\"bins\")) !== null && _a !== void 0 ? _a : this.getSeriesOption(\"calculatedBins\")).length;\n        const seriesBinCountSlider = this.createBean(new AgSlider());\n        seriesBinCountSlider\n            .setLabel(this.translate(\"histogramBinCount\"))\n            .setMinValue(0)\n            .setMaxValue(getMaxValue(currentValue, 20))\n            .setTextFieldWidth(45)\n            .setValue(`${currentValue}`)\n            .onValueChange(newValue => this.setSeriesOption(\"binCount\", newValue));\n        this.addWidget(seriesBinCountSlider);\n    }\n    addWidget(widget) {\n        this.seriesGroup.addItem(widget);\n        this.activePanels.push(widget);\n    }\n    getSeriesOption(expression) {\n        return this.chartOptionsService.getSeriesOption(expression, this.seriesType);\n    }\n    setSeriesOption(expression, newValue) {\n        this.chartOptionsService.setSeriesOption(expression, newValue, this.seriesType);\n    }\n    getChartSeriesType() {\n        if (this.chartController.getSeriesChartTypes().length === 0)\n            return 'column';\n        const ct = this.chartController.getSeriesChartTypes()[0].chartType;\n        if (ct === 'columnLineCombo')\n            return 'column';\n        if (ct === 'areaColumnCombo')\n            return 'area';\n        return getSeriesType(ct);\n    }\n    getSeriesSelectOptions() {\n        if (!this.seriesSelectOptions) {\n            // lazy init options as they are only required for combo charts\n            this.seriesSelectOptions = new Map([\n                ['area', { value: 'area', text: this.translate('area', 'Area') }],\n                ['bar', { value: 'bar', text: this.translate('bar', 'Bar') }],\n                ['column', { value: 'column', text: this.translate('column', 'Column') }],\n                ['line', { value: 'line', text: this.translate('line', 'Line') }],\n                ['scatter', { value: 'scatter', text: this.translate('scatter', 'Scatter') }],\n                ['histogram', { value: 'histogram', text: this.translate('histogram', 'Histogram') }],\n                ['pie', { value: 'pie', text: this.translate('pie', 'Pie') }],\n            ]);\n        }\n        const seriesSelectOptions = new Set();\n        this.chartController.getActiveSeriesChartTypes().forEach(s => {\n            const chartType = getSeriesType(s.chartType);\n            seriesSelectOptions.add(this.seriesSelectOptions.get(chartType));\n        });\n        return Array.from(seriesSelectOptions);\n    }\n    updateSeriesType() {\n        const activeChartTypes = this.chartController.getActiveSeriesChartTypes().map(s => getSeriesType(s.chartType));\n        const invalidSeriesType = !activeChartTypes.includes(this.seriesType);\n        if (invalidSeriesType && activeChartTypes.length > 0) {\n            this.seriesType = activeChartTypes[0]; // default to first active series type\n        }\n    }\n    translate(key, defaultText) {\n        return this.chartTranslationService.translate(key, defaultText);\n    }\n    destroyActivePanels() {\n        this.activePanels.forEach(panel => {\n            _.removeFromParent(panel.getGui());\n            this.destroyBean(panel);\n        });\n    }\n    destroy() {\n        this.destroyActivePanels();\n        super.destroy();\n    }\n}\nSeriesPanel.TEMPLATE = `<div>\n            <ag-group-component ref=\"seriesGroup\">\n            </ag-group-component>\n        </div>`;\n__decorate$_([\n    RefSelector('seriesGroup')\n], SeriesPanel.prototype, \"seriesGroup\", void 0);\n__decorate$_([\n    Autowired('chartTranslationService')\n], SeriesPanel.prototype, \"chartTranslationService\", void 0);\n__decorate$_([\n    PostConstruct\n], SeriesPanel.prototype, \"init\", null);\n\nvar __decorate$Z = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nfunction getMaxValue(currentValue, defaultMaxValue) {\n    return Math.max(currentValue, defaultMaxValue);\n}\nconst DefaultFormatPanelDef = {\n    groups: [\n        { type: 'chart' },\n        { type: 'legend' },\n        { type: 'series' },\n        { type: 'axis' },\n        { type: 'navigator' },\n    ]\n};\nclass FormatPanel extends Component {\n    constructor(chartController, chartOptionsService) {\n        super(FormatPanel.TEMPLATE);\n        this.chartController = chartController;\n        this.chartOptionsService = chartOptionsService;\n        this.panels = [];\n        this.isGroupPanelShownInSeries = (group, seriesType) => {\n            const commonGroupPanels = ['chart', 'legend', 'series'];\n            if (commonGroupPanels.includes(group)) {\n                return true;\n            }\n            const cartesianOnlyGroupPanels = ['axis', 'navigator'];\n            const cartesianSeries = ['bar', 'column', 'line', 'area', 'scatter', 'histogram', 'cartesian'];\n            return !!(cartesianOnlyGroupPanels.includes(group) && cartesianSeries.includes(seriesType));\n        };\n    }\n    init() {\n        this.createPanels();\n        this.addManagedListener(this.chartController, ChartController.EVENT_CHART_UPDATED, () => this.createPanels(true));\n        this.addManagedListener(this.chartController, ChartController.EVENT_CHART_API_UPDATE, () => this.createPanels(false));\n    }\n    createPanels(reuse) {\n        var _a;\n        const chartType = this.chartController.getChartType();\n        const isGrouping = this.chartController.isGrouping();\n        const seriesType = getSeriesType(chartType);\n        if (reuse && chartType === this.chartType && isGrouping === this.isGrouping) {\n            // existing panels can be re-used\n            return;\n        }\n        this.destroyPanels();\n        (_a = this.getFormatPanelDef().groups) === null || _a === void 0 ? void 0 : _a.forEach((groupDef) => {\n            const group = groupDef.type;\n            // ensure the group should be displayed for the current series type\n            if (!this.isGroupPanelShownInSeries(group, seriesType)) {\n                return;\n            }\n            const opts = {\n                chartController: this.chartController,\n                chartOptionsService: this.chartOptionsService,\n                isExpandedOnInit: groupDef.isOpen,\n                seriesType\n            };\n            if (group === 'chart') {\n                this.addComponent(new ChartPanel(opts));\n            }\n            else if (group === 'legend') {\n                this.addComponent(new LegendPanel(opts));\n            }\n            else if (group === 'axis') {\n                this.addComponent(new AxisPanel(opts));\n            }\n            else if (group === 'series') {\n                this.addComponent(new SeriesPanel(opts));\n            }\n            else if (group === 'navigator') {\n                this.addComponent(new NavigatorPanel(opts));\n            }\n            else {\n                console.warn(`AG Grid: invalid charts format panel group name supplied: '${groupDef.type}'`);\n            }\n        });\n        this.chartType = chartType;\n        this.isGrouping = isGrouping;\n    }\n    getFormatPanelDef() {\n        var _a;\n        const userProvidedFormatPanelDef = (_a = this.gridOptionsService.get('chartToolPanelsDef')) === null || _a === void 0 ? void 0 : _a.formatPanel;\n        return userProvidedFormatPanelDef ? userProvidedFormatPanelDef : DefaultFormatPanelDef;\n    }\n    addComponent(component) {\n        this.createBean(component);\n        this.panels.push(component);\n        component.addCssClass('ag-chart-format-section');\n        this.getGui().appendChild(component.getGui());\n    }\n    destroyPanels() {\n        this.panels.forEach(panel => {\n            _.removeFromParent(panel.getGui());\n            this.destroyBean(panel);\n        });\n    }\n    destroy() {\n        this.destroyPanels();\n        super.destroy();\n    }\n}\nFormatPanel.TEMPLATE = `<div class=\"ag-chart-format-wrapper\"></div>`;\n__decorate$Z([\n    PostConstruct\n], FormatPanel.prototype, \"init\", null);\n\nvar __decorate$Y = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass MiniChart extends Component {\n    constructor(container, tooltipName) {\n        super();\n        this.size = 58;\n        this.padding = 5;\n        this.root = new Group();\n        const scene = new Scene({ document: window.document, width: this.size, height: this.size });\n        scene.canvas.element.classList.add('ag-chart-mini-thumbnail-canvas');\n        scene.root = this.root;\n        scene.container = container;\n        this.scene = scene;\n        this.tooltipName = tooltipName;\n    }\n    init() {\n        this.scene.canvas.element.title = this.chartTranslationService.translate(this.tooltipName);\n        // necessary to force scene graph render as we are not using the standalone factory!\n        this.scene.render()\n            .catch((e) => console.error(`AG Grid - chart update failed`, e));\n    }\n}\n__decorate$Y([\n    Autowired('chartTranslationService')\n], MiniChart.prototype, \"chartTranslationService\", void 0);\n__decorate$Y([\n    PostConstruct\n], MiniChart.prototype, \"init\", null);\n\nvar __decorate$X = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass MiniChartWithAxes extends MiniChart {\n    constructor(container, tooltipName) {\n        super(container, tooltipName);\n        this.stroke = 'gray';\n        this.axisOvershoot = 3;\n    }\n    addAxes() {\n        const size = this.size;\n        const padding = this.padding;\n        const leftAxis = new Line();\n        leftAxis.x1 = padding;\n        leftAxis.y1 = padding;\n        leftAxis.x2 = padding;\n        leftAxis.y2 = size - padding + this.axisOvershoot;\n        leftAxis.stroke = this.stroke;\n        const bottomAxis = new Line();\n        bottomAxis.x1 = padding - this.axisOvershoot + 1;\n        bottomAxis.y1 = size - padding;\n        bottomAxis.x2 = size - padding + 1;\n        bottomAxis.y2 = size - padding;\n        bottomAxis.stroke = this.stroke;\n        const root = this.root;\n        root.append(leftAxis);\n        root.append(bottomAxis);\n    }\n}\n__decorate$X([\n    PostConstruct\n], MiniChartWithAxes.prototype, \"addAxes\", null);\n\nfunction createColumnRects(params) {\n    const { stacked, size, padding, xScalePadding, xScaleDomain, yScaleDomain } = params;\n    const xScale = new BandScale$5();\n    xScale.domain = xScaleDomain;\n    xScale.range = [padding, size - padding];\n    xScale.paddingInner = xScalePadding;\n    xScale.paddingOuter = xScalePadding;\n    const yScale = new LinearScale$1();\n    yScale.domain = yScaleDomain;\n    yScale.range = [size - padding, padding];\n    const createBars = (series, xScale, yScale) => {\n        return series.map((datum, i) => {\n            const top = yScale.convert(datum);\n            const rect = new Rect();\n            rect.x = xScale.convert(i);\n            rect.y = top;\n            rect.width = xScale.bandwidth;\n            rect.height = yScale.convert(0) - top;\n            rect.strokeWidth = 1;\n            rect.crisp = true;\n            return rect;\n        });\n    };\n    if (stacked) {\n        return params.data.map((d) => createBars(d, xScale, yScale));\n    }\n    return createBars(params.data, xScale, yScale);\n}\nfunction createLinePaths(root, data, size, padding) {\n    const xScale = new LinearScale$1();\n    xScale.domain = [0, 4];\n    xScale.range = [padding, size - padding];\n    const yScale = new LinearScale$1();\n    yScale.domain = [0, 10];\n    yScale.range = [size - padding, padding];\n    const lines = data.map((series) => {\n        const line = new Path();\n        line.strokeWidth = 3;\n        line.lineCap = 'round';\n        line.fill = undefined;\n        series.forEach((datum, i) => {\n            line.path[i > 0 ? 'lineTo' : 'moveTo'](xScale.convert(i), yScale.convert(datum));\n        });\n        return line;\n    });\n    const linesGroup = new Group();\n    linesGroup.setClipRectInGroupCoordinateSpace(new BBox(padding, padding, size - padding * 2, size - padding * 2));\n    linesGroup.append(lines);\n    root.append(linesGroup);\n    return lines;\n}\n\nclass MiniColumn extends MiniChartWithAxes {\n    constructor(container, fills, strokes) {\n        super(container, \"groupedColumnTooltip\");\n        this.columnData = [2, 3, 4];\n        const { root, columnData, size, padding } = this;\n        this.columns = createColumnRects({\n            stacked: false,\n            root,\n            data: columnData,\n            size,\n            padding,\n            xScaleDomain: [0, 1, 2],\n            yScaleDomain: [0, 4],\n            xScalePadding: 0.3\n        });\n        root.append(this.columns);\n        this.updateColors(fills, strokes);\n    }\n    updateColors(fills, strokes) {\n        this.columns.forEach((column, i) => {\n            column.fill = fills[i];\n            column.stroke = strokes[i];\n        });\n    }\n}\nMiniColumn.chartType = 'groupedColumn';\n\nclass MiniStackedColumn extends MiniChartWithAxes {\n    constructor(container, fills, strokes, data = MiniStackedColumn.data, yScaleDomain = [0, 16], tooltipName = \"stackedColumnTooltip\") {\n        super(container, tooltipName);\n        const { root, size, padding } = this;\n        this.stackedColumns = createColumnRects({\n            stacked: true,\n            root,\n            data,\n            size,\n            padding,\n            xScaleDomain: [0, 1, 2],\n            yScaleDomain,\n            xScalePadding: 0.3,\n        });\n        root.append([].concat.apply([], this.stackedColumns));\n        this.updateColors(fills, strokes);\n    }\n    updateColors(fills, strokes) {\n        this.stackedColumns.forEach((series, i) => series.forEach(column => {\n            column.fill = fills[i];\n            column.stroke = strokes[i];\n        }));\n    }\n}\nMiniStackedColumn.chartType = 'stackedColumn';\nMiniStackedColumn.data = [\n    [8, 12, 16],\n    [6, 9, 12],\n    [2, 3, 4]\n];\n\nclass MiniNormalizedColumn extends MiniStackedColumn {\n    constructor(container, fills, strokes) {\n        super(container, fills, strokes, MiniNormalizedColumn.data, [0, 10], \"normalizedColumnTooltip\");\n    }\n}\nMiniNormalizedColumn.chartType = 'normalizedColumn';\nMiniNormalizedColumn.data = [\n    [10, 10, 10],\n    [6, 7, 8],\n    [2, 4, 6]\n];\n\nclass MiniBar extends MiniChartWithAxes {\n    constructor(container, fills, strokes) {\n        super(container, \"groupedBarTooltip\");\n        const padding = this.padding;\n        const size = this.size;\n        const data = [2, 3, 4];\n        const yScale = new BandScale$5();\n        yScale.domain = [0, 1, 2];\n        yScale.range = [padding, size - padding];\n        yScale.paddingInner = 0.3;\n        yScale.paddingOuter = 0.3;\n        const xScale = new LinearScale$1();\n        xScale.domain = [0, 4];\n        xScale.range = [size - padding, padding];\n        const bottom = xScale.convert(0);\n        const height = yScale.bandwidth;\n        this.bars = data.map((datum, i) => {\n            const rect = new Rect();\n            rect.x = padding;\n            rect.y = yScale.convert(i);\n            rect.width = bottom - xScale.convert(datum);\n            rect.height = height;\n            rect.strokeWidth = 1;\n            rect.crisp = true;\n            return rect;\n        });\n        this.updateColors(fills, strokes);\n        this.root.append(this.bars);\n    }\n    updateColors(fills, strokes) {\n        this.bars.forEach((bar, i) => {\n            bar.fill = fills[i];\n            bar.stroke = strokes[i];\n        });\n    }\n}\nMiniBar.chartType = 'groupedBar';\n\nclass MiniStackedBar extends MiniChartWithAxes {\n    constructor(container, fills, strokes, data = MiniStackedBar.data, xScaleDomain = [0, 16], tooltipName = \"stackedBarTooltip\") {\n        super(container, tooltipName);\n        const size = this.size;\n        const padding = this.padding;\n        const yScale = new BandScale$5();\n        yScale.domain = [0, 1, 2];\n        yScale.range = [padding, size - padding];\n        yScale.paddingInner = 0.3;\n        yScale.paddingOuter = 0.3;\n        const xScale = new LinearScale$1();\n        xScale.domain = xScaleDomain;\n        xScale.range = [size - padding, padding];\n        const bottom = xScale.convert(0);\n        const height = yScale.bandwidth;\n        this.bars = data.map(series => series.map((datum, i) => {\n            const rect = new Rect();\n            rect.x = padding;\n            rect.y = yScale.convert(i);\n            rect.width = bottom - xScale.convert(datum);\n            rect.height = height;\n            rect.strokeWidth = 1;\n            rect.crisp = true;\n            return rect;\n        }));\n        this.updateColors(fills, strokes);\n        this.root.append([].concat.apply([], this.bars));\n    }\n    updateColors(fills, strokes) {\n        this.bars.forEach((series, i) => series.forEach(bar => {\n            bar.fill = fills[i];\n            bar.stroke = strokes[i];\n        }));\n    }\n}\nMiniStackedBar.chartType = 'stackedBar';\nMiniStackedBar.data = [\n    [8, 12, 16],\n    [6, 9, 12],\n    [2, 3, 4]\n];\n\nclass MiniNormalizedBar extends MiniStackedBar {\n    constructor(container, fills, strokes) {\n        super(container, fills, strokes, MiniNormalizedBar.data, [0, 10], \"normalizedBarTooltip\");\n    }\n}\nMiniNormalizedBar.chartType = 'normalizedBar';\nMiniNormalizedBar.data = [\n    [10, 10, 10],\n    [6, 7, 8],\n    [2, 4, 6]\n];\n\nconst toRadians = toRadians$1;\nclass MiniDoughnut extends MiniChart {\n    constructor(container, fills, strokes, centerRadiusScaler = 0.6, tooltipName = \"doughnutTooltip\") {\n        super(container, tooltipName);\n        const radius = (this.size - this.padding * 2) / 2;\n        const center = radius + this.padding;\n        const angles = [\n            [toRadians(-90), toRadians(30)],\n            [toRadians(30), toRadians(120)],\n            [toRadians(120), toRadians(180)],\n            [toRadians(180), toRadians(210)],\n            [toRadians(210), toRadians(240)],\n            [toRadians(240), toRadians(270)]\n        ];\n        this.sectors = angles.map(([startAngle, endAngle]) => {\n            const sector = new Sector();\n            sector.centerX = center;\n            sector.centerY = center;\n            sector.innerRadius = radius * centerRadiusScaler;\n            sector.outerRadius = radius;\n            sector.startAngle = startAngle;\n            sector.endAngle = endAngle;\n            sector.stroke = undefined;\n            sector.strokeWidth = 1;\n            return sector;\n        });\n        this.updateColors(fills, strokes);\n        this.root.append(this.sectors);\n    }\n    updateColors(fills, strokes) {\n        this.sectors.forEach((sector, i) => {\n            sector.fill = fills[i % fills.length];\n            sector.stroke = strokes[i % strokes.length];\n        });\n    }\n}\nMiniDoughnut.chartType = 'doughnut';\n\nclass MiniPie extends MiniDoughnut {\n    constructor(container, fills, strokes) {\n        super(container, fills, strokes, 0, \"pieTooltip\");\n    }\n}\nMiniPie.chartType = 'pie';\n\nclass MiniLine extends MiniChartWithAxes {\n    constructor(container, fills, strokes) {\n        super(container, \"lineTooltip\");\n        this.data = [\n            [9, 7, 8, 5, 6],\n            [5, 6, 3, 4, 1],\n            [1, 3, 4, 8, 7]\n        ];\n        this.lines = createLinePaths(this.root, this.data, this.size, this.padding);\n        this.updateColors(fills, strokes);\n    }\n    updateColors(fills, strokes) {\n        this.lines.forEach((line, i) => {\n            line.stroke = fills[i];\n        });\n    }\n}\nMiniLine.chartType = 'line';\n\nclass MiniScatter extends MiniChartWithAxes {\n    constructor(container, fills, strokes) {\n        super(container, \"scatterTooltip\");\n        const size = this.size;\n        const padding = this.padding;\n        // [x, y] pairs\n        const data = [\n            [[0.3, 3], [1.1, 0.9], [2, 0.4], [3.4, 2.4]],\n            [[0, 0.3], [1, 2], [2.4, 1.4], [3, 0]]\n        ];\n        const xScale = new LinearScale$1();\n        xScale.domain = [-0.5, 4];\n        xScale.range = [padding * 2, size - padding];\n        const yScale = new LinearScale$1();\n        yScale.domain = [-0.5, 3.5];\n        yScale.range = [size - padding, padding];\n        const points = [];\n        data.forEach(series => {\n            series.forEach(([x, y]) => {\n                const arc = new Arc();\n                arc.strokeWidth = 1;\n                arc.centerX = xScale.convert(x);\n                arc.centerY = yScale.convert(y);\n                arc.radius = 2.5;\n                points.push(arc);\n            });\n        });\n        this.points = points;\n        this.updateColors(fills, strokes);\n        const pointsGroup = new Group();\n        pointsGroup.setClipRectInGroupCoordinateSpace(new BBox(padding, padding, size - padding * 2, size - padding * 2));\n        pointsGroup.append(this.points);\n        this.root.append(pointsGroup);\n    }\n    updateColors(fills, strokes) {\n        this.points.forEach((line, i) => {\n            line.stroke = strokes[i % strokes.length];\n            line.fill = fills[i % fills.length];\n        });\n    }\n}\nMiniScatter.chartType = 'scatter';\n\nclass MiniBubble extends MiniChartWithAxes {\n    constructor(container, fills, strokes) {\n        super(container, \"bubbleTooltip\");\n        const size = this.size;\n        const padding = this.padding;\n        // [x, y, radius] triples\n        const data = [\n            [[0.1, 0.3, 5], [0.5, 0.4, 7], [0.2, 0.8, 7]], [[0.8, 0.7, 5], [0.7, 0.3, 9]]\n        ];\n        const xScale = new LinearScale$1();\n        xScale.domain = [0, 1];\n        xScale.range = [padding * 2, size - padding];\n        const yScale = new LinearScale$1();\n        yScale.domain = [0, 1];\n        yScale.range = [size - padding, padding];\n        const points = [];\n        data.forEach(series => {\n            series.forEach(([x, y, radius]) => {\n                const arc = new Arc();\n                arc.strokeWidth = 1;\n                arc.centerX = xScale.convert(x);\n                arc.centerY = yScale.convert(y);\n                arc.radius = radius;\n                arc.fillOpacity = 0.7;\n                points.push(arc);\n            });\n        });\n        this.points = points;\n        this.updateColors(fills, strokes);\n        const pointsGroup = new Group();\n        pointsGroup.setClipRectInGroupCoordinateSpace(new BBox(padding, padding, size - padding * 2, size - padding * 2));\n        pointsGroup.append(this.points);\n        this.root.append(pointsGroup);\n    }\n    updateColors(fills, strokes) {\n        this.points.forEach((line, i) => {\n            line.stroke = strokes[i % strokes.length];\n            line.fill = fills[i % fills.length];\n        });\n    }\n}\nMiniBubble.chartType = 'bubble';\n\nclass MiniArea extends MiniChartWithAxes {\n    constructor(container, fills, strokes, data = MiniArea.data) {\n        super(container, \"groupedAreaTooltip\");\n        const size = this.size;\n        const padding = this.padding;\n        const xScale = new BandScale$5();\n        xScale.domain = [0, 1, 2];\n        xScale.paddingInner = 1;\n        xScale.paddingOuter = 0;\n        xScale.range = [padding + 0.5, size - padding - 0.5];\n        const yScale = new LinearScale$1();\n        yScale.domain = [0, 6];\n        yScale.range = [size - padding + 0.5, padding];\n        const xCount = data.length;\n        const last = xCount * 2 - 1;\n        const pathData = [];\n        const bottomY = yScale.convert(0);\n        data.forEach((datum, i) => {\n            const x = xScale.convert(i);\n            datum.forEach((yDatum, j) => {\n                const y = yScale.convert(yDatum);\n                const points = pathData[j] || (pathData[j] = []);\n                points[i] = {\n                    x,\n                    y\n                };\n                points[last - i] = {\n                    x,\n                    y: bottomY\n                };\n            });\n        });\n        this.areas = pathData.reverse().map(points => {\n            const area = new Path();\n            area.strokeWidth = 1;\n            area.fillOpacity = 0.7;\n            const path = area.path;\n            path.clear();\n            points.forEach((point, i) => path[i > 0 ? \"lineTo\" : \"moveTo\"](point.x, point.y));\n            path.closePath();\n            return area;\n        });\n        this.updateColors(fills, strokes);\n        this.root.append(this.areas);\n    }\n    updateColors(fills, strokes) {\n        this.areas.forEach((area, i) => {\n            area.fill = fills[i];\n            area.stroke = strokes[i];\n        });\n    }\n}\nMiniArea.chartType = 'area';\nMiniArea.data = [\n    [1, 3, 5],\n    [2, 6, 4],\n    [5, 3, 1]\n];\n\nclass MiniStackedArea extends MiniChartWithAxes {\n    constructor(container, fills, strokes, data = MiniStackedArea.data, tooltipName = \"stackedAreaTooltip\") {\n        super(container, tooltipName);\n        const size = this.size;\n        const padding = this.padding;\n        const xScale = new BandScale$5();\n        xScale.domain = [0, 1, 2];\n        xScale.paddingInner = 1;\n        xScale.paddingOuter = 0;\n        xScale.range = [padding + 0.5, size - padding - 0.5];\n        const yScale = new LinearScale$1();\n        yScale.domain = [0, 16];\n        yScale.range = [size - padding + 0.5, padding + 0.5];\n        const xCount = data.length;\n        const last = xCount * 2 - 1;\n        const pathData = [];\n        data.forEach((datum, i) => {\n            const x = xScale.convert(i);\n            let total = 0;\n            datum.forEach((yDatum, j) => {\n                const y = yScale.convert(total + yDatum);\n                const points = pathData[j] || (pathData[j] = []);\n                points[i] = {\n                    x,\n                    y\n                };\n                points[last - i] = {\n                    x,\n                    y: yScale.convert(total) // bottom y\n                };\n                total += yDatum;\n            });\n        });\n        this.areas = pathData.map(points => {\n            const area = new Path();\n            area.strokeWidth = 1;\n            const path = area.path;\n            path.clear();\n            points.forEach((point, i) => path[i > 0 ? \"lineTo\" : \"moveTo\"](point.x, point.y));\n            path.closePath();\n            return area;\n        });\n        this.updateColors(fills, strokes);\n        this.root.append(this.areas);\n    }\n    updateColors(fills, strokes) {\n        this.areas.forEach((area, i) => {\n            area.fill = fills[i];\n            area.stroke = strokes[i];\n        });\n    }\n}\nMiniStackedArea.chartType = 'stackedArea';\nMiniStackedArea.data = [\n    [2, 3, 2],\n    [3, 6, 5],\n    [6, 2, 2]\n];\n\nclass MiniNormalizedArea extends MiniStackedArea {\n    constructor(container, fills, strokes, data = MiniNormalizedArea.data) {\n        super(container, fills, strokes, data, \"normalizedAreaTooltip\");\n    }\n}\nMiniNormalizedArea.chartType = 'normalizedArea';\nMiniNormalizedArea.data = MiniStackedArea.data.map(stack => {\n    const sum = stack.reduce((p, c) => p + c, 0);\n    return stack.map(v => v / sum * 16);\n});\n\nclass MiniHistogram extends MiniChartWithAxes {\n    constructor(container, fills, strokes) {\n        super(container, \"histogramTooltip\");\n        const padding = this.padding;\n        const size = this.size;\n        // approx normal curve\n        const data = [2, 5, 11, 13, 10, 6, 1];\n        const xScale = new LinearScale$1();\n        xScale.domain = [0, data.length];\n        xScale.range = [padding, size - padding];\n        const yScale = new LinearScale$1();\n        yScale.domain = [0, data.reduce((a, b) => Math.max(a, b), 0)];\n        yScale.range = [size - padding, padding];\n        const bottom = yScale.convert(0);\n        this.bars = data.map((datum, i) => {\n            const top = yScale.convert(datum);\n            const left = xScale.convert(i);\n            const right = xScale.convert(i + 1);\n            const rect = new Rect();\n            rect.x = left;\n            rect.y = top;\n            rect.width = right - left;\n            rect.height = bottom - top;\n            rect.strokeWidth = 1;\n            rect.crisp = true;\n            return rect;\n        });\n        this.updateColors(fills, strokes);\n        this.root.append(this.bars);\n    }\n    updateColors([fill], [stroke]) {\n        this.bars.forEach(bar => {\n            bar.fill = fill;\n            bar.stroke = stroke;\n        });\n    }\n}\nMiniHistogram.chartType = 'histogram';\n\nclass MiniColumnLineCombo extends MiniChartWithAxes {\n    constructor(container, fills, strokes) {\n        super(container, \"columnLineComboTooltip\");\n        this.columnData = [3, 4];\n        this.lineData = [\n            [5, 4, 6, 5, 4]\n        ];\n        const { root, columnData, lineData, size, padding } = this;\n        this.columns = createColumnRects({\n            stacked: false,\n            root,\n            data: columnData,\n            size,\n            padding,\n            xScaleDomain: [0, 1],\n            yScaleDomain: [0, 4],\n            xScalePadding: 0.5\n        });\n        root.append(this.columns);\n        this.lines = createLinePaths(root, lineData, size, padding);\n        this.updateColors(fills, strokes);\n    }\n    updateColors(fills, strokes) {\n        this.columns.forEach((bar, i) => {\n            bar.fill = fills[i];\n            bar.stroke = strokes[i];\n        });\n        this.lines.forEach((line, i) => {\n            line.stroke = fills[i + 2];\n        });\n    }\n}\nMiniColumnLineCombo.chartType = 'columnLineCombo';\n\nclass MiniAreaColumnCombo extends MiniChartWithAxes {\n    constructor(container, fills, strokes) {\n        super(container, \"areaColumnComboTooltip\");\n        this.columnData = [3, 4.5];\n        this.areaData = [\n            [5, 4, 6, 5, 4],\n        ];\n        const { root, columnData, areaData, size, padding } = this;\n        this.columns = createColumnRects({\n            stacked: false,\n            root,\n            data: columnData,\n            size,\n            padding,\n            xScaleDomain: [0, 1],\n            yScaleDomain: [0, 6],\n            xScalePadding: 0.5,\n        });\n        // scale for area series\n        const xScale = new BandScale$5();\n        xScale.range = [padding, size - padding];\n        xScale.domain = [0, 1, 2, 3, 4];\n        xScale.paddingInner = 1;\n        xScale.paddingOuter = 0;\n        const yScale = new LinearScale$1();\n        yScale.range = [size - padding, padding];\n        yScale.domain = [0, 6];\n        const pathData = [];\n        const yZero = yScale.convert(0);\n        const firstX = xScale.convert(0);\n        areaData.forEach((series, i) => {\n            const points = pathData[i] || (pathData[i] = []);\n            series.forEach((data, j) => {\n                const yDatum = data;\n                const xDatum = j;\n                const x = xScale.convert(xDatum);\n                const y = yScale.convert(yDatum);\n                points[j] = { x, y };\n            });\n            const lastX = xScale.convert(series.length - 1);\n            pathData[i].push({\n                x: lastX,\n                y: yZero\n            }, {\n                x: firstX,\n                y: yZero\n            });\n        });\n        this.areas = pathData.map((points) => {\n            const area = new Path();\n            area.strokeWidth = 1;\n            area.fillOpacity = 0.8;\n            const path = area.path;\n            points.forEach((point, i) => path[i > 0 ? 'lineTo' : 'moveTo'](point.x, point.y));\n            return area;\n        });\n        root.append(this.areas);\n        root.append([].concat.apply([], this.columns));\n        this.updateColors(fills, strokes);\n    }\n    updateColors(fills, strokes) {\n        this.areas.forEach((area, i) => {\n            area.fill = fills[i];\n            area.stroke = strokes[i];\n        });\n        this.columns.forEach((bar, i) => {\n            bar.fill = fills[i + 1];\n            bar.stroke = strokes[i + 1];\n        });\n    }\n}\nMiniAreaColumnCombo.chartType = 'areaColumnCombo';\n\nclass MiniCustomCombo extends MiniChart {\n    constructor(container, fills, strokes) {\n        super(container, 'customComboTooltip');\n        this.columnData = [3, 4];\n        this.lineData = [[5, 4, 6, 5, 4]];\n        const { root, columnData, lineData, size, padding } = this;\n        this.columns = createColumnRects({\n            stacked: false,\n            root,\n            data: columnData,\n            size,\n            padding,\n            xScaleDomain: [0, 1],\n            yScaleDomain: [0, 4],\n            xScalePadding: 0.5,\n        });\n        root.append(this.columns);\n        this.lines = createLinePaths(root, lineData, size, padding);\n        const axisStroke = 'grey';\n        const axisOvershoot = 3;\n        const leftAxis = new Line();\n        leftAxis.x1 = padding;\n        leftAxis.y1 = padding;\n        leftAxis.x2 = padding;\n        leftAxis.y2 = size - padding + axisOvershoot;\n        leftAxis.stroke = axisStroke;\n        const bottomAxis = new Line();\n        bottomAxis.x1 = padding - axisOvershoot + 1;\n        bottomAxis.y1 = size - padding;\n        bottomAxis.x2 = size - padding + 1;\n        bottomAxis.y2 = size - padding;\n        bottomAxis.stroke = axisStroke;\n        const penIcon = new Path();\n        this.buildPenIconPath(penIcon);\n        penIcon.fill = 'whitesmoke';\n        penIcon.stroke = 'darkslategrey';\n        penIcon.strokeWidth = 1;\n        root.append([bottomAxis, leftAxis, penIcon]);\n        this.updateColors(fills, strokes);\n    }\n    updateColors(fills, strokes) {\n        this.columns.forEach((bar, i) => {\n            bar.fill = fills[i];\n            bar.stroke = strokes[i];\n        });\n        this.lines.forEach((line, i) => {\n            line.stroke = fills[i + 2];\n        });\n    }\n    buildPenIconPath(penIcon) {\n        const { path } = penIcon;\n        path.moveTo(25.76, 43.46);\n        path.lineTo(31.27, 48.53);\n        path.moveTo(49.86, 22);\n        path.lineTo(49.86, 22);\n        path.cubicCurveTo(49.01994659053345, 21.317514933510974, 47.89593834348529, 21.09645997825817, 46.86, 21.41);\n        path.lineTo(46.86, 21.41);\n        path.cubicCurveTo(45.55460035985361, 21.77260167850787, 44.38777081121966, 22.517979360321792, 43.51, 23.55);\n        path.lineTo(25.51, 43.8);\n        path.lineTo(25.43, 43.89);\n        path.lineTo(23.01, 51.89);\n        path.lineTo(22.83, 52.46);\n        path.lineTo(31.02, 48.86);\n        path.lineTo(49.02, 28.52);\n        path.lineTo(49.02, 28.52);\n        path.cubicCurveTo(49.940716461596224, 27.521914221246085, 50.54302631059587, 26.2720342455763, 50.75, 24.93);\n        path.lineTo(50.75, 24.93);\n        path.cubicCurveTo(50.95363374988308, 23.866379846512814, 50.62080640232334, 22.77066734274871, 49.86, 22.0);\n        path.closePath();\n        path.moveTo(41.76, 25.5);\n        path.lineTo(47.34, 30.5);\n        path.moveTo(40.74, 26.65);\n        path.lineTo(46.25, 31.71);\n    }\n}\nMiniCustomCombo.chartType = 'customCombo';\n\nvar __decorate$W = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst miniChartMapping = {\n    columnGroup: {\n        column: MiniColumn,\n        stackedColumn: MiniStackedColumn,\n        normalizedColumn: MiniNormalizedColumn\n    },\n    barGroup: {\n        bar: MiniBar,\n        stackedBar: MiniStackedBar,\n        normalizedBar: MiniNormalizedBar\n    },\n    pieGroup: {\n        pie: MiniPie,\n        doughnut: MiniDoughnut\n    },\n    lineGroup: {\n        line: MiniLine\n    },\n    scatterGroup: {\n        scatter: MiniScatter,\n        bubble: MiniBubble\n    },\n    areaGroup: {\n        area: MiniArea,\n        stackedArea: MiniStackedArea,\n        normalizedArea: MiniNormalizedArea\n    },\n    histogramGroup: {\n        histogram: MiniHistogram\n    },\n    combinationGroup: {\n        columnLineCombo: MiniColumnLineCombo,\n        areaColumnCombo: MiniAreaColumnCombo,\n        customCombo: MiniCustomCombo\n    }\n};\nclass MiniChartsContainer extends Component {\n    constructor(chartController, fills, strokes, chartGroups = DEFAULT_CHART_GROUPS) {\n        super(MiniChartsContainer.TEMPLATE);\n        this.wrappers = {};\n        this.chartController = chartController;\n        this.fills = fills;\n        this.strokes = strokes;\n        this.chartGroups = Object.assign({}, chartGroups);\n    }\n    init() {\n        // hide MiniCustomCombo if no custom combo exists\n        if (!this.chartController.customComboExists() && this.chartGroups.combinationGroup) {\n            this.chartGroups.combinationGroup = this.chartGroups.combinationGroup.filter(chartType => chartType !== 'customCombo');\n        }\n        const eGui = this.getGui();\n        Object.keys(this.chartGroups).forEach((group) => {\n            const chartGroupValues = this.chartGroups[group];\n            const groupComponent = this.createBean(new AgGroupComponent({\n                title: this.chartTranslationService.translate(group),\n                suppressEnabledCheckbox: true,\n                enabled: true,\n                suppressOpenCloseIcons: true,\n                cssIdentifier: 'charts-settings',\n                direction: 'horizontal'\n            }));\n            chartGroupValues.forEach((chartType) => {\n                var _a;\n                const MiniClass = (_a = miniChartMapping[group]) === null || _a === void 0 ? void 0 : _a[chartType];\n                if (!MiniClass) {\n                    if (miniChartMapping[group]) {\n                        _.doOnce(() => console.warn(`AG Grid - invalid chartGroupsDef config '${group}.${chartType}'`), `invalid_chartGroupsDef${chartType}_${group}`);\n                    }\n                    else {\n                        _.doOnce(() => console.warn(`AG Grid - invalid chartGroupsDef config '${group}'`), `invalid_chartGroupsDef${group}`);\n                    }\n                    return;\n                }\n                const miniWrapper = document.createElement('div');\n                miniWrapper.classList.add('ag-chart-mini-thumbnail');\n                const miniClassChartType = MiniClass.chartType;\n                this.addManagedListener(miniWrapper, 'click', () => {\n                    this.chartController.setChartType(miniClassChartType);\n                    this.updateSelectedMiniChart();\n                });\n                this.wrappers[miniClassChartType] = miniWrapper;\n                this.createBean(new MiniClass(miniWrapper, this.fills, this.strokes));\n                groupComponent.addItem(miniWrapper);\n            });\n            eGui.appendChild(groupComponent.getGui());\n        });\n        this.updateSelectedMiniChart();\n    }\n    updateSelectedMiniChart() {\n        const selectedChartType = this.chartController.getChartType();\n        for (const miniChartType in this.wrappers) {\n            const miniChart = this.wrappers[miniChartType];\n            const selected = miniChartType === selectedChartType;\n            miniChart.classList.toggle('ag-selected', selected);\n        }\n    }\n}\nMiniChartsContainer.TEMPLATE = `<div class=\"ag-chart-settings-mini-wrapper\"></div>`;\n__decorate$W([\n    Autowired('chartTranslationService')\n], MiniChartsContainer.prototype, \"chartTranslationService\", void 0);\n__decorate$W([\n    PostConstruct\n], MiniChartsContainer.prototype, \"init\", null);\n\nvar __decorate$V = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ChartSettingsPanel extends Component {\n    constructor(chartController) {\n        super(ChartSettingsPanel.TEMPLATE);\n        this.miniChartsContainers = [];\n        this.cardItems = [];\n        this.activePaletteIndex = 0;\n        this.palettes = [];\n        this.themes = [];\n        this.chartController = chartController;\n    }\n    postConstruct() {\n        this.resetPalettes();\n        this.ePrevBtn.insertAdjacentElement('afterbegin', _.createIconNoSpan('previous', this.gridOptionsService));\n        this.eNextBtn.insertAdjacentElement('afterbegin', _.createIconNoSpan('next', this.gridOptionsService));\n        this.addManagedListener(this.ePrevBtn, 'click', () => this.setActivePalette(this.getPrev(), 'left'));\n        this.addManagedListener(this.eNextBtn, 'click', () => this.setActivePalette(this.getNext(), 'right'));\n        // change the selected chart when a combo chart is modified via the data panel, i.e. the custom combo should be selected\n        this.addManagedListener(this.chartController, ChartController.EVENT_CHART_TYPE_CHANGED, () => this.resetPalettes(true));\n        this.addManagedListener(this.chartController, ChartController.EVENT_CHART_API_UPDATE, () => this.resetPalettes(true));\n        this.scrollSelectedIntoView();\n    }\n    scrollSelectedIntoView() {\n        // the panel is not immediately visible due to the slide animation, so we add a\n        // setTimeout to wait until the panel animation is over and is able to scroll\n        setTimeout(() => {\n            const isMiniChartsContainerVisible = (miniChartsContainers) => {\n                return !miniChartsContainers.getGui().classList.contains('ag-hidden');\n            };\n            const currentMiniChartContainer = this.miniChartsContainers.find(isMiniChartsContainerVisible);\n            const currentChart = currentMiniChartContainer.getGui().querySelector('.ag-selected');\n            if (currentChart) {\n                const parent = currentChart.offsetParent;\n                if (parent) {\n                    this.eMiniChartsContainer.scrollTo(0, parent.offsetTop);\n                }\n            }\n        }, 250);\n    }\n    resetPalettes(forceReset) {\n        var _a, _b;\n        const palettes = this.chartController.getPalettes();\n        const chartGroups = (_b = (_a = this.gridOptionsService.get('chartToolPanelsDef')) === null || _a === void 0 ? void 0 : _a.settingsPanel) === null || _b === void 0 ? void 0 : _b.chartGroupsDef;\n        if ((_.shallowCompare(palettes, this.palettes) && !forceReset) || this.isAnimating) {\n            return;\n        }\n        this.palettes = palettes;\n        this.themes = this.chartController.getThemes();\n        this.activePaletteIndex = this.themes.findIndex(name => name === this.chartController.getChartThemeName());\n        this.cardItems = [];\n        _.clearElement(this.eCardSelector);\n        this.destroyMiniCharts();\n        this.palettes.forEach((palette, index) => {\n            const isActivePalette = this.activePaletteIndex === index;\n            const { fills, strokes } = palette;\n            const miniChartsContainer = this.createBean(new MiniChartsContainer(this.chartController, fills, strokes, chartGroups));\n            this.miniChartsContainers.push(miniChartsContainer);\n            this.eMiniChartsContainer.appendChild(miniChartsContainer.getGui());\n            this.addCardLink(index);\n            if (isActivePalette) {\n                miniChartsContainer.updateSelectedMiniChart();\n            }\n            else {\n                miniChartsContainer.setDisplayed(false);\n            }\n        });\n        _.setDisplayed(this.eNavBar, this.palettes.length > 1);\n        _.radioCssClass(this.cardItems[this.activePaletteIndex], 'ag-selected', 'ag-not-selected');\n    }\n    addCardLink(index) {\n        const link = document.createElement('div');\n        link.classList.add('ag-chart-settings-card-item');\n        this.addManagedListener(link, 'click', () => {\n            this.setActivePalette(index, index < this.activePaletteIndex ? 'left' : 'right');\n        });\n        this.eCardSelector.appendChild(link);\n        this.cardItems.push(link);\n    }\n    getPrev() {\n        let prev = this.activePaletteIndex - 1;\n        if (prev < 0) {\n            prev = this.palettes.length - 1;\n        }\n        return prev;\n    }\n    getNext() {\n        let next = this.activePaletteIndex + 1;\n        if (next >= this.palettes.length) {\n            next = 0;\n        }\n        return next;\n    }\n    setActivePalette(index, animationDirection) {\n        if (this.isAnimating || this.activePaletteIndex === index) {\n            return;\n        }\n        _.radioCssClass(this.cardItems[index], 'ag-selected', 'ag-not-selected');\n        const currentPalette = this.miniChartsContainers[this.activePaletteIndex];\n        const currentGui = currentPalette.getGui();\n        const futurePalette = this.miniChartsContainers[index];\n        const nextGui = futurePalette.getGui();\n        currentPalette.updateSelectedMiniChart();\n        futurePalette.updateSelectedMiniChart();\n        const multiplier = animationDirection === 'left' ? -1 : 1;\n        const final = nextGui.style.left = `${(_.getAbsoluteWidth(this.getGui()) * multiplier)}px`;\n        this.activePaletteIndex = index;\n        this.isAnimating = true;\n        const animatingClass = 'ag-animating';\n        futurePalette.setDisplayed(true);\n        currentPalette.addCssClass(animatingClass);\n        futurePalette.addCssClass(animatingClass);\n        this.chartController.setChartThemeName(this.themes[index]);\n        window.setTimeout(() => {\n            currentGui.style.left = `${-parseFloat(final)}px`;\n            nextGui.style.left = '0px';\n        }, 0);\n        window.setTimeout(() => {\n            this.isAnimating = false;\n            currentPalette.removeCssClass(animatingClass);\n            futurePalette.removeCssClass(animatingClass);\n            currentPalette.setDisplayed(false);\n        }, 300);\n    }\n    destroyMiniCharts() {\n        _.clearElement(this.eMiniChartsContainer);\n        this.miniChartsContainers = this.destroyBeans(this.miniChartsContainers);\n    }\n    destroy() {\n        this.destroyMiniCharts();\n        super.destroy();\n    }\n}\nChartSettingsPanel.TEMPLATE = `<div class=\"ag-chart-settings-wrapper\">\n            <div ref=\"eMiniChartsContainer\" class=\"ag-chart-settings-mini-charts-container ag-scrollable-container\"></div>\n            <div ref=\"eNavBar\" class=\"ag-chart-settings-nav-bar\">\n                <div ref=\"ePrevBtn\" class=\"ag-chart-settings-prev\">\n                    <button type=\"button\" class=\"ag-button ag-chart-settings-prev-button\"></button>\n                </div>\n                <div ref=\"eCardSelector\" class=\"ag-chart-settings-card-selector\"></div>\n                <div ref=\"eNextBtn\" class=\"ag-chart-settings-next\">\n                    <button type=\"button\" class=\"ag-button ag-chart-settings-next-button\"></button>\n                </div>\n            </div>\n        </div>`;\n__decorate$V([\n    Autowired('resizeObserverService')\n], ChartSettingsPanel.prototype, \"resizeObserverService\", void 0);\n__decorate$V([\n    RefSelector('eMiniChartsContainer')\n], ChartSettingsPanel.prototype, \"eMiniChartsContainer\", void 0);\n__decorate$V([\n    RefSelector('eNavBar')\n], ChartSettingsPanel.prototype, \"eNavBar\", void 0);\n__decorate$V([\n    RefSelector('eCardSelector')\n], ChartSettingsPanel.prototype, \"eCardSelector\", void 0);\n__decorate$V([\n    RefSelector('ePrevBtn')\n], ChartSettingsPanel.prototype, \"ePrevBtn\", void 0);\n__decorate$V([\n    RefSelector('eNextBtn')\n], ChartSettingsPanel.prototype, \"eNextBtn\", void 0);\n__decorate$V([\n    PostConstruct\n], ChartSettingsPanel.prototype, \"postConstruct\", null);\n\nvar __decorate$U = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass TabbedChartMenu extends Component {\n    constructor(params) {\n        super();\n        this.tabs = [];\n        const { controller, panels, chartOptionsService } = params;\n        this.chartController = controller;\n        this.chartOptionsService = chartOptionsService;\n        this.panels = panels;\n    }\n    init() {\n        this.panels.forEach(panel => {\n            const panelType = panel.replace('chart', '').toLowerCase();\n            const { comp, tab } = this.createTab(panel, panelType, this.getPanelClass(panelType));\n            this.tabs.push(tab);\n            this.addDestroyFunc(() => this.destroyBean(comp));\n        });\n        this.tabbedLayout = new TabbedLayout({\n            items: this.tabs,\n            cssClass: 'ag-chart-tabbed-menu',\n            keepScrollPosition: true\n        });\n        this.getContext().createBean(this.tabbedLayout);\n    }\n    createTab(name, title, TabPanelClass) {\n        const eWrapperDiv = document.createElement('div');\n        eWrapperDiv.classList.add('ag-chart-tab', `ag-chart-${title}`);\n        const comp = new TabPanelClass(this.chartController, this.chartOptionsService);\n        this.getContext().createBean(comp);\n        eWrapperDiv.appendChild(comp.getGui());\n        const titleEl = document.createElement('div');\n        const translatedTitle = this.chartTranslationService.translate(title);\n        titleEl.innerText = translatedTitle;\n        return {\n            comp,\n            tab: {\n                title: titleEl,\n                titleLabel: translatedTitle,\n                bodyPromise: AgPromise.resolve(eWrapperDiv),\n                getScrollableContainer: () => {\n                    const scrollableContainer = eWrapperDiv.querySelector('.ag-scrollable-container');\n                    return (scrollableContainer || eWrapperDiv);\n                },\n                name\n            }\n        };\n    }\n    showTab(tab) {\n        const tabItem = this.tabs[tab];\n        this.tabbedLayout.showItem(tabItem);\n    }\n    getGui() {\n        return this.tabbedLayout && this.tabbedLayout.getGui();\n    }\n    destroy() {\n        if (this.parentComponent && this.parentComponent.isAlive()) {\n            this.destroyBean(this.parentComponent);\n        }\n        super.destroy();\n    }\n    getPanelClass(panelType) {\n        switch (panelType) {\n            case TabbedChartMenu.TAB_DATA:\n                return ChartDataPanel;\n            case TabbedChartMenu.TAB_FORMAT:\n                return FormatPanel;\n            default:\n                return ChartSettingsPanel;\n        }\n    }\n}\nTabbedChartMenu.TAB_DATA = 'data';\nTabbedChartMenu.TAB_FORMAT = 'format';\n__decorate$U([\n    Autowired('chartTranslationService')\n], TabbedChartMenu.prototype, \"chartTranslationService\", void 0);\n__decorate$U([\n    PostConstruct\n], TabbedChartMenu.prototype, \"init\", null);\n\nvar __decorate$T = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ChartMenu extends Component {\n    constructor(eChartContainer, eMenuPanelContainer, chartController, chartOptionsService) {\n        super(ChartMenu.TEMPLATE);\n        this.eChartContainer = eChartContainer;\n        this.eMenuPanelContainer = eMenuPanelContainer;\n        this.chartController = chartController;\n        this.chartOptionsService = chartOptionsService;\n        this.buttons = {\n            chartSettings: ['menu', () => this.showMenu(this.defaultPanel)],\n            chartData: ['menu', () => this.showMenu(\"chartData\")],\n            chartFormat: ['menu', () => this.showMenu(\"chartFormat\")],\n            chartLink: ['linked', e => this.toggleDetached(e)],\n            chartUnlink: ['unlinked', e => this.toggleDetached(e)],\n            chartDownload: ['save', () => this.saveChart()]\n        };\n        this.panels = [];\n        this.buttonListenersDestroyFuncs = [];\n        this.menuVisible = false;\n    }\n    postConstruct() {\n        this.createButtons();\n        this.addManagedListener(this.eventService, Events.EVENT_CHART_CREATED, (e) => {\n            var _a;\n            if (e.chartId === this.chartController.getChartId()) {\n                const showDefaultToolPanel = Boolean((_a = this.gridOptionsService.get('chartToolPanelsDef')) === null || _a === void 0 ? void 0 : _a.defaultToolPanel);\n                if (showDefaultToolPanel) {\n                    this.showMenu(this.defaultPanel, false);\n                }\n            }\n        });\n        this.refreshMenuClasses();\n        if (!this.gridOptionsService.is('suppressChartToolPanelsButton') && this.panels.length > 0) {\n            this.getGui().classList.add('ag-chart-tool-panel-button-enable');\n            this.addManagedListener(this.eHideButton, 'click', this.toggleMenu.bind(this));\n        }\n        this.addManagedListener(this.chartController, ChartController.EVENT_CHART_API_UPDATE, this.createButtons.bind(this));\n    }\n    isVisible() {\n        return this.menuVisible;\n    }\n    getExtraPaddingDirections() {\n        const topItems = ['chartLink', 'chartUnlink', 'chartDownload'];\n        const rightItems = ['chartSettings', 'chartData', 'chartFormat'];\n        const result = [];\n        if (topItems.some(v => this.chartToolbarOptions.includes(v))) {\n            result.push('top');\n        }\n        if (rightItems.some(v => this.chartToolbarOptions.includes(v))) {\n            result.push(this.gridOptionsService.is('enableRtl') ? 'left' : 'right');\n        }\n        return result;\n    }\n    getToolbarOptions() {\n        var _a, _b, _c;\n        const useChartToolPanelCustomisation = Boolean(this.gridOptionsService.get('chartToolPanelsDef'));\n        if (useChartToolPanelCustomisation) {\n            const defaultChartToolbarOptions = [\n                this.chartController.isChartLinked() ? 'chartLink' : 'chartUnlink',\n                'chartDownload'\n            ];\n            const toolbarItemsFunc = this.gridOptionsService.getCallback('getChartToolbarItems');\n            const params = {\n                defaultItems: defaultChartToolbarOptions\n            };\n            let chartToolbarOptions = toolbarItemsFunc\n                ? toolbarItemsFunc(params).filter(option => {\n                    if (!CHART_TOOLBAR_ALLOW_LIST.includes(option)) {\n                        const msg = CHART_TOOL_PANEL_ALLOW_LIST.includes(option)\n                            ? `AG Grid: '${option}' is a Chart Tool Panel option and will be ignored since 'chartToolPanelsDef' is used. Please use 'chartToolPanelsDef.panels' grid option instead`\n                            : `AG Grid: '${option}' is not a valid Chart Toolbar Option`;\n                        console.warn(msg);\n                        return false;\n                    }\n                    return true;\n                })\n                : defaultChartToolbarOptions;\n            const panelsOverride = (_b = (_a = this.gridOptionsService.get('chartToolPanelsDef')) === null || _a === void 0 ? void 0 : _a.panels) === null || _b === void 0 ? void 0 : _b.map(panel => {\n                const menuOption = CHART_TOOL_PANEL_MENU_OPTIONS[panel];\n                if (!menuOption) {\n                    console.warn(`AG Grid - invalid panel in chartToolPanelsDef.panels: '${panel}'`);\n                }\n                return menuOption;\n            }).filter(panel => Boolean(panel));\n            this.panels = panelsOverride\n                ? panelsOverride\n                : Object.values(CHART_TOOL_PANEL_MENU_OPTIONS);\n            // pivot charts use the column tool panel instead of the data panel\n            if (this.chartController.isPivotChart()) {\n                this.panels = this.panels.filter(panel => panel !== 'chartData');\n            }\n            const defaultToolPanel = (_c = this.gridOptionsService.get('chartToolPanelsDef')) === null || _c === void 0 ? void 0 : _c.defaultToolPanel;\n            this.defaultPanel = (defaultToolPanel && CHART_TOOL_PANEL_MENU_OPTIONS[defaultToolPanel]) || this.panels[0];\n            return this.panels.length > 0\n                // Only one panel is required to display menu icon in toolbar\n                ? [this.panels[0], ...chartToolbarOptions]\n                : chartToolbarOptions;\n        }\n        else { // To be deprecated in future. Toolbar options will be different to chart tool panels.\n            let tabOptions = [\n                'chartSettings',\n                'chartData',\n                'chartFormat',\n                this.chartController.isChartLinked() ? 'chartLink' : 'chartUnlink',\n                'chartDownload'\n            ];\n            const toolbarItemsFunc = this.gridOptionsService.getCallback('getChartToolbarItems');\n            if (toolbarItemsFunc) {\n                const isLegacyToolbar = this.gridOptionsService.is('suppressChartToolPanelsButton');\n                const params = {\n                    defaultItems: isLegacyToolbar ? tabOptions : CHART_TOOLBAR_ALLOW_LIST\n                };\n                tabOptions = toolbarItemsFunc(params).filter(option => {\n                    if (!this.buttons[option]) {\n                        console.warn(`AG Grid: '${option}' is not a valid Chart Toolbar Option`);\n                        return false;\n                    }\n                    // If not legacy, remove chart tool panel options here,\n                    // and add them all in one go below\n                    else if (!isLegacyToolbar && CHART_TOOL_PANEL_ALLOW_LIST.includes(option)) {\n                        const msg = `AG Grid: '${option}' is a Chart Tool Panel option and will be ignored. Please use 'chartToolPanelsDef.panels' grid option instead`;\n                        console.warn(msg);\n                        return false;\n                    }\n                    return true;\n                });\n                if (!isLegacyToolbar) {\n                    // Add all the chart tool panels, as `chartToolPanelsDef.panels`\n                    // should be used for configuration\n                    tabOptions = tabOptions.concat(CHART_TOOL_PANEL_ALLOW_LIST);\n                }\n            }\n            // pivot charts use the column tool panel instead of the data panel\n            if (this.chartController.isPivotChart()) {\n                tabOptions = tabOptions.filter(option => option !== 'chartData');\n            }\n            const ignoreOptions = ['chartUnlink', 'chartLink', 'chartDownload'];\n            this.panels = tabOptions.filter(option => ignoreOptions.indexOf(option) === -1);\n            this.defaultPanel = this.panels[0];\n            return tabOptions.filter(value => ignoreOptions.indexOf(value) !== -1 ||\n                (this.panels.length && value === this.panels[0]));\n        }\n    }\n    toggleDetached(e) {\n        const target = e.target;\n        const active = target.classList.contains('ag-icon-linked');\n        target.classList.toggle('ag-icon-linked', !active);\n        target.classList.toggle('ag-icon-unlinked', active);\n        const tooltipKey = active ? 'chartUnlinkToolbarTooltip' : 'chartLinkToolbarTooltip';\n        const tooltipTitle = this.chartTranslationService.translate(tooltipKey);\n        if (tooltipTitle) {\n            target.title = tooltipTitle;\n        }\n        this.chartController.detachChartRange();\n    }\n    createButtons() {\n        this.buttonListenersDestroyFuncs.forEach(func => func());\n        this.buttonListenersDestroyFuncs = [];\n        this.chartToolbarOptions = this.getToolbarOptions();\n        const menuEl = this.eMenu;\n        _.clearElement(menuEl);\n        this.chartToolbarOptions.forEach(button => {\n            const buttonConfig = this.buttons[button];\n            const [iconName, callback] = buttonConfig;\n            const buttonEl = _.createIconNoSpan(iconName, this.gridOptionsService, undefined, true);\n            buttonEl.classList.add('ag-chart-menu-icon');\n            const tooltipTitle = this.chartTranslationService.translate(button + 'ToolbarTooltip');\n            if (tooltipTitle && buttonEl instanceof HTMLElement) {\n                buttonEl.title = tooltipTitle;\n            }\n            this.buttonListenersDestroyFuncs.push(this.addManagedListener(buttonEl, 'click', callback));\n            menuEl.appendChild(buttonEl);\n        });\n    }\n    saveChart() {\n        const event = { type: ChartMenu.EVENT_DOWNLOAD_CHART };\n        this.dispatchEvent(event);\n    }\n    createMenuPanel(defaultTab) {\n        const width = this.environment.chartMenuPanelWidth();\n        const menuPanel = this.menuPanel = this.createBean(new AgPanel({\n            minWidth: width,\n            width,\n            height: '100%',\n            closable: true,\n            hideTitleBar: true,\n            cssIdentifier: 'chart-menu'\n        }));\n        menuPanel.setParentComponent(this);\n        this.eMenuPanelContainer.appendChild(menuPanel.getGui());\n        this.tabbedMenu = this.createBean(new TabbedChartMenu({\n            controller: this.chartController,\n            type: this.chartController.getChartType(),\n            panels: this.panels,\n            chartOptionsService: this.chartOptionsService\n        }));\n        this.addManagedListener(menuPanel, Component.EVENT_DESTROYED, () => this.destroyBean(this.tabbedMenu));\n        return new AgPromise((res) => {\n            window.setTimeout(() => {\n                menuPanel.setBodyComponent(this.tabbedMenu);\n                this.tabbedMenu.showTab(defaultTab);\n                res(menuPanel);\n                this.addManagedListener(this.eChartContainer, 'click', (event) => {\n                    if (this.getGui().contains(event.target)) {\n                        return;\n                    }\n                    if (this.menuVisible) {\n                        this.hideMenu();\n                    }\n                });\n            }, 100);\n        });\n    }\n    showContainer() {\n        if (!this.menuPanel) {\n            return;\n        }\n        this.menuVisible = true;\n        this.showParent(this.menuPanel.getWidth());\n        this.refreshMenuClasses();\n    }\n    toggleMenu() {\n        this.menuVisible ? this.hideMenu() : this.showMenu();\n    }\n    showMenu(\n    /**\n     * Menu panel to show. If empty, shows the existing menu, or creates the default menu if menu panel has not been created\n     */\n    panel, \n    /**\n     * Whether to animate the menu opening\n     */\n    animate = true) {\n        if (!animate) {\n            this.eMenuPanelContainer.classList.add('ag-no-transition');\n        }\n        if (this.menuPanel && !panel) {\n            this.showContainer();\n        }\n        else {\n            const menuPanel = panel || this.defaultPanel;\n            let tab = this.panels.indexOf(menuPanel);\n            if (tab < 0) {\n                console.warn(`AG Grid: '${panel}' is not a valid Chart Tool Panel name`);\n                tab = this.panels.indexOf(this.defaultPanel);\n            }\n            if (this.menuPanel) {\n                this.tabbedMenu.showTab(tab);\n                this.showContainer();\n            }\n            else {\n                this.createMenuPanel(tab).then(this.showContainer.bind(this));\n            }\n        }\n        if (!animate) {\n            // Wait for menu to render\n            setTimeout(() => {\n                if (!this.isAlive()) {\n                    return;\n                }\n                this.eMenuPanelContainer.classList.remove('ag-no-transition');\n            }, 500);\n        }\n    }\n    hideMenu() {\n        this.hideParent();\n        window.setTimeout(() => {\n            this.menuVisible = false;\n            this.refreshMenuClasses();\n        }, 500);\n    }\n    refreshMenuClasses() {\n        this.eChartContainer.classList.toggle('ag-chart-menu-visible', this.menuVisible);\n        this.eChartContainer.classList.toggle('ag-chart-menu-hidden', !this.menuVisible);\n        if (!this.gridOptionsService.is('suppressChartToolPanelsButton')) {\n            this.eHideButtonIcon.classList.toggle('ag-icon-contracted', this.menuVisible);\n            this.eHideButtonIcon.classList.toggle('ag-icon-expanded', !this.menuVisible);\n        }\n    }\n    showParent(width) {\n        this.eMenuPanelContainer.style.minWidth = `${width}px`;\n    }\n    hideParent() {\n        this.eMenuPanelContainer.style.minWidth = '0';\n    }\n    destroy() {\n        super.destroy();\n        if (this.menuPanel && this.menuPanel.isAlive()) {\n            this.destroyBean(this.menuPanel);\n        }\n        if (this.tabbedMenu && this.tabbedMenu.isAlive()) {\n            this.destroyBean(this.tabbedMenu);\n        }\n    }\n}\nChartMenu.EVENT_DOWNLOAD_CHART = \"downloadChart\";\nChartMenu.TEMPLATE = `<div>\n        <div class=\"ag-chart-menu\" ref=\"eMenu\"></div>\n        <button class=\"ag-button ag-chart-menu-close\" ref=\"eHideButton\">\n            <span class=\"ag-icon ag-icon-contracted\" ref=\"eHideButtonIcon\"></span>\n        </button>\n    </div>`;\n__decorate$T([\n    Autowired('chartTranslationService')\n], ChartMenu.prototype, \"chartTranslationService\", void 0);\n__decorate$T([\n    RefSelector(\"eMenu\")\n], ChartMenu.prototype, \"eMenu\", void 0);\n__decorate$T([\n    RefSelector(\"eHideButton\")\n], ChartMenu.prototype, \"eHideButton\", void 0);\n__decorate$T([\n    RefSelector(\"eHideButtonIcon\")\n], ChartMenu.prototype, \"eHideButtonIcon\", void 0);\n__decorate$T([\n    PostConstruct\n], ChartMenu.prototype, \"postConstruct\", null);\n\nvar __decorate$S = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass TitleEdit extends Component {\n    constructor(chartMenu) {\n        super(TitleEdit.TEMPLATE);\n        this.chartMenu = chartMenu;\n        this.destroyableChartListeners = [];\n        this.editing = false;\n    }\n    init() {\n        this.addManagedListener(this.getGui(), 'keydown', (e) => {\n            if (this.editing && e.key === 'Enter' && !e.shiftKey) {\n                this.handleEndEditing();\n                e.preventDefault();\n            }\n        });\n        this.addManagedListener(this.getGui(), 'input', () => {\n            if (this.editing) {\n                this.updateHeight();\n            }\n        });\n        this.addManagedListener(this.getGui(), 'blur', () => this.endEditing());\n    }\n    /* should be called when the containing component changes to a new chart proxy */\n    refreshTitle(chartController, chartOptionsService) {\n        this.chartController = chartController;\n        this.chartOptionsService = chartOptionsService;\n        for (const destroyFn of this.destroyableChartListeners) {\n            destroyFn();\n        }\n        this.destroyableChartListeners = [];\n        const chartProxy = this.chartController.getChartProxy();\n        const chart = chartProxy.getChart();\n        const canvas = chart.scene.canvas.element;\n        const destroyDbleClickListener = this.addManagedListener(canvas, 'dblclick', event => {\n            const { title } = chart;\n            if (title && title.node.containsPoint(event.offsetX, event.offsetY)) {\n                const bbox = title.node.computeBBox();\n                const xy = title.node.inverseTransformPoint(bbox.x, bbox.y);\n                this.startEditing(Object.assign(Object.assign({}, bbox), xy), canvas.width);\n            }\n        });\n        let wasInTitle = false;\n        const destroyMouseMoveListener = this.addManagedListener(canvas, 'mousemove', event => {\n            const { title } = chart;\n            const inTitle = !!(title && title.enabled && title.node.containsPoint(event.offsetX, event.offsetY));\n            if (wasInTitle !== inTitle) {\n                canvas.style.cursor = inTitle ? 'pointer' : '';\n            }\n            wasInTitle = inTitle;\n        });\n        this.destroyableChartListeners = [\n            destroyDbleClickListener,\n            destroyMouseMoveListener\n        ];\n    }\n    startEditing(titleBBox, canvasWidth) {\n        if (this.chartMenu && this.chartMenu.isVisible()) {\n            // currently, we ignore requests to edit the chart title while the chart menu is showing\n            // because the click to edit the chart will also close the chart menu, making the position\n            // of the title change.\n            return;\n        }\n        if (this.editing) {\n            return;\n        }\n        this.editing = true;\n        const minimumTargetInputWidth = 300;\n        const inputWidth = Math.max(Math.min(titleBBox.width + 20, canvasWidth), minimumTargetInputWidth);\n        const element = this.getGui();\n        element.classList.add('currently-editing');\n        const inputStyle = element.style;\n        // match style of input to title that we're editing\n        inputStyle.fontFamily = this.chartOptionsService.getChartOption('title.fontFamily');\n        inputStyle.fontWeight = this.chartOptionsService.getChartOption('title.fontWeight');\n        inputStyle.fontStyle = this.chartOptionsService.getChartOption('title.fontStyle');\n        inputStyle.fontSize = this.chartOptionsService.getChartOption('title.fontSize') + 'px';\n        inputStyle.color = this.chartOptionsService.getChartOption('title.color');\n        // populate the input with the title, unless the title is the placeholder:\n        const oldTitle = this.chartOptionsService.getChartOption('title.text');\n        const isTitlePlaceholder = oldTitle === this.chartTranslationService.translate('titlePlaceholder');\n        element.value = isTitlePlaceholder ? '' : oldTitle;\n        const oldTitleLines = oldTitle.split(/\\r?\\n/g).length;\n        inputStyle.left = Math.round(titleBBox.x + titleBBox.width / 2 - inputWidth / 2 - 1) + 'px';\n        inputStyle.top = Math.round(titleBBox.y + titleBBox.height / 2 - (oldTitleLines * this.getLineHeight()) / 2 - 2) + 'px';\n        inputStyle.width = Math.round(inputWidth) + 'px';\n        inputStyle.lineHeight = this.getLineHeight() + 'px';\n        this.updateHeight();\n        element.focus();\n    }\n    updateHeight() {\n        const element = this.getGui();\n        // The element should cover the title and provide enough space for the new one.\n        const oldTitleLines = this.chartOptionsService.getChartOption('title.text').split(/\\r?\\n/g).length;\n        const currentTitleLines = element.value.split(/\\r?\\n/g).length;\n        element.style.height = (Math.round(Math.max(oldTitleLines, currentTitleLines) * this.getLineHeight()) + 4) + 'px';\n    }\n    getLineHeight() {\n        const fixedLineHeight = this.chartOptionsService.getChartOption('title.lineHeight');\n        if (fixedLineHeight) {\n            return parseInt(fixedLineHeight);\n        }\n        return Math.round(parseInt(this.chartOptionsService.getChartOption('title.fontSize')) * 1.2);\n    }\n    handleEndEditing() {\n        // special handling to avoid flicker caused by delay when swapping old and new titles\n        // 1 - store current title color\n        const titleColor = this.chartOptionsService.getChartOption('title.color');\n        // 2 - hide title by making it transparent\n        const transparentColor = 'rgba(0, 0, 0, 0)';\n        this.chartOptionsService.setChartOption('title.color', transparentColor);\n        // 3 - trigger 'end editing' - this will update the chart with the new title\n        this.chartOptionsService.awaitChartOptionUpdate(() => this.endEditing());\n        // 4 - restore title color to its original value\n        this.chartOptionsService.awaitChartOptionUpdate(() => {\n            this.chartOptionsService.setChartOption('title.color', titleColor);\n        });\n    }\n    endEditing() {\n        if (!this.editing) {\n            return;\n        }\n        this.editing = false;\n        const value = this.getGui().value;\n        if (value && value.trim() !== '') {\n            this.chartOptionsService.setChartOption('title.text', value);\n            this.chartOptionsService.setChartOption('title.enabled', true);\n        }\n        else {\n            this.chartOptionsService.setChartOption('title.text', '');\n            this.chartOptionsService.setChartOption('title.enabled', false);\n        }\n        this.getGui().classList.remove('currently-editing');\n        // await chart updates so `chartTitleEdit` event consumers can read the new state correctly\n        this.chartOptionsService.awaitChartOptionUpdate(() => {\n            this.eventService.dispatchEvent({ type: 'chartTitleEdit' });\n        });\n    }\n}\nTitleEdit.TEMPLATE = `<textarea\n             class=\"ag-chart-title-edit\"\n             style=\"padding:0; border:none; border-radius: 0; min-height: 0; text-align: center; resize: none;\" />\n        `;\n__decorate$S([\n    Autowired('chartTranslationService')\n], TitleEdit.prototype, \"chartTranslationService\", void 0);\n__decorate$S([\n    PostConstruct\n], TitleEdit.prototype, \"init\", null);\n\nvar __decorate$R = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ChartDatasource extends BeanStub {\n    getData(params) {\n        if (params.crossFiltering) {\n            if (params.grouping) {\n                console.warn(\"AG Grid: crossing filtering with row grouping is not supported.\");\n                return { chartData: [], columnNames: {} };\n            }\n            if (!this.gridOptionsService.isRowModelType('clientSide')) {\n                console.warn(\"AG Grid: crossing filtering is only supported in the client side row model.\");\n                return { chartData: [], columnNames: {} };\n            }\n        }\n        const isServerSide = this.gridOptionsService.isRowModelType('serverSide');\n        if (isServerSide && params.pivoting) {\n            this.updatePivotKeysForSSRM();\n        }\n        const result = this.extractRowsFromGridRowModel(params);\n        result.chartData = this.aggregateRowsByDimension(params, result.chartData);\n        return result;\n    }\n    extractRowsFromGridRowModel(params) {\n        let extractedRowData = [];\n        const columnNames = {};\n        // maps used to keep track of expanded groups that need to be removed\n        const groupNodeIndexes = {};\n        const groupsToRemove = {};\n        // only used when cross filtering\n        let filteredNodes = {};\n        let allRowNodes = [];\n        let numRows;\n        if (params.crossFiltering) {\n            filteredNodes = this.getFilteredRowNodes();\n            allRowNodes = this.getAllRowNodes();\n            numRows = allRowNodes.length;\n        }\n        else {\n            // make sure enough rows in range to chart. if user filters and less rows, then end row will be\n            // the last displayed row, not where the range ends.\n            const modelLastRow = this.gridRowModel.getRowCount() - 1;\n            const rangeLastRow = params.endRow >= 0 ? Math.min(params.endRow, modelLastRow) : modelLastRow;\n            numRows = rangeLastRow - params.startRow + 1;\n        }\n        for (let i = 0; i < numRows; i++) {\n            const data = {};\n            const rowNode = params.crossFiltering ? allRowNodes[i] : this.gridRowModel.getRow(i + params.startRow);\n            // first get data for dimensions columns\n            params.dimensionCols.forEach(col => {\n                const colId = col.colId;\n                const column = this.columnModel.getGridColumn(colId);\n                if (column) {\n                    const valueObject = this.valueService.getValue(column, rowNode);\n                    // when grouping we also need to build up multi category labels for charts\n                    if (params.grouping) {\n                        const valueString = valueObject && valueObject.toString ? String(valueObject.toString()) : '';\n                        // traverse parents to extract group label path\n                        const labels = ChartDatasource.getGroupLabels(rowNode, valueString);\n                        data[colId] = {\n                            labels, toString: function () {\n                                return this.labels.filter((l) => !!l).reverse().join(' - ');\n                            }\n                        };\n                        // keep track of group node indexes, so they can be padded when other groups are expanded\n                        if (rowNode.group) {\n                            groupNodeIndexes[labels.toString()] = i;\n                        }\n                        // if node (group or leaf) has parents then it is expanded and should be removed\n                        const groupKey = labels.slice(1, labels.length).toString();\n                        if (groupKey) {\n                            groupsToRemove[groupKey] = groupNodeIndexes[groupKey];\n                        }\n                    }\n                    else {\n                        // leaf nodes can be directly added to dimension columns\n                        data[colId] = valueObject;\n                    }\n                }\n                else {\n                    // introduce a default category when no dimensions exist with a value based off row index (+1)\n                    data[ChartDataModel.DEFAULT_CATEGORY] = i + 1;\n                }\n            });\n            // then get data for value columns\n            params.valueCols.forEach(col => {\n                let columnNamesArr = [];\n                // pivot keys should be added first\n                const pivotKeys = col.getColDef().pivotKeys;\n                if (pivotKeys) {\n                    columnNamesArr = pivotKeys.slice();\n                }\n                // then add column header name to results\n                const headerName = col.getColDef().headerName;\n                if (headerName) {\n                    columnNamesArr.push(headerName);\n                }\n                // add array of column names to results\n                if (columnNamesArr.length > 0) {\n                    columnNames[col.getId()] = columnNamesArr;\n                }\n                const colId = col.getColId();\n                if (params.crossFiltering) {\n                    const filteredOutColId = colId + '-filtered-out';\n                    // add data value to value column\n                    const value = this.valueService.getValue(col, rowNode);\n                    const actualValue = value != null && typeof value.toNumber === 'function' ? value.toNumber() : value;\n                    if (filteredNodes[rowNode.id]) {\n                        data[colId] = actualValue;\n                        data[filteredOutColId] = params.aggFunc || params.isScatter ? undefined : 0;\n                    }\n                    else {\n                        data[colId] = params.aggFunc || params.isScatter ? undefined : 0;\n                        data[filteredOutColId] = actualValue;\n                    }\n                }\n                else {\n                    // add data value to value column\n                    let value = this.valueService.getValue(col, rowNode);\n                    // aggregated value\n                    if (value && value.hasOwnProperty('toString')) {\n                        value = parseFloat(value.toString());\n                    }\n                    data[colId] = value != null && typeof value.toNumber === 'function' ? value.toNumber() : value;\n                }\n            });\n            // row data from footer nodes should not be included in charts\n            if (rowNode.footer) {\n                // 'stamping' data as footer to avoid impacting previously calculated `groupIndexesToRemove` and will\n                // be removed from the results along with any expanded group nodes\n                data.footer = true;\n            }\n            // add data to results\n            extractedRowData.push(data);\n        }\n        if (params.grouping) {\n            const groupIndexesToRemove = _.values(groupsToRemove);\n            const filterFunc = (data, index) => !data.footer && !_.includes(groupIndexesToRemove, index);\n            extractedRowData = extractedRowData.filter(filterFunc);\n        }\n        return { chartData: extractedRowData, columnNames };\n    }\n    aggregateRowsByDimension(params, dataFromGrid) {\n        const dimensionCols = params.dimensionCols;\n        if (!params.aggFunc || dimensionCols.length === 0) {\n            return dataFromGrid;\n        }\n        const lastCol = _.last(dimensionCols);\n        const lastColId = lastCol && lastCol.colId;\n        const map = {};\n        const dataAggregated = [];\n        dataFromGrid.forEach(data => {\n            let currentMap = map;\n            dimensionCols.forEach(col => {\n                const colId = col.colId;\n                const key = data[colId];\n                if (colId === lastColId) {\n                    let groupItem = currentMap[key];\n                    if (!groupItem) {\n                        groupItem = { __children: [] };\n                        dimensionCols.forEach(dimCol => {\n                            const dimColId = dimCol.colId;\n                            groupItem[dimColId] = data[dimColId];\n                        });\n                        currentMap[key] = groupItem;\n                        dataAggregated.push(groupItem);\n                    }\n                    groupItem.__children.push(data);\n                }\n                else {\n                    // map of maps\n                    if (!currentMap[key]) {\n                        currentMap[key] = {};\n                    }\n                    currentMap = currentMap[key];\n                }\n            });\n        });\n        if (ModuleRegistry.assertRegistered(ModuleNames.RowGroupingModule, 'Charting Aggregation', this.context.getGridId())) {\n            dataAggregated.forEach(groupItem => params.valueCols.forEach(col => {\n                if (params.crossFiltering) {\n                    params.valueCols.forEach(valueCol => {\n                        const colId = valueCol.getColId();\n                        // filtered data\n                        const dataToAgg = groupItem.__children\n                            .filter((child) => typeof child[colId] !== 'undefined')\n                            .map((child) => child[colId]);\n                        let aggResult = this.aggregationStage.aggregateValues(dataToAgg, params.aggFunc);\n                        groupItem[valueCol.getId()] = aggResult && typeof aggResult.value !== 'undefined' ? aggResult.value : aggResult;\n                        // filtered out data\n                        const filteredOutColId = `${colId}-filtered-out`;\n                        const dataToAggFiltered = groupItem.__children\n                            .filter((child) => typeof child[filteredOutColId] !== 'undefined')\n                            .map((child) => child[filteredOutColId]);\n                        let aggResultFiltered = this.aggregationStage.aggregateValues(dataToAggFiltered, params.aggFunc);\n                        groupItem[filteredOutColId] = aggResultFiltered && typeof aggResultFiltered.value !== 'undefined' ? aggResultFiltered.value : aggResultFiltered;\n                    });\n                }\n                else {\n                    const dataToAgg = groupItem.__children.map((child) => child[col.getId()]);\n                    let aggResult = 0;\n                    if (ModuleRegistry.assertRegistered(ModuleNames.RowGroupingModule, 'Charting Aggregation', this.context.getGridId())) {\n                        aggResult = this.aggregationStage.aggregateValues(dataToAgg, params.aggFunc);\n                    }\n                    groupItem[col.getId()] = aggResult && typeof aggResult.value !== 'undefined' ? aggResult.value : aggResult;\n                }\n            }));\n        }\n        return dataAggregated;\n    }\n    updatePivotKeysForSSRM() {\n        const secondaryColumns = this.columnModel.getSecondaryColumns();\n        if (!secondaryColumns) {\n            return;\n        }\n        // we don't know what the application will use for the pivot key separator (i.e. '_' or '|' ) as the\n        // secondary columns are provided to grid by the application via columnApi.setSecondaryColumns()\n        const pivotKeySeparator = this.extractPivotKeySeparator(secondaryColumns);\n        // `pivotKeys` is not used by the SSRM for pivoting, so it is safe to reuse this colDef property. This way\n        // the same logic can be used for CSRM and SSRM to extract legend names in extractRowsFromGridRowModel()\n        secondaryColumns.forEach(col => {\n            if (pivotKeySeparator === '') {\n                col.getColDef().pivotKeys = [];\n            }\n            else {\n                const keys = col.getColId().split(pivotKeySeparator);\n                col.getColDef().pivotKeys = keys.slice(0, keys.length - 1);\n            }\n        });\n    }\n    extractPivotKeySeparator(secondaryColumns) {\n        if (secondaryColumns.length === 0) {\n            return '';\n        }\n        const extractSeparator = (columnGroup, childId) => {\n            const groupId = columnGroup.getGroupId();\n            if (!columnGroup.getParent()) {\n                // removing groupId ('2000') from childId ('2000|Swimming') yields '|Swimming' so first char is separator\n                return childId.split(groupId)[1][0];\n            }\n            return extractSeparator(columnGroup.getParent(), groupId);\n        };\n        const firstSecondaryCol = secondaryColumns[0];\n        if (firstSecondaryCol.getParent() == null) {\n            return '';\n        }\n        return extractSeparator(firstSecondaryCol.getParent(), firstSecondaryCol.getColId());\n    }\n    static getGroupLabels(rowNode, initialLabel) {\n        const labels = [initialLabel];\n        while (rowNode && rowNode.level !== 0) {\n            rowNode = rowNode.parent;\n            if (rowNode) {\n                labels.push(rowNode.key);\n            }\n        }\n        return labels;\n    }\n    getFilteredRowNodes() {\n        const filteredNodes = {};\n        this.gridRowModel.forEachNodeAfterFilterAndSort((rowNode) => {\n            filteredNodes[rowNode.id] = rowNode;\n        });\n        return filteredNodes;\n    }\n    getAllRowNodes() {\n        let allRowNodes = [];\n        this.gridRowModel.forEachNode((rowNode) => {\n            allRowNodes.push(rowNode);\n        });\n        return this.sortRowNodes(allRowNodes);\n    }\n    sortRowNodes(rowNodes) {\n        const sortOptions = this.sortController.getSortOptions();\n        const noSort = !sortOptions || sortOptions.length == 0;\n        if (noSort)\n            return rowNodes;\n        return this.rowNodeSorter.doFullSort(rowNodes, sortOptions);\n    }\n}\n__decorate$R([\n    Autowired('rowModel')\n], ChartDatasource.prototype, \"gridRowModel\", void 0);\n__decorate$R([\n    Autowired('valueService')\n], ChartDatasource.prototype, \"valueService\", void 0);\n__decorate$R([\n    Autowired('columnModel')\n], ChartDatasource.prototype, \"columnModel\", void 0);\n__decorate$R([\n    Autowired('rowNodeSorter')\n], ChartDatasource.prototype, \"rowNodeSorter\", void 0);\n__decorate$R([\n    Autowired('sortController')\n], ChartDatasource.prototype, \"sortController\", void 0);\n__decorate$R([\n    Optional('aggregationStage')\n], ChartDatasource.prototype, \"aggregationStage\", void 0);\n\nvar __decorate$Q = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ChartColumnService = class ChartColumnService extends BeanStub {\n    getColumn(colId) {\n        return this.columnModel.getPrimaryColumn(colId);\n    }\n    getAllDisplayedColumns() {\n        return this.columnModel.getAllDisplayedColumns();\n    }\n    getColDisplayName(col) {\n        return this.columnModel.getDisplayNameForColumn(col, 'chart');\n    }\n    getRowGroupColumns() {\n        return this.columnModel.getRowGroupColumns();\n    }\n    getGroupDisplayColumns() {\n        return this.columnModel.getGroupDisplayColumns();\n    }\n    isPivotMode() {\n        return this.columnModel.isPivotMode();\n    }\n    isPivotActive() {\n        return this.columnModel.isPivotActive();\n    }\n    getChartColumns() {\n        const displayedCols = this.columnModel.getAllDisplayedColumns();\n        const dimensionCols = new Set();\n        const valueCols = new Set();\n        displayedCols.forEach(col => {\n            const colDef = col.getColDef();\n            const chartDataType = colDef.chartDataType;\n            if (chartDataType) {\n                // chart data type was specified explicitly\n                switch (chartDataType) {\n                    case 'category':\n                    case 'time':\n                        dimensionCols.add(col);\n                        return;\n                    case 'series':\n                        valueCols.add(col);\n                        return;\n                    case 'excluded':\n                        return;\n                    default:\n                        console.warn(`AG Grid: unexpected chartDataType value '${chartDataType}' supplied, instead use 'category', 'series' or 'excluded'`);\n                        break;\n                }\n            }\n            if (colDef.colId === 'ag-Grid-AutoColumn') {\n                dimensionCols.add(col);\n                return;\n            }\n            if (!col.isPrimary()) {\n                valueCols.add(col);\n                return;\n            }\n            // if 'chartDataType' is not provided then infer type based data contained in first row\n            (this.isNumberCol(col) ? valueCols : dimensionCols).add(col);\n        });\n        return { dimensionCols, valueCols };\n    }\n    isNumberCol(col) {\n        if (col.getColId() === 'ag-Grid-AutoColumn') {\n            return false;\n        }\n        const row = this.rowRenderer.getRowNode({ rowIndex: 0, rowPinned: null });\n        if (!row) {\n            return false;\n        }\n        let cellValue = this.valueService.getValue(col, row);\n        if (cellValue == null) {\n            cellValue = this.extractLeafData(row, col);\n        }\n        if (cellValue != null && typeof cellValue.toNumber === 'function') {\n            cellValue = cellValue.toNumber();\n        }\n        return typeof cellValue === 'number';\n    }\n    extractLeafData(row, col) {\n        if (!row.allLeafChildren) {\n            return null;\n        }\n        for (let i = 0; i < row.allLeafChildren.length; i++) {\n            const childRow = row.allLeafChildren[i];\n            const value = this.valueService.getValue(col, childRow);\n            if (value != null) {\n                return value;\n            }\n        }\n        return null;\n    }\n};\n__decorate$Q([\n    Autowired('columnModel')\n], ChartColumnService.prototype, \"columnModel\", void 0);\n__decorate$Q([\n    Autowired('valueService')\n], ChartColumnService.prototype, \"valueService\", void 0);\n__decorate$Q([\n    Autowired('rowRenderer')\n], ChartColumnService.prototype, \"rowRenderer\", void 0);\nChartColumnService = __decorate$Q([\n    Bean(\"chartColumnService\")\n], ChartColumnService);\n\nvar __decorate$P = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ComboChartModel extends BeanStub {\n    constructor(chartDataModel) {\n        var _a;\n        super();\n        // this control flag is used to only log warning for the initial user config\n        this.suppressComboChartWarnings = false;\n        this.chartDataModel = chartDataModel;\n        this.seriesChartTypes = (_a = chartDataModel.params.seriesChartTypes) !== null && _a !== void 0 ? _a : [];\n    }\n    init() {\n        this.initComboCharts();\n    }\n    update(seriesChartTypes) {\n        this.seriesChartTypes = seriesChartTypes !== null && seriesChartTypes !== void 0 ? seriesChartTypes : this.seriesChartTypes;\n        this.initComboCharts();\n        this.updateSeriesChartTypes();\n    }\n    initComboCharts() {\n        const seriesChartTypesExist = this.seriesChartTypes && this.seriesChartTypes.length > 0;\n        const customCombo = this.chartDataModel.chartType === 'customCombo' || seriesChartTypesExist;\n        if (customCombo) {\n            // it is not necessary to supply a chart type for combo charts when `seriesChartTypes` is supplied\n            this.chartDataModel.chartType = 'customCombo';\n            // cache supplied `seriesChartTypes` to allow switching between different chart types in the settings panel\n            this.savedCustomSeriesChartTypes = this.seriesChartTypes || [];\n        }\n    }\n    updateSeriesChartTypes() {\n        if (!this.chartDataModel.isComboChart()) {\n            return;\n        }\n        // ensure primary only chart types are not placed on secondary axis\n        this.seriesChartTypes = this.seriesChartTypes.map(seriesChartType => {\n            const primaryOnly = ['groupedColumn', 'stackedColumn', 'stackedArea'].includes(seriesChartType.chartType);\n            seriesChartType.secondaryAxis = primaryOnly ? false : seriesChartType.secondaryAxis;\n            return seriesChartType;\n        });\n        // note that when seriesChartTypes are supplied the chart type is also changed to 'customCombo'\n        if (this.chartDataModel.chartType === 'customCombo') {\n            this.updateSeriesChartTypesForCustomCombo();\n            return;\n        }\n        this.updateChartSeriesTypesForBuiltInCombos();\n    }\n    updateSeriesChartTypesForCustomCombo() {\n        const seriesChartTypesSupplied = this.seriesChartTypes && this.seriesChartTypes.length > 0;\n        if (!seriesChartTypesSupplied && !this.suppressComboChartWarnings) {\n            console.warn(`AG Grid: 'seriesChartTypes' are required when the 'customCombo' chart type is specified.`);\n        }\n        // ensure correct chartTypes are supplied\n        this.seriesChartTypes = this.seriesChartTypes.map(s => {\n            if (!ComboChartModel.SUPPORTED_COMBO_CHART_TYPES.includes(s.chartType)) {\n                console.warn(`AG Grid: invalid chartType '${s.chartType}' supplied in 'seriesChartTypes', converting to 'line' instead.`);\n                s.chartType = 'line';\n            }\n            return s;\n        });\n        const getSeriesChartType = (valueCol) => {\n            if (!this.savedCustomSeriesChartTypes || this.savedCustomSeriesChartTypes.length === 0) {\n                this.savedCustomSeriesChartTypes = this.seriesChartTypes;\n            }\n            const providedSeriesChartType = this.savedCustomSeriesChartTypes.find(s => s.colId === valueCol.colId);\n            if (!providedSeriesChartType) {\n                if (valueCol.selected && !this.suppressComboChartWarnings) {\n                    console.warn(`AG Grid: no 'seriesChartType' found for colId = '${valueCol.colId}', defaulting to 'line'.`);\n                }\n                return {\n                    colId: valueCol.colId,\n                    chartType: 'line',\n                    secondaryAxis: false\n                };\n            }\n            return providedSeriesChartType;\n        };\n        const updatedSeriesChartTypes = this.chartDataModel.valueColState.map(getSeriesChartType);\n        this.seriesChartTypes = updatedSeriesChartTypes;\n        // also cache custom `seriesChartTypes` to allow for switching between different chart types\n        this.savedCustomSeriesChartTypes = updatedSeriesChartTypes;\n        // turn off warnings as first combo chart attempt has completed\n        this.suppressComboChartWarnings = true;\n    }\n    updateChartSeriesTypesForBuiltInCombos() {\n        const { chartType, valueColState } = this.chartDataModel;\n        let primaryChartType = chartType === 'columnLineCombo' ? 'groupedColumn' : 'stackedArea';\n        let secondaryChartType = chartType === 'columnLineCombo' ? 'line' : 'groupedColumn';\n        const selectedCols = valueColState.filter(cs => cs.selected);\n        const lineIndex = Math.ceil(selectedCols.length / 2);\n        this.seriesChartTypes = selectedCols.map((valueCol, i) => {\n            const seriesType = (i >= lineIndex) ? secondaryChartType : primaryChartType;\n            return { colId: valueCol.colId, chartType: seriesType, secondaryAxis: false };\n        });\n    }\n}\nComboChartModel.SUPPORTED_COMBO_CHART_TYPES = ['line', 'groupedColumn', 'stackedColumn', 'area', 'stackedArea'];\n__decorate$P([\n    PostConstruct\n], ComboChartModel.prototype, \"init\", null);\n\nvar __decorate$O = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass ChartDataModel extends BeanStub {\n    constructor(params) {\n        super();\n        this.unlinked = false;\n        this.chartData = [];\n        this.valueColState = [];\n        this.dimensionColState = [];\n        this.columnNames = {};\n        this.crossFiltering = false;\n        this.grouping = false;\n        this.params = params;\n        this.chartId = params.chartId;\n        this.chartType = params.chartType;\n        this.pivotChart = params.pivotChart;\n        this.chartThemeName = params.chartThemeName;\n        this.aggFunc = params.aggFunc;\n        this.referenceCellRange = params.cellRange;\n        this.suppliedCellRange = params.cellRange;\n        this.suppressChartRanges = params.suppressChartRanges;\n        this.unlinked = !!params.unlinkChart;\n        this.crossFiltering = !!params.crossFiltering;\n    }\n    init() {\n        this.datasource = this.createManagedBean(new ChartDatasource());\n        this.chartColumnService = this.createManagedBean(new ChartColumnService());\n        this.comboChartModel = this.createManagedBean(new ComboChartModel(this));\n        this.updateCellRanges();\n        this.updateData();\n    }\n    updateModel(params) {\n        const { cellRange, chartType, pivotChart, chartThemeName, aggFunc, suppressChartRanges, unlinkChart, crossFiltering, seriesChartTypes } = params;\n        if (cellRange !== this.suppliedCellRange) {\n            this.dimensionCellRange = undefined;\n            this.valueCellRange = undefined;\n        }\n        this.chartType = chartType;\n        this.pivotChart = pivotChart;\n        this.chartThemeName = chartThemeName;\n        this.aggFunc = aggFunc;\n        this.referenceCellRange = cellRange;\n        this.suppliedCellRange = cellRange;\n        this.suppressChartRanges = suppressChartRanges;\n        this.unlinked = !!unlinkChart;\n        this.crossFiltering = !!crossFiltering;\n        this.updateSelectedDimension(cellRange === null || cellRange === void 0 ? void 0 : cellRange.columns);\n        this.updateCellRanges();\n        const shouldUpdateComboModel = this.isComboChart() || seriesChartTypes;\n        if (shouldUpdateComboModel) {\n            this.comboChartModel.update(seriesChartTypes);\n        }\n        if (!this.unlinked) {\n            this.updateData();\n        }\n    }\n    updateCellRanges(updatedColState) {\n        if (this.valueCellRange) {\n            this.referenceCellRange = this.valueCellRange;\n        }\n        const { dimensionCols, valueCols } = this.chartColumnService.getChartColumns();\n        const allColsFromRanges = this.getAllColumnsFromRanges();\n        if (updatedColState) {\n            this.updateColumnState(updatedColState);\n        }\n        this.setDimensionCellRange(dimensionCols, allColsFromRanges, updatedColState);\n        this.setValueCellRange(valueCols, allColsFromRanges, updatedColState);\n        if (!updatedColState) {\n            this.resetColumnState();\n            // dimension / category cell range could be out of sync after resetting column state when row grouping\n            this.syncDimensionCellRange();\n        }\n        this.comboChartModel.updateSeriesChartTypes();\n    }\n    updateData() {\n        const { startRow, endRow } = this.getRowIndexes();\n        if (this.pivotChart) {\n            this.resetColumnState();\n        }\n        this.grouping = this.isGrouping();\n        const params = {\n            aggFunc: this.aggFunc,\n            dimensionCols: [this.getSelectedDimension()],\n            grouping: this.grouping,\n            pivoting: this.isPivotActive(),\n            crossFiltering: this.crossFiltering,\n            valueCols: this.getSelectedValueCols(),\n            startRow,\n            endRow,\n            isScatter: _.includes(['scatter', 'bubble'], this.chartType)\n        };\n        const { chartData, columnNames } = this.datasource.getData(params);\n        this.chartData = chartData;\n        this.columnNames = columnNames;\n    }\n    isGrouping() {\n        const usingTreeData = this.gridOptionsService.isTreeData();\n        const groupedCols = usingTreeData ? null : this.chartColumnService.getRowGroupColumns();\n        const isGroupActive = usingTreeData || (groupedCols && groupedCols.length > 0);\n        // charts only group when the selected category is a group column\n        const colId = this.getSelectedDimension().colId;\n        const displayedGroupCols = this.chartColumnService.getGroupDisplayColumns();\n        const groupDimensionSelected = displayedGroupCols.map(col => col.getColId()).some(id => id === colId);\n        return !!isGroupActive && groupDimensionSelected;\n    }\n    getSelectedValueCols() {\n        return this.valueColState.filter(cs => cs.selected).map(cs => cs.column);\n    }\n    getSelectedDimension() {\n        return this.dimensionColState.filter(cs => cs.selected)[0];\n    }\n    getColDisplayName(col) {\n        return this.chartColumnService.getColDisplayName(col);\n    }\n    isPivotMode() {\n        return this.chartColumnService.isPivotMode();\n    }\n    getChartDataType(colId) {\n        const column = this.chartColumnService.getColumn(colId);\n        return column ? column.getColDef().chartDataType : undefined;\n    }\n    isPivotActive() {\n        return this.chartColumnService.isPivotActive();\n    }\n    createCellRange(type, ...columns) {\n        return {\n            id: this.chartId,\n            startRow: this.referenceCellRange.startRow,\n            endRow: this.referenceCellRange.endRow,\n            columns,\n            startColumn: type === CellRangeType.DIMENSION ? columns[0] : this.referenceCellRange.startColumn,\n            type\n        };\n    }\n    getAllColumnsFromRanges() {\n        if (this.pivotChart) {\n            return _.convertToSet(this.chartColumnService.getAllDisplayedColumns());\n        }\n        const columns = this.dimensionCellRange || this.valueCellRange ? [] : this.referenceCellRange.columns;\n        if (this.dimensionCellRange) {\n            columns.push(...this.dimensionCellRange.columns);\n        }\n        if (this.valueCellRange) {\n            columns.push(...this.valueCellRange.columns);\n        }\n        return _.convertToSet(columns);\n    }\n    getRowIndexes() {\n        let startRow = 0, endRow = 0;\n        const { rangeService, valueCellRange } = this;\n        if (rangeService && valueCellRange) {\n            startRow = rangeService.getRangeStartRow(valueCellRange).rowIndex;\n            // when the last row the cell range is a pinned 'bottom' row, the `endRow` index is set to -1 which results\n            // in the ChartDatasource processing all non pinned rows from the `startRow` index.\n            const endRowPosition = rangeService.getRangeEndRow(valueCellRange);\n            endRow = endRowPosition.rowPinned === 'bottom' ? -1 : endRowPosition.rowIndex;\n        }\n        return { startRow, endRow };\n    }\n    resetColumnState() {\n        const { dimensionCols, valueCols } = this.chartColumnService.getChartColumns();\n        const allCols = this.getAllColumnsFromRanges();\n        const isInitialising = this.valueColState.length < 1;\n        this.dimensionColState = [];\n        this.valueColState = [];\n        let hasSelectedDimension = false;\n        let order = 1;\n        const aggFuncDimension = this.suppliedCellRange.columns[0]; //TODO\n        dimensionCols.forEach(column => {\n            const isAutoGroupCol = column.getColId() === 'ag-Grid-AutoColumn';\n            let selected = false;\n            if (this.crossFiltering && this.aggFunc) {\n                if (aggFuncDimension.getColId() === column.getColId()) {\n                    selected = true;\n                }\n            }\n            else {\n                selected = isAutoGroupCol ? true : !hasSelectedDimension && allCols.has(column);\n            }\n            this.dimensionColState.push({\n                column,\n                colId: column.getColId(),\n                displayName: this.getColDisplayName(column),\n                selected,\n                order: order++\n            });\n            if (selected) {\n                hasSelectedDimension = true;\n            }\n        });\n        const defaultCategory = {\n            colId: ChartDataModel.DEFAULT_CATEGORY,\n            displayName: this.chartTranslationService.translate('defaultCategory'),\n            selected: !hasSelectedDimension,\n            order: 0\n        };\n        this.dimensionColState.unshift(defaultCategory);\n        const valueColumnsFromReferenceRange = this.referenceCellRange.columns.filter(c => valueCols.has(c));\n        valueCols.forEach(column => {\n            // first time the value cell range is set, preserve the column order from the supplied range\n            if (isInitialising && _.includes(this.referenceCellRange.columns, column)) {\n                column = valueColumnsFromReferenceRange.shift();\n            }\n            this.valueColState.push({\n                column,\n                colId: column.getColId(),\n                displayName: this.getColDisplayName(column),\n                selected: allCols.has(column),\n                order: order++\n            });\n        });\n    }\n    updateColumnState(updatedCol) {\n        const idsMatch = (cs) => cs.colId === updatedCol.colId;\n        const { dimensionColState, valueColState } = this;\n        if (dimensionColState.filter(idsMatch).length > 0) {\n            // only one dimension should be selected\n            dimensionColState.forEach(cs => cs.selected = idsMatch(cs));\n        }\n        else {\n            // just update the selected value on the supplied value column\n            valueColState.filter(idsMatch).forEach(cs => cs.selected = updatedCol.selected);\n        }\n        const allColumns = [...dimensionColState, ...valueColState];\n        const orderedColIds = [];\n        // calculate new order\n        allColumns.forEach((col, i) => {\n            if (i === updatedCol.order) {\n                orderedColIds.push(updatedCol.colId);\n            }\n            if (col.colId !== updatedCol.colId) {\n                orderedColIds.push(col.colId);\n            }\n        });\n        // update col state with new order\n        allColumns.forEach(col => {\n            const order = orderedColIds.indexOf(col.colId);\n            col.order = order >= 0 ? orderedColIds.indexOf(col.colId) : allColumns.length - 1;\n        });\n        this.reorderColState();\n    }\n    reorderColState() {\n        const ascColStateOrder = (a, b) => a.order - b.order;\n        this.dimensionColState.sort(ascColStateOrder);\n        this.valueColState.sort(ascColStateOrder);\n    }\n    setDimensionCellRange(dimensionCols, colsInRange, updatedColState) {\n        this.dimensionCellRange = undefined;\n        if (!updatedColState && !this.dimensionColState.length) {\n            // use first dimension column in range by default\n            dimensionCols.forEach(col => {\n                if (this.dimensionCellRange || !colsInRange.has(col)) {\n                    return;\n                }\n                this.dimensionCellRange = this.createCellRange(CellRangeType.DIMENSION, col);\n            });\n            return;\n        }\n        let selectedDimensionColState = updatedColState;\n        if (this.crossFiltering && this.aggFunc) {\n            const aggFuncDimension = this.suppliedCellRange.columns[0]; //TODO\n            selectedDimensionColState = this.dimensionColState.filter(cs => cs.colId === aggFuncDimension.getColId())[0];\n        }\n        else if (!selectedDimensionColState || !dimensionCols.has(selectedDimensionColState.column)) {\n            selectedDimensionColState = this.dimensionColState.filter(cs => cs.selected)[0];\n        }\n        if (selectedDimensionColState && selectedDimensionColState.colId !== ChartDataModel.DEFAULT_CATEGORY) {\n            this.dimensionCellRange = this.createCellRange(CellRangeType.DIMENSION, selectedDimensionColState.column);\n        }\n    }\n    setValueCellRange(valueCols, colsInRange, updatedColState) {\n        this.valueCellRange = undefined;\n        const selectedValueCols = [];\n        valueCols.forEach(col => {\n            if (updatedColState && updatedColState.colId === col.getColId()) {\n                if (updatedColState.selected) {\n                    selectedValueCols.push(updatedColState.column);\n                }\n            }\n            else if (colsInRange.has(col)) {\n                selectedValueCols.push(col);\n            }\n        });\n        if (selectedValueCols.length > 0) {\n            let orderedColIds = [];\n            if (this.valueColState.length > 0) {\n                orderedColIds = this.valueColState.map(c => c.colId);\n            }\n            else {\n                colsInRange.forEach(c => orderedColIds.push(c.getColId()));\n            }\n            selectedValueCols.sort((a, b) => orderedColIds.indexOf(a.getColId()) - orderedColIds.indexOf(b.getColId()));\n            this.valueCellRange = this.createCellRange(CellRangeType.VALUE, ...selectedValueCols);\n        }\n    }\n    updateSelectedDimension(columns) {\n        const colIdSet = new Set(columns.map((column) => column.getColId()));\n        // if no dimension found in supplied columns use the default category (always index = 0)\n        const foundColState = this.dimensionColState.find((colState) => colIdSet.has(colState.colId)) || this.dimensionColState[0];\n        this.dimensionColState = this.dimensionColState.map((colState) => (Object.assign(Object.assign({}, colState), { selected: colState.colId === foundColState.colId })));\n    }\n    syncDimensionCellRange() {\n        const selectedDimension = this.getSelectedDimension();\n        if (selectedDimension && selectedDimension.column) {\n            this.dimensionCellRange = this.createCellRange(CellRangeType.DIMENSION, selectedDimension.column);\n        }\n    }\n    isComboChart() {\n        return ['columnLineCombo', 'areaColumnCombo', 'customCombo'].includes(this.chartType);\n    }\n}\nChartDataModel.DEFAULT_CATEGORY = 'AG-GRID-DEFAULT-CATEGORY';\n__decorate$O([\n    Autowired('rangeService')\n], ChartDataModel.prototype, \"rangeService\", void 0);\n__decorate$O([\n    Autowired('chartTranslationService')\n], ChartDataModel.prototype, \"chartTranslationService\", void 0);\n__decorate$O([\n    PostConstruct\n], ChartDataModel.prototype, \"init\", null);\n\nfunction deproxy(chartOrProxy) {\n    if (chartOrProxy.chart != null) {\n        return chartOrProxy.chart;\n    }\n    return chartOrProxy;\n}\n\nclass ChartProxy {\n    constructor(chartProxyParams) {\n        this.chartProxyParams = chartProxyParams;\n        this.clearThemeOverrides = false;\n        this.chart = chartProxyParams.chartInstance;\n        this.chartType = chartProxyParams.chartType;\n        this.crossFiltering = chartProxyParams.crossFiltering;\n        this.crossFilterCallback = chartProxyParams.crossFilterCallback;\n        this.standaloneChartType = getSeriesType(this.chartType);\n        if (this.chart == null) {\n            this.chart = AgChart.create(this.getCommonChartOptions());\n        }\n        else {\n            // On chart change, reset formatting panel changes.\n            this.clearThemeOverrides = true;\n        }\n    }\n    getChart() {\n        return deproxy(this.chart);\n    }\n    getChartRef() {\n        return this.chart;\n    }\n    downloadChart(dimensions, fileName, fileFormat) {\n        const { chart } = this;\n        const rawChart = deproxy(chart);\n        const imageFileName = fileName || (rawChart.title ? rawChart.title.text : 'chart');\n        const { width, height } = dimensions || {};\n        AgChart.download(chart, { width, height, fileName: imageFileName, fileFormat });\n    }\n    getChartImageDataURL(type) {\n        return this.getChart().scene.getDataURL(type);\n    }\n    getChartOptions() {\n        return this.chart.getOptions();\n    }\n    getChartThemeOverrides() {\n        var _a;\n        const chartOptionsTheme = this.getChartOptions().theme;\n        return (_a = chartOptionsTheme.overrides) !== null && _a !== void 0 ? _a : {};\n    }\n    getChartPalette() {\n        return getChartTheme(this.getChartOptions().theme).palette;\n    }\n    setPaired(paired) {\n        // Special handling to make scatter charts operate in paired mode by default, where \n        // columns alternate between being X and Y (and size for bubble). In standard mode,\n        // the first column is used for X and every other column is treated as Y\n        // (or alternates between Y and size for bubble)\n        const seriesType = getSeriesType(this.chartProxyParams.chartType);\n        AgChart.updateDelta(this.chart, { theme: { overrides: { [seriesType]: { paired } } } });\n    }\n    isPaired() {\n        const seriesType = getSeriesType(this.chartProxyParams.chartType);\n        return _.get(this.getChartThemeOverrides(), `${seriesType}.paired`, true);\n    }\n    lookupCustomChartTheme(themeName) {\n        return lookupCustomChartTheme(this.chartProxyParams, themeName);\n    }\n    transformData(data, categoryKey, categoryAxis) {\n        if (categoryAxis) {\n            // replace the values for the selected category with a complex object to allow for duplicated categories\n            return data.map((d, index) => {\n                const value = d[categoryKey];\n                const valueString = value && value.toString ? value.toString() : '';\n                const datum = Object.assign({}, d);\n                datum[categoryKey] = { id: index, value, toString: () => valueString };\n                return datum;\n            });\n        }\n        return data;\n    }\n    getCommonChartOptions(updatedOverrides) {\n        var _a, _b;\n        // Only apply active overrides if chart is initialised.\n        const existingOptions = this.clearThemeOverrides ? {} : (_b = (_a = this.chart) === null || _a === void 0 ? void 0 : _a.getOptions()) !== null && _b !== void 0 ? _b : {};\n        const formattingPanelOverrides = this.chart != null ?\n            { overrides: this.getActiveFormattingPanelOverrides() } : {};\n        this.clearThemeOverrides = false;\n        return Object.assign(Object.assign({}, existingOptions), { theme: Object.assign(Object.assign({}, createAgChartTheme(this.chartProxyParams, this)), (updatedOverrides ? { overrides: updatedOverrides } : formattingPanelOverrides)), container: this.chartProxyParams.parentElement, mode: 'integrated' });\n    }\n    getActiveFormattingPanelOverrides() {\n        var _a, _b;\n        if (this.clearThemeOverrides) {\n            return {};\n        }\n        const inUseTheme = (_a = this.chart) === null || _a === void 0 ? void 0 : _a.getOptions().theme;\n        return (_b = inUseTheme === null || inUseTheme === void 0 ? void 0 : inUseTheme.overrides) !== null && _b !== void 0 ? _b : {};\n    }\n    destroy({ keepChartInstance = false } = {}) {\n        if (keepChartInstance) {\n            return this.chart;\n        }\n        this.destroyChart();\n    }\n    destroyChart() {\n        if (this.chart) {\n            this.chart.destroy();\n            this.chart = undefined;\n        }\n    }\n}\n\nclass CartesianChartProxy extends ChartProxy {\n    constructor(params) {\n        super(params);\n        this.crossFilteringAllPoints = new Set();\n        this.crossFilteringSelectedPoints = [];\n    }\n    update(params) {\n        const axes = this.getAxes(params);\n        const options = Object.assign(Object.assign({}, this.getCommonChartOptions(params.updatedOverrides)), { data: this.getData(params, axes), axes, series: this.getSeries(params) });\n        AgChart.update(this.getChartRef(), options);\n    }\n    getData(params, axes) {\n        var _a;\n        const supportsCrossFiltering = ['area', 'line'].includes(this.standaloneChartType);\n        const xPosition = this.standaloneChartType === 'bar' ? 'left' : 'bottom';\n        const xAxisIsCategory = ((_a = axes.find(o => o.position === xPosition)) === null || _a === void 0 ? void 0 : _a.type) === 'category';\n        return this.crossFiltering && supportsCrossFiltering ?\n            this.getCrossFilterData(params) :\n            this.getDataTransformedData(params, xAxisIsCategory);\n    }\n    getDataTransformedData(params, isCategoryAxis) {\n        return this.transformData(params.data, params.category.id, isCategoryAxis);\n    }\n    getXAxisType(params) {\n        if (params.grouping) {\n            return 'groupedCategory';\n        }\n        else if (CartesianChartProxy.isTimeAxis(params)) {\n            return 'time';\n        }\n        return 'category';\n    }\n    static isTimeAxis(params) {\n        if (params.category && params.category.chartDataType) {\n            return params.category.chartDataType === 'time';\n        }\n        const testDatum = params.data[0];\n        return (testDatum && testDatum[params.category.id]) instanceof Date;\n    }\n    crossFilteringReset() {\n        this.crossFilteringSelectedPoints = [];\n        this.crossFilteringAllPoints.clear();\n    }\n    crossFilteringPointSelected(point) {\n        return this.crossFilteringSelectedPoints.length == 0 || this.crossFilteringSelectedPoints.includes(point);\n    }\n    crossFilteringDeselectedPoints() {\n        return this.crossFilteringSelectedPoints.length > 0 &&\n            this.crossFilteringAllPoints.size !== this.crossFilteringSelectedPoints.length;\n    }\n    extractLineAreaCrossFilterSeries(series, params) {\n        const getYKey = (yKey) => {\n            if (this.standaloneChartType === 'area') {\n                const lastSelectedChartId = params.getCrossFilteringContext().lastSelectedChartId;\n                return (lastSelectedChartId === params.chartId) ? yKey + '-total' : yKey;\n            }\n            return yKey + '-total';\n        };\n        return series.map(s => {\n            s.yKey = getYKey(s.yKey);\n            s.listeners = {\n                nodeClick: (e) => {\n                    const value = e.datum[s.xKey];\n                    const multiSelection = e.event.metaKey || e.event.ctrlKey;\n                    this.crossFilteringAddSelectedPoint(multiSelection, value);\n                    this.crossFilterCallback(e);\n                }\n            };\n            s.marker = {\n                formatter: (p) => {\n                    const category = p.datum[params.category.id];\n                    return {\n                        fill: p.highlighted ? 'yellow' : p.fill,\n                        size: p.highlighted ? 14 : this.crossFilteringPointSelected(category) ? 8 : 0,\n                    };\n                }\n            };\n            if (this.standaloneChartType === 'area') {\n                s.fillOpacity = this.crossFilteringDeselectedPoints() ? 0.3 : 1;\n            }\n            if (this.standaloneChartType === 'line') {\n                s.strokeOpacity = this.crossFilteringDeselectedPoints() ? 0.3 : 1;\n            }\n            return s;\n        });\n    }\n    getCrossFilterData(params) {\n        this.crossFilteringAllPoints.clear();\n        const colId = params.fields[0].colId;\n        const filteredOutColId = `${colId}-filtered-out`;\n        const lastSelectedChartId = params.getCrossFilteringContext().lastSelectedChartId;\n        return params.data.map(d => {\n            const category = d[params.category.id];\n            this.crossFilteringAllPoints.add(category);\n            const pointSelected = this.crossFilteringPointSelected(category);\n            if (this.standaloneChartType === 'area' && lastSelectedChartId === params.chartId) {\n                d[`${colId}-total`] = pointSelected ? d[colId] : d[colId] + d[filteredOutColId];\n            }\n            if (this.standaloneChartType === 'line') {\n                d[`${colId}-total`] = pointSelected ? d[colId] : d[colId] + d[filteredOutColId];\n            }\n            return d;\n        });\n    }\n    crossFilteringAddSelectedPoint(multiSelection, value) {\n        multiSelection ? this.crossFilteringSelectedPoints.push(value) : this.crossFilteringSelectedPoints = [value];\n    }\n}\n\n// deepMerge\nfunction emptyTarget(value) {\n    return Array.isArray(value) ? [] : {};\n}\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n    return (options.clone !== false && options.isMergeableObject(value))\n        ? deepMerge(emptyTarget(value), value, options)\n        : value;\n}\nfunction defaultArrayMerge(target, source, options) {\n    return target.concat(source).map(function (element) {\n        return cloneUnlessOtherwiseSpecified(element, options);\n    });\n}\nfunction getMergeFunction(key, options) {\n    if (!options.customMerge) {\n        return deepMerge;\n    }\n    const customMerge = options.customMerge(key);\n    return typeof customMerge === 'function' ? customMerge : deepMerge;\n}\nfunction getEnumerableOwnPropertySymbols(target) {\n    // @ts-ignore\n    return Object.getOwnPropertySymbols\n        // @ts-ignore\n        ? Object.getOwnPropertySymbols(target).filter(function (symbol) {\n            return target.propertyIsEnumerable(symbol);\n        })\n        : [];\n}\nfunction getKeys(target) {\n    return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target));\n}\nfunction propertyIsOnObject(object, property) {\n    try {\n        return property in object;\n    }\n    catch (_) {\n        return false;\n    }\n}\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n    return propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n        && !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n            && Object.propertyIsEnumerable.call(target, key)); // and also unsafe if they're nonenumerable.\n}\nfunction mergeObject(target = {}, source = {}, options) {\n    const destination = {};\n    if (options.isMergeableObject(target)) {\n        getKeys(target).forEach(function (key) {\n            destination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n        });\n    }\n    getKeys(source).forEach(function (key) {\n        if (propertyIsUnsafe(target, key)) {\n            return;\n        }\n        if (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n            destination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n        }\n        else {\n            destination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n        }\n    });\n    return destination;\n}\nfunction defaultIsMergeableObject(value) {\n    return isNonNullObject(value) && !isSpecial(value);\n}\nfunction isNonNullObject(value) {\n    return !!value && typeof value === 'object';\n}\nfunction isSpecial(value) {\n    const stringValue = Object.prototype.toString.call(value);\n    return stringValue === '[object RegExp]' || stringValue === '[object Date]';\n}\nfunction deepMerge(target, source, options) {\n    options = options || {};\n    options.arrayMerge = options.arrayMerge || defaultArrayMerge;\n    options.isMergeableObject = options.isMergeableObject || defaultIsMergeableObject;\n    // cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n    // implementations can use it. The caller may not replace it.\n    options.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n    const sourceIsArray = Array.isArray(source);\n    const targetIsArray = Array.isArray(target);\n    const sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n    if (!sourceAndTargetTypesMatch) {\n        return cloneUnlessOtherwiseSpecified(source, options);\n    }\n    else if (sourceIsArray) {\n        return options.arrayMerge(target, source, options);\n    }\n    else {\n        return mergeObject(target, source, options);\n    }\n}\n\nfunction hexToRGBA(hex, alpha) {\n    const r = parseInt(hex.slice(1, 3), 16);\n    const g = parseInt(hex.slice(3, 5), 16);\n    const b = parseInt(hex.slice(5, 7), 16);\n    return alpha ? `rgba(${r}, ${g}, ${b}, ${alpha})` : `rgba(${r}, ${g}, ${b})`;\n}\nfunction changeOpacity(fills, alpha) {\n    return fills.map(fill => {\n        const c = Color.fromString(fill);\n        return new Color(c.r, c.g, c.b, alpha).toHexString();\n    });\n}\n\nclass BarChartProxy extends CartesianChartProxy {\n    constructor(params) {\n        super(params);\n    }\n    getAxes(params) {\n        const isBar = this.standaloneChartType === 'bar';\n        const axes = [\n            {\n                type: this.getXAxisType(params),\n                position: isBar ? 'left' : 'bottom',\n            },\n            {\n                type: 'number',\n                position: isBar ? 'bottom' : 'left',\n            },\n        ];\n        // Add a default label formatter to show '%' for normalized charts if none is provided\n        if (this.isNormalised()) {\n            const numberAxis = axes[1];\n            numberAxis.label = Object.assign(Object.assign({}, numberAxis.label), { formatter: (params) => Math.round(params.value) + '%' });\n        }\n        return axes;\n    }\n    getSeries(params) {\n        const groupedCharts = ['groupedColumn', 'groupedBar'];\n        const isGrouped = !this.crossFiltering && _.includes(groupedCharts, this.chartType);\n        const series = params.fields.map(f => ({\n            type: this.standaloneChartType,\n            grouped: isGrouped,\n            normalizedTo: this.isNormalised() ? 100 : undefined,\n            xKey: params.category.id,\n            xName: params.category.name,\n            yKey: f.colId,\n            yName: f.displayName\n        }));\n        return this.crossFiltering ? this.extractCrossFilterSeries(series) : series;\n    }\n    extractCrossFilterSeries(series) {\n        const palette = this.getChartPalette();\n        const updatePrimarySeries = (seriesOptions, index) => {\n            return Object.assign(Object.assign({}, seriesOptions), { highlightStyle: { item: { fill: undefined } }, fill: palette === null || palette === void 0 ? void 0 : palette.fills[index], stroke: palette === null || palette === void 0 ? void 0 : palette.strokes[index], listeners: {\n                    nodeClick: this.crossFilterCallback\n                } });\n        };\n        const updateFilteredOutSeries = (seriesOptions) => {\n            const yKey = seriesOptions.yKey + '-filtered-out';\n            return Object.assign(Object.assign({}, deepMerge({}, seriesOptions)), { yKey, fill: hexToRGBA(seriesOptions.fill, '0.3'), stroke: hexToRGBA(seriesOptions.stroke, '0.3'), hideInLegend: [yKey] });\n        };\n        const allSeries = [];\n        for (let i = 0; i < series.length; i++) {\n            // update primary series\n            const primarySeries = updatePrimarySeries(series[i], i);\n            allSeries.push(primarySeries);\n            // add 'filtered-out' series\n            allSeries.push(updateFilteredOutSeries(primarySeries));\n        }\n        return allSeries;\n    }\n    isNormalised() {\n        const normalisedCharts = ['normalizedColumn', 'normalizedBar'];\n        return !this.crossFiltering && _.includes(normalisedCharts, this.chartType);\n    }\n}\n\nclass AreaChartProxy extends CartesianChartProxy {\n    constructor(params) {\n        super(params);\n    }\n    getAxes(params) {\n        const axes = [\n            {\n                type: this.getXAxisType(params),\n                position: 'bottom',\n            },\n            {\n                type: 'number',\n                position: 'left',\n            },\n        ];\n        // Add a default label formatter to show '%' for normalized charts if none is provided\n        if (this.isNormalised()) {\n            const numberAxis = axes[1];\n            numberAxis.label = Object.assign(Object.assign({}, numberAxis.label), { formatter: (params) => Math.round(params.value) + '%' });\n        }\n        return axes;\n    }\n    getSeries(params) {\n        const series = params.fields.map(f => ({\n            type: this.standaloneChartType,\n            xKey: params.category.id,\n            xName: params.category.name,\n            yKey: f.colId,\n            yName: f.displayName,\n            normalizedTo: this.chartType === 'normalizedArea' ? 100 : undefined,\n            stacked: ['normalizedArea', 'stackedArea'].includes(this.chartType)\n        }));\n        return this.crossFiltering ? this.extractLineAreaCrossFilterSeries(series, params) : series;\n    }\n    isNormalised() {\n        return !this.crossFiltering && this.chartType === 'normalizedArea';\n    }\n}\n\nclass LineChartProxy extends CartesianChartProxy {\n    constructor(params) {\n        super(params);\n    }\n    getAxes(params) {\n        return [\n            {\n                type: this.getXAxisType(params),\n                position: 'bottom'\n            },\n            {\n                type: 'number',\n                position: 'left'\n            },\n        ];\n    }\n    getSeries(params) {\n        const series = params.fields.map(f => ({\n            type: this.standaloneChartType,\n            xKey: params.category.id,\n            xName: params.category.name,\n            yKey: f.colId,\n            yName: f.displayName\n        }));\n        return this.crossFiltering ? this.extractLineAreaCrossFilterSeries(series, params) : series;\n    }\n}\n\nclass PieChartProxy extends ChartProxy {\n    constructor(params) {\n        super(params);\n    }\n    update(params) {\n        const { data, category } = params;\n        const options = Object.assign(Object.assign({}, this.getCommonChartOptions(params.updatedOverrides)), { data: this.crossFiltering ? this.getCrossFilterData(params) : this.transformData(data, category.id), series: this.getSeries(params) });\n        AgChart.update(this.getChartRef(), options);\n    }\n    getSeries(params) {\n        const numFields = params.fields.length;\n        const offset = {\n            currentOffset: 0,\n            offsetAmount: numFields > 1 ? 20 : 40\n        };\n        const series = this.getFields(params).map((f) => {\n            var _a;\n            // options shared by 'pie' and 'doughnut' charts\n            const options = {\n                type: this.standaloneChartType,\n                angleKey: f.colId,\n                angleName: f.displayName,\n                sectorLabelKey: f.colId,\n                calloutLabelKey: params.category.id,\n                calloutLabelName: params.category.name,\n            };\n            if (this.chartType === 'doughnut') {\n                const { outerRadiusOffset, innerRadiusOffset } = PieChartProxy.calculateOffsets(offset);\n                const title = f.displayName ? {\n                    title: { text: f.displayName, showInLegend: numFields > 1 },\n                } : undefined;\n                // augment shared options with 'doughnut' specific options\n                return Object.assign(Object.assign(Object.assign(Object.assign({}, options), { outerRadiusOffset,\n                    innerRadiusOffset }), title), { calloutLine: {\n                        colors: (_a = this.getChartPalette()) === null || _a === void 0 ? void 0 : _a.strokes,\n                    } });\n            }\n            return options;\n        });\n        return this.crossFiltering ? this.extractCrossFilterSeries(series) : series;\n    }\n    getCrossFilterData(params) {\n        const colId = params.fields[0].colId;\n        const filteredOutColId = `${colId}-filtered-out`;\n        return params.data.map(d => {\n            const total = d[colId] + d[filteredOutColId];\n            d[`${colId}-total`] = total;\n            d[filteredOutColId] = 1; // normalise to 1\n            d[colId] = d[colId] / total; // fraction of 1\n            return d;\n        });\n    }\n    extractCrossFilterSeries(series) {\n        const palette = this.getChartPalette();\n        const primaryOptions = (seriesOptions) => {\n            return Object.assign(Object.assign({}, seriesOptions), { calloutLabel: { enabled: false }, highlightStyle: { item: { fill: undefined } }, radiusKey: seriesOptions.angleKey, angleKey: seriesOptions.angleKey + '-total', radiusMin: 0, radiusMax: 1, listeners: {\n                    nodeClick: this.crossFilterCallback,\n                } });\n        };\n        const filteredOutOptions = (seriesOptions, angleKey) => {\n            var _a, _b;\n            return Object.assign(Object.assign({}, deepMerge({}, primaryOpts)), { radiusKey: angleKey + '-filtered-out', fills: changeOpacity((_a = seriesOptions.fills) !== null && _a !== void 0 ? _a : palette.fills, 0.3), strokes: changeOpacity((_b = seriesOptions.strokes) !== null && _b !== void 0 ? _b : palette.strokes, 0.3), showInLegend: false });\n        };\n        // currently, only single 'doughnut' cross-filter series are supported\n        const primarySeries = series[0];\n        // update primary series\n        const angleKey = primarySeries.angleKey;\n        const primaryOpts = primaryOptions(primarySeries);\n        return [\n            filteredOutOptions(primarySeries, angleKey),\n            primaryOpts,\n        ];\n    }\n    static calculateOffsets(offset) {\n        const outerRadiusOffset = offset.currentOffset;\n        offset.currentOffset -= offset.offsetAmount;\n        const innerRadiusOffset = offset.currentOffset;\n        offset.currentOffset -= offset.offsetAmount;\n        return { outerRadiusOffset, innerRadiusOffset };\n    }\n    getFields(params) {\n        return this.chartType === 'pie' ? params.fields.slice(0, 1) : params.fields;\n    }\n    crossFilteringReset() {\n        // not required in pie charts\n    }\n}\n\nclass ScatterChartProxy extends CartesianChartProxy {\n    constructor(params) {\n        super(params);\n    }\n    getAxes(_params) {\n        return [\n            {\n                type: 'number',\n                position: 'bottom',\n            },\n            {\n                type: 'number',\n                position: 'left',\n            },\n        ];\n    }\n    getSeries(params) {\n        const paired = this.isPaired();\n        const seriesDefinitions = this.getSeriesDefinitions(params.fields, paired);\n        const labelFieldDefinition = params.category.id === ChartDataModel.DEFAULT_CATEGORY ? undefined : params.category;\n        const series = seriesDefinitions.map(seriesDefinition => ({\n            type: this.standaloneChartType,\n            xKey: seriesDefinition.xField.colId,\n            xName: seriesDefinition.xField.displayName,\n            yKey: seriesDefinition.yField.colId,\n            yName: seriesDefinition.yField.displayName,\n            title: `${seriesDefinition.yField.displayName} vs ${seriesDefinition.xField.displayName}`,\n            sizeKey: seriesDefinition.sizeField ? seriesDefinition.sizeField.colId : undefined,\n            sizeName: seriesDefinition.sizeField ? seriesDefinition.sizeField.displayName : undefined,\n            labelKey: labelFieldDefinition ? labelFieldDefinition.id : seriesDefinition.yField.colId,\n            labelName: labelFieldDefinition ? labelFieldDefinition.name : undefined,\n        }));\n        return this.crossFiltering ? this.extractCrossFilterSeries(series, params) : series;\n    }\n    extractCrossFilterSeries(series, params) {\n        const { data } = params;\n        const palette = this.getChartPalette();\n        const filteredOutKey = (key) => `${key}-filtered-out`;\n        const calcMarkerDomain = (data, sizeKey) => {\n            var _a;\n            const markerDomain = [Infinity, -Infinity];\n            if (sizeKey != null) {\n                for (const datum of data) {\n                    const value = (_a = datum[sizeKey]) !== null && _a !== void 0 ? _a : datum[filteredOutKey(sizeKey)];\n                    if (value < markerDomain[0]) {\n                        markerDomain[0] = value;\n                    }\n                    if (value > markerDomain[1]) {\n                        markerDomain[1] = value;\n                    }\n                }\n            }\n            if (markerDomain[0] <= markerDomain[1]) {\n                return markerDomain;\n            }\n            return undefined;\n        };\n        const updatePrimarySeries = (series, idx) => {\n            const { sizeKey } = series;\n            const fill = palette === null || palette === void 0 ? void 0 : palette.fills[idx];\n            const stroke = palette === null || palette === void 0 ? void 0 : palette.strokes[idx];\n            let markerDomain = calcMarkerDomain(data, sizeKey);\n            const marker = Object.assign(Object.assign({}, series.marker), { fill,\n                stroke, domain: markerDomain });\n            return Object.assign(Object.assign({}, series), { marker, highlightStyle: { item: { fill: 'yellow' } }, listeners: Object.assign(Object.assign({}, series.listeners), { nodeClick: this.crossFilterCallback }) });\n        };\n        const updateFilteredOutSeries = (series) => {\n            let { sizeKey, yKey, xKey } = series;\n            if (sizeKey != null) {\n                sizeKey = filteredOutKey(sizeKey);\n            }\n            return Object.assign(Object.assign({}, series), { yKey: filteredOutKey(yKey), xKey: filteredOutKey(xKey), marker: Object.assign(Object.assign({}, series.marker), { fillOpacity: 0.3, strokeOpacity: 0.3 }), sizeKey, showInLegend: false, listeners: Object.assign(Object.assign({}, series.listeners), { nodeClick: (e) => {\n                        const value = e.datum[filteredOutKey(xKey)];\n                        // Need to remove the `-filtered-out` suffixes from the event so that\n                        // upstream processing maps the event correctly onto grid column ids.\n                        const filterableEvent = Object.assign(Object.assign({}, e), { xKey, datum: Object.assign(Object.assign({}, e.datum), { [xKey]: value }) });\n                        this.crossFilterCallback(filterableEvent);\n                    } }) });\n        };\n        const updatedSeries = series.map(updatePrimarySeries);\n        return [\n            ...updatedSeries,\n            ...updatedSeries.map(updateFilteredOutSeries),\n        ];\n    }\n    getSeriesDefinitions(fields, paired) {\n        if (fields.length < 2) {\n            return [];\n        }\n        const isBubbleChart = this.chartType === 'bubble';\n        if (paired) {\n            if (isBubbleChart) {\n                return fields.map((currentXField, i) => i % 3 === 0 ? ({\n                    xField: currentXField,\n                    yField: fields[i + 1],\n                    sizeField: fields[i + 2],\n                }) : null).filter(x => x && x.yField && x.sizeField);\n            }\n            return fields.map((currentXField, i) => i % 2 === 0 ? ({\n                xField: currentXField,\n                yField: fields[i + 1],\n            }) : null).filter(x => x && x.yField);\n        }\n        const xField = fields[0];\n        if (isBubbleChart) {\n            return fields\n                .map((yField, i) => i % 2 === 1 ? ({\n                xField,\n                yField,\n                sizeField: fields[i + 1],\n            }) : null)\n                .filter(x => x && x.sizeField);\n        }\n        return fields.filter((value, i) => i > 0).map(yField => ({ xField, yField }));\n    }\n}\n\nclass HistogramChartProxy extends CartesianChartProxy {\n    constructor(params) {\n        super(params);\n    }\n    getSeries(params) {\n        const firstField = params.fields[0]; // multiple series are not supported!\n        return [\n            {\n                type: this.standaloneChartType,\n                xKey: firstField.colId,\n                xName: firstField.displayName,\n                yName: this.chartProxyParams.translate(\"histogramFrequency\"),\n                areaPlot: false, // only constant width is supported via integrated charts\n            }\n        ];\n    }\n    getAxes(_params) {\n        return [\n            {\n                type: 'number',\n                position: 'bottom',\n            },\n            {\n                type: 'number',\n                position: 'left',\n            },\n        ];\n    }\n}\n\nclass ChartOptionsService extends BeanStub {\n    constructor(chartController) {\n        super();\n        this.chartController = chartController;\n    }\n    getChartOption(expression) {\n        // TODO: We shouldn't be reading the chart implementation directly, but right now\n        // it isn't possible to either get option defaults OR retrieve themed options.\n        return _.get(this.getChart(), expression, undefined);\n    }\n    setChartOption(expression, value, isSilent) {\n        const chartSeriesTypes = this.chartController.getChartSeriesTypes();\n        if (this.chartController.isComboChart()) {\n            chartSeriesTypes.push('cartesian');\n        }\n        let chartOptions = {};\n        // we need to update chart options on each series type for combo charts\n        chartSeriesTypes.forEach(seriesType => {\n            chartOptions = deepMerge(chartOptions, this.createChartOptions({\n                seriesType,\n                expression,\n                value\n            }));\n        });\n        this.updateChart(chartOptions);\n        if (!isSilent) {\n            this.raiseChartOptionsChangedEvent();\n        }\n    }\n    awaitChartOptionUpdate(func) {\n        const chart = this.chartController.getChartProxy().getChart();\n        chart.waitForUpdate().then(() => func())\n            .catch((e) => console.error(`AG Grid - chart update failed`, e));\n    }\n    getAxisProperty(expression) {\n        var _a;\n        return _.get((_a = this.getChart().axes) === null || _a === void 0 ? void 0 : _a[0], expression, undefined);\n    }\n    setAxisProperty(expression, value) {\n        var _a;\n        // update axis options\n        const chart = this.getChart();\n        let chartOptions = {};\n        (_a = chart.axes) === null || _a === void 0 ? void 0 : _a.forEach((axis) => {\n            chartOptions = deepMerge(chartOptions, this.getUpdateAxisOptions(axis, expression, value));\n        });\n        this.updateChart(chartOptions);\n        this.raiseChartOptionsChangedEvent();\n    }\n    getLabelRotation(axisType) {\n        const axis = this.getAxis(axisType);\n        return _.get(axis, 'label.rotation', undefined);\n    }\n    setLabelRotation(axisType, value) {\n        const chartAxis = this.getAxis(axisType);\n        if (chartAxis) {\n            const chartOptions = this.getUpdateAxisOptions(chartAxis, 'label.rotation', value);\n            this.updateChart(chartOptions);\n            this.raiseChartOptionsChangedEvent();\n        }\n    }\n    getSeriesOption(expression, seriesType) {\n        const series = this.getChart().series.find((s) => ChartOptionsService.isMatchingSeries(seriesType, s));\n        return _.get(series, expression, undefined);\n    }\n    setSeriesOption(expression, value, seriesType) {\n        const chartOptions = this.createChartOptions({\n            seriesType,\n            expression: `series.${expression}`,\n            value\n        });\n        this.updateChart(chartOptions);\n        this.raiseChartOptionsChangedEvent();\n    }\n    getPairedMode() {\n        return this.chartController.getChartProxy().isPaired();\n    }\n    setPairedMode(paired) {\n        this.chartController.getChartProxy().setPaired(paired);\n    }\n    getAxis(axisType) {\n        const chart = this.getChart();\n        if (!chart.axes || chart.axes.length < 1) {\n            return undefined;\n        }\n        if (axisType === 'xAxis') {\n            return (chart.axes && chart.axes[0].direction === 'x') ? chart.axes[0] : chart.axes[1];\n        }\n        return (chart.axes && chart.axes[1].direction === 'y') ? chart.axes[1] : chart.axes[0];\n    }\n    getUpdateAxisOptions(chartAxis, expression, value) {\n        const seriesType = getSeriesType(this.getChartType());\n        const validAxisTypes = ['number', 'category', 'time', 'groupedCategory'];\n        if (!validAxisTypes.includes(chartAxis.type)) {\n            return {};\n        }\n        return this.createChartOptions({\n            seriesType,\n            expression: `axes.${chartAxis.type}.${expression}`,\n            value\n        });\n    }\n    getChartType() {\n        return this.chartController.getChartType();\n    }\n    getChart() {\n        return this.chartController.getChartProxy().getChart();\n    }\n    updateChart(chartOptions) {\n        const chartRef = this.chartController.getChartProxy().getChartRef();\n        AgChart.updateDelta(chartRef, chartOptions);\n    }\n    createChartOptions({ seriesType, expression, value }) {\n        const overrides = {};\n        const chartOptions = {\n            theme: {\n                overrides\n            }\n        };\n        _.set(overrides, `${seriesType}.${expression}`, value);\n        return chartOptions;\n    }\n    raiseChartOptionsChangedEvent() {\n        const chartModel = this.chartController.getChartModel();\n        const event = {\n            type: Events.EVENT_CHART_OPTIONS_CHANGED,\n            chartId: chartModel.chartId,\n            chartType: chartModel.chartType,\n            chartThemeName: this.chartController.getChartThemeName(),\n            chartOptions: chartModel.chartOptions\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    static isMatchingSeries(seriesType, series) {\n        return VALID_SERIES_TYPES.includes(seriesType) && series.type === seriesType;\n    }\n    destroy() {\n        super.destroy();\n    }\n}\n\nclass ComboChartProxy extends CartesianChartProxy {\n    constructor(params) {\n        super(params);\n    }\n    getAxes(params) {\n        const fields = params ? params.fields : [];\n        const fieldsMap = new Map(fields.map(f => [f.colId, f]));\n        const { primaryYKeys, secondaryYKeys } = this.getYKeys(fields, params.seriesChartTypes);\n        const axes = [\n            {\n                type: this.getXAxisType(params),\n                position: 'bottom',\n                gridStyle: [{ stroke: undefined }],\n            },\n        ];\n        if (primaryYKeys.length > 0) {\n            axes.push({\n                type: 'number',\n                keys: primaryYKeys,\n                position: 'left',\n            });\n        }\n        if (secondaryYKeys.length > 0) {\n            secondaryYKeys.forEach((secondaryYKey, i) => {\n                const field = fieldsMap.get(secondaryYKey);\n                const secondaryAxisIsVisible = field && field.colId === secondaryYKey;\n                if (!secondaryAxisIsVisible) {\n                    return;\n                }\n                const secondaryAxisOptions = {\n                    type: 'number',\n                    keys: [secondaryYKey],\n                    position: 'right',\n                };\n                const primaryYAxis = primaryYKeys.some(primaryYKey => !!fieldsMap.get(primaryYKey));\n                const lastSecondaryAxis = i === secondaryYKeys.length - 1;\n                if (!primaryYAxis && lastSecondaryAxis) ;\n                else {\n                    secondaryAxisOptions.gridStyle = [{ stroke: undefined }];\n                }\n                axes.push(secondaryAxisOptions);\n            });\n        }\n        return axes;\n    }\n    getSeries(params) {\n        const { fields, category, seriesChartTypes } = params;\n        return fields.map(field => {\n            const seriesChartType = seriesChartTypes.find(s => s.colId === field.colId);\n            if (seriesChartType) {\n                const chartType = seriesChartType.chartType;\n                const grouped = ['groupedColumn', 'groupedBar'].includes(chartType);\n                const groupedOpts = grouped ? { grouped: true } : {};\n                return Object.assign({ type: getSeriesType(chartType), xKey: category.id, yKey: field.colId, yName: field.displayName, stacked: ['stackedArea', 'stackedColumn'].includes(chartType) }, groupedOpts);\n            }\n        });\n    }\n    getYKeys(fields, seriesChartTypes) {\n        const primaryYKeys = [];\n        const secondaryYKeys = [];\n        fields.forEach(field => {\n            const colId = field.colId;\n            const seriesChartType = seriesChartTypes.find(s => s.colId === colId);\n            if (seriesChartType) {\n                seriesChartType.secondaryAxis ? secondaryYKeys.push(colId) : primaryYKeys.push(colId);\n            }\n        });\n        return { primaryYKeys, secondaryYKeys };\n    }\n}\n\nvar __decorate$N = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass GridChartComp extends Component {\n    constructor(params) {\n        super(GridChartComp.TEMPLATE);\n        this.params = params;\n    }\n    init() {\n        const availableChartThemes = this.gridOptionsService.get('chartThemes') || DEFAULT_THEMES;\n        if (availableChartThemes.length < 1) {\n            throw new Error('Cannot create chart: no chart themes are available to be used.');\n        }\n        let { chartThemeName } = this.params;\n        if (!_.includes(availableChartThemes, chartThemeName)) {\n            chartThemeName = availableChartThemes[0];\n        }\n        const modelParams = {\n            chartId: this.params.chartId,\n            pivotChart: this.params.pivotChart,\n            chartType: this.params.chartType,\n            chartThemeName: chartThemeName,\n            aggFunc: this.params.aggFunc,\n            cellRange: this.params.cellRange,\n            suppressChartRanges: this.params.suppressChartRanges,\n            unlinkChart: this.params.unlinkChart,\n            crossFiltering: this.params.crossFiltering,\n            seriesChartTypes: this.params.seriesChartTypes,\n        };\n        const isRtl = this.gridOptionsService.is('enableRtl');\n        this.addCssClass(isRtl ? 'ag-rtl' : 'ag-ltr');\n        // only the chart controller interacts with the chart model\n        const model = this.createBean(new ChartDataModel(modelParams));\n        this.chartController = this.createManagedBean(new ChartController(model));\n        this.validateCustomThemes();\n        // create chart before dialog to ensure dialog is correct size\n        this.createChart();\n        if (this.params.insideDialog) {\n            this.addDialog();\n        }\n        this.addMenu();\n        this.addTitleEditComp();\n        this.addManagedListener(this.getGui(), 'focusin', this.setActiveChartCellRange.bind(this));\n        this.addManagedListener(this.chartController, ChartController.EVENT_CHART_MODEL_UPDATE, this.update.bind(this));\n        if (this.chartMenu) {\n            // chart menu may not exist, i.e. cross filtering\n            this.addManagedListener(this.chartMenu, ChartMenu.EVENT_DOWNLOAD_CHART, () => this.downloadChart());\n        }\n        this.update();\n        this.raiseChartCreatedEvent();\n    }\n    validateCustomThemes() {\n        const suppliedThemes = this.getChartThemes();\n        const customChartThemes = this.gridOptionsService.get('customChartThemes');\n        if (customChartThemes) {\n            _.getAllKeysInObjects([customChartThemes]).forEach(customThemeName => {\n                if (!_.includes(suppliedThemes, customThemeName)) {\n                    console.warn(\"AG Grid: a custom chart theme with the name '\" + customThemeName + \"' has been \" +\n                        \"supplied but not added to the 'chartThemes' list\");\n                }\n            });\n        }\n    }\n    createChart() {\n        // if chart already exists, destroy it and remove it from DOM\n        let chartInstance = undefined;\n        if (this.chartProxy) {\n            chartInstance = this.chartProxy.destroy({ keepChartInstance: true });\n        }\n        const crossFilterCallback = (event, reset) => {\n            const ctx = this.params.crossFilteringContext;\n            ctx.lastSelectedChartId = reset ? '' : this.chartController.getChartId();\n            if (reset) {\n                this.params.crossFilteringResetCallback();\n            }\n            this.crossFilterService.filter(event, reset);\n        };\n        const chartType = this.chartController.getChartType();\n        const chartProxyParams = {\n            chartType,\n            chartInstance,\n            getChartThemeName: this.getChartThemeName.bind(this),\n            getChartThemes: this.getChartThemes.bind(this),\n            customChartThemes: this.gridOptionsService.get('customChartThemes'),\n            getGridOptionsChartThemeOverrides: () => this.getGridOptionsChartThemeOverrides(),\n            getExtraPaddingDirections: () => { var _a, _b; return (_b = (_a = this.chartMenu) === null || _a === void 0 ? void 0 : _a.getExtraPaddingDirections()) !== null && _b !== void 0 ? _b : []; },\n            apiChartThemeOverrides: this.params.chartThemeOverrides,\n            crossFiltering: this.params.crossFiltering,\n            crossFilterCallback,\n            parentElement: this.eChart,\n            grouping: this.chartController.isGrouping(),\n            chartThemeToRestore: this.params.chartThemeName,\n            chartOptionsToRestore: this.params.chartOptionsToRestore,\n            chartPaletteToRestore: this.params.chartPaletteToRestore,\n            seriesChartTypes: this.chartController.getSeriesChartTypes(),\n            translate: (toTranslate, defaultText) => this.chartTranslationService.translate(toTranslate, defaultText),\n        };\n        // ensure 'restoring' options are not reused when switching chart types\n        this.params.chartOptionsToRestore = undefined;\n        // set local state used to detect when chart changes\n        this.chartType = chartType;\n        this.chartThemeName = this.chartController.getChartThemeName();\n        this.chartProxy = GridChartComp.createChartProxy(chartProxyParams);\n        if (!this.chartProxy) {\n            console.warn('AG Grid: invalid chart type supplied: ', chartProxyParams.chartType);\n            return;\n        }\n        const canvas = this.eChart.querySelector('canvas');\n        if (canvas) {\n            canvas.classList.add('ag-charts-canvas');\n        }\n        this.chartController.setChartProxy(this.chartProxy);\n        this.chartOptionsService = this.createBean(new ChartOptionsService(this.chartController));\n        this.titleEdit && this.titleEdit.refreshTitle(this.chartController, this.chartOptionsService);\n    }\n    getChartThemeName() {\n        return this.chartController.getChartThemeName();\n    }\n    getChartThemes() {\n        return this.chartController.getThemes();\n    }\n    getGridOptionsChartThemeOverrides() {\n        return this.gridOptionsService.get('chartThemeOverrides');\n    }\n    static createChartProxy(chartProxyParams) {\n        switch (chartProxyParams.chartType) {\n            case 'column':\n            case 'bar':\n            case 'groupedColumn':\n            case 'stackedColumn':\n            case 'normalizedColumn':\n            case 'groupedBar':\n            case 'stackedBar':\n            case 'normalizedBar':\n                return new BarChartProxy(chartProxyParams);\n            case 'pie':\n            case 'doughnut':\n                return new PieChartProxy(chartProxyParams);\n            case 'area':\n            case 'stackedArea':\n            case 'normalizedArea':\n                return new AreaChartProxy(chartProxyParams);\n            case 'line':\n                return new LineChartProxy(chartProxyParams);\n            case 'scatter':\n            case 'bubble':\n                return new ScatterChartProxy(chartProxyParams);\n            case 'histogram':\n                return new HistogramChartProxy(chartProxyParams);\n            case 'columnLineCombo':\n            case 'areaColumnCombo':\n            case 'customCombo':\n                return new ComboChartProxy(chartProxyParams);\n            default:\n                throw `AG Grid: Unable to create chart as an invalid chartType = '${chartProxyParams.chartType}' was supplied.`;\n        }\n    }\n    addDialog() {\n        const title = this.chartTranslationService.translate(this.params.pivotChart ? 'pivotChartTitle' : 'rangeChartTitle');\n        const { width, height } = this.getBestDialogSize();\n        this.chartDialog = new AgDialog({\n            resizable: true,\n            movable: true,\n            maximizable: true,\n            title,\n            width,\n            height,\n            component: this,\n            centered: true,\n            closable: true\n        });\n        this.getContext().createBean(this.chartDialog);\n        this.chartDialog.addEventListener(AgDialog.EVENT_DESTROYED, () => this.destroy());\n    }\n    getBestDialogSize() {\n        const popupParent = this.popupService.getPopupParent();\n        const maxWidth = _.getAbsoluteWidth(popupParent) * 0.75;\n        const maxHeight = _.getAbsoluteHeight(popupParent) * 0.75;\n        const ratio = 0.553;\n        const chart = this.chartProxy.getChart();\n        let width = this.params.insideDialog ? 850 : chart.width;\n        let height = this.params.insideDialog ? 470 : chart.height;\n        if (width > maxWidth || height > maxHeight) {\n            width = Math.min(width, maxWidth);\n            height = Math.round(width * ratio);\n            if (height > maxHeight) {\n                height = maxHeight;\n                width = Math.min(width, Math.round(height / ratio));\n            }\n        }\n        return { width, height };\n    }\n    addMenu() {\n        if (!this.params.crossFiltering) {\n            this.chartMenu = this.createBean(new ChartMenu(this.eChartContainer, this.eMenuContainer, this.chartController, this.chartOptionsService));\n            this.eChartContainer.appendChild(this.chartMenu.getGui());\n        }\n    }\n    addTitleEditComp() {\n        this.titleEdit = this.createBean(new TitleEdit(this.chartMenu));\n        this.eTitleEditContainer.appendChild(this.titleEdit.getGui());\n        if (this.chartProxy) {\n            this.titleEdit.refreshTitle(this.chartController, this.chartOptionsService);\n        }\n    }\n    update(params) {\n        // update chart model for api.updateChart()\n        if (params === null || params === void 0 ? void 0 : params.chartId) {\n            const validUpdate = this.chartController.update(params);\n            if (!validUpdate) {\n                return; // warning already logged!\n            }\n        }\n        const chartTypeChanged = this.chartTypeChanged(params);\n        // recreate chart if chart type has changed\n        if (chartTypeChanged)\n            this.createChart();\n        // update chart options if chart type hasn't changed or if overrides are supplied\n        this.updateChart(params === null || params === void 0 ? void 0 : params.chartThemeOverrides);\n        if (params === null || params === void 0 ? void 0 : params.chartId) {\n            this.chartProxy.getChart().waitForUpdate().then(() => {\n                this.chartController.raiseChartApiUpdateEvent();\n            });\n        }\n    }\n    updateChart(updatedOverrides) {\n        const { chartProxy } = this;\n        const selectedCols = this.chartController.getSelectedValueColState();\n        const fields = selectedCols.map(c => ({ colId: c.colId, displayName: c.displayName }));\n        const data = this.chartController.getChartData();\n        const chartEmpty = this.handleEmptyChart(data, fields);\n        if (chartEmpty) {\n            return;\n        }\n        let chartUpdateParams = this.chartController.getChartUpdateParams(updatedOverrides);\n        chartProxy.update(chartUpdateParams);\n        this.chartProxy.getChart().waitForUpdate().then(() => {\n            this.chartController.raiseChartUpdatedEvent();\n        });\n        this.titleEdit.refreshTitle(this.chartController, this.chartOptionsService);\n    }\n    chartTypeChanged(updateParams) {\n        const [currentType, updatedChartType] = [this.chartController.getChartType(), updateParams === null || updateParams === void 0 ? void 0 : updateParams.chartType];\n        return this.chartType !== currentType || (!!updatedChartType && this.chartType !== updatedChartType);\n    }\n    getChartModel() {\n        return this.chartController.getChartModel();\n    }\n    getChartImageDataURL(fileFormat) {\n        return this.chartProxy.getChartImageDataURL(fileFormat);\n    }\n    handleEmptyChart(data, fields) {\n        const pivotModeDisabled = this.chartController.isPivotChart() && !this.chartController.isPivotMode();\n        let minFieldsRequired = 1;\n        if (this.chartController.isActiveXYChart()) {\n            minFieldsRequired = this.chartController.getChartType() === 'bubble' ? 3 : 2;\n        }\n        const isEmptyChart = fields.length < minFieldsRequired || data.length === 0;\n        if (this.eChart) {\n            const isEmpty = pivotModeDisabled || isEmptyChart;\n            _.setDisplayed(this.eChart, !isEmpty);\n            _.setDisplayed(this.eEmpty, isEmpty);\n        }\n        if (pivotModeDisabled) {\n            this.eEmpty.innerText = this.chartTranslationService.translate('pivotChartRequiresPivotMode');\n            return true;\n        }\n        if (isEmptyChart) {\n            this.eEmpty.innerText = this.chartTranslationService.translate('noDataToChart');\n            return true;\n        }\n        return false;\n    }\n    downloadChart(dimensions, fileName, fileFormat) {\n        this.chartProxy.downloadChart(dimensions, fileName, fileFormat);\n    }\n    openChartToolPanel(panel) {\n        const menuPanel = panel ? CHART_TOOL_PANEL_MENU_OPTIONS[panel] : panel;\n        this.chartMenu.showMenu(menuPanel);\n    }\n    closeChartToolPanel() {\n        this.chartMenu.hideMenu();\n    }\n    getChartId() {\n        return this.chartController.getChartId();\n    }\n    getUnderlyingChart() {\n        return this.chartProxy.getChartRef();\n    }\n    crossFilteringReset() {\n        this.chartProxy.crossFilteringReset();\n    }\n    setActiveChartCellRange(focusEvent) {\n        if (this.getGui().contains(focusEvent.relatedTarget)) {\n            return;\n        }\n        this.chartController.setChartRange(true);\n        this.gridApi.focusService.clearFocusedCell();\n    }\n    raiseChartCreatedEvent() {\n        const event = {\n            type: Events.EVENT_CHART_CREATED,\n            chartId: this.chartController.getChartId()\n        };\n        this.chartProxy.getChart().waitForUpdate().then(() => {\n            this.eventService.dispatchEvent(event);\n        });\n    }\n    raiseChartDestroyedEvent() {\n        const event = {\n            type: Events.EVENT_CHART_DESTROYED,\n            chartId: this.chartController.getChartId(),\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    destroy() {\n        super.destroy();\n        if (this.chartProxy) {\n            this.chartProxy.destroy();\n        }\n        this.destroyBean(this.chartMenu);\n        this.destroyBean(this.titleEdit);\n        // don't want to invoke destroy() on the Dialog (prevents destroy loop)\n        if (this.chartDialog && this.chartDialog.isAlive()) {\n            this.destroyBean(this.chartDialog);\n        }\n        // if the user is providing containers for the charts, we need to clean up, otherwise the old chart\n        // data will still be visible although the chart is no longer bound to the grid\n        const eGui = this.getGui();\n        _.clearElement(eGui);\n        // remove from parent, so if user provided container, we detach from the provided dom element\n        _.removeFromParent(eGui);\n        this.raiseChartDestroyedEvent();\n    }\n}\nGridChartComp.TEMPLATE = `<div class=\"ag-chart\" tabindex=\"-1\">\n            <div ref=\"eChartContainer\" tabindex=\"-1\" class=\"ag-chart-components-wrapper\">\n                <div ref=\"eChart\" class=\"ag-chart-canvas-wrapper\"></div>\n                <div ref=\"eEmpty\" class=\"ag-chart-empty-text ag-unselectable\"></div>\n            </div>\n            <div ref=\"eTitleEditContainer\"></div>\n            <div ref=\"eMenuContainer\" class=\"ag-chart-docked-container\"></div>\n        </div>`;\n__decorate$N([\n    RefSelector('eChart')\n], GridChartComp.prototype, \"eChart\", void 0);\n__decorate$N([\n    RefSelector('eChartContainer')\n], GridChartComp.prototype, \"eChartContainer\", void 0);\n__decorate$N([\n    RefSelector('eMenuContainer')\n], GridChartComp.prototype, \"eMenuContainer\", void 0);\n__decorate$N([\n    RefSelector('eEmpty')\n], GridChartComp.prototype, \"eEmpty\", void 0);\n__decorate$N([\n    RefSelector('eTitleEditContainer')\n], GridChartComp.prototype, \"eTitleEditContainer\", void 0);\n__decorate$N([\n    Autowired('chartCrossFilterService')\n], GridChartComp.prototype, \"crossFilterService\", void 0);\n__decorate$N([\n    Autowired('chartTranslationService')\n], GridChartComp.prototype, \"chartTranslationService\", void 0);\n__decorate$N([\n    Autowired('gridApi')\n], GridChartComp.prototype, \"gridApi\", void 0);\n__decorate$N([\n    Autowired('popupService')\n], GridChartComp.prototype, \"popupService\", void 0);\n__decorate$N([\n    PostConstruct\n], GridChartComp.prototype, \"init\", null);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$a = '30.0.3';\n\nvar __rest$1 = (undefined && undefined.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nfunction upgradeChartModel(model) {\n    model.version;\n    if (model.version == null) {\n        // Try to guess the version so we can apply the right subset of migrations.\n        model.version = heuristicVersionDetection(model);\n    }\n    model = migrateIfBefore('23.0.0', model, migrateV23);\n    model = migrateIfBefore('24.0.0', model, migrateV24);\n    model = migrateIfBefore('25.1.0', model, migrateV25_1);\n    model = migrateIfBefore('26.0.0', model, migrateV26);\n    model = migrateIfBefore('26.1.0', model, migrateV26_1);\n    // Switch from iChartOptions to iAgChartOptions....\n    model = migrateIfBefore('26.2.0', model, migrateV26_2);\n    model = migrateIfBefore('28.0.0', model, migrateV28);\n    model = migrateIfBefore('28.2.0', model, migrateV28_2);\n    model = migrateIfBefore('29.0.0', model, migrateV29);\n    model = migrateIfBefore('29.1.0', model, migrateV29_1);\n    model = migrateIfBefore('29.2.0', model, migrateV29_2);\n    model = migrateIfBefore('30.0.0', model, migrateV30);\n    model = cleanup(model);\n    // Bump version to latest.\n    model = migrateIfBefore(VERSION$a, model, (m) => m);\n    return model;\n}\nfunction migrateV23(model) {\n    // https://github.com/ag-grid/ag-grid/commit/76c6744ff2b732d298d1ade73c122188854b5bac\n    model = jsonRename('chartOptions.legend.item.marker.type', 'shape', model);\n    model = jsonRename('chartOptions.seriesDefaults.marker.type', 'shape', model);\n    // https://github.com/ag-grid/ag-grid/commit/7bdf2cfd666acda758a818733a9f9cb35ac1d7a7\n    model = jsonRename('chartOptions.legend.padding', 'spacing', model);\n    return model;\n}\nfunction migrateV24(model) {\n    var _a;\n    // https://github.com/ag-grid/ag-grid/commit/f4e854e3dc459400fa00e6da2873cb8e9cfff6fe#\n    model = jsonDelete('chartOptions.seriesDefaults.marker.minSize', model);\n    const _b = model, { chartType, chartPalette } = _b, // Migrate.\n    _c = _b.chartOptions, // Migrate.\n    { xAxis, yAxis } = _c, chartOptions = __rest$1(_c, [\"xAxis\", \"yAxis\"]), chartModel = __rest$1(_b, [\"chartType\", \"chartPalette\", \"chartOptions\"]);\n    const axesTypes = getLegacyAxisType(chartType);\n    const axes = axesTypes === null || axesTypes === void 0 ? void 0 : axesTypes.map((type, i) => (Object.assign({ type }, (i === 0 ? xAxis : yAxis))));\n    return Object.assign({ chartType, chartThemeName: (_a = LEGACY_PALETTES[chartPalette]) !== null && _a !== void 0 ? _a : 'ag-default', chartOptions: Object.assign(Object.assign({}, chartOptions), { axes,\n            xAxis,\n            yAxis }) }, chartModel);\n}\nfunction migrateV25_1(model) {\n    // https://github.com/ag-grid/ag-grid/commit/61943f9fecbfb5ac1b9a1fd93788f9fdd8687181\n    model = jsonRename('chartOptions.seriesDefaults.label.minRequiredAngle', 'minAngle', model);\n    return model;\n}\nfunction migrateV26(model) {\n    // https://github.com/ag-grid/ag-grid/commit/df2445d88e64cb4e831d6163104a0fa60ccde3b5\n    const highlightOptUpdate = (_a) => {\n        var { dimOpacity } = _a, opts = __rest$1(_a, [\"dimOpacity\"]);\n        return (Object.assign(Object.assign({}, opts), (dimOpacity != null ? { series: { dimOpacity } } : {})));\n    };\n    model = jsonMutate('chartOptions.seriesDefaults.highlightStyle', model, highlightOptUpdate);\n    // https://github.com/ag-grid/ag-grid/commit/f4e854e3dc459400fa00e6da2873cb8e9cfff6fe#\n    model = jsonDelete('chart', model);\n    model = jsonDelete('chartOptions.seriesDefaults.tooltipClass', model);\n    model = jsonDelete('chartOptions.seriesDefaults.tooltipTracking', model);\n    // Cleanup label.rotation === 0, which was treated as 'use the default' on reload prior to 26.\n    model = jsonDeleteDefault('chartOptions.axes[].label.rotation', 0, model);\n    model = jsonDeleteDefault('chartOptions.axes[].label.rotation', 335, model);\n    return model;\n}\nfunction migrateV26_1(model) {\n    // https://github.com/ag-grid/ag-grid/commit/df2445d88e64cb4e831d6163104a0fa60ccde3b5\n    const highlightOptUpdate = (_a) => {\n        var { item, series } = _a, opts = __rest$1(_a, [\"item\", \"series\"]);\n        return (Object.assign({ item: Object.assign(Object.assign({}, opts), item) }, (series ? { series } : {})));\n    };\n    model = jsonMutate('chartOptions.seriesDefaults.highlightStyle', model, highlightOptUpdate);\n    model = jsonMutate('chartOptions.series[].highlightStyle', model, highlightOptUpdate);\n    return model;\n}\nfunction migrateV26_2(model) {\n    // https://github.com/ag-grid/ag-grid/commit/8b2e223cb1a687cb6c1d70b9f75f52fa29d00341\n    model = jsonMove('chartOptions.seriesDefaults.fill.opacity', 'chartOptions.seriesDefaults.fillOpacity', model);\n    model = jsonMove('chartOptions.seriesDefaults.stroke.opacity', 'chartOptions.seriesDefaults.strokeOpacity', model);\n    model = jsonMove('chartOptions.seriesDefaults.stroke.width', 'chartOptions.seriesDefaults.strokeWidth', model);\n    model = jsonDelete('chartOptions.seriesDefaults.fill', model);\n    model = jsonDelete('chartOptions.seriesDefaults.stroke', model);\n    model = jsonDelete('chartOptions.seriesDefaults.callout.colors', model);\n    model = jsonDelete('chartOptions.xAxis', model);\n    model = jsonDelete('chartOptions.yAxis', model);\n    const _a = model, { chartType } = _a, _b = _a.chartOptions, { axes, series, seriesDefaults } = _b, otherChartOptions = __rest$1(_b, [\"axes\", \"series\", \"seriesDefaults\"]), otherModelProps = __rest$1(_a, [\"chartType\", \"chartOptions\"]);\n    // At 26.2.0 combination charts weren't supported, so we can safely assume a single series type.\n    // We can't rely on the `series.type` field as it was incorrect (in v25.0.0 line chart has an\n    // `area` series).\n    const seriesTypes = [getSeriesType(chartType)];\n    const chartTypeMixin = {};\n    if (!seriesTypes.includes('pie')) {\n        const minimalAxis = { top: {}, bottom: {}, left: {}, right: {} };\n        const updatedAxes = axes\n            .map((_a) => {\n            var { type } = _a, axisProps = __rest$1(_a, [\"type\"]);\n            return ({\n                [type]: Object.assign(Object.assign({}, minimalAxis), axisProps),\n            });\n        })\n            .reduce(merge, {});\n        ALL_AXIS_TYPES.filter((v) => updatedAxes[v] == null).forEach((v) => {\n            updatedAxes[v] = Object.assign({}, minimalAxis);\n        });\n        chartTypeMixin.axes = updatedAxes;\n    }\n    const updatedChartOptions = seriesTypes\n        .map((t) => ({\n        [t]: Object.assign(Object.assign(Object.assign({}, chartTypeMixin), { series: seriesDefaults }), otherChartOptions),\n    }))\n        .reduce(merge, {});\n    model = Object.assign(Object.assign({}, otherModelProps), { chartType, chartOptions: updatedChartOptions });\n    return model;\n}\nfunction migrateV28(model) {\n    model = jsonDelete('chartOptions.*.title.padding', model);\n    model = jsonDelete('chartOptions.*.subtitle.padding', model);\n    model = jsonDelete('chartOptions.*.axes.*.title.padding', model);\n    model = jsonBackfill('chartOptions.*.axes.*.title.enabled', false, model);\n    return model;\n}\nfunction migrateV28_2(model) {\n    model = jsonRename('chartOptions.pie.series.callout', 'calloutLine', model);\n    model = jsonRename('chartOptions.pie.series.label', 'calloutLabel', model);\n    model = jsonRename('chartOptions.pie.series.labelKey', 'sectorLabelKey', model);\n    model = jsonRename('chartOptions.pie.series.labelName', 'sectorLabelName', model);\n    // series.yKeys => yKey ?\n    // series.yNames => yName ?\n    return model;\n}\nfunction migrateV29(model) {\n    model = jsonMoveIfMissing('chartOptions.scatter.series.fill', 'chartOptions.scatter.series.marker.fill', model);\n    model = jsonMoveIfMissing('chartOptions.scatter.series.fillOpacity', 'chartOptions.scatter.series.marker.fillOpacity', model);\n    model = jsonMoveIfMissing('chartOptions.scatter.series.stroke', 'chartOptions.scatter.series.marker.stroke', model);\n    model = jsonMoveIfMissing('chartOptions.scatter.series.strokeOpacity', 'chartOptions.scatter.series.marker.strokeOpacity', model);\n    model = jsonMoveIfMissing('chartOptions.scatter.series.strokeWidth', 'chartOptions.scatter.series.marker.strokeWidth', model);\n    model = jsonMove('chartOptions.scatter.series.paired', 'chartOptions.scatter.paired', model);\n    return model;\n}\nfunction migrateV29_1(model) {\n    model = jsonDelete('chartOptions.axes[].tick.count', model);\n    return model;\n}\nfunction migrateV29_2(model) {\n    // https://github.com/ag-grid/ag-grid/commit/ce11956492e42e845932edb4e05d7b0b21db5c61\n    const tooltipOptUpdate = (_a) => {\n        var _b, _c, _d, _e;\n        var { tracking } = _a, opts = __rest$1(_a, [\"tracking\"]);\n        const output = Object.assign({}, opts);\n        if (tracking === false) {\n            (_b = output.position) !== null && _b !== void 0 ? _b : (output.position = { type: 'pointer' });\n            (_c = output.range) !== null && _c !== void 0 ? _c : (output.range = 'nearest');\n        }\n        else if (tracking === true) {\n            (_d = output.position) !== null && _d !== void 0 ? _d : (output.position = { type: 'node' });\n            (_e = output.range) !== null && _e !== void 0 ? _e : (output.range = 'nearest');\n        }\n        return output;\n    };\n    model = jsonMutate('chartOptions.*.tooltip', model, tooltipOptUpdate);\n    return model;\n}\nfunction migrateV30(model) {\n    // Repeated from migrateV28_2() as they were applied retrospectively for the v30 release.\n    model = jsonRename('chartOptions.pie.series.labelKey', 'sectorLabelKey', model);\n    model = jsonRename('chartOptions.pie.series.labelName', 'sectorLabelName', model);\n    // Late-applied migrations for deprecations in the 29.x.y range.\n    model = migrateV29_1(model);\n    model = migrateV29_2(model);\n    // Actual v30 changes.\n    model = jsonDelete('chartOptions.*.series.flipXY', model);\n    model = jsonAdd('chartOptions.common.legend.enabled', true, model);\n    model = jsonBackfill('chartOptions.common.legend.position', 'right', model);\n    return model;\n}\nfunction cleanup(model) {\n    // Remove fixed width/height - this has never been supported via UI configuration.\n    model = jsonDelete('chartOptions.*.width', model);\n    model = jsonDelete('chartOptions.*.height', model);\n    model = jsonBackfill('chartOptions.*.axes.category.label.autoRotate', true, model);\n    return model;\n}\nfunction heuristicVersionDetection(model) {\n    var _a, _b;\n    const modelAny = model;\n    if (model.version != null) {\n        return model.version;\n    }\n    const hasKey = (obj, ...keys) => {\n        return Object.keys(obj || {}).some((k) => keys.includes(k));\n    };\n    const chartOptions = modelAny.chartOptions;\n    const seriesOptions = hasKey(chartOptions, 'seriesDefaults')\n        ? chartOptions === null || chartOptions === void 0 ? void 0 : chartOptions.seriesDefaults\n        : chartOptions === null || chartOptions === void 0 ? void 0 : chartOptions[Object.keys(chartOptions)[0]];\n    const hints = {\n        '27.0.0': hasKey(modelAny, 'seriesChartTypes'),\n        '26.2.0': !hasKey(chartOptions, 'seriesDefaults'),\n        '26.1.0': hasKey(seriesOptions === null || seriesOptions === void 0 ? void 0 : seriesOptions.highlightStyle, 'item'),\n        '26.0.0': hasKey(seriesOptions === null || seriesOptions === void 0 ? void 0 : seriesOptions.highlightStyle, 'series'),\n        // '26.0.0': modelAny.chart === undefined,\n        '25.1.0': hasKey(seriesOptions === null || seriesOptions === void 0 ? void 0 : seriesOptions.label, 'minAngle'),\n        '25.0.0': hasKey(modelAny, 'modelType', 'aggFunc', 'unlinkChart', 'suppressChartRanges') ||\n            hasKey(seriesOptions, 'lineDash', 'lineDashOffset'),\n        '24.0.0': hasKey(modelAny, 'chartThemeName', 'chart') || hasKey(chartOptions, 'series'),\n        '23.2.0': hasKey(chartOptions, 'navigator'),\n        '23.0.0': hasKey((_b = (_a = chartOptions === null || chartOptions === void 0 ? void 0 : chartOptions.legend) === null || _a === void 0 ? void 0 : _a.item) === null || _b === void 0 ? void 0 : _b.marker, 'shape'),\n        '22.1.0': hasKey(modelAny, 'chartPalette', 'chartType'),\n    };\n    // Default to 27.1.0, the last version before we added `version`.\n    const defaultVersion = '27.1.0';\n    const matchingHints = Object.entries(hints).filter(([_, match]) => match);\n    const [heuristicVersion = defaultVersion] = matchingHints[0];\n    return heuristicVersion;\n}\nfunction migrateIfBefore(maxVersion, model, migration) {\n    if (versionNumber(maxVersion) > versionNumber(model.version)) {\n        const result = migration(model);\n        result.version = maxVersion;\n        return result;\n    }\n    return model;\n}\nfunction versionParts(version) {\n    const split = typeof version === 'string' ? version.split('.').map((v) => Number(v)) : [];\n    if (split.length !== 3 || split.some((v) => isNaN(v))) {\n        throw new Error('AG Grid - Illegal version string: ' + version);\n    }\n    return {\n        major: split[0],\n        minor: split[1],\n        patch: split[2],\n    };\n}\nfunction versionNumber(version) {\n    const { major, minor, patch } = versionParts(version);\n    // Return a number of the form MMmmPP.\n    return major * 10000 + minor * 100 + patch;\n}\nfunction jsonDeleteDefault(path, defaultValue, json) {\n    return jsonMutateProperty(path, true, json, (parent, prop) => {\n        if (parent[prop] === defaultValue) {\n            delete parent[prop];\n        }\n    });\n}\nfunction jsonBackfill(path, defaultValue, json) {\n    return jsonMutateProperty(path, false, json, (parent, prop) => {\n        if (parent[prop] == null) {\n            parent[prop] = defaultValue;\n        }\n    });\n}\nfunction jsonAdd(path, value, json) {\n    var _a;\n    if (typeof path === 'string') {\n        path = path.split('.');\n    }\n    const nextPath = path[0];\n    if (path.length > 1) {\n        json[nextPath] = jsonAdd(path.slice(1), value, (_a = json[nextPath]) !== null && _a !== void 0 ? _a : {});\n    }\n    const hasProperty = Object.keys(json).includes(nextPath);\n    if (!hasProperty) {\n        json[nextPath] = value;\n    }\n    return json;\n}\nfunction jsonMove(from, to, json) {\n    let valueToMove = undefined;\n    let valueFound = false;\n    json = jsonMutateProperty(from, true, json, (parent, prop) => {\n        valueFound = true;\n        valueToMove = parent[prop];\n        delete parent[prop];\n    });\n    if (!valueFound) {\n        return json;\n    }\n    return jsonMutateProperty(to, false, json, (parent, prop) => {\n        parent[prop] = valueToMove;\n    });\n}\nfunction jsonMoveIfMissing(from, to, json) {\n    let valueToMove = undefined;\n    let valueFound = false;\n    json = jsonMutateProperty(from, true, json, (parent, prop) => {\n        valueFound = true;\n        valueToMove = parent[prop];\n        delete parent[prop];\n    });\n    if (!valueFound) {\n        return json;\n    }\n    return jsonMutateProperty(to, false, json, (parent, prop) => {\n        if (parent[prop] === undefined) {\n            parent[prop] = valueToMove;\n        }\n    });\n}\nfunction jsonRename(path, renameTo, json) {\n    return jsonMutateProperty(path, true, json, (parent, prop) => {\n        parent[renameTo] = parent[prop];\n        delete parent[prop];\n    });\n}\nfunction jsonDelete(path, json) {\n    return jsonMutateProperty(path, true, json, (parent, prop) => delete parent[prop]);\n}\nfunction jsonMutateProperty(path, skipMissing, json, mutator) {\n    const pathElements = path instanceof Array ? path : path.split('.');\n    const parentPathElements = pathElements.slice(0, pathElements.length - 1);\n    const targetName = pathElements[pathElements.length - 1];\n    return jsonMutate(parentPathElements, json, (parent) => {\n        const hasProperty = Object.keys(parent).includes(targetName);\n        if (skipMissing && !hasProperty) {\n            return parent;\n        }\n        const result = Object.assign({}, parent);\n        mutator(result, targetName);\n        return result;\n    });\n}\nfunction jsonMutate(path, json, mutator) {\n    const pathElements = path instanceof Array ? path : path.split('.');\n    // Clone to avoid mutating original input.\n    json = Object.assign({}, json);\n    if (pathElements.length === 0) {\n        return mutator(json);\n    }\n    else if (pathElements[0].startsWith('{')) {\n        const pathOptions = pathElements[0].substring(1, pathElements[0].lastIndexOf('}')).split(',');\n        for (const pathOption of pathOptions) {\n            if (json[pathOption] != null) {\n                json[pathOption] = jsonMutate(pathElements.slice(1), json[pathOption], mutator);\n            }\n        }\n    }\n    else if (pathElements[0].endsWith('[]')) {\n        const arrayName = pathElements[0].substring(0, path[0].indexOf('['));\n        if (json[arrayName] instanceof Array) {\n            json[arrayName] = json[arrayName].map((v) => jsonMutate(pathElements.slice(1), v, mutator));\n        }\n    }\n    else if (pathElements[0] === '*') {\n        for (const jsonProp in json) {\n            json[jsonProp] = jsonMutate(pathElements.slice(1), json[jsonProp], mutator);\n        }\n    }\n    else if (json[pathElements[0]] != null) {\n        json[pathElements[0]] = jsonMutate(pathElements.slice(1), json[pathElements[0]], mutator);\n    }\n    return json;\n}\nconst merge = (r, n) => (Object.assign(Object.assign({}, r), n));\n// Precise legacy palette fills/strokes can be found here for future reference:\n// https://github.com/ag-grid/ag-grid/blob/b22.1.0/grid-enterprise-modules/charts/src/charts/chart/palettes.ts\nconst LEGACY_PALETTES = {\n    borneo: 'ag-default',\n    material: 'ag-material',\n    pastel: 'ag-pastel',\n    bright: 'ag-vivid',\n    flat: 'ag-solar',\n};\n\nvar __decorate$M = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ChartService = class ChartService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        // we destroy all charts bound to this grid when grid is destroyed. activeCharts contains all charts, including\n        // those in developer provided containers.\n        this.activeCharts = new Set();\n        this.activeChartComps = new Set();\n        // this shared (singleton) context is used by cross filtering in line and area charts\n        this.crossFilteringContext = {\n            lastSelectedChartId: '',\n        };\n    }\n    updateChart(params) {\n        if (this.activeChartComps.size === 0) {\n            console.warn(`AG Grid - No active charts to update.`);\n            return;\n        }\n        const chartComp = [...this.activeChartComps].find(chartComp => chartComp.getChartId() === params.chartId);\n        if (!chartComp) {\n            console.warn(`AG Grid - Unable to update chart. No active chart found with ID: ${params.chartId}.`);\n            return;\n        }\n        chartComp.update(params);\n    }\n    getChartModels() {\n        const models = [];\n        const versionedModel = (c) => {\n            return Object.assign(Object.assign({}, c), { version: VERSION$a });\n        };\n        this.activeChartComps.forEach(c => models.push(versionedModel(c.getChartModel())));\n        return models;\n    }\n    getChartRef(chartId) {\n        let chartRef;\n        this.activeCharts.forEach(cr => {\n            if (cr.chartId === chartId) {\n                chartRef = cr;\n            }\n        });\n        return chartRef;\n    }\n    getChartComp(chartId) {\n        let chartComp;\n        this.activeChartComps.forEach(comp => {\n            if (comp.getChartId() === chartId) {\n                chartComp = comp;\n            }\n        });\n        return chartComp;\n    }\n    getChartImageDataURL(params) {\n        let url;\n        this.activeChartComps.forEach(c => {\n            if (c.getChartId() === params.chartId) {\n                url = c.getChartImageDataURL(params.fileFormat);\n            }\n        });\n        return url;\n    }\n    downloadChart(params) {\n        const chartComp = Array.from(this.activeChartComps).find(c => c.getChartId() === params.chartId);\n        chartComp === null || chartComp === void 0 ? void 0 : chartComp.downloadChart(params.dimensions, params.fileName, params.fileFormat);\n    }\n    openChartToolPanel(params) {\n        const chartComp = Array.from(this.activeChartComps).find(c => c.getChartId() === params.chartId);\n        chartComp === null || chartComp === void 0 ? void 0 : chartComp.openChartToolPanel(params.panel);\n    }\n    closeChartToolPanel(chartId) {\n        const chartComp = Array.from(this.activeChartComps).find(c => c.getChartId() === chartId);\n        chartComp === null || chartComp === void 0 ? void 0 : chartComp.closeChartToolPanel();\n    }\n    createChartFromCurrentRange(chartType = 'groupedColumn') {\n        const selectedRange = this.getSelectedRange();\n        return this.createChart(selectedRange, chartType);\n    }\n    restoreChart(model, chartContainer) {\n        if (!model) {\n            console.warn(\"AG Grid - unable to restore chart as no chart model is provided\");\n            return;\n        }\n        if (model.version !== VERSION$a) {\n            model = upgradeChartModel(model);\n        }\n        const params = {\n            cellRange: model.cellRange,\n            chartType: model.chartType,\n            chartThemeName: model.chartThemeName,\n            chartContainer: chartContainer,\n            suppressChartRanges: model.suppressChartRanges,\n            aggFunc: model.aggFunc,\n            unlinkChart: model.unlinkChart,\n            seriesChartTypes: model.seriesChartTypes\n        };\n        const getCellRange = (cellRangeParams) => {\n            return this.rangeService\n                ? this.rangeService.createCellRangeFromCellRangeParams(cellRangeParams)\n                : undefined;\n        };\n        if (model.modelType === 'pivot') {\n            // if required enter pivot mode\n            if (!this.columnModel.isPivotMode()) {\n                this.columnModel.setPivotMode(true, \"pivotChart\");\n            }\n            // pivot chart range contains all visible column without a row range to include all rows\n            const columns = this.columnModel.getAllDisplayedColumns().map(col => col.getColId());\n            const chartAllRangeParams = {\n                rowStartIndex: null,\n                rowStartPinned: undefined,\n                rowEndIndex: null,\n                rowEndPinned: undefined,\n                columns\n            };\n            const cellRange = getCellRange(chartAllRangeParams);\n            if (!cellRange) {\n                console.warn(\"AG Grid - unable to create chart as there are no columns in the grid.\");\n                return;\n            }\n            return this.createChart(cellRange, params.chartType, params.chartThemeName, true, true, params.chartContainer, undefined, undefined, params.unlinkChart, false, model.chartOptions);\n        }\n        const cellRange = getCellRange(params.cellRange);\n        if (!cellRange) {\n            console.warn(\"AG Grid - unable to create chart as no range is selected\");\n            return;\n        }\n        return this.createChart(cellRange, params.chartType, params.chartThemeName, false, params.suppressChartRanges, params.chartContainer, params.aggFunc, undefined, params.unlinkChart, false, model.chartOptions, model.chartPalette, params.seriesChartTypes);\n    }\n    createRangeChart(params) {\n        var _a;\n        const cellRange = (_a = this.rangeService) === null || _a === void 0 ? void 0 : _a.createCellRangeFromCellRangeParams(params.cellRange);\n        if (!cellRange) {\n            console.warn(\"AG Grid - unable to create chart as no range is selected\");\n            return;\n        }\n        return this.createChart(cellRange, params.chartType, params.chartThemeName, false, params.suppressChartRanges, params.chartContainer, params.aggFunc, params.chartThemeOverrides, params.unlinkChart, undefined, undefined, undefined, params.seriesChartTypes);\n    }\n    createPivotChart(params) {\n        // if required enter pivot mode\n        if (!this.columnModel.isPivotMode()) {\n            this.columnModel.setPivotMode(true, \"pivotChart\");\n        }\n        // pivot chart range contains all visible column without a row range to include all rows\n        const chartAllRangeParams = {\n            rowStartIndex: null,\n            rowStartPinned: undefined,\n            rowEndIndex: null,\n            rowEndPinned: undefined,\n            columns: this.columnModel.getAllDisplayedColumns().map(col => col.getColId())\n        };\n        const cellRange = this.rangeService\n            ? this.rangeService.createCellRangeFromCellRangeParams(chartAllRangeParams)\n            : undefined;\n        if (!cellRange) {\n            console.warn(\"AG Grid - unable to create chart as there are no columns in the grid.\");\n            return;\n        }\n        return this.createChart(cellRange, params.chartType, params.chartThemeName, true, true, params.chartContainer, undefined, params.chartThemeOverrides, params.unlinkChart);\n    }\n    createCrossFilterChart(params) {\n        var _a;\n        const cellRange = (_a = this.rangeService) === null || _a === void 0 ? void 0 : _a.createCellRangeFromCellRangeParams(params.cellRange);\n        if (!cellRange) {\n            console.warn(\"AG Grid - unable to create chart as no range is selected\");\n            return;\n        }\n        const crossFiltering = true;\n        const suppressChartRangesSupplied = typeof params.suppressChartRanges !== 'undefined' && params.suppressChartRanges !== null;\n        const suppressChartRanges = suppressChartRangesSupplied ? params.suppressChartRanges : true;\n        return this.createChart(cellRange, params.chartType, params.chartThemeName, false, suppressChartRanges, params.chartContainer, params.aggFunc, params.chartThemeOverrides, params.unlinkChart, crossFiltering);\n    }\n    createChart(cellRange, chartType, chartThemeName, pivotChart = false, suppressChartRanges = false, container, aggFunc, chartThemeOverrides, unlinkChart = false, crossFiltering = false, chartOptionsToRestore, chartPaletteToRestore, seriesChartTypes) {\n        const createChartContainerFunc = this.gridOptionsService.getCallback('createChartContainer');\n        const params = {\n            chartId: this.generateId(),\n            pivotChart,\n            cellRange,\n            chartType,\n            chartThemeName,\n            insideDialog: !(container || createChartContainerFunc),\n            suppressChartRanges,\n            aggFunc,\n            chartThemeOverrides,\n            unlinkChart,\n            crossFiltering,\n            crossFilteringContext: this.crossFilteringContext,\n            chartOptionsToRestore,\n            chartPaletteToRestore,\n            seriesChartTypes,\n            crossFilteringResetCallback: () => this.activeChartComps.forEach(c => c.crossFilteringReset())\n        };\n        const chartComp = new GridChartComp(params);\n        this.context.createBean(chartComp);\n        const chartRef = this.createChartRef(chartComp);\n        if (container) {\n            // if container exists, means developer initiated chart create via API, so place in provided container\n            container.appendChild(chartComp.getGui());\n            // if the chart container was placed outside an element that\n            // has the grid's theme, we manually add the current theme to\n            // make sure all styles for the chartMenu are rendered correctly\n            const theme = this.environment.getTheme();\n            if (theme.el && !theme.el.contains(container)) {\n                container.classList.add(theme.theme);\n            }\n        }\n        else if (createChartContainerFunc) {\n            // otherwise, user created chart via grid UI, check if developer provides containers (e.g. if the application\n            // is using its own dialogs rather than the grid provided dialogs)\n            createChartContainerFunc(chartRef);\n        }\n        else {\n            // add listener to remove from active charts list when charts are destroyed, e.g. closing chart dialog\n            chartComp.addEventListener(GridChartComp.EVENT_DESTROYED, () => {\n                this.activeChartComps.delete(chartComp);\n                this.activeCharts.delete(chartRef);\n            });\n        }\n        return chartRef;\n    }\n    createChartRef(chartComp) {\n        const chartRef = {\n            destroyChart: () => {\n                if (this.activeCharts.has(chartRef)) {\n                    this.context.destroyBean(chartComp);\n                    this.activeChartComps.delete(chartComp);\n                    this.activeCharts.delete(chartRef);\n                }\n            },\n            chartElement: chartComp.getGui(),\n            chart: chartComp.getUnderlyingChart(),\n            chartId: chartComp.getChartModel().chartId\n        };\n        this.activeCharts.add(chartRef);\n        this.activeChartComps.add(chartComp);\n        return chartRef;\n    }\n    getSelectedRange() {\n        const ranges = this.rangeService.getCellRanges();\n        return ranges.length > 0 ? ranges[0] : {};\n    }\n    generateId() {\n        return `id-${Math.random().toString(36).substring(2, 18)}`;\n    }\n    destroyAllActiveCharts() {\n        this.activeCharts.forEach(chart => chart.destroyChart());\n    }\n};\nChartService.CHARTS_VERSION = VERSION$b;\n__decorate$M([\n    Optional('rangeService')\n], ChartService.prototype, \"rangeService\", void 0);\n__decorate$M([\n    Autowired('columnModel')\n], ChartService.prototype, \"columnModel\", void 0);\n__decorate$M([\n    PreDestroy\n], ChartService.prototype, \"destroyAllActiveCharts\", null);\nChartService = __decorate$M([\n    Bean('chartService')\n], ChartService);\n\nvar __decorate$L = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar ChartTranslationService_1;\nlet ChartTranslationService = ChartTranslationService_1 = class ChartTranslationService extends BeanStub {\n    translate(toTranslate, defaultText) {\n        const translate = this.localeService.getLocaleTextFunc();\n        const defaultTranslation = ChartTranslationService_1.DEFAULT_TRANSLATIONS[toTranslate] || defaultText;\n        return translate(toTranslate, defaultTranslation);\n    }\n};\nChartTranslationService.DEFAULT_TRANSLATIONS = {\n    pivotChartTitle: 'Pivot Chart',\n    rangeChartTitle: 'Range Chart',\n    settings: 'Settings',\n    data: 'Data',\n    format: 'Format',\n    categories: 'Categories',\n    defaultCategory: '(None)',\n    series: 'Series',\n    xyValues: 'X Y Values',\n    paired: 'Paired Mode',\n    axis: 'Axis',\n    navigator: 'Navigator',\n    color: 'Color',\n    thickness: 'Thickness',\n    xType: 'X Type',\n    automatic: 'Automatic',\n    category: 'Category',\n    number: 'Number',\n    time: 'Time',\n    autoRotate: 'Auto Rotate',\n    xRotation: 'X Rotation',\n    yRotation: 'Y Rotation',\n    ticks: 'Ticks',\n    width: 'Width',\n    height: 'Height',\n    length: 'Length',\n    padding: 'Padding',\n    spacing: 'Spacing',\n    chart: 'Chart',\n    title: 'Title',\n    titlePlaceholder: 'Chart title - double click to edit',\n    background: 'Background',\n    font: 'Font',\n    top: 'Top',\n    right: 'Right',\n    bottom: 'Bottom',\n    left: 'Left',\n    labels: 'Labels',\n    calloutLabels: 'Callout Labels',\n    sectorLabels: 'Sector Labels',\n    positionRatio: 'Position Ratio',\n    size: 'Size',\n    shape: 'Shape',\n    minSize: 'Minimum Size',\n    maxSize: 'Maximum Size',\n    legend: 'Legend',\n    position: 'Position',\n    markerSize: 'Marker Size',\n    markerStroke: 'Marker Stroke',\n    markerPadding: 'Marker Padding',\n    itemSpacing: 'Item Spacing',\n    itemPaddingX: 'Item Padding X',\n    itemPaddingY: 'Item Padding Y',\n    layoutHorizontalSpacing: 'Horizontal Spacing',\n    layoutVerticalSpacing: 'Vertical Spacing',\n    strokeWidth: 'Stroke Width',\n    offset: 'Offset',\n    offsets: 'Offsets',\n    tooltips: 'Tooltips',\n    callout: 'Callout',\n    markers: 'Markers',\n    shadow: 'Shadow',\n    blur: 'Blur',\n    xOffset: 'X Offset',\n    yOffset: 'Y Offset',\n    lineWidth: 'Line Width',\n    lineDash: 'Line Dash',\n    normal: 'Normal',\n    bold: 'Bold',\n    italic: 'Italic',\n    boldItalic: 'Bold Italic',\n    predefined: 'Predefined',\n    fillOpacity: 'Fill Opacity',\n    strokeOpacity: 'Line Opacity',\n    histogramBinCount: 'Bin count',\n    columnGroup: 'Column',\n    barGroup: 'Bar',\n    pieGroup: 'Pie',\n    lineGroup: 'Line',\n    scatterGroup: 'X Y (Scatter)',\n    areaGroup: 'Area',\n    histogramGroup: 'Histogram',\n    combinationGroup: 'Combination',\n    groupedColumnTooltip: 'Grouped',\n    stackedColumnTooltip: 'Stacked',\n    normalizedColumnTooltip: '100% Stacked',\n    groupedBarTooltip: 'Grouped',\n    stackedBarTooltip: 'Stacked',\n    normalizedBarTooltip: '100% Stacked',\n    pieTooltip: 'Pie',\n    doughnutTooltip: 'Doughnut',\n    lineTooltip: 'Line',\n    groupedAreaTooltip: 'Area',\n    stackedAreaTooltip: 'Stacked',\n    normalizedAreaTooltip: '100% Stacked',\n    scatterTooltip: 'Scatter',\n    bubbleTooltip: 'Bubble',\n    histogramTooltip: 'Histogram',\n    columnLineComboTooltip: 'Column & Line',\n    areaColumnComboTooltip: 'Area & Column',\n    customComboTooltip: 'Custom Combination',\n    noDataToChart: 'No data available to be charted.',\n    pivotChartRequiresPivotMode: 'Pivot Chart requires Pivot Mode enabled.',\n    chartSettingsToolbarTooltip: 'Menu',\n    chartLinkToolbarTooltip: 'Linked to Grid',\n    chartUnlinkToolbarTooltip: 'Unlinked from Grid',\n    chartDownloadToolbarTooltip: 'Download Chart',\n    histogramFrequency: \"Frequency\",\n    seriesChartType: 'Series Chart Type',\n    seriesType: 'Series Type',\n    secondaryAxis: 'Secondary Axis',\n};\nChartTranslationService = ChartTranslationService_1 = __decorate$L([\n    Bean(\"chartTranslationService\")\n], ChartTranslationService);\n\nvar __decorate$K = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar ChartCrossFilterService_1;\nlet ChartCrossFilterService = ChartCrossFilterService_1 = class ChartCrossFilterService extends BeanStub {\n    filter(event, reset = false) {\n        const filterModel = this.gridApi.getFilterModel();\n        // filters should be reset when user clicks on canvas background\n        if (reset) {\n            this.resetFilters(filterModel);\n            return;\n        }\n        let colId = ChartCrossFilterService_1.extractFilterColId(event);\n        if (this.isValidColumnFilter(colId)) {\n            // update filters based on current chart selections\n            this.updateFilters(filterModel, event, colId);\n        }\n        else {\n            console.warn(\"AG Grid: cross filtering requires a 'agSetColumnFilter' or 'agMultiColumnFilter' \" +\n                \"to be defined on the column with id: '\" + colId + \"'\");\n        }\n    }\n    resetFilters(filterModel) {\n        const filtersExist = Object.keys(filterModel).length > 0;\n        if (filtersExist) {\n            // only reset filters / charts when necessary to prevent undesirable flickering effect\n            this.gridApi.setFilterModel(null);\n            this.gridApi.onFilterChanged();\n        }\n    }\n    updateFilters(filterModel, event, colId) {\n        let dataKey = ChartCrossFilterService_1.extractFilterColId(event);\n        let rawValue = event.datum[dataKey];\n        if (rawValue === undefined) {\n            return;\n        }\n        let selectedValue = rawValue.toString();\n        if (event.event.metaKey || event.event.ctrlKey) {\n            const existingGridValues = this.getCurrentGridValuesForCategory(colId);\n            const valueAlreadyExists = _.includes(existingGridValues, selectedValue);\n            let updatedValues;\n            if (valueAlreadyExists) {\n                updatedValues = existingGridValues.filter((v) => v !== selectedValue);\n            }\n            else {\n                updatedValues = existingGridValues;\n                updatedValues.push(selectedValue);\n            }\n            filterModel[colId] = this.getUpdatedFilterModel(colId, updatedValues);\n        }\n        else {\n            const updatedValues = [selectedValue];\n            filterModel = { [colId]: this.getUpdatedFilterModel(colId, updatedValues) };\n        }\n        this.gridApi.setFilterModel(filterModel);\n    }\n    getUpdatedFilterModel(colId, updatedValues) {\n        let columnFilterType = this.getColumnFilterType(colId);\n        if (columnFilterType === 'agMultiColumnFilter') {\n            return { filterType: 'multi', filterModels: [null, { filterType: 'set', values: updatedValues }] };\n        }\n        return { filterType: 'set', values: updatedValues };\n    }\n    getCurrentGridValuesForCategory(colId) {\n        let filteredValues = [];\n        const column = this.getColumnById(colId);\n        this.gridApi.forEachNodeAfterFilter((rowNode) => {\n            if (column && !rowNode.group) {\n                const value = this.valueService.getValue(column, rowNode) + '';\n                if (!filteredValues.includes(value)) {\n                    filteredValues.push(value);\n                }\n            }\n        });\n        return filteredValues;\n    }\n    static extractFilterColId(event) {\n        return event.xKey || event.calloutLabelKey;\n    }\n    isValidColumnFilter(colId) {\n        if (colId.indexOf('-filtered-out')) {\n            colId = colId.replace('-filtered-out', '');\n        }\n        let filterType = this.getColumnFilterType(colId);\n        if (typeof filterType === 'boolean') {\n            return filterType;\n        }\n        return _.includes(['agSetColumnFilter', 'agMultiColumnFilter'], filterType);\n    }\n    getColumnFilterType(colId) {\n        let gridColumn = this.getColumnById(colId);\n        if (gridColumn) {\n            const colDef = gridColumn.getColDef();\n            return colDef.filter;\n        }\n    }\n    getColumnById(colId) {\n        return this.columnModel.getGridColumn(colId);\n    }\n};\n__decorate$K([\n    Autowired('gridApi')\n], ChartCrossFilterService.prototype, \"gridApi\", void 0);\n__decorate$K([\n    Autowired('columnModel')\n], ChartCrossFilterService.prototype, \"columnModel\", void 0);\n__decorate$K([\n    Autowired('valueService')\n], ChartCrossFilterService.prototype, \"valueService\", void 0);\nChartCrossFilterService = ChartCrossFilterService_1 = __decorate$K([\n    Bean(\"chartCrossFilterService\")\n], ChartCrossFilterService);\n\nvar __decorate$J = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet RangeService = class RangeService extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.cellRanges = [];\n        this.bodyScrollListener = this.onBodyScroll.bind(this);\n        this.dragging = false;\n        this.intersectionRange = false; // When dragging ends, the current range will be used to intersect all other ranges\n    }\n    init() {\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, () => this.onColumnsChanged());\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_VISIBLE, this.onColumnsChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_VALUE_CHANGED, this.onColumnsChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, () => this.removeAllCellRanges());\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, () => this.removeAllCellRanges());\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_CHANGED, () => this.removeAllCellRanges());\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_GROUP_OPENED, this.refreshLastRangeStart.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_MOVED, this.refreshLastRangeStart.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PINNED, this.refreshLastRangeStart.bind(this));\n        this.ctrlsService.whenReady(() => {\n            const gridBodyCtrl = this.ctrlsService.getGridBodyCtrl();\n            this.autoScrollService = new AutoScrollService({\n                scrollContainer: gridBodyCtrl.getBodyViewportElement(),\n                scrollAxis: 'xy',\n                getVerticalPosition: () => gridBodyCtrl.getScrollFeature().getVScrollPosition().top,\n                setVerticalPosition: (position) => gridBodyCtrl.getScrollFeature().setVerticalScrollPosition(position),\n                getHorizontalPosition: () => gridBodyCtrl.getScrollFeature().getHScrollPosition().left,\n                setHorizontalPosition: (position) => gridBodyCtrl.getScrollFeature().setHorizontalScrollPosition(position),\n                shouldSkipVerticalScroll: () => !this.gridOptionsService.isDomLayout('normal'),\n                shouldSkipHorizontalScroll: () => !gridBodyCtrl.getScrollFeature().isHorizontalScrollShowing()\n            });\n        });\n    }\n    // Called for both columns loaded & column visibility events\n    onColumnsChanged() {\n        // first move start column in last cell range (i.e. series chart range)\n        this.refreshLastRangeStart();\n        const allColumns = this.columnModel.getAllDisplayedColumns();\n        // check that the columns in each range still exist and are visible\n        this.cellRanges.forEach(cellRange => {\n            const beforeCols = cellRange.columns;\n            // remove hidden or removed cols from cell range\n            cellRange.columns = cellRange.columns.filter(col => col.isVisible() && allColumns.indexOf(col) !== -1);\n            const colsInRangeChanged = !_.areEqual(beforeCols, cellRange.columns);\n            if (colsInRangeChanged) {\n                // notify users and other parts of grid (i.e. status panel) that range has changed\n                this.dispatchChangedEvent(false, true, cellRange.id);\n            }\n        });\n        // Remove empty cell ranges\n        const countBefore = this.cellRanges.length;\n        this.cellRanges = this.cellRanges.filter((range) => range.columns.length > 0);\n        if (countBefore > this.cellRanges.length) {\n            this.dispatchChangedEvent(false, true);\n        }\n    }\n    refreshLastRangeStart() {\n        const lastRange = _.last(this.cellRanges);\n        if (!lastRange) {\n            return;\n        }\n        this.refreshRangeStart(lastRange);\n    }\n    isContiguousRange(cellRange) {\n        const rangeColumns = cellRange.columns;\n        if (!rangeColumns.length) {\n            return false;\n        }\n        const allColumns = this.columnModel.getAllDisplayedColumns();\n        const allPositions = rangeColumns.map(c => allColumns.indexOf(c)).sort((a, b) => a - b);\n        return _.last(allPositions) - allPositions[0] + 1 === rangeColumns.length;\n    }\n    getRangeStartRow(cellRange) {\n        if (cellRange.startRow && cellRange.endRow) {\n            return this.rowPositionUtils.before(cellRange.startRow, cellRange.endRow) ?\n                cellRange.startRow : cellRange.endRow;\n        }\n        const rowPinned = this.pinnedRowModel.getPinnedTopRowCount() > 0 ? 'top' : null;\n        return { rowIndex: 0, rowPinned };\n    }\n    getRangeEndRow(cellRange) {\n        if (cellRange.startRow && cellRange.endRow) {\n            return this.rowPositionUtils.before(cellRange.startRow, cellRange.endRow) ?\n                cellRange.endRow : cellRange.startRow;\n        }\n        const pinnedBottomRowCount = this.pinnedRowModel.getPinnedBottomRowCount();\n        const pinnedBottom = pinnedBottomRowCount > 0;\n        if (pinnedBottom) {\n            return {\n                rowIndex: pinnedBottomRowCount - 1,\n                rowPinned: 'bottom'\n            };\n        }\n        return {\n            rowIndex: this.rowModel.getRowCount() - 1,\n            rowPinned: null\n        };\n    }\n    setRangeToCell(cell, appendRange = false) {\n        if (!this.gridOptionsService.isEnableRangeSelection()) {\n            return;\n        }\n        const columns = this.calculateColumnsBetween(cell.column, cell.column);\n        if (!columns) {\n            return;\n        }\n        const suppressMultiRangeSelections = this.gridOptionsService.is('suppressMultiRangeSelection');\n        // if not appending, then clear previous range selections\n        if (suppressMultiRangeSelections || !appendRange || _.missing(this.cellRanges)) {\n            this.removeAllCellRanges(true);\n        }\n        const rowForCell = {\n            rowIndex: cell.rowIndex,\n            rowPinned: cell.rowPinned\n        };\n        const cellRange = {\n            startRow: rowForCell,\n            endRow: rowForCell,\n            columns,\n            startColumn: cell.column\n        };\n        this.cellRanges.push(cellRange);\n        this.setNewestRangeStartCell(cell);\n        this.onDragStop();\n        this.dispatchChangedEvent(true, true);\n    }\n    extendLatestRangeToCell(cellPosition) {\n        if (this.isEmpty() || !this.newestRangeStartCell) {\n            return;\n        }\n        const cellRange = _.last(this.cellRanges);\n        this.updateRangeEnd(cellRange, cellPosition);\n    }\n    updateRangeEnd(cellRange, cellPosition, silent = false) {\n        const endColumn = cellPosition.column;\n        const colsToAdd = this.calculateColumnsBetween(cellRange.startColumn, endColumn);\n        if (!colsToAdd || this.isLastCellOfRange(cellRange, cellPosition)) {\n            return;\n        }\n        cellRange.columns = colsToAdd;\n        cellRange.endRow = { rowIndex: cellPosition.rowIndex, rowPinned: cellPosition.rowPinned };\n        if (!silent) {\n            this.dispatchChangedEvent(true, true, cellRange.id);\n        }\n    }\n    refreshRangeStart(cellRange) {\n        const { startColumn, columns } = cellRange;\n        const moveColInCellRange = (colToMove, moveToFront) => {\n            const otherCols = cellRange.columns.filter(col => col !== colToMove);\n            if (colToMove) {\n                cellRange.startColumn = colToMove;\n                cellRange.columns = moveToFront ? [colToMove, ...otherCols] : [...otherCols, colToMove];\n            }\n            else {\n                cellRange.columns = otherCols;\n            }\n        };\n        const { left, right } = this.getRangeEdgeColumns(cellRange);\n        const shouldMoveLeftCol = startColumn === columns[0] && startColumn !== left;\n        if (shouldMoveLeftCol) {\n            moveColInCellRange(left, true);\n            return;\n        }\n        const shouldMoveRightCol = startColumn === _.last(columns) && startColumn === right;\n        if (shouldMoveRightCol) {\n            moveColInCellRange(right, false);\n            return;\n        }\n    }\n    getRangeEdgeColumns(cellRange) {\n        const allColumns = this.columnModel.getAllDisplayedColumns();\n        const allIndices = cellRange.columns\n            .map(c => allColumns.indexOf(c))\n            .filter(i => i > -1)\n            .sort((a, b) => a - b);\n        return {\n            left: allColumns[allIndices[0]],\n            right: allColumns[_.last(allIndices)]\n        };\n    }\n    // returns true if successful, false if not successful\n    extendLatestRangeInDirection(event) {\n        if (this.isEmpty() || !this.newestRangeStartCell) {\n            return;\n        }\n        const key = event.key;\n        const ctrlKey = event.ctrlKey || event.metaKey;\n        const lastRange = _.last(this.cellRanges);\n        const startCell = this.newestRangeStartCell;\n        const firstCol = lastRange.columns[0];\n        const lastCol = _.last(lastRange.columns);\n        // find the cell that is at the furthest away corner from the starting cell\n        const endCellIndex = lastRange.endRow.rowIndex;\n        const endCellFloating = lastRange.endRow.rowPinned;\n        const endCellColumn = startCell.column === firstCol ? lastCol : firstCol;\n        const endCell = { column: endCellColumn, rowIndex: endCellIndex, rowPinned: endCellFloating };\n        const newEndCell = this.cellNavigationService.getNextCellToFocus(key, endCell, ctrlKey);\n        // if user is at end of grid, so no cell to extend to, we return false\n        if (!newEndCell) {\n            return;\n        }\n        this.setCellRange({\n            rowStartIndex: startCell.rowIndex,\n            rowStartPinned: startCell.rowPinned,\n            rowEndIndex: newEndCell.rowIndex,\n            rowEndPinned: newEndCell.rowPinned,\n            columnStart: startCell.column,\n            columnEnd: newEndCell.column\n        });\n        return newEndCell;\n    }\n    setCellRange(params) {\n        if (!this.gridOptionsService.isEnableRangeSelection()) {\n            return;\n        }\n        this.removeAllCellRanges(true);\n        this.addCellRange(params);\n    }\n    setCellRanges(cellRanges) {\n        if (_.shallowCompare(this.cellRanges, cellRanges)) {\n            return;\n        }\n        this.removeAllCellRanges(true);\n        cellRanges.forEach(newRange => {\n            if (newRange.columns && newRange.startRow) {\n                this.setNewestRangeStartCell({\n                    rowIndex: newRange.startRow.rowIndex,\n                    rowPinned: newRange.startRow.rowPinned,\n                    column: newRange.columns[0]\n                });\n            }\n            this.cellRanges.push(newRange);\n        });\n        this.dispatchChangedEvent(false, true);\n    }\n    setNewestRangeStartCell(position) {\n        this.newestRangeStartCell = position;\n    }\n    clearCellRangeCellValues(params) {\n        let { cellRanges } = params;\n        const { cellEventSource = 'rangeService', dispatchWrapperEvents, wrapperEventSource = 'deleteKey' } = params;\n        if (dispatchWrapperEvents) {\n            const startEvent = {\n                type: Events.EVENT_RANGE_DELETE_START,\n                source: wrapperEventSource\n            };\n            this.eventService.dispatchEvent(startEvent);\n        }\n        if (!cellRanges) {\n            cellRanges = this.cellRanges;\n        }\n        cellRanges.forEach(cellRange => {\n            this.forEachRowInRange(cellRange, rowPosition => {\n                const rowNode = this.rowPositionUtils.getRowNode(rowPosition);\n                if (!rowNode) {\n                    return;\n                }\n                for (let i = 0; i < cellRange.columns.length; i++) {\n                    const column = this.columnModel.getGridColumn(cellRange.columns[i]);\n                    if (!column || !column.isCellEditable(rowNode)) {\n                        return;\n                    }\n                    rowNode.setDataValue(column, null, cellEventSource);\n                }\n            });\n        });\n        if (dispatchWrapperEvents) {\n            const endEvent = {\n                type: Events.EVENT_RANGE_DELETE_END,\n                source: wrapperEventSource\n            };\n            this.eventService.dispatchEvent(endEvent);\n        }\n    }\n    createCellRangeFromCellRangeParams(params) {\n        let columns;\n        let startsOnTheRight = false;\n        if (params.columns) {\n            columns = params.columns.map(c => this.columnModel.getColumnWithValidation(c)).filter(c => c);\n        }\n        else {\n            const columnStart = this.columnModel.getColumnWithValidation(params.columnStart);\n            const columnEnd = this.columnModel.getColumnWithValidation(params.columnEnd);\n            if (!columnStart || !columnEnd) {\n                return;\n            }\n            columns = this.calculateColumnsBetween(columnStart, columnEnd);\n            if (columns && columns.length) {\n                startsOnTheRight = columns[0] !== columnStart;\n            }\n        }\n        if (!columns) {\n            return;\n        }\n        const startRow = params.rowStartIndex != null ? {\n            rowIndex: params.rowStartIndex,\n            rowPinned: params.rowStartPinned || null\n        } : undefined;\n        const endRow = params.rowEndIndex != null ? {\n            rowIndex: params.rowEndIndex,\n            rowPinned: params.rowEndPinned || null\n        } : undefined;\n        return {\n            startRow,\n            endRow,\n            columns,\n            startColumn: startsOnTheRight ? _.last(columns) : columns[0]\n        };\n    }\n    addCellRange(params) {\n        if (!this.gridOptionsService.isEnableRangeSelection()) {\n            return;\n        }\n        const newRange = this.createCellRangeFromCellRangeParams(params);\n        if (newRange) {\n            if (newRange.startRow) {\n                this.setNewestRangeStartCell({\n                    rowIndex: newRange.startRow.rowIndex,\n                    rowPinned: newRange.startRow.rowPinned,\n                    column: newRange.startColumn\n                });\n            }\n            this.cellRanges.push(newRange);\n            this.dispatchChangedEvent(false, true, newRange.id);\n        }\n    }\n    getCellRanges() {\n        return this.cellRanges;\n    }\n    isEmpty() {\n        return this.cellRanges.length === 0;\n    }\n    isMoreThanOneCell() {\n        const len = this.cellRanges.length;\n        if (len === 0) {\n            return false;\n        }\n        if (len > 1) {\n            return true; // Assumes a cell range must contain at least one cell\n        }\n        // only one range, return true if range has more than one\n        const range = this.cellRanges[0];\n        const startRow = this.getRangeStartRow(range);\n        const endRow = this.getRangeEndRow(range);\n        return startRow.rowPinned !== endRow.rowPinned ||\n            startRow.rowIndex !== endRow.rowIndex ||\n            range.columns.length !== 1;\n    }\n    areAllRangesAbleToMerge() {\n        const rowToColumnMap = new Map();\n        const len = this.cellRanges.length;\n        if (len <= 1)\n            return true;\n        this.cellRanges.forEach(range => {\n            this.forEachRowInRange(range, row => {\n                const rowName = `${row.rowPinned || 'normal'}_${row.rowIndex}`;\n                const columns = rowToColumnMap.get(rowName);\n                const currentRangeColIds = range.columns.map(col => col.getId());\n                if (columns) {\n                    const filteredColumns = currentRangeColIds.filter(col => columns.indexOf(col) === -1);\n                    columns.push(...filteredColumns);\n                }\n                else {\n                    rowToColumnMap.set(rowName, currentRangeColIds);\n                }\n            });\n        });\n        let columnsString;\n        for (const val of rowToColumnMap.values()) {\n            const currentValString = val.sort().join();\n            if (columnsString === undefined) {\n                columnsString = currentValString;\n                continue;\n            }\n            if (columnsString !== currentValString) {\n                return false;\n            }\n        }\n        return true;\n    }\n    forEachRowInRange(cellRange, callback) {\n        const topRow = this.getRangeStartRow(cellRange);\n        const bottomRow = this.getRangeEndRow(cellRange);\n        let currentRow = topRow;\n        while (currentRow) {\n            callback(currentRow);\n            if (this.rowPositionUtils.sameRow(currentRow, bottomRow)) {\n                break;\n            }\n            currentRow = this.cellNavigationService.getRowBelow(currentRow);\n        }\n    }\n    removeAllCellRanges(silent) {\n        if (this.isEmpty()) {\n            return;\n        }\n        this.onDragStop();\n        this.cellRanges.length = 0;\n        if (!silent) {\n            this.dispatchChangedEvent(false, true);\n        }\n    }\n    // as the user is dragging outside of the panel, the div starts to scroll, which in turn\n    // means we are selection more (or less) cells, but the mouse isn't moving, so we recalculate\n    // the selection my mimicking a new mouse event\n    onBodyScroll() {\n        if (this.dragging && this.lastMouseEvent) {\n            this.onDragging(this.lastMouseEvent);\n        }\n    }\n    isCellInAnyRange(cell) {\n        return this.getCellRangeCount(cell) > 0;\n    }\n    isCellInSpecificRange(cell, range) {\n        const columnInRange = range.columns !== null && _.includes(range.columns, cell.column);\n        const rowInRange = this.isRowInRange(cell.rowIndex, cell.rowPinned, range);\n        return columnInRange && rowInRange;\n    }\n    isLastCellOfRange(cellRange, cell) {\n        const { startRow, endRow } = cellRange;\n        const lastRow = this.rowPositionUtils.before(startRow, endRow) ? endRow : startRow;\n        const isLastRow = cell.rowIndex === lastRow.rowIndex && cell.rowPinned === lastRow.rowPinned;\n        const rangeFirstIndexColumn = cellRange.columns[0];\n        const rangeLastIndexColumn = _.last(cellRange.columns);\n        const lastRangeColumn = cellRange.startColumn === rangeFirstIndexColumn ? rangeLastIndexColumn : rangeFirstIndexColumn;\n        const isLastColumn = cell.column === lastRangeColumn;\n        return isLastColumn && isLastRow;\n    }\n    isBottomRightCell(cellRange, cell) {\n        const allColumns = this.columnModel.getAllDisplayedColumns();\n        const allPositions = cellRange.columns.map(c => allColumns.indexOf(c)).sort((a, b) => a - b);\n        const { startRow, endRow } = cellRange;\n        const lastRow = this.rowPositionUtils.before(startRow, endRow) ? endRow : startRow;\n        const isRightColumn = allColumns.indexOf(cell.column) === _.last(allPositions);\n        const isLastRow = cell.rowIndex === lastRow.rowIndex && _.makeNull(cell.rowPinned) === _.makeNull(lastRow.rowPinned);\n        return isRightColumn && isLastRow;\n    }\n    // returns the number of ranges this cell is in\n    getCellRangeCount(cell) {\n        if (this.isEmpty()) {\n            return 0;\n        }\n        return this.cellRanges.filter(cellRange => this.isCellInSpecificRange(cell, cellRange)).length;\n    }\n    isRowInRange(rowIndex, floating, cellRange) {\n        const firstRow = this.getRangeStartRow(cellRange);\n        const lastRow = this.getRangeEndRow(cellRange);\n        const thisRow = { rowIndex, rowPinned: floating || null };\n        // compare rowPinned with == instead of === because it can be `null` or `undefined`\n        const equalsFirstRow = thisRow.rowIndex === firstRow.rowIndex && thisRow.rowPinned == firstRow.rowPinned;\n        const equalsLastRow = thisRow.rowIndex === lastRow.rowIndex && thisRow.rowPinned == lastRow.rowPinned;\n        if (equalsFirstRow || equalsLastRow) {\n            return true;\n        }\n        const afterFirstRow = !this.rowPositionUtils.before(thisRow, firstRow);\n        const beforeLastRow = this.rowPositionUtils.before(thisRow, lastRow);\n        return afterFirstRow && beforeLastRow;\n    }\n    getDraggingRange() {\n        return this.draggingRange;\n    }\n    onDragStart(mouseEvent) {\n        if (!this.gridOptionsService.isEnableRangeSelection()) {\n            return;\n        }\n        const { ctrlKey, metaKey, shiftKey } = mouseEvent;\n        // ctrlKey for windows, metaKey for Apple\n        const isMultiKey = ctrlKey || metaKey;\n        const allowMulti = !this.gridOptionsService.is('suppressMultiRangeSelection');\n        const isMultiSelect = allowMulti ? isMultiKey : false;\n        const extendRange = shiftKey && _.existsAndNotEmpty(this.cellRanges);\n        if (!isMultiSelect && (!extendRange || _.exists(_.last(this.cellRanges).type))) {\n            this.removeAllCellRanges(true);\n        }\n        // The browser changes the Event target of cached events when working with the ShadowDOM\n        // so we need to retrieve the initial DragStartTarget.\n        const startTarget = this.dragService.getStartTarget();\n        if (startTarget) {\n            this.updateValuesOnMove(startTarget);\n        }\n        if (!this.lastCellHovered) {\n            return;\n        }\n        this.dragging = true;\n        this.lastMouseEvent = mouseEvent;\n        this.intersectionRange = isMultiSelect && this.getCellRangeCount(this.lastCellHovered) > 1;\n        if (!extendRange) {\n            this.setNewestRangeStartCell(this.lastCellHovered);\n        }\n        // if we didn't clear the ranges, then dragging means the user clicked, and when the\n        // user clicks it means a range of one cell was created. we need to extend this range\n        // rather than creating another range. otherwise we end up with two distinct ranges\n        // from a drag operation (one from click, and one from drag).\n        if (this.cellRanges.length > 0) {\n            this.draggingRange = _.last(this.cellRanges);\n        }\n        else {\n            const mouseRowPosition = {\n                rowIndex: this.lastCellHovered.rowIndex,\n                rowPinned: this.lastCellHovered.rowPinned\n            };\n            this.draggingRange = {\n                startRow: mouseRowPosition,\n                endRow: mouseRowPosition,\n                columns: [this.lastCellHovered.column],\n                startColumn: this.newestRangeStartCell.column\n            };\n            this.cellRanges.push(this.draggingRange);\n        }\n        this.ctrlsService.getGridBodyCtrl().addScrollEventListener(this.bodyScrollListener);\n        this.dispatchChangedEvent(true, false, this.draggingRange.id);\n    }\n    intersectLastRange(fromMouseClick) {\n        // when ranges are created due to a mouse click without drag (happens in cellMouseListener)\n        // this method will be called with `fromMouseClick=true`.\n        if (fromMouseClick && this.dragging) {\n            return;\n        }\n        if (this.gridOptionsService.is('suppressMultiRangeSelection')) {\n            return;\n        }\n        if (this.isEmpty()) {\n            return;\n        }\n        const lastRange = _.last(this.cellRanges);\n        const intersectionStartRow = this.getRangeStartRow(lastRange);\n        const intersectionEndRow = this.getRangeEndRow(lastRange);\n        const newRanges = [];\n        this.cellRanges.slice(0, -1).forEach((range) => {\n            const startRow = this.getRangeStartRow(range);\n            const endRow = this.getRangeEndRow(range);\n            const cols = range.columns;\n            const intersectCols = cols.filter((col) => lastRange.columns.indexOf(col) === -1);\n            if (intersectCols.length === cols.length) {\n                // No overlapping columns, retain previous range\n                newRanges.push(range);\n                return;\n            }\n            if (this.rowPositionUtils.before(intersectionEndRow, startRow) || this.rowPositionUtils.before(endRow, intersectionStartRow)) {\n                // No overlapping rows, retain previous range\n                newRanges.push(range);\n                return;\n            }\n            const rangeCountBefore = newRanges.length;\n            // Top\n            if (this.rowPositionUtils.before(startRow, intersectionStartRow)) {\n                const top = {\n                    columns: [...cols],\n                    startColumn: lastRange.startColumn,\n                    startRow: Object.assign({}, startRow),\n                    endRow: this.cellNavigationService.getRowAbove(intersectionStartRow),\n                };\n                newRanges.push(top);\n            }\n            // Left & Right (not contiguous with columns)\n            if (intersectCols.length > 0) {\n                const middle = {\n                    columns: intersectCols,\n                    startColumn: _.includes(intersectCols, lastRange.startColumn) ? lastRange.startColumn : intersectCols[0],\n                    startRow: this.rowPositionUtils.rowMax([Object.assign({}, intersectionStartRow), Object.assign({}, startRow)]),\n                    endRow: this.rowPositionUtils.rowMin([Object.assign({}, intersectionEndRow), Object.assign({}, endRow)]),\n                };\n                newRanges.push(middle);\n            }\n            // Bottom\n            if (this.rowPositionUtils.before(intersectionEndRow, endRow)) {\n                newRanges.push({\n                    columns: [...cols],\n                    startColumn: lastRange.startColumn,\n                    startRow: this.cellNavigationService.getRowBelow(intersectionEndRow),\n                    endRow: Object.assign({}, endRow),\n                });\n            }\n            if ((newRanges.length - rangeCountBefore) === 1) {\n                // Only one range result from the intersection.\n                // Copy the source range's id, since essentially we just reduced it's size\n                newRanges[newRanges.length - 1].id = range.id;\n            }\n        });\n        this.cellRanges = newRanges;\n        // when this is called because of a clickEvent and the ranges were changed\n        // we need to force a dragEnd event to update the UI.\n        if (fromMouseClick) {\n            this.dispatchChangedEvent(false, true);\n        }\n    }\n    updateValuesOnMove(eventTarget) {\n        const cellCtrl = _.getCtrlForEventTarget(this.gridOptionsService, eventTarget, CellCtrl.DOM_DATA_KEY_CELL_CTRL);\n        const cell = cellCtrl === null || cellCtrl === void 0 ? void 0 : cellCtrl.getCellPosition();\n        this.cellHasChanged = false;\n        if (!cell || (this.lastCellHovered && this.cellPositionUtils.equals(cell, this.lastCellHovered))) {\n            return;\n        }\n        if (this.lastCellHovered) {\n            this.cellHasChanged = true;\n        }\n        this.lastCellHovered = cell;\n    }\n    onDragging(mouseEvent) {\n        if (!this.dragging || !mouseEvent) {\n            return;\n        }\n        this.updateValuesOnMove(mouseEvent.target);\n        this.lastMouseEvent = mouseEvent;\n        const cellPosition = this.lastCellHovered;\n        const isMouseAndStartInPinned = (position) => cellPosition && cellPosition.rowPinned === position && this.newestRangeStartCell.rowPinned === position;\n        const skipVerticalScroll = isMouseAndStartInPinned('top') || isMouseAndStartInPinned('bottom');\n        this.autoScrollService.check(mouseEvent, skipVerticalScroll);\n        if (!this.cellHasChanged) {\n            return;\n        }\n        const columns = this.calculateColumnsBetween(this.newestRangeStartCell.column, cellPosition.column);\n        if (!columns) {\n            return;\n        }\n        this.draggingRange.endRow = {\n            rowIndex: cellPosition.rowIndex,\n            rowPinned: cellPosition.rowPinned\n        };\n        this.draggingRange.columns = columns;\n        this.dispatchChangedEvent(false, false, this.draggingRange.id);\n    }\n    onDragStop() {\n        if (!this.dragging) {\n            return;\n        }\n        const { id } = this.draggingRange;\n        this.autoScrollService.ensureCleared();\n        this.ctrlsService.getGridBodyCtrl().removeScrollEventListener(this.bodyScrollListener);\n        this.lastMouseEvent = null;\n        this.dragging = false;\n        this.draggingRange = undefined;\n        this.lastCellHovered = undefined;\n        if (this.intersectionRange) {\n            this.intersectionRange = false;\n            this.intersectLastRange();\n        }\n        this.dispatchChangedEvent(false, true, id);\n    }\n    dispatchChangedEvent(started, finished, id) {\n        const event = {\n            type: Events.EVENT_RANGE_SELECTION_CHANGED,\n            started,\n            finished,\n            id,\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    calculateColumnsBetween(columnFrom, columnTo) {\n        const allColumns = this.columnModel.getAllDisplayedColumns();\n        const isSameColumn = columnFrom === columnTo;\n        const fromIndex = allColumns.indexOf(columnFrom);\n        if (fromIndex < 0) {\n            console.warn(`AG Grid: column ${columnFrom.getId()} is not visible`);\n            return;\n        }\n        const toIndex = isSameColumn ? fromIndex : allColumns.indexOf(columnTo);\n        if (toIndex < 0) {\n            console.warn(`AG Grid: column ${columnTo.getId()} is not visible`);\n            return;\n        }\n        if (isSameColumn) {\n            return [columnFrom];\n        }\n        const firstIndex = Math.min(fromIndex, toIndex);\n        const lastIndex = firstIndex === fromIndex ? toIndex : fromIndex;\n        const columns = [];\n        for (let i = firstIndex; i <= lastIndex; i++) {\n            columns.push(allColumns[i]);\n        }\n        return columns;\n    }\n};\n__decorate$J([\n    Autowired('rowModel')\n], RangeService.prototype, \"rowModel\", void 0);\n__decorate$J([\n    Autowired('dragService')\n], RangeService.prototype, \"dragService\", void 0);\n__decorate$J([\n    Autowired('columnModel')\n], RangeService.prototype, \"columnModel\", void 0);\n__decorate$J([\n    Autowired('cellNavigationService')\n], RangeService.prototype, \"cellNavigationService\", void 0);\n__decorate$J([\n    Autowired(\"pinnedRowModel\")\n], RangeService.prototype, \"pinnedRowModel\", void 0);\n__decorate$J([\n    Autowired('rowPositionUtils')\n], RangeService.prototype, \"rowPositionUtils\", void 0);\n__decorate$J([\n    Autowired('cellPositionUtils')\n], RangeService.prototype, \"cellPositionUtils\", void 0);\n__decorate$J([\n    Autowired('ctrlsService')\n], RangeService.prototype, \"ctrlsService\", void 0);\n__decorate$J([\n    PostConstruct\n], RangeService.prototype, \"init\", null);\nRangeService = __decorate$J([\n    Bean('rangeService')\n], RangeService);\n\nvar __decorate$I = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AbstractSelectionHandle extends Component {\n    constructor() {\n        super(...arguments);\n        this.changedCalculatedValues = false;\n        this.dragging = false;\n        this.shouldDestroyOnEndDragging = false;\n    }\n    init() {\n        this.dragService.addDragSource({\n            dragStartPixels: 0,\n            eElement: this.getGui(),\n            onDragStart: this.onDragStart.bind(this),\n            onDragging: (e) => {\n                this.dragging = true;\n                this.rangeService.autoScrollService.check(e);\n                if (this.changedCalculatedValues) {\n                    this.onDrag(e);\n                    this.changedCalculatedValues = false;\n                }\n            },\n            onDragStop: (e) => {\n                this.dragging = false;\n                this.onDragEnd(e);\n                this.clearValues();\n                this.rangeService.autoScrollService.ensureCleared();\n                // TODO: this causes a bug where if there are multiple grids in the same page, all of them will\n                // be affected by a drag on any. Move it to the root element.\n                document.body.classList.remove(this.getDraggingCssClass());\n                if (this.shouldDestroyOnEndDragging) {\n                    this.destroy();\n                }\n            }\n        });\n        this.addManagedListener(this.getGui(), 'mousedown', this.preventRangeExtension.bind(this));\n    }\n    isDragging() {\n        return this.dragging;\n    }\n    getCellCtrl() {\n        return this.cellCtrl;\n    }\n    setCellCtrl(cellComp) {\n        this.cellCtrl = cellComp;\n    }\n    getCellRange() {\n        return this.cellRange;\n    }\n    setCellRange(range) {\n        this.cellRange = range;\n    }\n    getRangeStartRow() {\n        return this.rangeStartRow;\n    }\n    setRangeStartRow(row) {\n        this.rangeStartRow = row;\n    }\n    getRangeEndRow() {\n        return this.rangeEndRow;\n    }\n    setRangeEndRow(row) {\n        this.rangeEndRow = row;\n    }\n    getLastCellHovered() {\n        return this.lastCellHovered;\n    }\n    preventRangeExtension(e) {\n        e.stopPropagation();\n    }\n    onDragStart(e) {\n        this.cellHoverListener = this.addManagedListener(this.ctrlsService.getGridCtrl().getGui(), 'mousemove', this.updateValuesOnMove.bind(this));\n        document.body.classList.add(this.getDraggingCssClass());\n    }\n    getDraggingCssClass() {\n        return `ag-dragging-${this.type === SelectionHandleType.FILL ? 'fill' : 'range'}-handle`;\n    }\n    updateValuesOnMove(e) {\n        const cell = this.mouseEventService.getCellPositionForEvent(e);\n        if (!cell || (this.lastCellHovered && this.cellPositionUtils.equals(cell, this.lastCellHovered))) {\n            return;\n        }\n        this.lastCellHovered = cell;\n        this.changedCalculatedValues = true;\n    }\n    getType() {\n        return this.type;\n    }\n    refresh(cellCtrl) {\n        const oldCellComp = this.getCellCtrl();\n        const eGui = this.getGui();\n        const cellRange = _.last(this.rangeService.getCellRanges());\n        const start = cellRange.startRow;\n        const end = cellRange.endRow;\n        if (start && end) {\n            const isBefore = this.rowPositionUtils.before(end, start);\n            if (isBefore) {\n                this.setRangeStartRow(end);\n                this.setRangeEndRow(start);\n            }\n            else {\n                this.setRangeStartRow(start);\n                this.setRangeEndRow(end);\n            }\n        }\n        if (oldCellComp !== cellCtrl || !_.isVisible(eGui)) {\n            this.setCellCtrl(cellCtrl);\n            const eParentOfValue = cellCtrl.getComp().getParentOfValue();\n            if (eParentOfValue) {\n                eParentOfValue.appendChild(eGui);\n            }\n        }\n        this.setCellRange(cellRange);\n    }\n    clearValues() {\n        this.lastCellHovered = undefined;\n        this.removeListeners();\n    }\n    removeListeners() {\n        if (this.cellHoverListener) {\n            this.cellHoverListener();\n            this.cellHoverListener = undefined;\n        }\n    }\n    destroy() {\n        if (!this.shouldDestroyOnEndDragging && this.isDragging()) {\n            _.setDisplayed(this.getGui(), false);\n            this.shouldDestroyOnEndDragging = true;\n            return;\n        }\n        this.shouldDestroyOnEndDragging = false;\n        super.destroy();\n        this.removeListeners();\n        const eGui = this.getGui();\n        if (eGui.parentElement) {\n            eGui.parentElement.removeChild(eGui);\n        }\n    }\n}\n__decorate$I([\n    Autowired(\"rowRenderer\")\n], AbstractSelectionHandle.prototype, \"rowRenderer\", void 0);\n__decorate$I([\n    Autowired(\"dragService\")\n], AbstractSelectionHandle.prototype, \"dragService\", void 0);\n__decorate$I([\n    Autowired(\"rangeService\")\n], AbstractSelectionHandle.prototype, \"rangeService\", void 0);\n__decorate$I([\n    Autowired(\"mouseEventService\")\n], AbstractSelectionHandle.prototype, \"mouseEventService\", void 0);\n__decorate$I([\n    Autowired(\"columnModel\")\n], AbstractSelectionHandle.prototype, \"columnModel\", void 0);\n__decorate$I([\n    Autowired(\"cellNavigationService\")\n], AbstractSelectionHandle.prototype, \"cellNavigationService\", void 0);\n__decorate$I([\n    Autowired(\"navigationService\")\n], AbstractSelectionHandle.prototype, \"navigationService\", void 0);\n__decorate$I([\n    Autowired('rowPositionUtils')\n], AbstractSelectionHandle.prototype, \"rowPositionUtils\", void 0);\n__decorate$I([\n    Autowired('cellPositionUtils')\n], AbstractSelectionHandle.prototype, \"cellPositionUtils\", void 0);\n__decorate$I([\n    Autowired('ctrlsService')\n], AbstractSelectionHandle.prototype, \"ctrlsService\", void 0);\n__decorate$I([\n    PostConstruct\n], AbstractSelectionHandle.prototype, \"init\", null);\n\nfunction findLineByLeastSquares(values) {\n    const len = values.length;\n    let maxDecimals = 0;\n    if (len <= 1) {\n        return values;\n    }\n    for (let i = 0; i < values.length; i++) {\n        const value = values[i];\n        const splitExponent = value.toString().split('e-');\n        if (splitExponent.length > 1) {\n            maxDecimals = Math.max(maxDecimals, parseInt(splitExponent[1], 10));\n            continue;\n        }\n        if (Math.floor(value) === value) {\n            continue;\n        }\n        maxDecimals = Math.max(maxDecimals, value.toString().split('.')[1].length);\n    }\n    let sum_x = 0;\n    let sum_y = 0;\n    let sum_xy = 0;\n    let sum_xx = 0;\n    let y = 0;\n    for (let x = 0; x < len; x++) {\n        y = values[x];\n        sum_x += x;\n        sum_y += y;\n        sum_xx += x * x;\n        sum_xy += x * y;\n    }\n    const m = (len * sum_xy - sum_x * sum_y) / (len * sum_xx - sum_x * sum_x);\n    const b = (sum_y / len) - (m * sum_x) / len;\n    const result = [];\n    for (let x = 0; x <= len; x++) {\n        result.push(parseFloat((x * m + b).toFixed(maxDecimals)));\n    }\n    return result;\n}\n\nvar __decorate$H = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass FillHandle extends AbstractSelectionHandle {\n    constructor() {\n        super(FillHandle.TEMPLATE);\n        this.markedCells = [];\n        this.cellValues = [];\n        this.isUp = false;\n        this.isLeft = false;\n        this.isReduce = false;\n        this.type = SelectionHandleType.FILL;\n    }\n    updateValuesOnMove(e) {\n        super.updateValuesOnMove(e);\n        if (!this.initialXY) {\n            this.initialXY = this.mouseEventService.getNormalisedPosition(e);\n        }\n        const { x, y } = this.initialXY;\n        const { x: newX, y: newY } = this.mouseEventService.getNormalisedPosition(e);\n        const diffX = Math.abs(x - newX);\n        const diffY = Math.abs(y - newY);\n        const allowedDirection = this.getFillHandleDirection();\n        let direction;\n        if (allowedDirection === 'xy') {\n            direction = diffX > diffY ? 'x' : 'y';\n        }\n        else {\n            direction = allowedDirection;\n        }\n        if (direction !== this.dragAxis) {\n            this.dragAxis = direction;\n            this.changedCalculatedValues = true;\n        }\n    }\n    onDrag(e) {\n        if (!this.initialPosition) {\n            const cellCtrl = this.getCellCtrl();\n            if (!cellCtrl) {\n                return;\n            }\n            this.initialPosition = cellCtrl.getCellPosition();\n        }\n        const lastCellHovered = this.getLastCellHovered();\n        if (lastCellHovered) {\n            this.markPathFrom(this.initialPosition, lastCellHovered);\n        }\n    }\n    onDragEnd(e) {\n        this.initialXY = null;\n        if (!this.markedCells.length) {\n            return;\n        }\n        const isX = this.dragAxis === 'x';\n        const initialRange = this.getCellRange();\n        const colLen = initialRange.columns.length;\n        const rangeStartRow = this.getRangeStartRow();\n        const rangeEndRow = this.getRangeEndRow();\n        let finalRange;\n        if (!this.isUp && !this.isLeft) {\n            finalRange = this.rangeService.createCellRangeFromCellRangeParams({\n                rowStartIndex: rangeStartRow.rowIndex,\n                rowStartPinned: rangeStartRow.rowPinned,\n                columnStart: initialRange.columns[0],\n                rowEndIndex: isX ? rangeEndRow.rowIndex : this.lastCellMarked.rowIndex,\n                rowEndPinned: isX ? rangeEndRow.rowPinned : this.lastCellMarked.rowPinned,\n                columnEnd: isX ? this.lastCellMarked.column : initialRange.columns[colLen - 1]\n            });\n        }\n        else {\n            const startRow = isX ? rangeStartRow : this.lastCellMarked;\n            finalRange = this.rangeService.createCellRangeFromCellRangeParams({\n                rowStartIndex: startRow.rowIndex,\n                rowStartPinned: startRow.rowPinned,\n                columnStart: isX ? this.lastCellMarked.column : initialRange.columns[0],\n                rowEndIndex: rangeEndRow.rowIndex,\n                rowEndPinned: rangeEndRow.rowPinned,\n                columnEnd: initialRange.columns[colLen - 1]\n            });\n        }\n        if (finalRange) {\n            // raising fill events for undo / redo\n            this.raiseFillStartEvent();\n            this.handleValueChanged(initialRange, finalRange, e);\n            this.rangeService.setCellRanges([finalRange]);\n            this.raiseFillEndEvent(initialRange, finalRange);\n        }\n    }\n    getFillHandleDirection() {\n        const direction = this.gridOptionsService.get('fillHandleDirection');\n        if (!direction) {\n            return 'xy';\n        }\n        if (direction !== 'x' && direction !== 'y' && direction !== 'xy') {\n            _.doOnce(() => console.warn(`AG Grid: valid values for fillHandleDirection are 'x', 'y' and 'xy'. Default to 'xy'.`), 'warn invalid fill direction');\n            return 'xy';\n        }\n        return direction;\n    }\n    raiseFillStartEvent() {\n        const fillStartEvent = {\n            type: Events.EVENT_FILL_START\n        };\n        this.eventService.dispatchEvent(fillStartEvent);\n    }\n    raiseFillEndEvent(initialRange, finalRange) {\n        const fillEndEvent = {\n            type: Events.EVENT_FILL_END,\n            initialRange: initialRange,\n            finalRange: finalRange\n        };\n        this.eventService.dispatchEvent(fillEndEvent);\n    }\n    handleValueChanged(initialRange, finalRange, e) {\n        const initialRangeEndRow = this.rangeService.getRangeEndRow(initialRange);\n        const initialRangeStartRow = this.rangeService.getRangeStartRow(initialRange);\n        const finalRangeEndRow = this.rangeService.getRangeEndRow(finalRange);\n        const finalRangeStartRow = this.rangeService.getRangeStartRow(finalRange);\n        const isVertical = this.dragAxis === 'y';\n        // if the range is being reduced in size, all we need to do is\n        // clear the cells that are no longer part of the range\n        if (this.isReduce && !this.gridOptionsService.is('suppressClearOnFillReduction')) {\n            const columns = isVertical\n                ? initialRange.columns\n                : initialRange.columns.filter(col => finalRange.columns.indexOf(col) < 0);\n            const startRow = isVertical ? this.cellNavigationService.getRowBelow(finalRangeEndRow) : finalRangeStartRow;\n            if (startRow) {\n                this.clearCellsInRange(startRow, initialRangeEndRow, columns);\n            }\n            return;\n        }\n        let withinInitialRange = true;\n        const values = [];\n        const initialValues = [];\n        let idx = 0;\n        const resetValues = () => {\n            values.length = 0;\n            initialValues.length = 0;\n            idx = 0;\n        };\n        const iterateAcrossCells = (column, columns) => {\n            let currentRow = this.isUp ? initialRangeEndRow : initialRangeStartRow;\n            let finished = false;\n            if (isVertical) {\n                withinInitialRange = true;\n                resetValues();\n            }\n            while (!finished && currentRow) {\n                const rowNode = this.rowPositionUtils.getRowNode(currentRow);\n                if (!rowNode) {\n                    break;\n                }\n                if (isVertical && column) {\n                    fillValues(values, column, rowNode, () => {\n                        return !this.rowPositionUtils.sameRow(currentRow, this.isUp ? initialRangeStartRow : initialRangeEndRow);\n                    });\n                }\n                else if (columns) {\n                    withinInitialRange = true;\n                    resetValues();\n                    columns.forEach(col => fillValues(values, col, rowNode, () => col !== (this.isLeft ? initialRange.columns[0] : _.last(initialRange.columns))));\n                }\n                finished = this.rowPositionUtils.sameRow(currentRow, this.isUp ? finalRangeStartRow : finalRangeEndRow);\n                currentRow = this.isUp\n                    ? this.cellNavigationService.getRowAbove(currentRow)\n                    : this.cellNavigationService.getRowBelow(currentRow);\n            }\n        };\n        const fillValues = (currentValues, col, rowNode, updateInitialSet) => {\n            var _a, _b;\n            let currentValue;\n            let skipValue = false;\n            if (withinInitialRange) {\n                currentValue = this.valueService.getValue(col, rowNode);\n                initialValues.push(currentValue);\n                withinInitialRange = updateInitialSet();\n            }\n            else {\n                const { value, fromUserFunction, sourceCol, sourceRowNode } = this.processValues(e, currentValues, initialValues, col, rowNode, idx++);\n                currentValue = value;\n                if (col.isCellEditable(rowNode)) {\n                    const cellValue = this.valueService.getValue(col, rowNode);\n                    if (!fromUserFunction) {\n                        if ((_a = sourceCol === null || sourceCol === void 0 ? void 0 : sourceCol.getColDef()) === null || _a === void 0 ? void 0 : _a.useValueFormatterForExport) {\n                            currentValue = (_b = this.valueFormatterService.formatValue(sourceCol, sourceRowNode, currentValue)) !== null && _b !== void 0 ? _b : currentValue;\n                        }\n                        if (col.getColDef().useValueParserForImport) {\n                            currentValue = this.valueParserService.parseValue(col, rowNode, \n                            // if no sourceCol, then currentValue is a number\n                            sourceCol ? currentValue : _.toStringOrNull(currentValue), cellValue);\n                        }\n                    }\n                    if (!fromUserFunction || cellValue !== currentValue) {\n                        rowNode.setDataValue(col, currentValue, 'rangeService');\n                    }\n                    else {\n                        skipValue = true;\n                    }\n                }\n            }\n            if (!skipValue) {\n                currentValues.push({\n                    value: currentValue,\n                    column: col,\n                    rowNode\n                });\n            }\n        };\n        if (isVertical) {\n            initialRange.columns.forEach(col => {\n                iterateAcrossCells(col);\n            });\n        }\n        else {\n            const columns = this.isLeft ? [...finalRange.columns].reverse() : finalRange.columns;\n            iterateAcrossCells(undefined, columns);\n        }\n    }\n    clearCellsInRange(startRow, endRow, columns) {\n        const cellRange = {\n            startRow,\n            endRow,\n            columns,\n            startColumn: columns[0]\n        };\n        this.rangeService.clearCellRangeCellValues({ cellRanges: [cellRange] });\n    }\n    processValues(event, values, initialValues, col, rowNode, idx) {\n        const userFillOperation = this.gridOptionsService.getCallback('fillOperation');\n        const isVertical = this.dragAxis === 'y';\n        let direction;\n        if (isVertical) {\n            direction = this.isUp ? 'up' : 'down';\n        }\n        else {\n            direction = this.isLeft ? 'left' : 'right';\n        }\n        if (userFillOperation) {\n            const params = {\n                event,\n                values: values.map(({ value }) => value),\n                initialValues,\n                currentIndex: idx,\n                currentCellValue: this.valueService.getValue(col, rowNode),\n                direction,\n                column: col,\n                rowNode: rowNode\n            };\n            const userResult = userFillOperation(params);\n            if (userResult !== false) {\n                return { value: userResult, fromUserFunction: true };\n            }\n        }\n        const allNumbers = !values.some(({ value }) => {\n            const asFloat = parseFloat(value);\n            return isNaN(asFloat) || asFloat.toString() !== value.toString();\n        });\n        // values should be copied in order if the alt key is pressed\n        // or if the values contain strings and numbers\n        // However, if we only have one initial value selected, and that\n        // value is a number and we are also pressing alt, then we should\n        // increment or decrement the value by 1 based on direction.\n        if (event.altKey || !allNumbers) {\n            if (allNumbers && initialValues.length === 1) {\n                const multiplier = (this.isUp || this.isLeft) ? -1 : 1;\n                return { value: parseFloat(_.last(values).value) + 1 * multiplier, fromUserFunction: false };\n            }\n            const { value, column: sourceCol, rowNode: sourceRowNode } = values[idx % values.length];\n            return { value, fromUserFunction: false, sourceCol, sourceRowNode };\n        }\n        return { value: _.last(findLineByLeastSquares(values.map(({ value }) => Number(value)))), fromUserFunction: false };\n    }\n    clearValues() {\n        this.clearMarkedPath();\n        this.clearCellValues();\n        this.lastCellMarked = undefined;\n        super.clearValues();\n    }\n    clearMarkedPath() {\n        this.markedCells.forEach(cell => {\n            if (!cell.isAlive()) {\n                return;\n            }\n            const comp = cell.getComp();\n            comp.addOrRemoveCssClass('ag-selection-fill-top', false);\n            comp.addOrRemoveCssClass('ag-selection-fill-right', false);\n            comp.addOrRemoveCssClass('ag-selection-fill-bottom', false);\n            comp.addOrRemoveCssClass('ag-selection-fill-left', false);\n        });\n        this.markedCells.length = 0;\n        this.isUp = false;\n        this.isLeft = false;\n        this.isReduce = false;\n    }\n    clearCellValues() {\n        this.cellValues.length = 0;\n    }\n    markPathFrom(initialPosition, currentPosition) {\n        this.clearMarkedPath();\n        this.clearCellValues();\n        if (this.dragAxis === 'y') {\n            if (this.rowPositionUtils.sameRow(currentPosition, initialPosition)) {\n                return;\n            }\n            const isBefore = this.rowPositionUtils.before(currentPosition, initialPosition);\n            const rangeStartRow = this.getRangeStartRow();\n            const rangeEndRow = this.getRangeEndRow();\n            if (isBefore && ((currentPosition.rowPinned == rangeStartRow.rowPinned &&\n                currentPosition.rowIndex >= rangeStartRow.rowIndex) ||\n                (rangeStartRow.rowPinned != rangeEndRow.rowPinned &&\n                    currentPosition.rowPinned == rangeEndRow.rowPinned &&\n                    currentPosition.rowIndex <= rangeEndRow.rowIndex))) {\n                this.reduceVertical(initialPosition, currentPosition);\n                this.isReduce = true;\n            }\n            else {\n                this.extendVertical(initialPosition, currentPosition, isBefore);\n                this.isReduce = false;\n            }\n        }\n        else {\n            const initialColumn = initialPosition.column;\n            const currentColumn = currentPosition.column;\n            if (initialColumn === currentColumn) {\n                return;\n            }\n            const displayedColumns = this.columnModel.getAllDisplayedColumns();\n            const initialIndex = displayedColumns.indexOf(initialColumn);\n            const currentIndex = displayedColumns.indexOf(currentColumn);\n            if (currentIndex <= initialIndex && currentIndex >= displayedColumns.indexOf(this.getCellRange().columns[0])) {\n                this.reduceHorizontal(initialPosition, currentPosition);\n                this.isReduce = true;\n            }\n            else {\n                this.extendHorizontal(initialPosition, currentPosition, currentIndex < initialIndex);\n                this.isReduce = false;\n            }\n        }\n        this.lastCellMarked = currentPosition;\n    }\n    extendVertical(initialPosition, endPosition, isMovingUp) {\n        const { navigationService, rangeService } = this;\n        let row = initialPosition;\n        do {\n            const cellRange = this.getCellRange();\n            const colLen = cellRange.columns.length;\n            for (let i = 0; i < colLen; i++) {\n                const column = cellRange.columns[i];\n                const rowPos = { rowIndex: row.rowIndex, rowPinned: row.rowPinned };\n                const cellPos = Object.assign(Object.assign({}, rowPos), { column });\n                const cellInRange = rangeService.isCellInSpecificRange(cellPos, cellRange);\n                const isInitialRow = this.rowPositionUtils.sameRow(row, initialPosition);\n                if (isMovingUp) {\n                    this.isUp = true;\n                }\n                if (!isInitialRow) {\n                    const cell = navigationService.getCellByPosition(cellPos);\n                    if (cell) {\n                        this.markedCells.push(cell);\n                        const cellCtrl = cell.getComp();\n                        if (!cellInRange) {\n                            cellCtrl.addOrRemoveCssClass('ag-selection-fill-left', i === 0);\n                            cellCtrl.addOrRemoveCssClass('ag-selection-fill-right', i === colLen - 1);\n                        }\n                        cellCtrl.addOrRemoveCssClass(isMovingUp ? 'ag-selection-fill-top' : 'ag-selection-fill-bottom', this.rowPositionUtils.sameRow(row, endPosition));\n                    }\n                }\n            }\n            if (this.rowPositionUtils.sameRow(row, endPosition)) {\n                break;\n            }\n        } while (\n        // tslint:disable-next-line\n        row = isMovingUp\n            ? this.cellNavigationService.getRowAbove(row)\n            : this.cellNavigationService.getRowBelow(row));\n    }\n    reduceVertical(initialPosition, endPosition) {\n        let row = initialPosition;\n        do {\n            const cellRange = this.getCellRange();\n            const colLen = cellRange.columns.length;\n            const isLastRow = this.rowPositionUtils.sameRow(row, endPosition);\n            for (let i = 0; i < colLen; i++) {\n                const rowPos = { rowIndex: row.rowIndex, rowPinned: row.rowPinned };\n                const celPos = Object.assign(Object.assign({}, rowPos), { column: cellRange.columns[i] });\n                const cell = this.navigationService.getCellByPosition(celPos);\n                if (cell) {\n                    this.markedCells.push(cell);\n                    const cellComp = cell.getComp();\n                    cellComp.addOrRemoveCssClass('ag-selection-fill-bottom', this.rowPositionUtils.sameRow(row, endPosition));\n                }\n            }\n            if (isLastRow) {\n                break;\n            }\n            // tslint:disable-next-line\n        } while (row = this.cellNavigationService.getRowAbove(row));\n    }\n    extendHorizontal(initialPosition, endPosition, isMovingLeft) {\n        const allCols = this.columnModel.getAllDisplayedColumns();\n        const startCol = allCols.indexOf(isMovingLeft ? endPosition.column : initialPosition.column);\n        const endCol = allCols.indexOf(isMovingLeft ? this.getCellRange().columns[0] : endPosition.column);\n        const offset = isMovingLeft ? 0 : 1;\n        const colsToMark = allCols.slice(startCol + offset, endCol + offset);\n        const rangeStartRow = this.getRangeStartRow();\n        const rangeEndRow = this.getRangeEndRow();\n        colsToMark.forEach(column => {\n            let row = rangeStartRow;\n            let isLastRow = false;\n            do {\n                isLastRow = this.rowPositionUtils.sameRow(row, rangeEndRow);\n                const cell = this.navigationService.getCellByPosition({\n                    rowIndex: row.rowIndex,\n                    rowPinned: row.rowPinned,\n                    column: column\n                });\n                if (cell) {\n                    this.markedCells.push(cell);\n                    const cellComp = cell.getComp();\n                    cellComp.addOrRemoveCssClass('ag-selection-fill-top', this.rowPositionUtils.sameRow(row, rangeStartRow));\n                    cellComp.addOrRemoveCssClass('ag-selection-fill-bottom', this.rowPositionUtils.sameRow(row, rangeEndRow));\n                    if (isMovingLeft) {\n                        this.isLeft = true;\n                        cellComp.addOrRemoveCssClass('ag-selection-fill-left', column === colsToMark[0]);\n                    }\n                    else {\n                        cellComp.addOrRemoveCssClass('ag-selection-fill-right', column === _.last(colsToMark));\n                    }\n                }\n                row = this.cellNavigationService.getRowBelow(row);\n            } while (!isLastRow);\n        });\n    }\n    reduceHorizontal(initialPosition, endPosition) {\n        const allCols = this.columnModel.getAllDisplayedColumns();\n        const startCol = allCols.indexOf(endPosition.column);\n        const endCol = allCols.indexOf(initialPosition.column);\n        const colsToMark = allCols.slice(startCol, endCol);\n        const rangeStartRow = this.getRangeStartRow();\n        const rangeEndRow = this.getRangeEndRow();\n        colsToMark.forEach(column => {\n            let row = rangeStartRow;\n            let isLastRow = false;\n            do {\n                isLastRow = this.rowPositionUtils.sameRow(row, rangeEndRow);\n                const cell = this.navigationService.getCellByPosition({\n                    rowIndex: row.rowIndex,\n                    rowPinned: row.rowPinned,\n                    column: column\n                });\n                if (cell) {\n                    this.markedCells.push(cell);\n                    const cellComp = cell.getComp();\n                    cellComp.addOrRemoveCssClass('ag-selection-fill-right', column === colsToMark[0]);\n                }\n                row = this.cellNavigationService.getRowBelow(row);\n            } while (!isLastRow);\n        });\n    }\n    refresh(cellCtrl) {\n        const cellRange = this.rangeService.getCellRanges()[0];\n        const isColumnRange = !cellRange.startRow || !cellRange.endRow;\n        if (isColumnRange) {\n            this.destroy();\n            return;\n        }\n        super.refresh(cellCtrl);\n    }\n}\nFillHandle.TEMPLATE = `<div class=\"ag-fill-handle\"></div>`;\n__decorate$H([\n    Autowired('valueService')\n], FillHandle.prototype, \"valueService\", void 0);\n__decorate$H([\n    Autowired('valueParserService')\n], FillHandle.prototype, \"valueParserService\", void 0);\n__decorate$H([\n    Autowired('valueFormatterService')\n], FillHandle.prototype, \"valueFormatterService\", void 0);\n\nclass RangeHandle extends AbstractSelectionHandle {\n    constructor() {\n        super(RangeHandle.TEMPLATE);\n        this.type = SelectionHandleType.RANGE;\n        this.rangeFixed = false;\n    }\n    onDrag(e) {\n        const lastCellHovered = this.getLastCellHovered();\n        if (!lastCellHovered) {\n            return;\n        }\n        const cellRanges = this.rangeService.getCellRanges();\n        const lastRange = _.last(cellRanges);\n        if (!this.rangeFixed) {\n            this.fixRangeStartEnd(lastRange);\n            this.rangeFixed = true;\n        }\n        this.endPosition = {\n            rowIndex: lastCellHovered.rowIndex,\n            rowPinned: lastCellHovered.rowPinned,\n            column: lastCellHovered.column\n        };\n        // check if the cell ranges are for a chart\n        if (cellRanges.length === 2 && cellRanges[0].type === CellRangeType.DIMENSION && lastRange.type === CellRangeType.VALUE) {\n            const rowChanged = !this.rowPositionUtils.sameRow(this.endPosition, this.rangeService.getRangeEndRow(lastRange));\n            if (rowChanged) {\n                // ensure the dimension range is kept in sync with the value range (which has the handle)\n                this.rangeService.updateRangeEnd(cellRanges[0], Object.assign(Object.assign({}, this.endPosition), { column: cellRanges[0].columns[0] }), true);\n            }\n        }\n        this.rangeService.extendLatestRangeToCell(this.endPosition);\n    }\n    onDragEnd(e) {\n        const cellRange = _.last(this.rangeService.getCellRanges());\n        this.fixRangeStartEnd(cellRange);\n        this.rangeFixed = false;\n    }\n    fixRangeStartEnd(cellRange) {\n        const startRow = this.rangeService.getRangeStartRow(cellRange);\n        const endRow = this.rangeService.getRangeEndRow(cellRange);\n        const column = cellRange.columns[0];\n        cellRange.startRow = startRow;\n        cellRange.endRow = endRow;\n        cellRange.startColumn = column;\n    }\n}\nRangeHandle.TEMPLATE = `<div class=\"ag-range-handle\"></div>`;\n\nvar __decorate$G = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet SelectionHandleFactory = class SelectionHandleFactory extends BeanStub {\n    createSelectionHandle(type) {\n        return this.createBean(type === SelectionHandleType.RANGE ? new RangeHandle() : new FillHandle());\n    }\n};\nSelectionHandleFactory = __decorate$G([\n    Bean('selectionHandleFactory')\n], SelectionHandleFactory);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$9 = '30.0.3';\n\nconst RangeSelectionModule = {\n    version: VERSION$9,\n    moduleName: ModuleNames.RangeSelectionModule,\n    beans: [RangeService, SelectionHandleFactory],\n    agStackComponents: [\n        { componentName: 'AgFillHandle', componentClass: FillHandle },\n        { componentName: 'AgRangeHandle', componentClass: RangeHandle }\n    ],\n    dependantModules: [\n        EnterpriseCoreModule\n    ]\n};\n\nvar __decorate$F = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AgColorPanel extends Component {\n    constructor(config) {\n        super(AgColorPanel.TEMPLATE);\n        this.H = 1; // in the [0, 1] range\n        this.S = 1; // in the [0, 1] range\n        this.B = 1; // in the [0, 1] range\n        this.A = 1; // in the [0, 1] range\n        this.isSpectrumDragging = false;\n        this.isSpectrumHueDragging = false;\n        this.isSpectrumAlphaDragging = false;\n        this.colorChanged = false;\n        this.picker = config.picker;\n    }\n    postConstruct() {\n        const eGui = this.getGui();\n        this.initRecentColors();\n        this.addManagedListener(this.spectrumVal, 'mousedown', this.onSpectrumDraggerDown.bind(this));\n        this.addManagedListener(eGui, 'mousemove', this.onSpectrumDraggerMove.bind(this));\n        this.addManagedListener(this.spectrumHue, 'mousedown', this.onSpectrumHueDown.bind(this));\n        this.addManagedListener(eGui, 'mousemove', this.onSpectrumHueMove.bind(this));\n        this.addManagedListener(this.spectrumAlpha, 'mousedown', this.onSpectrumAlphaDown.bind(this));\n        this.addManagedListener(eGui, 'mousemove', this.onSpectrumAlphaMove.bind(this));\n        // Listening to `mouseup` on the document on purpose. The user might release the mouse button\n        // outside the UI control. When the mouse returns back to the control's area, the dragging\n        // of the thumb is not expected and seen as a bug.\n        this.addManagedListener(document, 'mouseup', this.onMouseUp.bind(this));\n        this.addManagedListener(this.recentColors, 'click', this.onRecentColorClick.bind(this));\n    }\n    refreshSpectrumRect() {\n        return this.spectrumValRect = this.spectrumVal.getBoundingClientRect();\n    }\n    refreshHueRect() {\n        return this.spectrumHueRect = this.spectrumHue.getBoundingClientRect();\n    }\n    refreshAlphaRect() {\n        return this.spectrumAlphaRect = this.spectrumAlpha.getBoundingClientRect();\n    }\n    onSpectrumDraggerDown(e) {\n        this.refreshSpectrumRect();\n        this.isSpectrumDragging = true;\n        this.moveDragger(e);\n    }\n    onSpectrumDraggerMove(e) {\n        if (this.isSpectrumDragging) {\n            this.moveDragger(e);\n        }\n    }\n    onSpectrumHueDown(e) {\n        this.refreshHueRect();\n        this.isSpectrumHueDragging = true;\n        this.moveHueSlider(e);\n    }\n    onSpectrumHueMove(e) {\n        if (this.isSpectrumHueDragging) {\n            this.moveHueSlider(e);\n        }\n    }\n    onSpectrumAlphaDown(e) {\n        this.refreshAlphaRect();\n        this.isSpectrumAlphaDragging = true;\n        this.moveAlphaSlider(e);\n    }\n    onSpectrumAlphaMove(e) {\n        if (this.isSpectrumAlphaDragging) {\n            this.moveAlphaSlider(e);\n        }\n    }\n    onMouseUp() {\n        this.isSpectrumDragging = false;\n        this.isSpectrumHueDragging = false;\n        this.isSpectrumAlphaDragging = false;\n    }\n    moveDragger(e) {\n        const valRect = this.spectrumValRect;\n        if (valRect) {\n            let x = e.clientX - valRect.left;\n            let y = e.clientY - valRect.top;\n            x = Math.max(x, 0);\n            x = Math.min(x, valRect.width);\n            y = Math.max(y, 0);\n            y = Math.min(y, valRect.height);\n            this.setSpectrumValue(x / valRect.width, 1 - y / valRect.height);\n        }\n    }\n    moveHueSlider(e) {\n        const hueRect = this.spectrumHueRect;\n        if (hueRect) {\n            const slider = this.spectrumHueSlider;\n            const sliderRect = slider.getBoundingClientRect();\n            let x = e.clientX - hueRect.left;\n            x = Math.max(x, 0);\n            x = Math.min(x, hueRect.width);\n            this.H = 1 - x / hueRect.width;\n            slider.style.left = (x + sliderRect.width / 2) + 'px';\n            this.update();\n        }\n    }\n    moveAlphaSlider(e) {\n        const alphaRect = this.spectrumAlphaRect;\n        if (alphaRect) {\n            const slider = this.spectrumAlphaSlider;\n            const sliderRect = slider.getBoundingClientRect();\n            let x = e.clientX - alphaRect.left;\n            x = Math.max(x, 0);\n            x = Math.min(x, alphaRect.width);\n            this.A = x / alphaRect.width;\n            slider.style.left = (x + sliderRect.width / 2) + 'px';\n            this.update();\n        }\n    }\n    update() {\n        const color = Color.fromHSB(this.H * 360, this.S, this.B, this.A);\n        const spectrumColor = Color.fromHSB(this.H * 360, 1, 1);\n        const rgbaColor = color.toRgbaString();\n        // the recent color list needs to know color has actually changed\n        const colorPicker = this.picker;\n        const existingColor = Color.fromString(colorPicker.getValue());\n        if (existingColor.toRgbaString() !== rgbaColor) {\n            this.colorChanged = true;\n        }\n        colorPicker.setValue(rgbaColor);\n        this.spectrumColor.style.backgroundColor = spectrumColor.toRgbaString();\n        this.spectrumDragger.style.backgroundColor = rgbaColor;\n    }\n    /**\n     * @param saturation In the [0, 1] interval.\n     * @param brightness In the [0, 1] interval.\n     */\n    setSpectrumValue(saturation, brightness) {\n        const valRect = this.spectrumValRect || this.refreshSpectrumRect();\n        if (valRect) {\n            const dragger = this.spectrumDragger;\n            const draggerRect = dragger.getBoundingClientRect();\n            saturation = Math.max(0, saturation);\n            saturation = Math.min(1, saturation);\n            brightness = Math.max(0, brightness);\n            brightness = Math.min(1, brightness);\n            this.S = saturation;\n            this.B = brightness;\n            dragger.style.left = (saturation * valRect.width - draggerRect.width / 2) + 'px';\n            dragger.style.top = ((1 - brightness) * valRect.height - draggerRect.height / 2) + 'px';\n            this.update();\n        }\n    }\n    initRecentColors() {\n        const recentColors = AgColorPanel.recentColors;\n        const innerHtml = recentColors.map((color, index) => {\n            return `<div class=\"ag-recent-color\" id=${index} style=\"background-color: ${color}; width: 15px; height: 15px;\" recent-color=\"${color}\"></div>`;\n        });\n        this.recentColors.innerHTML = innerHtml.join('');\n    }\n    setValue(val) {\n        const color = Color.fromString(val);\n        const [h, s, b] = color.toHSB();\n        this.H = (isNaN(h) ? 0 : h) / 360;\n        this.A = color.a;\n        const spectrumHueRect = this.spectrumHueRect || this.refreshHueRect();\n        const spectrumAlphaRect = this.spectrumAlphaRect || this.refreshAlphaRect();\n        this.spectrumHueSlider.style.left = `${((this.H - 1) * -spectrumHueRect.width)}px`;\n        this.spectrumAlphaSlider.style.left = `${(this.A * spectrumAlphaRect.width)}px`;\n        this.setSpectrumValue(s, b);\n    }\n    onRecentColorClick(e) {\n        const target = e.target;\n        if (!_.exists(target.id)) {\n            return;\n        }\n        const id = parseInt(target.id, 10);\n        this.setValue(AgColorPanel.recentColors[id]);\n        this.destroy();\n    }\n    addRecentColor() {\n        const color = Color.fromHSB(this.H * 360, this.S, this.B, this.A);\n        const rgbaColor = color.toRgbaString();\n        let recentColors = AgColorPanel.recentColors;\n        if (!this.colorChanged || recentColors[0] === rgbaColor) {\n            return;\n        }\n        // remove duplicate color\n        recentColors = recentColors.filter(currentColor => currentColor != rgbaColor);\n        // add color to head\n        recentColors = [rgbaColor].concat(recentColors);\n        // ensure we don't exceed max number of recent colors\n        if (recentColors.length > AgColorPanel.maxRecentColors) {\n            recentColors = recentColors.slice(0, AgColorPanel.maxRecentColors);\n        }\n        AgColorPanel.recentColors = recentColors;\n    }\n    destroy() {\n        this.addRecentColor();\n        super.destroy();\n    }\n}\nAgColorPanel.maxRecentColors = 8;\nAgColorPanel.recentColors = [];\nAgColorPanel.TEMPLATE = `<div class=\"ag-color-panel\">\n            <div ref=\"spectrumColor\" class=\"ag-spectrum-color\">\n                <div class=\"ag-spectrum-sat ag-spectrum-fill\">\n                    <div ref=\"spectrumVal\" class=\"ag-spectrum-val ag-spectrum-fill\">\n                        <div ref=\"spectrumDragger\" class=\"ag-spectrum-dragger\"></div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"ag-spectrum-tools\">\n                <div ref=\"spectrumHue\" class=\"ag-spectrum-hue ag-spectrum-tool\">\n                    <div class=\"ag-spectrum-hue-background\"></div>\n                    <div ref=\"spectrumHueSlider\" class=\"ag-spectrum-slider\"></div>\n                </div>\n                <div ref=\"spectrumAlpha\" class=\"ag-spectrum-alpha ag-spectrum-tool\">\n                    <div class=\"ag-spectrum-alpha-background\"></div>\n                    <div ref=\"spectrumAlphaSlider\" class=\"ag-spectrum-slider\"></div>\n                </div>\n                <div ref=\"recentColors\" class=\"ag-recent-colors\"></div>\n            </div>\n        </div>`;\n__decorate$F([\n    RefSelector('spectrumColor')\n], AgColorPanel.prototype, \"spectrumColor\", void 0);\n__decorate$F([\n    RefSelector('spectrumVal')\n], AgColorPanel.prototype, \"spectrumVal\", void 0);\n__decorate$F([\n    RefSelector('spectrumDragger')\n], AgColorPanel.prototype, \"spectrumDragger\", void 0);\n__decorate$F([\n    RefSelector('spectrumHue')\n], AgColorPanel.prototype, \"spectrumHue\", void 0);\n__decorate$F([\n    RefSelector('spectrumHueSlider')\n], AgColorPanel.prototype, \"spectrumHueSlider\", void 0);\n__decorate$F([\n    RefSelector('spectrumAlpha')\n], AgColorPanel.prototype, \"spectrumAlpha\", void 0);\n__decorate$F([\n    RefSelector('spectrumAlphaSlider')\n], AgColorPanel.prototype, \"spectrumAlphaSlider\", void 0);\n__decorate$F([\n    RefSelector('recentColors')\n], AgColorPanel.prototype, \"recentColors\", void 0);\n__decorate$F([\n    PostConstruct\n], AgColorPanel.prototype, \"postConstruct\", null);\n\nclass AgColorPicker extends AgPickerField {\n    constructor(config) {\n        super(config, 'ag-color-picker', 'colorPicker');\n        if (config && config.color) {\n            this.value = config.color;\n        }\n    }\n    postConstruct() {\n        super.postConstruct();\n        if (this.value) {\n            this.setValue(this.value);\n        }\n    }\n    showPicker() {\n        const eGuiRect = this.getGui().getBoundingClientRect();\n        const colorDialog = this.createBean(new AgDialog({\n            closable: false,\n            modal: true,\n            hideTitleBar: true,\n            minWidth: 190,\n            width: 190,\n            height: 250,\n            x: eGuiRect.right - 190,\n            y: eGuiRect.top - 250\n        }));\n        this.isPickerDisplayed = true;\n        colorDialog.addCssClass('ag-color-dialog');\n        _.setAriaExpanded(this.eWrapper, true);\n        const colorPanel = this.createBean(new AgColorPanel({ picker: this }));\n        colorPanel.addDestroyFunc(() => {\n            if (colorDialog.isAlive()) {\n                this.destroyBean(colorDialog);\n            }\n        });\n        colorDialog.setParentComponent(this);\n        colorDialog.setBodyComponent(colorPanel);\n        colorPanel.setValue(this.getValue());\n        colorDialog.addDestroyFunc(() => {\n            // here we check if the picker was already being\n            // destroyed to avoid a stack overflow\n            if (!this.isDestroyingPicker) {\n                this.isDestroyingPicker = true;\n                if (colorPanel.isAlive()) {\n                    this.destroyBean(colorPanel);\n                }\n            }\n            else {\n                this.isDestroyingPicker = false;\n            }\n            if (this.isAlive()) {\n                _.setAriaExpanded(this.eWrapper, false);\n                this.getFocusableElement().focus();\n            }\n            this.isPickerDisplayed = false;\n        });\n        return colorDialog;\n    }\n    setValue(color) {\n        if (this.value === color) {\n            return this;\n        }\n        this.eDisplayField.style.backgroundColor = color;\n        return super.setValue(color);\n    }\n    getValue() {\n        return this.value;\n    }\n}\n\nconst VERSION_CHECKING_FIRST_GRID_MAJOR_VERSION = 28;\nconst VERSION_CHECKING_FIRST_CHARTS_MAJOR_VERSION = 6;\nfunction isValidVersion(version) {\n    return version && version.match(/\\d+\\.\\d+\\.\\d+/);\n}\nfunction isValidMajorVersion({ gridMajorVersion, chartsMajorVersion }) {\n    const gridMajor = parseInt(gridMajorVersion, 10);\n    const chartsMajor = parseInt(chartsMajorVersion, 10);\n    const gridMajorDifference = gridMajor - VERSION_CHECKING_FIRST_GRID_MAJOR_VERSION;\n    const chartsMajorDifference = chartsMajor - VERSION_CHECKING_FIRST_CHARTS_MAJOR_VERSION;\n    const isFirstOrAfterVersion = gridMajorDifference >= 0;\n    return gridMajorDifference === chartsMajorDifference && isFirstOrAfterVersion;\n}\nfunction gridChartVersion(gridVersion) {\n    if (!gridVersion || !isValidVersion(gridVersion)) {\n        return undefined;\n    }\n    const [gridMajor, gridMinor] = gridVersion.split('.') || [];\n    const gridMajorMinor = `${gridMajor}.${gridMinor}.x`;\n    const gridMajorNumber = parseInt(gridMajor, 10);\n    const chartsMajor = (gridMajorNumber - VERSION_CHECKING_FIRST_GRID_MAJOR_VERSION) + VERSION_CHECKING_FIRST_CHARTS_MAJOR_VERSION;\n    if (chartsMajor < 0) {\n        return undefined;\n    }\n    const chartsMinor = gridMinor;\n    const chartsMajorMinor = `${chartsMajor}.${chartsMinor}.x`;\n    return {\n        gridMajorMinor,\n        chartsMajorMinor\n    };\n}\nfunction validGridChartsVersionErrorMessage({ type, gridVersion, chartsVersion }) {\n    const invalidMessage = 'AG Grid: AG Grid version is incompatible. Please see https://www.ag-grid.com/javascript-data-grid/modules/ for more information.';\n    if (!gridVersion) {\n        return invalidMessage;\n    }\n    const version = gridChartVersion(gridVersion);\n    if (!version) {\n        return invalidMessage;\n    }\n    const { gridMajorMinor, chartsMajorMinor } = version;\n    if (type === 'incompatible') {\n        return `AG Grid version ${gridVersion} and AG Charts version ${chartsVersion} is not supported. AG Grid version ${gridMajorMinor} should be used with AG Chart ${chartsMajorMinor}. Please see https://www.ag-grid.com/javascript-data-grid/modules/ for more information.`;\n    }\n    else if (type === 'invalidCharts') {\n        return `AG Grid version ${gridMajorMinor} should be used with AG Chart ${chartsMajorMinor}. Please see https://www.ag-grid.com/javascript-data-grid/modules/ for more information.`;\n    }\n    return invalidMessage;\n}\nfunction validGridChartsVersion({ gridVersion, chartsVersion }) {\n    if (!isValidVersion(chartsVersion)) {\n        return {\n            isValid: false,\n            message: validGridChartsVersionErrorMessage({ type: 'invalidCharts', gridVersion, chartsVersion })\n        };\n    }\n    if (!isValidVersion(gridVersion)) {\n        return {\n            isValid: false,\n            message: validGridChartsVersionErrorMessage({ type: 'invalidGrid', gridVersion, chartsVersion })\n        };\n    }\n    const [gridMajor, gridMinor] = gridVersion.split('.') || [];\n    const [chartsMajor, chartsMinor] = chartsVersion.split('.') || [];\n    const isValidMajor = isValidMajorVersion({\n        gridMajorVersion: gridMajor,\n        chartsMajorVersion: chartsMajor\n    });\n    if (isValidMajor && gridMinor === chartsMinor) {\n        return {\n            isValid: true\n        };\n    }\n    else if (!isValidMajor || gridMinor !== chartsMinor) {\n        return {\n            isValid: false,\n            message: validGridChartsVersionErrorMessage({ type: 'incompatible', gridVersion, chartsVersion })\n        };\n    }\n    return {\n        isValid: false,\n        message: validGridChartsVersionErrorMessage({ type: 'invalid', gridVersion, chartsVersion })\n    };\n}\n\nconst GridChartsModule = {\n    version: VERSION$a,\n    validate: () => {\n        return validGridChartsVersion({\n            gridVersion: VERSION$a,\n            chartsVersion: ChartService.CHARTS_VERSION\n        });\n    },\n    moduleName: ModuleNames.GridChartsModule,\n    beans: [\n        ChartService, ChartTranslationService, ChartCrossFilterService\n    ],\n    agStackComponents: [\n        { componentName: 'AgColorPicker', componentClass: AgColorPicker },\n        { componentName: 'AgAngleSelect', componentClass: AgAngleSelect },\n    ],\n    dependantModules: [\n        RangeSelectionModule,\n        EnterpriseCoreModule\n    ]\n};\n\n/**\n * Internal Use Only: Used to ensure this file is treated as a module until we can use moduleDetection flag in Ts v4.7\n */\nconst __FORCE_MODULE_DETECTION_AG_GRID_CORE_EXT = 0;\n\nconst agCharts = {\n    time,\n    AgChart\n};\n\nvar __decorate$E = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass DetailCellRendererCtrl extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.loadRowDataVersion = 0;\n        this.needRefresh = false;\n    }\n    init(comp, params) {\n        this.params = params;\n        this.comp = comp;\n        const doNothingBecauseInsidePinnedSection = params.pinned != null;\n        if (doNothingBecauseInsidePinnedSection) {\n            return;\n        }\n        this.setAutoHeightClasses();\n        this.setupRefreshStrategy();\n        this.addThemeToDetailGrid();\n        this.createDetailGrid();\n        this.loadRowData();\n        this.addManagedListener(params.node.parent, RowNode.EVENT_DATA_CHANGED, () => {\n            this.needRefresh = true;\n        });\n        this.addManagedListener(this.eventService, Events.EVENT_FULL_WIDTH_ROW_FOCUSED, this.onFullWidthRowFocused.bind(this));\n    }\n    onFullWidthRowFocused(e) {\n        const params = this.params;\n        const row = { rowIndex: params.node.rowIndex, rowPinned: params.node.rowPinned };\n        const eventRow = { rowIndex: e.rowIndex, rowPinned: e.rowPinned };\n        const isSameRow = this.rowPositionUtils.sameRow(row, eventRow);\n        if (!isSameRow) {\n            return;\n        }\n        this.focusService.focusInto(this.comp.getGui(), e.fromBelow);\n    }\n    setAutoHeightClasses() {\n        const autoHeight = this.gridOptionsService.is('detailRowAutoHeight');\n        const parentClass = autoHeight ? 'ag-details-row-auto-height' : 'ag-details-row-fixed-height';\n        const detailClass = autoHeight ? 'ag-details-grid-auto-height' : 'ag-details-grid-fixed-height';\n        this.comp.addOrRemoveCssClass(parentClass, true);\n        this.comp.addOrRemoveDetailGridCssClass(detailClass, true);\n    }\n    setupRefreshStrategy() {\n        const providedStrategy = this.params.refreshStrategy;\n        const validSelection = providedStrategy == 'everything' || providedStrategy == 'nothing' || providedStrategy == 'rows';\n        if (validSelection) {\n            this.refreshStrategy = providedStrategy;\n            return;\n        }\n        if (providedStrategy != null) {\n            console.warn(\"AG Grid: invalid cellRendererParams.refreshStrategy = '\" + providedStrategy +\n                \"' supplied, defaulting to refreshStrategy = 'rows'.\");\n        }\n        this.refreshStrategy = 'rows';\n    }\n    addThemeToDetailGrid() {\n        // this is needed by environment service of the child grid, the class needs to be on\n        // the grid div itself - the browser's CSS on the other hand just inherits from the parent grid theme.\n        const { theme } = this.environment.getTheme();\n        if (theme) {\n            this.comp.addOrRemoveDetailGridCssClass(theme, true);\n        }\n    }\n    createDetailGrid() {\n        if (_.missing(this.params.detailGridOptions)) {\n            console.warn('AG Grid: could not find detail grid options for master detail, ' +\n                'please set gridOptions.detailCellRendererParams.detailGridOptions');\n            return;\n        }\n        const autoHeight = this.gridOptionsService.is('detailRowAutoHeight');\n        // we clone the detail grid options, as otherwise it would be shared\n        // across many instances, and that would be a problem because we set\n        // api and columnApi into gridOptions\n        const gridOptions = Object.assign({}, this.params.detailGridOptions);\n        if (autoHeight) {\n            gridOptions.domLayout = 'autoHeight';\n        }\n        this.comp.setDetailGrid(gridOptions);\n    }\n    registerDetailWithMaster(api, columnApi) {\n        const rowId = this.params.node.id;\n        const masterGridApi = this.params.api;\n        const gridInfo = {\n            id: rowId,\n            api: api,\n            columnApi: columnApi\n        };\n        const rowNode = this.params.node;\n        // register with api\n        masterGridApi.addDetailGridInfo(rowId, gridInfo);\n        // register with node\n        rowNode.detailGridInfo = gridInfo;\n        this.addDestroyFunc(() => {\n            // the gridInfo can be stale if a refresh happens and\n            // a new row is created before the old one is destroyed.\n            if (rowNode.detailGridInfo !== gridInfo) {\n                return;\n            }\n            masterGridApi.removeDetailGridInfo(rowId); // unregister from api\n            rowNode.detailGridInfo = null; // unregister from node\n        });\n    }\n    loadRowData() {\n        // in case a refresh happens before the last refresh completes (as we depend on async\n        // application logic) we keep track on what the latest call was.\n        this.loadRowDataVersion++;\n        const versionThisCall = this.loadRowDataVersion;\n        const userFunc = this.params.getDetailRowData;\n        if (!userFunc) {\n            console.warn('AG Grid: could not find getDetailRowData for master / detail, ' +\n                'please set gridOptions.detailCellRendererParams.getDetailRowData');\n            return;\n        }\n        const successCallback = (rowData) => {\n            const mostRecentCall = this.loadRowDataVersion === versionThisCall;\n            if (mostRecentCall) {\n                this.comp.setRowData(rowData);\n            }\n        };\n        const funcParams = {\n            node: this.params.node,\n            // we take data from node, rather than params.data\n            // as the data could have been updated with new instance\n            data: this.params.node.data,\n            successCallback: successCallback,\n            context: this.gridOptionsService.context\n        };\n        userFunc(funcParams);\n    }\n    refresh() {\n        const GET_GRID_TO_REFRESH = false;\n        const GET_GRID_TO_DO_NOTHING = true;\n        // if we return true, it means we pretend to the grid\n        // that we have refreshed, so refresh will never happen.\n        const doNotRefresh = !this.needRefresh || this.refreshStrategy === 'nothing';\n        if (doNotRefresh) {\n            // we do nothing in this refresh method, and also tell the grid to do nothing\n            return GET_GRID_TO_DO_NOTHING;\n        }\n        // reset flag, so don't refresh again until more data changes.\n        this.needRefresh = false;\n        if (this.refreshStrategy === 'everything') {\n            // we want full refresh, so tell the grid to destroy and recreate this cell\n            return GET_GRID_TO_REFRESH;\n        }\n        else {\n            // do the refresh here, and tell the grid to do nothing\n            this.loadRowData();\n            return GET_GRID_TO_DO_NOTHING;\n        }\n    }\n}\n__decorate$E([\n    Autowired('rowPositionUtils')\n], DetailCellRendererCtrl.prototype, \"rowPositionUtils\", void 0);\n__decorate$E([\n    Autowired('focusService')\n], DetailCellRendererCtrl.prototype, \"focusService\", void 0);\n\nvar __decorate$D = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass DetailCellRenderer extends Component {\n    init(params) {\n        this.params = params;\n        this.selectAndSetTemplate();\n        const compProxy = {\n            addOrRemoveCssClass: (cssClassName, on) => this.addOrRemoveCssClass(cssClassName, on),\n            addOrRemoveDetailGridCssClass: (cssClassName, on) => this.eDetailGrid.classList.toggle(cssClassName, on),\n            setDetailGrid: gridOptions => this.setDetailGrid(gridOptions),\n            setRowData: rowData => this.setRowData(rowData),\n            getGui: () => this.eDetailGrid\n        };\n        this.ctrl = this.createManagedBean(new DetailCellRendererCtrl());\n        this.ctrl.init(compProxy, params);\n    }\n    refresh() {\n        return this.ctrl && this.ctrl.refresh();\n    }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so we need to override destroy() just to make the method public.\n    destroy() {\n        super.destroy();\n    }\n    selectAndSetTemplate() {\n        if (this.params.pinned) {\n            this.setTemplate('<div class=\"ag-details-row\"></div>');\n            return;\n        }\n        const setDefaultTemplate = () => {\n            this.setTemplate(DetailCellRenderer.TEMPLATE);\n        };\n        if (_.missing(this.params.template)) {\n            // use default template\n            setDefaultTemplate();\n        }\n        else {\n            // use user provided template\n            if (typeof this.params.template === 'string') {\n                this.setTemplate(this.params.template);\n            }\n            else if (typeof this.params.template === 'function') {\n                const templateFunc = this.params.template;\n                const template = templateFunc(this.params);\n                this.setTemplate(template);\n            }\n            else {\n                console.warn('AG Grid: detailCellRendererParams.template should be function or string');\n                setDefaultTemplate();\n            }\n        }\n        if (this.eDetailGrid == null) {\n            console.warn('AG Grid: reference to eDetailGrid was missing from the details template. ' +\n                'Please add ref=\"eDetailGrid\" to the template.');\n        }\n    }\n    setDetailGrid(gridOptions) {\n        if (!this.eDetailGrid) {\n            return;\n        }\n        // AG-1715\n        // this is only needed when suppressReactUi=true, once we remove the old way\n        // of doing react, and Master / Details is all native React, then we\n        // can remove this code.\n        const agGridReact = this.context.getBean('agGridReact');\n        const agGridReactCloned = agGridReact ? _.cloneObject(agGridReact) : undefined;\n        // when we create detail grid, the detail grid needs frameworkComponentWrapper so that\n        // it created child components correctly, ie  Angular detail grid can have Angular cell renderer.\n        // this is only used by Angular and Vue, as React uses native React AG Grid detail grids\n        const frameworkComponentWrapper = this.context.getBean('frameworkComponentWrapper');\n        const frameworkOverrides = this.getFrameworkOverrides();\n        // tslint:disable-next-line\n        new Grid(this.eDetailGrid, gridOptions, {\n            frameworkOverrides,\n            providedBeanInstances: {\n                agGridReact: agGridReactCloned,\n                frameworkComponentWrapper: frameworkComponentWrapper\n            }\n        });\n        this.detailApi = gridOptions.api;\n        this.ctrl.registerDetailWithMaster(gridOptions.api, gridOptions.columnApi);\n        this.addDestroyFunc(() => {\n            if (gridOptions.api) {\n                gridOptions.api.destroy();\n            }\n        });\n    }\n    setRowData(rowData) {\n        // ensure detail grid api still exists (grid may be destroyed when async call tries to set data)\n        this.detailApi && this.detailApi.setRowData(rowData);\n    }\n}\nDetailCellRenderer.TEMPLATE = `<div class=\"ag-details-row\" role=\"gridcell\">\n            <div ref=\"eDetailGrid\" class=\"ag-details-grid\" role=\"presentation\"></div>\n        </div>`;\n__decorate$D([\n    RefSelector('eDetailGrid')\n], DetailCellRenderer.prototype, \"eDetailGrid\", void 0);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$8 = '30.0.3';\n\nconst MasterDetailModule = {\n    version: VERSION$8,\n    moduleName: ModuleNames.MasterDetailModule,\n    beans: [],\n    userComponents: [\n        { componentName: 'agDetailCellRenderer', componentClass: DetailCellRenderer }\n    ],\n    controllers: [\n        { controllerName: 'detailCellRenderer', controllerClass: DetailCellRendererCtrl }\n    ],\n    dependantModules: [\n        EnterpriseCoreModule\n    ]\n};\n\nvar __decorate$C = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet EnterpriseMenuFactory = class EnterpriseMenuFactory extends BeanStub {\n    hideActiveMenu() {\n        this.destroyBean(this.activeMenu);\n    }\n    showMenuAfterMouseEvent(column, mouseEvent, defaultTab) {\n        this.showMenu(column, (menu) => {\n            const ePopup = menu.getGui();\n            this.popupService.positionPopupUnderMouseEvent({\n                type: 'columnMenu',\n                column,\n                mouseEvent,\n                ePopup\n            });\n            if (defaultTab) {\n                menu.showTab(defaultTab);\n            }\n        }, 'columnMenu', defaultTab, undefined, mouseEvent.target);\n    }\n    showMenuAfterButtonClick(column, eventSource, containerType, defaultTab, restrictToTabs) {\n        let multiplier = -1;\n        let alignSide = 'left';\n        if (this.gridOptionsService.is('enableRtl')) {\n            multiplier = 1;\n            alignSide = 'right';\n        }\n        this.showMenu(column, (menu) => {\n            const ePopup = menu.getGui();\n            this.popupService.positionPopupByComponent({\n                type: containerType,\n                column,\n                eventSource,\n                ePopup,\n                alignSide,\n                nudgeX: 9 * multiplier,\n                nudgeY: -23,\n                position: 'under',\n                keepWithinBounds: true,\n            });\n            if (defaultTab) {\n                menu.showTab(defaultTab);\n            }\n        }, containerType, defaultTab, restrictToTabs, eventSource);\n    }\n    showMenu(column, positionCallback, containerType, defaultTab, restrictToTabs, eventSource) {\n        const { menu, eMenuGui, currentHeaderPosition, currentColumnIndex, anchorToElement } = this.getMenuParams(column, restrictToTabs, eventSource);\n        const closedFuncs = [];\n        closedFuncs.push(this.getClosedCallback(column, menu, currentHeaderPosition, currentColumnIndex, eventSource));\n        const translate = this.localeService.getLocaleTextFunc();\n        // need to show filter before positioning, as only after filter\n        // is visible can we find out what the width of it is\n        this.popupService.addPopup({\n            modal: true,\n            eChild: eMenuGui,\n            closeOnEsc: true,\n            closedCallback: (e) => {\n                closedFuncs.forEach(f => f(e));\n            },\n            afterGuiAttached: params => menu.afterGuiAttached(Object.assign({}, { container: containerType }, params)),\n            // if defaultTab is not present, positionCallback will be called\n            // after `showTabBasedOnPreviousSelection` is called.\n            positionCallback: !!defaultTab ? () => positionCallback(menu) : undefined,\n            ariaLabel: translate('ariaLabelColumnMenu', 'Column Menu')\n        });\n        if (!defaultTab) {\n            menu.showTabBasedOnPreviousSelection();\n            // reposition the menu because the method above could load\n            // an element that is bigger than enterpriseMenu header.\n            positionCallback(menu);\n        }\n        // if user starts showing / hiding columns, or otherwise move the underlying column\n        // for this menu, we want to stop tracking the menu with the column position. otherwise\n        // the menu would move as the user is using the columns tab inside the menu.\n        const stopAnchoringPromise = this.popupService.setPopupPositionRelatedToElement(eMenuGui, anchorToElement);\n        if (stopAnchoringPromise) {\n            this.addStopAnchoring(stopAnchoringPromise, column, closedFuncs);\n        }\n        menu.addEventListener(EnterpriseMenu.EVENT_TAB_SELECTED, (event) => {\n            this.lastSelectedTab = event.key;\n        });\n        column.setMenuVisible(true, 'contextMenu');\n        this.activeMenu = menu;\n        menu.addEventListener(BeanStub.EVENT_DESTROYED, () => {\n            if (this.activeMenu === menu) {\n                this.activeMenu = null;\n            }\n        });\n    }\n    addStopAnchoring(stopAnchoringPromise, column, closedFuncsArr) {\n        stopAnchoringPromise.then((stopAnchoringFunc) => {\n            column.addEventListener('leftChanged', stopAnchoringFunc);\n            column.addEventListener('visibleChanged', stopAnchoringFunc);\n            closedFuncsArr.push(() => {\n                column.removeEventListener('leftChanged', stopAnchoringFunc);\n                column.removeEventListener('visibleChanged', stopAnchoringFunc);\n            });\n        });\n    }\n    getClosedCallback(column, menu, headerPosition, columnIndex, eventSource) {\n        return (e) => {\n            this.destroyBean(menu);\n            column.setMenuVisible(false, 'contextMenu');\n            const isKeyboardEvent = e instanceof KeyboardEvent;\n            if (!isKeyboardEvent || !eventSource) {\n                return;\n            }\n            if (_.isVisible(eventSource)) {\n                const focusableEl = this.focusService.findTabbableParent(eventSource);\n                if (focusableEl) {\n                    if (column) {\n                        this.headerNavigationService.scrollToColumn(column);\n                    }\n                    focusableEl.focus();\n                }\n            }\n            // if the focusEl is no longer in the DOM, we try to focus\n            // the header that is closest to the previous header position\n            else if (headerPosition && columnIndex !== -1) {\n                const allColumns = this.columnModel.getAllDisplayedColumns();\n                const columnToFocus = allColumns[columnIndex] || _.last(allColumns);\n                if (columnToFocus) {\n                    this.focusService.focusHeaderPosition({\n                        headerPosition: {\n                            headerRowIndex: headerPosition.headerRowIndex,\n                            column: columnToFocus\n                        }\n                    });\n                }\n            }\n        };\n    }\n    getMenuParams(column, restrictToTabs, eventSource) {\n        const menu = this.createBean(new EnterpriseMenu(column, this.lastSelectedTab, restrictToTabs));\n        return {\n            menu,\n            eMenuGui: menu.getGui(),\n            currentHeaderPosition: this.focusService.getFocusedHeader(),\n            currentColumnIndex: this.columnModel.getAllDisplayedColumns().indexOf(column),\n            anchorToElement: eventSource || this.ctrlsService.getGridBodyCtrl().getGui()\n        };\n    }\n    isMenuEnabled(column) {\n        return column.getMenuTabs(EnterpriseMenu.TABS_DEFAULT).length > 0;\n    }\n};\n__decorate$C([\n    Autowired('popupService')\n], EnterpriseMenuFactory.prototype, \"popupService\", void 0);\n__decorate$C([\n    Autowired('focusService')\n], EnterpriseMenuFactory.prototype, \"focusService\", void 0);\n__decorate$C([\n    Autowired('headerNavigationService')\n], EnterpriseMenuFactory.prototype, \"headerNavigationService\", void 0);\n__decorate$C([\n    Autowired('ctrlsService')\n], EnterpriseMenuFactory.prototype, \"ctrlsService\", void 0);\n__decorate$C([\n    Autowired('columnModel')\n], EnterpriseMenuFactory.prototype, \"columnModel\", void 0);\nEnterpriseMenuFactory = __decorate$C([\n    Bean('menuFactory')\n], EnterpriseMenuFactory);\nclass EnterpriseMenu extends BeanStub {\n    constructor(column, initialSelection, restrictTo) {\n        super();\n        this.tabFactories = {};\n        this.includeChecks = {};\n        this.column = column;\n        this.initialSelection = initialSelection;\n        this.tabFactories[EnterpriseMenu.TAB_GENERAL] = this.createMainPanel.bind(this);\n        this.tabFactories[EnterpriseMenu.TAB_FILTER] = this.createFilterPanel.bind(this);\n        this.tabFactories[EnterpriseMenu.TAB_COLUMNS] = this.createColumnsPanel.bind(this);\n        this.includeChecks[EnterpriseMenu.TAB_GENERAL] = () => true;\n        this.includeChecks[EnterpriseMenu.TAB_FILTER] = () => this.filterManager.isFilterAllowed(column);\n        this.includeChecks[EnterpriseMenu.TAB_COLUMNS] = () => true;\n        this.restrictTo = restrictTo;\n    }\n    init() {\n        const tabs = this.getTabsToCreate().map(name => this.createTab(name));\n        this.tabbedLayout = new TabbedLayout({\n            items: tabs,\n            cssClass: 'ag-menu',\n            onActiveItemClicked: this.onHidePopup.bind(this),\n            onItemClicked: this.onTabItemClicked.bind(this)\n        });\n        this.createBean(this.tabbedLayout);\n        if (this.mainMenuList) {\n            this.mainMenuList.setParentComponent(this.tabbedLayout);\n        }\n        this.addDestroyFunc(() => this.destroyBean(this.tabbedLayout));\n    }\n    getTabsToCreate() {\n        if (this.restrictTo) {\n            return this.restrictTo;\n        }\n        return this.column.getMenuTabs(EnterpriseMenu.TABS_DEFAULT)\n            .filter(tabName => this.isValidMenuTabItem(tabName))\n            .filter(tabName => this.isNotSuppressed(tabName))\n            .filter(tabName => this.isModuleLoaded(tabName));\n    }\n    isModuleLoaded(menuTabName) {\n        if (menuTabName === EnterpriseMenu.TAB_COLUMNS) {\n            return ModuleRegistry.isRegistered(ModuleNames.ColumnsToolPanelModule, this.context.getGridId());\n        }\n        return true;\n    }\n    isValidMenuTabItem(menuTabName) {\n        let isValid = true;\n        let itemsToConsider = EnterpriseMenu.TABS_DEFAULT;\n        if (this.restrictTo != null) {\n            isValid = this.restrictTo.indexOf(menuTabName) > -1;\n            itemsToConsider = this.restrictTo;\n        }\n        isValid = isValid && EnterpriseMenu.TABS_DEFAULT.indexOf(menuTabName) > -1;\n        if (!isValid) {\n            console.warn(`AG Grid: Trying to render an invalid menu item '${menuTabName}'. Check that your 'menuTabs' contains one of [${itemsToConsider}]`);\n        }\n        return isValid;\n    }\n    isNotSuppressed(menuTabName) {\n        return this.includeChecks[menuTabName]();\n    }\n    createTab(name) {\n        return this.tabFactories[name]();\n    }\n    showTabBasedOnPreviousSelection() {\n        // show the tab the user was on last time they had a menu open\n        this.showTab(this.initialSelection);\n    }\n    showTab(toShow) {\n        if (this.tabItemColumns && toShow === EnterpriseMenu.TAB_COLUMNS) {\n            this.tabbedLayout.showItem(this.tabItemColumns);\n        }\n        else if (this.tabItemFilter && toShow === EnterpriseMenu.TAB_FILTER) {\n            this.tabbedLayout.showItem(this.tabItemFilter);\n        }\n        else if (this.tabItemGeneral && toShow === EnterpriseMenu.TAB_GENERAL) {\n            this.tabbedLayout.showItem(this.tabItemGeneral);\n        }\n        else {\n            this.tabbedLayout.showFirstItem();\n        }\n    }\n    onTabItemClicked(event) {\n        let key = null;\n        switch (event.item) {\n            case this.tabItemColumns:\n                key = EnterpriseMenu.TAB_COLUMNS;\n                break;\n            case this.tabItemFilter:\n                key = EnterpriseMenu.TAB_FILTER;\n                break;\n            case this.tabItemGeneral:\n                key = EnterpriseMenu.TAB_GENERAL;\n                break;\n        }\n        if (key) {\n            this.activateTab(key);\n        }\n    }\n    activateTab(tab) {\n        const ev = {\n            type: EnterpriseMenu.EVENT_TAB_SELECTED,\n            key: tab\n        };\n        this.dispatchEvent(ev);\n    }\n    getMenuItems() {\n        const defaultMenuOptions = this.getDefaultMenuOptions();\n        let result;\n        const userFunc = this.gridOptionsService.getCallback('getMainMenuItems');\n        if (userFunc) {\n            result = userFunc({\n                column: this.column,\n                defaultItems: defaultMenuOptions\n            });\n        }\n        else {\n            result = defaultMenuOptions;\n        }\n        // GUI looks weird when two separators are side by side. this can happen accidentally\n        // if we remove items from the menu then two separators can edit up adjacent.\n        _.removeRepeatsFromArray(result, EnterpriseMenu.MENU_ITEM_SEPARATOR);\n        return result;\n    }\n    getDefaultMenuOptions() {\n        const result = [];\n        const allowPinning = !this.column.getColDef().lockPinned;\n        const rowGroupCount = this.columnModel.getRowGroupColumns().length;\n        const doingGrouping = rowGroupCount > 0;\n        const groupedByThisColumn = this.columnModel.getRowGroupColumns().indexOf(this.column) >= 0;\n        const allowValue = this.column.isAllowValue();\n        const allowRowGroup = this.column.isAllowRowGroup();\n        const isPrimary = this.column.isPrimary();\n        const pivotModeOn = this.columnModel.isPivotMode();\n        const isInMemoryRowModel = this.rowModel.getType() === 'clientSide';\n        const usingTreeData = this.gridOptionsService.isTreeData();\n        const allowValueAgg = \n        // if primary, then only allow aggValue if grouping and it's a value columns\n        (isPrimary && doingGrouping && allowValue)\n            // secondary columns can always have aggValue, as it means it's a pivot value column\n            || !isPrimary;\n        if (allowPinning) {\n            result.push('pinSubMenu');\n        }\n        if (allowValueAgg) {\n            result.push('valueAggSubMenu');\n        }\n        if (allowPinning || allowValueAgg) {\n            result.push(EnterpriseMenu.MENU_ITEM_SEPARATOR);\n        }\n        result.push('autoSizeThis');\n        result.push('autoSizeAll');\n        result.push(EnterpriseMenu.MENU_ITEM_SEPARATOR);\n        if (allowRowGroup && this.column.isPrimary()) {\n            if (groupedByThisColumn) {\n                result.push('rowUnGroup');\n            }\n            else {\n                result.push('rowGroup');\n            }\n        }\n        result.push(EnterpriseMenu.MENU_ITEM_SEPARATOR);\n        result.push('resetColumns');\n        // only add grouping expand/collapse if grouping in the InMemoryRowModel\n        // if pivoting, we only have expandable groups if grouping by 2 or more columns\n        // as the lowest level group is not expandable while pivoting.\n        // if not pivoting, then any active row group can be expanded.\n        const allowExpandAndContract = isInMemoryRowModel && (usingTreeData || rowGroupCount > (pivotModeOn ? 1 : 0));\n        if (allowExpandAndContract) {\n            result.push('expandAll');\n            result.push('contractAll');\n        }\n        return result;\n    }\n    createMainPanel() {\n        this.mainMenuList = this.createManagedBean(new AgMenuList());\n        const menuItems = this.getMenuItems();\n        const menuItemsMapped = this.menuItemMapper.mapWithStockItems(menuItems, this.column);\n        this.mainMenuList.addMenuItems(menuItemsMapped);\n        this.mainMenuList.addEventListener(AgMenuItemComponent.EVENT_MENU_ITEM_SELECTED, this.onHidePopup.bind(this));\n        this.tabItemGeneral = {\n            title: _.createIconNoSpan('menu', this.gridOptionsService, this.column),\n            titleLabel: EnterpriseMenu.TAB_GENERAL.replace('MenuTab', ''),\n            bodyPromise: AgPromise.resolve(this.mainMenuList.getGui()),\n            name: EnterpriseMenu.TAB_GENERAL\n        };\n        return this.tabItemGeneral;\n    }\n    onHidePopup(event) {\n        let keyboardEvent;\n        if (event && event.event && event.event instanceof KeyboardEvent) {\n            keyboardEvent = event.event;\n        }\n        this.hidePopupFunc(keyboardEvent && { keyboardEvent: keyboardEvent });\n        // this method only gets called when the menu was closed by selection an option\n        // in this case we highlight the cell that was previously highlighted\n        const focusedCell = this.focusService.getFocusedCell();\n        const eDocument = this.gridOptionsService.getDocument();\n        if (eDocument.activeElement === eDocument.body && focusedCell) {\n            const { rowIndex, rowPinned, column } = focusedCell;\n            this.focusService.setFocusedCell({ rowIndex, column, rowPinned, forceBrowserFocus: true, preventScrollOnBrowserFocus: true });\n        }\n    }\n    createFilterPanel() {\n        const filterWrapper = this.filterManager.getOrCreateFilterWrapper(this.column, 'COLUMN_MENU');\n        if (!filterWrapper) {\n            throw new Error('AG Grid - Unable to instantiate filter');\n        }\n        const afterFilterAttachedCallback = (params) => {\n            if (!(filterWrapper === null || filterWrapper === void 0 ? void 0 : filterWrapper.filterPromise)) {\n                return;\n            }\n            // slightly odd block this - this promise will always have been resolved by the time it gets here, so won't be\n            // async (_unless_ in react or similar, but if so why not encountered before now?).\n            // I'd suggest a future improvement would be to remove/replace this promise as this block just wont work if it is\n            // async and is confusing if you don't have this context\n            filterWrapper.filterPromise.then(filter => {\n                if (filter && filter.afterGuiAttached) {\n                    filter.afterGuiAttached(params);\n                }\n            });\n        };\n        // see comment above\n        const afterDetachedCallback = () => { var _a; return (_a = filterWrapper === null || filterWrapper === void 0 ? void 0 : filterWrapper.filterPromise) === null || _a === void 0 ? void 0 : _a.then(filter => { var _a; return (_a = filter === null || filter === void 0 ? void 0 : filter.afterGuiDetached) === null || _a === void 0 ? void 0 : _a.call(filter); }); };\n        this.tabItemFilter = {\n            title: _.createIconNoSpan('filter', this.gridOptionsService, this.column),\n            titleLabel: EnterpriseMenu.TAB_FILTER.replace('MenuTab', ''),\n            bodyPromise: filterWrapper === null || filterWrapper === void 0 ? void 0 : filterWrapper.guiPromise,\n            afterAttachedCallback: afterFilterAttachedCallback,\n            afterDetachedCallback,\n            name: EnterpriseMenu.TAB_FILTER\n        };\n        return this.tabItemFilter;\n    }\n    createColumnsPanel() {\n        const eWrapperDiv = document.createElement('div');\n        eWrapperDiv.classList.add('ag-menu-column-select-wrapper');\n        const columnSelectPanel = this.createManagedBean(new PrimaryColsPanel());\n        let columnsMenuParams = this.column.getColDef().columnsMenuParams;\n        if (!columnsMenuParams) {\n            columnsMenuParams = {};\n        }\n        const { contractColumnSelection, suppressColumnExpandAll, suppressColumnFilter, suppressColumnSelectAll, suppressSyncLayoutWithGrid, columnLayout } = columnsMenuParams;\n        columnSelectPanel.init(false, {\n            suppressColumnMove: false,\n            suppressValues: false,\n            suppressPivots: false,\n            suppressRowGroups: false,\n            suppressPivotMode: false,\n            contractColumnSelection: !!contractColumnSelection,\n            suppressColumnExpandAll: !!suppressColumnExpandAll,\n            suppressColumnFilter: !!suppressColumnFilter,\n            suppressColumnSelectAll: !!suppressColumnSelectAll,\n            suppressSyncLayoutWithGrid: !!columnLayout || !!suppressSyncLayoutWithGrid,\n            api: this.gridApi,\n            columnApi: this.columnApi,\n            context: this.gridOptionsService.context\n        }, 'columnMenu');\n        if (columnLayout) {\n            columnSelectPanel.setColumnLayout(columnLayout);\n        }\n        const columnSelectPanelGui = columnSelectPanel.getGui();\n        columnSelectPanelGui.classList.add('ag-menu-column-select');\n        eWrapperDiv.appendChild(columnSelectPanelGui);\n        this.tabItemColumns = {\n            title: _.createIconNoSpan('columns', this.gridOptionsService, this.column),\n            titleLabel: EnterpriseMenu.TAB_COLUMNS.replace('MenuTab', ''),\n            bodyPromise: AgPromise.resolve(eWrapperDiv),\n            name: EnterpriseMenu.TAB_COLUMNS\n        };\n        return this.tabItemColumns;\n    }\n    afterGuiAttached(params) {\n        const { container, hidePopup } = params;\n        this.tabbedLayout.setAfterAttachedParams({ container, hidePopup });\n        if (hidePopup) {\n            this.hidePopupFunc = hidePopup;\n            this.addDestroyFunc(hidePopup);\n        }\n    }\n    getGui() {\n        return this.tabbedLayout.getGui();\n    }\n}\nEnterpriseMenu.EVENT_TAB_SELECTED = 'tabSelected';\nEnterpriseMenu.TAB_FILTER = 'filterMenuTab';\nEnterpriseMenu.TAB_GENERAL = 'generalMenuTab';\nEnterpriseMenu.TAB_COLUMNS = 'columnsMenuTab';\nEnterpriseMenu.TABS_DEFAULT = [EnterpriseMenu.TAB_GENERAL, EnterpriseMenu.TAB_FILTER, EnterpriseMenu.TAB_COLUMNS];\nEnterpriseMenu.MENU_ITEM_SEPARATOR = 'separator';\n__decorate$C([\n    Autowired('columnModel')\n], EnterpriseMenu.prototype, \"columnModel\", void 0);\n__decorate$C([\n    Autowired('filterManager')\n], EnterpriseMenu.prototype, \"filterManager\", void 0);\n__decorate$C([\n    Autowired('gridApi')\n], EnterpriseMenu.prototype, \"gridApi\", void 0);\n__decorate$C([\n    Autowired('columnApi')\n], EnterpriseMenu.prototype, \"columnApi\", void 0);\n__decorate$C([\n    Autowired('menuItemMapper')\n], EnterpriseMenu.prototype, \"menuItemMapper\", void 0);\n__decorate$C([\n    Autowired('rowModel')\n], EnterpriseMenu.prototype, \"rowModel\", void 0);\n__decorate$C([\n    Autowired('focusService')\n], EnterpriseMenu.prototype, \"focusService\", void 0);\n__decorate$C([\n    PostConstruct\n], EnterpriseMenu.prototype, \"init\", null);\n\nvar __decorate$B = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst CSS_MENU = 'ag-menu';\nconst CSS_CONTEXT_MENU_OPEN = 'ag-context-menu-open';\nlet ContextMenuFactory = class ContextMenuFactory extends BeanStub {\n    hideActiveMenu() {\n        this.destroyBean(this.activeMenu);\n    }\n    getMenuItems(node, column, value) {\n        const defaultMenuOptions = [];\n        if (_.exists(node) && ModuleRegistry.isRegistered(ModuleNames.ClipboardModule, this.context.getGridId())) {\n            if (column) {\n                // only makes sense if column exists, could have originated from a row\n                if (!this.gridOptionsService.is('suppressCutToClipboard')) {\n                    defaultMenuOptions.push('cut');\n                }\n                defaultMenuOptions.push('copy', 'copyWithHeaders', 'copyWithGroupHeaders', 'paste', 'separator');\n            }\n        }\n        if (this.gridOptionsService.is('enableCharts') && ModuleRegistry.isRegistered(ModuleNames.GridChartsModule, this.context.getGridId())) {\n            if (this.columnModel.isPivotMode()) {\n                defaultMenuOptions.push('pivotChart');\n            }\n            if (this.rangeService && !this.rangeService.isEmpty()) {\n                defaultMenuOptions.push('chartRange');\n            }\n        }\n        if (_.exists(node)) {\n            // if user clicks a cell\n            const csvModuleMissing = !ModuleRegistry.isRegistered(ModuleNames.CsvExportModule, this.context.getGridId());\n            const excelModuleMissing = !ModuleRegistry.isRegistered(ModuleNames.ExcelExportModule, this.context.getGridId());\n            const suppressExcel = this.gridOptionsService.is('suppressExcelExport') || excelModuleMissing;\n            const suppressCsv = this.gridOptionsService.is('suppressCsvExport') || csvModuleMissing;\n            const onIPad = _.isIOSUserAgent();\n            const anyExport = !onIPad && (!suppressExcel || !suppressCsv);\n            if (anyExport) {\n                defaultMenuOptions.push('export');\n            }\n        }\n        const userFunc = this.gridOptionsService.getCallback('getContextMenuItems');\n        if (userFunc) {\n            const params = {\n                node: node,\n                column: column,\n                value: value,\n                defaultItems: defaultMenuOptions.length ? defaultMenuOptions : undefined,\n            };\n            return userFunc(params);\n        }\n        return defaultMenuOptions;\n    }\n    onContextMenu(mouseEvent, touchEvent, rowNode, column, value, anchorToElement) {\n        // to allow us to debug in chrome, we ignore the event if ctrl is pressed.\n        // not everyone wants this, so first 'if' below allows to turn this hack off.\n        if (!this.gridOptionsService.is('allowContextMenuWithControlKey')) {\n            // then do the check\n            if (mouseEvent && (mouseEvent.ctrlKey || mouseEvent.metaKey)) {\n                return;\n            }\n        }\n        // need to do this regardless of context menu showing or not, so doing\n        // before the isSuppressContextMenu() check\n        if (mouseEvent) {\n            this.blockMiddleClickScrollsIfNeeded(mouseEvent);\n        }\n        if (this.gridOptionsService.is('suppressContextMenu')) {\n            return;\n        }\n        const eventOrTouch = mouseEvent ? mouseEvent : touchEvent.touches[0];\n        if (this.showMenu(rowNode, column, value, eventOrTouch, anchorToElement)) {\n            const event = mouseEvent ? mouseEvent : touchEvent;\n            event.preventDefault();\n        }\n    }\n    blockMiddleClickScrollsIfNeeded(mouseEvent) {\n        // if we don't do this, then middle click will never result in a 'click' event, as 'mousedown'\n        // will be consumed by the browser to mean 'scroll' (as you can scroll with the middle mouse\n        // button in the browser). so this property allows the user to receive middle button clicks if\n        // they want.\n        const { gridOptionsService } = this;\n        const { which } = mouseEvent;\n        if (gridOptionsService.is('suppressMiddleClickScrolls') && which === 2) {\n            mouseEvent.preventDefault();\n        }\n    }\n    showMenu(node, column, value, mouseEvent, anchorToElement) {\n        const menuItems = this.getMenuItems(node, column, value);\n        const eGridBodyGui = this.ctrlsService.getGridBodyCtrl().getGui();\n        if (menuItems === undefined || _.missingOrEmpty(menuItems)) {\n            return false;\n        }\n        const menu = new ContextMenu(menuItems);\n        this.createBean(menu);\n        const eMenuGui = menu.getGui();\n        const positionParams = {\n            column: column,\n            rowNode: node,\n            type: 'contextMenu',\n            mouseEvent: mouseEvent,\n            ePopup: eMenuGui,\n            // move one pixel away so that accidentally double clicking\n            // won't show the browser's contextmenu\n            nudgeY: 1\n        };\n        const translate = this.localeService.getLocaleTextFunc();\n        const addPopupRes = this.popupService.addPopup({\n            modal: true,\n            eChild: eMenuGui,\n            closeOnEsc: true,\n            closedCallback: () => {\n                eGridBodyGui.classList.remove(CSS_CONTEXT_MENU_OPEN);\n                this.destroyBean(menu);\n            },\n            click: mouseEvent,\n            positionCallback: () => {\n                const isRtl = this.gridOptionsService.is('enableRtl');\n                this.popupService.positionPopupUnderMouseEvent(Object.assign(Object.assign({}, positionParams), { nudgeX: isRtl ? (eMenuGui.offsetWidth + 1) * -1 : 1 }));\n            },\n            // so when browser is scrolled down, or grid is scrolled, context menu stays with cell\n            anchorToElement: anchorToElement,\n            ariaLabel: translate('ariaLabelContextMenu', 'Context Menu')\n        });\n        if (addPopupRes) {\n            eGridBodyGui.classList.add(CSS_CONTEXT_MENU_OPEN);\n            menu.afterGuiAttached({ container: 'contextMenu', hidePopup: addPopupRes.hideFunc });\n        }\n        // there should never be an active menu at this point, however it was found\n        // that you could right click a second time just 1 or 2 pixels from the first\n        // click, and another menu would pop up. so somehow the logic for closing the\n        // first menu (clicking outside should close it) was glitchy somehow. an easy\n        // way to avoid this is just remove the old context menu here if it exists.\n        if (this.activeMenu) {\n            this.hideActiveMenu();\n        }\n        this.activeMenu = menu;\n        menu.addEventListener(BeanStub.EVENT_DESTROYED, () => {\n            if (this.activeMenu === menu) {\n                this.activeMenu = null;\n            }\n        });\n        // hide the popup if something gets selected\n        if (addPopupRes) {\n            menu.addEventListener(AgMenuItemComponent.EVENT_MENU_ITEM_SELECTED, addPopupRes.hideFunc);\n        }\n        return true;\n    }\n};\n__decorate$B([\n    Autowired('popupService')\n], ContextMenuFactory.prototype, \"popupService\", void 0);\n__decorate$B([\n    Optional('rangeService')\n], ContextMenuFactory.prototype, \"rangeService\", void 0);\n__decorate$B([\n    Autowired('ctrlsService')\n], ContextMenuFactory.prototype, \"ctrlsService\", void 0);\n__decorate$B([\n    Autowired('columnModel')\n], ContextMenuFactory.prototype, \"columnModel\", void 0);\nContextMenuFactory = __decorate$B([\n    Bean('contextMenuFactory')\n], ContextMenuFactory);\nclass ContextMenu extends Component {\n    constructor(menuItems) {\n        super(/* html */ `<div class=\"${CSS_MENU}\" role=\"presentation\"></div>`);\n        this.menuList = null;\n        this.focusedCell = null;\n        this.menuItems = menuItems;\n    }\n    addMenuItems() {\n        const menuList = this.createManagedBean(new AgMenuList());\n        const menuItemsMapped = this.menuItemMapper.mapWithStockItems(this.menuItems, null);\n        menuList.addMenuItems(menuItemsMapped);\n        this.appendChild(menuList);\n        this.menuList = menuList;\n        menuList.addEventListener(AgMenuItemComponent.EVENT_MENU_ITEM_SELECTED, (e) => this.dispatchEvent(e));\n    }\n    afterGuiAttached(params) {\n        if (params.hidePopup) {\n            this.addDestroyFunc(params.hidePopup);\n        }\n        this.focusedCell = this.focusService.getFocusedCell();\n        if (this.menuList) {\n            this.focusService.focusInto(this.menuList.getGui());\n        }\n    }\n    restoreFocusedCell() {\n        const currentFocusedCell = this.focusService.getFocusedCell();\n        if (currentFocusedCell && this.focusedCell && this.cellPositionUtils.equals(currentFocusedCell, this.focusedCell)) {\n            const { rowIndex, rowPinned, column } = this.focusedCell;\n            const doc = this.gridOptionsService.getDocument();\n            if (doc.activeElement === doc.body) {\n                this.focusService.setFocusedCell({ rowIndex, column, rowPinned, forceBrowserFocus: true });\n            }\n        }\n    }\n    destroy() {\n        this.restoreFocusedCell();\n        super.destroy();\n    }\n}\n__decorate$B([\n    Autowired('menuItemMapper')\n], ContextMenu.prototype, \"menuItemMapper\", void 0);\n__decorate$B([\n    Autowired('focusService')\n], ContextMenu.prototype, \"focusService\", void 0);\n__decorate$B([\n    Autowired('cellPositionUtils')\n], ContextMenu.prototype, \"cellPositionUtils\", void 0);\n__decorate$B([\n    PostConstruct\n], ContextMenu.prototype, \"addMenuItems\", null);\n\nvar __decorate$A = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet MenuItemMapper = class MenuItemMapper extends BeanStub {\n    mapWithStockItems(originalList, column) {\n        if (!originalList) {\n            return [];\n        }\n        const resultList = [];\n        originalList.forEach(menuItemOrString => {\n            let result;\n            if (typeof menuItemOrString === 'string') {\n                result = this.getStockMenuItem(menuItemOrString, column);\n            }\n            else {\n                // Spread to prevent leaking mapped subMenus back into the original menuItem\n                result = Object.assign({}, menuItemOrString);\n            }\n            // if no mapping, can happen when module is not loaded but user tries to use module anyway\n            if (!result) {\n                return;\n            }\n            const resultDef = result;\n            const { subMenu } = resultDef;\n            if (subMenu && subMenu instanceof Array) {\n                resultDef.subMenu = this.mapWithStockItems(subMenu, column);\n            }\n            if (result != null) {\n                resultList.push(result);\n            }\n        });\n        return resultList;\n    }\n    getStockMenuItem(key, column) {\n        var _a;\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        const skipHeaderOnAutoSize = this.gridOptionsService.is('skipHeaderOnAutoSize');\n        switch (key) {\n            case 'pinSubMenu':\n                return {\n                    name: localeTextFunc('pinColumn', 'Pin Column'),\n                    icon: _.createIconNoSpan('menuPin', this.gridOptionsService, null),\n                    subMenu: ['clearPinned', 'pinLeft', 'pinRight']\n                };\n            case 'pinLeft':\n                return {\n                    name: localeTextFunc('pinLeft', 'Pin Left'),\n                    action: () => this.columnModel.setColumnPinned(column, 'left', \"contextMenu\"),\n                    checked: !!column && column.isPinnedLeft()\n                };\n            case 'pinRight':\n                return {\n                    name: localeTextFunc('pinRight', 'Pin Right'),\n                    action: () => this.columnModel.setColumnPinned(column, 'right', \"contextMenu\"),\n                    checked: !!column && column.isPinnedRight()\n                };\n            case 'clearPinned':\n                return {\n                    name: localeTextFunc('noPin', 'No Pin'),\n                    action: () => this.columnModel.setColumnPinned(column, null, \"contextMenu\"),\n                    checked: !!column && !column.isPinned()\n                };\n            case 'valueAggSubMenu':\n                if (ModuleRegistry.assertRegistered(ModuleNames.RowGroupingModule, 'Aggregation from Menu', this.context.getGridId())) {\n                    if (!(column === null || column === void 0 ? void 0 : column.isPrimary()) && !(column === null || column === void 0 ? void 0 : column.getColDef().pivotValueColumn)) {\n                        return null;\n                    }\n                    return {\n                        name: localeTextFunc('valueAggregation', 'Value Aggregation'),\n                        icon: _.createIconNoSpan('menuValue', this.gridOptionsService, null),\n                        subMenu: this.createAggregationSubMenu(column)\n                    };\n                }\n                else {\n                    return null;\n                }\n            case 'autoSizeThis':\n                return {\n                    name: localeTextFunc('autosizeThiscolumn', 'Autosize This Column'),\n                    action: () => this.columnModel.autoSizeColumn(column, skipHeaderOnAutoSize, \"contextMenu\")\n                };\n            case 'autoSizeAll':\n                return {\n                    name: localeTextFunc('autosizeAllColumns', 'Autosize All Columns'),\n                    action: () => this.columnModel.autoSizeAllColumns(skipHeaderOnAutoSize, \"contextMenu\")\n                };\n            case 'rowGroup':\n                return {\n                    name: localeTextFunc('groupBy', 'Group by') + ' ' + _.escapeString(this.columnModel.getDisplayNameForColumn(column, 'header')),\n                    disabled: (column === null || column === void 0 ? void 0 : column.isRowGroupActive()) || !(column === null || column === void 0 ? void 0 : column.getColDef().enableRowGroup),\n                    action: () => this.columnModel.addRowGroupColumn(column, \"contextMenu\"),\n                    icon: _.createIconNoSpan('menuAddRowGroup', this.gridOptionsService, null)\n                };\n            case 'rowUnGroup':\n                return {\n                    name: localeTextFunc('ungroupBy', 'Un-Group by') + ' ' + _.escapeString(this.columnModel.getDisplayNameForColumn(column, 'header')),\n                    disabled: !(column === null || column === void 0 ? void 0 : column.isRowGroupActive()) || !(column === null || column === void 0 ? void 0 : column.getColDef().enableRowGroup),\n                    action: () => this.columnModel.removeRowGroupColumn(column, \"contextMenu\"),\n                    icon: _.createIconNoSpan('menuRemoveRowGroup', this.gridOptionsService, null)\n                };\n            case 'resetColumns':\n                return {\n                    name: localeTextFunc('resetColumns', 'Reset Columns'),\n                    action: () => this.columnModel.resetColumnState(\"contextMenu\")\n                };\n            case 'expandAll':\n                return {\n                    name: localeTextFunc('expandAll', 'Expand All Row Groups'),\n                    action: () => this.gridApi.expandAll()\n                };\n            case 'contractAll':\n                return {\n                    name: localeTextFunc('collapseAll', 'Collapse All Row Groups'),\n                    action: () => this.gridApi.collapseAll()\n                };\n            case 'copy':\n                if (ModuleRegistry.assertRegistered(ModuleNames.ClipboardModule, 'Copy from Menu', this.context.getGridId())) {\n                    return {\n                        name: localeTextFunc('copy', 'Copy'),\n                        shortcut: localeTextFunc('ctrlC', 'Ctrl+C'),\n                        icon: _.createIconNoSpan('clipboardCopy', this.gridOptionsService, null),\n                        action: () => this.clipboardService.copyToClipboard()\n                    };\n                }\n                else {\n                    return null;\n                }\n            case 'copyWithHeaders':\n                if (ModuleRegistry.assertRegistered(ModuleNames.ClipboardModule, 'Copy with Headers from Menu', this.context.getGridId())) {\n                    return {\n                        name: localeTextFunc('copyWithHeaders', 'Copy with Headers'),\n                        // shortcut: localeTextFunc('ctrlC','Ctrl+C'),\n                        icon: _.createIconNoSpan('clipboardCopy', this.gridOptionsService, null),\n                        action: () => this.clipboardService.copyToClipboard({ includeHeaders: true })\n                    };\n                }\n                else {\n                    return null;\n                }\n            case 'copyWithGroupHeaders':\n                if (ModuleRegistry.assertRegistered(ModuleNames.ClipboardModule, 'Copy with Group Headers from Menu', this.context.getGridId())) {\n                    return {\n                        name: localeTextFunc('copyWithGroupHeaders', 'Copy with Group Headers'),\n                        // shortcut: localeTextFunc('ctrlC','Ctrl+C'),\n                        icon: _.createIconNoSpan('clipboardCopy', this.gridOptionsService, null),\n                        action: () => this.clipboardService.copyToClipboard({ includeHeaders: true, includeGroupHeaders: true })\n                    };\n                }\n                else {\n                    return null;\n                }\n            case 'cut':\n                if (ModuleRegistry.assertRegistered(ModuleNames.ClipboardModule, 'Cut from Menu', this.context.getGridId())) {\n                    const focusedCell = this.focusService.getFocusedCell();\n                    const rowNode = focusedCell ? this.rowPositionUtils.getRowNode(focusedCell) : null;\n                    const isEditable = rowNode ? focusedCell === null || focusedCell === void 0 ? void 0 : focusedCell.column.isCellEditable(rowNode) : false;\n                    return {\n                        name: localeTextFunc('cut', 'Cut'),\n                        shortcut: localeTextFunc('ctrlX', 'Ctrl+X'),\n                        icon: _.createIconNoSpan('clipboardCut', this.gridOptionsService, null),\n                        disabled: !isEditable || this.gridOptionsService.is('suppressCutToClipboard'),\n                        action: () => this.clipboardService.cutToClipboard(undefined, 'contextMenu')\n                    };\n                }\n                else {\n                    return null;\n                }\n            case 'paste':\n                if (ModuleRegistry.assertRegistered(ModuleNames.ClipboardModule, 'Paste from Clipboard', this.context.getGridId())) {\n                    return {\n                        name: localeTextFunc('paste', 'Paste'),\n                        shortcut: localeTextFunc('ctrlV', 'Ctrl+V'),\n                        disabled: true,\n                        icon: _.createIconNoSpan('clipboardPaste', this.gridOptionsService, null),\n                        action: () => this.clipboardService.pasteFromClipboard()\n                    };\n                }\n                else {\n                    return null;\n                }\n            case 'export':\n                const exportSubMenuItems = [];\n                const csvModuleLoaded = ModuleRegistry.isRegistered(ModuleNames.CsvExportModule, this.context.getGridId());\n                const excelModuleLoaded = ModuleRegistry.isRegistered(ModuleNames.ExcelExportModule, this.context.getGridId());\n                if (!this.gridOptionsService.is('suppressCsvExport') && csvModuleLoaded) {\n                    exportSubMenuItems.push('csvExport');\n                }\n                if (!this.gridOptionsService.is('suppressExcelExport') && excelModuleLoaded) {\n                    exportSubMenuItems.push('excelExport');\n                }\n                return {\n                    name: localeTextFunc('export', 'Export'),\n                    subMenu: exportSubMenuItems,\n                    icon: _.createIconNoSpan('save', this.gridOptionsService, null),\n                };\n            case 'csvExport':\n                return {\n                    name: localeTextFunc('csvExport', 'CSV Export'),\n                    icon: _.createIconNoSpan('csvExport', this.gridOptionsService, null),\n                    action: () => this.gridApi.exportDataAsCsv({})\n                };\n            case 'excelExport':\n                return {\n                    name: localeTextFunc('excelExport', 'Excel Export'),\n                    icon: _.createIconNoSpan('excelExport', this.gridOptionsService, null),\n                    action: () => this.gridApi.exportDataAsExcel()\n                };\n            case 'separator':\n                return 'separator';\n            case 'pivotChart':\n            case 'chartRange':\n                return (_a = this.chartMenuItemMapper.getChartItems(key)) !== null && _a !== void 0 ? _a : null;\n            default: {\n                console.warn(`AG Grid: unknown menu item type ${key}`);\n                return null;\n            }\n        }\n    }\n    createAggregationSubMenu(column) {\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        let columnToUse;\n        if (column.isPrimary()) {\n            columnToUse = column;\n        }\n        else {\n            const pivotValueColumn = column.getColDef().pivotValueColumn;\n            columnToUse = _.exists(pivotValueColumn) ? pivotValueColumn : undefined;\n        }\n        const result = [];\n        if (columnToUse) {\n            const columnIsAlreadyAggValue = columnToUse.isValueActive();\n            const funcNames = this.aggFuncService.getFuncNames(columnToUse);\n            result.push({\n                name: localeTextFunc('noAggregation', 'None'),\n                action: () => {\n                    this.columnModel.removeValueColumn(columnToUse, \"contextMenu\");\n                    this.columnModel.setColumnAggFunc(columnToUse, undefined, \"contextMenu\");\n                },\n                checked: !columnIsAlreadyAggValue\n            });\n            funcNames.forEach(funcName => {\n                result.push({\n                    name: localeTextFunc(funcName, _.capitalise(funcName)),\n                    action: () => {\n                        this.columnModel.setColumnAggFunc(columnToUse, funcName, \"contextMenu\");\n                        this.columnModel.addValueColumn(columnToUse, \"contextMenu\");\n                    },\n                    checked: columnIsAlreadyAggValue && columnToUse.getAggFunc() === funcName\n                });\n            });\n        }\n        return result;\n    }\n};\n__decorate$A([\n    Autowired('columnModel')\n], MenuItemMapper.prototype, \"columnModel\", void 0);\n__decorate$A([\n    Autowired('gridApi')\n], MenuItemMapper.prototype, \"gridApi\", void 0);\n__decorate$A([\n    Optional('clipboardService')\n], MenuItemMapper.prototype, \"clipboardService\", void 0);\n__decorate$A([\n    Optional('aggFuncService')\n], MenuItemMapper.prototype, \"aggFuncService\", void 0);\n__decorate$A([\n    Autowired('focusService')\n], MenuItemMapper.prototype, \"focusService\", void 0);\n__decorate$A([\n    Autowired('rowPositionUtils')\n], MenuItemMapper.prototype, \"rowPositionUtils\", void 0);\n__decorate$A([\n    Autowired('chartMenuItemMapper')\n], MenuItemMapper.prototype, \"chartMenuItemMapper\", void 0);\nMenuItemMapper = __decorate$A([\n    Bean('menuItemMapper')\n], MenuItemMapper);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$7 = '30.0.3';\n\nvar __decorate$z = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar ChartMenuItemMapper_1;\nlet ChartMenuItemMapper = ChartMenuItemMapper_1 = class ChartMenuItemMapper extends BeanStub {\n    getChartItems(key) {\n        var _a, _b;\n        if (!this.chartService) {\n            ModuleRegistry.assertRegistered(ModuleNames.GridChartsModule, `the Context Menu key \"${key}\"`, this.context.getGridId());\n            return undefined;\n        }\n        const builder = key === 'pivotChart'\n            ? new PivotMenuItemMapper(this.gridOptionsService, this.chartService, this.localeService)\n            : new RangeMenuItemMapper(this.gridOptionsService, this.chartService, this.localeService);\n        let topLevelMenuItem = builder.getMenuItem();\n        const chartGroupsDef = (_b = (_a = this.gridOptionsService.get('chartToolPanelsDef')) === null || _a === void 0 ? void 0 : _a.settingsPanel) === null || _b === void 0 ? void 0 : _b.chartGroupsDef;\n        if (chartGroupsDef) {\n            // Apply filtering and ordering if chartGroupsDef provided\n            topLevelMenuItem = ChartMenuItemMapper_1.filterAndOrderChartMenu(topLevelMenuItem, chartGroupsDef, builder.getConfigLookup());\n        }\n        return this.cleanInternals(topLevelMenuItem);\n    }\n    // Remove our internal _key properties so this does not leak out of the class on the menu items.\n    cleanInternals(menuItem) {\n        if (!menuItem) {\n            return menuItem;\n        }\n        const removeKey = (m) => {\n            var _a;\n            m === null || m === void 0 ? true : delete m._key;\n            (_a = m === null || m === void 0 ? void 0 : m.subMenu) === null || _a === void 0 ? void 0 : _a.forEach(s => removeKey(s));\n            return m;\n        };\n        return removeKey(menuItem);\n    }\n    static buildLookup(menuItem) {\n        let itemLookup = {};\n        const addItem = (item) => {\n            itemLookup[item._key] = item;\n            if (item.subMenu) {\n                item.subMenu.forEach(s => addItem(s));\n            }\n        };\n        addItem(menuItem);\n        return itemLookup;\n    }\n    /**\n     * Make the MenuItem match the charts provided and their ordering on the ChartGroupsDef config object as provided by the user.\n     */\n    static filterAndOrderChartMenu(topLevelMenuItem, chartGroupsDef, configLookup) {\n        var _a;\n        const menuItemLookup = this.buildLookup(topLevelMenuItem);\n        let orderedAndFiltered = Object.assign(Object.assign({}, topLevelMenuItem), { subMenu: [] });\n        Object.entries(chartGroupsDef).forEach(([group, chartTypes]) => {\n            var _a, _b;\n            const chartConfigGroup = configLookup[group];\n            if (chartConfigGroup == undefined) {\n                _.doOnce(() => console.warn(`AG Grid - invalid chartGroupsDef config '${group}'`), `invalid_chartGroupsDef${group}`);\n                return undefined;\n            }\n            const menuItem = menuItemLookup[chartConfigGroup._key];\n            if (menuItem) {\n                if (menuItem.subMenu) {\n                    const subMenus = chartTypes.map(chartType => {\n                        const itemKey = chartConfigGroup[chartType];\n                        if (itemKey == undefined) {\n                            _.doOnce(() => console.warn(`AG Grid - invalid chartGroupsDef config '${group}.${chartType}'`), `invalid_chartGroupsDef${chartType}_${group}`);\n                            return undefined;\n                        }\n                        return menuItemLookup[itemKey];\n                    }).filter(s => s !== undefined);\n                    if (subMenus.length > 0) {\n                        menuItem.subMenu = subMenus;\n                        (_a = orderedAndFiltered.subMenu) === null || _a === void 0 ? void 0 : _a.push(menuItem);\n                    }\n                }\n                else {\n                    // Handles line case which is not actually a sub subMenu\n                    (_b = orderedAndFiltered.subMenu) === null || _b === void 0 ? void 0 : _b.push(menuItem);\n                }\n            }\n        });\n        if (((_a = orderedAndFiltered.subMenu) === null || _a === void 0 ? void 0 : _a.length) == 0) {\n            return undefined;\n        }\n        return orderedAndFiltered;\n    }\n};\n__decorate$z([\n    Optional('chartService')\n], ChartMenuItemMapper.prototype, \"chartService\", void 0);\nChartMenuItemMapper = ChartMenuItemMapper_1 = __decorate$z([\n    Bean('chartMenuItemMapper')\n], ChartMenuItemMapper);\nclass PivotMenuItemMapper {\n    constructor(gridOptionsService, chartService, localeService) {\n        this.gridOptionsService = gridOptionsService;\n        this.chartService = chartService;\n        this.localeService = localeService;\n    }\n    getMenuItem() {\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        const getMenuItem = (localeKey, defaultText, chartType, key) => {\n            return {\n                name: localeTextFunc(localeKey, defaultText),\n                action: () => this.chartService.createPivotChart({ chartType }),\n                _key: key\n            };\n        };\n        return {\n            name: localeTextFunc('pivotChart', 'Pivot Chart'),\n            _key: 'pivotChart',\n            subMenu: [\n                {\n                    _key: 'pivotColumnChart',\n                    name: localeTextFunc('columnChart', 'Column'),\n                    subMenu: [\n                        getMenuItem('groupedColumn', 'Grouped&lrm;', 'groupedColumn', 'pivotGroupedColumn'),\n                        getMenuItem('stackedColumn', 'Stacked&lrm;', 'stackedColumn', 'pivotStackedColumn'),\n                        getMenuItem('normalizedColumn', '100% Stacked&lrm;', 'normalizedColumn', 'pivotNormalizedColumn')\n                    ]\n                },\n                {\n                    _key: 'pivotBarChart',\n                    name: localeTextFunc('barChart', 'Bar'),\n                    subMenu: [\n                        getMenuItem('groupedBar', 'Grouped&lrm;', 'groupedBar', 'pivotGroupedBar'),\n                        getMenuItem('stackedBar', 'Stacked&lrm;', 'stackedBar', 'pivotStackedBar'),\n                        getMenuItem('normalizedBar', '100% Stacked&lrm;', 'normalizedBar', 'pivotNormalizedBar')\n                    ]\n                },\n                {\n                    _key: 'pivotPieChart',\n                    name: localeTextFunc('pieChart', 'Pie'),\n                    subMenu: [\n                        getMenuItem('pie', 'Pie&lrm;', 'pie', 'pivotPie'),\n                        getMenuItem('doughnut', 'Doughnut&lrm;', 'doughnut', 'pivotDoughnut')\n                    ]\n                },\n                getMenuItem('line', 'Line&lrm;', 'line', 'pivotLineChart'),\n                {\n                    _key: 'pivotXYChart',\n                    name: localeTextFunc('xyChart', 'X Y (Scatter)'),\n                    subMenu: [\n                        getMenuItem('scatter', 'Scatter&lrm;', 'scatter', 'pivotScatter'),\n                        getMenuItem('bubble', 'Bubble&lrm;', 'bubble', 'pivotBubble')\n                    ]\n                },\n                {\n                    _key: 'pivotAreaChart',\n                    name: localeTextFunc('areaChart', 'Area'),\n                    subMenu: [\n                        getMenuItem('area', 'Area&lrm;', 'area', 'pivotArea'),\n                        getMenuItem('stackedArea', 'Stacked&lrm;', 'stackedArea', 'pivotStackedArea'),\n                        getMenuItem('normalizedArea', '100% Stacked&lrm;', 'normalizedArea', 'pivotNormalizedArea')\n                    ]\n                },\n                getMenuItem('histogramChart', 'Histogram&lrm;', 'histogram', 'pivotHistogramChart'),\n                {\n                    _key: 'pivotCombinationChart',\n                    name: localeTextFunc('combinationChart', 'Combination'),\n                    subMenu: [\n                        getMenuItem('columnLineCombo', 'Column & Line&lrm;', 'columnLineCombo', 'pivotColumnLineCombo'),\n                        getMenuItem('AreaColumnCombo', 'Area & Column&lrm;', 'areaColumnCombo', 'pivotAreaColumnCombo')\n                    ]\n                }\n            ],\n            icon: _.createIconNoSpan('chart', this.gridOptionsService, undefined),\n        };\n    }\n    getConfigLookup() {\n        return {\n            columnGroup: {\n                _key: 'pivotColumnChart',\n                column: 'pivotGroupedColumn',\n                stackedColumn: 'pivotStackedColumn',\n                normalizedColumn: 'pivotNormalizedColumn',\n            },\n            barGroup: {\n                _key: 'pivotBarChart',\n                bar: 'pivotGroupedBar',\n                stackedBar: 'pivotStackedBar',\n                normalizedBar: 'pivotNormalizedBar',\n            },\n            pieGroup: {\n                _key: 'pivotPieChart',\n                pie: 'pivotPie',\n                doughnut: 'pivotDoughnut',\n            },\n            lineGroup: {\n                _key: 'pivotLineChart',\n                line: 'pivotLineChart',\n            },\n            scatterGroup: {\n                _key: 'pivotXYChart',\n                bubble: 'pivotBubble',\n                scatter: 'pivotScatter',\n            },\n            areaGroup: {\n                _key: 'pivotAreaChart',\n                area: 'pivotArea',\n                stackedArea: 'pivotStackedArea',\n                normalizedArea: 'pivotNormalizedArea',\n            },\n            histogramGroup: {\n                _key: 'pivotHistogramChart',\n                histogram: 'pivotHistogramChart',\n            },\n            combinationGroup: {\n                _key: 'pivotCombinationChart',\n                columnLineCombo: 'pivotColumnLineCombo',\n                areaColumnCombo: 'pivotAreaColumnCombo',\n                customCombo: '' // Not currently supported but needs a value to separate from a missing value\n            }\n        };\n    }\n}\nclass RangeMenuItemMapper {\n    constructor(gridOptionsService, chartService, localeService) {\n        this.gridOptionsService = gridOptionsService;\n        this.chartService = chartService;\n        this.localeService = localeService;\n    }\n    getMenuItem() {\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        const getMenuItem = (localeKey, defaultText, chartType, key) => {\n            return {\n                name: localeTextFunc(localeKey, defaultText),\n                action: () => this.chartService.createChartFromCurrentRange(chartType),\n                _key: key\n            };\n        };\n        return {\n            name: localeTextFunc('chartRange', 'Chart Range'),\n            _key: 'chartRange',\n            subMenu: [\n                {\n                    name: localeTextFunc('columnChart', 'Column'),\n                    subMenu: [\n                        getMenuItem('groupedColumn', 'Grouped&lrm;', 'groupedColumn', 'rangeGroupedColumn'),\n                        getMenuItem('stackedColumn', 'Stacked&lrm;', 'stackedColumn', 'rangeStackedColumn'),\n                        getMenuItem('normalizedColumn', '100% Stacked&lrm;', 'normalizedColumn', 'rangeNormalizedColumn')\n                    ],\n                    _key: 'rangeColumnChart'\n                },\n                {\n                    name: localeTextFunc('barChart', 'Bar'),\n                    subMenu: [\n                        getMenuItem('groupedBar', 'Grouped&lrm;', 'groupedBar', 'rangeGroupedBar'),\n                        getMenuItem('stackedBar', 'Stacked&lrm;', 'stackedBar', 'rangeStackedBar'),\n                        getMenuItem('normalizedBar', '100% Stacked&lrm;', 'normalizedBar', 'rangeNormalizedBar')\n                    ],\n                    _key: 'rangeBarChart'\n                },\n                {\n                    name: localeTextFunc('pieChart', 'Pie'),\n                    subMenu: [\n                        getMenuItem('pie', 'Pie&lrm;', 'pie', 'rangePie'),\n                        getMenuItem('doughnut', 'Doughnut&lrm;', 'doughnut', 'rangeDoughnut')\n                    ],\n                    _key: 'rangePieChart'\n                },\n                getMenuItem('line', 'Line&lrm;', 'line', 'rangeLineChart'),\n                {\n                    name: localeTextFunc('xyChart', 'X Y (Scatter)'),\n                    subMenu: [\n                        getMenuItem('scatter', 'Scatter&lrm;', 'scatter', 'rangeScatter'),\n                        getMenuItem('bubble', 'Bubble&lrm;', 'bubble', 'rangeBubble')\n                    ],\n                    _key: 'rangeXYChart'\n                },\n                {\n                    name: localeTextFunc('areaChart', 'Area'),\n                    subMenu: [\n                        getMenuItem('area', 'Area&lrm;', 'area', 'rangeArea'),\n                        getMenuItem('stackedArea', 'Stacked&lrm;', 'stackedArea', 'rangeStackedArea'),\n                        getMenuItem('normalizedArea', '100% Stacked&lrm;', 'normalizedArea', 'rangeNormalizedArea')\n                    ],\n                    _key: 'rangeAreaChart'\n                },\n                getMenuItem('histogramChart', 'Histogram&lrm;', 'histogram', 'rangeHistogramChart'),\n                {\n                    name: localeTextFunc('combinationChart', 'Combination'),\n                    subMenu: [\n                        getMenuItem('columnLineCombo', 'Column & Line&lrm;', 'columnLineCombo', 'rangeColumnLineCombo'),\n                        getMenuItem('AreaColumnCombo', 'Area & Column&lrm;', 'areaColumnCombo', 'rangeAreaColumnCombo')\n                    ],\n                    _key: 'rangeCombinationChart'\n                }\n            ],\n            icon: _.createIconNoSpan('chart', this.gridOptionsService, undefined),\n        };\n    }\n    getConfigLookup() {\n        return {\n            columnGroup: {\n                _key: 'rangeColumnChart',\n                column: 'rangeGroupedColumn',\n                stackedColumn: 'rangeStackedColumn',\n                normalizedColumn: 'rangeNormalizedColumn',\n            },\n            barGroup: {\n                _key: 'rangeBarChart',\n                bar: 'rangeGroupedBar',\n                stackedBar: 'rangeStackedBar',\n                normalizedBar: 'rangeNormalizedBar',\n            },\n            pieGroup: {\n                _key: 'rangePieChart',\n                pie: 'rangePie',\n                doughnut: 'rangeDoughnut',\n            },\n            lineGroup: {\n                _key: 'rangeLineChart',\n                line: 'rangeLineChart',\n            },\n            scatterGroup: {\n                _key: 'rangeXYChart',\n                bubble: 'rangeBubble',\n                scatter: 'rangeScatter',\n            },\n            areaGroup: {\n                _key: 'rangeAreaChart',\n                area: 'rangeArea',\n                stackedArea: 'rangeStackedArea',\n                normalizedArea: 'rangeNormalizedArea',\n            },\n            histogramGroup: {\n                _key: 'rangeHistogramChart',\n                histogram: 'rangeHistogramChart',\n            },\n            combinationGroup: {\n                _key: 'rangeCombinationChart',\n                columnLineCombo: 'rangeColumnLineCombo',\n                areaColumnCombo: 'rangeAreaColumnCombo',\n                customCombo: '' // Not currently supported but needs a value to separate from a missing value\n            }\n        };\n    }\n}\n\nconst MenuModule = {\n    version: VERSION$7,\n    moduleName: ModuleNames.MenuModule,\n    beans: [EnterpriseMenuFactory, ContextMenuFactory, MenuItemMapper, ChartMenuItemMapper],\n    dependantModules: [\n        EnterpriseCoreModule\n    ]\n};\n\nvar __decorate$y = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass MultiFilter extends TabGuardComp {\n    constructor() {\n        super(/* html */ `<div class=\"ag-multi-filter ag-menu-list-compact\"></div>`);\n        this.filterDefs = [];\n        this.filters = [];\n        this.guiDestroyFuncs = [];\n        this.activeFilterIndices = [];\n        this.lastActivatedMenuItem = null;\n        this.afterFiltersReadyFuncs = [];\n    }\n    postConstruct() {\n        this.initialiseTabGuard({\n            onFocusIn: e => this.onFocusIn(e)\n        });\n    }\n    static getFilterDefs(params) {\n        const { filters } = params;\n        return filters && filters.length > 0 ?\n            filters :\n            [{ filter: 'agTextColumnFilter' }, { filter: 'agSetColumnFilter' }];\n    }\n    init(params) {\n        this.params = params;\n        this.filterDefs = MultiFilter.getFilterDefs(params);\n        const { column, filterChangedCallback } = params;\n        this.column = column;\n        this.filterChangedCallback = filterChangedCallback;\n        const filterPromises = [];\n        this.filterDefs.forEach((filterDef, index) => {\n            const filterPromise = this.createFilter(filterDef, index);\n            if (filterPromise != null) {\n                filterPromises.push(filterPromise);\n            }\n        });\n        // we have to refresh the GUI here to ensure that Angular components are not rendered in odd places\n        return AgPromise\n            .all(filterPromises)\n            .then(filters => {\n            this.filters = filters;\n            this.refreshGui('columnMenu');\n            this.afterFiltersReadyFuncs.forEach(f => f());\n            this.afterFiltersReadyFuncs.length = 0;\n        });\n    }\n    refreshGui(container) {\n        if (container === this.lastOpenedInContainer) {\n            return;\n        }\n        this.removeAllChildrenExceptTabGuards();\n        this.destroyChildren();\n        this.filters.forEach((filter, index) => {\n            if (index > 0) {\n                this.appendChild(_.loadTemplate(/* html */ `<div class=\"ag-filter-separator\"></div>`));\n            }\n            const filterDef = this.filterDefs[index];\n            const filterTitle = this.getFilterTitle(filter, filterDef);\n            let filterGui;\n            if (filterDef.display === 'subMenu' && container !== 'toolPanel') {\n                // prevent sub-menu being used in tool panel\n                const menuItem = this.insertFilterMenu(filter, filterTitle);\n                filterGui = menuItem.getGui();\n            }\n            else if (filterDef.display === 'subMenu' || filterDef.display === 'accordion') {\n                // sub-menus should appear as groups in the tool panel\n                const group = this.insertFilterGroup(filter, filterTitle);\n                filterGui = group.getGui();\n            }\n            else {\n                // display inline\n                filterGui = filter.getGui();\n            }\n            this.appendChild(filterGui);\n        });\n        this.lastOpenedInContainer = container;\n    }\n    getFilterTitle(filter, filterDef) {\n        if (filterDef.title != null) {\n            return filterDef.title;\n        }\n        const filterWithoutType = filter;\n        return typeof filterWithoutType.getFilterTitle === 'function' ? filterWithoutType.getFilterTitle() : 'Filter';\n    }\n    destroyChildren() {\n        this.guiDestroyFuncs.forEach(func => func());\n        this.guiDestroyFuncs.length = 0;\n    }\n    insertFilterMenu(filter, name) {\n        const menuItem = this.createBean(new AgMenuItemComponent({\n            name,\n            subMenu: filter,\n            cssClasses: ['ag-multi-filter-menu-item'],\n            isCompact: true,\n            isAnotherSubMenuOpen: () => false,\n        }));\n        menuItem.setParentComponent(this);\n        this.guiDestroyFuncs.push(() => this.destroyBean(menuItem));\n        this.addManagedListener(menuItem, AgMenuItemComponent.EVENT_MENU_ITEM_ACTIVATED, (event) => {\n            if (this.lastActivatedMenuItem && this.lastActivatedMenuItem !== event.menuItem) {\n                this.lastActivatedMenuItem.deactivate();\n            }\n            this.lastActivatedMenuItem = event.menuItem;\n        });\n        menuItem.addGuiEventListener('focusin', () => menuItem.activate());\n        menuItem.addGuiEventListener('focusout', () => {\n            if (!menuItem.isSubMenuOpen()) {\n                menuItem.deactivate();\n            }\n        });\n        return menuItem;\n    }\n    insertFilterGroup(filter, title) {\n        const group = this.createBean(new AgGroupComponent({\n            title,\n            cssIdentifier: 'multi-filter',\n        }));\n        this.guiDestroyFuncs.push(() => this.destroyBean(group));\n        group.addItem(filter.getGui());\n        group.toggleGroupExpand(false);\n        if (filter.afterGuiAttached) {\n            group.addManagedListener(group, AgGroupComponent.EVENT_EXPANDED, () => filter.afterGuiAttached({\n                container: this.lastOpenedInContainer,\n                suppressFocus: true\n            }));\n        }\n        return group;\n    }\n    isFilterActive() {\n        return this.filters.some(filter => filter.isFilterActive());\n    }\n    getLastActiveFilterIndex() {\n        return this.activeFilterIndices.length > 0 ? this.activeFilterIndices[this.activeFilterIndices.length - 1] : null;\n    }\n    doesFilterPass(params, filterToSkip) {\n        let rowPasses = true;\n        this.filters.forEach(filter => {\n            if (!rowPasses || filter === filterToSkip || !filter.isFilterActive()) {\n                return;\n            }\n            rowPasses = filter.doesFilterPass(params);\n        });\n        return rowPasses;\n    }\n    getFilterType() {\n        return 'multi';\n    }\n    getModelFromUi() {\n        const model = {\n            filterType: this.getFilterType(),\n            filterModels: this.filters.map(filter => {\n                const providedFilter = filter;\n                if (typeof providedFilter.getModelFromUi === 'function') {\n                    return providedFilter.getModelFromUi();\n                }\n                return null;\n            })\n        };\n        return model;\n    }\n    getModel() {\n        if (!this.isFilterActive()) {\n            return null;\n        }\n        const model = {\n            filterType: this.getFilterType(),\n            filterModels: this.filters.map(filter => {\n                if (filter.isFilterActive()) {\n                    return filter.getModel();\n                }\n                return null;\n            })\n        };\n        return model;\n    }\n    setModel(model) {\n        const setFilterModel = (filter, filterModel) => {\n            return new AgPromise(resolve => {\n                const promise = filter.setModel(filterModel);\n                promise ? promise.then(() => resolve()) : resolve();\n            });\n        };\n        let promises = [];\n        if (model == null) {\n            promises = this.filters.map((filter, index) => {\n                const res = setFilterModel(filter, null).then(() => {\n                    this.updateActiveList(index);\n                });\n                return res;\n            });\n        }\n        else {\n            this.filters.forEach((filter, index) => {\n                const filterModel = model.filterModels.length > index ? model.filterModels[index] : null;\n                const res = setFilterModel(filter, filterModel).then(() => {\n                    this.updateActiveList(index);\n                });\n                promises.push(res);\n            });\n        }\n        return AgPromise.all(promises).then(() => { });\n    }\n    applyModel(source = 'api') {\n        let result = false;\n        this.filters.forEach((filter) => {\n            if (filter instanceof ProvidedFilter) {\n                result = filter.applyModel(source) || result;\n            }\n        });\n        return result;\n    }\n    getChildFilterInstance(index) {\n        return this.filters[index];\n    }\n    afterGuiAttached(params) {\n        if (params) {\n            this.refreshGui(params.container);\n        }\n        const { filters } = this.params;\n        const suppressFocus = filters && filters.some(filter => filter.display && filter.display !== 'inline');\n        this.executeFunctionIfExists('afterGuiAttached', Object.assign(Object.assign({}, params || {}), { suppressFocus }));\n        const eDocument = this.gridOptionsService.getDocument();\n        const activeEl = eDocument.activeElement;\n        // if suppress focus is true, we might run into two scenarios:\n        // 1 - we are loading the filter for the first time and the component isn't ready,\n        //     which means the document will have focus.\n        // 2 - The focus will be somewhere inside the component due to auto focus\n        // In both cases we need to force the focus somewhere valid but outside the filter.\n        if (suppressFocus && (activeEl === eDocument.body || this.getGui().contains(activeEl))) {\n            // reset focus to the top of the container, and blur\n            this.forceFocusOutOfContainer(true);\n        }\n    }\n    afterGuiDetached() {\n        this.executeFunctionIfExists('afterGuiDetached');\n    }\n    onAnyFilterChanged() {\n        this.executeFunctionIfExists('onAnyFilterChanged');\n    }\n    onNewRowsLoaded() {\n        this.executeFunctionIfExists('onNewRowsLoaded');\n    }\n    destroy() {\n        this.filters.forEach(filter => {\n            filter.setModel(null);\n            this.destroyBean(filter);\n        });\n        this.filters.length = 0;\n        this.destroyChildren();\n        super.destroy();\n    }\n    executeFunctionIfExists(name, ...params) {\n        // The first filter is always the \"dominant\" one. By iterating in reverse order we ensure the first filter\n        // always gets the last say\n        _.forEachReverse(this.filters, filter => {\n            const func = filter[name];\n            if (typeof func === 'function') {\n                func.apply(filter, params);\n            }\n        });\n    }\n    createFilter(filterDef, index) {\n        const { filterModifiedCallback, doesRowPassOtherFilter } = this.params;\n        let filterInstance;\n        const filterParams = Object.assign(Object.assign({}, this.filterManager.createFilterParams(this.column, this.column.getColDef())), { filterModifiedCallback, filterChangedCallback: additionalEventAttributes => {\n                this.executeWhenAllFiltersReady(() => this.filterChanged(index, additionalEventAttributes));\n            }, doesRowPassOtherFilter: (node) => doesRowPassOtherFilter(node) && this.doesFilterPass({ node, data: node.data }, filterInstance) });\n        const compDetails = this.userComponentFactory.getFilterDetails(filterDef, filterParams, 'agTextColumnFilter');\n        if (!compDetails) {\n            return null;\n        }\n        const filterPromise = compDetails.newAgStackInstance();\n        if (filterPromise) {\n            filterPromise.then(filter => filterInstance = filter);\n        }\n        return filterPromise;\n    }\n    executeWhenAllFiltersReady(action) {\n        if (this.filters && this.filters.length > 0) {\n            action();\n        }\n        else {\n            this.afterFiltersReadyFuncs.push(action);\n        }\n    }\n    updateActiveList(index) {\n        const changedFilter = this.filters[index];\n        _.removeFromArray(this.activeFilterIndices, index);\n        if (changedFilter.isFilterActive()) {\n            this.activeFilterIndices.push(index);\n        }\n    }\n    filterChanged(index, additionalEventAttributes) {\n        this.updateActiveList(index);\n        this.filterChangedCallback(additionalEventAttributes);\n        const changedFilter = this.filters[index];\n        this.filters.forEach(filter => {\n            if (filter === changedFilter) {\n                return;\n            }\n            if (typeof filter.onAnyFilterChanged === 'function') {\n                filter.onAnyFilterChanged();\n            }\n        });\n    }\n    onFocusIn(e) {\n        if (this.lastActivatedMenuItem != null && !this.lastActivatedMenuItem.getGui().contains(e.target)) {\n            this.lastActivatedMenuItem.deactivate();\n            this.lastActivatedMenuItem = null;\n        }\n        return true;\n    }\n    getModelAsString(model) {\n        var _a, _b, _c, _d;\n        if (!this.filters || !((_a = model === null || model === void 0 ? void 0 : model.filterModels) === null || _a === void 0 ? void 0 : _a.length)) {\n            return '';\n        }\n        const lastActiveIndex = (_b = this.getLastActiveFilterIndex()) !== null && _b !== void 0 ? _b : 0;\n        const activeFilter = this.filters[lastActiveIndex];\n        return (_d = (_c = activeFilter.getModelAsString) === null || _c === void 0 ? void 0 : _c.call(activeFilter, model.filterModels[lastActiveIndex])) !== null && _d !== void 0 ? _d : '';\n    }\n}\n__decorate$y([\n    Autowired('filterManager')\n], MultiFilter.prototype, \"filterManager\", void 0);\n__decorate$y([\n    Autowired('userComponentFactory')\n], MultiFilter.prototype, \"userComponentFactory\", void 0);\n__decorate$y([\n    PostConstruct\n], MultiFilter.prototype, \"postConstruct\", null);\n\nvar __decorate$x = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass MultiFloatingFilterComp extends Component {\n    constructor() {\n        super(/* html */ `<div class=\"ag-multi-floating-filter ag-floating-filter-input\"></div>`);\n        this.floatingFilters = [];\n    }\n    init(params) {\n        this.params = params;\n        const filterParams = params.filterParams;\n        const floatingFilterPromises = [];\n        MultiFilter.getFilterDefs(filterParams).forEach((filterDef, index) => {\n            const floatingFilterParams = Object.assign(Object.assign({}, params), { \n                // set the parent filter instance for each floating filter to the relevant child filter instance\n                parentFilterInstance: (callback) => {\n                    this.parentMultiFilterInstance((parent) => {\n                        const child = parent.getChildFilterInstance(index);\n                        if (child == null) {\n                            return;\n                        }\n                        callback(child);\n                    });\n                } });\n            _.mergeDeep(floatingFilterParams.filterParams, filterDef.filterParams);\n            const floatingFilterPromise = this.createFloatingFilter(filterDef, floatingFilterParams);\n            if (floatingFilterPromise != null) {\n                floatingFilterPromises.push(floatingFilterPromise);\n            }\n        });\n        return AgPromise.all(floatingFilterPromises).then(floatingFilters => {\n            floatingFilters.forEach((floatingFilter, index) => {\n                this.floatingFilters.push(floatingFilter);\n                const gui = floatingFilter.getGui();\n                this.appendChild(gui);\n                if (index > 0) {\n                    _.setDisplayed(gui, false);\n                }\n            });\n        });\n    }\n    onParentModelChanged(model, event) {\n        // We don't want to update the floating filter if the floating filter caused the change,\n        // because the UI is already in sync. if we didn't do this, the UI would behave strangely\n        // as it would be updating as the user is typing\n        if (event && event.afterFloatingFilter) {\n            return;\n        }\n        this.parentMultiFilterInstance((parent) => {\n            if (model == null) {\n                this.floatingFilters.forEach((filter, i) => {\n                    filter.onParentModelChanged(null, event);\n                    _.setDisplayed(filter.getGui(), i === 0);\n                });\n            }\n            else {\n                const lastActiveFloatingFilterIndex = parent.getLastActiveFilterIndex();\n                this.floatingFilters.forEach((filter, i) => {\n                    const filterModel = model.filterModels.length > i ? model.filterModels[i] : null;\n                    filter.onParentModelChanged(filterModel, event);\n                    const shouldShow = lastActiveFloatingFilterIndex == null ? i === 0 : i === lastActiveFloatingFilterIndex;\n                    _.setDisplayed(filter.getGui(), shouldShow);\n                });\n            }\n        });\n    }\n    destroy() {\n        this.destroyBeans(this.floatingFilters);\n        this.floatingFilters.length = 0;\n        super.destroy();\n    }\n    createFloatingFilter(filterDef, params) {\n        var _a;\n        let defaultComponentName = (_a = this.userComponentFactory.getDefaultFloatingFilterType(filterDef, () => this.filterManager.getDefaultFloatingFilter(this.params.column))) !== null && _a !== void 0 ? _a : 'agReadOnlyFloatingFilter';\n        const compDetails = this.userComponentFactory.getFloatingFilterCompDetails(filterDef, params, defaultComponentName);\n        return compDetails ? compDetails.newAgStackInstance() : null;\n    }\n    parentMultiFilterInstance(cb) {\n        this.params.parentFilterInstance((parent) => {\n            if (!(parent instanceof MultiFilter)) {\n                throw new Error('AG Grid - MultiFloatingFilterComp expects MultiFilter as its parent');\n            }\n            cb(parent);\n        });\n    }\n}\n__decorate$x([\n    Autowired('userComponentFactory')\n], MultiFloatingFilterComp.prototype, \"userComponentFactory\", void 0);\n__decorate$x([\n    Autowired('filterManager')\n], MultiFloatingFilterComp.prototype, \"filterManager\", void 0);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$6 = '30.0.3';\n\nconst MultiFilterModule = {\n    version: VERSION$6,\n    moduleName: ModuleNames.MultiFilterModule,\n    beans: [],\n    userComponents: [\n        { componentName: 'agMultiColumnFilter', componentClass: MultiFilter },\n        { componentName: 'agMultiColumnFloatingFilter', componentClass: MultiFloatingFilterComp },\n    ],\n    dependantModules: [\n        EnterpriseCoreModule\n    ]\n};\n\n/**\n * cell renderers are used in a few places. they bind to dom slightly differently to other cell renderes as they\n * can return back strings (instead of html elemnt) in the getGui() method. common code placed here to handle that.\n * @param {AgPromise<ICellRendererComp>} cellRendererPromise\n * @param {HTMLElement} eTarget\n */\nfunction bindCellRendererToHtmlElement(cellRendererPromise, eTarget) {\n    cellRendererPromise.then(cellRenderer => {\n        const gui = cellRenderer.getGui();\n        if (gui != null) {\n            if (typeof gui === 'object') {\n                eTarget.appendChild(gui);\n            }\n            else {\n                eTarget.innerHTML = gui;\n            }\n        }\n    });\n}\n\nvar __decorate$w = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass RichSelectRow extends Component {\n    constructor(params) {\n        super(/* html */ `<div class=\"ag-rich-select-row\" role=\"presentation\"></div>`);\n        this.params = params;\n    }\n    setState(value, valueFormatted, selected) {\n        const rendererSuccessful = this.populateWithRenderer(value, valueFormatted);\n        if (!rendererSuccessful) {\n            this.populateWithoutRenderer(value, valueFormatted);\n        }\n        this.updateSelected(selected);\n    }\n    updateSelected(selected) {\n        this.addOrRemoveCssClass('ag-rich-select-row-selected', selected);\n    }\n    populateWithoutRenderer(value, valueFormatted) {\n        const valueFormattedExits = valueFormatted !== null && valueFormatted !== undefined;\n        const valueToRender = valueFormattedExits ? valueFormatted : value;\n        if (_.exists(valueToRender) && valueToRender !== '') {\n            // not using innerHTML to prevent injection of HTML\n            // https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML#Security_considerations\n            this.getGui().textContent = valueToRender.toString();\n        }\n        else {\n            // putting in blank, so if missing, at least the user can click on it\n            this.getGui().innerHTML = '&nbsp;';\n        }\n    }\n    populateWithRenderer(value, valueFormatted) {\n        // bad coder here - we are not populating all values of the cellRendererParams\n        const params = {\n            value: value,\n            valueFormatted: valueFormatted,\n            api: this.gridOptionsService.api\n        };\n        const compDetails = this.userComponentFactory.getCellRendererDetails(this.params, params);\n        const cellRendererPromise = compDetails ? compDetails.newAgStackInstance() : undefined;\n        if (cellRendererPromise != null) {\n            bindCellRendererToHtmlElement(cellRendererPromise, this.getGui());\n        }\n        else {\n            this.getGui().innerText = params.valueFormatted != null ? params.valueFormatted : params.value;\n        }\n        if (cellRendererPromise) {\n            cellRendererPromise.then(childComponent => {\n                this.addDestroyFunc(() => {\n                    this.getContext().destroyBean(childComponent);\n                });\n            });\n            return true;\n        }\n        return false;\n    }\n}\n__decorate$w([\n    Autowired('userComponentFactory')\n], RichSelectRow.prototype, \"userComponentFactory\", void 0);\n\nvar __decorate$v = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass RichSelectCellEditor extends PopupComponent {\n    constructor() {\n        super(RichSelectCellEditor.TEMPLATE);\n        this.selectionConfirmed = false;\n        this.searchString = '';\n    }\n    init(params) {\n        var _a;\n        this.params = params;\n        this.selectedValue = params.value;\n        this.originalSelectedValue = params.value;\n        this.focusAfterAttached = params.cellStartedEdit;\n        const icon = _.createIconNoSpan('smallDown', this.gridOptionsService);\n        icon.classList.add('ag-rich-select-value-icon');\n        this.eValue.appendChild(icon);\n        this.virtualList = this.createManagedBean(new VirtualList('rich-select'));\n        this.virtualList.setComponentCreator(this.createRowComponent.bind(this));\n        this.eList.appendChild(this.virtualList.getGui());\n        if (_.exists(this.params.cellHeight)) {\n            this.virtualList.setRowHeight(this.params.cellHeight);\n        }\n        this.renderSelectedValue();\n        if (_.missing(params.values)) {\n            console.warn('AG Grid: richSelectCellEditor requires values for it to work');\n            return;\n        }\n        const values = params.values;\n        this.virtualList.setModel({\n            getRowCount: () => values.length,\n            getRow: (index) => values[index]\n        });\n        this.addGuiEventListener('keydown', this.onKeyDown.bind(this));\n        const virtualListGui = this.virtualList.getGui();\n        this.addManagedListener(virtualListGui, 'click', this.onClick.bind(this));\n        this.addManagedListener(virtualListGui, 'mousemove', this.onMouseMove.bind(this));\n        const debounceDelay = _.exists(params.searchDebounceDelay) ? params.searchDebounceDelay : 300;\n        this.clearSearchString = _.debounce(this.clearSearchString, debounceDelay);\n        if (((_a = params.eventKey) === null || _a === void 0 ? void 0 : _a.length) === 1) {\n            this.searchText(params.eventKey);\n        }\n    }\n    onKeyDown(event) {\n        const key = event.key;\n        event.preventDefault();\n        switch (key) {\n            case KeyCode.ENTER:\n                this.onEnterKeyDown();\n                break;\n            case KeyCode.TAB:\n                this.confirmSelection();\n                break;\n            case KeyCode.DOWN:\n            case KeyCode.UP:\n                this.onNavigationKeyDown(event, key);\n                break;\n            default:\n                this.searchText(event);\n        }\n    }\n    confirmSelection() {\n        this.selectionConfirmed = true;\n    }\n    onEnterKeyDown() {\n        this.confirmSelection();\n        this.params.stopEditing();\n    }\n    onNavigationKeyDown(event, key) {\n        // if we don't preventDefault the page body and/or grid scroll will move.\n        event.preventDefault();\n        const oldIndex = this.params.values.indexOf(this.selectedValue);\n        const newIndex = key === KeyCode.UP ? oldIndex - 1 : oldIndex + 1;\n        if (newIndex >= 0 && newIndex < this.params.values.length) {\n            const valueToSelect = this.params.values[newIndex];\n            this.setSelectedValue(valueToSelect);\n        }\n    }\n    searchText(key) {\n        if (typeof key !== 'string') {\n            let keyString = key.key;\n            if (keyString === KeyCode.BACKSPACE) {\n                this.searchString = this.searchString.slice(0, -1);\n                keyString = '';\n            }\n            else if (!_.isEventFromPrintableCharacter(key)) {\n                return;\n            }\n            this.searchText(keyString);\n            return;\n        }\n        this.searchString += key;\n        this.runSearch();\n        this.clearSearchString();\n    }\n    runSearch() {\n        const values = this.params.values;\n        let searchStrings;\n        if (typeof values[0] === 'number' || typeof values[0] === 'string') {\n            searchStrings = values.map(v => this.params.formatValue(v));\n        }\n        if (typeof values[0] === 'object' && this.params.colDef.keyCreator) {\n            searchStrings = values.map(value => {\n                const keyParams = {\n                    value: value,\n                    colDef: this.params.colDef,\n                    column: this.params.column,\n                    node: this.params.node,\n                    data: this.params.data,\n                    api: this.gridOptionsService.api,\n                    columnApi: this.gridOptionsService.columnApi,\n                    context: this.gridOptionsService.context\n                };\n                return this.params.colDef.keyCreator(keyParams);\n            });\n        }\n        if (!searchStrings) {\n            return;\n        }\n        const topSuggestion = _.fuzzySuggestions(this.searchString, searchStrings, true)[0];\n        if (!topSuggestion) {\n            return;\n        }\n        const topSuggestionIndex = searchStrings.indexOf(topSuggestion);\n        const topValue = values[topSuggestionIndex];\n        this.setSelectedValue(topValue);\n    }\n    clearSearchString() {\n        this.searchString = '';\n    }\n    renderSelectedValue() {\n        const valueFormatted = this.params.formatValue(this.selectedValue);\n        const eValue = this.eValue;\n        const params = {\n            value: this.selectedValue,\n            valueFormatted: valueFormatted,\n            api: this.gridOptionsService.api,\n        };\n        const compDetails = this.userComponentFactory.getCellRendererDetails(this.params, params);\n        const promise = compDetails ? compDetails.newAgStackInstance() : undefined;\n        if (promise) {\n            bindCellRendererToHtmlElement(promise, eValue);\n            promise.then(renderer => {\n                this.addDestroyFunc(() => this.getContext().destroyBean(renderer));\n            });\n        }\n        else {\n            if (_.exists(this.selectedValue)) {\n                eValue.innerText = valueFormatted;\n            }\n            else {\n                _.clearElement(eValue);\n            }\n        }\n    }\n    setSelectedValue(value) {\n        if (this.selectedValue === value) {\n            return;\n        }\n        const index = this.params.values.indexOf(value);\n        if (index === -1) {\n            return;\n        }\n        this.selectedValue = value;\n        this.virtualList.ensureIndexVisible(index);\n        this.virtualList.forEachRenderedRow((cmp, idx) => {\n            cmp.updateSelected(index === idx);\n        });\n        this.virtualList.focusRow(index);\n    }\n    createRowComponent(value) {\n        const valueFormatted = this.params.formatValue(value);\n        const row = new RichSelectRow(this.params);\n        this.getContext().createBean(row);\n        row.setState(value, valueFormatted, value === this.selectedValue);\n        return row;\n    }\n    onMouseMove(mouseEvent) {\n        const rect = this.virtualList.getGui().getBoundingClientRect();\n        const scrollTop = this.virtualList.getScrollTop();\n        const mouseY = mouseEvent.clientY - rect.top + scrollTop;\n        const row = Math.floor(mouseY / this.virtualList.getRowHeight());\n        const value = this.params.values[row];\n        // not using utils.exist() as want empty string test to pass\n        if (value !== undefined) {\n            this.setSelectedValue(value);\n        }\n    }\n    onClick() {\n        this.confirmSelection();\n        this.params.stopEditing();\n    }\n    // we need to have the gui attached before we can draw the virtual rows, as the\n    // virtual row logic needs info about the gui state\n    afterGuiAttached() {\n        const selectedIndex = this.params.values.indexOf(this.selectedValue);\n        // we have to call this here to get the list to have the right height, ie\n        // otherwise it would not have scrolls yet and ensureIndexVisible would do nothing\n        this.virtualList.refresh();\n        if (selectedIndex >= 0) {\n            this.virtualList.ensureIndexVisible(selectedIndex);\n        }\n        // we call refresh again, as the list could of moved, and we need to render the new rows\n        this.virtualList.refresh();\n        if (this.focusAfterAttached) {\n            const indexToSelect = selectedIndex !== -1 ? selectedIndex : 0;\n            if (this.params.values.length) {\n                this.virtualList.focusRow(indexToSelect);\n            }\n            else {\n                this.getGui().focus();\n            }\n        }\n    }\n    getValue() {\n        // NOTE: we don't use valueParser for Set Filter. The user should provide values that are to be\n        // set into the data. valueParser only really makese sense when the user is typing in text (not picking\n        // form a set).\n        return this.selectionConfirmed ? this.selectedValue : this.originalSelectedValue;\n    }\n}\n// tab index is needed so we can focus, which is needed for keyboard events\nRichSelectCellEditor.TEMPLATE = `<div class=\"ag-rich-select\" tabindex=\"-1\">\n            <div ref=\"eValue\" class=\"ag-rich-select-value\"></div>\n            <div ref=\"eList\" class=\"ag-rich-select-list\"></div>\n        </div>`;\n__decorate$v([\n    Autowired('userComponentFactory')\n], RichSelectCellEditor.prototype, \"userComponentFactory\", void 0);\n__decorate$v([\n    RefSelector('eValue')\n], RichSelectCellEditor.prototype, \"eValue\", void 0);\n__decorate$v([\n    RefSelector('eList')\n], RichSelectCellEditor.prototype, \"eList\", void 0);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$5 = '30.0.3';\n\nconst RichSelectModule = {\n    version: VERSION$5,\n    moduleName: ModuleNames.RichSelectModule,\n    beans: [],\n    userComponents: [\n        { componentName: 'agRichSelect', componentClass: RichSelectCellEditor },\n        { componentName: 'agRichSelectCellEditor', componentClass: RichSelectCellEditor }\n    ],\n    dependantModules: [\n        EnterpriseCoreModule\n    ]\n};\n\nvar __decorate$u = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass FullStore extends RowNodeBlock {\n    constructor(ssrmParams, storeParams, parentRowNode) {\n        // finite block represents a cache with just one block, thus 0 is the id, it's the first block\n        super(0);\n        this.nodeIdSequence = new NumberSequence();\n        this.info = {};\n        this.ssrmParams = ssrmParams;\n        this.parentRowNode = parentRowNode;\n        this.level = parentRowNode.level + 1;\n        this.groupLevel = ssrmParams.rowGroupCols ? this.level < ssrmParams.rowGroupCols.length : undefined;\n        this.leafGroup = ssrmParams.rowGroupCols ? this.level === ssrmParams.rowGroupCols.length - 1 : false;\n    }\n    postConstruct() {\n        this.usingTreeData = this.gridOptionsService.isTreeData();\n        this.nodeIdPrefix = this.blockUtils.createNodeIdPrefix(this.parentRowNode);\n        if (!this.usingTreeData && this.groupLevel) {\n            const groupColVo = this.ssrmParams.rowGroupCols[this.level];\n            this.groupField = groupColVo.field;\n            this.rowGroupColumn = this.columnModel.getRowGroupColumns()[this.level];\n        }\n        let initialRowCount = 1;\n        const isRootStore = this.parentRowNode.level === -1;\n        const userInitialRowCount = this.storeUtils.getServerSideInitialRowCount();\n        if (isRootStore && userInitialRowCount !== undefined) {\n            initialRowCount = userInitialRowCount;\n        }\n        this.initialiseRowNodes(initialRowCount);\n        this.rowNodeBlockLoader.addBlock(this);\n        this.addDestroyFunc(() => this.rowNodeBlockLoader.removeBlock(this));\n    }\n    destroyRowNodes() {\n        this.blockUtils.destroyRowNodes(this.allRowNodes);\n        this.allRowNodes = [];\n        this.nodesAfterSort = [];\n        this.nodesAfterFilter = [];\n        this.allNodesMap = {};\n    }\n    initialiseRowNodes(loadingRowsCount, failedLoad = false) {\n        this.destroyRowNodes();\n        for (let i = 0; i < loadingRowsCount; i++) {\n            const loadingRowNode = this.blockUtils.createRowNode({\n                field: this.groupField, group: this.groupLevel, leafGroup: this.leafGroup,\n                level: this.level, parent: this.parentRowNode, rowGroupColumn: this.rowGroupColumn\n            });\n            if (failedLoad) {\n                loadingRowNode.failedLoad = true;\n            }\n            this.allRowNodes.push(loadingRowNode);\n            this.nodesAfterFilter.push(loadingRowNode);\n            this.nodesAfterSort.push(loadingRowNode);\n        }\n    }\n    getBlockStateJson() {\n        return {\n            id: this.nodeIdPrefix ? this.nodeIdPrefix : '',\n            state: this.getState()\n        };\n    }\n    loadFromDatasource() {\n        this.storeUtils.loadFromDatasource({\n            startRow: undefined,\n            endRow: undefined,\n            parentBlock: this,\n            parentNode: this.parentRowNode,\n            storeParams: this.ssrmParams,\n            successCallback: this.pageLoaded.bind(this, this.getVersion()),\n            success: this.success.bind(this, this.getVersion()),\n            failCallback: this.pageLoadFailed.bind(this, this.getVersion()),\n            fail: this.pageLoadFailed.bind(this, this.getVersion())\n        });\n    }\n    getStartRow() {\n        return 0; // always zero as not in a cache\n    }\n    getEndRow() {\n        return this.nodesAfterSort.length;\n    }\n    createDataNode(data, index) {\n        const rowNode = this.blockUtils.createRowNode({\n            field: this.groupField, group: this.groupLevel, leafGroup: this.leafGroup,\n            level: this.level, parent: this.parentRowNode, rowGroupColumn: this.rowGroupColumn\n        });\n        if (index != null) {\n            _.insertIntoArray(this.allRowNodes, rowNode, index);\n        }\n        else {\n            this.allRowNodes.push(rowNode);\n        }\n        const defaultId = this.prefixId(this.nodeIdSequence.next());\n        this.blockUtils.setDataIntoRowNode(rowNode, data, defaultId, undefined);\n        this.nodeManager.addRowNode(rowNode);\n        this.blockUtils.checkOpenByDefault(rowNode);\n        this.allNodesMap[rowNode.id] = rowNode;\n        return rowNode;\n    }\n    prefixId(id) {\n        if (this.nodeIdPrefix) {\n            return this.nodeIdPrefix + '-' + id;\n        }\n        else {\n            return id.toString();\n        }\n    }\n    processServerFail() {\n        this.initialiseRowNodes(1, true);\n        this.fireStoreUpdatedEvent();\n        this.flushAsyncTransactions();\n    }\n    processServerResult(params) {\n        if (!this.isAlive()) {\n            return;\n        }\n        const info = params.storeInfo || params.groupLevelInfo;\n        if (info) {\n            Object.assign(this.info, info);\n        }\n        const nodesToRecycle = this.allRowNodes.length > 0 ? this.allNodesMap : undefined;\n        this.allRowNodes = [];\n        this.nodesAfterSort = [];\n        this.nodesAfterFilter = [];\n        this.allNodesMap = {};\n        if (!params.rowData) {\n            const message = 'AG Grid: \"params.data\" is missing from Server-Side Row Model success() callback. Please use the \"data\" attribute. If no data is returned, set an empty list.';\n            _.doOnce(() => console.warn(message, params), 'FullStore.noData');\n        }\n        this.createOrRecycleNodes(nodesToRecycle, params.rowData);\n        if (nodesToRecycle) {\n            this.blockUtils.destroyRowNodes(_.getAllValuesInObject(nodesToRecycle));\n        }\n        this.filterAndSortNodes();\n        this.fireStoreUpdatedEvent();\n        this.flushAsyncTransactions();\n    }\n    createOrRecycleNodes(nodesToRecycle, rowData) {\n        if (!rowData) {\n            return;\n        }\n        const lookupNodeToRecycle = (data) => {\n            if (!nodesToRecycle) {\n                return undefined;\n            }\n            const getRowIdFunc = this.gridOptionsService.getCallback('getRowId');\n            if (!getRowIdFunc) {\n                return undefined;\n            }\n            const parentKeys = this.parentRowNode.getGroupKeys();\n            const level = this.level;\n            const id = getRowIdFunc({\n                data,\n                parentKeys: parentKeys.length > 0 ? parentKeys : undefined,\n                level,\n            });\n            const foundNode = nodesToRecycle[id];\n            if (!foundNode) {\n                return undefined;\n            }\n            delete nodesToRecycle[id];\n            return foundNode;\n        };\n        const recycleNode = (rowNode, dataItem) => {\n            this.allNodesMap[rowNode.id] = rowNode;\n            this.blockUtils.updateDataIntoRowNode(rowNode, dataItem);\n            this.allRowNodes.push(rowNode);\n        };\n        rowData.forEach(dataItem => {\n            const nodeToRecycle = lookupNodeToRecycle(dataItem);\n            if (nodeToRecycle) {\n                recycleNode(nodeToRecycle, dataItem);\n            }\n            else {\n                this.createDataNode(dataItem);\n            }\n        });\n    }\n    flushAsyncTransactions() {\n        // we want to update the store with any outstanding transactions straight away,\n        // as otherwise if waitTimeMillis is large (eg 5s), then the user could be looking\n        // at old data for a few seconds before the transactions is applied, which isn't what\n        // you would expect when we advertise 'transaction is applied when data is loaded'.\n        // we do this in a timeout as flushAsyncTransactions expects the grid to be in a settled\n        // state, not in the middle of loading rows! keeps the VM Turns more simple and deterministic.\n        window.setTimeout(() => this.transactionManager.flushAsyncTransactions(), 0);\n    }\n    filterAndSortNodes() {\n        this.filterRowNodes();\n        this.sortRowNodes();\n    }\n    sortRowNodes() {\n        const serverIsSorting = this.storeUtils.isServerSideSortAllLevels() || this.storeUtils.isServerSideSortOnServer();\n        const sortOptions = this.sortController.getSortOptions();\n        const noSortApplied = !sortOptions || sortOptions.length == 0;\n        if (serverIsSorting || noSortApplied) {\n            this.nodesAfterSort = this.nodesAfterFilter;\n            return;\n        }\n        this.nodesAfterSort = this.rowNodeSorter.doFullSort(this.nodesAfterFilter, sortOptions);\n    }\n    filterRowNodes() {\n        const serverIsFiltering = !this.storeUtils.isServerSideOnlyRefreshFilteredGroups() || this.storeUtils.isServerSideFilterOnServer();\n        // filtering for InFullStore only works at lowest level details.\n        // reason is the logic for group filtering was to difficult to work out how it should work at time of writing.\n        const groupLevel = this.groupLevel;\n        if (serverIsFiltering || groupLevel) {\n            this.nodesAfterFilter = this.allRowNodes;\n            return;\n        }\n        this.nodesAfterFilter = this.allRowNodes.filter(rowNode => this.filterManager.doesRowPassFilter({ rowNode: rowNode }));\n    }\n    clearDisplayIndexes() {\n        this.displayIndexStart = undefined;\n        this.displayIndexEnd = undefined;\n        this.allRowNodes.forEach(rowNode => this.blockUtils.clearDisplayIndex(rowNode));\n    }\n    getDisplayIndexEnd() {\n        return this.displayIndexEnd;\n    }\n    isDisplayIndexInStore(displayIndex) {\n        if (this.getRowCount() === 0) {\n            return false;\n        }\n        return displayIndex >= this.displayIndexStart && displayIndex < this.displayIndexEnd;\n    }\n    setDisplayIndexes(displayIndexSeq, nextRowTop) {\n        this.displayIndexStart = displayIndexSeq.peek();\n        this.topPx = nextRowTop.value;\n        const visibleNodeIds = {};\n        // set on all visible nodes\n        this.nodesAfterSort.forEach(rowNode => {\n            this.blockUtils.setDisplayIndex(rowNode, displayIndexSeq, nextRowTop);\n            visibleNodeIds[rowNode.id] = true;\n        });\n        // and clear on all non-visible nodes\n        this.allRowNodes.forEach(rowNode => {\n            if (!visibleNodeIds[rowNode.id]) {\n                this.blockUtils.clearDisplayIndex(rowNode);\n            }\n        });\n        this.displayIndexEnd = displayIndexSeq.peek();\n        this.heightPx = nextRowTop.value - this.topPx;\n    }\n    forEachStoreDeep(callback, sequence = new NumberSequence()) {\n        callback(this, sequence.next());\n        this.allRowNodes.forEach(rowNode => {\n            const childCache = rowNode.childStore;\n            if (childCache) {\n                childCache.forEachStoreDeep(callback, sequence);\n            }\n        });\n    }\n    forEachNodeDeep(callback, sequence = new NumberSequence()) {\n        this.allRowNodes.forEach(rowNode => {\n            callback(rowNode, sequence.next());\n            const childCache = rowNode.childStore;\n            if (childCache) {\n                childCache.forEachNodeDeep(callback, sequence);\n            }\n        });\n    }\n    forEachNodeDeepAfterFilterAndSort(callback, sequence = new NumberSequence()) {\n        this.nodesAfterSort.forEach(rowNode => {\n            callback(rowNode, sequence.next());\n            const childCache = rowNode.childStore;\n            if (childCache) {\n                childCache.forEachNodeDeepAfterFilterAndSort(callback, sequence);\n            }\n        });\n    }\n    getRowUsingDisplayIndex(displayRowIndex) {\n        // this can happen if asking for a row that doesn't exist in the model,\n        // eg if a cell range is selected, and the user filters so rows no longer exists\n        if (!this.isDisplayIndexInStore(displayRowIndex)) {\n            return undefined;\n        }\n        const res = this.blockUtils.binarySearchForDisplayIndex(displayRowIndex, this.nodesAfterSort);\n        return res;\n    }\n    getRowBounds(index) {\n        for (let i = 0; i < this.nodesAfterSort.length; i++) {\n            const rowNode = this.nodesAfterSort[i];\n            const res = this.blockUtils.extractRowBounds(rowNode, index);\n            if (res) {\n                return res;\n            }\n        }\n        return null;\n    }\n    isPixelInRange(pixel) {\n        return pixel >= this.topPx && pixel < (this.topPx + this.heightPx);\n    }\n    getRowIndexAtPixel(pixel) {\n        // if pixel before block, return first row\n        const pixelBeforeThisStore = pixel <= this.topPx;\n        if (pixelBeforeThisStore) {\n            const firstNode = this.nodesAfterSort[0];\n            return firstNode.rowIndex;\n        }\n        // if pixel after store, return last row, however the last\n        // row could be a child store\n        const pixelAfterThisStore = pixel >= (this.topPx + this.heightPx);\n        if (pixelAfterThisStore) {\n            const lastRowNode = this.nodesAfterSort[this.nodesAfterSort.length - 1];\n            const lastRowNodeBottomPx = lastRowNode.rowTop + lastRowNode.rowHeight;\n            if (pixel >= lastRowNodeBottomPx && lastRowNode.expanded) {\n                if (lastRowNode.childStore && lastRowNode.childStore.getRowCount() > 0) {\n                    return lastRowNode.childStore.getRowIndexAtPixel(pixel);\n                }\n                if (lastRowNode.detailNode) {\n                    return lastRowNode.detailNode.rowIndex;\n                }\n            }\n            return lastRowNode.rowIndex;\n        }\n        let res = null;\n        this.nodesAfterSort.forEach(rowNode => {\n            const res2 = this.blockUtils.getIndexAtPixel(rowNode, pixel);\n            if (res2 != null) {\n                res = res2;\n            }\n        });\n        const pixelIsPastLastRow = res == null;\n        if (pixelIsPastLastRow) {\n            return this.displayIndexEnd - 1;\n        }\n        return res;\n    }\n    getChildStore(keys) {\n        return this.storeUtils.getChildStore(keys, this, (key) => {\n            const rowNode = this.allRowNodes.find(currentRowNode => {\n                return currentRowNode.key == key;\n            });\n            return rowNode;\n        });\n    }\n    forEachChildStoreShallow(callback) {\n        this.allRowNodes.forEach(rowNode => {\n            const childStore = rowNode.childStore;\n            if (childStore) {\n                callback(childStore);\n            }\n        });\n    }\n    refreshAfterFilter(params) {\n        const serverIsFiltering = this.storeUtils.isServerSideFilterOnServer();\n        const storeIsImpacted = this.storeUtils.isServerRefreshNeeded(this.parentRowNode, this.ssrmParams.rowGroupCols, params);\n        const serverIsFilteringAllLevels = !this.storeUtils.isServerSideOnlyRefreshFilteredGroups();\n        if (serverIsFilteringAllLevels || (serverIsFiltering && storeIsImpacted)) {\n            this.refreshStore(true);\n            this.sortRowNodes();\n            return;\n        }\n        this.filterRowNodes();\n        this.sortRowNodes();\n        this.forEachChildStoreShallow(store => store.refreshAfterFilter(params));\n    }\n    refreshAfterSort(params) {\n        const serverIsSorting = this.storeUtils.isServerSideSortOnServer();\n        const storeIsImpacted = this.storeUtils.isServerRefreshNeeded(this.parentRowNode, this.ssrmParams.rowGroupCols, params);\n        const serverIsSortingAllLevels = this.storeUtils.isServerSideSortAllLevels();\n        if (serverIsSortingAllLevels || (serverIsSorting && storeIsImpacted)) {\n            this.refreshStore(true);\n            this.filterRowNodes();\n            return;\n        }\n        this.filterRowNodes();\n        this.sortRowNodes();\n        this.forEachChildStoreShallow(store => store.refreshAfterSort(params));\n    }\n    applyTransaction(transaction) {\n        // we only apply transactions to loaded state\n        switch (this.getState()) {\n            case RowNodeBlock.STATE_FAILED:\n                return { status: ServerSideTransactionResultStatus.StoreLoadingFailed };\n            case RowNodeBlock.STATE_LOADING:\n                return { status: ServerSideTransactionResultStatus.StoreLoading };\n            case RowNodeBlock.STATE_WAITING_TO_LOAD:\n                return { status: ServerSideTransactionResultStatus.StoreWaitingToLoad };\n        }\n        const applyCallback = this.gridOptionsService.getCallback('isApplyServerSideTransaction');\n        if (applyCallback) {\n            const params = {\n                transaction: transaction,\n                parentNode: this.parentRowNode,\n                storeInfo: this.info,\n                groupLevelInfo: this.info\n            };\n            const apply = applyCallback(params);\n            if (!apply) {\n                return { status: ServerSideTransactionResultStatus.Cancelled };\n            }\n        }\n        const res = {\n            status: ServerSideTransactionResultStatus.Applied,\n            remove: [],\n            update: [],\n            add: []\n        };\n        const nodesToUnselect = [];\n        this.executeAdd(transaction, res);\n        this.executeRemove(transaction, res, nodesToUnselect);\n        this.executeUpdate(transaction, res, nodesToUnselect);\n        this.filterAndSortNodes();\n        this.updateSelection(nodesToUnselect);\n        return res;\n    }\n    updateSelection(nodesToUnselect) {\n        const selectionChanged = nodesToUnselect.length > 0;\n        if (selectionChanged) {\n            this.selectionService.setNodesSelected({\n                newValue: false,\n                nodes: nodesToUnselect,\n                suppressFinishActions: true,\n                clearSelection: false,\n                source: 'rowDataChanged',\n            });\n            const event = {\n                type: Events.EVENT_SELECTION_CHANGED,\n                source: 'rowDataChanged'\n            };\n            this.eventService.dispatchEvent(event);\n        }\n    }\n    executeAdd(rowDataTran, rowNodeTransaction) {\n        const { add, addIndex } = rowDataTran;\n        if (_.missingOrEmpty(add)) {\n            return;\n        }\n        const useIndex = typeof addIndex === 'number' && addIndex >= 0;\n        if (useIndex) {\n            // items get inserted in reverse order for index insertion\n            add.reverse().forEach(item => {\n                const newRowNode = this.createDataNode(item, addIndex);\n                rowNodeTransaction.add.push(newRowNode);\n            });\n        }\n        else {\n            add.forEach(item => {\n                const newRowNode = this.createDataNode(item);\n                rowNodeTransaction.add.push(newRowNode);\n            });\n        }\n    }\n    executeRemove(rowDataTran, rowNodeTransaction, nodesToUnselect) {\n        const { remove } = rowDataTran;\n        if (remove == null) {\n            return;\n        }\n        const rowIdsRemoved = {};\n        remove.forEach(item => {\n            const rowNode = this.lookupRowNode(item);\n            if (!rowNode) {\n                return;\n            }\n            // do delete - setting 'suppressFinishActions = true' to ensure EVENT_SELECTION_CHANGED is not raised for\n            // each row node updated, instead it is raised once by the calling code if any selected nodes exist.\n            if (rowNode.isSelected()) {\n                nodesToUnselect.push(rowNode);\n            }\n            // so row renderer knows to fade row out (and not reposition it)\n            rowNode.clearRowTopAndRowIndex();\n            // NOTE: were we could remove from allLeaveChildren, however _.removeFromArray() is expensive, especially\n            // if called multiple times (eg deleting lots of rows) and if allLeafChildren is a large list\n            rowIdsRemoved[rowNode.id] = true;\n            // _.removeFromArray(this.rootNode.allLeafChildren, rowNode);\n            delete this.allNodesMap[rowNode.id];\n            rowNodeTransaction.remove.push(rowNode);\n            this.nodeManager.removeNode(rowNode);\n        });\n        this.allRowNodes = this.allRowNodes.filter(rowNode => !rowIdsRemoved[rowNode.id]);\n    }\n    executeUpdate(rowDataTran, rowNodeTransaction, nodesToUnselect) {\n        const { update } = rowDataTran;\n        if (update == null) {\n            return;\n        }\n        update.forEach(item => {\n            const rowNode = this.lookupRowNode(item);\n            if (!rowNode) {\n                return;\n            }\n            this.blockUtils.updateDataIntoRowNode(rowNode, item);\n            if (!rowNode.selectable && rowNode.isSelected()) {\n                nodesToUnselect.push(rowNode);\n            }\n            rowNodeTransaction.update.push(rowNode);\n        });\n    }\n    lookupRowNode(data) {\n        const getRowIdFunc = this.gridOptionsService.getCallback('getRowId');\n        let rowNode;\n        if (getRowIdFunc != null) {\n            // find rowNode using id\n            const level = this.level;\n            const parentKeys = this.parentRowNode.getGroupKeys();\n            const id = getRowIdFunc({\n                data,\n                parentKeys: parentKeys.length > 0 ? parentKeys : undefined,\n                level,\n            });\n            rowNode = this.allNodesMap[id];\n            if (!rowNode) {\n                console.error(`AG Grid: could not find row id=${id}, data item was not found for this id`);\n                return null;\n            }\n        }\n        else {\n            // find rowNode using object references\n            rowNode = this.allRowNodes.find(currentRowNode => currentRowNode.data === data);\n            if (!rowNode) {\n                console.error(`AG Grid: could not find data item as object was not found`, data);\n                return null;\n            }\n        }\n        return rowNode;\n    }\n    addStoreStates(result) {\n        result.push({\n            suppressInfiniteScroll: true,\n            route: this.parentRowNode.getGroupKeys(),\n            rowCount: this.allRowNodes.length,\n            info: this.info\n        });\n        this.forEachChildStoreShallow(childStore => childStore.addStoreStates(result));\n    }\n    refreshStore(purge) {\n        if (purge) {\n            const loadingRowsToShow = this.nodesAfterSort ? this.nodesAfterSort.length : 1;\n            this.initialiseRowNodes(loadingRowsToShow);\n        }\n        this.scheduleLoad();\n        this.fireStoreUpdatedEvent();\n    }\n    retryLoads() {\n        if (this.getState() === RowNodeBlock.STATE_FAILED) {\n            this.initialiseRowNodes(1);\n            this.scheduleLoad();\n        }\n        this.forEachChildStoreShallow(store => store.retryLoads());\n    }\n    scheduleLoad() {\n        this.setStateWaitingToLoad();\n        this.rowNodeBlockLoader.checkBlockToLoad();\n    }\n    // gets called 1) row count changed 2) cache purged 3) items inserted\n    fireStoreUpdatedEvent() {\n        // this results in row model firing ModelUpdated.\n        // server side row model also updates the row indexes first\n        const event = {\n            type: Events.EVENT_STORE_UPDATED\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    getRowCount() {\n        return this.nodesAfterSort.length;\n    }\n    getTopLevelRowDisplayedIndex(topLevelIndex) {\n        const rowNode = this.nodesAfterSort[topLevelIndex];\n        return rowNode.rowIndex;\n    }\n    isLastRowIndexKnown() {\n        return this.getState() == RowNodeBlock.STATE_LOADED;\n    }\n    getRowNodesInRange(firstInRange, lastInRange) {\n        const result = [];\n        let inActiveRange = false;\n        // if only one node passed, we start the selection at the top\n        if (_.missing(firstInRange)) {\n            inActiveRange = true;\n        }\n        this.nodesAfterSort.forEach(rowNode => {\n            const hitFirstOrLast = rowNode === firstInRange || rowNode === lastInRange;\n            if (inActiveRange || hitFirstOrLast) {\n                result.push(rowNode);\n            }\n            if (hitFirstOrLast) {\n                inActiveRange = !inActiveRange;\n            }\n        });\n        // inActiveRange will be still true if we never hit the second rowNode\n        const invalidRange = inActiveRange;\n        return invalidRange ? [] : result;\n    }\n    getStoreBounds() {\n        return {\n            topPx: this.topPx,\n            heightPx: this.heightPx,\n        };\n    }\n}\n__decorate$u([\n    Autowired('ssrmStoreUtils')\n], FullStore.prototype, \"storeUtils\", void 0);\n__decorate$u([\n    Autowired('ssrmBlockUtils')\n], FullStore.prototype, \"blockUtils\", void 0);\n__decorate$u([\n    Autowired('columnModel')\n], FullStore.prototype, \"columnModel\", void 0);\n__decorate$u([\n    Autowired('rowNodeBlockLoader')\n], FullStore.prototype, \"rowNodeBlockLoader\", void 0);\n__decorate$u([\n    Autowired('rowNodeSorter')\n], FullStore.prototype, \"rowNodeSorter\", void 0);\n__decorate$u([\n    Autowired('sortController')\n], FullStore.prototype, \"sortController\", void 0);\n__decorate$u([\n    Autowired('selectionService')\n], FullStore.prototype, \"selectionService\", void 0);\n__decorate$u([\n    Autowired('ssrmNodeManager')\n], FullStore.prototype, \"nodeManager\", void 0);\n__decorate$u([\n    Autowired('filterManager')\n], FullStore.prototype, \"filterManager\", void 0);\n__decorate$u([\n    Autowired('ssrmTransactionManager')\n], FullStore.prototype, \"transactionManager\", void 0);\n__decorate$u([\n    PostConstruct\n], FullStore.prototype, \"postConstruct\", null);\n__decorate$u([\n    PreDestroy\n], FullStore.prototype, \"destroyRowNodes\", null);\n\nvar __decorate$t = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass LazyBlockLoader extends BeanStub {\n    constructor(cache, parentNode, storeParams) {\n        super();\n        this.loadingNodes = new Set();\n        this.checkForLoadQueued = false;\n        this.loaderTimeout = undefined;\n        this.nextBlockToLoad = undefined;\n        this.parentNode = parentNode;\n        this.cache = cache;\n        this.storeParams = storeParams;\n    }\n    init() {\n        this.addManagedListener(this.rowNodeBlockLoader, RowNodeBlockLoader.BLOCK_LOADED_EVENT, () => this.queueLoadAction());\n    }\n    isRowLoading(index) {\n        return this.loadingNodes.has(index);\n    }\n    getBlockToLoad() {\n        var _a;\n        const firstRowInViewport = this.api.getFirstDisplayedRow();\n        const lastRowInViewport = this.api.getLastDisplayedRow();\n        // quick look-up for priority rows needing loading in viewport.\n        for (let i = firstRowInViewport; i <= lastRowInViewport; i++) {\n            const node = this.cache.getNodeCachedByDisplayIndex(i);\n            if (!node) {\n                // if no row details, ignore, as row hasn't been created\n                // and it's too expensive to work out its location here\n                continue;\n            }\n            const lazyNode = this.cache.getNodes().getBy('node', node);\n            if (!lazyNode) {\n                continue;\n            }\n            if (this.isRowLoading(lazyNode.index)) {\n                continue;\n            }\n            if (node.__needsRefreshWhenVisible || (node.stub && !node.failedLoad)) {\n                return this.getBlockStartIndexForIndex(lazyNode.index);\n            }\n        }\n        const nodesToRefresh = this.cache.getNodesToRefresh();\n        let nodeToRefresh = null;\n        let nodeToRefreshDist = Number.MAX_SAFE_INTEGER;\n        nodesToRefresh.forEach(node => {\n            if (node.rowIndex == null) {\n                nodeToRefresh = node;\n                return;\n            }\n            const distToViewportTop = Math.abs(firstRowInViewport - node.rowIndex);\n            const distToViewportBottom = Math.abs(node.rowIndex - lastRowInViewport);\n            if (distToViewportTop < nodeToRefreshDist) {\n                nodeToRefresh = node;\n                nodeToRefreshDist = distToViewportTop;\n            }\n            if (distToViewportBottom < nodeToRefreshDist) {\n                nodeToRefresh = node;\n                nodeToRefreshDist = distToViewportBottom;\n            }\n        });\n        const lazyIndex = (_a = this.cache.getNodes().getBy('node', nodeToRefresh)) === null || _a === void 0 ? void 0 : _a.index;\n        return lazyIndex == null ? undefined : this.getBlockStartIndexForIndex(lazyIndex);\n    }\n    reset() {\n        this.loadingNodes.clear();\n        clearTimeout(this.loaderTimeout);\n        this.loaderTimeout = undefined;\n    }\n    executeLoad(startRow, endRow) {\n        var _a;\n        const ssrmParams = this.cache.getSsrmParams();\n        const request = {\n            startRow,\n            endRow,\n            rowGroupCols: ssrmParams.rowGroupCols,\n            valueCols: ssrmParams.valueCols,\n            pivotCols: ssrmParams.pivotCols,\n            pivotMode: ssrmParams.pivotMode,\n            groupKeys: this.parentNode.getGroupKeys(),\n            filterModel: ssrmParams.filterModel,\n            sortModel: ssrmParams.sortModel,\n        };\n        const removeNodesFromLoadingMap = () => {\n            for (let i = 0; i < endRow - startRow; i++) {\n                this.loadingNodes.delete(startRow + i);\n            }\n        };\n        const addNodesToLoadingMap = () => {\n            for (let i = 0; i < endRow - startRow; i++) {\n                this.loadingNodes.add(startRow + i);\n            }\n        };\n        const success = (params) => {\n            this.rowNodeBlockLoader.loadComplete();\n            this.cache.onLoadSuccess(startRow, endRow - startRow, params);\n            removeNodesFromLoadingMap();\n            this.queueLoadAction();\n        };\n        const fail = () => {\n            this.rowNodeBlockLoader.loadComplete();\n            this.cache.onLoadFailed(startRow, endRow - startRow);\n            removeNodesFromLoadingMap();\n            this.queueLoadAction();\n        };\n        const params = {\n            request,\n            successCallback: (rowData, rowCount) => success({ rowData, rowCount }),\n            success,\n            failCallback: fail,\n            fail,\n            parentNode: this.parentNode,\n            api: this.api,\n            columnApi: this.columnApi,\n            context: this.gridOptionsService.context\n        };\n        addNodesToLoadingMap();\n        (_a = this.cache.getSsrmParams().datasource) === null || _a === void 0 ? void 0 : _a.getRows(params);\n    }\n    getNextBlockToLoad() {\n        const result = this.getBlockToLoad();\n        if (result != null && result < 0) {\n            this.getBlockToLoad();\n        }\n        if (result != null) {\n            return [String(result), result + this.getBlockSize()];\n        }\n        return null;\n    }\n    queueLoadCheck() {\n        // already going to check next cycle, ignore.\n        if (this.checkForLoadQueued) {\n            return;\n        }\n        this.checkForLoadQueued = true;\n        window.queueMicrotask(() => {\n            this.checkForLoadQueued = false;\n            this.queueLoadAction();\n        });\n    }\n    queueLoadAction() {\n        var _a;\n        const nextBlockToLoad = this.getNextBlockToLoad();\n        if (!nextBlockToLoad) {\n            // there's no block we should be loading right now, clear the timeouts\n            window.clearTimeout(this.loaderTimeout);\n            this.loaderTimeout = undefined;\n            this.nextBlockToLoad = undefined;\n            return;\n        }\n        // if the next required block has changed, reset the loading timeout\n        if (!this.nextBlockToLoad || (this.nextBlockToLoad[0] !== nextBlockToLoad[0] && this.nextBlockToLoad[1] !== nextBlockToLoad[1])) {\n            this.nextBlockToLoad = nextBlockToLoad;\n            window.clearTimeout(this.loaderTimeout);\n            const [startRowString, endRow] = this.nextBlockToLoad;\n            const startRow = Number(startRowString);\n            this.loaderTimeout = window.setTimeout(() => {\n                if (!this.cache.isAlive()) {\n                    return;\n                }\n                this.loaderTimeout = undefined;\n                this.attemptLoad(startRow, endRow);\n                this.nextBlockToLoad = undefined;\n            }, (_a = this.gridOptionsService.getNum('blockLoadDebounceMillis')) !== null && _a !== void 0 ? _a : 0);\n        }\n    }\n    attemptLoad(start, end) {\n        const availableLoadingCount = this.rowNodeBlockLoader.getAvailableLoadingCount();\n        // too many loads already, ignore the request as a successful request will requeue itself anyway\n        if (availableLoadingCount != null && availableLoadingCount === 0) {\n            return;\n        }\n        this.rowNodeBlockLoader.registerLoads(1);\n        this.executeLoad(start, end);\n        this.queueLoadAction();\n    }\n    getBlockSize() {\n        return this.storeParams.cacheBlockSize || LazyBlockLoader.DEFAULT_BLOCK_SIZE;\n    }\n    getBlockStartIndexForIndex(storeIndex) {\n        const blockSize = this.getBlockSize();\n        return storeIndex - (storeIndex % blockSize);\n    }\n    getBlockBoundsForIndex(storeIndex) {\n        const startOfBlock = this.getBlockStartIndexForIndex(storeIndex);\n        const blockSize = this.getBlockSize();\n        return [startOfBlock, startOfBlock + blockSize];\n    }\n}\nLazyBlockLoader.DEFAULT_BLOCK_SIZE = 100;\n__decorate$t([\n    Autowired('gridApi')\n], LazyBlockLoader.prototype, \"api\", void 0);\n__decorate$t([\n    Autowired('columnApi')\n], LazyBlockLoader.prototype, \"columnApi\", void 0);\n__decorate$t([\n    Autowired('rowNodeBlockLoader')\n], LazyBlockLoader.prototype, \"rowNodeBlockLoader\", void 0);\n__decorate$t([\n    PostConstruct\n], LazyBlockLoader.prototype, \"init\", null);\n\nclass MultiIndexMap {\n    constructor(...indexes) {\n        if (indexes.length < 1) {\n            throw new Error('AG Grid: At least one index must be provided.');\n        }\n        this.indexes = indexes;\n        this.maps = new Map(this.indexes.map(index => [index, new Map()]));\n    }\n    getBy(index, key) {\n        const map = this.maps.get(index);\n        if (!map) {\n            throw new Error(`AG Grid: ${String(index)} not found`);\n        }\n        return map.get(key);\n    }\n    set(item) {\n        this.indexes.forEach(index => {\n            const map = this.maps.get(index);\n            if (!map) {\n                throw new Error(`AG Grid: ${String(index)} not found`);\n            }\n            map.set(item[index], item);\n        });\n    }\n    delete(item) {\n        this.indexes.forEach(index => {\n            const map = this.maps.get(index);\n            if (!map) {\n                throw new Error(`AG Grid: ${String(index)} not found`);\n            }\n            map.delete(item[index]);\n        });\n    }\n    clear() {\n        this.maps.forEach(map => map.clear());\n    }\n    getIterator(index) {\n        const map = this.maps.get(index);\n        if (!map) {\n            throw new Error(`AG Grid: ${String(index)} not found`);\n        }\n        return map.values();\n    }\n    forEach(callback) {\n        const iterator = this.getIterator(this.indexes[0]);\n        let pointer;\n        while (pointer = iterator.next()) {\n            if (pointer.done)\n                break;\n            callback(pointer.value);\n        }\n    }\n    find(callback) {\n        const iterator = this.getIterator(this.indexes[0]);\n        let pointer;\n        while (pointer = iterator.next()) {\n            if (pointer.done)\n                break;\n            if (callback(pointer.value)) {\n                return pointer.value;\n            }\n        }\n    }\n    filter(predicate) {\n        const iterator = this.getIterator(this.indexes[0]);\n        let pointer;\n        const result = [];\n        while (pointer = iterator.next()) {\n            if (pointer.done)\n                break;\n            if (predicate(pointer.value)) {\n                result.push(pointer.value);\n            }\n        }\n        return result;\n    }\n}\n\nvar __decorate$s = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass LazyCache extends BeanStub {\n    constructor(store, numberOfRows, storeParams) {\n        super();\n        /**\n         * Indicates whether this is still the live dataset for this store (used for ignoring old requests after purge)\n         */\n        this.live = true;\n        this.store = store;\n        this.numberOfRows = numberOfRows;\n        this.isLastRowKnown = false;\n        this.storeParams = storeParams;\n    }\n    init() {\n        // initiate the node map to be indexed at 'index', 'id' and 'node' for quick look-up.\n        // it's important id isn't first, as stub nodes overwrite each-other, and the first index is\n        // used for iteration.\n        this.nodeMap = new MultiIndexMap('index', 'id', 'node');\n        this.nodeDisplayIndexMap = new Map();\n        this.nodesToRefresh = new Set();\n        this.defaultNodeIdPrefix = this.blockUtils.createNodeIdPrefix(this.store.getParentNode());\n        this.rowLoader = this.createManagedBean(new LazyBlockLoader(this, this.store.getParentNode(), this.storeParams));\n        this.getRowIdFunc = this.gridOptionsService.getCallback('getRowId');\n        this.isMasterDetail = this.gridOptionsService.isMasterDetail();\n    }\n    destroyRowNodes() {\n        this.numberOfRows = 0;\n        this.nodeMap.forEach(node => this.blockUtils.destroyRowNode(node.node));\n        this.nodeMap.clear();\n        this.nodeDisplayIndexMap.clear();\n        this.nodesToRefresh.clear();\n        this.live = false;\n    }\n    /**\n     * Get the row node for a specific display index from this store\n     * @param displayIndex the display index of the node to find\n     * @returns undefined if the node is not in the store bounds, otherwise will always return a node\n     */\n    getRowByDisplayIndex(displayIndex) {\n        var _a, _b, _c, _d;\n        // if index isn't in store, nothing to return\n        if (!this.store.isDisplayIndexInStore(displayIndex)) {\n            return undefined;\n        }\n        // first try to directly look this node up in the display index map\n        const node = this.nodeDisplayIndexMap.get(displayIndex);\n        if (node) {\n            // if we have the node, check if it needs refreshed when rendered\n            if (node.stub || node.__needsRefreshWhenVisible) {\n                this.rowLoader.queueLoadCheck();\n            }\n            return node;\n        }\n        // next check if this is the first row, if so return a stub node\n        // this is a performance optimisation, as it is the most common scenario\n        // and enables the node - 1 check to kick in more often.\n        if (displayIndex === this.store.getDisplayIndexStart()) {\n            return this.createStubNode(0, displayIndex);\n        }\n        // check if the row immediately prior is available in the store\n        const contiguouslyPreviousNode = this.nodeDisplayIndexMap.get(displayIndex - 1);\n        if (contiguouslyPreviousNode) {\n            // if previous row is master detail, and expanded, this node must be detail\n            if (this.isMasterDetail && contiguouslyPreviousNode.master && contiguouslyPreviousNode.expanded) {\n                return contiguouslyPreviousNode.detailNode;\n            }\n            // if previous row is expanded group, this node will belong to that group.\n            if (contiguouslyPreviousNode.expanded && ((_a = contiguouslyPreviousNode.childStore) === null || _a === void 0 ? void 0 : _a.isDisplayIndexInStore(displayIndex))) {\n                return (_b = contiguouslyPreviousNode.childStore) === null || _b === void 0 ? void 0 : _b.getRowUsingDisplayIndex(displayIndex);\n            }\n            // otherwise, row must be a stub node\n            const lazyCacheNode = this.nodeMap.getBy('node', contiguouslyPreviousNode);\n            return this.createStubNode(lazyCacheNode.index + 1, displayIndex);\n        }\n        const adjacentNodes = this.getSurroundingNodesByDisplayIndex(displayIndex);\n        // if no bounds skipped includes this, calculate from end index\n        if (adjacentNodes == null) {\n            const storeIndexFromEndIndex = this.store.getRowCount() - (this.store.getDisplayIndexEnd() - displayIndex);\n            return this.createStubNode(storeIndexFromEndIndex, displayIndex);\n        }\n        const { previousNode, nextNode } = adjacentNodes;\n        // if the node before this node is expanded, this node might be a child of that node\n        if (previousNode && previousNode.node.expanded && ((_c = previousNode.node.childStore) === null || _c === void 0 ? void 0 : _c.isDisplayIndexInStore(displayIndex))) {\n            return (_d = previousNode.node.childStore) === null || _d === void 0 ? void 0 : _d.getRowUsingDisplayIndex(displayIndex);\n        }\n        // if we have the node after this node, we can calculate the store index of this node by the difference\n        // in display indexes between the two nodes.\n        if (nextNode) {\n            const displayIndexDiff = nextNode.node.rowIndex - displayIndex;\n            const newStoreIndex = nextNode.index - displayIndexDiff;\n            return this.createStubNode(newStoreIndex, displayIndex);\n        }\n        // if no next node, calculate from end index of this store\n        const storeIndexFromEndIndex = this.store.getRowCount() - (this.store.getDisplayIndexEnd() - displayIndex);\n        return this.createStubNode(storeIndexFromEndIndex, displayIndex);\n    }\n    /**\n     * Used for creating and positioning a stub node without firing a store updated event\n     */\n    createStubNode(storeIndex, displayIndex) {\n        // bounds are acquired before creating the node, as otherwise it'll use it's own empty self to calculate\n        const rowBounds = this.store.getRowBounds(displayIndex);\n        const newNode = this.createRowAtIndex(storeIndex, null, node => {\n            node.setRowIndex(displayIndex);\n            node.setRowTop(rowBounds.rowTop);\n            this.nodeDisplayIndexMap.set(displayIndex, node);\n        });\n        this.rowLoader.queueLoadCheck();\n        return newNode;\n    }\n    /**\n     * @param index The row index relative to this store\n     * @returns A rowNode at the given store index\n     */\n    getRowByStoreIndex(index) {\n        var _a;\n        return (_a = this.nodeMap.getBy('index', index)) === null || _a === void 0 ? void 0 : _a.node;\n    }\n    /**\n     * Given a number of rows, skips through the given sequence & row top reference (using default row height)\n     * @param numberOfRowsToSkip number of rows to skip over in the given sequence\n     * @param displayIndexSeq the sequence in which to skip\n     * @param nextRowTop the row top reference in which to skip\n     */\n    skipDisplayIndexes(numberOfRowsToSkip, displayIndexSeq, nextRowTop) {\n        if (numberOfRowsToSkip === 0) {\n            return;\n        }\n        const defaultRowHeight = this.gridOptionsService.getRowHeightAsNumber();\n        displayIndexSeq.skip(numberOfRowsToSkip);\n        nextRowTop.value += numberOfRowsToSkip * defaultRowHeight;\n    }\n    /**\n     * @param displayIndexSeq the number sequence for generating the display index of each row\n     * @param nextRowTop an object containing the next row top value intended to be modified by ref per row\n     */\n    setDisplayIndexes(displayIndexSeq, nextRowTop) {\n        // Create a map of display index nodes for access speed\n        this.nodeDisplayIndexMap.clear();\n        // create an object indexed by store index, as this will sort all of the nodes when we iterate\n        // the object\n        const orderedMap = {};\n        this.nodeMap.forEach(lazyNode => {\n            orderedMap[lazyNode.index] = lazyNode.node;\n        });\n        let lastIndex = -1;\n        // iterate over the nodes in order, setting the display index on each node.\n        for (const stringIndex in orderedMap) {\n            const node = orderedMap[stringIndex];\n            const numericIndex = Number(stringIndex);\n            // if any nodes aren't currently in the store, skip the display indexes too\n            const numberOfRowsToSkip = (numericIndex - 1) - lastIndex;\n            this.skipDisplayIndexes(numberOfRowsToSkip, displayIndexSeq, nextRowTop);\n            // set this nodes index and row top\n            this.blockUtils.setDisplayIndex(node, displayIndexSeq, nextRowTop);\n            this.nodeDisplayIndexMap.set(node.rowIndex, node);\n            // store this index for skipping after this\n            lastIndex = numericIndex;\n        }\n        // need to skip rows until the end of this store\n        const numberOfRowsToSkip = (this.numberOfRows - 1) - lastIndex;\n        this.skipDisplayIndexes(numberOfRowsToSkip, displayIndexSeq, nextRowTop);\n        // this is not terribly efficient, and could probs be improved\n        this.purgeExcessRows();\n    }\n    getRowCount() {\n        return this.numberOfRows;\n    }\n    setRowCount(rowCount, isLastRowIndexKnown) {\n        if (rowCount < 0) {\n            throw new Error('AG Grid: setRowCount can only accept a positive row count.');\n        }\n        this.numberOfRows = rowCount;\n        if (isLastRowIndexKnown != null) {\n            this.isLastRowKnown = isLastRowIndexKnown;\n            if (isLastRowIndexKnown === false) {\n                this.numberOfRows += 1;\n            }\n        }\n        this.fireStoreUpdatedEvent();\n    }\n    getNodes() {\n        return this.nodeMap;\n    }\n    getNodeCachedByDisplayIndex(displayIndex) {\n        var _a;\n        return (_a = this.nodeDisplayIndexMap.get(displayIndex)) !== null && _a !== void 0 ? _a : null;\n    }\n    getNodesToRefresh() {\n        return this.nodesToRefresh;\n    }\n    /**\n     * @returns the previous and next loaded row nodes surrounding the given display index\n     */\n    getSurroundingNodesByDisplayIndex(displayIndex) {\n        let nextNode;\n        let previousNode;\n        this.nodeMap.forEach(lazyNode => {\n            // previous node\n            if (displayIndex > lazyNode.node.rowIndex) {\n                // get the largest previous node\n                if (previousNode == null || previousNode.node.rowIndex < lazyNode.node.rowIndex) {\n                    previousNode = lazyNode;\n                }\n                return;\n            }\n            // next node\n            // get the smallest next node\n            if (nextNode == null || nextNode.node.rowIndex > lazyNode.node.rowIndex) {\n                nextNode = lazyNode;\n                return;\n            }\n        });\n        if (!previousNode && !nextNode)\n            return null;\n        return { previousNode, nextNode };\n    }\n    /**\n     * Get or calculate the display index for a given store index\n     * @param storeIndex the rows index within this store\n     * @returns the rows visible display index relative to the grid\n     */\n    getDisplayIndexFromStoreIndex(storeIndex) {\n        var _a, _b;\n        const nodeAtIndex = this.nodeMap.getBy('index', storeIndex);\n        if (nodeAtIndex) {\n            return nodeAtIndex.node.rowIndex;\n        }\n        let nextNode;\n        let previousNode;\n        this.nodeMap.forEach(lazyNode => {\n            // previous node\n            if (storeIndex > lazyNode.index) {\n                // get the largest previous node\n                if (previousNode == null || previousNode.index < lazyNode.index) {\n                    previousNode = lazyNode;\n                }\n                return;\n            }\n            // next node\n            // get the smallest next node\n            if (nextNode == null || nextNode.index > lazyNode.index) {\n                nextNode = lazyNode;\n                return;\n            }\n        });\n        if (!nextNode) {\n            return this.store.getDisplayIndexEnd() - (this.numberOfRows - storeIndex);\n        }\n        if (!previousNode) {\n            return this.store.getDisplayIndexStart() + storeIndex;\n        }\n        const storeIndexDiff = storeIndex - previousNode.index;\n        const previousDisplayIndex = ((_b = (_a = previousNode.node.childStore) === null || _a === void 0 ? void 0 : _a.getDisplayIndexEnd()) !== null && _b !== void 0 ? _b : previousNode.node.rowIndex);\n        return previousDisplayIndex + storeIndexDiff;\n    }\n    /**\n     * Creates a new row and inserts it at the given index\n     * @param atStoreIndex the node index relative to this store\n     * @param data the data object to populate the node with\n     * @returns the new row node\n     */\n    createRowAtIndex(atStoreIndex, data, createNodeCallback) {\n        // make sure an existing node isn't being overwritten\n        const lazyNode = this.nodeMap.getBy('index', atStoreIndex);\n        // if node already exists, update it or destroy it\n        if (lazyNode) {\n            const { node } = lazyNode;\n            this.nodesToRefresh.delete(node);\n            node.__needsRefreshWhenVisible = false;\n            // if the node is the same, just update the content\n            if (this.doesNodeMatch(data, node)) {\n                this.blockUtils.updateDataIntoRowNode(node, data);\n                return node;\n            }\n            // if there's no id and this is an open group, protect this node from changes\n            if (this.getRowIdFunc == null && node.group && node.expanded) {\n                return node;\n            }\n            // destroy the old node, might be worth caching state here\n            this.destroyRowAtIndex(atStoreIndex);\n        }\n        // if the node already exists elsewhere, update it and move it to the new location\n        if (data && this.getRowIdFunc != null) {\n            const id = this.getRowId(data);\n            const lazyNode = this.nodeMap.getBy('id', id);\n            if (lazyNode) {\n                // delete old lazy node so we can insert it at different location\n                this.nodeMap.delete(lazyNode);\n                const { node, index } = lazyNode;\n                this.blockUtils.updateDataIntoRowNode(node, data);\n                this.nodeMap.set({\n                    id: node.id,\n                    node,\n                    index: atStoreIndex\n                });\n                // mark all of the old block as needsVerify to trigger it for a refresh, as nodes\n                // should not be out of place\n                this.markBlockForVerify(index);\n                return node;\n            }\n        }\n        // node doesn't exist, create a new one\n        const newNode = this.blockUtils.createRowNode(this.store.getRowDetails());\n        if (data != null) {\n            const defaultId = this.getPrefixedId(this.store.getIdSequence().next());\n            this.blockUtils.setDataIntoRowNode(newNode, data, defaultId, undefined);\n            this.blockUtils.checkOpenByDefault(newNode);\n            this.nodeManager.addRowNode(newNode);\n        }\n        // add the new node to the store, has to be done after the display index is calculated so it doesn't take itself into account\n        this.nodeMap.set({\n            id: newNode.id,\n            node: newNode,\n            index: atStoreIndex,\n        });\n        if (createNodeCallback) {\n            createNodeCallback(newNode);\n        }\n        return newNode;\n    }\n    getBlockStates() {\n        const blockCounts = {};\n        const blockStates = {};\n        this.nodeMap.forEach(({ node, index }) => {\n            var _a;\n            const blockStart = this.rowLoader.getBlockStartIndexForIndex(index);\n            if (!node.stub && !node.failedLoad) {\n                blockCounts[blockStart] = ((_a = blockCounts[blockStart]) !== null && _a !== void 0 ? _a : 0) + 1;\n            }\n            let rowState = 'loaded';\n            if (node.failedLoad) {\n                rowState = 'failed';\n            }\n            else if (this.rowLoader.isRowLoading(blockStart)) {\n                rowState = 'loading';\n            }\n            else if (this.nodesToRefresh.has(node) || node.stub) {\n                rowState = 'needsLoading';\n            }\n            if (!blockStates[blockStart]) {\n                blockStates[blockStart] = new Set();\n            }\n            blockStates[blockStart].add(rowState);\n        });\n        const statePriorityMap = {\n            loading: 4,\n            failed: 3,\n            needsLoading: 2,\n            loaded: 1,\n        };\n        const blockPrefix = this.blockUtils.createNodeIdPrefix(this.store.getParentNode());\n        const results = {};\n        Object.entries(blockStates).forEach(([blockStart, uniqueStates]) => {\n            var _a;\n            const sortedStates = [...uniqueStates].sort((a, b) => { var _a, _b; return ((_a = statePriorityMap[a]) !== null && _a !== void 0 ? _a : 0) - ((_b = statePriorityMap[b]) !== null && _b !== void 0 ? _b : 0); });\n            const priorityState = sortedStates[0];\n            const blockNumber = Number(blockStart) / this.rowLoader.getBlockSize();\n            const blockId = blockPrefix ? `${blockPrefix}-${blockNumber}` : String(blockNumber);\n            results[blockId] = {\n                blockNumber,\n                startRow: Number(blockStart),\n                endRow: Number(blockStart) + this.rowLoader.getBlockSize(),\n                pageStatus: priorityState,\n                loadedRowCount: (_a = blockCounts[blockStart]) !== null && _a !== void 0 ? _a : 0,\n            };\n        });\n        return results;\n    }\n    destroyRowAtIndex(atStoreIndex) {\n        const lazyNode = this.nodeMap.getBy('index', atStoreIndex);\n        if (!lazyNode) {\n            return;\n        }\n        this.nodeMap.delete(lazyNode);\n        this.nodeDisplayIndexMap.delete(lazyNode.node.rowIndex);\n        this.nodesToRefresh.delete(lazyNode.node);\n        this.blockUtils.destroyRowNode(lazyNode.node);\n    }\n    getSsrmParams() {\n        return this.store.getSsrmParams();\n    }\n    /**\n     * @param id the base id to be prefixed\n     * @returns a node id with prefix if required\n     */\n    getPrefixedId(id) {\n        if (this.defaultNodeIdPrefix) {\n            return this.defaultNodeIdPrefix + '-' + id;\n        }\n        else {\n            return id.toString();\n        }\n    }\n    markBlockForVerify(rowIndex) {\n        const [start, end] = this.rowLoader.getBlockBoundsForIndex(rowIndex);\n        const lazyNodesInRange = this.nodeMap.filter((lazyNode) => lazyNode.index >= start && lazyNode.index < end);\n        lazyNodesInRange.forEach(({ node }) => {\n            node.__needsRefreshWhenVisible = true;\n        });\n    }\n    doesNodeMatch(data, node) {\n        if (node.stub) {\n            return false;\n        }\n        if (this.getRowIdFunc != null) {\n            const id = this.getRowId(data);\n            return node.id === id;\n        }\n        return node.data === data;\n    }\n    /**\n     * Deletes any stub nodes not within the given range\n     */\n    purgeStubsOutsideOfViewport() {\n        const firstRow = this.api.getFirstDisplayedRow();\n        const lastRow = this.api.getLastDisplayedRow();\n        const firstRowBlockStart = this.rowLoader.getBlockStartIndexForIndex(firstRow);\n        const [_, lastRowBlockEnd] = this.rowLoader.getBlockBoundsForIndex(lastRow);\n        this.nodeMap.forEach(lazyNode => {\n            // failed loads are still useful, so we don't purge them\n            if (this.rowLoader.isRowLoading(lazyNode.index) || lazyNode.node.failedLoad) {\n                return;\n            }\n            if (lazyNode.node.stub && (lazyNode.index < firstRowBlockStart || lazyNode.index > lastRowBlockEnd)) {\n                this.destroyRowAtIndex(lazyNode.index);\n            }\n        });\n    }\n    getBlocksDistanceFromRow(nodes, otherDisplayIndex) {\n        const blockDistanceToMiddle = {};\n        nodes.forEach(({ node, index }) => {\n            const [blockStart, blockEnd] = this.rowLoader.getBlockBoundsForIndex(index);\n            if (blockStart in blockDistanceToMiddle) {\n                return;\n            }\n            const distStart = Math.abs(node.rowIndex - otherDisplayIndex);\n            let distEnd;\n            // may not have an end node if the block came back small \n            const lastLazyNode = this.nodeMap.getBy('index', [blockEnd - 1]);\n            if (lastLazyNode)\n                distEnd = Math.abs(lastLazyNode.node.rowIndex - otherDisplayIndex);\n            const farthest = distEnd == null || distStart < distEnd ? distStart : distEnd;\n            blockDistanceToMiddle[blockStart] = farthest;\n        });\n        return Object.entries(blockDistanceToMiddle);\n    }\n    purgeExcessRows() {\n        var _a;\n        // Delete all stub nodes which aren't in the viewport or already loading\n        this.purgeStubsOutsideOfViewport();\n        if (this.store.getDisplayIndexEnd() == null || this.storeParams.maxBlocksInCache == null) {\n            // if group is collapsed, or max blocks missing, ignore the event\n            return;\n        }\n        const firstRowInViewport = this.api.getFirstDisplayedRow();\n        const lastRowInViewport = this.api.getLastDisplayedRow();\n        // the start storeIndex of every block in this store\n        const allLoadedBlocks = new Set();\n        // the start storeIndex of every displayed block in this store\n        const blocksInViewport = new Set();\n        this.nodeMap.forEach(({ index, node }) => {\n            const blockStart = this.rowLoader.getBlockStartIndexForIndex(index);\n            allLoadedBlocks.add(blockStart);\n            const isInViewport = node.rowIndex >= firstRowInViewport && node.rowIndex <= lastRowInViewport;\n            if (isInViewport) {\n                blocksInViewport.add(blockStart);\n            }\n        });\n        // if the viewport is larger than the max blocks, then the viewport size is minimum cache size\n        const numberOfBlocksToRetain = Math.max(blocksInViewport.size, (_a = this.storeParams.maxBlocksInCache) !== null && _a !== void 0 ? _a : 0);\n        // ensure there is blocks that can be removed\n        const loadedBlockCount = allLoadedBlocks.size;\n        const blocksToRemove = loadedBlockCount - numberOfBlocksToRetain;\n        if (blocksToRemove <= 0) {\n            return;\n        }\n        // the first and last block in the viewport\n        let firstRowBlockStart = Number.MAX_SAFE_INTEGER;\n        let lastRowBlockStart = Number.MIN_SAFE_INTEGER;\n        blocksInViewport.forEach(blockStart => {\n            if (firstRowBlockStart > blockStart) {\n                firstRowBlockStart = blockStart;\n            }\n            if (lastRowBlockStart < blockStart) {\n                lastRowBlockStart = blockStart;\n            }\n        });\n        // all nodes which aren't cached or in the viewport, and so can be removed\n        const disposableNodes = this.nodeMap.filter(({ node, index }) => {\n            const rowBlockStart = this.rowLoader.getBlockStartIndexForIndex(index);\n            const rowBlockInViewport = rowBlockStart >= firstRowBlockStart && rowBlockStart <= lastRowBlockStart;\n            return !rowBlockInViewport && !this.isNodeCached(node);\n        });\n        if (disposableNodes.length === 0) {\n            return;\n        }\n        const midViewportRow = firstRowInViewport + ((lastRowInViewport - firstRowInViewport) / 2);\n        const blockDistanceArray = this.getBlocksDistanceFromRow(disposableNodes, midViewportRow);\n        const blockSize = this.rowLoader.getBlockSize();\n        // sort the blocks by distance from middle of viewport\n        blockDistanceArray.sort((a, b) => Math.sign(b[1] - a[1]));\n        // remove excess blocks, starting from furthest from viewport\n        for (let i = 0; i < Math.min(blocksToRemove, blockDistanceArray.length); i++) {\n            const blockStart = Number(blockDistanceArray[i][0]);\n            for (let x = blockStart; x < blockStart + blockSize; x++) {\n                const lazyNode = this.nodeMap.getBy('index', x);\n                if (!lazyNode || this.isNodeCached(lazyNode.node)) {\n                    continue;\n                }\n                this.destroyRowAtIndex(x);\n            }\n        }\n    }\n    isNodeFocused(node) {\n        const focusedCell = this.focusService.getFocusCellToUseAfterRefresh();\n        if (!focusedCell) {\n            return false;\n        }\n        if (focusedCell.rowPinned != null) {\n            return false;\n        }\n        const hasFocus = focusedCell.rowIndex === node.rowIndex;\n        return hasFocus;\n    }\n    isNodeCached(node) {\n        return (node.isExpandable() && node.expanded) || this.isNodeFocused(node);\n    }\n    extractDuplicateIds(rows) {\n        if (!this.getRowIdFunc == null) {\n            return [];\n        }\n        const newIds = new Set();\n        const duplicates = new Set();\n        rows.forEach(data => {\n            const id = this.getRowId(data);\n            if (newIds.has(id)) {\n                duplicates.add(id);\n                return;\n            }\n            newIds.add(id);\n        });\n        return [...duplicates];\n    }\n    onLoadSuccess(firstRowIndex, numberOfRowsExpected, response) {\n        var _a;\n        if (!this.live)\n            return;\n        const info = (_a = response.groupLevelInfo) !== null && _a !== void 0 ? _a : response.storeInfo;\n        this.store.setStoreInfo(info);\n        if (this.getRowIdFunc != null) {\n            const duplicates = this.extractDuplicateIds(response.rowData);\n            if (duplicates.length > 0) {\n                const duplicateIdText = duplicates.join(', ');\n                console.warn(`AG Grid: Unable to display rows as duplicate row ids (${duplicateIdText}) were returned by the getRowId callback. Please modify the getRowId callback to provide unique ids.`);\n                this.onLoadFailed(firstRowIndex, numberOfRowsExpected);\n                return;\n            }\n        }\n        const wasRefreshing = this.nodesToRefresh.size > 0;\n        response.rowData.forEach((data, responseRowIndex) => {\n            var _a;\n            const rowIndex = firstRowIndex + responseRowIndex;\n            const nodeFromCache = this.nodeMap.getBy('index', rowIndex);\n            // if stub, overwrite\n            if ((_a = nodeFromCache === null || nodeFromCache === void 0 ? void 0 : nodeFromCache.node) === null || _a === void 0 ? void 0 : _a.stub) {\n                this.createRowAtIndex(rowIndex, data);\n                return;\n            }\n            if (nodeFromCache && this.doesNodeMatch(data, nodeFromCache.node)) {\n                this.blockUtils.updateDataIntoRowNode(nodeFromCache.node, data);\n                this.nodesToRefresh.delete(nodeFromCache.node);\n                nodeFromCache.node.__needsRefreshWhenVisible = false;\n                return;\n            }\n            // create row will handle deleting the overwritten row\n            this.createRowAtIndex(rowIndex, data);\n        });\n        const finishedRefreshing = this.nodesToRefresh.size === 0;\n        if (wasRefreshing && finishedRefreshing) {\n            this.fireRefreshFinishedEvent();\n        }\n        if (response.rowCount != undefined && response.rowCount !== -1) {\n            // if the rowCount has been provided, set the row count\n            this.numberOfRows = response.rowCount;\n            this.isLastRowKnown = true;\n        }\n        else if (numberOfRowsExpected > response.rowData.length) {\n            // infer the last row as the response came back short\n            this.numberOfRows = firstRowIndex + response.rowData.length;\n            this.isLastRowKnown = true;\n        }\n        else if (!this.isLastRowKnown) {\n            // add 1 for loading row, as we don't know the last row\n            const lastInferredRow = firstRowIndex + response.rowData.length + 1;\n            if (lastInferredRow > this.numberOfRows) {\n                this.numberOfRows = lastInferredRow;\n            }\n        }\n        if (this.isLastRowKnown) {\n            // delete any rows after the last index\n            const lazyNodesAfterStoreEnd = this.nodeMap.filter(lazyNode => lazyNode.index >= this.numberOfRows);\n            lazyNodesAfterStoreEnd.forEach(lazyNode => this.destroyRowAtIndex(lazyNode.index));\n        }\n        this.fireStoreUpdatedEvent();\n    }\n    fireRefreshFinishedEvent() {\n        const finishedRefreshing = this.nodesToRefresh.size === 0;\n        // if anything refreshing currently, skip.\n        if (!finishedRefreshing) {\n            return;\n        }\n        this.store.fireRefreshFinishedEvent();\n    }\n    isLastRowIndexKnown() {\n        return this.isLastRowKnown;\n    }\n    onLoadFailed(firstRowIndex, numberOfRowsExpected) {\n        var _a;\n        if (!this.live)\n            return;\n        const wasRefreshing = this.nodesToRefresh.size > 0;\n        for (let i = firstRowIndex; i < firstRowIndex + numberOfRowsExpected && i < this.getRowCount(); i++) {\n            let { node } = (_a = this.nodeMap.getBy('index', i)) !== null && _a !== void 0 ? _a : {};\n            if (node) {\n                this.nodesToRefresh.delete(node);\n            }\n            if (!node || !node.stub) {\n                if (node && !node.stub) {\n                    // if node is not a stub, we destroy it and recreate as nodes can't go from data to stub\n                    this.destroyRowAtIndex(i);\n                }\n                node = this.createRowAtIndex(i);\n            }\n            // this node has been refreshed, even if it wasn't successful\n            node.__needsRefreshWhenVisible = false;\n            node.failedLoad = true;\n        }\n        const finishedRefreshing = this.nodesToRefresh.size === 0;\n        if (wasRefreshing && finishedRefreshing) {\n            this.fireRefreshFinishedEvent();\n        }\n        this.fireStoreUpdatedEvent();\n    }\n    markNodesForRefresh() {\n        this.nodeMap.forEach(lazyNode => {\n            if (lazyNode.node.stub && !lazyNode.node.failedLoad) {\n                return;\n            }\n            this.nodesToRefresh.add(lazyNode.node);\n        });\n        this.rowLoader.queueLoadCheck();\n        if (this.isLastRowKnown && this.numberOfRows === 0) {\n            this.numberOfRows = 1;\n            this.isLastRowKnown = false;\n            this.fireStoreUpdatedEvent();\n        }\n    }\n    isNodeInCache(id) {\n        return !!this.nodeMap.getBy('id', id);\n    }\n    // gets called 1) row count changed 2) cache purged 3) items inserted\n    fireStoreUpdatedEvent() {\n        if (!this.live) {\n            return;\n        }\n        this.store.fireStoreUpdatedEvent();\n    }\n    getRowId(data) {\n        if (this.getRowIdFunc == null) {\n            return null;\n        }\n        // find rowNode using id\n        const { level } = this.store.getRowDetails();\n        const parentKeys = this.store.getParentNode().getGroupKeys();\n        const id = this.getRowIdFunc({\n            data,\n            parentKeys: parentKeys.length > 0 ? parentKeys : undefined,\n            level,\n        });\n        return String(id);\n    }\n    updateRowNodes(updates) {\n        if (this.getRowIdFunc == null) {\n            // throw error, as this is type checked in the store. User likely abusing internal apis if here.\n            throw new Error('AG Grid: Insert transactions can only be applied when row ids are supplied.');\n        }\n        const updatedNodes = [];\n        updates.forEach(data => {\n            const id = this.getRowId(data);\n            const lazyNode = this.nodeMap.getBy('id', id);\n            if (lazyNode) {\n                this.blockUtils.updateDataIntoRowNode(lazyNode.node, data);\n                updatedNodes.push(lazyNode.node);\n            }\n        });\n        return updatedNodes;\n    }\n    insertRowNodes(inserts, indexToAdd) {\n        // if missing and we know the last row, we're inserting at the end\n        const addIndex = indexToAdd == null && this.isLastRowKnown ? this.store.getRowCount() : indexToAdd;\n        // can't insert nodes past the end of the store\n        if (addIndex == null || this.store.getRowCount() < addIndex) {\n            return [];\n        }\n        if (this.getRowIdFunc == null) {\n            // throw error, as this is type checked in the store. User likely abusing internal apis if here.\n            throw new Error('AG Grid: Insert transactions can only be applied when row ids are supplied.');\n        }\n        const uniqueInsertsMap = {};\n        inserts.forEach(data => {\n            const dataId = this.getRowId(data);\n            if (dataId && this.isNodeInCache(dataId)) {\n                return;\n            }\n            uniqueInsertsMap[dataId] = data;\n        });\n        const uniqueInserts = Object.values(uniqueInsertsMap);\n        let numberOfInserts = uniqueInserts.length;\n        if (numberOfInserts === 0) {\n            return [];\n        }\n        const nodesToMove = this.nodeMap.filter(node => node.index >= addIndex);\n        // delete all nodes which need moved first, so they don't get overwritten\n        nodesToMove.forEach(lazyNode => this.nodeMap.delete(lazyNode));\n        // then move the nodes to their new locations\n        nodesToMove.forEach(lazyNode => {\n            this.nodeMap.set({\n                node: lazyNode.node,\n                index: lazyNode.index + numberOfInserts,\n                id: lazyNode.id,\n            });\n        });\n        // increase the store size to accommodate\n        this.numberOfRows += numberOfInserts;\n        // finally insert the new rows\n        return uniqueInserts.map((data, uniqueInsertOffset) => this.createRowAtIndex(addIndex + uniqueInsertOffset, data));\n    }\n    getOrderedNodeMap() {\n        const obj = {};\n        this.nodeMap.forEach(node => obj[node.index] = node);\n        return obj;\n    }\n    clearDisplayIndexes() {\n        this.nodeDisplayIndexMap.clear();\n    }\n    removeRowNodes(idsToRemove) {\n        if (this.getRowIdFunc == null) {\n            // throw error, as this is type checked in the store. User likely abusing internal apis if here.\n            throw new Error('AG Grid: Insert transactions can only be applied when row ids are supplied.');\n        }\n        const removedNodes = [];\n        const nodesToVerify = [];\n        // track how many nodes have been deleted, as when we pass other nodes we need to shift them up\n        let deletedNodeCount = 0;\n        const remainingIdsToRemove = [...idsToRemove];\n        const allNodes = this.getOrderedNodeMap();\n        let contiguousIndex = -1;\n        for (let stringIndex in allNodes) {\n            contiguousIndex += 1;\n            const node = allNodes[stringIndex];\n            // finding the index allows the use of splice which should be slightly faster than both a check and filter\n            const matchIndex = remainingIdsToRemove.findIndex(idToRemove => idToRemove === node.id);\n            if (matchIndex !== -1) {\n                // found node, remove it from nodes to remove\n                remainingIdsToRemove.splice(matchIndex, 1);\n                this.destroyRowAtIndex(Number(stringIndex));\n                removedNodes.push(node.node);\n                deletedNodeCount += 1;\n                continue;\n            }\n            // no nodes removed and this node doesn't match, so no need to shift\n            if (deletedNodeCount === 0) {\n                continue;\n            }\n            const numericStoreIndex = Number(stringIndex);\n            if (contiguousIndex !== numericStoreIndex) {\n                nodesToVerify.push(node.node);\n            }\n            // shift normal node up by number of deleted prior to this point\n            this.nodeMap.delete(allNodes[stringIndex]);\n            this.nodeMap.set({\n                id: node.id,\n                node: node.node,\n                index: numericStoreIndex - deletedNodeCount,\n            });\n        }\n        this.numberOfRows -= this.isLastRowIndexKnown() ? idsToRemove.length : deletedNodeCount;\n        if (remainingIdsToRemove.length > 0 && nodesToVerify.length > 0) {\n            nodesToVerify.forEach(node => node.__needsRefreshWhenVisible = true);\n            this.rowLoader.queueLoadCheck();\n        }\n        return removedNodes;\n    }\n}\n__decorate$s([\n    Autowired('gridApi')\n], LazyCache.prototype, \"api\", void 0);\n__decorate$s([\n    Autowired('ssrmBlockUtils')\n], LazyCache.prototype, \"blockUtils\", void 0);\n__decorate$s([\n    Autowired('focusService')\n], LazyCache.prototype, \"focusService\", void 0);\n__decorate$s([\n    Autowired('ssrmNodeManager')\n], LazyCache.prototype, \"nodeManager\", void 0);\n__decorate$s([\n    PostConstruct\n], LazyCache.prototype, \"init\", null);\n__decorate$s([\n    PreDestroy\n], LazyCache.prototype, \"destroyRowNodes\", null);\n\nvar __decorate$r = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass LazyStore extends BeanStub {\n    constructor(ssrmParams, storeParams, parentRowNode) {\n        super();\n        this.idSequence = new NumberSequence();\n        this.ssrmParams = ssrmParams;\n        this.parentRowNode = parentRowNode;\n        this.storeParams = storeParams;\n        this.level = parentRowNode.level + 1;\n        this.group = ssrmParams.rowGroupCols ? this.level < ssrmParams.rowGroupCols.length : false;\n        this.leafGroup = ssrmParams.rowGroupCols ? this.level === ssrmParams.rowGroupCols.length - 1 : false;\n        this.info = {};\n    }\n    init() {\n        let numberOfRows = 1;\n        if (this.level === 0) {\n            numberOfRows = this.storeUtils.getServerSideInitialRowCount();\n        }\n        this.cache = this.createManagedBean(new LazyCache(this, numberOfRows, this.storeParams));\n        const usingTreeData = this.gridOptionsService.isTreeData();\n        if (!usingTreeData && this.group) {\n            const groupColVo = this.ssrmParams.rowGroupCols[this.level];\n            this.groupField = groupColVo.field;\n            this.rowGroupColumn = this.columnModel.getRowGroupColumns()[this.level];\n        }\n    }\n    destroyRowNodes() {\n        this.displayIndexStart = undefined;\n        this.displayIndexEnd = undefined;\n        this.destroyBean(this.cache);\n    }\n    /**\n     * Applies a given transaction to the data set within this store\n     *\n     * @param transaction an object containing delta instructions determining the changes to apply to this store\n     * @returns an object determining the status of this transaction and effected nodes\n     */\n    applyTransaction(transaction) {\n        var _a, _b, _c;\n        const idFunc = this.gridOptionsService.getCallback('getRowId');\n        if (!idFunc) {\n            console.warn('AG Grid: getRowId callback must be implemented for transactions to work. Transaction was ignored.');\n            return {\n                status: ServerSideTransactionResultStatus.Cancelled,\n            };\n        }\n        const applyCallback = this.gridOptionsService.getCallback('isApplyServerSideTransaction');\n        if (applyCallback) {\n            const params = {\n                transaction: transaction,\n                parentNode: this.parentRowNode,\n                storeInfo: this.info,\n                groupLevelInfo: this.info\n            };\n            const apply = applyCallback(params);\n            if (!apply) {\n                return { status: ServerSideTransactionResultStatus.Cancelled };\n            }\n        }\n        let updatedNodes = undefined;\n        if ((_a = transaction.update) === null || _a === void 0 ? void 0 : _a.length) {\n            updatedNodes = this.cache.updateRowNodes(transaction.update);\n        }\n        let insertedNodes = undefined;\n        if ((_b = transaction.add) === null || _b === void 0 ? void 0 : _b.length) {\n            let addIndex = transaction.addIndex;\n            if (addIndex != null && addIndex < 0) {\n                addIndex = undefined;\n            }\n            insertedNodes = this.cache.insertRowNodes(transaction.add, addIndex);\n        }\n        let removedNodes = undefined;\n        if ((_c = transaction.remove) === null || _c === void 0 ? void 0 : _c.length) {\n            const allIdsToRemove = transaction.remove.map(data => (idFunc({ level: this.level, parentKeys: this.parentRowNode.getGroupKeys(), data })));\n            const allUniqueIdsToRemove = [...new Set(allIdsToRemove)];\n            removedNodes = this.cache.removeRowNodes(allUniqueIdsToRemove);\n        }\n        this.updateSelectionAfterTransaction(updatedNodes, removedNodes);\n        return {\n            status: ServerSideTransactionResultStatus.Applied,\n            update: updatedNodes,\n            add: insertedNodes,\n            remove: removedNodes,\n        };\n    }\n    updateSelectionAfterTransaction(updatedNodes, removedNodes) {\n        const nodesToDeselect = [];\n        updatedNodes === null || updatedNodes === void 0 ? void 0 : updatedNodes.forEach(node => {\n            if (node.isSelected() && !node.selectable) {\n                nodesToDeselect.push(node);\n            }\n        });\n        removedNodes === null || removedNodes === void 0 ? void 0 : removedNodes.forEach(node => {\n            if (node.isSelected()) {\n                nodesToDeselect.push(node);\n            }\n        });\n        if (nodesToDeselect.length) {\n            this.selectionService.setNodesSelected({\n                newValue: false,\n                clearSelection: false,\n                nodes: nodesToDeselect,\n                source: 'rowDataChanged',\n            });\n        }\n    }\n    /**\n     * Clear the display indexes, used for fading rows out when stores are not being destroyed\n     */\n    clearDisplayIndexes() {\n        this.displayIndexStart = undefined;\n        this.displayIndexEnd = undefined;\n        this.cache.getNodes().forEach(lazyNode => this.blockUtils.clearDisplayIndex(lazyNode.node));\n        if (this.parentRowNode.sibling) {\n            this.blockUtils.clearDisplayIndex(this.parentRowNode.sibling);\n        }\n        this.cache.clearDisplayIndexes();\n    }\n    /**\n     * @returns an index representing the last sequentially displayed row in the grid for this store\n     */\n    getDisplayIndexStart() {\n        return this.displayIndexStart;\n    }\n    /**\n     * @returns the index representing one after the last sequentially displayed row in the grid for this store\n     */\n    getDisplayIndexEnd() {\n        return this.displayIndexEnd;\n    }\n    /**\n     * @returns the virtual size of this store\n     */\n    getRowCount() {\n        if (this.parentRowNode.sibling) {\n            return this.cache.getRowCount() + 1;\n        }\n        return this.cache.getRowCount();\n    }\n    /**\n     * Sets the current row count of the store, and whether the last row index is known\n     */\n    setRowCount(rowCount, isLastRowIndexKnown) {\n        this.cache.setRowCount(rowCount, isLastRowIndexKnown);\n    }\n    /**\n     * Given a display index, returns whether that row is within this store or a child store of this store\n     *\n     * @param displayIndex the visible index of a row\n     * @returns whether or not the row exists within this store\n     */\n    isDisplayIndexInStore(displayIndex) {\n        if (this.cache.getRowCount() === 0)\n            return false;\n        return this.displayIndexStart <= displayIndex && displayIndex < this.getDisplayIndexEnd();\n    }\n    /**\n     * Recursively sets up the display indexes and top position of every node belonging to this store.\n     *\n     * Called after a row height changes, or a store updated event.\n     *\n     * @param displayIndexSeq the number sequence for generating the display index of each row\n     * @param nextRowTop an object containing the next row top value intended to be modified by ref per row\n     */\n    setDisplayIndexes(displayIndexSeq, nextRowTop) {\n        this.displayIndexStart = displayIndexSeq.peek();\n        this.topPx = nextRowTop.value;\n        // delegate to the store to set the row display indexes\n        this.cache.setDisplayIndexes(displayIndexSeq, nextRowTop);\n        if (this.parentRowNode.sibling) {\n            this.blockUtils.setDisplayIndex(this.parentRowNode.sibling, displayIndexSeq, nextRowTop);\n        }\n        this.displayIndexEnd = displayIndexSeq.peek();\n        this.heightPx = nextRowTop.value - this.topPx;\n    }\n    /**\n     * Recursively applies a provided function to every node\n     *\n     * For the purpose of exclusively server side filtered stores, this is the same as getNodes().forEachDeepAfterFilterAndSort\n     */\n    forEachStoreDeep(callback, sequence = new NumberSequence()) {\n        callback(this, sequence.next());\n        this.cache.getNodes().forEach(lazyNode => {\n            const childCache = lazyNode.node.childStore;\n            if (childCache) {\n                childCache.forEachStoreDeep(callback, sequence);\n            }\n        });\n    }\n    /**\n     * Recursively applies a provided function to every node\n     *\n     * For the purpose of exclusively server side filtered stores, this is the same as getNodes().forEachDeepAfterFilterAndSort\n     */\n    forEachNodeDeep(callback, sequence = new NumberSequence()) {\n        this.cache.getNodes().forEach(lazyNode => {\n            callback(lazyNode.node, sequence.next());\n            const childCache = lazyNode.node.childStore;\n            if (childCache) {\n                childCache.forEachNodeDeep(callback, sequence);\n            }\n        });\n    }\n    /**\n     * Recursively applies a provided function to every node\n     *\n     * For the purpose of exclusively server side filtered stores, this is the same as getNodes().forEachDeep\n     */\n    forEachNodeDeepAfterFilterAndSort(callback, sequence = new NumberSequence()) {\n        const orderedNodes = this.cache.getOrderedNodeMap();\n        for (let key in orderedNodes) {\n            const lazyNode = orderedNodes[key];\n            callback(lazyNode.node, sequence.next());\n            const childCache = lazyNode.node.childStore;\n            if (childCache) {\n                childCache.forEachNodeDeepAfterFilterAndSort(callback, sequence);\n            }\n        }\n    }\n    /**\n     * Removes the failed status from all nodes, and marks them as stub to encourage reloading\n     */\n    retryLoads() {\n        this.cache.getNodes().forEach(({ node }) => {\n            if (node.failedLoad) {\n                node.failedLoad = false;\n                node.__needsRefreshWhenVisible = true;\n                node.stub = true;\n            }\n        });\n        this.forEachChildStoreShallow(store => store.retryLoads());\n        this.fireStoreUpdatedEvent();\n    }\n    /**\n     * Given a display index, returns the row at that location.\n     *\n     * @param displayRowIndex the displayed index within the grid to search for\n     * @returns the row node if the display index falls within the store, if it didn't exist this will create a new stub to return\n     */\n    getRowUsingDisplayIndex(displayRowIndex) {\n        if (this.parentRowNode.sibling && displayRowIndex === this.parentRowNode.sibling.rowIndex) {\n            return this.parentRowNode.sibling;\n        }\n        return this.cache.getRowByDisplayIndex(displayRowIndex);\n    }\n    /**\n     * Given a display index, returns the row top and height for the row at that index.\n     *\n     * @param displayIndex the display index of the node\n     * @returns an object containing the rowTop and rowHeight of the node at the given displayIndex\n     */\n    getRowBounds(displayIndex) {\n        var _a;\n        if (!this.isDisplayIndexInStore(displayIndex)) {\n            return null;\n        }\n        const thisNode = this.cache.getNodeCachedByDisplayIndex(displayIndex);\n        if (thisNode) {\n            const boundsFromRow = this.blockUtils.extractRowBounds(thisNode, displayIndex);\n            if (boundsFromRow) {\n                return boundsFromRow;\n            }\n        }\n        const { previousNode, nextNode } = (_a = this.cache.getSurroundingNodesByDisplayIndex(displayIndex)) !== null && _a !== void 0 ? _a : {};\n        // previous node may equal, or catch via detail node or child of group\n        if (previousNode) {\n            const boundsFromRow = this.blockUtils.extractRowBounds(previousNode.node, displayIndex);\n            if (boundsFromRow != null) {\n                return boundsFromRow;\n            }\n        }\n        const defaultRowHeight = this.gridOptionsService.getRowHeightAsNumber();\n        // if node after this, can calculate backwards (and ignore detail/grouping)\n        if (nextNode) {\n            const numberOfRowDiff = (nextNode.node.rowIndex - displayIndex) * defaultRowHeight;\n            return {\n                rowTop: nextNode.node.rowTop - numberOfRowDiff,\n                rowHeight: defaultRowHeight,\n            };\n        }\n        // otherwise calculate from end of store\n        const lastTop = this.topPx + this.heightPx;\n        const numberOfRowDiff = (this.getDisplayIndexEnd() - displayIndex) * defaultRowHeight;\n        return {\n            rowTop: lastTop - numberOfRowDiff,\n            rowHeight: defaultRowHeight,\n        };\n    }\n    /**\n     * Given a vertical pixel, determines whether this store contains a row at that pixel\n     *\n     * @param pixel a vertical pixel position from the grid\n     * @returns whether that pixel points to a virtual space belonging to this store\n     */\n    isPixelInRange(pixel) {\n        return pixel >= this.topPx && pixel < (this.topPx + this.heightPx);\n    }\n    /**\n     * Given a vertical pixel, returns the row existing at that pixel location\n     *\n     * @param pixel a vertical pixel position from the grid\n     * @returns the display index at the given pixel location\n     */\n    getRowIndexAtPixel(pixel) {\n        if (pixel < this.topPx) {\n            return this.getDisplayIndexStart();\n        }\n        if (pixel >= this.topPx + this.heightPx) {\n            return this.getDisplayIndexEnd() - 1;\n        }\n        let distToPreviousNodeTop = Number.MAX_SAFE_INTEGER;\n        let previousNode = null;\n        let distToNextNodeTop = Number.MAX_SAFE_INTEGER;\n        let nextNode = null;\n        this.cache.getNodes().forEach(({ node }) => {\n            const distBetween = Math.abs(pixel - node.rowTop);\n            // previous node\n            if (node.rowTop < pixel) {\n                if (distBetween < distToPreviousNodeTop) {\n                    distToPreviousNodeTop = distBetween;\n                    previousNode = node;\n                }\n                return;\n            }\n            // next node\n            if (distBetween < distToNextNodeTop) {\n                distToNextNodeTop = distBetween;\n                nextNode = node;\n            }\n        });\n        // cast these back as typescript doesn't understand the forEach above\n        previousNode = previousNode;\n        nextNode = nextNode;\n        // previous node may equal, or catch via detail node or child of group\n        if (previousNode) {\n            const indexOfRow = this.blockUtils.getIndexAtPixel(previousNode, pixel);\n            if (indexOfRow != null) {\n                return indexOfRow;\n            }\n        }\n        const defaultRowHeight = this.gridOptionsService.getRowHeightAsNumber();\n        // if node after this, can calculate backwards (and ignore detail/grouping)\n        if (nextNode) {\n            const nextTop = nextNode.rowTop;\n            const numberOfRowDiff = Math.ceil((nextTop - pixel) / defaultRowHeight);\n            return nextNode.rowIndex - numberOfRowDiff;\n        }\n        // otherwise calculate from end of store\n        const nextTop = this.topPx + this.heightPx;\n        const numberOfRowDiff = Math.floor((nextTop - pixel) / defaultRowHeight);\n        return this.getDisplayIndexEnd() - numberOfRowDiff;\n    }\n    /**\n     * Given a path of group keys, returns the child store for that group.\n     *\n     * @param keys the grouping path to the desired store\n     * @returns the child store for the given keys, or null if not found\n     */\n    getChildStore(keys) {\n        return this.storeUtils.getChildStore(keys, this, (key) => {\n            const lazyNode = this.cache.getNodes().find(lazyNode => lazyNode.node.key == key);\n            if (!lazyNode) {\n                return null;\n            }\n            return lazyNode.node;\n        });\n    }\n    /**\n     * Executes a provided callback on each child store belonging to this store\n     *\n     * @param cb the callback to execute\n     */\n    forEachChildStoreShallow(cb) {\n        this.cache.getNodes().forEach(({ node }) => {\n            if (node.childStore) {\n                cb(node.childStore);\n            }\n        });\n    }\n    /**\n     * Executes after a change to sorting, determines recursively whether this store or a child requires refreshed.\n     *\n     * If a purge refresh occurs, the row count is preserved.\n     *\n     * @param params a set of properties pertaining to the sort changes\n     */\n    refreshAfterSort(params) {\n        const serverSortsAllLevels = this.storeUtils.isServerSideSortAllLevels();\n        if (serverSortsAllLevels || this.storeUtils.isServerRefreshNeeded(this.parentRowNode, this.ssrmParams.rowGroupCols, params)) {\n            const oldCount = this.cache.getRowCount();\n            this.destroyBean(this.cache);\n            this.cache = this.createManagedBean(new LazyCache(this, oldCount, this.storeParams));\n            this.fireStoreUpdatedEvent();\n            return;\n        }\n        // call refreshAfterSort on children, as we did not purge.\n        // if we did purge, no need to do this as all children were destroyed\n        this.forEachChildStoreShallow(store => store.refreshAfterSort(params));\n    }\n    /**\n     * Executes after a change to filtering, determines recursively whether this store or a child requires refreshed.\n     *\n     * If a refresh occurs, the row count is reset.\n     *\n     * @param params a set of properties pertaining to the filter changes\n     */\n    refreshAfterFilter(params) {\n        const serverFiltersAllLevels = !this.storeUtils.isServerSideOnlyRefreshFilteredGroups();\n        if (serverFiltersAllLevels || this.storeUtils.isServerRefreshNeeded(this.parentRowNode, this.ssrmParams.rowGroupCols, params)) {\n            this.refreshStore(true);\n            return;\n        }\n        // call refreshAfterSort on children, as we did not purge.\n        // if we did purge, no need to do this as all children were destroyed\n        this.forEachChildStoreShallow(store => store.refreshAfterFilter(params));\n    }\n    /**\n     * Marks all existing nodes as requiring reloaded, and triggers a load check\n     *\n     * @param purge whether to remove all nodes and data in favour of stub nodes\n     */\n    refreshStore(purge) {\n        if (purge) {\n            this.destroyBean(this.cache);\n            this.cache = this.createManagedBean(new LazyCache(this, 1, this.storeParams));\n            this.fireStoreUpdatedEvent();\n            return;\n        }\n        this.cache.markNodesForRefresh();\n    }\n    /**\n     * Used for pagination, given a local/store index, returns the display index of that row\n     *\n     * @param topLevelIndex the store index of a row\n     * @returns the display index for the given store index\n     */\n    getTopLevelRowDisplayedIndex(topLevelIndex) {\n        const displayIndex = this.cache.getDisplayIndexFromStoreIndex(topLevelIndex);\n        return displayIndex !== null && displayIndex !== void 0 ? displayIndex : topLevelIndex;\n    }\n    /**\n     * Used for pagination to determine if the last page is known, and for aria to determine if the last grid row is known\n     *\n     * @returns whether the last index of this store is known, or if lazy loading still required\n     */\n    isLastRowIndexKnown() {\n        return this.cache.isLastRowIndexKnown();\n    }\n    /**\n     * Used by the selection service to select a range of nodes\n     *\n     * @param firstInRange the first node in the range to find\n     * @param lastInRange the last node in the range to find\n     * @returns a range of nodes between firstInRange and lastInRange inclusive\n     */\n    getRowNodesInRange(firstInRange, lastInRange) {\n        // if only one node passed, we start the selection at the top\n        if (_.missing(firstInRange)) ;\n        return this.cache.getNodes().filter(({ node }) => {\n            return node.rowIndex >= firstInRange.rowIndex && node.rowIndex <= lastInRange.rowIndex;\n        }).map(({ node }) => node);\n    }\n    /**\n     * Mutates a given array to add this stores state, and recursively add all the children store states.\n     *\n     * @param result a mutable results array\n     */\n    addStoreStates(result) {\n        result.push({\n            suppressInfiniteScroll: false,\n            route: this.parentRowNode.getGroupKeys(),\n            rowCount: this.getRowCount(),\n            lastRowIndexKnown: this.isLastRowIndexKnown(),\n            info: this.info,\n            maxBlocksInCache: this.storeParams.maxBlocksInCache,\n            cacheBlockSize: this.storeParams.cacheBlockSize,\n        });\n        this.forEachChildStoreShallow(childStore => childStore.addStoreStates(result));\n    }\n    getIdSequence() {\n        return this.idSequence;\n    }\n    getParentNode() {\n        return this.parentRowNode;\n    }\n    getRowDetails() {\n        return {\n            field: this.groupField,\n            group: this.group,\n            leafGroup: this.leafGroup,\n            level: this.level,\n            parent: this.parentRowNode,\n            rowGroupColumn: this.rowGroupColumn,\n        };\n    }\n    getSsrmParams() {\n        return this.ssrmParams;\n    }\n    setStoreInfo(info) {\n        if (info) {\n            Object.assign(this.info, info);\n        }\n    }\n    // gets called 1) row count changed 2) cache purged\n    fireStoreUpdatedEvent() {\n        // this results in row model firing ModelUpdated.\n        // server side row model also updates the row indexes first\n        const event = {\n            type: Events.EVENT_STORE_UPDATED\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    // gets called when row data updated, and no more refreshing needed\n    fireRefreshFinishedEvent() {\n        const event = {\n            type: Events.EVENT_STORE_REFRESHED,\n            route: this.parentRowNode.getRoute(),\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    getBlockStates() {\n        return this.cache.getBlockStates();\n    }\n    getStoreBounds() {\n        return {\n            topPx: this.topPx,\n            heightPx: this.heightPx,\n        };\n    }\n}\n__decorate$r([\n    Autowired('ssrmBlockUtils')\n], LazyStore.prototype, \"blockUtils\", void 0);\n__decorate$r([\n    Autowired('ssrmStoreUtils')\n], LazyStore.prototype, \"storeUtils\", void 0);\n__decorate$r([\n    Autowired('columnModel')\n], LazyStore.prototype, \"columnModel\", void 0);\n__decorate$r([\n    Autowired('selectionService')\n], LazyStore.prototype, \"selectionService\", void 0);\n__decorate$r([\n    PostConstruct\n], LazyStore.prototype, \"init\", null);\n__decorate$r([\n    PreDestroy\n], LazyStore.prototype, \"destroyRowNodes\", null);\n\nvar __decorate$q = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ServerSideRowModel = class ServerSideRowModel extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.onRowHeightChanged_debounced = _.debounce(this.onRowHeightChanged.bind(this), 100);\n        this.pauseStoreUpdateListening = false;\n        this.started = false;\n    }\n    // we don't implement as lazy row heights is not supported in this row model\n    ensureRowHeightsValid() { return false; }\n    start() {\n        this.started = true;\n        const datasource = this.gridOptionsService.get('serverSideDatasource');\n        if (datasource) {\n            this.setDatasource(datasource);\n        }\n    }\n    destroyDatasource() {\n        if (!this.datasource) {\n            return;\n        }\n        if (this.datasource.destroy) {\n            this.datasource.destroy();\n        }\n        this.rowRenderer.datasourceChanged();\n        this.datasource = undefined;\n    }\n    addEventListeners() {\n        this.addManagedListener(this.eventService, Events.EVENT_NEW_COLUMNS_LOADED, this.onColumnEverything.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_STORE_UPDATED, this.onStoreUpdated.bind(this));\n        const resetListener = this.resetRootStore.bind(this);\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_VALUE_CHANGED, resetListener);\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_CHANGED, resetListener);\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, resetListener);\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, resetListener);\n        this.verifyProps();\n    }\n    verifyProps() {\n        if (this.gridOptionsService.exists('initialGroupOrderComparator')) {\n            const message = `AG Grid: initialGroupOrderComparator cannot be used with Server Side Row Model. If using Full Store, then provide the rows to the grid in the desired sort order. If using Infinite Scroll, then sorting is done on the server side, nothing to do with the client.`;\n            _.doOnce(() => console.warn(message), 'SSRM.InitialGroupOrderComparator');\n        }\n        if (this.gridOptionsService.isRowSelection() && !this.gridOptionsService.exists('getRowId')) {\n            const message = `AG Grid: getRowId callback must be provided for Server Side Row Model selection to work correctly.`;\n            _.doOnce(() => console.warn(message), 'SSRM.SelectionNeedsRowNodeIdFunc');\n        }\n    }\n    setDatasource(datasource) {\n        // sometimes React, due to async, can call gridApi.setDatasource() before we have started.\n        // this happens when React app does this:\n        //      useEffect(() => setDatasource(ds), []);\n        // thus if we set the datasource before the grid UI has finished initialising, we do not set it,\n        // and the ssrm.start() method will set the datasoure when the grid is ready.\n        if (!this.started) {\n            return;\n        }\n        this.destroyDatasource();\n        this.datasource = datasource;\n        this.resetRootStore();\n    }\n    isLastRowIndexKnown() {\n        const cache = this.getRootStore();\n        if (!cache) {\n            return false;\n        }\n        return cache.isLastRowIndexKnown();\n    }\n    onColumnEverything() {\n        // if first time, always reset\n        if (!this.storeParams) {\n            this.resetRootStore();\n            return;\n        }\n        // check if anything pertaining to fetching data has changed, and if it has, reset, but if\n        // it has not, don't reset\n        const rowGroupColumnVos = this.columnsToValueObjects(this.columnModel.getRowGroupColumns());\n        const valueColumnVos = this.columnsToValueObjects(this.columnModel.getValueColumns());\n        const pivotColumnVos = this.columnsToValueObjects(this.columnModel.getPivotColumns());\n        // compares two sets of columns, ensuring no columns have been added or removed (unless specified via allowRemovedColumns)\n        // if the columns are found, also ensures the field and aggFunc properties have not been changed.\n        const areColsSame = (params) => {\n            const oldColsMap = {};\n            params.oldCols.forEach(col => oldColsMap[col.id] = col);\n            const allColsUnchanged = params.newCols.every(col => {\n                const equivalentCol = oldColsMap[col.id];\n                if (equivalentCol) {\n                    delete oldColsMap[col.id];\n                }\n                return equivalentCol && equivalentCol.field === col.field && equivalentCol.aggFunc === col.aggFunc;\n            });\n            const missingCols = !params.allowRemovedColumns && !!Object.values(oldColsMap).length;\n            return allColsUnchanged && !missingCols;\n        };\n        const sortModelDifferent = !_.jsonEquals(this.storeParams.sortModel, this.sortListener.extractSortModel());\n        const rowGroupDifferent = !areColsSame({\n            oldCols: this.storeParams.rowGroupCols,\n            newCols: rowGroupColumnVos,\n        });\n        const pivotDifferent = !areColsSame({\n            oldCols: this.storeParams.pivotCols,\n            newCols: pivotColumnVos,\n        });\n        const valuesDifferent = !!(rowGroupColumnVos === null || rowGroupColumnVos === void 0 ? void 0 : rowGroupColumnVos.length) && !areColsSame({\n            oldCols: this.storeParams.valueCols,\n            newCols: valueColumnVos,\n            allowRemovedColumns: true,\n        });\n        const resetRequired = sortModelDifferent || rowGroupDifferent || pivotDifferent || valuesDifferent;\n        if (resetRequired) {\n            this.resetRootStore();\n        }\n        else {\n            // cols may have changed even if we didn't do a reset. storeParams ref will be provided when getRows\n            // is called, so it's important to keep it up to date.\n            const newParams = this.createStoreParams();\n            this.storeParams.rowGroupCols = newParams.rowGroupCols;\n            this.storeParams.pivotCols = newParams.pivotCols;\n            this.storeParams.valueCols = newParams.valueCols;\n        }\n    }\n    destroyRootStore() {\n        if (!this.rootNode || !this.rootNode.childStore) {\n            return;\n        }\n        this.rootNode.childStore = this.destroyBean(this.rootNode.childStore);\n        this.nodeManager.clear();\n    }\n    refreshAfterSort(newSortModel, params) {\n        if (this.storeParams) {\n            this.storeParams.sortModel = newSortModel;\n        }\n        const rootStore = this.getRootStore();\n        if (!rootStore) {\n            return;\n        }\n        rootStore.refreshAfterSort(params);\n        this.onStoreUpdated();\n    }\n    resetRootStore() {\n        this.destroyRootStore();\n        this.rootNode = new RowNode(this.beans);\n        this.rootNode.group = true;\n        this.rootNode.level = -1;\n        if (this.datasource) {\n            this.storeParams = this.createStoreParams();\n            this.rootNode.childStore = this.createBean(this.storeFactory.createStore(this.storeParams, this.rootNode));\n            this.updateRowIndexesAndBounds();\n        }\n        // this event shows/hides 'no rows' overlay\n        const rowDataChangedEvent = {\n            type: Events.EVENT_ROW_DATA_UPDATED\n        };\n        this.eventService.dispatchEvent(rowDataChangedEvent);\n        // this gets the row to render rows (or remove the previously rendered rows, as it's blank to start).\n        // important to NOT pass in an event with keepRenderedRows or animate, as we want the renderer\n        // to treat the rows as new rows, as it's all new data\n        this.dispatchModelUpdated(true);\n    }\n    columnsToValueObjects(columns) {\n        return columns.map(col => ({\n            id: col.getId(),\n            aggFunc: col.getAggFunc(),\n            displayName: this.columnModel.getDisplayNameForColumn(col, 'model'),\n            field: col.getColDef().field\n        }));\n    }\n    createStoreParams() {\n        const rowGroupColumnVos = this.columnsToValueObjects(this.columnModel.getRowGroupColumns());\n        const valueColumnVos = this.columnsToValueObjects(this.columnModel.getValueColumns());\n        const pivotColumnVos = this.columnsToValueObjects(this.columnModel.getPivotColumns());\n        const dynamicRowHeight = this.gridOptionsService.isGetRowHeightFunction();\n        const params = {\n            // the columns the user has grouped and aggregated by\n            valueCols: valueColumnVos,\n            rowGroupCols: rowGroupColumnVos,\n            pivotCols: pivotColumnVos,\n            pivotMode: this.columnModel.isPivotMode(),\n            // sort and filter model\n            filterModel: this.filterManager.getFilterModel(),\n            sortModel: this.sortListener.extractSortModel(),\n            datasource: this.datasource,\n            lastAccessedSequence: new NumberSequence(),\n            // blockSize: blockSize == null ? 100 : blockSize,\n            dynamicRowHeight: dynamicRowHeight\n        };\n        return params;\n    }\n    getParams() {\n        return this.storeParams;\n    }\n    dispatchModelUpdated(reset = false) {\n        const modelUpdatedEvent = {\n            type: Events.EVENT_MODEL_UPDATED,\n            animate: !reset,\n            keepRenderedRows: !reset,\n            newPage: false,\n            newData: false\n        };\n        this.eventService.dispatchEvent(modelUpdatedEvent);\n    }\n    onStoreUpdated() {\n        // sometimes if doing a batch update, we do the batch first,\n        // then call onStoreUpdated manually. eg expandAll() method.\n        if (this.pauseStoreUpdateListening) {\n            return;\n        }\n        this.updateRowIndexesAndBounds();\n        this.dispatchModelUpdated();\n    }\n    /** This method is debounced. It is used for row auto-height. If we don't debounce,\n     * then the Row Models will end up recalculating each row position\n     * for each row height change and result in the Row Renderer laying out rows.\n     * This is particularly bad if using print layout, and showing eg 1,000 rows,\n     * each row will change it's height, causing Row Model to update 1,000 times.\n     */\n    onRowHeightChangedDebounced() {\n        this.onRowHeightChanged_debounced();\n    }\n    onRowHeightChanged() {\n        this.updateRowIndexesAndBounds();\n        this.dispatchModelUpdated();\n    }\n    updateRowIndexesAndBounds() {\n        const rootStore = this.getRootStore();\n        if (!rootStore) {\n            return;\n        }\n        rootStore.setDisplayIndexes(new NumberSequence(), { value: 0 });\n    }\n    retryLoads() {\n        const rootStore = this.getRootStore();\n        if (!rootStore) {\n            return;\n        }\n        rootStore.retryLoads();\n        this.onStoreUpdated();\n    }\n    getRow(index) {\n        const rootStore = this.getRootStore();\n        if (!rootStore) {\n            return undefined;\n        }\n        return rootStore.getRowUsingDisplayIndex(index);\n    }\n    expandAll(value) {\n        // if we don't pause store updating, we are needlessly\n        // recalculating row-indexes etc, and also getting rendering\n        // engine to re-render (listens on ModelUpdated event)\n        this.pauseStoreUpdateListening = true;\n        this.forEachNode(node => {\n            if (node.stub) {\n                return;\n            }\n            if (node.hasChildren()) {\n                node.setExpanded(value);\n            }\n        });\n        this.pauseStoreUpdateListening = false;\n        this.onStoreUpdated();\n    }\n    refreshAfterFilter(newFilterModel, params) {\n        if (this.storeParams) {\n            this.storeParams.filterModel = newFilterModel;\n        }\n        const rootStore = this.getRootStore();\n        if (!rootStore) {\n            return;\n        }\n        rootStore.refreshAfterFilter(params);\n        this.onStoreUpdated();\n    }\n    getRootStore() {\n        if (this.rootNode && this.rootNode.childStore) {\n            return this.rootNode.childStore;\n        }\n    }\n    getRowCount() {\n        const rootStore = this.getRootStore();\n        if (!rootStore) {\n            return 0;\n        }\n        return rootStore.getDisplayIndexEnd();\n    }\n    getTopLevelRowCount() {\n        const rootStore = this.getRootStore();\n        if (!rootStore) {\n            return 1;\n        }\n        return rootStore.getRowCount();\n    }\n    getTopLevelRowDisplayedIndex(topLevelIndex) {\n        const rootStore = this.getRootStore();\n        if (!rootStore) {\n            return topLevelIndex;\n        }\n        return rootStore.getTopLevelRowDisplayedIndex(topLevelIndex);\n    }\n    getRowBounds(index) {\n        const rootStore = this.getRootStore();\n        if (!rootStore) {\n            const rowHeight = this.gridOptionsService.getRowHeightAsNumber();\n            return {\n                rowTop: 0,\n                rowHeight: rowHeight\n            };\n        }\n        return rootStore.getRowBounds(index);\n    }\n    getBlockStates() {\n        const root = this.getRootStore();\n        if (!root) {\n            return undefined;\n        }\n        const states = {};\n        root.forEachStoreDeep(store => {\n            if (store instanceof FullStore) {\n                const { id, state } = store.getBlockStateJson();\n                states[id] = state;\n            }\n            else if (store instanceof LazyStore) {\n                Object.entries(store.getBlockStates()).forEach(([block, state]) => {\n                    states[block] = state;\n                });\n            }\n            else {\n                throw new Error('AG Grid: Unsupported store type');\n            }\n        });\n        return states;\n    }\n    getRowIndexAtPixel(pixel) {\n        const rootStore = this.getRootStore();\n        if (pixel <= 0 || !rootStore) {\n            return 0;\n        }\n        return rootStore.getRowIndexAtPixel(pixel);\n    }\n    isEmpty() {\n        return false;\n    }\n    isRowsToRender() {\n        return this.getRootStore() != null && this.getRowCount() > 0;\n    }\n    getType() {\n        return 'serverSide';\n    }\n    forEachNode(callback) {\n        const rootStore = this.getRootStore();\n        if (!rootStore) {\n            return;\n        }\n        rootStore.forEachNodeDeep(callback);\n    }\n    forEachNodeAfterFilterAndSort(callback) {\n        const rootStore = this.getRootStore();\n        if (!rootStore) {\n            return;\n        }\n        rootStore.forEachNodeDeepAfterFilterAndSort(callback);\n    }\n    executeOnStore(route, callback) {\n        const rootStore = this.getRootStore();\n        if (!rootStore) {\n            return;\n        }\n        const storeToExecuteOn = rootStore.getChildStore(route);\n        if (storeToExecuteOn) {\n            callback(storeToExecuteOn);\n        }\n    }\n    refreshStore(params = {}) {\n        const route = params.route ? params.route : [];\n        this.executeOnStore(route, store => store.refreshStore(params.purge == true));\n    }\n    getStoreState() {\n        const res = [];\n        const rootStore = this.getRootStore();\n        if (rootStore) {\n            rootStore.addStoreStates(res);\n        }\n        return res;\n    }\n    getNodesInRangeForSelection(firstInRange, lastInRange) {\n        if (!_.exists(firstInRange)) {\n            return [];\n        }\n        if (!lastInRange) {\n            return [firstInRange];\n        }\n        const startIndex = firstInRange.rowIndex;\n        const endIndex = lastInRange.rowIndex;\n        if (startIndex === null || endIndex === null) {\n            return [firstInRange];\n        }\n        const nodeRange = [];\n        const [firstIndex, lastIndex] = [startIndex, endIndex].sort((a, b) => a - b);\n        this.forEachNode((node) => {\n            const thisRowIndex = node.rowIndex;\n            if (thisRowIndex == null || node.stub) {\n                return;\n            }\n            if (thisRowIndex >= firstIndex && thisRowIndex <= lastIndex) {\n                nodeRange.push(node);\n            }\n        });\n        const rowsAreContiguous = nodeRange.every((node, idx, all) => {\n            if (idx === 0) {\n                return node.rowIndex === firstIndex;\n            }\n            return all[idx - 1].rowIndex === (node.rowIndex - 1);\n        });\n        // don't allow range selection if we don't have the full range of rows\n        if (!rowsAreContiguous || nodeRange.length !== (lastIndex - firstIndex + 1)) {\n            return [firstInRange];\n        }\n        return nodeRange;\n    }\n    getRowNode(id) {\n        let result;\n        this.forEachNode(rowNode => {\n            if (rowNode.id === id) {\n                result = rowNode;\n            }\n            if (rowNode.detailNode && rowNode.detailNode.id === id) {\n                result = rowNode.detailNode;\n            }\n        });\n        return result;\n    }\n    isRowPresent(rowNode) {\n        const foundRowNode = this.getRowNode(rowNode.id);\n        return !!foundRowNode;\n    }\n    setRowCount(rowCount, lastRowIndexKnown) {\n        const rootStore = this.getRootStore();\n        if (rootStore) {\n            if (rootStore instanceof LazyStore) {\n                rootStore.setRowCount(rowCount, lastRowIndexKnown);\n                return;\n            }\n            console.error('AG Grid: Infinite scrolling must be enabled in order to set the row count.');\n        }\n    }\n};\n__decorate$q([\n    Autowired('columnModel')\n], ServerSideRowModel.prototype, \"columnModel\", void 0);\n__decorate$q([\n    Autowired('filterManager')\n], ServerSideRowModel.prototype, \"filterManager\", void 0);\n__decorate$q([\n    Autowired('rowRenderer')\n], ServerSideRowModel.prototype, \"rowRenderer\", void 0);\n__decorate$q([\n    Autowired('ssrmSortService')\n], ServerSideRowModel.prototype, \"sortListener\", void 0);\n__decorate$q([\n    Autowired('ssrmNodeManager')\n], ServerSideRowModel.prototype, \"nodeManager\", void 0);\n__decorate$q([\n    Autowired('ssrmStoreFactory')\n], ServerSideRowModel.prototype, \"storeFactory\", void 0);\n__decorate$q([\n    Autowired('beans')\n], ServerSideRowModel.prototype, \"beans\", void 0);\n__decorate$q([\n    PreDestroy\n], ServerSideRowModel.prototype, \"destroyDatasource\", null);\n__decorate$q([\n    PostConstruct\n], ServerSideRowModel.prototype, \"addEventListeners\", null);\n__decorate$q([\n    PreDestroy\n], ServerSideRowModel.prototype, \"destroyRootStore\", null);\nServerSideRowModel = __decorate$q([\n    Bean('rowModel')\n], ServerSideRowModel);\n\nvar __decorate$p = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet StoreUtils = class StoreUtils extends BeanStub {\n    loadFromDatasource(p) {\n        const { storeParams, parentBlock, parentNode } = p;\n        const groupKeys = parentNode.getGroupKeys();\n        if (!storeParams.datasource) {\n            return;\n        }\n        const request = {\n            startRow: p.startRow,\n            endRow: p.endRow,\n            rowGroupCols: storeParams.rowGroupCols,\n            valueCols: storeParams.valueCols,\n            pivotCols: storeParams.pivotCols,\n            pivotMode: storeParams.pivotMode,\n            groupKeys: groupKeys,\n            filterModel: storeParams.filterModel,\n            sortModel: storeParams.sortModel\n        };\n        const getRowsParams = {\n            successCallback: p.successCallback,\n            success: p.success,\n            failCallback: p.failCallback,\n            fail: p.fail,\n            request: request,\n            parentNode: p.parentNode,\n            api: this.gridApi,\n            columnApi: this.columnApi,\n            context: this.gridOptionsService.context\n        };\n        window.setTimeout(() => {\n            if (!storeParams.datasource || !parentBlock.isAlive()) {\n                // failCallback() is important, to reduce the 'RowNodeBlockLoader.activeBlockLoadsCount' count\n                p.failCallback();\n                return;\n            }\n            storeParams.datasource.getRows(getRowsParams);\n        }, 0);\n    }\n    getChildStore(keys, currentCache, findNodeFunc) {\n        if (_.missingOrEmpty(keys)) {\n            return currentCache;\n        }\n        const nextKey = keys[0];\n        const nextNode = findNodeFunc(nextKey);\n        if (nextNode) {\n            const keyListForNextLevel = keys.slice(1, keys.length);\n            const nextStore = nextNode.childStore;\n            return nextStore ? nextStore.getChildStore(keyListForNextLevel) : null;\n        }\n        return null;\n    }\n    isServerRefreshNeeded(parentRowNode, rowGroupCols, params) {\n        if (params.valueColChanged || params.secondaryColChanged) {\n            return true;\n        }\n        const level = parentRowNode.level + 1;\n        const grouping = level < rowGroupCols.length;\n        const leafNodes = !grouping;\n        if (leafNodes) {\n            return true;\n        }\n        const colIdThisGroup = rowGroupCols[level].id;\n        const actionOnThisGroup = params.changedColumns.indexOf(colIdThisGroup) > -1;\n        if (actionOnThisGroup) {\n            return true;\n        }\n        const allCols = this.columnModel.getAllGridColumns();\n        const affectedGroupCols = allCols\n            // find all impacted cols which also a group display column\n            .filter(col => col.getColDef().showRowGroup && params.changedColumns.includes(col.getId()))\n            .map(col => col.getColDef().showRowGroup)\n            // if displaying all groups, or displaying the effected col for this group, refresh\n            .some(group => group === true || group === colIdThisGroup);\n        return affectedGroupCols;\n    }\n    getServerSideInitialRowCount() {\n        const rowCount = this.gridOptionsService.getNum('serverSideInitialRowCount');\n        if (typeof rowCount === 'number' && rowCount > 0) {\n            return rowCount;\n        }\n        return 1;\n    }\n    assertRowModelIsServerSide(key) {\n        if (!this.gridOptionsService.isRowModelType('serverSide')) {\n            _.doOnce(() => console.warn(`AG Grid: The '${key}' property can only be used with the Server Side Row Model.`), key);\n            return false;\n        }\n        return true;\n    }\n    assertNotTreeData(key) {\n        if (this.gridOptionsService.is('treeData')) {\n            _.doOnce(() => console.warn(`AG Grid: The '${key}' property cannot be used while using tree data.`), key + '_TreeData');\n            return false;\n        }\n        return true;\n    }\n    isServerSideSortAllLevels() {\n        return this.gridOptionsService.is('serverSideSortAllLevels') && this.assertRowModelIsServerSide('serverSideSortAllLevels');\n    }\n    isServerSideOnlyRefreshFilteredGroups() {\n        return this.gridOptionsService.is('serverSideOnlyRefreshFilteredGroups') && this.assertRowModelIsServerSide('serverSideOnlyRefreshFilteredGroups');\n    }\n    isServerSideSortOnServer() {\n        return this.gridOptionsService.is('serverSideSortOnServer') && this.assertRowModelIsServerSide('serverSideSortOnServer') && this.assertNotTreeData('serverSideSortOnServer');\n    }\n    isServerSideFilterOnServer() {\n        return this.gridOptionsService.is('serverSideFilterOnServer') && this.assertRowModelIsServerSide('serverSideFilterOnServer') && this.assertNotTreeData('serverSideFilterOnServer');\n    }\n};\n__decorate$p([\n    Autowired('columnApi')\n], StoreUtils.prototype, \"columnApi\", void 0);\n__decorate$p([\n    Autowired('columnModel')\n], StoreUtils.prototype, \"columnModel\", void 0);\n__decorate$p([\n    Autowired('gridApi')\n], StoreUtils.prototype, \"gridApi\", void 0);\nStoreUtils = __decorate$p([\n    Bean('ssrmStoreUtils')\n], StoreUtils);\n\nvar __decorate$o = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst GROUP_MISSING_KEY_ID = 'ag-Grid-MissingKey';\nlet BlockUtils = class BlockUtils extends BeanStub {\n    postConstruct() {\n        this.rowHeight = this.gridOptionsService.getRowHeightAsNumber();\n        this.usingTreeData = this.gridOptionsService.isTreeData();\n        this.usingMasterDetail = this.gridOptionsService.isMasterDetail();\n    }\n    createRowNode(params) {\n        const rowNode = new RowNode(this.beans);\n        const rowHeight = params.rowHeight != null ? params.rowHeight : this.rowHeight;\n        rowNode.setRowHeight(rowHeight);\n        rowNode.group = params.group;\n        rowNode.leafGroup = params.leafGroup;\n        rowNode.level = params.level;\n        rowNode.uiLevel = params.level;\n        rowNode.parent = params.parent;\n        // stub gets set to true here, and then false when this rowNode gets it's data\n        rowNode.stub = true;\n        rowNode.__needsRefreshWhenVisible = false;\n        if (rowNode.group) {\n            rowNode.expanded = false;\n            rowNode.field = params.field;\n            rowNode.rowGroupColumn = params.rowGroupColumn;\n        }\n        return rowNode;\n    }\n    destroyRowNodes(rowNodes) {\n        if (rowNodes) {\n            rowNodes.forEach((row) => this.destroyRowNode(row));\n        }\n    }\n    destroyRowNode(rowNode, preserveStore = false) {\n        if (rowNode.childStore && !preserveStore) {\n            this.destroyBean(rowNode.childStore);\n            rowNode.childStore = null;\n        }\n        if (rowNode.sibling) {\n            this.destroyRowNode(rowNode.sibling, false);\n        }\n        // this is needed, so row render knows to fade out the row, otherwise it\n        // sees row top is present, and thinks the row should be shown. maybe\n        // rowNode should have a flag on whether it is visible???\n        rowNode.clearRowTopAndRowIndex();\n        if (rowNode.id != null) {\n            this.nodeManager.removeNode(rowNode);\n        }\n    }\n    setTreeGroupInfo(rowNode) {\n        rowNode.updateHasChildren();\n        const getKeyFunc = this.gridOptionsService.get('getServerSideGroupKey');\n        if (rowNode.hasChildren() && getKeyFunc != null) {\n            rowNode.key = getKeyFunc(rowNode.data);\n        }\n        if (!rowNode.hasChildren() && rowNode.childStore != null) {\n            this.destroyBean(rowNode.childStore);\n            rowNode.childStore = null;\n            rowNode.expanded = false;\n        }\n    }\n    setRowGroupInfo(rowNode) {\n        rowNode.key = this.valueService.getValue(rowNode.rowGroupColumn, rowNode);\n        if (rowNode.key === null || rowNode.key === undefined) {\n            _.doOnce(() => {\n                console.warn(`AG Grid: null and undefined values are not allowed for server side row model keys`);\n                if (rowNode.rowGroupColumn) {\n                    console.warn(`column = ${rowNode.rowGroupColumn.getId()}`);\n                }\n                console.warn(`data is `, rowNode.data);\n            }, 'ServerSideBlock-CannotHaveNullOrUndefinedForKey');\n        }\n        if (this.beans.gridOptionsService.is('groupIncludeFooter')) {\n            rowNode.createFooter();\n            if (rowNode.sibling) {\n                rowNode.sibling.uiLevel = rowNode.uiLevel + 1;\n            }\n        }\n    }\n    setMasterDetailInfo(rowNode) {\n        const isMasterFunc = this.gridOptionsService.get('isRowMaster');\n        if (isMasterFunc != null) {\n            rowNode.master = isMasterFunc(rowNode.data);\n        }\n        else {\n            rowNode.master = true;\n        }\n    }\n    updateDataIntoRowNode(rowNode, data) {\n        rowNode.updateData(data);\n        if (this.usingTreeData) {\n            this.setTreeGroupInfo(rowNode);\n            this.setChildCountIntoRowNode(rowNode);\n        }\n        else if (rowNode.group) {\n            this.setChildCountIntoRowNode(rowNode);\n            // it's not possible for a node to change whether it's a group or not\n            // when doing row grouping (as only rows at certain levels are groups),\n            // so nothing to do here\n        }\n        else if (this.usingMasterDetail) ;\n    }\n    setDataIntoRowNode(rowNode, data, defaultId, cachedRowHeight) {\n        var _a;\n        rowNode.stub = false;\n        if (_.exists(data)) {\n            rowNode.setDataAndId(data, defaultId);\n            if (this.usingTreeData) {\n                this.setTreeGroupInfo(rowNode);\n            }\n            else if (rowNode.group) {\n                this.setRowGroupInfo(rowNode);\n            }\n            else if (this.usingMasterDetail) {\n                this.setMasterDetailInfo(rowNode);\n            }\n        }\n        else {\n            rowNode.setDataAndId(undefined, undefined);\n            rowNode.key = null;\n        }\n        if (this.usingTreeData || rowNode.group) {\n            this.setGroupDataIntoRowNode(rowNode);\n            this.setChildCountIntoRowNode(rowNode);\n        }\n        // this needs to be done AFTER setGroupDataIntoRowNode(), as the height can depend on the group data\n        // getting set, if it's a group node and colDef.autoHeight=true\n        if (_.exists(data)) {\n            rowNode.setRowHeight(this.gridOptionsService.getRowHeightForNode(rowNode, false, cachedRowHeight).height);\n            (_a = rowNode.sibling) === null || _a === void 0 ? void 0 : _a.setRowHeight(this.gridOptionsService.getRowHeightForNode(rowNode.sibling, false, cachedRowHeight).height);\n        }\n    }\n    setChildCountIntoRowNode(rowNode) {\n        const getChildCount = this.gridOptionsService.get('getChildCount');\n        if (getChildCount) {\n            rowNode.setAllChildrenCount(getChildCount(rowNode.data));\n        }\n    }\n    setGroupDataIntoRowNode(rowNode) {\n        const groupDisplayCols = this.columnModel.getGroupDisplayColumns();\n        const usingTreeData = this.gridOptionsService.isTreeData();\n        groupDisplayCols.forEach(col => {\n            if (rowNode.groupData == null) {\n                rowNode.groupData = {};\n            }\n            if (usingTreeData) {\n                rowNode.groupData[col.getColId()] = rowNode.key;\n            }\n            else if (col.isRowGroupDisplayed(rowNode.rowGroupColumn.getId())) {\n                const groupValue = this.valueService.getValue(rowNode.rowGroupColumn, rowNode);\n                rowNode.groupData[col.getColId()] = groupValue;\n            }\n        });\n    }\n    clearDisplayIndex(rowNode) {\n        rowNode.clearRowTopAndRowIndex();\n        const hasChildStore = rowNode.hasChildren() && _.exists(rowNode.childStore);\n        if (hasChildStore) {\n            const childStore = rowNode.childStore;\n            childStore.clearDisplayIndexes();\n        }\n        const hasDetailNode = rowNode.master && rowNode.detailNode;\n        if (hasDetailNode) {\n            rowNode.detailNode.clearRowTopAndRowIndex();\n        }\n    }\n    setDisplayIndex(rowNode, displayIndexSeq, nextRowTop) {\n        // set this row\n        rowNode.setRowIndex(displayIndexSeq.next());\n        rowNode.setRowTop(nextRowTop.value);\n        nextRowTop.value += rowNode.rowHeight;\n        // set child for master / detail\n        const hasDetailRow = rowNode.master;\n        if (hasDetailRow) {\n            if (rowNode.expanded && rowNode.detailNode) {\n                rowNode.detailNode.setRowIndex(displayIndexSeq.next());\n                rowNode.detailNode.setRowTop(nextRowTop.value);\n                nextRowTop.value += rowNode.detailNode.rowHeight;\n            }\n            else if (rowNode.detailNode) {\n                rowNode.detailNode.clearRowTopAndRowIndex();\n            }\n        }\n        // set children for SSRM child rows\n        const hasChildStore = rowNode.hasChildren() && _.exists(rowNode.childStore);\n        if (hasChildStore) {\n            const childStore = rowNode.childStore;\n            if (rowNode.expanded) {\n                childStore.setDisplayIndexes(displayIndexSeq, nextRowTop);\n            }\n            else {\n                // we need to clear the row tops, as the row renderer depends on\n                // this to know if the row should be faded out\n                childStore.clearDisplayIndexes();\n            }\n        }\n    }\n    binarySearchForDisplayIndex(displayRowIndex, rowNodes) {\n        let bottomPointer = 0;\n        let topPointer = rowNodes.length - 1;\n        if (_.missing(topPointer) || _.missing(bottomPointer)) {\n            console.warn(`AG Grid: error: topPointer = ${topPointer}, bottomPointer = ${bottomPointer}`);\n            return undefined;\n        }\n        while (true) {\n            const midPointer = Math.floor((bottomPointer + topPointer) / 2);\n            const currentRowNode = rowNodes[midPointer];\n            // first check current row for index\n            if (currentRowNode.rowIndex === displayRowIndex) {\n                return currentRowNode;\n            }\n            // then check if current row contains a detail row with the index\n            const expandedMasterRow = currentRowNode.master && currentRowNode.expanded;\n            const detailNode = currentRowNode.detailNode;\n            if (expandedMasterRow && detailNode && detailNode.rowIndex === displayRowIndex) {\n                return currentRowNode.detailNode;\n            }\n            // then check if child cache contains index\n            const childStore = currentRowNode.childStore;\n            if (currentRowNode.expanded && childStore && childStore.isDisplayIndexInStore(displayRowIndex)) {\n                return childStore.getRowUsingDisplayIndex(displayRowIndex);\n            }\n            // otherwise adjust pointers to continue searching for index\n            if (currentRowNode.rowIndex < displayRowIndex) {\n                bottomPointer = midPointer + 1;\n            }\n            else if (currentRowNode.rowIndex > displayRowIndex) {\n                topPointer = midPointer - 1;\n            }\n            else {\n                console.warn(`AG Grid: error: unable to locate rowIndex = ${displayRowIndex} in cache`);\n                return undefined;\n            }\n        }\n    }\n    extractRowBounds(rowNode, index) {\n        const extractRowBounds = (currentRowNode) => ({\n            rowHeight: currentRowNode.rowHeight,\n            rowTop: currentRowNode.rowTop\n        });\n        if (rowNode.rowIndex === index) {\n            return extractRowBounds(rowNode);\n        }\n        if (rowNode.hasChildren() && rowNode.expanded && _.exists(rowNode.childStore)) {\n            const childStore = rowNode.childStore;\n            if (childStore.isDisplayIndexInStore(index)) {\n                return childStore.getRowBounds(index);\n            }\n        }\n        else if (rowNode.master && rowNode.expanded && _.exists(rowNode.detailNode)) {\n            if (rowNode.detailNode.rowIndex === index) {\n                return extractRowBounds(rowNode.detailNode);\n            }\n        }\n    }\n    getIndexAtPixel(rowNode, pixel) {\n        // first check if pixel is in range of current row\n        if (rowNode.isPixelInRange(pixel)) {\n            return rowNode.rowIndex;\n        }\n        // then check if current row contains a detail row with pixel in range\n        const expandedMasterRow = rowNode.master && rowNode.expanded;\n        const detailNode = rowNode.detailNode;\n        if (expandedMasterRow && detailNode && detailNode.isPixelInRange(pixel)) {\n            return rowNode.detailNode.rowIndex;\n        }\n        // then check if it's a group row with a child cache with pixel in range\n        if (rowNode.hasChildren() && rowNode.expanded && _.exists(rowNode.childStore)) {\n            const childStore = rowNode.childStore;\n            if (childStore.isPixelInRange(pixel)) {\n                return childStore.getRowIndexAtPixel(pixel);\n            }\n        }\n        return null;\n        // pixel is not within this row node or it's children / detail, so return undefined\n    }\n    createNodeIdPrefix(parentRowNode) {\n        const parts = [];\n        let rowNode = parentRowNode;\n        // pull keys from all parent nodes, but do not include the root node\n        while (rowNode && rowNode.level >= 0) {\n            if (rowNode.key === '') {\n                parts.push(GROUP_MISSING_KEY_ID);\n            }\n            else {\n                parts.push(rowNode.key);\n            }\n            rowNode = rowNode.parent;\n        }\n        if (parts.length > 0) {\n            return parts.reverse().join('-');\n        }\n        // no prefix, so node id's are left as they are\n        return undefined;\n    }\n    checkOpenByDefault(rowNode) {\n        if (!rowNode.isExpandable()) {\n            return;\n        }\n        const userFunc = this.gridOptionsService.getCallback('isServerSideGroupOpenByDefault');\n        if (!userFunc) {\n            return;\n        }\n        const params = {\n            data: rowNode.data,\n            rowNode\n        };\n        const userFuncRes = userFunc(params);\n        if (userFuncRes) {\n            // we do this in a timeout, so that we don't expand a row node while in the middle\n            // of setting up rows, setting up rows is complex enough without another chunk of work\n            // getting added to the call stack. this is also helpful as openByDefault may or may\n            // not happen (so makes setting up rows more deterministic by expands never happening)\n            // and also checkOpenByDefault is shard with both store types, so easier control how it\n            // impacts things by keeping it in new VM turn.\n            window.setTimeout(() => rowNode.setExpanded(true), 0);\n        }\n    }\n};\n__decorate$o([\n    Autowired('valueService')\n], BlockUtils.prototype, \"valueService\", void 0);\n__decorate$o([\n    Autowired('columnModel')\n], BlockUtils.prototype, \"columnModel\", void 0);\n__decorate$o([\n    Autowired('ssrmNodeManager')\n], BlockUtils.prototype, \"nodeManager\", void 0);\n__decorate$o([\n    Autowired('beans')\n], BlockUtils.prototype, \"beans\", void 0);\n__decorate$o([\n    PostConstruct\n], BlockUtils.prototype, \"postConstruct\", null);\nBlockUtils = __decorate$o([\n    Bean('ssrmBlockUtils')\n], BlockUtils);\n\nvar __decorate$n = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet NodeManager = class NodeManager {\n    constructor() {\n        this.rowNodes = {};\n    }\n    addRowNode(rowNode) {\n        const id = rowNode.id;\n        if (this.rowNodes[id]) {\n            console.warn(`AG Grid: Duplicate node id ${rowNode.id}. Row ID's are provided via the getRowId() callback. Please modify the getRowId() callback code to provide unique row id values.`);\n            console.warn('first instance', this.rowNodes[id].data);\n            console.warn('second instance', rowNode.data);\n        }\n        this.rowNodes[id] = rowNode;\n    }\n    removeNode(rowNode) {\n        const id = rowNode.id;\n        if (this.rowNodes[id]) {\n            this.rowNodes[id] = undefined;\n        }\n    }\n    clear() {\n        this.rowNodes = {};\n    }\n};\n__decorate$n([\n    PreDestroy\n], NodeManager.prototype, \"clear\", null);\nNodeManager = __decorate$n([\n    Bean('ssrmNodeManager')\n], NodeManager);\n\nvar __decorate$m = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet TransactionManager = class TransactionManager extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.asyncTransactions = [];\n    }\n    postConstruct() {\n        // only want to be active if SSRM active, otherwise would be interfering with other row models\n        if (!this.gridOptionsService.isRowModelType('serverSide')) {\n            return;\n        }\n    }\n    applyTransactionAsync(transaction, callback) {\n        if (this.asyncTransactionsTimeout == null) {\n            this.scheduleExecuteAsync();\n        }\n        this.asyncTransactions.push({ transaction: transaction, callback: callback });\n    }\n    scheduleExecuteAsync() {\n        const waitMillis = this.gridOptionsService.getAsyncTransactionWaitMillis();\n        this.asyncTransactionsTimeout = window.setTimeout(() => {\n            this.executeAsyncTransactions();\n        }, waitMillis);\n    }\n    executeAsyncTransactions() {\n        if (!this.asyncTransactions) {\n            return;\n        }\n        const resultFuncs = [];\n        const resultsForEvent = [];\n        const transactionsToRetry = [];\n        let atLeastOneTransactionApplied = false;\n        this.asyncTransactions.forEach(txWrapper => {\n            let result;\n            this.serverSideRowModel.executeOnStore(txWrapper.transaction.route, cache => {\n                result = cache.applyTransaction(txWrapper.transaction);\n            });\n            if (result == undefined) {\n                result = { status: ServerSideTransactionResultStatus.StoreNotFound };\n            }\n            resultsForEvent.push(result);\n            const retryTransaction = result.status == ServerSideTransactionResultStatus.StoreLoading;\n            if (retryTransaction) {\n                transactionsToRetry.push(txWrapper);\n                return;\n            }\n            if (txWrapper.callback) {\n                resultFuncs.push(() => txWrapper.callback(result));\n            }\n            if (result.status === ServerSideTransactionResultStatus.Applied) {\n                atLeastOneTransactionApplied = true;\n            }\n        });\n        // do callbacks in next VM turn so it's async\n        if (resultFuncs.length > 0) {\n            window.setTimeout(() => {\n                resultFuncs.forEach(func => func());\n            }, 0);\n        }\n        this.asyncTransactionsTimeout = undefined;\n        // this will be empty list if nothing to retry\n        this.asyncTransactions = transactionsToRetry;\n        if (atLeastOneTransactionApplied) {\n            this.valueCache.onDataChanged();\n            this.eventService.dispatchEvent({ type: Events.EVENT_STORE_UPDATED });\n        }\n        if (resultsForEvent.length > 0) {\n            const event = {\n                type: Events.EVENT_ASYNC_TRANSACTIONS_FLUSHED,\n                results: resultsForEvent\n            };\n            this.eventService.dispatchEvent(event);\n        }\n    }\n    flushAsyncTransactions() {\n        // the timeout could be missing, if we are flushing due to row data loaded\n        if (this.asyncTransactionsTimeout != null) {\n            clearTimeout(this.asyncTransactionsTimeout);\n        }\n        this.executeAsyncTransactions();\n    }\n    applyTransaction(transaction) {\n        let res;\n        this.serverSideRowModel.executeOnStore(transaction.route, store => {\n            res = store.applyTransaction(transaction);\n        });\n        if (res) {\n            this.valueCache.onDataChanged();\n            if (res.remove) {\n                const removedRowIds = res.remove.map(row => row.id);\n                this.selectionService.deleteSelectionStateFromParent(transaction.route || [], removedRowIds);\n            }\n            this.eventService.dispatchEvent({ type: Events.EVENT_STORE_UPDATED });\n            return res;\n        }\n        else {\n            return { status: ServerSideTransactionResultStatus.StoreNotFound };\n        }\n    }\n};\n__decorate$m([\n    Autowired('rowNodeBlockLoader')\n], TransactionManager.prototype, \"rowNodeBlockLoader\", void 0);\n__decorate$m([\n    Autowired('valueCache')\n], TransactionManager.prototype, \"valueCache\", void 0);\n__decorate$m([\n    Autowired('rowModel')\n], TransactionManager.prototype, \"serverSideRowModel\", void 0);\n__decorate$m([\n    Autowired('rowRenderer')\n], TransactionManager.prototype, \"rowRenderer\", void 0);\n__decorate$m([\n    Autowired('selectionService')\n], TransactionManager.prototype, \"selectionService\", void 0);\n__decorate$m([\n    PostConstruct\n], TransactionManager.prototype, \"postConstruct\", null);\nTransactionManager = __decorate$m([\n    Bean('ssrmTransactionManager')\n], TransactionManager);\n\nvar __decorate$l = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ExpandListener = class ExpandListener extends BeanStub {\n    postConstruct() {\n        // only want to be active if SSRM active, otherwise would be interfering with other row models\n        if (!this.gridOptionsService.isRowModelType('serverSide')) {\n            return;\n        }\n        this.addManagedListener(this.eventService, Events.EVENT_ROW_GROUP_OPENED, this.onRowGroupOpened.bind(this));\n    }\n    onRowGroupOpened(event) {\n        const rowNode = event.node;\n        if (rowNode.expanded) {\n            if (rowNode.master) {\n                this.createDetailNode(rowNode);\n            }\n            else if (_.missing(rowNode.childStore)) {\n                const storeParams = this.serverSideRowModel.getParams();\n                rowNode.childStore = this.createBean(this.storeFactory.createStore(storeParams, rowNode));\n            }\n        }\n        else if (this.gridOptionsService.is('purgeClosedRowNodes') && _.exists(rowNode.childStore)) {\n            rowNode.childStore = this.destroyBean(rowNode.childStore);\n        }\n        const storeUpdatedEvent = { type: Events.EVENT_STORE_UPDATED };\n        this.eventService.dispatchEvent(storeUpdatedEvent);\n    }\n    createDetailNode(masterNode) {\n        if (_.exists(masterNode.detailNode)) {\n            return masterNode.detailNode;\n        }\n        const detailNode = new RowNode(this.beans);\n        detailNode.detail = true;\n        detailNode.selectable = false;\n        detailNode.parent = masterNode;\n        if (_.exists(masterNode.id)) {\n            detailNode.id = 'detail_' + masterNode.id;\n        }\n        detailNode.data = masterNode.data;\n        detailNode.level = masterNode.level + 1;\n        const defaultDetailRowHeight = 200;\n        const rowHeight = this.gridOptionsService.getRowHeightForNode(detailNode).height;\n        detailNode.rowHeight = rowHeight ? rowHeight : defaultDetailRowHeight;\n        masterNode.detailNode = detailNode;\n        return detailNode;\n    }\n};\n__decorate$l([\n    Autowired('rowModel')\n], ExpandListener.prototype, \"serverSideRowModel\", void 0);\n__decorate$l([\n    Autowired('ssrmStoreFactory')\n], ExpandListener.prototype, \"storeFactory\", void 0);\n__decorate$l([\n    Autowired('beans')\n], ExpandListener.prototype, \"beans\", void 0);\n__decorate$l([\n    PostConstruct\n], ExpandListener.prototype, \"postConstruct\", null);\nExpandListener = __decorate$l([\n    Bean('ssrmExpandListener')\n], ExpandListener);\n\nvar __decorate$k = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet SortListener = class SortListener extends BeanStub {\n    postConstruct() {\n        // only want to be active if SSRM active, otherwise would be interfering with other row models\n        if (!this.gridOptionsService.isRowModelType('serverSide')) {\n            return;\n        }\n        this.addManagedListener(this.eventService, Events.EVENT_SORT_CHANGED, this.onSortChanged.bind(this));\n    }\n    extractSortModel() {\n        const sortModel = this.sortController.getSortModel();\n        // when using tree data we just return the sort model with the 'ag-Grid-AutoColumn' as is, i.e not broken out\n        // into it's constitute group columns as they are not defined up front and can vary per node.\n        if (this.gridOptionsService.isTreeData()) {\n            return sortModel;\n        }\n        // it autoCol is active, we don't want to send this to the server. instead we want to\n        // send the\n        this.replaceAutoGroupColumnWithActualRowGroupColumns(sortModel);\n        this.removeMultiColumnPrefixOnColumnIds(sortModel);\n        return sortModel;\n    }\n    removeMultiColumnPrefixOnColumnIds(sortModel) {\n        if (this.gridOptionsService.isGroupMultiAutoColumn()) {\n            const multiColumnPrefix = GROUP_AUTO_COLUMN_ID + \"-\";\n            for (let i = 0; i < sortModel.length; ++i) {\n                if (sortModel[i].colId.indexOf(multiColumnPrefix) > -1) {\n                    sortModel[i].colId = sortModel[i].colId.substr(multiColumnPrefix.length);\n                }\n            }\n        }\n    }\n    replaceAutoGroupColumnWithActualRowGroupColumns(sortModel) {\n        // find index of auto group column in sort model\n        const autoGroupSortModel = sortModel.find(sm => sm.colId == GROUP_AUTO_COLUMN_ID);\n        // replace auto column with individual group columns\n        if (autoGroupSortModel) {\n            // remove auto group column\n            const autoGroupIndex = sortModel.indexOf(autoGroupSortModel);\n            _.removeFromArray(sortModel, autoGroupSortModel);\n            const isNotInSortModel = (col) => sortModel.filter(sm => sm.colId === col.getColId()).length == 0;\n            const mapColumnToSortModel = (col) => ({ colId: col.getId(), sort: autoGroupSortModel.sort });\n            const newModels = this.columnModel.getRowGroupColumns()\n                .filter(isNotInSortModel)\n                .map(mapColumnToSortModel);\n            _.insertArrayIntoArray(sortModel, newModels, autoGroupIndex);\n        }\n    }\n    onSortChanged() {\n        const storeParams = this.serverSideRowModel.getParams();\n        if (!storeParams) {\n            return;\n        } // params is undefined if no datasource set\n        const newSortModel = this.extractSortModel();\n        const oldSortModel = storeParams.sortModel;\n        const changedColumns = this.findChangedColumnsInSort(newSortModel, oldSortModel);\n        const valueColChanged = this.listenerUtils.isSortingWithValueColumn(changedColumns);\n        const secondaryColChanged = this.listenerUtils.isSortingWithSecondaryColumn(changedColumns);\n        const params = {\n            valueColChanged,\n            secondaryColChanged,\n            changedColumns\n        };\n        this.serverSideRowModel.refreshAfterSort(newSortModel, params);\n    }\n    // returns back all the cols that were effected by the sorting. eg if we were sorting by col A,\n    // and now we are sorting by col B, the list of impacted cols should be A and B. so if a cache\n    // is impacted by sorting on A or B then it needs to be refreshed. this includes where the cache\n    // was previously sorted by A and then the A sort now needs to be cleared.\n    findChangedColumnsInSort(newSortModel, oldSortModel) {\n        let allColsInBothSorts = [];\n        [newSortModel, oldSortModel].forEach(sortModel => {\n            if (sortModel) {\n                const ids = sortModel.map(sm => sm.colId);\n                allColsInBothSorts = allColsInBothSorts.concat(ids);\n            }\n        });\n        const differentSorts = (oldSortItem, newSortItem) => {\n            const oldSort = oldSortItem ? oldSortItem.sort : null;\n            const newSort = newSortItem ? newSortItem.sort : null;\n            return oldSort !== newSort;\n        };\n        const differentIndexes = (oldSortItem, newSortItem) => {\n            const oldIndex = oldSortItem ? oldSortModel.indexOf(oldSortItem) : -1;\n            const newIndex = newSortItem ? newSortModel.indexOf(newSortItem) : -1;\n            return oldIndex !== newIndex;\n        };\n        return allColsInBothSorts.filter(colId => {\n            const oldSortItem = oldSortModel.find(sm => sm.colId === colId);\n            const newSortItem = newSortModel.find(sm => sm.colId === colId);\n            return differentSorts(oldSortItem, newSortItem) || differentIndexes(oldSortItem, newSortItem);\n        });\n    }\n};\n__decorate$k([\n    Autowired('sortController')\n], SortListener.prototype, \"sortController\", void 0);\n__decorate$k([\n    Autowired('columnModel')\n], SortListener.prototype, \"columnModel\", void 0);\n__decorate$k([\n    Autowired('rowModel')\n], SortListener.prototype, \"serverSideRowModel\", void 0);\n__decorate$k([\n    Autowired('ssrmListenerUtils')\n], SortListener.prototype, \"listenerUtils\", void 0);\n__decorate$k([\n    PostConstruct\n], SortListener.prototype, \"postConstruct\", null);\nSortListener = __decorate$k([\n    Bean('ssrmSortService')\n], SortListener);\n\nvar __decorate$j = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet FilterListener = class FilterListener extends BeanStub {\n    postConstruct() {\n        // only want to be active if SSRM active, otherwise would be interfering with other row models\n        if (!this.gridOptionsService.isRowModelType('serverSide')) {\n            return;\n        }\n        this.addManagedListener(this.eventService, Events.EVENT_FILTER_CHANGED, this.onFilterChanged.bind(this));\n    }\n    onFilterChanged() {\n        const storeParams = this.serverSideRowModel.getParams();\n        if (!storeParams) {\n            return;\n        } // params is undefined if no datasource set\n        const newModel = this.filterManager.getFilterModel();\n        const oldModel = storeParams ? storeParams.filterModel : {};\n        const changedColumns = this.findChangedColumns(newModel, oldModel);\n        const valueColChanged = this.listenerUtils.isSortingWithValueColumn(changedColumns);\n        const secondaryColChanged = this.listenerUtils.isSortingWithSecondaryColumn(changedColumns);\n        const params = {\n            valueColChanged,\n            secondaryColChanged,\n            changedColumns\n        };\n        this.serverSideRowModel.refreshAfterFilter(newModel, params);\n    }\n    findChangedColumns(oldModel, newModel) {\n        const allColKeysMap = {};\n        Object.keys(oldModel).forEach(key => allColKeysMap[key] = true);\n        Object.keys(newModel).forEach(key => allColKeysMap[key] = true);\n        const res = [];\n        Object.keys(allColKeysMap).forEach(key => {\n            const oldJson = JSON.stringify(oldModel[key]);\n            const newJson = JSON.stringify(newModel[key]);\n            const filterChanged = oldJson != newJson;\n            if (filterChanged) {\n                res.push(key);\n            }\n        });\n        return res;\n    }\n};\n__decorate$j([\n    Autowired('rowModel')\n], FilterListener.prototype, \"serverSideRowModel\", void 0);\n__decorate$j([\n    Autowired('filterManager')\n], FilterListener.prototype, \"filterManager\", void 0);\n__decorate$j([\n    Autowired('ssrmListenerUtils')\n], FilterListener.prototype, \"listenerUtils\", void 0);\n__decorate$j([\n    PostConstruct\n], FilterListener.prototype, \"postConstruct\", null);\nFilterListener = __decorate$j([\n    Bean('ssrmFilterListener')\n], FilterListener);\n\nvar __decorate$i = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet StoreFactory = class StoreFactory {\n    createStore(ssrmParams, parentNode) {\n        const storeParams = this.getStoreParams(ssrmParams, parentNode);\n        const CacheClass = storeParams.suppressInfiniteScroll ? FullStore : LazyStore;\n        return new CacheClass(ssrmParams, storeParams, parentNode);\n    }\n    getStoreParams(ssrmParams, parentNode) {\n        const userStoreParams = this.getLevelSpecificParams(parentNode);\n        // if user provided overrideParams, we take infiniteScroll from there if it exists\n        const infiniteScroll = this.isInfiniteScroll(userStoreParams);\n        const cacheBlockSize = this.getBlockSize(infiniteScroll, userStoreParams);\n        const maxBlocksInCache = this.getMaxBlocksInCache(infiniteScroll, ssrmParams, userStoreParams);\n        const storeParams = {\n            suppressInfiniteScroll: !infiniteScroll,\n            cacheBlockSize,\n            maxBlocksInCache\n        };\n        return storeParams;\n    }\n    getMaxBlocksInCache(infiniteScroll, ssrmParams, userStoreParams) {\n        if (!infiniteScroll) {\n            return undefined;\n        }\n        const maxBlocksInCache = (userStoreParams && userStoreParams.maxBlocksInCache != null)\n            ? userStoreParams.maxBlocksInCache\n            : this.gridOptionsService.getNum('maxBlocksInCache');\n        const maxBlocksActive = maxBlocksInCache != null && maxBlocksInCache >= 0;\n        if (!maxBlocksActive) {\n            return undefined;\n        }\n        if (ssrmParams.dynamicRowHeight) {\n            const message = 'AG Grid: Server Side Row Model does not support Dynamic Row Height and Cache Purging. ' +\n                'Either a) remove getRowHeight() callback or b) remove maxBlocksInCache property. Purging has been disabled.';\n            _.doOnce(() => console.warn(message), 'storeFactory.maxBlocksInCache.dynamicRowHeight');\n            return undefined;\n        }\n        if (this.columnModel.isAutoRowHeightActive()) {\n            const message = 'AG Grid: Server Side Row Model does not support Auto Row Height and Cache Purging. ' +\n                'Either a) remove colDef.autoHeight or b) remove maxBlocksInCache property. Purging has been disabled.';\n            _.doOnce(() => console.warn(message), 'storeFactory.maxBlocksInCache.autoRowHeightActive');\n            return undefined;\n        }\n        return maxBlocksInCache;\n    }\n    getBlockSize(infiniteScroll, userStoreParams) {\n        if (!infiniteScroll) {\n            return undefined;\n        }\n        const blockSize = (userStoreParams && userStoreParams.cacheBlockSize != null)\n            ? userStoreParams.cacheBlockSize\n            : this.gridOptionsService.getNum('cacheBlockSize');\n        if (blockSize != null && blockSize > 0) {\n            return blockSize;\n        }\n        else {\n            return 100;\n        }\n    }\n    getLevelSpecificParams(parentNode) {\n        const callback = this.gridOptionsService.getCallback('getServerSideGroupLevelParams');\n        if (!callback) {\n            return undefined;\n        }\n        const params = {\n            level: parentNode.level + 1,\n            parentRowNode: parentNode.level >= 0 ? parentNode : undefined,\n            rowGroupColumns: this.columnModel.getRowGroupColumns(),\n            pivotColumns: this.columnModel.getPivotColumns(),\n            pivotMode: this.columnModel.isPivotMode()\n        };\n        const res = callback(params);\n        if (res.storeType != null) {\n            res.suppressInfiniteScroll = res.storeType !== \"partial\";\n        }\n        return res;\n    }\n    isInfiniteScroll(storeParams) {\n        const res = (storeParams && storeParams.suppressInfiniteScroll != null)\n            ? storeParams.suppressInfiniteScroll\n            : this.isSuppressServerSideInfiniteScroll();\n        return !res;\n    }\n    isSuppressServerSideInfiniteScroll() {\n        return this.gridOptionsService.is('suppressServerSideInfiniteScroll');\n    }\n};\n__decorate$i([\n    Autowired('gridOptionsService')\n], StoreFactory.prototype, \"gridOptionsService\", void 0);\n__decorate$i([\n    Autowired('columnModel')\n], StoreFactory.prototype, \"columnModel\", void 0);\nStoreFactory = __decorate$i([\n    Bean('ssrmStoreFactory')\n], StoreFactory);\n\nvar __decorate$h = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ListenerUtils = class ListenerUtils {\n    isSortingWithValueColumn(changedColumnsInSort) {\n        const valueColIds = this.columnModel.getValueColumns().map(col => col.getColId());\n        for (let i = 0; i < changedColumnsInSort.length; i++) {\n            if (valueColIds.indexOf(changedColumnsInSort[i]) > -1) {\n                return true;\n            }\n        }\n        return false;\n    }\n    isSortingWithSecondaryColumn(changedColumnsInSort) {\n        if (!this.columnModel.getSecondaryColumns()) {\n            return false;\n        }\n        const secondaryColIds = this.columnModel.getSecondaryColumns().map(col => col.getColId());\n        for (let i = 0; i < changedColumnsInSort.length; i++) {\n            if (secondaryColIds.indexOf(changedColumnsInSort[i]) > -1) {\n                return true;\n            }\n        }\n        return false;\n    }\n};\n__decorate$h([\n    Autowired('columnModel')\n], ListenerUtils.prototype, \"columnModel\", void 0);\nListenerUtils = __decorate$h([\n    Bean('ssrmListenerUtils')\n], ListenerUtils);\n\nvar __decorate$g = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass DefaultStrategy extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.selectedState = { selectAll: false, toggledNodes: new Set() };\n        this.lastSelected = null;\n        this.selectAllUsed = false;\n        // this is to prevent regressions, default selectionService retains reference of clicked nodes.\n        this.selectedNodes = {};\n    }\n    init() {\n        this.rowSelection = this.gridOptionsService.get('rowSelection');\n        this.addManagedPropertyListener('rowSelection', (propChange) => {\n            this.rowSelection = propChange.currentValue;\n        });\n    }\n    getSelectedState() {\n        return {\n            selectAll: this.selectedState.selectAll,\n            toggledNodes: [...this.selectedState.toggledNodes],\n        };\n    }\n    setSelectedState(state) {\n        // fire selection changed event\n        const newState = {\n            selectAll: false,\n            toggledNodes: new Set(),\n        };\n        if (typeof state !== 'object') {\n            console.error('AG Grid: The provided selection state should be an object.');\n            return;\n        }\n        if ('selectAll' in state && typeof state.selectAll === 'boolean') {\n            newState.selectAll = state.selectAll;\n        }\n        else {\n            console.error('AG Grid: Select all status should be of boolean type.');\n            return;\n        }\n        if ('toggledNodes' in state && Array.isArray(state.toggledNodes)) {\n            state.toggledNodes.forEach((key) => {\n                if (typeof key === 'string') {\n                    newState.toggledNodes.add(key);\n                }\n                else {\n                    console.warn(`AG Grid: Provided ids must be of string type. Invalid id provided: ${key}`);\n                }\n            });\n        }\n        else {\n            console.error('AG Grid: `toggledNodes` must be an array of string ids.');\n            return;\n        }\n        this.selectedState = newState;\n    }\n    deleteSelectionStateFromParent(parentPath, removedNodeIds) {\n        if (this.selectedState.toggledNodes.size === 0) {\n            return false;\n        }\n        let anyNodesToggled = false;\n        removedNodeIds.forEach(id => {\n            if (this.selectedState.toggledNodes.delete(id)) {\n                anyNodesToggled = true;\n            }\n        });\n        return anyNodesToggled;\n    }\n    setNodesSelected(params) {\n        if (params.nodes.length === 0)\n            return 0;\n        const onlyThisNode = params.clearSelection && params.newValue && !params.rangeSelect;\n        if (this.rowSelection !== 'multiple' || onlyThisNode) {\n            if (params.nodes.length > 1) {\n                throw new Error('AG Grid: cannot select multiple rows when rowSelection is set to \\'single\\'');\n            }\n            const node = params.nodes[0];\n            if (params.newValue) {\n                this.selectedNodes = { [node.id]: node };\n                this.selectedState = {\n                    selectAll: false,\n                    toggledNodes: new Set([node.id]),\n                };\n            }\n            else {\n                this.selectedNodes = {};\n                this.selectedState = {\n                    selectAll: false,\n                    toggledNodes: new Set(),\n                };\n            }\n            this.lastSelected = node.id;\n            return 1;\n        }\n        const updateNodeState = (node) => {\n            if (params.newValue) {\n                this.selectedNodes[node.id] = node;\n            }\n            else {\n                delete this.selectedNodes[node.id];\n            }\n            const doesNodeConform = params.newValue === this.selectedState.selectAll;\n            if (doesNodeConform) {\n                this.selectedState.toggledNodes.delete(node.id);\n                return;\n            }\n            this.selectedState.toggledNodes.add(node.id);\n        };\n        if (params.rangeSelect && this.lastSelected) {\n            if (params.nodes.length > 1) {\n                throw new Error('AG Grid: cannot select multiple rows when using rangeSelect');\n            }\n            const node = params.nodes[0];\n            const lastSelectedNode = this.rowModel.getRowNode(this.lastSelected);\n            this.rowModel.getNodesInRangeForSelection(node, lastSelectedNode !== null && lastSelectedNode !== void 0 ? lastSelectedNode : null).forEach(updateNodeState);\n            this.lastSelected = node.id;\n            return 1;\n        }\n        params.nodes.forEach(updateNodeState);\n        this.lastSelected = params.nodes[params.nodes.length - 1].id;\n        return 1;\n    }\n    processNewRow(node) {\n        if (this.selectedNodes[node.id]) {\n            this.selectedNodes[node.id] = node;\n        }\n    }\n    isNodeSelected(node) {\n        const isToggled = this.selectedState.toggledNodes.has(node.id);\n        return this.selectedState.selectAll ? !isToggled : isToggled;\n    }\n    getSelectedNodes() {\n        if (this.selectAllUsed) {\n            console.warn(`AG Grid: getSelectedNodes and getSelectedRows functions cannot be used with select all functionality with the server-side row model.\n                Use \\`api.getServerSideSelectionState()\\` instead.`);\n        }\n        return Object.values(this.selectedNodes);\n    }\n    getSelectedRows() {\n        return this.getSelectedNodes().map(node => node.data);\n    }\n    getSelectionCount() {\n        if (this.selectedState.selectAll) {\n            return -1;\n        }\n        return this.selectedState.toggledNodes.size;\n    }\n    clearOtherNodes(rowNodeToKeepSelected, source) {\n        const clearedRows = this.selectedState.selectAll ? 1 : this.selectedState.toggledNodes.size - 1;\n        this.selectedState = {\n            selectAll: false,\n            toggledNodes: new Set([rowNodeToKeepSelected.id]),\n        };\n        this.rowModel.forEachNode(node => {\n            if (node !== rowNodeToKeepSelected) {\n                node.selectThisNode(false, undefined, source);\n            }\n        });\n        const event = {\n            type: Events.EVENT_SELECTION_CHANGED,\n            source,\n        };\n        this.eventService.dispatchEvent(event);\n        return clearedRows;\n    }\n    isEmpty() {\n        var _a;\n        return !this.selectedState.selectAll && !((_a = this.selectedState.toggledNodes) === null || _a === void 0 ? void 0 : _a.size);\n    }\n    selectAllRowNodes(params) {\n        this.selectedState = { selectAll: true, toggledNodes: new Set() };\n        this.selectedNodes = {};\n        this.selectAllUsed = true;\n    }\n    deselectAllRowNodes(params) {\n        this.selectedState = { selectAll: false, toggledNodes: new Set() };\n        this.selectedNodes = {};\n    }\n    getSelectAllState(justFiltered, justCurrentPage) {\n        if (this.selectedState.selectAll) {\n            if (this.selectedState.toggledNodes.size > 0) {\n                return null;\n            }\n            return true;\n        }\n        if (this.selectedState.toggledNodes.size > 0) {\n            return null;\n        }\n        return false;\n    }\n}\n__decorate$g([\n    Autowired('rowModel')\n], DefaultStrategy.prototype, \"rowModel\", void 0);\n__decorate$g([\n    PostConstruct\n], DefaultStrategy.prototype, \"init\", null);\n\nvar __decorate$f = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nclass GroupSelectsChildrenStrategy extends BeanStub {\n    constructor() {\n        super(...arguments);\n        this.selectedState = { selectAllChildren: false, toggledNodes: new Map() };\n        this.lastSelected = null;\n    }\n    init() {\n        // if model has updated, a store may now be fully loaded to clean up indeterminate states\n        this.addManagedListener(this.eventService, Events.EVENT_MODEL_UPDATED, () => this.removeRedundantState());\n        // when the grouping changes, the state no longer makes sense, so reset the state.\n        this.addManagedListener(this.eventService, Events.EVENT_COLUMN_ROW_GROUP_CHANGED, () => this.selectionService.reset());\n    }\n    getSelectedState() {\n        const recursivelySerializeState = (state, level, nodeId) => {\n            const normalisedState = {\n                nodeId,\n            };\n            if (level <= this.columnModel.getRowGroupColumns().length) {\n                normalisedState.selectAllChildren = state.selectAllChildren;\n            }\n            // omit toggledNodes if empty\n            if (state.toggledNodes.size) {\n                const toggledNodes = [];\n                state.toggledNodes.forEach((value, key) => {\n                    const newState = recursivelySerializeState(value, level + 1, key);\n                    toggledNodes.push(newState);\n                });\n                normalisedState.toggledNodes = toggledNodes;\n            }\n            return normalisedState;\n        };\n        return recursivelySerializeState(this.selectedState, 0);\n    }\n    setSelectedState(state) {\n        const recursivelyDeserializeState = (normalisedState, parentSelected) => {\n            var _a, _b;\n            if (typeof normalisedState !== 'object') {\n                throw new Error('AG Grid: Each provided state object must be an object.');\n            }\n            if ('selectAllChildren' in normalisedState && typeof normalisedState.selectAllChildren !== 'boolean') {\n                throw new Error('AG Grid: `selectAllChildren` must be a boolean value or undefined.');\n            }\n            if ('toggledNodes' in normalisedState) {\n                if (!Array.isArray(normalisedState.toggledNodes)) {\n                    throw new Error('AG Grid: `toggledNodes` must be an array.');\n                }\n                const allHaveIds = normalisedState.toggledNodes.every(innerState => (typeof innerState === 'object' && 'nodeId' in innerState && typeof innerState.nodeId === 'string'));\n                if (!allHaveIds) {\n                    throw new Error('AG Grid: Every `toggledNode` requires an associated string id.');\n                }\n            }\n            const isThisNodeSelected = (_a = normalisedState.selectAllChildren) !== null && _a !== void 0 ? _a : !parentSelected;\n            const convertedChildren = (_b = normalisedState.toggledNodes) === null || _b === void 0 ? void 0 : _b.map(innerState => ([innerState.nodeId, recursivelyDeserializeState(innerState, isThisNodeSelected)]));\n            const doesRedundantStateExist = convertedChildren === null || convertedChildren === void 0 ? void 0 : convertedChildren.some(([_, innerState]) => isThisNodeSelected === innerState.selectAllChildren && innerState.toggledNodes.size === 0);\n            if (doesRedundantStateExist) {\n                throw new Error(`\n                    AG Grid: AG Grid: Row selection state could not be parsed due to invalid data. Ensure all child state has toggledNodes or does not conform with the parent rule.\n                    Please rebuild the selection state and reapply it.\n                `);\n            }\n            return {\n                selectAllChildren: isThisNodeSelected,\n                toggledNodes: new Map(convertedChildren),\n            };\n        };\n        try {\n            this.selectedState = recursivelyDeserializeState(state, !!state.selectAllChildren);\n        }\n        catch (e) {\n            console.error(e.message);\n        }\n    }\n    deleteSelectionStateFromParent(parentRoute, removedNodeIds) {\n        let parentState = this.selectedState;\n        const remainingRoute = [...parentRoute];\n        while (parentState && remainingRoute.length) {\n            parentState = parentState.toggledNodes.get(remainingRoute.pop());\n        }\n        // parent has no explicit state, nothing to remove\n        if (!parentState) {\n            return false;\n        }\n        let anyStateChanged = false;\n        removedNodeIds.forEach(id => {\n            if (parentState === null || parentState === void 0 ? void 0 : parentState.toggledNodes.delete(id)) {\n                anyStateChanged = true;\n            }\n        });\n        if (anyStateChanged) {\n            this.removeRedundantState();\n        }\n        return anyStateChanged;\n    }\n    setNodesSelected(params) {\n        const { nodes } = params, other = __rest(params, [\"nodes\"]);\n        if (nodes.length === 0)\n            return 0;\n        if (params.rangeSelect) {\n            if (nodes.length > 1) {\n                throw new Error('AG Grid: cannot select multiple rows when using rangeSelect');\n            }\n            const node = nodes[0];\n            const rangeOfNodes = this.rowModel.getNodesInRangeForSelection(node, this.lastSelected);\n            // sort the routes by route length, high to low, this means we can do the lowest level children first\n            const routes = rangeOfNodes.map(this.getRouteToNode).sort((a, b) => b.length - a.length);\n            // skip routes if we've already done a descendent\n            const completedRoutes = new Set();\n            routes.forEach(route => {\n                // skip routes if we've already selected a descendent\n                if (completedRoutes.has(route[route.length - 1])) {\n                    return;\n                }\n                route.forEach(part => completedRoutes.add(part));\n                this.recursivelySelectNode(route, this.selectedState, Object.assign({ node }, other));\n            });\n            this.removeRedundantState();\n            this.lastSelected = node;\n            return 1;\n        }\n        params.nodes.forEach(node => {\n            const idPathToNode = this.getRouteToNode(node);\n            this.recursivelySelectNode(idPathToNode, this.selectedState, Object.assign(Object.assign({}, other), { node }));\n        });\n        this.removeRedundantState();\n        this.lastSelected = params.nodes[params.nodes.length - 1];\n        return 1;\n    }\n    isNodeSelected(node) {\n        const path = this.getRouteToNode(node);\n        return this.isNodePathSelected(path, this.selectedState);\n    }\n    isNodePathSelected([nextNode, ...nodes], state) {\n        if (nodes.length === 0) {\n            const isToggled = state.toggledNodes.has(nextNode.id);\n            if (nextNode.hasChildren()) {\n                const groupState = state.toggledNodes.get(nextNode.id);\n                if (groupState && groupState.toggledNodes.size) {\n                    return undefined;\n                }\n            }\n            return state.selectAllChildren ? !isToggled : isToggled;\n        }\n        // if there's a deeper level, check recursively\n        if (state.toggledNodes.has(nextNode.id)) {\n            const nextState = state.toggledNodes.get(nextNode.id);\n            if (nextState) {\n                return this.isNodePathSelected(nodes, nextState);\n            }\n        }\n        // no deeper custom state, respect the closest default\n        return !!state.selectAllChildren;\n    }\n    getRouteToNode(node) {\n        const pathToNode = [];\n        let tempNode = node;\n        while (tempNode.parent) {\n            pathToNode.push(tempNode);\n            tempNode = tempNode.parent;\n        }\n        return pathToNode.reverse();\n    }\n    removeRedundantState() {\n        if (this.filterManager.isAnyFilterPresent()) {\n            return;\n        }\n        const recursivelyRemoveState = (selectedState = this.selectedState, store = this.serverSideRowModel.getRootStore(), node) => {\n            let allChildNodesFound = true;\n            let noIndeterminateChildren = true;\n            selectedState.toggledNodes.forEach((state, id) => {\n                const parentNode = this.rowModel.getRowNode(id);\n                if (!parentNode) {\n                    allChildNodesFound = false;\n                }\n                const nextStore = parentNode === null || parentNode === void 0 ? void 0 : parentNode.childStore;\n                if (!nextStore) {\n                    if (state.toggledNodes.size > 0) {\n                        noIndeterminateChildren = false;\n                    }\n                    return;\n                }\n                // if child was cleared, check if this state is still relevant\n                if (recursivelyRemoveState(state, nextStore, parentNode)) {\n                    // cleans out groups which have no toggled nodes and an equivalent default to its parent\n                    if (selectedState.selectAllChildren === state.selectAllChildren) {\n                        selectedState.toggledNodes.delete(id);\n                    }\n                }\n                if (state.toggledNodes.size > 0) {\n                    noIndeterminateChildren = false;\n                }\n            });\n            if (!store || !store.isLastRowIndexKnown() || store.getRowCount() !== selectedState.toggledNodes.size) {\n                // if row count unknown, or doesn't match the size of toggledNodes, ignore.\n                return false;\n            }\n            if (noIndeterminateChildren && allChildNodesFound) {\n                selectedState.toggledNodes.clear();\n                selectedState.selectAllChildren = !selectedState.selectAllChildren;\n                // if node was indeterminate, it's not any more.\n                if (node && (node === null || node === void 0 ? void 0 : node.isSelected()) !== selectedState.selectAllChildren) {\n                    node.selectThisNode(selectedState.selectAllChildren, undefined, 'api');\n                }\n                return true;\n            }\n            return false;\n        };\n        recursivelyRemoveState();\n    }\n    recursivelySelectNode([nextNode, ...nodes], selectedState, params) {\n        if (!nextNode) {\n            return;\n        }\n        // if this is the last node, hard add/remove based on its selectAllChildren state\n        const isLastNode = !nodes.length;\n        if (isLastNode) {\n            const needsDeleted = selectedState.selectAllChildren === params.newValue;\n            if (needsDeleted) {\n                selectedState.toggledNodes.delete(nextNode.id);\n                return;\n            }\n            const newState = {\n                selectAllChildren: params.newValue,\n                toggledNodes: new Map(),\n            };\n            selectedState.toggledNodes.set(nextNode.id, newState);\n            return;\n        }\n        const doesStateAlreadyExist = selectedState.toggledNodes.has(nextNode.id);\n        const childState = doesStateAlreadyExist ? (selectedState.toggledNodes.get(nextNode.id)) : {\n            selectAllChildren: selectedState.selectAllChildren,\n            toggledNodes: new Map(),\n        };\n        if (!doesStateAlreadyExist) {\n            selectedState.toggledNodes.set(nextNode.id, childState);\n        }\n        this.recursivelySelectNode(nodes, childState, params);\n        // cleans out groups which have no toggled nodes and an equivalent default to its parent\n        if (selectedState.selectAllChildren === childState.selectAllChildren && childState.toggledNodes.size === 0) {\n            selectedState.toggledNodes.delete(nextNode.id);\n        }\n    }\n    getSelectedNodes() {\n        console.warn(`AG Grid: \\`getSelectedNodes\\` and \\`getSelectedRows\\` functions cannot be used with \\`groupSelectsChildren\\` and the server-side row model.\n            Use \\`api.getServerSideSelectionState()\\` instead.`);\n        const selectedNodes = [];\n        this.rowModel.forEachNode(node => {\n            if (node.isSelected()) {\n                selectedNodes.push(node);\n            }\n        });\n        return selectedNodes;\n    }\n    processNewRow(node) {\n        // This is used for updating outdated node refs, as this model entirely uses ids it's irrelevant\n    }\n    getSelectedRows() {\n        return this.getSelectedNodes().map(node => node.data);\n    }\n    getSelectionCount() {\n        return -1;\n    }\n    isEmpty() {\n        var _a;\n        return !this.selectedState.selectAllChildren && !((_a = this.selectedState.toggledNodes) === null || _a === void 0 ? void 0 : _a.size);\n    }\n    selectAllRowNodes(params) {\n        this.selectedState = { selectAllChildren: true, toggledNodes: new Map() };\n    }\n    deselectAllRowNodes(params) {\n        this.selectedState = { selectAllChildren: false, toggledNodes: new Map() };\n    }\n    getSelectAllState(justFiltered, justCurrentPage) {\n        if (this.selectedState.selectAllChildren) {\n            if (this.selectedState.toggledNodes.size > 0) {\n                return null;\n            }\n            return true;\n        }\n        if (this.selectedState.toggledNodes.size > 0) {\n            return null;\n        }\n        return false;\n    }\n}\n__decorate$f([\n    Autowired('rowModel')\n], GroupSelectsChildrenStrategy.prototype, \"rowModel\", void 0);\n__decorate$f([\n    Autowired('columnModel')\n], GroupSelectsChildrenStrategy.prototype, \"columnModel\", void 0);\n__decorate$f([\n    Autowired('filterManager')\n], GroupSelectsChildrenStrategy.prototype, \"filterManager\", void 0);\n__decorate$f([\n    Autowired('rowModel')\n], GroupSelectsChildrenStrategy.prototype, \"serverSideRowModel\", void 0);\n__decorate$f([\n    Autowired('selectionService')\n], GroupSelectsChildrenStrategy.prototype, \"selectionService\", void 0);\n__decorate$f([\n    PostConstruct\n], GroupSelectsChildrenStrategy.prototype, \"init\", null);\n\nvar __decorate$e = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet ServerSideSelectionService = class ServerSideSelectionService extends BeanStub {\n    init() {\n        const groupSelectsChildren = this.gridOptionsService.is('groupSelectsChildren');\n        this.addManagedPropertyListener('groupSelectsChildren', (propChange) => {\n            this.destroyBean(this.selectionStrategy);\n            const StrategyClazz = !propChange.currentValue ? DefaultStrategy : GroupSelectsChildrenStrategy;\n            this.selectionStrategy = this.createManagedBean(new StrategyClazz());\n            this.shotgunResetNodeSelectionState();\n            const event = {\n                type: Events.EVENT_SELECTION_CHANGED,\n                source: 'api',\n            };\n            this.eventService.dispatchEvent(event);\n        });\n        this.rowSelection = this.gridOptionsService.get('rowSelection');\n        this.addManagedPropertyListener('rowSelection', (propChange) => this.rowSelection = propChange.currentValue);\n        const StrategyClazz = !groupSelectsChildren ? DefaultStrategy : GroupSelectsChildrenStrategy;\n        this.selectionStrategy = this.createManagedBean(new StrategyClazz());\n    }\n    getServerSideSelectionState() {\n        return this.selectionStrategy.getSelectedState();\n    }\n    setServerSideSelectionState(state) {\n        this.selectionStrategy.setSelectedState(state);\n        this.shotgunResetNodeSelectionState();\n        const event = {\n            type: Events.EVENT_SELECTION_CHANGED,\n            source: 'api',\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    setNodesSelected(params) {\n        if (params.nodes.length > 1 && this.rowSelection !== 'multiple') {\n            console.warn(`AG Grid: cannot multi select while rowSelection='single'`);\n            return 0;\n        }\n        if (params.nodes.length > 1 && params.rangeSelect) {\n            console.warn(`AG Grid: cannot use range selection when multi selecting rows`);\n            return 0;\n        }\n        const changedNodes = this.selectionStrategy.setNodesSelected(params);\n        this.shotgunResetNodeSelectionState(params.source);\n        const event = {\n            type: Events.EVENT_SELECTION_CHANGED,\n            source: params.source,\n        };\n        this.eventService.dispatchEvent(event);\n        return changedNodes;\n    }\n    /**\n     * Deletes the selection state for a set of nodes, for use after deleting nodes via\n     * transaction. As this is designed for transactions, all nodes should belong to the same group.\n     */\n    deleteSelectionStateFromParent(storeRoute, removedNodeIds) {\n        const stateChanged = this.selectionStrategy.deleteSelectionStateFromParent(storeRoute, removedNodeIds);\n        if (!stateChanged) {\n            return;\n        }\n        this.shotgunResetNodeSelectionState();\n        const event = {\n            type: Events.EVENT_SELECTION_CHANGED,\n            source: 'api',\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    shotgunResetNodeSelectionState(source) {\n        this.rowModel.forEachNode(node => {\n            if (node.stub) {\n                return;\n            }\n            const isNodeSelected = this.selectionStrategy.isNodeSelected(node);\n            if (isNodeSelected !== node.isSelected()) {\n                node.selectThisNode(isNodeSelected, undefined, source);\n            }\n        });\n    }\n    getSelectedNodes() {\n        return this.selectionStrategy.getSelectedNodes();\n    }\n    getSelectedRows() {\n        return this.selectionStrategy.getSelectedRows();\n    }\n    getSelectionCount() {\n        return this.selectionStrategy.getSelectionCount();\n    }\n    syncInRowNode(rowNode, oldNode) {\n        // update any refs being held in the strategies\n        this.selectionStrategy.processNewRow(rowNode);\n        const isNodeSelected = this.selectionStrategy.isNodeSelected(rowNode);\n        rowNode.setSelectedInitialValue(isNodeSelected);\n    }\n    reset() {\n        this.selectionStrategy.deselectAllRowNodes({ source: 'api' });\n    }\n    isEmpty() {\n        return this.selectionStrategy.isEmpty();\n    }\n    selectAllRowNodes(params) {\n        if (params.justCurrentPage || params.justFiltered) {\n            console.warn(\"AG Grid: selecting just filtered only works when gridOptions.rowModelType='clientSide'\");\n        }\n        this.selectionStrategy.selectAllRowNodes(params);\n        this.rowModel.forEachNode(node => {\n            if (node.stub) {\n                return;\n            }\n            node.selectThisNode(true, undefined, params.source);\n        });\n        const event = {\n            type: Events.EVENT_SELECTION_CHANGED,\n            source: params.source,\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    deselectAllRowNodes(params) {\n        if (params.justCurrentPage || params.justFiltered) {\n            console.warn(\"AG Grid: selecting just filtered only works when gridOptions.rowModelType='clientSide'\");\n        }\n        this.selectionStrategy.deselectAllRowNodes(params);\n        this.rowModel.forEachNode(node => {\n            if (node.stub) {\n                return;\n            }\n            node.selectThisNode(false, undefined, params.source);\n        });\n        const event = {\n            type: Events.EVENT_SELECTION_CHANGED,\n            source: params.source,\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    getSelectAllState(justFiltered, justCurrentPage) {\n        return this.selectionStrategy.getSelectAllState(justFiltered, justCurrentPage);\n    }\n    // used by CSRM\n    updateGroupsFromChildrenSelections(source, changedPath) {\n        return false;\n    }\n    // used by CSRM\n    getBestCostNodeSelection() {\n        console.warn('AG Grid: calling gridApi.getBestCostNodeSelection() is only possible when using rowModelType=`clientSide`.');\n        return undefined;\n    }\n    // used by CSRM\n    filterFromSelection() {\n        return;\n    }\n};\n__decorate$e([\n    Autowired('rowModel')\n], ServerSideSelectionService.prototype, \"rowModel\", void 0);\n__decorate$e([\n    PostConstruct\n], ServerSideSelectionService.prototype, \"init\", null);\nServerSideSelectionService = __decorate$e([\n    Bean('selectionService')\n], ServerSideSelectionService);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$4 = '30.0.3';\n\nconst ServerSideRowModelModule = {\n    version: VERSION$4,\n    moduleName: ModuleNames.ServerSideRowModelModule,\n    rowModel: 'serverSide',\n    beans: [ServerSideRowModel, ExpandListener, SortListener, StoreUtils, BlockUtils, NodeManager, TransactionManager,\n        FilterListener, StoreFactory, ListenerUtils, ServerSideSelectionService],\n    dependantModules: [\n        EnterpriseCoreModule\n    ]\n};\n\n/** @param V type of value in the Set Filter */\nclass ClientSideValuesExtractor {\n    constructor(rowModel, filterParams, createKey, caseFormat, columnModel, valueService, treeDataOrGrouping, treeData, getDataPath) {\n        this.rowModel = rowModel;\n        this.filterParams = filterParams;\n        this.createKey = createKey;\n        this.caseFormat = caseFormat;\n        this.columnModel = columnModel;\n        this.valueService = valueService;\n        this.treeDataOrGrouping = treeDataOrGrouping;\n        this.treeData = treeData;\n        this.getDataPath = getDataPath;\n    }\n    extractUniqueValues(predicate, existingValues) {\n        const values = new Map();\n        const existingFormattedKeys = this.extractExistingFormattedKeys(existingValues);\n        const formattedKeys = new Set();\n        const treeData = this.treeData && !!this.getDataPath;\n        const groupedCols = this.columnModel.getRowGroupColumns();\n        const addValue = (unformattedKey, value) => {\n            const formattedKey = this.caseFormat(unformattedKey);\n            if (!formattedKeys.has(formattedKey)) {\n                formattedKeys.add(formattedKey);\n                let keyToAdd = unformattedKey;\n                let valueToAdd = _.makeNull(value);\n                // when case insensitive, we pick the first value to use. if this is later filtered out,\n                // we still want to use the original value and not one with a different case\n                const existingUnformattedKey = existingFormattedKeys === null || existingFormattedKeys === void 0 ? void 0 : existingFormattedKeys.get(formattedKey);\n                if (existingUnformattedKey != null) {\n                    keyToAdd = existingUnformattedKey;\n                    valueToAdd = existingValues.get(existingUnformattedKey);\n                }\n                values.set(keyToAdd, valueToAdd);\n            }\n        };\n        this.rowModel.forEachLeafNode(node => {\n            // only pull values from rows that have data. this means we skip filler group nodes.\n            if (!node.data || !predicate(node)) {\n                return;\n            }\n            if (this.treeDataOrGrouping) {\n                this.addValueForTreeDataOrGrouping(node, treeData, groupedCols, addValue);\n                return;\n            }\n            let value = this.getValue(node);\n            if (this.filterParams.convertValuesToStrings) {\n                // for backwards compatibility - keeping separate as it will eventually be removed\n                this.addValueForConvertValuesToString(node, value, addValue);\n                return;\n            }\n            if (value != null && Array.isArray(value)) {\n                value.forEach(x => {\n                    addValue(this.createKey(x, node), x);\n                });\n                if (value.length === 0) {\n                    addValue(null, null);\n                }\n            }\n            else {\n                addValue(this.createKey(value, node), value);\n            }\n        });\n        return values;\n    }\n    addValueForConvertValuesToString(node, value, addValue) {\n        const key = this.createKey(value, node);\n        if (key != null && Array.isArray(key)) {\n            key.forEach(part => {\n                const processedPart = _.toStringOrNull(_.makeNull(part));\n                addValue(processedPart, processedPart);\n            });\n            if (key.length === 0) {\n                addValue(null, null);\n            }\n        }\n        else {\n            addValue(key, key);\n        }\n    }\n    addValueForTreeDataOrGrouping(node, treeData, groupedCols, addValue) {\n        var _a;\n        let dataPath;\n        if (treeData) {\n            if ((_a = node.childrenAfterGroup) === null || _a === void 0 ? void 0 : _a.length) {\n                return;\n            }\n            dataPath = this.getDataPath(node.data);\n        }\n        else {\n            dataPath = groupedCols.map(groupCol => this.valueService.getKeyForNode(groupCol, node));\n            dataPath.push(this.getValue(node));\n        }\n        if (dataPath) {\n            dataPath = dataPath.map(treeKey => _.toStringOrNull(_.makeNull(treeKey)));\n        }\n        if (dataPath === null || dataPath === void 0 ? void 0 : dataPath.some(treeKey => treeKey == null)) {\n            dataPath = null;\n        }\n        addValue(this.createKey(dataPath), dataPath);\n    }\n    getValue(node) {\n        const { api, colDef, column, columnApi, context } = this.filterParams;\n        return this.filterParams.valueGetter({\n            api,\n            colDef,\n            column,\n            columnApi,\n            context,\n            data: node.data,\n            getValue: (field) => node.data[field],\n            node,\n        });\n    }\n    extractExistingFormattedKeys(existingValues) {\n        if (!existingValues) {\n            return null;\n        }\n        const existingFormattedKeys = new Map();\n        existingValues.forEach((_value, key) => {\n            existingFormattedKeys.set(this.caseFormat(key), key);\n        });\n        return existingFormattedKeys;\n    }\n}\n\nclass SetFilterDisplayValue {\n}\nSetFilterDisplayValue.SELECT_ALL = '__AG_SELECT_ALL__';\n\nclass FlatSetDisplayValueModel {\n    constructor(valueFormatterService, valueFormatter, formatter, column) {\n        this.valueFormatterService = valueFormatterService;\n        this.valueFormatter = valueFormatter;\n        this.formatter = formatter;\n        this.column = column;\n        /** All keys that are currently displayed, after the mini-filter has been applied. */\n        this.displayedKeys = [];\n    }\n    updateDisplayedValuesToAllAvailable(_getValue, _allKeys, availableKeys) {\n        this.displayedKeys = Array.from(availableKeys);\n    }\n    updateDisplayedValuesToMatchMiniFilter(getValue, _allKeys, availableKeys, matchesFilter, nullMatchesFilter) {\n        this.displayedKeys = [];\n        for (let key of availableKeys) {\n            if (key == null) {\n                if (nullMatchesFilter) {\n                    this.displayedKeys.push(key);\n                }\n            }\n            else {\n                const value = getValue(key);\n                const valueFormatterValue = this.valueFormatterService.formatValue(this.column, null, value, this.valueFormatter, false);\n                const textFormatterValue = this.formatter(valueFormatterValue);\n                if (matchesFilter(textFormatterValue)) {\n                    this.displayedKeys.push(key);\n                }\n            }\n        }\n    }\n    getDisplayedValueCount() {\n        return this.displayedKeys.length;\n    }\n    getDisplayedItem(index) {\n        return this.displayedKeys[index];\n    }\n    getSelectAllItem() {\n        return SetFilterDisplayValue.SELECT_ALL;\n    }\n    getDisplayedKeys() {\n        return this.displayedKeys;\n    }\n    forEachDisplayedKey(func) {\n        this.displayedKeys.forEach(func);\n    }\n    someDisplayedKey(func) {\n        return this.displayedKeys.some(func);\n    }\n    hasGroups() {\n        return false;\n    }\n    refresh() {\n        // not used\n    }\n}\n\nclass TreeSetDisplayValueModel {\n    constructor(formatter, treeListPathGetter, treeListFormatter, treeDataOrGrouping) {\n        this.formatter = formatter;\n        this.treeListPathGetter = treeListPathGetter;\n        this.treeListFormatter = treeListFormatter;\n        this.treeDataOrGrouping = treeDataOrGrouping;\n        /** all displayed items in a tree structure */\n        this.allDisplayedItemsTree = [];\n        /** all displayed items flattened and filtered */\n        this.activeDisplayedItemsFlat = [];\n        this.selectAllItem = {\n            depth: 0,\n            filterPasses: true,\n            available: true,\n            treeKey: SetFilterDisplayValue.SELECT_ALL,\n            children: this.allDisplayedItemsTree,\n            expanded: true,\n            key: SetFilterDisplayValue.SELECT_ALL,\n            parentTreeKeys: []\n        };\n    }\n    ;\n    updateDisplayedValuesToAllAvailable(getValue, allKeys, availableKeys, source) {\n        if (source === 'reload') {\n            this.generateItemTree(getValue, allKeys, availableKeys);\n        }\n        else if (source === 'otherFilter') {\n            this.updateAvailable(availableKeys);\n            this.updateExpandAll();\n        }\n        else if (source === 'miniFilter') {\n            this.resetFilter();\n            this.updateExpandAll();\n        }\n        this.flattenItems();\n    }\n    updateDisplayedValuesToMatchMiniFilter(getValue, allKeys, availableKeys, matchesFilter, nullMatchesFilter, source) {\n        if (source === 'reload') {\n            this.generateItemTree(getValue, allKeys, availableKeys);\n        }\n        else if (source === 'otherFilter') {\n            this.updateAvailable(availableKeys);\n        }\n        this.updateFilter(matchesFilter, nullMatchesFilter);\n        this.updateExpandAll();\n        this.flattenItems();\n    }\n    generateItemTree(getValue, allKeys, availableKeys) {\n        var _a;\n        this.allDisplayedItemsTree = [];\n        this.groupsExist = false;\n        const treeListPathGetter = this.getTreeListPathGetter(getValue, availableKeys);\n        for (let key of allKeys) {\n            const value = getValue(key);\n            const dataPath = (_a = treeListPathGetter(value)) !== null && _a !== void 0 ? _a : [null];\n            if (dataPath.length > 1) {\n                this.groupsExist = true;\n            }\n            const available = availableKeys.has(key);\n            let children = this.allDisplayedItemsTree;\n            let item;\n            let parentTreeKeys = [];\n            dataPath.forEach((treeKey, depth) => {\n                if (!children) {\n                    children = [];\n                    item.children = children;\n                }\n                item = children.find(child => { var _a; return ((_a = child.treeKey) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === (treeKey === null || treeKey === void 0 ? void 0 : treeKey.toUpperCase()); });\n                if (!item) {\n                    item = { treeKey, depth, filterPasses: true, expanded: false, available, parentTreeKeys };\n                    if (depth === dataPath.length - 1) {\n                        item.key = key;\n                    }\n                    children.push(item);\n                }\n                children = item.children;\n                parentTreeKeys = [...parentTreeKeys, treeKey];\n            });\n        }\n        // update the parent availability based on the children\n        this.updateAvailable(availableKeys);\n        this.selectAllItem.children = this.allDisplayedItemsTree;\n        this.selectAllItem.expanded = false;\n    }\n    getTreeListPathGetter(getValue, availableKeys) {\n        if (this.treeListPathGetter) {\n            return this.treeListPathGetter;\n        }\n        if (this.treeDataOrGrouping) {\n            return value => value;\n        }\n        // infer from data\n        let isDate = false;\n        for (const availableKey of availableKeys) {\n            // find the first non-null value\n            const value = getValue(availableKey);\n            if (value instanceof Date) {\n                isDate = true;\n                break;\n            }\n            else if (value != null) {\n                break;\n            }\n        }\n        if (isDate) {\n            return TreeSetDisplayValueModel.DATE_TREE_LIST_PATH_GETTER;\n        }\n        _.doOnce(() => console.warn('AG Grid: property treeList=true for Set Filter params, but you did not provide a treeListPathGetter or values of type Date.'), 'getTreeListPathGetter');\n        return value => [String(value)];\n    }\n    flattenItems() {\n        this.activeDisplayedItemsFlat = [];\n        const recursivelyFlattenDisplayedItems = (items) => {\n            items.forEach(item => {\n                if (!item.filterPasses || !item.available) {\n                    return;\n                }\n                this.activeDisplayedItemsFlat.push(item);\n                if (item.children && item.expanded) {\n                    recursivelyFlattenDisplayedItems(item.children);\n                }\n            });\n        };\n        recursivelyFlattenDisplayedItems(this.allDisplayedItemsTree);\n    }\n    resetFilter() {\n        const recursiveFilterReset = (item) => {\n            if (item.children) {\n                item.children.forEach(child => {\n                    recursiveFilterReset(child);\n                });\n            }\n            item.filterPasses = true;\n        };\n        this.allDisplayedItemsTree.forEach(item => recursiveFilterReset(item));\n    }\n    updateFilter(matchesFilter, nullMatchesFilter) {\n        const passesFilter = (item) => {\n            if (!item.available) {\n                return false;\n            }\n            if (item.treeKey == null) {\n                return nullMatchesFilter;\n            }\n            return matchesFilter(this.formatter(this.treeListFormatter ? this.treeListFormatter(item.treeKey, item.depth, item.parentTreeKeys) : item.treeKey));\n        };\n        this.allDisplayedItemsTree.forEach(item => this.recursiveItemCheck(item, false, passesFilter, 'filterPasses'));\n    }\n    getDisplayedValueCount() {\n        return this.activeDisplayedItemsFlat.length;\n    }\n    getDisplayedItem(index) {\n        return this.activeDisplayedItemsFlat[index];\n    }\n    getSelectAllItem() {\n        return this.selectAllItem;\n    }\n    getDisplayedKeys() {\n        const displayedKeys = [];\n        this.forEachDisplayedKey((key) => displayedKeys.push(key));\n        return displayedKeys;\n    }\n    forEachDisplayedKey(func) {\n        const recursiveForEachItem = (item, topParentExpanded) => {\n            if (item.children) {\n                if (!item.expanded || !topParentExpanded) {\n                    // if the parent is not expanded, we need to iterate the entire tree\n                    item.children.forEach(child => {\n                        if (child.filterPasses) {\n                            recursiveForEachItem(child, false);\n                        }\n                    });\n                }\n            }\n            else {\n                func(item.key);\n            }\n        };\n        this.activeDisplayedItemsFlat.forEach(item => recursiveForEachItem(item, true));\n    }\n    someDisplayedKey(func) {\n        const recursiveSomeItem = (item, topParentExpanded) => {\n            if (item.children) {\n                if (!item.expanded || !topParentExpanded) {\n                    // if the parent is not expanded, we need to iterate the entire tree\n                    return item.children.some(child => {\n                        if (child.filterPasses) {\n                            return recursiveSomeItem(child, false);\n                        }\n                        return false;\n                    });\n                }\n            }\n            else {\n                return func(item.key);\n            }\n            return false;\n        };\n        return this.activeDisplayedItemsFlat.some(item => recursiveSomeItem(item, true));\n    }\n    hasGroups() {\n        return this.groupsExist;\n    }\n    refresh() {\n        this.updateExpandAll();\n        this.flattenItems();\n    }\n    updateExpandAll() {\n        const recursiveExpansionCheck = (items, someTrue, someFalse) => {\n            for (const item of items) {\n                if (!item.filterPasses || !item.available || !item.children) {\n                    continue;\n                }\n                // indeterminate state only exists for expand all, so don't need to check for the current item\n                someTrue = someTrue || !!item.expanded;\n                someFalse = someFalse || !item.expanded;\n                if (someTrue && someFalse) {\n                    // already indeterminate. No need to check the children\n                    return undefined;\n                }\n                const childExpanded = recursiveExpansionCheck(item.children, someTrue, someFalse);\n                if (childExpanded === undefined) {\n                    return undefined;\n                }\n                else if (childExpanded) {\n                    someTrue = true;\n                }\n                else {\n                    someFalse = true;\n                }\n            }\n            return someTrue && someFalse ? undefined : someTrue;\n        };\n        const item = this.getSelectAllItem();\n        item.expanded = recursiveExpansionCheck(item.children, false, false);\n    }\n    recursiveItemCheck(item, parentPasses, checkFunction, itemProp) {\n        let atLeastOneChildPassed = false;\n        if (item.children) {\n            item.children.forEach(child => {\n                const childPasses = this.recursiveItemCheck(child, parentPasses || checkFunction(item), checkFunction, itemProp);\n                atLeastOneChildPassed = atLeastOneChildPassed || childPasses;\n            });\n        }\n        const itemPasses = parentPasses || atLeastOneChildPassed || checkFunction(item);\n        item[itemProp] = itemPasses;\n        return itemPasses;\n    }\n    updateAvailable(availableKeys) {\n        const isAvailable = (item) => availableKeys.has(item.key);\n        this.allDisplayedItemsTree.forEach(item => this.recursiveItemCheck(item, false, isAvailable, 'available'));\n    }\n}\nTreeSetDisplayValueModel.DATE_TREE_LIST_PATH_GETTER = (date) => date ? [String(date.getFullYear()), String(date.getMonth() + 1), String(date.getDate())] : null;\n\nvar SetFilterModelValuesType;\n(function (SetFilterModelValuesType) {\n    SetFilterModelValuesType[SetFilterModelValuesType[\"PROVIDED_LIST\"] = 0] = \"PROVIDED_LIST\";\n    SetFilterModelValuesType[SetFilterModelValuesType[\"PROVIDED_CALLBACK\"] = 1] = \"PROVIDED_CALLBACK\";\n    SetFilterModelValuesType[SetFilterModelValuesType[\"TAKEN_FROM_GRID_VALUES\"] = 2] = \"TAKEN_FROM_GRID_VALUES\";\n})(SetFilterModelValuesType || (SetFilterModelValuesType = {}));\n/** @param V type of value in the Set Filter */\nclass SetValueModel {\n    constructor(params) {\n        var _a;\n        this.localEventService = new EventService();\n        this.miniFilterText = null;\n        /** Values provided to the filter for use. */\n        this.providedValues = null;\n        /** All possible values for the filter, sorted if required. */\n        this.allValues = new Map();\n        /** Remaining keys when filters from other columns have been applied. */\n        this.availableKeys = new Set();\n        /** Keys that have been selected for this filter. */\n        this.selectedKeys = new Set();\n        this.initialised = false;\n        const { usingComplexObjects, columnModel, valueService, treeDataTreeList, groupingTreeList, filterParams, gridOptionsService, valueFormatterService, valueFormatter } = params;\n        const { column, colDef, textFormatter, doesRowPassOtherFilter, suppressSorting, comparator, rowModel, values, caseSensitive, convertValuesToStrings, treeList, treeListPathGetter, treeListFormatter } = filterParams;\n        this.filterParams = filterParams;\n        this.setIsLoading = params.setIsLoading;\n        this.translate = params.translate;\n        this.caseFormat = params.caseFormat;\n        this.createKey = params.createKey;\n        this.usingComplexObjects = !!params.usingComplexObjects;\n        this.formatter = textFormatter || TextFilter.DEFAULT_FORMATTER;\n        this.doesRowPassOtherFilters = doesRowPassOtherFilter;\n        this.suppressSorting = suppressSorting || false;\n        this.convertValuesToStrings = !!convertValuesToStrings;\n        const keyComparator = comparator !== null && comparator !== void 0 ? comparator : colDef.comparator;\n        const treeDataOrGrouping = !!treeDataTreeList || !!groupingTreeList;\n        // If using complex objects and a comparator is provided, sort by values, otherwise need to sort by the string keys.\n        // Also if tree data, grouping, or date with tree list, then need to do value sort\n        this.compareByValue = !!((usingComplexObjects && keyComparator) || treeDataOrGrouping || (treeList && !treeListPathGetter));\n        if (treeDataOrGrouping && !keyComparator) {\n            this.entryComparator = this.createTreeDataOrGroupingComparator();\n        }\n        else if (treeList && !treeListPathGetter && !keyComparator) {\n            this.entryComparator = ([_aKey, aValue], [_bKey, bValue]) => _.defaultComparator(aValue, bValue);\n        }\n        else {\n            this.entryComparator = ([_aKey, aValue], [_bKey, bValue]) => keyComparator(aValue, bValue);\n        }\n        this.keyComparator = (_a = keyComparator) !== null && _a !== void 0 ? _a : _.defaultComparator;\n        this.caseSensitive = !!caseSensitive;\n        const getDataPath = gridOptionsService.get('getDataPath');\n        if (rowModel.getType() === 'clientSide') {\n            this.clientSideValuesExtractor = new ClientSideValuesExtractor(rowModel, this.filterParams, this.createKey, this.caseFormat, columnModel, valueService, treeDataOrGrouping, !!treeDataTreeList, getDataPath);\n        }\n        if (values == null) {\n            this.valuesType = SetFilterModelValuesType.TAKEN_FROM_GRID_VALUES;\n        }\n        else {\n            this.valuesType = Array.isArray(values) ?\n                SetFilterModelValuesType.PROVIDED_LIST :\n                SetFilterModelValuesType.PROVIDED_CALLBACK;\n            this.providedValues = values;\n        }\n        this.displayValueModel = treeList ? new TreeSetDisplayValueModel(this.formatter, treeListPathGetter, treeListFormatter, treeDataTreeList || groupingTreeList) : new FlatSetDisplayValueModel(valueFormatterService, valueFormatter, this.formatter, column);\n        this.updateAllValues().then(updatedKeys => this.resetSelectionState(updatedKeys || []));\n    }\n    addEventListener(eventType, listener, async) {\n        this.localEventService.addEventListener(eventType, listener, async);\n    }\n    removeEventListener(eventType, listener, async) {\n        this.localEventService.removeEventListener(eventType, listener, async);\n    }\n    /**\n     * Re-fetches the values used in the filter from the value source.\n     * If keepSelection is false, the filter selection will be reset to everything selected,\n     * otherwise the current selection will be preserved.\n     */\n    refreshValues() {\n        const currentModel = this.getModel();\n        this.updateAllValues();\n        // ensure model is updated for new values\n        return this.setModel(currentModel);\n    }\n    /**\n     * Overrides the current values being used for the set filter.\n     * If keepSelection is false, the filter selection will be reset to everything selected,\n     * otherwise the current selection will be preserved.\n     */\n    overrideValues(valuesToUse) {\n        return new AgPromise(resolve => {\n            // wait for any existing values to be populated before overriding\n            this.allValuesPromise.then(() => {\n                this.valuesType = SetFilterModelValuesType.PROVIDED_LIST;\n                this.providedValues = valuesToUse;\n                this.refreshValues().then(() => resolve());\n            });\n        });\n    }\n    /** @return has anything been updated */\n    refreshAfterAnyFilterChanged() {\n        if (this.showAvailableOnly()) {\n            return this.allValuesPromise.then(keys => {\n                this.updateAvailableKeys(keys !== null && keys !== void 0 ? keys : [], 'otherFilter');\n                return true;\n            });\n        }\n        return AgPromise.resolve(false);\n    }\n    isInitialised() {\n        return this.initialised;\n    }\n    updateAllValues() {\n        this.allValuesPromise = new AgPromise(resolve => {\n            switch (this.valuesType) {\n                case SetFilterModelValuesType.TAKEN_FROM_GRID_VALUES:\n                case SetFilterModelValuesType.PROVIDED_LIST: {\n                    resolve(this.processAllKeys(this.valuesType === SetFilterModelValuesType.TAKEN_FROM_GRID_VALUES, this.providedValues));\n                    break;\n                }\n                case SetFilterModelValuesType.PROVIDED_CALLBACK: {\n                    this.setIsLoading(true);\n                    const callback = this.providedValues;\n                    const { columnApi, api, context, column, colDef } = this.filterParams;\n                    const params = {\n                        success: values => {\n                            this.setIsLoading(false);\n                            resolve(this.processAllKeys(false, values));\n                        },\n                        colDef,\n                        column,\n                        columnApi,\n                        api,\n                        context,\n                    };\n                    window.setTimeout(() => callback(params), 0);\n                    break;\n                }\n                default:\n                    throw new Error('Unrecognised valuesType');\n            }\n        });\n        this.allValuesPromise.then(values => this.updateAvailableKeys(values || [], 'reload')).then(() => this.initialised = true);\n        return this.allValuesPromise;\n    }\n    processAllKeys(getFromRows, providedValues) {\n        const values = getFromRows ? this.getValuesFromRows(false) : this.uniqueValues(this.validateProvidedValues(providedValues));\n        const sortedKeys = this.sortKeys(values);\n        this.allValues = values !== null && values !== void 0 ? values : new Map();\n        return sortedKeys;\n    }\n    validateProvidedValues(values) {\n        if (this.usingComplexObjects && (values === null || values === void 0 ? void 0 : values.length)) {\n            const firstValue = values[0];\n            if (firstValue && typeof firstValue !== 'object' && typeof firstValue !== 'function') {\n                const firstKey = this.createKey(firstValue);\n                if (firstKey == null) {\n                    _.doOnce(() => console.warn('Set Filter Key Creator is returning null for provided values and provided values are primitives. Please provide complex objects or set convertValuesToStrings=true in the filterParams. See https://www.ag-grid.com/javascript-data-grid/filter-set-filter-list/#filter-value-types'), 'setFilterComplexObjectsProvidedNull');\n                }\n                else {\n                    _.doOnce(() => console.warn('AG Grid: Set Filter has a Key Creator, but provided values are primitives. Did you mean to provide complex objects or enable convertValuesToStrings?'), 'setFilterComplexObjectsProvidedPrimitive');\n                }\n            }\n        }\n        return values;\n    }\n    setValuesType(value) {\n        this.valuesType = value;\n    }\n    getValuesType() {\n        return this.valuesType;\n    }\n    isKeyAvailable(key) {\n        return this.availableKeys.has(key);\n    }\n    showAvailableOnly() {\n        return this.valuesType === SetFilterModelValuesType.TAKEN_FROM_GRID_VALUES;\n    }\n    updateAvailableKeys(allKeys, source) {\n        const availableKeys = this.showAvailableOnly() ? this.sortKeys(this.getValuesFromRows(true)) : allKeys;\n        this.availableKeys = new Set(availableKeys);\n        this.localEventService.dispatchEvent({ type: SetValueModel.EVENT_AVAILABLE_VALUES_CHANGED });\n        this.updateDisplayedValues(source, allKeys);\n    }\n    sortKeys(nullableValues) {\n        const values = nullableValues !== null && nullableValues !== void 0 ? nullableValues : new Map();\n        if (this.suppressSorting) {\n            return Array.from(values.keys());\n        }\n        let sortedKeys;\n        if (this.compareByValue) {\n            sortedKeys = Array.from(values.entries()).sort(this.entryComparator).map(([key]) => key);\n        }\n        else {\n            sortedKeys = Array.from(values.keys()).sort(this.keyComparator);\n        }\n        if (this.filterParams.excelMode && values.has(null)) {\n            // ensure the blank value always appears last\n            sortedKeys = sortedKeys.filter(v => v != null);\n            sortedKeys.push(null);\n        }\n        return sortedKeys;\n    }\n    getValuesFromRows(removeUnavailableValues = false) {\n        if (!this.clientSideValuesExtractor) {\n            console.error('AG Grid: Set Filter cannot initialise because you are using a row model that does not contain all rows in the browser. Either use a different filter type, or configure Set Filter such that you provide it with values');\n            return null;\n        }\n        const predicate = (node) => (!removeUnavailableValues || this.doesRowPassOtherFilters(node));\n        return this.clientSideValuesExtractor.extractUniqueValues(predicate, removeUnavailableValues && !this.caseSensitive ? this.allValues : undefined);\n    }\n    /** Sets mini filter value. Returns true if it changed from last value, otherwise false. */\n    setMiniFilter(value) {\n        value = _.makeNull(value);\n        if (this.miniFilterText === value) {\n            //do nothing if filter has not changed\n            return false;\n        }\n        this.miniFilterText = value;\n        this.updateDisplayedValues('miniFilter');\n        return true;\n    }\n    getMiniFilter() {\n        return this.miniFilterText;\n    }\n    updateDisplayedValues(source, allKeys) {\n        if (source === 'expansion') {\n            this.displayValueModel.refresh();\n            return;\n        }\n        // if no filter, just display all available values\n        if (this.miniFilterText == null) {\n            this.displayValueModel.updateDisplayedValuesToAllAvailable((key) => this.getValue(key), allKeys, this.availableKeys, source);\n            return;\n        }\n        // if filter present, we filter down the list\n        // to allow for case insensitive searches, upper-case both filter text and value\n        const formattedFilterText = this.caseFormat(this.formatter(this.miniFilterText) || '');\n        const matchesFilter = (valueToCheck) => valueToCheck != null && this.caseFormat(valueToCheck).indexOf(formattedFilterText) >= 0;\n        const nullMatchesFilter = !!this.filterParams.excelMode && matchesFilter(this.translate('blanks'));\n        this.displayValueModel.updateDisplayedValuesToMatchMiniFilter((key) => this.getValue(key), allKeys, this.availableKeys, matchesFilter, nullMatchesFilter, source);\n    }\n    getDisplayedValueCount() {\n        return this.displayValueModel.getDisplayedValueCount();\n    }\n    getDisplayedItem(index) {\n        return this.displayValueModel.getDisplayedItem(index);\n    }\n    getSelectAllItem() {\n        return this.displayValueModel.getSelectAllItem();\n    }\n    hasSelections() {\n        return this.filterParams.defaultToNothingSelected ?\n            this.selectedKeys.size > 0 :\n            this.allValues.size !== this.selectedKeys.size;\n    }\n    getKeys() {\n        return Array.from(this.allValues.keys());\n    }\n    getValues() {\n        return Array.from(this.allValues.values());\n    }\n    getValue(key) {\n        return this.allValues.get(key);\n    }\n    selectAllMatchingMiniFilter(clearExistingSelection = false) {\n        if (this.miniFilterText == null) {\n            // ensure everything is selected\n            this.selectedKeys = new Set(this.allValues.keys());\n        }\n        else {\n            // ensure everything that matches the mini filter is selected\n            if (clearExistingSelection) {\n                this.selectedKeys.clear();\n            }\n            this.displayValueModel.forEachDisplayedKey(key => this.selectedKeys.add(key));\n        }\n    }\n    deselectAllMatchingMiniFilter() {\n        if (this.miniFilterText == null) {\n            // ensure everything is deselected\n            this.selectedKeys.clear();\n        }\n        else {\n            // ensure everything that matches the mini filter is deselected\n            this.displayValueModel.forEachDisplayedKey(key => this.selectedKeys.delete(key));\n        }\n    }\n    selectKey(key) {\n        this.selectedKeys.add(key);\n    }\n    deselectKey(key) {\n        if (this.filterParams.excelMode && this.isEverythingVisibleSelected()) {\n            // ensure we're starting from the correct \"everything selected\" state\n            this.resetSelectionState(this.displayValueModel.getDisplayedKeys());\n        }\n        this.selectedKeys.delete(key);\n    }\n    isKeySelected(key) {\n        return this.selectedKeys.has(key);\n    }\n    isEverythingVisibleSelected() {\n        return !this.displayValueModel.someDisplayedKey(it => !this.isKeySelected(it));\n    }\n    isNothingVisibleSelected() {\n        return !this.displayValueModel.someDisplayedKey(it => this.isKeySelected(it));\n    }\n    getModel() {\n        return this.hasSelections() ? Array.from(this.selectedKeys) : null;\n    }\n    setModel(model) {\n        return this.allValuesPromise.then(keys => {\n            if (model == null) {\n                this.resetSelectionState(keys !== null && keys !== void 0 ? keys : []);\n            }\n            else {\n                // select all values from the model that exist in the filter\n                this.selectedKeys.clear();\n                const existingFormattedKeys = new Map();\n                this.allValues.forEach((_value, key) => {\n                    existingFormattedKeys.set(this.caseFormat(key), key);\n                });\n                model.forEach(unformattedKey => {\n                    const formattedKey = this.caseFormat(unformattedKey);\n                    const existingUnformattedKey = existingFormattedKeys.get(formattedKey);\n                    if (existingUnformattedKey !== undefined) {\n                        this.selectKey(existingUnformattedKey);\n                    }\n                });\n            }\n        });\n    }\n    uniqueValues(values) {\n        const uniqueValues = new Map();\n        const formattedKeys = new Set();\n        (values !== null && values !== void 0 ? values : []).forEach(value => {\n            const valueToUse = _.makeNull(value);\n            const unformattedKey = this.convertAndGetKey(valueToUse);\n            const formattedKey = this.caseFormat(unformattedKey);\n            if (!formattedKeys.has(formattedKey)) {\n                formattedKeys.add(formattedKey);\n                uniqueValues.set(unformattedKey, valueToUse);\n            }\n        });\n        return uniqueValues;\n    }\n    convertAndGetKey(value) {\n        return this.convertValuesToStrings ? value : this.createKey(value);\n    }\n    resetSelectionState(keys) {\n        if (this.filterParams.defaultToNothingSelected) {\n            this.selectedKeys.clear();\n        }\n        else {\n            this.selectedKeys = new Set(keys);\n        }\n    }\n    hasGroups() {\n        return this.displayValueModel.hasGroups();\n    }\n    createTreeDataOrGroupingComparator() {\n        return ([_aKey, aValue], [_bKey, bValue]) => {\n            if (aValue == null) {\n                return bValue == null ? 0 : -1;\n            }\n            else if (bValue == null) {\n                return 1;\n            }\n            for (let i = 0; i < aValue.length; i++) {\n                if (i >= bValue.length) {\n                    return 1;\n                }\n                const diff = _.defaultComparator(aValue[i], bValue[i]);\n                if (diff !== 0) {\n                    return diff;\n                }\n            }\n            return 0;\n        };\n    }\n}\nSetValueModel.EVENT_AVAILABLE_VALUES_CHANGED = 'availableValuesChanged';\n\nvar __decorate$d = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/** @param V type of value in the Set Filter */\nclass SetFilterListItem extends Component {\n    constructor(params) {\n        var _a;\n        super(params.isGroup ? SetFilterListItem.GROUP_TEMPLATE : SetFilterListItem.TEMPLATE);\n        this.focusWrapper = params.focusWrapper;\n        this.value = params.value;\n        this.params = params.params;\n        this.translate = params.translate;\n        this.valueFormatter = params.valueFormatter;\n        this.item = params.item;\n        this.isSelected = params.isSelected;\n        this.isTree = params.isTree;\n        this.depth = (_a = params.depth) !== null && _a !== void 0 ? _a : 0;\n        this.isGroup = params.isGroup;\n        this.groupsExist = params.groupsExist;\n        this.isExpanded = params.isExpanded;\n        this.hasIndeterminateExpandState = params.hasIndeterminateExpandState;\n    }\n    init() {\n        this.render();\n        this.eCheckbox.setLabelEllipsis(true);\n        this.eCheckbox.setValue(this.isSelected, true);\n        this.eCheckbox.setDisabled(!!this.params.readOnly);\n        this.eCheckbox.getInputElement().setAttribute('tabindex', '-1');\n        this.refreshVariableAriaLabels();\n        if (this.isTree) {\n            if (this.depth > 0) {\n                this.addCssClass('ag-set-filter-indent-' + this.depth);\n            }\n            if (this.isGroup) {\n                this.setupExpansion();\n            }\n            else {\n                if (this.groupsExist) {\n                    this.addCssClass('ag-set-filter-add-group-indent');\n                }\n            }\n            _.setAriaLevel(this.focusWrapper, this.depth + 1);\n        }\n        if (!!this.params.readOnly) {\n            // Don't add event listeners if we're read-only.\n            return;\n        }\n        this.eCheckbox.onValueChange((value) => this.onCheckboxChanged(!!value));\n    }\n    setupExpansion() {\n        this.eGroupClosedIcon.appendChild(_.createIcon('setFilterGroupClosed', this.gridOptionsService, null));\n        this.eGroupOpenedIcon.appendChild(_.createIcon('setFilterGroupOpen', this.gridOptionsService, null));\n        this.addManagedListener(this.eGroupClosedIcon, 'click', this.onExpandOrContractClicked.bind(this));\n        this.addManagedListener(this.eGroupOpenedIcon, 'click', this.onExpandOrContractClicked.bind(this));\n        if (this.hasIndeterminateExpandState) {\n            this.eGroupIndeterminateIcon.appendChild(_.createIcon('setFilterGroupIndeterminate', this.gridOptionsService, null));\n            this.addManagedListener(this.eGroupIndeterminateIcon, 'click', this.onExpandOrContractClicked.bind(this));\n        }\n        this.setExpandedIcons();\n        this.refreshAriaExpanded();\n    }\n    onExpandOrContractClicked() {\n        this.setExpanded(!this.isExpanded);\n    }\n    setExpanded(isExpanded, silent) {\n        if (this.isGroup && isExpanded !== this.isExpanded) {\n            this.isExpanded = isExpanded;\n            const event = {\n                type: SetFilterListItem.EVENT_EXPANDED_CHANGED,\n                isExpanded: !!isExpanded,\n                item: this.item\n            };\n            if (!silent) {\n                this.dispatchEvent(event);\n            }\n            this.setExpandedIcons();\n            this.refreshAriaExpanded();\n        }\n    }\n    refreshAriaExpanded() {\n        _.setAriaExpanded(this.focusWrapper, !!this.isExpanded);\n    }\n    setExpandedIcons() {\n        _.setDisplayed(this.eGroupClosedIcon, this.hasIndeterminateExpandState ? this.isExpanded === false : !this.isExpanded);\n        _.setDisplayed(this.eGroupOpenedIcon, this.isExpanded === true);\n        if (this.hasIndeterminateExpandState) {\n            _.setDisplayed(this.eGroupIndeterminateIcon, this.isExpanded === undefined);\n        }\n    }\n    onCheckboxChanged(isSelected) {\n        this.isSelected = isSelected;\n        const event = {\n            type: SetFilterListItem.EVENT_SELECTION_CHANGED,\n            isSelected,\n            item: this.item\n        };\n        this.dispatchEvent(event);\n        this.refreshVariableAriaLabels();\n    }\n    toggleSelected() {\n        if (!!this.params.readOnly) {\n            return;\n        }\n        this.setSelected(!this.isSelected);\n    }\n    setSelected(isSelected, silent) {\n        this.isSelected = isSelected;\n        this.eCheckbox.setValue(this.isSelected, silent);\n    }\n    refreshVariableAriaLabels() {\n        if (!this.isTree) {\n            return;\n        }\n        const translate = this.localeService.getLocaleTextFunc();\n        const checkboxValue = this.eCheckbox.getValue();\n        const state = checkboxValue === undefined ?\n            translate('ariaIndeterminate', 'indeterminate') :\n            (checkboxValue ? translate('ariaVisible', 'visible') : translate('ariaHidden', 'hidden'));\n        const visibilityLabel = translate('ariaToggleVisibility', 'Press SPACE to toggle visibility');\n        _.setAriaLabelledBy(this.eCheckbox.getInputElement(), undefined);\n        this.eCheckbox.setInputAriaLabel(`${visibilityLabel} (${state})`);\n    }\n    setupFixedAriaLabels(value) {\n        if (!this.isTree) {\n            return;\n        }\n        const translate = this.localeService.getLocaleTextFunc();\n        const itemLabel = translate('ariaFilterValue', 'Filter Value');\n        _.setAriaLabel(this.focusWrapper, `${value} ${itemLabel}`);\n        _.setAriaDescribedBy(this.focusWrapper, this.eCheckbox.getInputElement().id);\n    }\n    refresh(item, isSelected, isExpanded) {\n        var _a, _b;\n        this.item = item;\n        // setExpanded checks if value has changed, setSelected does not\n        if (isSelected !== this.isSelected) {\n            this.setSelected(isSelected, true);\n        }\n        this.setExpanded(isExpanded, true);\n        if (this.valueFunction) {\n            // underlying value might have changed, so call again and re-render\n            const value = this.valueFunction();\n            this.setTooltipAndCellRendererParams(value, value);\n            if (!this.cellRendererComponent) {\n                this.renderCellWithoutCellRenderer();\n            }\n        }\n        (_b = (_a = this.cellRendererComponent) === null || _a === void 0 ? void 0 : _a.refresh) === null || _b === void 0 ? void 0 : _b.call(_a, this.cellRendererParams);\n    }\n    render() {\n        const { params: { column } } = this;\n        let { value } = this;\n        let formattedValue = null;\n        if (typeof value === 'function') {\n            this.valueFunction = value;\n            formattedValue = this.valueFunction();\n            // backwards compatibility for select all in value\n            value = formattedValue;\n        }\n        else if (this.isTree) {\n            // tree values are already formatted via treeListFormatter\n            formattedValue = _.toStringOrNull(value);\n        }\n        else {\n            formattedValue = this.getFormattedValue(column, value);\n        }\n        this.setTooltipAndCellRendererParams(value, formattedValue);\n        this.renderCell();\n    }\n    setTooltipAndCellRendererParams(value, formattedValue) {\n        if (this.params.showTooltips) {\n            const tooltipValue = formattedValue != null ? formattedValue : _.toStringOrNull(value);\n            this.setTooltip(tooltipValue);\n        }\n        this.cellRendererParams = {\n            value,\n            valueFormatted: formattedValue,\n            api: this.gridOptionsService.api,\n            columnApi: this.gridOptionsService.columnApi,\n            context: this.gridOptionsService.context,\n            colDef: this.params.colDef,\n            column: this.params.column,\n        };\n    }\n    getTooltipParams() {\n        const res = super.getTooltipParams();\n        res.location = 'setFilterValue';\n        res.colDef = this.getComponentHolder();\n        if (this.isTree) {\n            res.level = this.depth;\n        }\n        return res;\n    }\n    getFormattedValue(column, value) {\n        return this.valueFormatterService.formatValue(column, null, value, this.valueFormatter, false);\n    }\n    renderCell() {\n        const compDetails = this.userComponentFactory.getSetFilterCellRendererDetails(this.params, this.cellRendererParams);\n        const cellRendererPromise = compDetails ? compDetails.newAgStackInstance() : undefined;\n        if (cellRendererPromise == null) {\n            this.renderCellWithoutCellRenderer();\n            return;\n        }\n        cellRendererPromise.then(component => {\n            if (component) {\n                this.cellRendererComponent = component;\n                this.eCheckbox.setLabel(component.getGui());\n                this.addDestroyFunc(() => this.destroyBean(component));\n            }\n        });\n    }\n    renderCellWithoutCellRenderer() {\n        var _a;\n        let valueToRender = (_a = (this.cellRendererParams.valueFormatted == null ? this.cellRendererParams.value : this.cellRendererParams.valueFormatted)) !== null && _a !== void 0 ? _a : this.translate('blanks');\n        if (typeof valueToRender !== 'string') {\n            _.doOnce(() => console.warn('AG Grid: Set Filter Value Formatter must return string values. Please ensure the Set Filter Value Formatter returns string values for complex objects, or set convertValuesToStrings=true in the filterParams. See https://www.ag-grid.com/javascript-data-grid/filter-set-filter-list/#filter-value-types'), 'setFilterComplexObjectsValueFormatter');\n            valueToRender = '';\n        }\n        this.eCheckbox.setLabel(valueToRender);\n        this.setupFixedAriaLabels(valueToRender);\n    }\n    getComponentHolder() {\n        return this.params.column.getColDef();\n    }\n}\nSetFilterListItem.EVENT_SELECTION_CHANGED = 'selectionChanged';\nSetFilterListItem.EVENT_EXPANDED_CHANGED = 'expandedChanged';\nSetFilterListItem.GROUP_TEMPLATE = `\n        <div class=\"ag-set-filter-item\" aria-hidden=\"true\">\n            <span class=\"ag-set-filter-group-icons\">\n                <span class=\"ag-set-filter-group-closed-icon\" ref=\"eGroupClosedIcon\"></span>\n                <span class=\"ag-set-filter-group-opened-icon\" ref=\"eGroupOpenedIcon\"></span>\n                <span class=\"ag-set-filter-group-indeterminate-icon\" ref=\"eGroupIndeterminateIcon\"></span>\n            </span>\n            <ag-checkbox ref=\"eCheckbox\" class=\"ag-set-filter-item-checkbox\"></ag-checkbox>\n        </div>`;\nSetFilterListItem.TEMPLATE = `\n        <div class=\"ag-set-filter-item\">\n            <ag-checkbox ref=\"eCheckbox\" class=\"ag-set-filter-item-checkbox\"></ag-checkbox>\n        </div>`;\n__decorate$d([\n    Autowired('valueFormatterService')\n], SetFilterListItem.prototype, \"valueFormatterService\", void 0);\n__decorate$d([\n    Autowired('userComponentFactory')\n], SetFilterListItem.prototype, \"userComponentFactory\", void 0);\n__decorate$d([\n    RefSelector('eCheckbox')\n], SetFilterListItem.prototype, \"eCheckbox\", void 0);\n__decorate$d([\n    RefSelector('eGroupOpenedIcon')\n], SetFilterListItem.prototype, \"eGroupOpenedIcon\", void 0);\n__decorate$d([\n    RefSelector('eGroupClosedIcon')\n], SetFilterListItem.prototype, \"eGroupClosedIcon\", void 0);\n__decorate$d([\n    RefSelector('eGroupIndeterminateIcon')\n], SetFilterListItem.prototype, \"eGroupIndeterminateIcon\", void 0);\n__decorate$d([\n    PostConstruct\n], SetFilterListItem.prototype, \"init\", null);\n\nconst DEFAULT_LOCALE_TEXT = {\n    loadingOoo: 'Loading...',\n    blanks: '(Blanks)',\n    searchOoo: 'Search...',\n    selectAll: '(Select All)',\n    selectAllSearchResults: '(Select All Search Results)',\n    noMatches: 'No matches.'\n};\n\nclass SetFilterModelFormatter {\n    getModelAsString(model, setFilter) {\n        const { values } = model || setFilter.getModel() || {};\n        const valueModel = setFilter.getValueModel();\n        if (values == null || valueModel == null) {\n            return '';\n        }\n        const availableKeys = values.filter(v => valueModel.isKeyAvailable(v));\n        const numValues = availableKeys.length;\n        const formattedValues = availableKeys.slice(0, 10).map(key => setFilter.getFormattedValue(key));\n        return `(${numValues}) ${formattedValues.join(',')}${numValues > 10 ? ',...' : ''}`;\n    }\n}\n\nvar __decorate$c = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/** @param V type of value in the Set Filter */\nclass SetFilter extends ProvidedFilter {\n    constructor() {\n        super('setFilter');\n        this.valueModel = null;\n        this.setFilterParams = null;\n        this.virtualList = null;\n        this.caseSensitive = false;\n        this.convertValuesToStrings = false;\n        this.treeDataTreeList = false;\n        this.groupingTreeList = false;\n        this.hardRefreshVirtualList = false;\n        this.noValueFormatterSupplied = false;\n        // To make the filtering super fast, we store the keys in an Set rather than using the default array\n        this.appliedModelKeys = null;\n        this.noAppliedModelKeys = false;\n        this.filterModelFormatter = new SetFilterModelFormatter();\n    }\n    postConstruct() {\n        super.postConstruct();\n    }\n    // unlike the simple filters, nothing in the set filter UI shows/hides.\n    // maybe this method belongs in abstractSimpleFilter???\n    updateUiVisibility() { }\n    createBodyTemplate() {\n        return /* html */ `\n            <div class=\"ag-set-filter\">\n                <div ref=\"eFilterLoading\" class=\"ag-filter-loading ag-hidden\">${this.translateForSetFilter('loadingOoo')}</div>\n                <ag-input-text-field class=\"ag-mini-filter\" ref=\"eMiniFilter\"></ag-input-text-field>\n                <div ref=\"eFilterNoMatches\" class=\"ag-filter-no-matches ag-hidden\">${this.translateForSetFilter('noMatches')}</div>\n                <div ref=\"eSetFilterList\" class=\"ag-set-filter-list\" role=\"presentation\"></div>\n            </div>`;\n    }\n    handleKeyDown(e) {\n        super.handleKeyDown(e);\n        if (e.defaultPrevented) {\n            return;\n        }\n        switch (e.key) {\n            case KeyCode.SPACE:\n                this.handleKeySpace(e);\n                break;\n            case KeyCode.ENTER:\n                this.handleKeyEnter(e);\n                break;\n            case KeyCode.LEFT:\n                this.handleKeyLeft(e);\n                break;\n            case KeyCode.RIGHT:\n                this.handleKeyRight(e);\n                break;\n        }\n    }\n    handleKeySpace(e) {\n        var _a;\n        (_a = this.getComponentForKeyEvent(e)) === null || _a === void 0 ? void 0 : _a.toggleSelected();\n    }\n    handleKeyEnter(e) {\n        if (!this.setFilterParams) {\n            return;\n        }\n        const { excelMode, readOnly } = this.setFilterParams || {};\n        if (!excelMode || !!readOnly) {\n            return;\n        }\n        e.preventDefault();\n        // in Excel Mode, hitting Enter is the same as pressing the Apply button\n        this.onBtApply(false, false, e);\n        if (this.setFilterParams.excelMode === 'mac') {\n            // in Mac version, select all the input text\n            this.eMiniFilter.getInputElement().select();\n        }\n    }\n    handleKeyLeft(e) {\n        var _a;\n        (_a = this.getComponentForKeyEvent(e)) === null || _a === void 0 ? void 0 : _a.setExpanded(false);\n    }\n    handleKeyRight(e) {\n        var _a;\n        (_a = this.getComponentForKeyEvent(e)) === null || _a === void 0 ? void 0 : _a.setExpanded(true);\n    }\n    getComponentForKeyEvent(e) {\n        var _a;\n        const eDocument = this.gridOptionsService.getDocument();\n        if (!this.eSetFilterList.contains(eDocument.activeElement) || !this.virtualList) {\n            return;\n        }\n        const currentItem = this.virtualList.getLastFocusedRow();\n        if (currentItem == null) {\n            return;\n        }\n        const component = this.virtualList.getComponentAt(currentItem);\n        if (component == null) {\n            return;\n        }\n        e.preventDefault();\n        const { readOnly } = (_a = this.setFilterParams) !== null && _a !== void 0 ? _a : {};\n        if (!!readOnly) {\n            return;\n        }\n        return component;\n    }\n    getCssIdentifier() {\n        return 'set-filter';\n    }\n    setModel(model) {\n        var _a;\n        if (model == null && ((_a = this.valueModel) === null || _a === void 0 ? void 0 : _a.getModel()) == null) {\n            // refreshing is expensive. if new and old model are both null (e.g. nothing set), skip.\n            // mini filter isn't contained within the model, so always reset\n            this.setMiniFilter(null);\n            return AgPromise.resolve();\n        }\n        return super.setModel(model);\n    }\n    setModelAndRefresh(values) {\n        return this.valueModel ? this.valueModel.setModel(values).then(() => this.refresh()) : AgPromise.resolve();\n    }\n    resetUiToDefaults() {\n        this.setMiniFilter(null);\n        return this.setModelAndRefresh(null);\n    }\n    setModelIntoUi(model) {\n        this.setMiniFilter(null);\n        const values = model == null ? null : model.values;\n        return this.setModelAndRefresh(values);\n    }\n    getModelFromUi() {\n        if (!this.valueModel) {\n            throw new Error('Value model has not been created.');\n        }\n        const values = this.valueModel.getModel();\n        if (!values) {\n            return null;\n        }\n        return { values, filterType: this.getFilterType() };\n    }\n    getFilterType() {\n        return 'set';\n    }\n    getValueModel() {\n        return this.valueModel;\n    }\n    areModelsEqual(a, b) {\n        // both are missing\n        if (a == null && b == null) {\n            return true;\n        }\n        return a != null && b != null && _.areEqual(a.values, b.values);\n    }\n    setParams(params) {\n        var _a;\n        this.applyExcelModeOptions(params);\n        super.setParams(params);\n        this.setFilterParams = params;\n        this.convertValuesToStrings = !!params.convertValuesToStrings;\n        this.caseSensitive = !!params.caseSensitive;\n        let keyCreator = (_a = params.keyCreator) !== null && _a !== void 0 ? _a : params.colDef.keyCreator;\n        this.setValueFormatter(params.valueFormatter, keyCreator, this.convertValuesToStrings, !!params.treeList, !!params.colDef.refData);\n        const isGroupCol = params.column.getId().startsWith(GROUP_AUTO_COLUMN_ID);\n        this.treeDataTreeList = this.gridOptionsService.is('treeData') && !!params.treeList && isGroupCol;\n        this.getDataPath = this.gridOptionsService.get('getDataPath');\n        this.groupingTreeList = !!this.columnModel.getRowGroupColumns().length && !!params.treeList && isGroupCol;\n        this.createKey = this.generateCreateKey(keyCreator, this.convertValuesToStrings, this.treeDataTreeList || this.groupingTreeList);\n        this.valueModel = new SetValueModel({\n            filterParams: params,\n            setIsLoading: loading => this.setIsLoading(loading),\n            valueFormatterService: this.valueFormatterService,\n            translate: key => this.translateForSetFilter(key),\n            caseFormat: v => this.caseFormat(v),\n            createKey: this.createKey,\n            valueFormatter: this.valueFormatter,\n            usingComplexObjects: !!keyCreator,\n            gridOptionsService: this.gridOptionsService,\n            columnModel: this.columnModel,\n            valueService: this.valueService,\n            treeDataTreeList: this.treeDataTreeList,\n            groupingTreeList: this.groupingTreeList\n        });\n        this.initialiseFilterBodyUi();\n        this.addEventListenersForDataChanges();\n    }\n    setValueFormatter(providedValueFormatter, keyCreator, convertValuesToStrings, treeList, isRefData) {\n        let valueFormatter = providedValueFormatter;\n        if (!valueFormatter) {\n            if (keyCreator && !convertValuesToStrings && !treeList) {\n                throw new Error('AG Grid: Must supply a Value Formatter in Set Filter params when using a Key Creator unless convertValuesToStrings is enabled');\n            }\n            this.noValueFormatterSupplied = true;\n            // ref data is handled by ValueFormatterService\n            if (!isRefData) {\n                valueFormatter = params => _.toStringOrNull(params.value);\n            }\n        }\n        this.valueFormatter = valueFormatter;\n    }\n    generateCreateKey(keyCreator, convertValuesToStrings, treeDataOrGrouping) {\n        if (treeDataOrGrouping && !keyCreator) {\n            throw new Error('AG Grid: Must supply a Key Creator in Set Filter params when `treeList = true` on a group column, and Tree Data or Row Grouping is enabled.');\n        }\n        if (keyCreator) {\n            return (value, node = null) => {\n                const params = this.getKeyCreatorParams(value, node);\n                return _.makeNull(keyCreator(params));\n            };\n        }\n        if (convertValuesToStrings) {\n            // for backwards compatibility - keeping separate as it will eventually be removed\n            return value => Array.isArray(value) ? value : _.makeNull(_.toStringOrNull(value));\n        }\n        else {\n            return value => _.makeNull(_.toStringOrNull(value));\n        }\n    }\n    getFormattedValue(key) {\n        var _a;\n        let value = this.valueModel.getValue(key);\n        if (this.noValueFormatterSupplied && (this.treeDataTreeList || this.groupingTreeList) && Array.isArray(value)) {\n            // essentially get back the cell value\n            value = _.last(value);\n        }\n        const formattedValue = this.valueFormatterService.formatValue(this.setFilterParams.column, null, value, this.valueFormatter, false);\n        return (_a = (formattedValue == null ? _.toStringOrNull(value) : formattedValue)) !== null && _a !== void 0 ? _a : this.translateForSetFilter('blanks');\n    }\n    applyExcelModeOptions(params) {\n        // apply default options to match Excel behaviour, unless they have already been specified\n        if (params.excelMode === 'windows') {\n            if (!params.buttons) {\n                params.buttons = ['apply', 'cancel'];\n            }\n            if (params.closeOnApply == null) {\n                params.closeOnApply = true;\n            }\n        }\n        else if (params.excelMode === 'mac') {\n            if (!params.buttons) {\n                params.buttons = ['reset'];\n            }\n            if (params.applyMiniFilterWhileTyping == null) {\n                params.applyMiniFilterWhileTyping = true;\n            }\n            if (params.debounceMs == null) {\n                params.debounceMs = 500;\n            }\n        }\n        if (params.excelMode && params.defaultToNothingSelected) {\n            params.defaultToNothingSelected = false;\n            _.doOnce(() => console.warn('AG Grid: The Set Filter Parameter \"defaultToNothingSelected\" value was ignored because it does not work when \"excelMode\" is used.'), 'setFilterExcelModeDefaultToNothingSelect');\n        }\n    }\n    addEventListenersForDataChanges() {\n        if (!this.isValuesTakenFromGrid()) {\n            return;\n        }\n        this.addManagedListener(this.eventService, Events.EVENT_CELL_VALUE_CHANGED, (event) => {\n            // only interested in changes to do with this column\n            if (this.setFilterParams && event.column === this.setFilterParams.column) {\n                this.syncAfterDataChange();\n            }\n        });\n    }\n    syncAfterDataChange() {\n        if (!this.valueModel) {\n            throw new Error('Value model has not been created.');\n        }\n        let promise = this.valueModel.refreshValues();\n        return promise.then(() => {\n            this.refresh();\n            this.onBtApply(false, true);\n        });\n    }\n    setIsLoading(isLoading) {\n        _.setDisplayed(this.eFilterLoading, isLoading);\n        if (!isLoading) {\n            // hard refresh when async data received\n            this.hardRefreshVirtualList = true;\n        }\n    }\n    initialiseFilterBodyUi() {\n        this.initVirtualList();\n        this.initMiniFilter();\n    }\n    initVirtualList() {\n        if (!this.setFilterParams) {\n            throw new Error('Set filter params have not been provided.');\n        }\n        if (!this.valueModel) {\n            throw new Error('Value model has not been created.');\n        }\n        const translate = this.localeService.getLocaleTextFunc();\n        const filterListName = translate('ariaFilterList', 'Filter List');\n        const isTree = !!this.setFilterParams.treeList;\n        const virtualList = this.virtualList = this.createBean(new VirtualList('filter', isTree ? 'tree' : 'listbox', filterListName));\n        const eSetFilterList = this.getRefElement('eSetFilterList');\n        if (isTree) {\n            eSetFilterList.classList.add('ag-set-filter-tree-list');\n        }\n        if (eSetFilterList) {\n            eSetFilterList.appendChild(virtualList.getGui());\n        }\n        const { cellHeight } = this.setFilterParams;\n        if (cellHeight != null) {\n            virtualList.setRowHeight(cellHeight);\n        }\n        const componentCreator = (item, listItemElement) => this.createSetListItem(item, isTree, listItemElement);\n        virtualList.setComponentCreator(componentCreator);\n        const componentUpdater = (item, component) => this.updateSetListItem(item, component);\n        virtualList.setComponentUpdater(componentUpdater);\n        let model;\n        if (this.setFilterParams.suppressSelectAll) {\n            model = new ModelWrapper(this.valueModel);\n        }\n        else {\n            model = new ModelWrapperWithSelectAll(this.valueModel, () => this.isSelectAllSelected());\n        }\n        if (isTree) {\n            model = new TreeModelWrapper(model);\n        }\n        virtualList.setModel(model);\n    }\n    getSelectAllLabel() {\n        if (!this.setFilterParams) {\n            throw new Error('Set filter params have not been provided.');\n        }\n        if (!this.valueModel) {\n            throw new Error('Value model has not been created.');\n        }\n        const key = this.valueModel.getMiniFilter() == null || !this.setFilterParams.excelMode ?\n            'selectAll' : 'selectAllSearchResults';\n        return this.translateForSetFilter(key);\n    }\n    createSetListItem(item, isTree, focusWrapper) {\n        var _a, _b, _c, _d, _e, _f;\n        if (!this.setFilterParams) {\n            throw new Error('Set filter params have not been provided.');\n        }\n        if (!this.valueModel) {\n            throw new Error('Value model has not been created.');\n        }\n        const groupsExist = this.valueModel.hasGroups();\n        let value;\n        let depth;\n        let isGroup;\n        let hasIndeterminateExpandState;\n        let selectedListener;\n        let expandedListener;\n        if (this.isSetFilterModelTreeItem(item)) {\n            depth = item.depth;\n            if (item.key === SetFilterDisplayValue.SELECT_ALL) {\n                // select all\n                value = () => this.getSelectAllLabel();\n                isGroup = groupsExist;\n                hasIndeterminateExpandState = true;\n                selectedListener = (e) => this.onSelectAll(e.isSelected);\n                expandedListener = (e) => this.onExpandAll(e.item, e.isExpanded);\n            }\n            else if (item.children) {\n                // group\n                value = (_c = (_b = (_a = this.setFilterParams).treeListFormatter) === null || _b === void 0 ? void 0 : _b.call(_a, item.treeKey, item.depth, item.parentTreeKeys)) !== null && _c !== void 0 ? _c : item.treeKey;\n                isGroup = true;\n                selectedListener = (e) => this.onGroupItemSelected(e.item, e.isSelected);\n                expandedListener = (e) => this.onExpandedChanged(e.item, e.isExpanded);\n            }\n            else {\n                // leaf\n                value = (_f = (_e = (_d = this.setFilterParams).treeListFormatter) === null || _e === void 0 ? void 0 : _e.call(_d, item.treeKey, item.depth, item.parentTreeKeys)) !== null && _f !== void 0 ? _f : item.treeKey;\n                selectedListener = (e) => this.onItemSelected(e.item.key, e.isSelected);\n            }\n        }\n        else {\n            if (item === SetFilterDisplayValue.SELECT_ALL) {\n                value = () => this.getSelectAllLabel();\n                selectedListener = (e) => this.onSelectAll(e.isSelected);\n            }\n            else {\n                value = this.valueModel.getValue(item);\n                selectedListener = (e) => this.onItemSelected(e.item, e.isSelected);\n            }\n        }\n        const { isSelected, isExpanded } = this.isSelectedExpanded(item);\n        const itemParams = {\n            focusWrapper,\n            value,\n            params: this.setFilterParams,\n            translate: (translateKey) => this.translateForSetFilter(translateKey),\n            valueFormatter: this.valueFormatter,\n            item,\n            isSelected,\n            isTree,\n            depth,\n            groupsExist,\n            isGroup,\n            isExpanded,\n            hasIndeterminateExpandState,\n        };\n        const listItem = this.createBean(new SetFilterListItem(itemParams));\n        listItem.addEventListener(SetFilterListItem.EVENT_SELECTION_CHANGED, selectedListener);\n        if (expandedListener) {\n            listItem.addEventListener(SetFilterListItem.EVENT_EXPANDED_CHANGED, expandedListener);\n        }\n        return listItem;\n    }\n    updateSetListItem(item, component) {\n        const { isSelected, isExpanded } = this.isSelectedExpanded(item);\n        component.refresh(item, isSelected, isExpanded);\n    }\n    isSelectedExpanded(item) {\n        let isSelected;\n        let isExpanded;\n        if (this.isSetFilterModelTreeItem(item)) {\n            isExpanded = item.expanded;\n            if (item.key === SetFilterDisplayValue.SELECT_ALL) {\n                isSelected = this.isSelectAllSelected();\n            }\n            else if (item.children) {\n                isSelected = this.areAllChildrenSelected(item);\n            }\n            else {\n                isSelected = this.valueModel.isKeySelected(item.key);\n            }\n        }\n        else {\n            if (item === SetFilterDisplayValue.SELECT_ALL) {\n                isSelected = this.isSelectAllSelected();\n            }\n            else {\n                isSelected = this.valueModel.isKeySelected(item);\n            }\n        }\n        return { isSelected, isExpanded };\n    }\n    isSetFilterModelTreeItem(item) {\n        return (item === null || item === void 0 ? void 0 : item.treeKey) !== undefined;\n    }\n    initMiniFilter() {\n        if (!this.setFilterParams) {\n            throw new Error('Set filter params have not been provided.');\n        }\n        if (!this.valueModel) {\n            throw new Error('Value model has not been created.');\n        }\n        const { eMiniFilter, localeService } = this;\n        const translate = localeService.getLocaleTextFunc();\n        eMiniFilter.setDisplayed(!this.setFilterParams.suppressMiniFilter);\n        eMiniFilter.setValue(this.valueModel.getMiniFilter());\n        eMiniFilter.onValueChange(() => this.onMiniFilterInput());\n        eMiniFilter.setInputAriaLabel(translate('ariaSearchFilterValues', 'Search filter values'));\n        this.addManagedListener(eMiniFilter.getInputElement(), 'keydown', e => this.onMiniFilterKeyDown(e));\n    }\n    // we need to have the GUI attached before we can draw the virtual rows, as the\n    // virtual row logic needs info about the GUI state\n    afterGuiAttached(params) {\n        if (!this.setFilterParams) {\n            throw new Error('Set filter params have not been provided.');\n        }\n        super.afterGuiAttached(params);\n        // collapse all tree list items (if tree list)\n        this.resetExpansion();\n        this.refreshVirtualList();\n        const { eMiniFilter } = this;\n        eMiniFilter.setInputPlaceholder(this.translateForSetFilter('searchOoo'));\n        if (!params || !params.suppressFocus) {\n            eMiniFilter.getFocusableElement().focus();\n        }\n    }\n    afterGuiDetached() {\n        var _a, _b;\n        super.afterGuiDetached();\n        // discard any unapplied UI state (reset to model)\n        if ((_a = this.setFilterParams) === null || _a === void 0 ? void 0 : _a.excelMode) {\n            this.resetMiniFilter();\n        }\n        const appliedModel = this.getModel();\n        if (((_b = this.setFilterParams) === null || _b === void 0 ? void 0 : _b.excelMode) || !this.areModelsEqual(appliedModel, this.getModelFromUi())) {\n            this.resetUiToActiveModel(appliedModel);\n            this.showOrHideResults();\n        }\n    }\n    applyModel(source = 'api') {\n        if (!this.setFilterParams) {\n            throw new Error('Set filter params have not been provided.');\n        }\n        if (!this.valueModel) {\n            throw new Error('Value model has not been created.');\n        }\n        if (this.setFilterParams.excelMode && source !== 'rowDataUpdated' && this.valueModel.isEverythingVisibleSelected()) {\n            // In Excel, if the filter is applied with all visible values selected, then any active filter on the\n            // column is removed. This ensures the filter is removed in this situation.\n            this.valueModel.selectAllMatchingMiniFilter();\n        }\n        const result = super.applyModel(source);\n        // keep appliedModelKeys in sync with the applied model\n        const appliedModel = this.getModel();\n        if (appliedModel) {\n            this.appliedModelKeys = new Set();\n            appliedModel.values.forEach(key => {\n                this.appliedModelKeys.add(this.caseFormat(key));\n            });\n        }\n        else {\n            this.appliedModelKeys = null;\n        }\n        this.noAppliedModelKeys = (appliedModel === null || appliedModel === void 0 ? void 0 : appliedModel.values.length) === 0;\n        return result;\n    }\n    isModelValid(model) {\n        return this.setFilterParams && this.setFilterParams.excelMode ? model == null || model.values.length > 0 : true;\n    }\n    doesFilterPass(params) {\n        if (!this.setFilterParams || !this.valueModel || !this.appliedModelKeys) {\n            return true;\n        }\n        // if nothing selected, don't need to check value\n        if (this.noAppliedModelKeys) {\n            return false;\n        }\n        const { node, data } = params;\n        if (this.treeDataTreeList) {\n            return this.doesFilterPassForTreeData(node, data);\n        }\n        if (this.groupingTreeList) {\n            return this.doesFilterPassForGrouping(node, data);\n        }\n        let value = this.getValueFromNode(node, data);\n        if (this.convertValuesToStrings) {\n            // for backwards compatibility - keeping separate as it will eventually be removed\n            return this.doesFilterPassForConvertValuesToString(node, value);\n        }\n        if (value != null && Array.isArray(value)) {\n            if (value.length === 0) {\n                return this.appliedModelKeys.has(null);\n            }\n            return value.some(v => this.isInAppliedModel(this.createKey(v, node)));\n        }\n        return this.isInAppliedModel(this.createKey(value, node));\n    }\n    doesFilterPassForConvertValuesToString(node, value) {\n        const key = this.createKey(value, node);\n        if (key != null && Array.isArray(key)) {\n            if (key.length === 0) {\n                return this.appliedModelKeys.has(null);\n            }\n            return key.some(v => this.isInAppliedModel(v));\n        }\n        return this.isInAppliedModel(key);\n    }\n    doesFilterPassForTreeData(node, data) {\n        var _a;\n        if ((_a = node.childrenAfterGroup) === null || _a === void 0 ? void 0 : _a.length) {\n            // only perform checking on leaves. The core filtering logic for tree data won't work properly otherwise\n            return false;\n        }\n        return this.isInAppliedModel(this.createKey(this.checkMakeNullDataPath(this.getDataPath(data))));\n    }\n    doesFilterPassForGrouping(node, data) {\n        const dataPath = this.columnModel.getRowGroupColumns().map(groupCol => this.valueService.getKeyForNode(groupCol, node));\n        dataPath.push(this.getValueFromNode(node, data));\n        return this.isInAppliedModel(this.createKey(this.checkMakeNullDataPath(dataPath)));\n    }\n    checkMakeNullDataPath(dataPath) {\n        if (dataPath) {\n            dataPath = dataPath.map(treeKey => _.toStringOrNull(_.makeNull(treeKey)));\n        }\n        if (dataPath === null || dataPath === void 0 ? void 0 : dataPath.some(treeKey => treeKey == null)) {\n            return null;\n        }\n        return dataPath;\n    }\n    isInAppliedModel(key) {\n        return this.appliedModelKeys.has(this.caseFormat(key));\n    }\n    getValueFromNode(node, data) {\n        const { valueGetter, api, colDef, column, columnApi, context } = this.setFilterParams;\n        return valueGetter({\n            api,\n            colDef,\n            column,\n            columnApi,\n            context,\n            data: data,\n            getValue: (field) => data[field],\n            node: node,\n        });\n    }\n    getKeyCreatorParams(value, node = null) {\n        return {\n            value,\n            colDef: this.setFilterParams.colDef,\n            column: this.setFilterParams.column,\n            node: node,\n            data: node === null || node === void 0 ? void 0 : node.data,\n            api: this.setFilterParams.api,\n            columnApi: this.setFilterParams.columnApi,\n            context: this.setFilterParams.context\n        };\n    }\n    onNewRowsLoaded() {\n        if (!this.isValuesTakenFromGrid()) {\n            return;\n        }\n        this.syncAfterDataChange();\n    }\n    isValuesTakenFromGrid() {\n        if (!this.valueModel) {\n            return false;\n        }\n        const valuesType = this.valueModel.getValuesType();\n        return valuesType === SetFilterModelValuesType.TAKEN_FROM_GRID_VALUES;\n    }\n    //noinspection JSUnusedGlobalSymbols\n    /**\n     * Public method provided so the user can change the value of the filter once\n     * the filter has been already started\n     * @param values The values to use.\n     */\n    setFilterValues(values) {\n        if (!this.valueModel) {\n            throw new Error('Value model has not been created.');\n        }\n        this.valueModel.overrideValues(values).then(() => {\n            this.refresh();\n            this.onUiChanged();\n        });\n    }\n    //noinspection JSUnusedGlobalSymbols\n    /**\n     * Public method provided so the user can reset the values of the filter once that it has started.\n     */\n    resetFilterValues() {\n        if (!this.valueModel) {\n            throw new Error('Value model has not been created.');\n        }\n        this.valueModel.setValuesType(SetFilterModelValuesType.TAKEN_FROM_GRID_VALUES);\n        this.syncAfterDataChange();\n    }\n    refreshFilterValues() {\n        if (!this.valueModel) {\n            throw new Error('Value model has not been created.');\n        }\n        // the model is still being initialised\n        if (!this.valueModel.isInitialised()) {\n            return;\n        }\n        this.valueModel.refreshValues().then(() => {\n            this.refresh();\n            this.onUiChanged();\n        });\n    }\n    onAnyFilterChanged() {\n        // don't block the current action when updating the values for this filter\n        setTimeout(() => {\n            if (!this.isAlive()) {\n                return;\n            }\n            if (!this.valueModel) {\n                throw new Error('Value model has not been created.');\n            }\n            this.valueModel.refreshAfterAnyFilterChanged().then(refresh => {\n                if (refresh) {\n                    this.refresh();\n                    this.showOrHideResults();\n                }\n            });\n        }, 0);\n    }\n    onMiniFilterInput() {\n        if (!this.setFilterParams) {\n            throw new Error('Set filter params have not been provided.');\n        }\n        if (!this.valueModel) {\n            throw new Error('Value model has not been created.');\n        }\n        if (!this.valueModel.setMiniFilter(this.eMiniFilter.getValue())) {\n            return;\n        }\n        const { applyMiniFilterWhileTyping, readOnly } = this.setFilterParams || {};\n        if (!readOnly && applyMiniFilterWhileTyping) {\n            this.filterOnAllVisibleValues(false);\n        }\n        else {\n            this.updateUiAfterMiniFilterChange();\n        }\n    }\n    updateUiAfterMiniFilterChange() {\n        if (!this.setFilterParams) {\n            throw new Error('Set filter params have not been provided.');\n        }\n        if (!this.valueModel) {\n            throw new Error('Value model has not been created.');\n        }\n        const { excelMode, readOnly } = this.setFilterParams || {};\n        if (excelMode == null || !!readOnly) {\n            this.refresh();\n        }\n        else if (this.valueModel.getMiniFilter() == null) {\n            this.resetUiToActiveModel(this.getModel());\n        }\n        else {\n            this.valueModel.selectAllMatchingMiniFilter(true);\n            this.refresh();\n            this.onUiChanged();\n        }\n        this.showOrHideResults();\n    }\n    showOrHideResults() {\n        if (!this.valueModel) {\n            throw new Error('Value model has not been created.');\n        }\n        const hideResults = this.valueModel.getMiniFilter() != null && this.valueModel.getDisplayedValueCount() < 1;\n        _.setDisplayed(this.eNoMatches, hideResults);\n        _.setDisplayed(this.eSetFilterList, !hideResults);\n    }\n    resetMiniFilter() {\n        var _a;\n        this.eMiniFilter.setValue(null, true);\n        (_a = this.valueModel) === null || _a === void 0 ? void 0 : _a.setMiniFilter(null);\n    }\n    resetUiToActiveModel(currentModel, afterUiUpdatedFunc) {\n        // override the default behaviour as we don't always want to clear the mini filter\n        this.setModelAndRefresh(currentModel == null ? null : currentModel.values).then(() => {\n            this.onUiChanged(false, 'prevent');\n            afterUiUpdatedFunc === null || afterUiUpdatedFunc === void 0 ? void 0 : afterUiUpdatedFunc();\n        });\n    }\n    handleCancelEnd(e) {\n        this.setMiniFilter(null);\n        super.handleCancelEnd(e);\n    }\n    onMiniFilterKeyDown(e) {\n        const { excelMode, readOnly } = this.setFilterParams || {};\n        if (e.key === KeyCode.ENTER && !excelMode && !readOnly) {\n            this.filterOnAllVisibleValues();\n        }\n    }\n    filterOnAllVisibleValues(applyImmediately = true) {\n        const { readOnly } = this.setFilterParams || {};\n        if (!this.valueModel) {\n            throw new Error('Value model has not been created.');\n        }\n        if (!!readOnly) {\n            throw new Error('Unable to filter in readOnly mode.');\n        }\n        this.valueModel.selectAllMatchingMiniFilter(true);\n        this.refresh();\n        this.onUiChanged(false, applyImmediately ? 'immediately' : 'debounce');\n        this.showOrHideResults();\n    }\n    focusRowIfAlive(rowIndex) {\n        if (rowIndex == null) {\n            return;\n        }\n        window.setTimeout(() => {\n            if (!this.virtualList) {\n                throw new Error('Virtual list has not been created.');\n            }\n            if (this.isAlive()) {\n                this.virtualList.focusRow(rowIndex);\n            }\n        }, 0);\n    }\n    onSelectAll(isSelected) {\n        if (!this.valueModel) {\n            throw new Error('Value model has not been created.');\n        }\n        if (!this.virtualList) {\n            throw new Error('Virtual list has not been created.');\n        }\n        if (isSelected) {\n            this.valueModel.selectAllMatchingMiniFilter();\n        }\n        else {\n            this.valueModel.deselectAllMatchingMiniFilter();\n        }\n        this.refreshAfterSelection();\n    }\n    onGroupItemSelected(item, isSelected) {\n        const recursiveGroupSelection = (i) => {\n            if (i.children) {\n                i.children.forEach(childItem => recursiveGroupSelection(childItem));\n            }\n            else {\n                this.selectItem(i.key, isSelected);\n            }\n        };\n        recursiveGroupSelection(item);\n        this.refreshAfterSelection();\n    }\n    onItemSelected(key, isSelected) {\n        if (!this.valueModel) {\n            throw new Error('Value model has not been created.');\n        }\n        if (!this.virtualList) {\n            throw new Error('Virtual list has not been created.');\n        }\n        this.selectItem(key, isSelected);\n        this.refreshAfterSelection();\n    }\n    selectItem(key, isSelected) {\n        if (isSelected) {\n            this.valueModel.selectKey(key);\n        }\n        else {\n            this.valueModel.deselectKey(key);\n        }\n    }\n    onExpandAll(item, isExpanded) {\n        const recursiveExpansion = (i) => {\n            if (i.filterPasses && i.available && i.children) {\n                i.children.forEach(childItem => recursiveExpansion(childItem));\n                i.expanded = isExpanded;\n            }\n        };\n        recursiveExpansion(item);\n        this.refreshAfterExpansion();\n    }\n    onExpandedChanged(item, isExpanded) {\n        item.expanded = isExpanded;\n        this.refreshAfterExpansion();\n    }\n    refreshAfterExpansion() {\n        const focusedRow = this.virtualList.getLastFocusedRow();\n        this.valueModel.updateDisplayedValues('expansion');\n        this.refresh();\n        this.focusRowIfAlive(focusedRow);\n    }\n    refreshAfterSelection() {\n        const focusedRow = this.virtualList.getLastFocusedRow();\n        this.refresh();\n        this.onUiChanged();\n        this.focusRowIfAlive(focusedRow);\n    }\n    setMiniFilter(newMiniFilter) {\n        this.eMiniFilter.setValue(newMiniFilter);\n        this.onMiniFilterInput();\n    }\n    getMiniFilter() {\n        return this.valueModel ? this.valueModel.getMiniFilter() : null;\n    }\n    refresh() {\n        if (!this.virtualList) {\n            throw new Error('Virtual list has not been created.');\n        }\n        this.virtualList.refresh(!this.hardRefreshVirtualList);\n        if (this.hardRefreshVirtualList) {\n            this.hardRefreshVirtualList = false;\n        }\n    }\n    getFilterKeys() {\n        return this.valueModel ? this.valueModel.getKeys() : [];\n    }\n    getFilterValues() {\n        return this.valueModel ? this.valueModel.getValues() : [];\n    }\n    getValues() {\n        return this.getFilterKeys();\n    }\n    refreshVirtualList() {\n        if (this.setFilterParams && this.setFilterParams.refreshValuesOnOpen) {\n            this.refreshFilterValues();\n        }\n        else {\n            this.refresh();\n        }\n    }\n    translateForSetFilter(key) {\n        const translate = this.localeService.getLocaleTextFunc();\n        return translate(key, DEFAULT_LOCALE_TEXT[key]);\n    }\n    isSelectAllSelected() {\n        if (!this.setFilterParams || !this.valueModel) {\n            return false;\n        }\n        if (!this.setFilterParams.defaultToNothingSelected) {\n            // everything selected by default\n            if (this.valueModel.hasSelections() && this.valueModel.isNothingVisibleSelected()) {\n                return false;\n            }\n            if (this.valueModel.isEverythingVisibleSelected()) {\n                return true;\n            }\n        }\n        else {\n            // nothing selected by default\n            if (this.valueModel.hasSelections() && this.valueModel.isEverythingVisibleSelected()) {\n                return true;\n            }\n            if (this.valueModel.isNothingVisibleSelected()) {\n                return false;\n            }\n        }\n        // returning `undefined` means the checkbox status is indeterminate.\n        return undefined;\n    }\n    areAllChildrenSelected(item) {\n        const recursiveChildSelectionCheck = (i) => {\n            if (i.children) {\n                let someTrue = false;\n                let someFalse = false;\n                const mixed = i.children.some(child => {\n                    if (!child.filterPasses || !child.available) {\n                        return false;\n                    }\n                    const childSelected = recursiveChildSelectionCheck(child);\n                    if (childSelected === undefined) {\n                        return true;\n                    }\n                    if (childSelected) {\n                        someTrue = true;\n                    }\n                    else {\n                        someFalse = true;\n                    }\n                    return someTrue && someFalse;\n                });\n                // returning `undefined` means the checkbox status is indeterminate.\n                // if not mixed and some true, all must be true\n                return mixed ? undefined : someTrue;\n            }\n            else {\n                return this.valueModel.isKeySelected(i.key);\n            }\n        };\n        if (!this.setFilterParams.defaultToNothingSelected) {\n            // everything selected by default\n            return recursiveChildSelectionCheck(item);\n        }\n        else {\n            // nothing selected by default\n            return this.valueModel.hasSelections() && recursiveChildSelectionCheck(item);\n        }\n    }\n    destroy() {\n        if (this.virtualList != null) {\n            this.virtualList.destroy();\n            this.virtualList = null;\n        }\n        super.destroy();\n    }\n    caseFormat(valueToFormat) {\n        if (valueToFormat == null || typeof valueToFormat !== 'string') {\n            return valueToFormat;\n        }\n        return this.caseSensitive ? valueToFormat : valueToFormat.toUpperCase();\n    }\n    resetExpansion() {\n        var _a, _b;\n        if (!((_a = this.setFilterParams) === null || _a === void 0 ? void 0 : _a.treeList)) {\n            return;\n        }\n        const selectAllItem = (_b = this.valueModel) === null || _b === void 0 ? void 0 : _b.getSelectAllItem();\n        if (this.isSetFilterModelTreeItem(selectAllItem)) {\n            const recursiveCollapse = (i) => {\n                if (i.children) {\n                    i.children.forEach(childItem => recursiveCollapse(childItem));\n                    i.expanded = false;\n                }\n            };\n            recursiveCollapse(selectAllItem);\n            this.valueModel.updateDisplayedValues('expansion');\n        }\n    }\n    getModelAsString(model) {\n        return this.filterModelFormatter.getModelAsString(model, this);\n    }\n    getPositionableElement() {\n        return this.eSetFilterList;\n    }\n}\n__decorate$c([\n    RefSelector('eMiniFilter')\n], SetFilter.prototype, \"eMiniFilter\", void 0);\n__decorate$c([\n    RefSelector('eFilterLoading')\n], SetFilter.prototype, \"eFilterLoading\", void 0);\n__decorate$c([\n    RefSelector('eSetFilterList')\n], SetFilter.prototype, \"eSetFilterList\", void 0);\n__decorate$c([\n    RefSelector('eFilterNoMatches')\n], SetFilter.prototype, \"eNoMatches\", void 0);\n__decorate$c([\n    Autowired('valueFormatterService')\n], SetFilter.prototype, \"valueFormatterService\", void 0);\n__decorate$c([\n    Autowired('columnModel')\n], SetFilter.prototype, \"columnModel\", void 0);\n__decorate$c([\n    Autowired('valueService')\n], SetFilter.prototype, \"valueService\", void 0);\nclass ModelWrapper {\n    constructor(model) {\n        this.model = model;\n    }\n    getRowCount() {\n        return this.model.getDisplayedValueCount();\n    }\n    getRow(index) {\n        return this.model.getDisplayedItem(index);\n    }\n    isRowSelected(index) {\n        return this.model.isKeySelected(this.getRow(index));\n    }\n    areRowsEqual(oldRow, newRow) {\n        return oldRow === newRow;\n    }\n}\nclass ModelWrapperWithSelectAll {\n    constructor(model, isSelectAllSelected) {\n        this.model = model;\n        this.isSelectAllSelected = isSelectAllSelected;\n    }\n    getRowCount() {\n        return this.model.getDisplayedValueCount() + 1;\n    }\n    getRow(index) {\n        return index === 0 ? this.model.getSelectAllItem() : this.model.getDisplayedItem(index - 1);\n    }\n    isRowSelected(index) {\n        return index === 0 ? this.isSelectAllSelected() : this.model.isKeySelected(this.getRow(index));\n    }\n    areRowsEqual(oldRow, newRow) {\n        return oldRow === newRow;\n    }\n}\n// isRowSelected is used by VirtualList to add aria tags for flat lists. We want to suppress this when using trees\nclass TreeModelWrapper {\n    constructor(model) {\n        this.model = model;\n    }\n    getRowCount() {\n        return this.model.getRowCount();\n    }\n    getRow(index) {\n        return this.model.getRow(index);\n    }\n    areRowsEqual(oldRow, newRow) {\n        if (oldRow == null && newRow == null) {\n            return true;\n        }\n        return oldRow != null && newRow != null && oldRow.treeKey === newRow.treeKey && oldRow.depth === newRow.depth;\n    }\n}\n\nvar __decorate$b = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass SetFloatingFilterComp extends Component {\n    constructor() {\n        super(/* html */ `\n            <div class=\"ag-floating-filter-input ag-set-floating-filter-input\" role=\"presentation\">\n                <ag-input-text-field ref=\"eFloatingFilterText\"></ag-input-text-field>\n            </div>`);\n        this.availableValuesListenerAdded = false;\n        this.filterModelFormatter = new SetFilterModelFormatter();\n    }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so we need to override destroy() just to make the method public.\n    destroy() {\n        super.destroy();\n    }\n    init(params) {\n        const displayName = this.columnModel.getDisplayNameForColumn(params.column, 'header', true);\n        const translate = this.localeService.getLocaleTextFunc();\n        this.eFloatingFilterText\n            .setDisabled(true)\n            .setInputAriaLabel(`${displayName} ${translate('ariaFilterInput', 'Filter Input')}`)\n            .addGuiEventListener('click', () => params.showParentFilter());\n        this.params = params;\n    }\n    onParentModelChanged(parentModel) {\n        this.updateFloatingFilterText(parentModel);\n    }\n    parentSetFilterInstance(cb) {\n        this.params.parentFilterInstance((filter) => {\n            if (!(filter instanceof SetFilter)) {\n                throw new Error('AG Grid - SetFloatingFilter expects SetFilter as its parent');\n            }\n            cb(filter);\n        });\n    }\n    addAvailableValuesListener() {\n        this.parentSetFilterInstance((setFilter) => {\n            const setValueModel = setFilter.getValueModel();\n            if (!setValueModel) {\n                return;\n            }\n            // unlike other filters, what we show in the floating filter can be different, even\n            // if another filter changes. this is due to how set filter restricts its values based\n            // on selections in other filters, e.g. if you filter Language to English, then the set filter\n            // on Country will only show English speaking countries. Thus the list of items to show\n            // in the floating filter can change.\n            this.addManagedListener(setValueModel, SetValueModel.EVENT_AVAILABLE_VALUES_CHANGED, () => this.updateFloatingFilterText());\n        });\n        this.availableValuesListenerAdded = true;\n    }\n    updateFloatingFilterText(parentModel) {\n        if (!this.availableValuesListenerAdded) {\n            this.addAvailableValuesListener();\n        }\n        this.parentSetFilterInstance((setFilter) => {\n            this.eFloatingFilterText.setValue(this.filterModelFormatter.getModelAsString(parentModel, setFilter));\n        });\n    }\n}\n__decorate$b([\n    RefSelector('eFloatingFilterText')\n], SetFloatingFilterComp.prototype, \"eFloatingFilterText\", void 0);\n__decorate$b([\n    Autowired('columnModel')\n], SetFloatingFilterComp.prototype, \"columnModel\", void 0);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$3 = '30.0.3';\n\nconst SetFilterModule = {\n    version: VERSION$3,\n    moduleName: ModuleNames.SetFilterModule,\n    beans: [],\n    userComponents: [\n        { componentName: 'agSetColumnFilter', componentClass: SetFilter },\n        { componentName: 'agSetColumnFloatingFilter', componentClass: SetFloatingFilterComp },\n    ],\n    dependantModules: [\n        EnterpriseCoreModule\n    ]\n};\n\nvar __decorate$a = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nlet StatusBarService = class StatusBarService extends BeanStub {\n    // tslint:disable-next-line\n    constructor() {\n        super();\n        this.allComponents = {};\n    }\n    registerStatusPanel(key, component) {\n        this.allComponents[key] = component;\n    }\n    getStatusPanel(key) {\n        return this.allComponents[key];\n    }\n};\nStatusBarService = __decorate$a([\n    Bean('statusBarService')\n], StatusBarService);\n\nvar __decorate$9 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass StatusBar extends Component {\n    constructor() {\n        super(StatusBar.TEMPLATE);\n    }\n    postConstruct() {\n        var _a;\n        const statusPanels = (_a = this.gridOptionsService.get('statusBar')) === null || _a === void 0 ? void 0 : _a.statusPanels;\n        if (statusPanels) {\n            const leftStatusPanelComponents = statusPanels\n                .filter((componentConfig) => componentConfig.align === 'left');\n            this.createAndRenderComponents(leftStatusPanelComponents, this.eStatusBarLeft);\n            const centerStatusPanelComponents = statusPanels\n                .filter((componentConfig) => componentConfig.align === 'center');\n            this.createAndRenderComponents(centerStatusPanelComponents, this.eStatusBarCenter);\n            const rightStatusPanelComponents = statusPanels\n                .filter((componentConfig) => (!componentConfig.align || componentConfig.align === 'right'));\n            this.createAndRenderComponents(rightStatusPanelComponents, this.eStatusBarRight);\n        }\n        else {\n            this.setDisplayed(false);\n        }\n    }\n    createAndRenderComponents(statusBarComponents, ePanelComponent) {\n        const componentDetails = [];\n        statusBarComponents.forEach(componentConfig => {\n            const params = {};\n            const compDetails = this.userComponentFactory.getStatusPanelCompDetails(componentConfig, params);\n            const promise = compDetails.newAgStackInstance();\n            if (!promise) {\n                return;\n            }\n            componentDetails.push({\n                // default to the component name if no key supplied\n                key: componentConfig.key || componentConfig.statusPanel,\n                promise\n            });\n        });\n        AgPromise.all(componentDetails.map((details) => details.promise))\n            .then(() => {\n            componentDetails.forEach(componentDetail => {\n                componentDetail.promise.then((component) => {\n                    const destroyFunc = () => {\n                        this.getContext().destroyBean(component);\n                    };\n                    if (this.isAlive()) {\n                        this.statusBarService.registerStatusPanel(componentDetail.key, component);\n                        ePanelComponent.appendChild(component.getGui());\n                        this.addDestroyFunc(destroyFunc);\n                    }\n                    else {\n                        destroyFunc();\n                    }\n                });\n            });\n        });\n    }\n}\nStatusBar.TEMPLATE = `<div class=\"ag-status-bar\">\n            <div ref=\"eStatusBarLeft\" class=\"ag-status-bar-left\" role=\"status\"></div>\n            <div ref=\"eStatusBarCenter\" class=\"ag-status-bar-center\" role=\"status\"></div>\n            <div ref=\"eStatusBarRight\" class=\"ag-status-bar-right\" role=\"status\"></div>\n        </div>`;\n__decorate$9([\n    Autowired('userComponentFactory')\n], StatusBar.prototype, \"userComponentFactory\", void 0);\n__decorate$9([\n    Autowired('statusBarService')\n], StatusBar.prototype, \"statusBarService\", void 0);\n__decorate$9([\n    RefSelector('eStatusBarLeft')\n], StatusBar.prototype, \"eStatusBarLeft\", void 0);\n__decorate$9([\n    RefSelector('eStatusBarCenter')\n], StatusBar.prototype, \"eStatusBarCenter\", void 0);\n__decorate$9([\n    RefSelector('eStatusBarRight')\n], StatusBar.prototype, \"eStatusBarRight\", void 0);\n__decorate$9([\n    PostConstruct\n], StatusBar.prototype, \"postConstruct\", null);\n\nvar __decorate$8 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass NameValueComp extends Component {\n    constructor() {\n        super(NameValueComp.TEMPLATE);\n    }\n    setLabel(key, defaultValue) {\n        // we want to hide until the first value comes in\n        this.setDisplayed(false);\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        this.eLabel.innerHTML = localeTextFunc(key, defaultValue);\n    }\n    setValue(value) {\n        this.eValue.innerHTML = value;\n    }\n}\nNameValueComp.TEMPLATE = `<div class=\"ag-status-name-value\">\n            <span ref=\"eLabel\"></span>:&nbsp;\n            <span ref=\"eValue\" class=\"ag-status-name-value-value\"></span>\n        </div>`;\n__decorate$8([\n    RefSelector('eLabel')\n], NameValueComp.prototype, \"eLabel\", void 0);\n__decorate$8([\n    RefSelector('eValue')\n], NameValueComp.prototype, \"eValue\", void 0);\n\nvar __decorate$7 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass TotalAndFilteredRowsComp extends NameValueComp {\n    postConstruct() {\n        // this component is only really useful with client side row model\n        if (this.gridApi.getModel().getType() !== 'clientSide') {\n            console.warn(`AG Grid: agTotalAndFilteredRowCountComponent should only be used with the client side row model.`);\n            return;\n        }\n        this.setLabel('totalAndFilteredRows', 'Rows');\n        this.addCssClass('ag-status-panel');\n        this.addCssClass('ag-status-panel-total-and-filtered-row-count');\n        this.setDisplayed(true);\n        this.addManagedListener(this.eventService, Events.EVENT_MODEL_UPDATED, this.onDataChanged.bind(this));\n        this.onDataChanged();\n    }\n    onDataChanged() {\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        const thousandSeparator = localeTextFunc('thousandSeparator', ',');\n        const decimalSeparator = localeTextFunc('decimalSeparator', '.');\n        const rowCount = _.formatNumberCommas(this.getFilteredRowCountValue(), thousandSeparator, decimalSeparator);\n        const totalRowCount = _.formatNumberCommas(this.getTotalRowCount(), thousandSeparator, decimalSeparator);\n        if (rowCount === totalRowCount) {\n            this.setValue(rowCount);\n        }\n        else {\n            const localeTextFunc = this.localeService.getLocaleTextFunc();\n            this.setValue(`${rowCount} ${localeTextFunc('of', 'of')} ${totalRowCount}`);\n        }\n    }\n    getFilteredRowCountValue() {\n        let filteredRowCount = 0;\n        this.gridApi.forEachNodeAfterFilter((node) => {\n            if (!node.group) {\n                filteredRowCount++;\n            }\n        });\n        return filteredRowCount;\n    }\n    getTotalRowCount() {\n        let totalRowCount = 0;\n        this.gridApi.forEachNode(node => {\n            if (!node.group) {\n                totalRowCount++;\n            }\n        });\n        return totalRowCount;\n    }\n    init() { }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so we need to override destroy() just to make the method public.\n    destroy() {\n        super.destroy();\n    }\n}\n__decorate$7([\n    Autowired('gridApi')\n], TotalAndFilteredRowsComp.prototype, \"gridApi\", void 0);\n__decorate$7([\n    PostConstruct\n], TotalAndFilteredRowsComp.prototype, \"postConstruct\", null);\n\nvar __decorate$6 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass FilteredRowsComp extends NameValueComp {\n    postConstruct() {\n        this.setLabel('filteredRows', 'Filtered');\n        // this component is only really useful with client side row model\n        if (this.gridApi.getModel().getType() !== 'clientSide') {\n            console.warn(`AG Grid: agFilteredRowCountComponent should only be used with the client side row model.`);\n            return;\n        }\n        this.addCssClass('ag-status-panel');\n        this.addCssClass('ag-status-panel-filtered-row-count');\n        this.setDisplayed(true);\n        const listener = this.onDataChanged.bind(this);\n        this.addManagedListener(this.eventService, Events.EVENT_MODEL_UPDATED, listener);\n        listener();\n    }\n    onDataChanged() {\n        const totalRowCountValue = this.getTotalRowCountValue();\n        const filteredRowCountValue = this.getFilteredRowCountValue();\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        const thousandSeparator = localeTextFunc('thousandSeparator', ',');\n        const decimalSeparator = localeTextFunc('decimalSeparator', '.');\n        this.setValue(_.formatNumberCommas(filteredRowCountValue, thousandSeparator, decimalSeparator));\n        this.setDisplayed(totalRowCountValue !== filteredRowCountValue);\n    }\n    getTotalRowCountValue() {\n        let totalRowCount = 0;\n        this.gridApi.forEachNode((node) => totalRowCount += 1);\n        return totalRowCount;\n    }\n    getFilteredRowCountValue() {\n        let filteredRowCount = 0;\n        this.gridApi.forEachNodeAfterFilter((node) => {\n            if (!node.group) {\n                filteredRowCount += 1;\n            }\n        });\n        return filteredRowCount;\n    }\n    init() { }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so we need to override destroy() just to make the method public.\n    destroy() {\n        super.destroy();\n    }\n}\n__decorate$6([\n    Autowired('gridApi')\n], FilteredRowsComp.prototype, \"gridApi\", void 0);\n__decorate$6([\n    PostConstruct\n], FilteredRowsComp.prototype, \"postConstruct\", null);\n\nvar __decorate$5 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass TotalRowsComp extends NameValueComp {\n    postConstruct() {\n        this.setLabel('totalRows', 'Total Rows');\n        // this component is only really useful with client side row model\n        if (this.gridApi.getModel().getType() !== 'clientSide') {\n            console.warn(`AG Grid: agTotalRowCountComponent should only be used with the client side row model.`);\n            return;\n        }\n        this.addCssClass('ag-status-panel');\n        this.addCssClass('ag-status-panel-total-row-count');\n        this.setDisplayed(true);\n        this.addManagedListener(this.eventService, Events.EVENT_MODEL_UPDATED, this.onDataChanged.bind(this));\n        this.onDataChanged();\n    }\n    onDataChanged() {\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        const thousandSeparator = localeTextFunc('thousandSeparator', ',');\n        const decimalSeparator = localeTextFunc('decimalSeparator', '.');\n        this.setValue(_.formatNumberCommas(this.getRowCountValue(), thousandSeparator, decimalSeparator));\n    }\n    getRowCountValue() {\n        let totalRowCount = 0;\n        this.gridApi.forEachLeafNode((node) => totalRowCount += 1);\n        return totalRowCount;\n    }\n    init() {\n    }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so we need to override destroy() just to make the method public.\n    destroy() {\n        super.destroy();\n    }\n}\n__decorate$5([\n    Autowired('gridApi')\n], TotalRowsComp.prototype, \"gridApi\", void 0);\n__decorate$5([\n    PostConstruct\n], TotalRowsComp.prototype, \"postConstruct\", null);\n\nvar __decorate$4 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass SelectedRowsComp extends NameValueComp {\n    postConstruct() {\n        if (!this.isValidRowModel()) {\n            console.warn(`AG Grid: agSelectedRowCountComponent should only be used with the client and server side row model.`);\n            return;\n        }\n        this.setLabel('selectedRows', 'Selected');\n        this.addCssClass('ag-status-panel');\n        this.addCssClass('ag-status-panel-selected-row-count');\n        this.onRowSelectionChanged();\n        const eventListener = this.onRowSelectionChanged.bind(this);\n        this.addManagedListener(this.eventService, Events.EVENT_MODEL_UPDATED, eventListener);\n        this.addManagedListener(this.eventService, Events.EVENT_SELECTION_CHANGED, eventListener);\n    }\n    isValidRowModel() {\n        // this component is only really useful with client or server side rowmodels\n        const rowModelType = this.gridApi.getModel().getType();\n        return rowModelType === 'clientSide' || rowModelType === 'serverSide';\n    }\n    onRowSelectionChanged() {\n        const selectedRowCount = this.selectionService.getSelectionCount();\n        if (selectedRowCount < 0) {\n            this.setValue('?');\n            this.setDisplayed(true);\n            return;\n        }\n        const localeTextFunc = this.localeService.getLocaleTextFunc();\n        const thousandSeparator = localeTextFunc('thousandSeparator', ',');\n        const decimalSeparator = localeTextFunc('decimalSeparator', '.');\n        this.setValue(_.formatNumberCommas(selectedRowCount, thousandSeparator, decimalSeparator));\n        this.setDisplayed(selectedRowCount > 0);\n    }\n    init() {\n    }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so we need to override destroy() just to make the method public.\n    destroy() {\n        super.destroy();\n    }\n}\n__decorate$4([\n    Autowired('gridApi')\n], SelectedRowsComp.prototype, \"gridApi\", void 0);\n__decorate$4([\n    Autowired('selectionService')\n], SelectedRowsComp.prototype, \"selectionService\", void 0);\n__decorate$4([\n    PostConstruct\n], SelectedRowsComp.prototype, \"postConstruct\", null);\n\nvar __decorate$3 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass AggregationComp extends Component {\n    constructor() {\n        super(AggregationComp.TEMPLATE);\n    }\n    // this is a user component, and IComponent has \"public destroy()\" as part of the interface.\n    // so we need to override destroy() just to make the method public.\n    destroy() {\n        super.destroy();\n    }\n    postConstruct() {\n        if (!this.isValidRowModel()) {\n            console.warn(`AG Grid: agAggregationComponent should only be used with the client and server side row model.`);\n            return;\n        }\n        this.avgAggregationComp.setLabel('avg', 'Average');\n        this.countAggregationComp.setLabel('count', 'Count');\n        this.minAggregationComp.setLabel('min', 'Min');\n        this.maxAggregationComp.setLabel('max', 'Max');\n        this.sumAggregationComp.setLabel('sum', 'Sum');\n        this.addManagedListener(this.eventService, Events.EVENT_RANGE_SELECTION_CHANGED, this.onRangeSelectionChanged.bind(this));\n        this.addManagedListener(this.eventService, Events.EVENT_MODEL_UPDATED, this.onRangeSelectionChanged.bind(this));\n    }\n    isValidRowModel() {\n        // this component is only really useful with client or server side rowmodels\n        const rowModelType = this.gridApi.getModel().getType();\n        return rowModelType === 'clientSide' || rowModelType === 'serverSide';\n    }\n    init() {\n    }\n    setAggregationComponentValue(aggFuncName, value, visible) {\n        const statusBarValueComponent = this.getAggregationValueComponent(aggFuncName);\n        if (_.exists(statusBarValueComponent) && statusBarValueComponent) {\n            const localeTextFunc = this.localeService.getLocaleTextFunc();\n            const thousandSeparator = localeTextFunc('thousandSeparator', ',');\n            const decimalSeparator = localeTextFunc('decimalSeparator', '.');\n            statusBarValueComponent.setValue(_.formatNumberTwoDecimalPlacesAndCommas(value, thousandSeparator, decimalSeparator));\n            statusBarValueComponent.setDisplayed(visible);\n        }\n    }\n    getAggregationValueComponent(aggFuncName) {\n        // converts user supplied agg name to our reference - eg: sum => sumAggregationComp\n        const refComponentName = `${aggFuncName}AggregationComp`;\n        // if the user has specified the agAggregationPanelComp but no aggFuncs we show the all\n        // if the user has specified the agAggregationPanelComp and aggFuncs, then we only show the aggFuncs listed\n        let statusBarValueComponent = null;\n        const statusBar = this.gridOptionsService.get('statusBar');\n        const aggregationPanelConfig = _.exists(statusBar) && statusBar ? statusBar.statusPanels.find(panel => panel.statusPanel === 'agAggregationComponent') : null;\n        if (_.exists(aggregationPanelConfig) && aggregationPanelConfig) {\n            // a little defensive here - if no statusPanelParams show it, if componentParams we also expect aggFuncs\n            if (!_.exists(aggregationPanelConfig.statusPanelParams) ||\n                (_.exists(aggregationPanelConfig.statusPanelParams) &&\n                    _.exists(aggregationPanelConfig.statusPanelParams.aggFuncs) &&\n                    _.exists(aggregationPanelConfig.statusPanelParams.aggFuncs.find((func) => func === aggFuncName)))) {\n                statusBarValueComponent = this[refComponentName];\n            }\n        }\n        else {\n            // components not specified - assume we can show this component\n            statusBarValueComponent = this[refComponentName];\n        }\n        // either we can't find it (which would indicate a typo or similar user side), or the user has deliberately\n        // not listed the component in aggFuncs\n        return statusBarValueComponent;\n    }\n    onRangeSelectionChanged() {\n        const cellRanges = this.rangeService ? this.rangeService.getCellRanges() : undefined;\n        let sum = 0;\n        let count = 0;\n        let numberCount = 0;\n        let min = null;\n        let max = null;\n        const cellsSoFar = {};\n        if (cellRanges && !_.missingOrEmpty(cellRanges)) {\n            cellRanges.forEach((cellRange) => {\n                let currentRow = this.rangeService.getRangeStartRow(cellRange);\n                const lastRow = this.rangeService.getRangeEndRow(cellRange);\n                while (true) {\n                    const finishedAllRows = _.missing(currentRow) || !currentRow || this.rowPositionUtils.before(lastRow, currentRow);\n                    if (finishedAllRows || !currentRow || !cellRange.columns) {\n                        break;\n                    }\n                    cellRange.columns.forEach(col => {\n                        if (currentRow === null) {\n                            return;\n                        }\n                        // we only want to include each cell once, in case a cell is in multiple ranges\n                        const cellId = this.cellPositionUtils.createId({\n                            rowPinned: currentRow.rowPinned,\n                            column: col,\n                            rowIndex: currentRow.rowIndex\n                        });\n                        if (cellsSoFar[cellId]) {\n                            return;\n                        }\n                        cellsSoFar[cellId] = true;\n                        const rowNode = this.rowRenderer.getRowNode(currentRow);\n                        if (_.missing(rowNode)) {\n                            return;\n                        }\n                        let value = this.valueService.getValue(col, rowNode);\n                        // if empty cell, skip it, doesn't impact count or anything\n                        if (_.missing(value) || value === '') {\n                            return;\n                        }\n                        count++;\n                        // see if value is wrapped, can happen when doing count() or avg() functions\n                        if (typeof value === 'object' && 'value' in value) {\n                            value = value.value;\n                            // ensure that the new value wouldn't have been skipped by the previous check\n                            if (value === '') {\n                                return;\n                            }\n                        }\n                        if (typeof value === 'string') {\n                            value = Number(value);\n                        }\n                        if (typeof value === 'number' && !isNaN(value)) {\n                            sum += value;\n                            if (max === null || value > max) {\n                                max = value;\n                            }\n                            if (min === null || value < min) {\n                                min = value;\n                            }\n                            numberCount++;\n                        }\n                    });\n                    currentRow = this.cellNavigationService.getRowBelow(currentRow);\n                }\n            });\n        }\n        const gotResult = count > 1;\n        const gotNumberResult = numberCount > 1;\n        // we show count even if no numbers\n        this.setAggregationComponentValue('count', count, gotResult);\n        // show if numbers found\n        this.setAggregationComponentValue('sum', sum, gotNumberResult);\n        this.setAggregationComponentValue('min', min, gotNumberResult);\n        this.setAggregationComponentValue('max', max, gotNumberResult);\n        this.setAggregationComponentValue('avg', (sum / numberCount), gotNumberResult);\n    }\n}\nAggregationComp.TEMPLATE = `<div class=\"ag-status-panel ag-status-panel-aggregations\">\n            <ag-name-value ref=\"avgAggregationComp\"></ag-name-value>\n            <ag-name-value ref=\"countAggregationComp\"></ag-name-value>\n            <ag-name-value ref=\"minAggregationComp\"></ag-name-value>\n            <ag-name-value ref=\"maxAggregationComp\"></ag-name-value>\n            <ag-name-value ref=\"sumAggregationComp\"></ag-name-value>\n        </div>`;\n__decorate$3([\n    Optional('rangeService')\n], AggregationComp.prototype, \"rangeService\", void 0);\n__decorate$3([\n    Autowired('valueService')\n], AggregationComp.prototype, \"valueService\", void 0);\n__decorate$3([\n    Autowired('cellNavigationService')\n], AggregationComp.prototype, \"cellNavigationService\", void 0);\n__decorate$3([\n    Autowired('rowRenderer')\n], AggregationComp.prototype, \"rowRenderer\", void 0);\n__decorate$3([\n    Autowired('gridApi')\n], AggregationComp.prototype, \"gridApi\", void 0);\n__decorate$3([\n    Autowired('cellPositionUtils')\n], AggregationComp.prototype, \"cellPositionUtils\", void 0);\n__decorate$3([\n    Autowired('rowPositionUtils')\n], AggregationComp.prototype, \"rowPositionUtils\", void 0);\n__decorate$3([\n    RefSelector('sumAggregationComp')\n], AggregationComp.prototype, \"sumAggregationComp\", void 0);\n__decorate$3([\n    RefSelector('countAggregationComp')\n], AggregationComp.prototype, \"countAggregationComp\", void 0);\n__decorate$3([\n    RefSelector('minAggregationComp')\n], AggregationComp.prototype, \"minAggregationComp\", void 0);\n__decorate$3([\n    RefSelector('maxAggregationComp')\n], AggregationComp.prototype, \"maxAggregationComp\", void 0);\n__decorate$3([\n    RefSelector('avgAggregationComp')\n], AggregationComp.prototype, \"avgAggregationComp\", void 0);\n__decorate$3([\n    PostConstruct\n], AggregationComp.prototype, \"postConstruct\", null);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$2 = '30.0.3';\n\nconst StatusBarModule = {\n    version: VERSION$2,\n    moduleName: ModuleNames.StatusBarModule,\n    beans: [StatusBarService],\n    agStackComponents: [\n        { componentName: 'AgStatusBar', componentClass: StatusBar },\n        { componentName: 'AgNameValue', componentClass: NameValueComp },\n    ],\n    userComponents: [\n        { componentName: 'agAggregationComponent', componentClass: AggregationComp },\n        { componentName: 'agSelectedRowCountComponent', componentClass: SelectedRowsComp },\n        { componentName: 'agTotalRowCountComponent', componentClass: TotalRowsComp },\n        { componentName: 'agFilteredRowCountComponent', componentClass: FilteredRowsComp },\n        { componentName: 'agTotalAndFilteredRowCountComponent', componentClass: TotalAndFilteredRowsComp }\n    ],\n    dependantModules: [\n        EnterpriseCoreModule\n    ]\n};\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION$1 = '30.0.3';\n\nvar __decorate$2 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nconst DEFAULT_VIEWPORT_ROW_MODEL_PAGE_SIZE = 5;\nconst DEFAULT_VIEWPORT_ROW_MODEL_BUFFER_SIZE = 5;\nlet ViewportRowModel = class ViewportRowModel extends BeanStub {\n    constructor() {\n        super(...arguments);\n        // rowRenderer tells us these\n        this.firstRow = -1;\n        this.lastRow = -1;\n        // datasource tells us this\n        this.rowCount = -1;\n        this.rowNodesByIndex = {};\n    }\n    // we don't implement as lazy row heights is not supported in this row model\n    ensureRowHeightsValid(startPixel, endPixel, startLimitIndex, endLimitIndex) { return false; }\n    init() {\n        this.rowHeight = this.gridOptionsService.getRowHeightAsNumber();\n        this.addManagedListener(this.eventService, Events.EVENT_VIEWPORT_CHANGED, this.onViewportChanged.bind(this));\n    }\n    start() {\n        if (this.gridOptionsService.get('viewportDatasource')) {\n            this.setViewportDatasource(this.gridOptionsService.get('viewportDatasource'));\n        }\n    }\n    isLastRowIndexKnown() {\n        return true;\n    }\n    destroyDatasource() {\n        if (!this.viewportDatasource) {\n            return;\n        }\n        if (this.viewportDatasource.destroy) {\n            this.viewportDatasource.destroy();\n        }\n        this.rowRenderer.datasourceChanged();\n        this.firstRow = -1;\n        this.lastRow = -1;\n    }\n    getViewportRowModelPageSize() {\n        return _.oneOrGreater(this.gridOptionsService.getNum('viewportRowModelPageSize'), DEFAULT_VIEWPORT_ROW_MODEL_PAGE_SIZE);\n    }\n    getViewportRowModelBufferSize() {\n        return _.zeroOrGreater(this.gridOptionsService.getNum('viewportRowModelBufferSize'), DEFAULT_VIEWPORT_ROW_MODEL_BUFFER_SIZE);\n    }\n    calculateFirstRow(firstRenderedRow) {\n        const bufferSize = this.getViewportRowModelBufferSize();\n        const pageSize = this.getViewportRowModelPageSize();\n        const afterBuffer = firstRenderedRow - bufferSize;\n        if (afterBuffer < 0) {\n            return 0;\n        }\n        return Math.floor(afterBuffer / pageSize) * pageSize;\n    }\n    calculateLastRow(lastRenderedRow) {\n        if (lastRenderedRow === -1) {\n            return lastRenderedRow;\n        }\n        const bufferSize = this.getViewportRowModelBufferSize();\n        const pageSize = this.getViewportRowModelPageSize();\n        const afterBuffer = lastRenderedRow + bufferSize;\n        const result = Math.ceil(afterBuffer / pageSize) * pageSize;\n        const lastRowIndex = this.rowCount - 1;\n        return Math.min(result, lastRowIndex);\n    }\n    onViewportChanged(event) {\n        const newFirst = this.calculateFirstRow(event.firstRow);\n        const newLast = this.calculateLastRow(event.lastRow);\n        if (this.firstRow !== newFirst || this.lastRow !== newLast) {\n            this.firstRow = newFirst;\n            this.lastRow = newLast;\n            this.purgeRowsNotInViewport();\n            if (this.viewportDatasource) {\n                this.viewportDatasource.setViewportRange(this.firstRow, this.lastRow);\n            }\n        }\n    }\n    purgeRowsNotInViewport() {\n        Object.keys(this.rowNodesByIndex).forEach(indexStr => {\n            const index = parseInt(indexStr, 10);\n            if (index < this.firstRow || index > this.lastRow) {\n                if (this.isRowFocused(index)) {\n                    return;\n                }\n                delete this.rowNodesByIndex[index];\n            }\n        });\n    }\n    isRowFocused(rowIndex) {\n        const focusedCell = this.focusService.getFocusCellToUseAfterRefresh();\n        if (!focusedCell) {\n            return false;\n        }\n        if (focusedCell.rowPinned != null) {\n            return false;\n        }\n        const hasFocus = focusedCell.rowIndex === rowIndex;\n        return hasFocus;\n    }\n    setViewportDatasource(viewportDatasource) {\n        this.destroyDatasource();\n        this.viewportDatasource = viewportDatasource;\n        this.rowCount = -1;\n        if (!viewportDatasource.init) {\n            console.warn('AG Grid: viewport is missing init method.');\n        }\n        else {\n            viewportDatasource.init({\n                setRowCount: this.setRowCount.bind(this),\n                setRowData: this.setRowData.bind(this),\n                getRow: this.getRow.bind(this)\n            });\n        }\n    }\n    getType() {\n        return 'viewport';\n    }\n    getRow(rowIndex) {\n        if (!this.rowNodesByIndex[rowIndex]) {\n            this.rowNodesByIndex[rowIndex] = this.createBlankRowNode(rowIndex);\n        }\n        return this.rowNodesByIndex[rowIndex];\n    }\n    getRowNode(id) {\n        let result;\n        this.forEachNode(rowNode => {\n            if (rowNode.id === id) {\n                result = rowNode;\n            }\n        });\n        return result;\n    }\n    getRowCount() {\n        return this.rowCount === -1 ? 0 : this.rowCount;\n    }\n    getRowIndexAtPixel(pixel) {\n        if (this.rowHeight !== 0) { // avoid divide by zero error\n            return Math.floor(pixel / this.rowHeight);\n        }\n        return 0;\n    }\n    getRowBounds(index) {\n        return {\n            rowHeight: this.rowHeight,\n            rowTop: this.rowHeight * index\n        };\n    }\n    getTopLevelRowCount() {\n        return this.getRowCount();\n    }\n    getTopLevelRowDisplayedIndex(topLevelIndex) {\n        return topLevelIndex;\n    }\n    isEmpty() {\n        return this.rowCount > 0;\n    }\n    isRowsToRender() {\n        return this.rowCount > 0;\n    }\n    getNodesInRangeForSelection(firstInRange, lastInRange) {\n        const firstIndex = _.missing(firstInRange) ? 0 : firstInRange.rowIndex;\n        const lastIndex = lastInRange.rowIndex;\n        const firstNodeOutOfRange = firstIndex < this.firstRow || firstIndex > this.lastRow;\n        const lastNodeOutOfRange = lastIndex < this.firstRow || lastIndex > this.lastRow;\n        if (firstNodeOutOfRange || lastNodeOutOfRange) {\n            return [];\n        }\n        const result = [];\n        const startIndex = firstIndex <= lastIndex ? firstIndex : lastIndex;\n        const endIndex = firstIndex <= lastIndex ? lastIndex : firstIndex;\n        for (let i = startIndex; i <= endIndex; i++) {\n            result.push(this.rowNodesByIndex[i]);\n        }\n        return result;\n    }\n    forEachNode(callback) {\n        let callbackCount = 0;\n        Object.keys(this.rowNodesByIndex).forEach(indexStr => {\n            const index = parseInt(indexStr, 10);\n            const rowNode = this.rowNodesByIndex[index];\n            callback(rowNode, callbackCount);\n            callbackCount++;\n        });\n    }\n    setRowData(rowData) {\n        _.iterateObject(rowData, (indexStr, dataItem) => {\n            const index = parseInt(indexStr, 10);\n            // we should never keep rows that we didn't specifically ask for, this\n            // guarantees the contract we have with the server.\n            if (index >= this.firstRow && index <= this.lastRow) {\n                let rowNode = this.rowNodesByIndex[index];\n                // the abnormal case is we requested a row even though the grid didn't need it\n                // as a result of the paging and buffer (ie the row is off screen), in which\n                // case we need to create a new node now\n                if (_.missing(rowNode)) {\n                    rowNode = this.createBlankRowNode(index);\n                    this.rowNodesByIndex[index] = rowNode;\n                }\n                // now we deffo have a row node, so set in the details\n                // if the grid already asked for this row (the normal case), then we would\n                // of put a placeholder node in place.\n                rowNode.setDataAndId(dataItem, index.toString());\n            }\n        });\n    }\n    createBlankRowNode(rowIndex) {\n        const rowNode = new RowNode(this.beans);\n        rowNode.setRowHeight(this.rowHeight);\n        rowNode.setRowTop(this.rowHeight * rowIndex);\n        rowNode.setRowIndex(rowIndex);\n        return rowNode;\n    }\n    setRowCount(rowCount, keepRenderedRows = false) {\n        if (rowCount === this.rowCount) {\n            return;\n        }\n        this.rowCount = rowCount;\n        const event = {\n            type: Events.EVENT_MODEL_UPDATED,\n            newData: false,\n            newPage: false,\n            keepRenderedRows: keepRenderedRows,\n            animate: false\n        };\n        this.eventService.dispatchEvent(event);\n    }\n    isRowPresent(rowNode) {\n        const foundRowNode = this.getRowNode(rowNode.id);\n        return !!foundRowNode;\n    }\n};\n__decorate$2([\n    Autowired('rowRenderer')\n], ViewportRowModel.prototype, \"rowRenderer\", void 0);\n__decorate$2([\n    Autowired('focusService')\n], ViewportRowModel.prototype, \"focusService\", void 0);\n__decorate$2([\n    Autowired('beans')\n], ViewportRowModel.prototype, \"beans\", void 0);\n__decorate$2([\n    PostConstruct\n], ViewportRowModel.prototype, \"init\", null);\n__decorate$2([\n    PreDestroy\n], ViewportRowModel.prototype, \"destroyDatasource\", null);\nViewportRowModel = __decorate$2([\n    Bean('rowModel')\n], ViewportRowModel);\n\nconst ViewportRowModelModule = {\n    version: VERSION$1,\n    moduleName: ModuleNames.ViewportRowModelModule,\n    rowModel: 'viewport',\n    beans: [ViewportRowModel],\n    dependantModules: [\n        EnterpriseCoreModule\n    ]\n};\n\nconst defaultTooltipCss = `\n.ag-sparkline-tooltip-wrapper {\n    position: absolute;\n    user-select: none;\n    pointer-events: none;\n}\n\n.ag-sparkline-tooltip {\n    position: relative;\n    font: 12px arial,sans-serif;\n    border-radius: 2px;\n    box-shadow: 0 1px 3px rgb(0 0 0 / 20%), 0 1px 1px rgb(0 0 0 / 14%);\n    line-height: 1.7em;\n    overflow: hidden;\n    white-space: nowrap;\n    z-index: 99999;\n    background-color: rgb(255, 255, 255);\n    color: rgba(0,0,0, 0.67);\n}\n\n.ag-sparkline-tooltip-content {\n    padding: 0 7px;\n    opacity: 1;\n}\n\n.ag-sparkline-tooltip-title {\n    padding-left: 7px;\n    opacity: 1;\n}\n\n.ag-sparkline-tooltip-wrapper-hidden {\n    top: -10000px !important;\n}\n\n.ag-sparkline-wrapper {\n    box-sizing: border-box;\n    overflow: hidden;\n}\n`;\n\nconst { extent: extent$3, isNumber: isNumber$3, isString, isStringObject, isDate, createId, Padding } = _Util;\nconst { LinearScale, BandScale: BandScale$4, TimeScale } = _Scale;\n/**\n * Constants to declare the expected nominal zIndex for nodes in a sparkline rendering.\n */\nvar ZINDICIES;\n(function (ZINDICIES) {\n    ZINDICIES[ZINDICIES[\"SERIES_FILL_ZINDEX\"] = 50] = \"SERIES_FILL_ZINDEX\";\n    ZINDICIES[ZINDICIES[\"AXIS_LINE_ZINDEX\"] = 500] = \"AXIS_LINE_ZINDEX\";\n    ZINDICIES[ZINDICIES[\"SERIES_STROKE_ZINDEX\"] = 1000] = \"SERIES_STROKE_ZINDEX\";\n    ZINDICIES[ZINDICIES[\"SERIES_LABEL_ZINDEX\"] = 1500] = \"SERIES_LABEL_ZINDEX\";\n    ZINDICIES[ZINDICIES[\"CROSSHAIR_ZINDEX\"] = 2000] = \"CROSSHAIR_ZINDEX\";\n    ZINDICIES[ZINDICIES[\"SERIES_MARKERS_ZINDEX\"] = 2500] = \"SERIES_MARKERS_ZINDEX\";\n})(ZINDICIES || (ZINDICIES = {}));\nclass SparklineAxis {\n    constructor() {\n        this.type = 'category';\n        this.stroke = 'rgb(204, 214, 235)';\n        this.strokeWidth = 1;\n    }\n}\nclass Sparkline {\n    constructor() {\n        this.id = createId(this);\n        this.seriesRect = {\n            x: 0,\n            y: 0,\n            width: 0,\n            height: 0,\n        };\n        this._context = undefined;\n        this._container = undefined;\n        this._data = undefined;\n        this.padding = new Padding(3);\n        this.xKey = 'x';\n        this.yKey = 'y';\n        this.dataType = undefined;\n        this.xData = [];\n        this.yData = [];\n        // Minimum y value in provided data.\n        this.min = undefined;\n        // Maximum y value in provided data.\n        this.max = undefined;\n        this.yScale = new LinearScale();\n        this.axis = new SparklineAxis();\n        this.highlightStyle = {\n            size: 6,\n            fill: 'yellow',\n            stroke: 'silver',\n            strokeWidth: 1,\n        };\n        this._width = 100;\n        this._height = 100;\n        this.smallestInterval = undefined;\n        this.layoutId = 0;\n        this.defaultDateFormatter = new Intl.DateTimeFormat('en-US', {\n            year: 'numeric',\n            month: '2-digit',\n            day: '2-digit',\n            hour: '2-digit',\n            minute: '2-digit',\n            second: '2-digit',\n            hour12: false,\n        });\n        this._onMouseMove = this.onMouseMove.bind(this);\n        this._onMouseOut = this.onMouseOut.bind(this);\n        const root = new Group();\n        this.rootGroup = root;\n        const element = document.createElement('div');\n        element.setAttribute('class', 'ag-sparkline-wrapper');\n        const scene = new Scene({ document });\n        this.scene = scene;\n        this.canvasElement = scene.canvas.element;\n        scene.root = root;\n        scene.container = element;\n        scene.resize(this.width, this.height);\n        this.seriesRect.width = this.width;\n        this.seriesRect.height = this.height;\n        // one style element for tooltip styles per document\n        if (Sparkline.tooltipDocuments.indexOf(document) === -1) {\n            const styleElement = document.createElement('style');\n            styleElement.innerHTML = defaultTooltipCss;\n            document.head.insertBefore(styleElement, document.head.querySelector('style'));\n            Sparkline.tooltipDocuments.push(document);\n        }\n        this.setupDomEventListeners(this.scene.canvas.element);\n    }\n    set context(value) {\n        if (this._context !== value) {\n            this._context = value;\n        }\n    }\n    get context() {\n        return this._context;\n    }\n    set container(value) {\n        if (this._container !== value) {\n            const { parentNode } = this.canvasElement;\n            if (parentNode != null) {\n                parentNode.removeChild(this.canvasElement);\n            }\n            if (value) {\n                value.appendChild(this.canvasElement);\n            }\n            this._container = value;\n        }\n    }\n    get container() {\n        return this._container;\n    }\n    set data(value) {\n        if (this._data !== value) {\n            this._data = value;\n            this.processData();\n            if (this.mouseMoveEvent && this.highlightedDatum) {\n                this.updateHitPoint(this.mouseMoveEvent);\n            }\n        }\n    }\n    get data() {\n        return this._data;\n    }\n    set width(value) {\n        if (this._width !== value) {\n            this._width = value;\n            this.scene.resize(value, this.height);\n            this.scheduleLayout();\n        }\n    }\n    get width() {\n        return this._width;\n    }\n    set height(value) {\n        if (this._height !== value) {\n            this._height = value;\n            this.scene.resize(this.width, value);\n            this.scheduleLayout();\n        }\n    }\n    get height() {\n        return this._height;\n    }\n    /**\n     * Generate node data from processed data.\n     * Produce data joins.\n     * Update selection's nodes using node data.\n     */\n    update() { }\n    // Update y scale based on processed data.\n    updateYScale() {\n        this.updateYScaleRange();\n        this.updateYScaleDomain();\n    }\n    // Update y scale domain based on processed data.\n    updateYScaleDomain() { }\n    // Update y scale range based on height and padding (seriesRect).\n    updateYScaleRange() {\n        const { yScale, seriesRect } = this;\n        yScale.range = [seriesRect.height, 0];\n    }\n    // Update x scale based on processed data.\n    updateXScale() {\n        const { type } = this.axis;\n        this.xScale = this.getXScale(type);\n        this.updateXScaleRange();\n        this.updateXScaleDomain();\n    }\n    // Update x scale range based on width and padding (seriesRect).\n    updateXScaleRange() {\n        this.xScale.range = [0, this.seriesRect.width];\n    }\n    // Update x scale domain based on processed data and type of scale.\n    updateXScaleDomain() {\n        const { xData, xScale } = this;\n        let xMinMax;\n        if (xScale instanceof LinearScale || xScale instanceof TimeScale) {\n            xMinMax = extent$3(xData);\n        }\n        this.xScale.domain = xMinMax ? xMinMax.slice() : xData;\n    }\n    /**\n     * Return xScale instance based on the provided type or return a `BandScale` by default.\n     * The default type is `category`.\n     * @param type\n     */\n    getXScale(type = 'category') {\n        switch (type) {\n            case 'number':\n                return new LinearScale();\n            case 'time':\n                return new TimeScale();\n            case 'category':\n            default:\n                return new BandScale$4();\n        }\n    }\n    // Update axis line.\n    updateAxisLine() { }\n    // Update X and Y scales and the axis line.\n    updateAxes() {\n        this.updateYScale();\n        this.updateXScale();\n        this.updateAxisLine();\n    }\n    // Update horizontal and vertical crosshair lines.\n    updateCrosshairs() {\n        this.updateXCrosshairLine();\n        this.updateYCrosshairLine();\n    }\n    // Using processed data, generate data that backs visible nodes.\n    generateNodeData() {\n        return [];\n    }\n    // Returns persisted node data associated with the sparkline's data.\n    getNodeData() {\n        return [];\n    }\n    // Update the selection's nodes.\n    updateNodes() { }\n    // Update the vertical crosshair line.\n    updateXCrosshairLine() { }\n    // Update the horizontal crosshair line.\n    updateYCrosshairLine() { }\n    highlightDatum(closestDatum) {\n        this.updateNodes();\n    }\n    dehighlightDatum() {\n        this.highlightedDatum = undefined;\n        this.updateNodes();\n        this.updateCrosshairs();\n    }\n    /**\n     * Highlight closest datum and display tooltip if enabled.\n     * Only update if necessary, i.e. only update if the highlighted datum is different from previously highlighted datum,\n     * or if there is no previously highlighted datum.\n     * @param event\n     */\n    onMouseMove(event) {\n        this.mouseMoveEvent = event;\n        this.updateHitPoint(event);\n    }\n    updateHitPoint(event) {\n        var _a, _b, _c;\n        const closestDatum = this.pickClosestSeriesNodeDatum(event.offsetX, event.offsetY);\n        if (!closestDatum) {\n            return;\n        }\n        const oldHighlightedDatum = this.highlightedDatum;\n        this.highlightedDatum = closestDatum;\n        if ((this.highlightedDatum && !oldHighlightedDatum) ||\n            (this.highlightedDatum && oldHighlightedDatum && this.highlightedDatum !== oldHighlightedDatum)) {\n            this.highlightDatum(closestDatum);\n            this.updateCrosshairs();\n            this.scene.render().catch((e) => console.error(`AG Grid - chart rendering failed`, e));\n        }\n        const tooltipEnabled = (_c = (_b = (_a = this.processedOptions) === null || _a === void 0 ? void 0 : _a.tooltip) === null || _b === void 0 ? void 0 : _b.enabled) !== null && _c !== void 0 ? _c : true;\n        if (tooltipEnabled) {\n            this.handleTooltip(event, closestDatum);\n        }\n    }\n    /**\n     * Dehighlight all nodes and remove tooltip.\n     * @param event\n     */\n    onMouseOut(event) {\n        this.dehighlightDatum();\n        this.tooltip.toggle(false);\n        this.scene.render().catch((e) => console.error(`AG Grid - chart rendering failed`, e));\n    }\n    // Fetch required values from the data object and process them.\n    processData() {\n        const { data, yData, xData } = this;\n        if (!data || this.invalidData(this.data)) {\n            return;\n        }\n        yData.length = 0;\n        xData.length = 0;\n        const n = data.length;\n        const dataType = this.getDataType(data);\n        this.dataType = dataType;\n        const { type: xValueType } = this.axis;\n        const xType = xValueType !== 'number' && xValueType !== 'time' ? 'category' : xValueType;\n        const isContinuousX = xType === 'number' || xType === 'time';\n        const setSmallestXInterval = (curr, prev) => {\n            if (this.smallestInterval == undefined) {\n                this.smallestInterval = { x: Infinity, y: Infinity };\n            }\n            const { x } = this.smallestInterval;\n            const interval = Math.abs(curr - prev);\n            if (interval > 0 && interval < x) {\n                this.smallestInterval.x = interval;\n            }\n        };\n        let prevX;\n        if (dataType === 'number') {\n            for (let i = 0; i < n; i++) {\n                const xDatum = i;\n                const yDatum = data[i];\n                const x = this.getDatum(xDatum, xType);\n                const y = this.getDatum(yDatum, 'number');\n                if (isContinuousX) {\n                    setSmallestXInterval(x, prevX);\n                }\n                xData.push(x);\n                yData.push(y);\n                prevX = x;\n            }\n        }\n        else if (dataType === 'array') {\n            for (let i = 0; i < n; i++) {\n                const datum = data[i];\n                if (Array.isArray(datum)) {\n                    const xDatum = datum[0];\n                    const yDatum = datum[1];\n                    const x = this.getDatum(xDatum, xType);\n                    const y = this.getDatum(yDatum, 'number');\n                    if (x == undefined) {\n                        continue;\n                    }\n                    if (isContinuousX) {\n                        setSmallestXInterval(x, prevX);\n                    }\n                    xData.push(x);\n                    yData.push(y);\n                    prevX = x;\n                }\n            }\n        }\n        else if (dataType === 'object') {\n            const { yKey, xKey } = this;\n            for (let i = 0; i < n; i++) {\n                const datum = data[i];\n                if (typeof datum === 'object' && !Array.isArray(datum)) {\n                    const xDatum = datum[xKey];\n                    const yDatum = datum[yKey];\n                    const x = this.getDatum(xDatum, xType);\n                    const y = this.getDatum(yDatum, 'number');\n                    if (x == undefined) {\n                        continue;\n                    }\n                    if (isContinuousX) {\n                        setSmallestXInterval(x, prevX);\n                    }\n                    xData.push(x);\n                    yData.push(y);\n                    prevX = x;\n                }\n            }\n        }\n        this.updateAxes();\n        this.immediateLayout();\n    }\n    /**\n     * Return the type of data provided to the sparkline based on the first truthy value in the data array.\n     * If the value is not a number, array or object, return `undefined`.\n     * @param data\n     */\n    getDataType(data) {\n        for (const datum of data) {\n            if (datum != undefined) {\n                if (isNumber$3(datum)) {\n                    return 'number';\n                }\n                else if (Array.isArray(datum)) {\n                    return 'array';\n                }\n                else if (typeof datum === 'object') {\n                    return 'object';\n                }\n            }\n        }\n    }\n    /**\n     * Return the given value depending on the type of axis.\n     * Return `undefined` if the value is invalid for the given axis type.\n     * @param value\n     */\n    getDatum(value, type) {\n        if ((type === 'number' && isNumber$3(value)) || (type === 'time' && (isNumber$3(value) || isDate(value)))) {\n            return value;\n        }\n        else if (type === 'category') {\n            if (isString(value) || isDate(value) || isNumber$3(value)) {\n                return { toString: () => String(value) };\n            }\n            else if (isStringObject(value)) {\n                return value;\n            }\n        }\n    }\n    /**\n     * Only `true` while we are waiting for the layout to start.\n     * This will be `false` if the layout has already started and is ongoing.\n     */\n    get layoutScheduled() {\n        return !!this.layoutId;\n    }\n    /**\n     * Execute update method on the next available screen repaint to make changes to the canvas.\n     * If we are waiting for a layout to start and a new layout is requested,\n     * cancel the previous layout using the non 0 integer (this.layoutId) returned from requestAnimationFrame.\n     */\n    scheduleLayout() {\n        if (this.layoutId) {\n            cancelAnimationFrame(this.layoutId);\n        }\n        this.layoutId = requestAnimationFrame(() => {\n            this.immediateLayout();\n            this.layoutId = 0;\n        });\n    }\n    immediateLayout() {\n        this.setSparklineDimensions();\n        if (this.invalidData(this.data)) {\n            return;\n        }\n        // update axes ranges\n        this.updateXScaleRange();\n        this.updateYScaleRange();\n        // update axis line\n        this.updateAxisLine();\n        // produce data joins and update selection's nodes\n        this.update();\n        this.scene.render().catch((e) => console.error(`AG Grid - chart rendering failed`, e));\n    }\n    setSparklineDimensions() {\n        const { width, height, padding, seriesRect, rootGroup } = this;\n        const shrunkWidth = width - padding.left - padding.right;\n        const shrunkHeight = height - padding.top - padding.bottom;\n        seriesRect.width = shrunkWidth;\n        seriesRect.height = shrunkHeight;\n        seriesRect.x = padding.left;\n        seriesRect.y = padding.top;\n        rootGroup.translationX = seriesRect.x;\n        rootGroup.translationY = seriesRect.y;\n    }\n    /**\n     * Return the closest data point to x/y canvas coordinates.\n     * @param x\n     * @param y\n     */\n    pickClosestSeriesNodeDatum(x, y) {\n        let minDistance = Infinity;\n        let closestDatum;\n        const hitPoint = this.rootGroup.transformPoint(x, y);\n        const nodeData = this.getNodeData();\n        for (let i = 0; i < nodeData.length; i++) {\n            const datum = nodeData[i];\n            if (!datum.point) {\n                return;\n            }\n            const distance = this.getDistance(hitPoint, datum.point);\n            if (distance <= minDistance) {\n                minDistance = distance;\n                closestDatum = datum;\n            }\n        }\n        return closestDatum;\n    }\n    /**\n     * Return the relevant distance between two points.\n     * The distance will be calculated based on the x value of the points for all sparklines except bar sparkline, where the distance is based on the y values.\n     * @param x\n     * @param y\n     */\n    getDistance(p1, p2) {\n        return Math.abs(p1.x - p2.x);\n    }\n    /**\n     * calculate x/y coordinates for tooltip based on coordinates of highlighted datum, position of canvas and page offset.\n     * @param datum\n     */\n    handleTooltip(event, datum) {\n        var _a, _b;\n        const { seriesDatum } = datum;\n        const { canvasElement } = this;\n        const { clientX, clientY } = event;\n        const tooltipOptions = (_a = this.processedOptions) === null || _a === void 0 ? void 0 : _a.tooltip;\n        const meta = {\n            pageX: clientX,\n            pageY: clientY,\n            position: {\n                xOffset: tooltipOptions === null || tooltipOptions === void 0 ? void 0 : tooltipOptions.xOffset,\n                yOffset: tooltipOptions === null || tooltipOptions === void 0 ? void 0 : tooltipOptions.yOffset,\n            },\n            container: tooltipOptions === null || tooltipOptions === void 0 ? void 0 : tooltipOptions.container,\n        };\n        // confine tooltip to sparkline width if tooltip container not provided.\n        if (meta.container == undefined) {\n            meta.container = canvasElement;\n        }\n        const yValue = seriesDatum.y;\n        const xValue = seriesDatum.x;\n        // check if tooltip is enabled for this specific data point\n        let enabled = (_b = tooltipOptions === null || tooltipOptions === void 0 ? void 0 : tooltipOptions.enabled) !== null && _b !== void 0 ? _b : true;\n        const tooltipRenderer = tooltipOptions === null || tooltipOptions === void 0 ? void 0 : tooltipOptions.renderer;\n        if (tooltipRenderer) {\n            const tooltipRendererResult = tooltipRenderer({\n                context: this.context,\n                datum: seriesDatum,\n                yValue,\n                xValue,\n            });\n            enabled =\n                typeof tooltipRendererResult !== 'string' && tooltipRendererResult.enabled !== undefined\n                    ? tooltipRendererResult.enabled\n                    : enabled;\n        }\n        const html = enabled && seriesDatum.y !== undefined && this.getTooltipHtml(datum);\n        if (html) {\n            this.tooltip.show(meta, html);\n        }\n    }\n    formatNumericDatum(datum) {\n        return String(Math.round(datum * 10) / 10);\n    }\n    // locale.format('%m/%d/%y, %H:%M:%S');\n    formatDatum(datum) {\n        const type = this.axis.type || 'category';\n        if (type === 'number' && typeof datum === 'number') {\n            return this.formatNumericDatum(datum);\n        }\n        else if (type === 'time' && (datum instanceof Date || isNumber$3(datum))) {\n            return this.defaultDateFormatter.format(datum);\n        }\n        else {\n            return String(datum);\n        }\n    }\n    setupDomEventListeners(chartElement) {\n        chartElement.addEventListener('mousemove', this._onMouseMove);\n        chartElement.addEventListener('mouseout', this._onMouseOut);\n    }\n    cleanupDomEventListeners(chartElement) {\n        chartElement.removeEventListener('mousemove', this._onMouseMove);\n        chartElement.removeEventListener('mouseout', this._onMouseOut);\n    }\n    invalidData(data) {\n        return !data || !Array.isArray(data) || data.length === 0;\n    }\n    /**\n     * Cleanup and remove canvas element from the DOM.\n     */\n    destroy() {\n        this.scene.container = undefined;\n        // remove canvas element from the DOM\n        this.container = undefined;\n        this.cleanupDomEventListeners(this.scene.canvas.element);\n    }\n}\nSparkline.tooltipDocuments = [];\n\nfunction toTooltipHtml(input, defaults) {\n    var _a, _b, _c;\n    if (typeof input === 'string') {\n        return input;\n    }\n    defaults = defaults !== null && defaults !== void 0 ? defaults : {};\n    const { content = (_a = defaults.content) !== null && _a !== void 0 ? _a : '', title = (_b = defaults.title) !== null && _b !== void 0 ? _b : undefined, color = defaults.color, backgroundColor = defaults.backgroundColor, opacity = (_c = defaults.opacity) !== null && _c !== void 0 ? _c : 1, } = input;\n    let titleHtml;\n    let contentHtml;\n    if (color) {\n        titleHtml = title\n            ? `<span class=\"${SparklineTooltip.class}-title\"; style=\"color: ${color}\">${title}</span>`\n            : '';\n        contentHtml = `<span class=\"${SparklineTooltip.class}-content\" style=\"color: ${color}\">${content}</span>`;\n    }\n    else {\n        titleHtml = title ? `<span class=\"${SparklineTooltip.class}-title\">${title}</span>` : '';\n        contentHtml = `<span class=\"${SparklineTooltip.class}-content\">${content}</span>`;\n    }\n    let style = `opacity: ${opacity}`;\n    if (backgroundColor) {\n        style += `; background-color: ${backgroundColor.toLowerCase()}`;\n    }\n    return `<div class=\"${SparklineTooltip.class}\" style=\"${style}\">\n                ${titleHtml}\n                ${contentHtml}\n            </div>`;\n}\nclass SparklineTooltip {\n    constructor() {\n        this.element = document.createElement('div');\n        const tooltipRoot = document.body;\n        tooltipRoot.appendChild(this.element);\n    }\n    isVisible() {\n        const { element } = this;\n        if (element.classList) {\n            return !element.classList.contains(`${SparklineTooltip.class}-wrapper-hidden`);\n        }\n        // IE11\n        const classes = element.getAttribute('class');\n        if (classes) {\n            return classes.split(' ').indexOf(`${SparklineTooltip.class}-wrapper-hidden`) < 0;\n        }\n        return false;\n    }\n    updateClass(visible) {\n        const classList = [`${SparklineTooltip.class}-wrapper`];\n        if (visible !== true) {\n            classList.push(`${SparklineTooltip.class}-wrapper-hidden`);\n        }\n        this.element.setAttribute('class', classList.join(' '));\n    }\n    show(meta, html) {\n        var _a, _b, _c, _d;\n        this.toggle(false);\n        const { element } = this;\n        if (html !== undefined) {\n            element.innerHTML = html;\n        }\n        else if (!element.innerHTML) {\n            return;\n        }\n        const xOffset = (_b = (_a = meta.position) === null || _a === void 0 ? void 0 : _a.xOffset) !== null && _b !== void 0 ? _b : 10;\n        const yOffset = (_d = (_c = meta.position) === null || _c === void 0 ? void 0 : _c.yOffset) !== null && _d !== void 0 ? _d : 0;\n        let left = meta.pageX + xOffset;\n        let top = meta.pageY + yOffset;\n        const tooltipRect = element.getBoundingClientRect();\n        let maxLeft = window.innerWidth - tooltipRect.width;\n        if (meta.container) {\n            const containerRect = meta.container.getBoundingClientRect();\n            maxLeft = containerRect.left + (containerRect.width - tooltipRect.width);\n        }\n        if (left > maxLeft) {\n            left = meta.pageX - element.clientWidth - xOffset;\n        }\n        if (typeof scrollX !== 'undefined') {\n            left += scrollX;\n        }\n        if (typeof scrollY !== 'undefined') {\n            top += scrollY;\n        }\n        element.style.left = `${Math.round(left)}px`;\n        element.style.top = `${Math.round(top)}px`;\n        this.toggle(true);\n    }\n    toggle(visible) {\n        this.updateClass(visible);\n    }\n    destroy() {\n        const { parentNode } = this.element;\n        if (parentNode) {\n            parentNode.removeChild(this.element);\n        }\n    }\n}\nSparklineTooltip.class = 'ag-sparkline-tooltip';\n\nfunction getMarker(shape) {\n    switch (shape) {\n        case 'circle':\n            return Circle;\n        case 'square':\n            return Square;\n        case 'diamond':\n            return Diamond;\n        default:\n            return Circle;\n    }\n}\n\nfunction getLineDash(lineCap, lineDash = 'solid') {\n    const buttOrNull = {\n        solid: [],\n        dash: [4, 3],\n        dot: [1, 3],\n        dashDot: [4, 3, 1, 3],\n        dashDotDot: [4, 3, 1, 3, 1, 3],\n        shortDot: [1, 1],\n        shortDash: [3, 1],\n        shortDashDot: [3, 1, 1, 1],\n        shortDashDotDot: [3, 1, 1, 1, 1, 1],\n        longDash: [8, 3],\n        longDashDot: [8, 3, 1, 3],\n        longDashDotDot: [8, 3, 1, 3, 1, 3]\n    };\n    const roundOrSquare = {\n        solid: [],\n        dash: [3, 3],\n        dot: [0, 3],\n        dashDot: [3, 3, 0, 3],\n        dashDotDot: [3, 3, 0, 3, 0, 3],\n        shortDot: [0, 2],\n        shortDash: [2, 2],\n        shortDashDot: [2, 2, 0, 2],\n        shortDashDotDot: [2, 2, 0, 2, 0, 2],\n        longDash: [7, 3],\n        longDashDot: [7, 3, 0, 3],\n        longDashDotDot: [7, 3, 0, 3, 0, 3]\n    };\n    if (lineCap === 'round' || lineCap === 'square') {\n        if (roundOrSquare[lineDash] == undefined) {\n            console.warn(`'${lineDash}' is not a valid 'lineDash' option.`);\n            return roundOrSquare.solid;\n        }\n        return roundOrSquare[lineDash];\n    }\n    if (buttOrNull[lineDash] == undefined) {\n        console.warn(`'${lineDash}' is not a valid 'lineDash' option.`);\n        return buttOrNull.solid;\n    }\n    return buttOrNull[lineDash];\n}\n\nconst { extent: extent$2 } = _Util;\nconst { BandScale: BandScale$3 } = _Scale;\nclass SparklineMarker$1 {\n    constructor() {\n        this.enabled = true;\n        this.shape = 'circle';\n        this.size = 0;\n        this.fill = 'rgb(124, 181, 236)';\n        this.stroke = 'rgb(124, 181, 236)';\n        this.strokeWidth = 1;\n        this.formatter = undefined;\n    }\n}\nclass SparklineLine$1 {\n    constructor() {\n        this.stroke = 'rgb(124, 181, 236)';\n        this.strokeWidth = 1;\n    }\n}\nclass SparklineCrosshairs$1 {\n    constructor() {\n        this.xLine = {\n            enabled: true,\n            stroke: 'rgba(0,0,0, 0.54)',\n            strokeWidth: 1,\n            lineDash: 'solid',\n            lineCap: undefined,\n        };\n        this.yLine = {\n            enabled: false,\n            stroke: 'rgba(0,0,0, 0.54)',\n            strokeWidth: 1,\n            lineDash: 'solid',\n            lineCap: undefined,\n        };\n    }\n}\nclass AreaSparkline extends Sparkline {\n    constructor() {\n        super();\n        this.fill = 'rgba(124, 181, 236, 0.25)';\n        this.strokePath = new Path();\n        this.fillPath = new Path();\n        this.xCrosshairLine = new Line();\n        this.yCrosshairLine = new Line();\n        this.areaSparklineGroup = new Group();\n        this.xAxisLine = new Line();\n        this.markers = new Group();\n        this.markerSelection = Selection.select(this.markers, () => this.markerFactory());\n        this.markerSelectionData = [];\n        this.marker = new SparklineMarker$1();\n        this.line = new SparklineLine$1();\n        this.crosshairs = new SparklineCrosshairs$1();\n        this.rootGroup.append(this.areaSparklineGroup);\n        this.xAxisLine.zIndex = ZINDICIES.AXIS_LINE_ZINDEX;\n        this.fillPath.zIndex = ZINDICIES.SERIES_FILL_ZINDEX;\n        this.strokePath.zIndex = ZINDICIES.SERIES_STROKE_ZINDEX;\n        this.xCrosshairLine.zIndex = ZINDICIES.CROSSHAIR_ZINDEX;\n        this.yCrosshairLine.zIndex = ZINDICIES.CROSSHAIR_ZINDEX;\n        this.markers.zIndex = ZINDICIES.SERIES_MARKERS_ZINDEX;\n        this.areaSparklineGroup.append([\n            this.fillPath,\n            this.xAxisLine,\n            this.strokePath,\n            this.xCrosshairLine,\n            this.yCrosshairLine,\n            this.markers,\n        ]);\n    }\n    markerFactory() {\n        const { shape } = this.marker;\n        const MarkerShape = getMarker(shape);\n        return new MarkerShape();\n    }\n    getNodeData() {\n        return this.markerSelectionData;\n    }\n    update() {\n        const data = this.generateNodeData();\n        if (!data) {\n            return;\n        }\n        const { nodeData, fillData, strokeData } = data;\n        this.markerSelectionData = nodeData;\n        this.updateSelection(nodeData);\n        this.updateNodes();\n        this.updateStroke(strokeData);\n        this.updateFill(fillData);\n    }\n    updateYScaleDomain() {\n        const { yData, yScale } = this;\n        const yMinMax = extent$2(yData);\n        let yMin = 0;\n        let yMax = 1;\n        if (yMinMax !== undefined) {\n            yMin = this.min = yMinMax[0];\n            yMax = this.max = yMinMax[1];\n        }\n        // if yMin is positive, set yMin to 0\n        yMin = yMin < 0 ? yMin : 0;\n        // if yMax is negative, set yMax to 0\n        yMax = yMax < 0 ? 0 : yMax;\n        yScale.domain = [yMin, yMax];\n    }\n    generateNodeData() {\n        const { data, yData, xData, xScale, yScale } = this;\n        if (!data) {\n            return;\n        }\n        const continuous = !(xScale instanceof BandScale$3);\n        const offsetX = !continuous ? xScale.bandwidth / 2 : 0;\n        const n = yData.length;\n        const nodeData = [];\n        const fillData = [];\n        const strokeData = [];\n        let firstValidX;\n        let lastValidX;\n        let previousX;\n        let nextX;\n        const yZero = yScale.convert(0);\n        for (let i = 0; i < n; i++) {\n            const yDatum = yData[i];\n            const xDatum = xData[i];\n            const x = xScale.convert(continuous ? xScale.toDomain(xDatum) : xDatum) + offsetX;\n            const y = yDatum === undefined ? NaN : yScale.convert(yDatum);\n            // if this iteration is not the last, set nextX using the next value in the data array\n            if (i + 1 < n) {\n                nextX = xScale.convert(continuous ? xScale.toDomain(xData[i + 1]) : xData[i + 1]) + offsetX;\n            }\n            // set stroke data regardless of missing/ undefined values. Undefined values will be handled in the updateStroke() method\n            strokeData.push({\n                seriesDatum: { x: xDatum, y: yDatum },\n                point: { x, y },\n            });\n            if (yDatum === undefined && previousX !== undefined) {\n                // if yDatum is undefined and there is a valid previous data point, add a phantom point at yZero\n                // if a next data point exists, add a phantom point at yZero at the next X\n                fillData.push({ seriesDatum: undefined, point: { x: previousX, y: yZero } });\n                if (nextX !== undefined) {\n                    fillData.push({ seriesDatum: undefined, point: { x: nextX, y: yZero } });\n                }\n            }\n            else if (yDatum !== undefined) {\n                fillData.push({\n                    seriesDatum: { x: xDatum, y: yDatum },\n                    point: { x, y },\n                });\n                // set node data only if yDatum is not undefined. These values are used in the updateSelection() method to update markers\n                nodeData.push({\n                    seriesDatum: { x: xDatum, y: yDatum },\n                    point: { x, y },\n                });\n                firstValidX = firstValidX !== undefined ? firstValidX : x;\n                lastValidX = x;\n            }\n            previousX = x;\n        }\n        // phantom points for creating closed area\n        fillData.push({ seriesDatum: undefined, point: { x: lastValidX, y: yZero } }, { seriesDatum: undefined, point: { x: firstValidX, y: yZero } });\n        return { nodeData, fillData, strokeData };\n    }\n    updateAxisLine() {\n        const { xScale, yScale, axis, xAxisLine } = this;\n        xAxisLine.x1 = xScale.range[0];\n        xAxisLine.x2 = xScale.range[1];\n        xAxisLine.y1 = xAxisLine.y2 = 0;\n        xAxisLine.stroke = axis.stroke;\n        xAxisLine.strokeWidth = axis.strokeWidth;\n        const yZero = yScale.convert(0);\n        xAxisLine.translationY = yZero;\n    }\n    updateSelection(selectionData) {\n        this.markerSelection.update(selectionData);\n    }\n    updateNodes() {\n        const { highlightedDatum, highlightStyle, marker } = this;\n        const { size: highlightSize, fill: highlightFill, stroke: highlightStroke, strokeWidth: highlightStrokeWidth, } = highlightStyle;\n        const markerFormatter = marker.formatter;\n        this.markerSelection.each((node, datum, index) => {\n            const { point, seriesDatum } = datum;\n            if (!point) {\n                return;\n            }\n            const highlighted = datum === highlightedDatum;\n            const markerFill = highlighted && highlightFill !== undefined ? highlightFill : marker.fill;\n            const markerStroke = highlighted && highlightStroke !== undefined ? highlightStroke : marker.stroke;\n            const markerStrokeWidth = highlighted && highlightStrokeWidth !== undefined ? highlightStrokeWidth : marker.strokeWidth;\n            const markerSize = highlighted && highlightSize !== undefined ? highlightSize : marker.size;\n            let markerFormat;\n            if (markerFormatter) {\n                const first = index === 0;\n                const last = index === this.markerSelectionData.length - 1;\n                const min = seriesDatum.y === this.min;\n                const max = seriesDatum.y === this.max;\n                markerFormat = markerFormatter({\n                    datum,\n                    xValue: seriesDatum.x,\n                    yValue: seriesDatum.y,\n                    min,\n                    max,\n                    first,\n                    last,\n                    fill: markerFill,\n                    stroke: markerStroke,\n                    strokeWidth: markerStrokeWidth,\n                    size: markerSize,\n                    highlighted,\n                });\n            }\n            node.size = markerFormat && markerFormat.size != undefined ? markerFormat.size : markerSize;\n            node.fill = markerFormat && markerFormat.fill != undefined ? markerFormat.fill : markerFill;\n            node.stroke = markerFormat && markerFormat.stroke != undefined ? markerFormat.stroke : markerStroke;\n            node.strokeWidth =\n                markerFormat && markerFormat.strokeWidth != undefined ? markerFormat.strokeWidth : markerStrokeWidth;\n            node.translationX = point.x;\n            node.translationY = point.y;\n            node.visible =\n                markerFormat && markerFormat.enabled != undefined\n                    ? markerFormat.enabled\n                    : marker.enabled && node.size > 0;\n        });\n    }\n    updateStroke(strokeData) {\n        const { strokePath, yData, line } = this;\n        if (yData.length < 2) {\n            return;\n        }\n        const path = strokePath.path;\n        const n = strokeData.length;\n        let moveTo = true;\n        path.clear();\n        for (let i = 0; i < n; i++) {\n            const { point, seriesDatum } = strokeData[i];\n            const x = point.x;\n            const y = point.y;\n            if (seriesDatum.y == undefined) {\n                moveTo = true;\n            }\n            else {\n                if (moveTo) {\n                    path.moveTo(x, y);\n                    moveTo = false;\n                }\n                else {\n                    path.lineTo(x, y);\n                }\n            }\n        }\n        strokePath.lineJoin = strokePath.lineCap = 'round';\n        strokePath.fill = undefined;\n        strokePath.stroke = line.stroke;\n        strokePath.strokeWidth = line.strokeWidth;\n    }\n    updateFill(areaData) {\n        const { fillPath, yData, fill } = this;\n        const path = fillPath.path;\n        const n = areaData.length;\n        path.clear();\n        if (yData.length < 2) {\n            return;\n        }\n        for (let i = 0; i < n; i++) {\n            const { point } = areaData[i];\n            const x = point.x;\n            const y = point.y;\n            if (i > 0) {\n                path.lineTo(x, y);\n            }\n            else {\n                path.moveTo(x, y);\n            }\n        }\n        path.closePath();\n        fillPath.lineJoin = 'round';\n        fillPath.stroke = undefined;\n        fillPath.fill = fill;\n    }\n    updateXCrosshairLine() {\n        var _a;\n        const { yScale, xCrosshairLine, highlightedDatum, crosshairs: { xLine }, } = this;\n        if (!xLine.enabled || highlightedDatum == undefined) {\n            xCrosshairLine.strokeWidth = 0;\n            return;\n        }\n        xCrosshairLine.y1 = yScale.range[0];\n        xCrosshairLine.y2 = yScale.range[1];\n        xCrosshairLine.x1 = xCrosshairLine.x2 = 0;\n        xCrosshairLine.stroke = xLine.stroke;\n        xCrosshairLine.strokeWidth = (_a = xLine.strokeWidth) !== null && _a !== void 0 ? _a : 1;\n        xCrosshairLine.lineCap = xLine.lineCap === 'round' || xLine.lineCap === 'square' ? xLine.lineCap : undefined;\n        const { lineDash } = xLine;\n        xCrosshairLine.lineDash = Array.isArray(lineDash)\n            ? lineDash\n            : getLineDash(xCrosshairLine.lineCap, xLine.lineDash);\n        xCrosshairLine.translationX = highlightedDatum.point.x;\n    }\n    updateYCrosshairLine() {\n        var _a;\n        const { xScale, yCrosshairLine, highlightedDatum, crosshairs: { yLine }, } = this;\n        if (!yLine.enabled || highlightedDatum == undefined) {\n            yCrosshairLine.strokeWidth = 0;\n            return;\n        }\n        yCrosshairLine.x1 = xScale.range[0];\n        yCrosshairLine.x2 = xScale.range[1];\n        yCrosshairLine.y1 = yCrosshairLine.y2 = 0;\n        yCrosshairLine.stroke = yLine.stroke;\n        yCrosshairLine.strokeWidth = (_a = yLine.strokeWidth) !== null && _a !== void 0 ? _a : 1;\n        yCrosshairLine.lineCap = yLine.lineCap === 'round' || yLine.lineCap === 'square' ? yLine.lineCap : undefined;\n        const { lineDash } = yLine;\n        yCrosshairLine.lineDash = Array.isArray(lineDash)\n            ? lineDash\n            : getLineDash(yCrosshairLine.lineCap, yLine.lineDash);\n        yCrosshairLine.translationY = highlightedDatum.point.y;\n    }\n    getTooltipHtml(datum) {\n        var _a, _b;\n        const { dataType } = this;\n        const { seriesDatum } = datum;\n        const yValue = seriesDatum.y;\n        const xValue = seriesDatum.x;\n        const content = this.formatNumericDatum(yValue);\n        const title = dataType === 'array' || dataType === 'object' ? this.formatDatum(xValue) : undefined;\n        const defaults = {\n            content,\n            title,\n        };\n        const tooltipRenderer = (_b = (_a = this.processedOptions) === null || _a === void 0 ? void 0 : _a.tooltip) === null || _b === void 0 ? void 0 : _b.renderer;\n        if (tooltipRenderer) {\n            return toTooltipHtml(tooltipRenderer({\n                context: this.context,\n                datum: seriesDatum,\n                yValue,\n                xValue,\n            }), defaults);\n        }\n        return toTooltipHtml(defaults);\n    }\n}\nAreaSparkline.className = 'AreaSparkline';\n\nconst { extent: extent$1 } = _Util;\nconst { BandScale: BandScale$2 } = _Scale;\nclass SparklineMarker {\n    constructor() {\n        this.enabled = true;\n        this.shape = 'circle';\n        this.size = 0;\n        this.fill = 'rgb(124, 181, 236)';\n        this.stroke = 'rgb(124, 181, 236)';\n        this.strokeWidth = 1;\n        this.formatter = undefined;\n    }\n}\nclass SparklineLine {\n    constructor() {\n        this.stroke = 'rgb(124, 181, 236)';\n        this.strokeWidth = 1;\n    }\n}\nclass SparklineCrosshairs {\n    constructor() {\n        this.xLine = {\n            enabled: true,\n            stroke: 'rgba(0,0,0, 0.54)',\n            strokeWidth: 1,\n            lineDash: 'solid',\n            lineCap: undefined,\n        };\n        this.yLine = {\n            enabled: false,\n            stroke: 'rgba(0,0,0, 0.54)',\n            strokeWidth: 1,\n            lineDash: 'solid',\n            lineCap: undefined,\n        };\n    }\n}\nclass LineSparkline extends Sparkline {\n    constructor() {\n        super();\n        this.linePath = new Path();\n        this.xCrosshairLine = new Line();\n        this.yCrosshairLine = new Line();\n        this.lineSparklineGroup = new Group();\n        this.markers = new Group();\n        this.markerSelection = Selection.select(this.markers, () => this.markerFactory());\n        this.markerSelectionData = [];\n        this.marker = new SparklineMarker();\n        this.line = new SparklineLine();\n        this.crosshairs = new SparklineCrosshairs();\n        this.rootGroup.append(this.lineSparklineGroup);\n        this.linePath.zIndex = ZINDICIES.SERIES_STROKE_ZINDEX;\n        this.xCrosshairLine.zIndex = ZINDICIES.CROSSHAIR_ZINDEX;\n        this.yCrosshairLine.zIndex = ZINDICIES.CROSSHAIR_ZINDEX;\n        this.markers.zIndex = ZINDICIES.SERIES_MARKERS_ZINDEX;\n        this.lineSparklineGroup.append([this.linePath, this.xCrosshairLine, this.yCrosshairLine, this.markers]);\n    }\n    getNodeData() {\n        return this.markerSelectionData;\n    }\n    markerFactory() {\n        const { shape } = this.marker;\n        const MarkerShape = getMarker(shape);\n        return new MarkerShape();\n    }\n    /**\n     * If marker shape is changed, this method should be called to remove the previous marker nodes selection.\n     */\n    onMarkerShapeChange() {\n        this.markerSelection = this.markerSelection.clear();\n        this.scheduleLayout();\n    }\n    update() {\n        const nodeData = this.generateNodeData();\n        if (!nodeData) {\n            return;\n        }\n        this.markerSelectionData = nodeData;\n        this.updateSelection(nodeData);\n        this.updateNodes();\n        this.updateLine();\n    }\n    updateYScaleDomain() {\n        const { yData, yScale } = this;\n        const yMinMax = extent$1(yData);\n        let yMin = 0;\n        let yMax = 1;\n        if (yMinMax !== undefined) {\n            yMin = this.min = yMinMax[0];\n            yMax = this.max = yMinMax[1];\n        }\n        if (yMin === yMax) {\n            // if all values in the data are the same, yMin and yMax will be equal, need to adjust the domain with some padding\n            const padding = Math.abs(yMin * 0.01);\n            yMin -= padding;\n            yMax += padding;\n        }\n        yScale.domain = [yMin, yMax];\n    }\n    generateNodeData() {\n        const { data, yData, xData, xScale, yScale } = this;\n        if (!data) {\n            return;\n        }\n        const continuous = !(xScale instanceof BandScale$2);\n        const offsetX = !continuous ? xScale.bandwidth / 2 : 0;\n        const nodeData = [];\n        for (let i = 0; i < yData.length; i++) {\n            const yDatum = yData[i];\n            const xDatum = xData[i];\n            if (yDatum == undefined) {\n                continue;\n            }\n            const x = xScale.convert(continuous ? xScale.toDomain(xDatum) : xDatum) + offsetX;\n            const y = yDatum === undefined ? NaN : yScale.convert(yDatum);\n            nodeData.push({\n                seriesDatum: { x: xDatum, y: yDatum },\n                point: { x, y },\n            });\n        }\n        return nodeData;\n    }\n    updateSelection(selectionData) {\n        this.markerSelection.update(selectionData);\n    }\n    updateNodes() {\n        const { highlightedDatum, highlightStyle, marker } = this;\n        const { size: highlightSize, fill: highlightFill, stroke: highlightStroke, strokeWidth: highlightStrokeWidth, } = highlightStyle;\n        const markerFormatter = marker.formatter;\n        this.markerSelection.each((node, datum, index) => {\n            const highlighted = datum === highlightedDatum;\n            const markerFill = highlighted && highlightFill !== undefined ? highlightFill : marker.fill;\n            const markerStroke = highlighted && highlightStroke !== undefined ? highlightStroke : marker.stroke;\n            const markerStrokeWidth = highlighted && highlightStrokeWidth !== undefined ? highlightStrokeWidth : marker.strokeWidth;\n            const markerSize = highlighted && highlightSize !== undefined ? highlightSize : marker.size;\n            let markerFormat;\n            const { seriesDatum, point } = datum;\n            if (markerFormatter) {\n                const first = index === 0;\n                const last = index === this.markerSelectionData.length - 1;\n                const min = seriesDatum.y === this.min;\n                const max = seriesDatum.y === this.max;\n                markerFormat = markerFormatter({\n                    datum,\n                    xValue: seriesDatum.x,\n                    yValue: seriesDatum.y,\n                    min,\n                    max,\n                    first,\n                    last,\n                    fill: markerFill,\n                    stroke: markerStroke,\n                    strokeWidth: markerStrokeWidth,\n                    size: markerSize,\n                    highlighted,\n                });\n            }\n            node.size = markerFormat && markerFormat.size != undefined ? markerFormat.size : markerSize;\n            node.fill = markerFormat && markerFormat.fill != undefined ? markerFormat.fill : markerFill;\n            node.stroke = markerFormat && markerFormat.stroke != undefined ? markerFormat.stroke : markerStroke;\n            node.strokeWidth =\n                markerFormat && markerFormat.strokeWidth != undefined ? markerFormat.strokeWidth : markerStrokeWidth;\n            node.translationX = point.x;\n            node.translationY = point.y;\n            node.visible =\n                markerFormat && markerFormat.enabled != undefined\n                    ? markerFormat.enabled\n                    : marker.enabled && node.size > 0;\n        });\n    }\n    updateLine() {\n        const { linePath, yData, xData, xScale, yScale, line } = this;\n        if (yData.length < 2) {\n            return;\n        }\n        const continuous = !(xScale instanceof BandScale$2);\n        const path = linePath.path;\n        const n = yData.length;\n        const offsetX = !continuous ? xScale.bandwidth / 2 : 0;\n        let moveTo = true;\n        path.clear();\n        for (let i = 0; i < n; i++) {\n            const xDatum = xData[i];\n            const yDatum = yData[i];\n            const x = xScale.convert(continuous ? xScale.toDomain(xDatum) : xDatum) + offsetX;\n            const y = yDatum === undefined ? NaN : yScale.convert(yDatum);\n            if (yDatum == undefined) {\n                moveTo = true;\n            }\n            else {\n                if (moveTo) {\n                    path.moveTo(x, y);\n                    moveTo = false;\n                }\n                else {\n                    path.lineTo(x, y);\n                }\n            }\n        }\n        linePath.fill = undefined;\n        linePath.stroke = line.stroke;\n        linePath.strokeWidth = line.strokeWidth;\n    }\n    updateXCrosshairLine() {\n        var _a;\n        const { yScale, xCrosshairLine, highlightedDatum, crosshairs: { xLine }, } = this;\n        if (!xLine.enabled || highlightedDatum == undefined) {\n            xCrosshairLine.strokeWidth = 0;\n            return;\n        }\n        xCrosshairLine.y1 = yScale.range[0];\n        xCrosshairLine.y2 = yScale.range[1];\n        xCrosshairLine.x1 = xCrosshairLine.x2 = 0;\n        xCrosshairLine.stroke = xLine.stroke;\n        xCrosshairLine.strokeWidth = (_a = xLine.strokeWidth) !== null && _a !== void 0 ? _a : 1;\n        xCrosshairLine.lineCap = xLine.lineCap === 'round' || xLine.lineCap === 'square' ? xLine.lineCap : undefined;\n        const { lineDash } = xLine;\n        xCrosshairLine.lineDash = Array.isArray(lineDash)\n            ? lineDash\n            : getLineDash(xCrosshairLine.lineCap, xLine.lineDash);\n        xCrosshairLine.translationX = highlightedDatum.point.x;\n    }\n    updateYCrosshairLine() {\n        var _a;\n        const { xScale, yCrosshairLine, highlightedDatum, crosshairs: { yLine }, } = this;\n        if (!yLine.enabled || highlightedDatum == undefined) {\n            yCrosshairLine.strokeWidth = 0;\n            return;\n        }\n        yCrosshairLine.x1 = xScale.range[0];\n        yCrosshairLine.x2 = xScale.range[1];\n        yCrosshairLine.y1 = yCrosshairLine.y2 = 0;\n        yCrosshairLine.stroke = yLine.stroke;\n        yCrosshairLine.strokeWidth = (_a = yLine.strokeWidth) !== null && _a !== void 0 ? _a : 1;\n        yCrosshairLine.lineCap = yLine.lineCap === 'round' || yLine.lineCap === 'square' ? yLine.lineCap : undefined;\n        const { lineDash } = yLine;\n        yCrosshairLine.lineDash = Array.isArray(lineDash)\n            ? lineDash\n            : getLineDash(yCrosshairLine.lineCap, yLine.lineDash);\n        yCrosshairLine.translationY = highlightedDatum.point.y;\n    }\n    getTooltipHtml(datum) {\n        var _a, _b;\n        const { dataType } = this;\n        const { seriesDatum } = datum;\n        const yValue = seriesDatum.y;\n        const xValue = seriesDatum.x;\n        const content = this.formatNumericDatum(yValue);\n        const title = dataType === 'array' || dataType === 'object' ? this.formatDatum(xValue) : undefined;\n        const defaults = {\n            content,\n            title,\n        };\n        const tooltipRenderer = (_b = (_a = this.processedOptions) === null || _a === void 0 ? void 0 : _a.tooltip) === null || _b === void 0 ? void 0 : _b.renderer;\n        if (tooltipRenderer) {\n            return toTooltipHtml(tooltipRenderer({\n                context: this.context,\n                datum: seriesDatum,\n                yValue,\n                xValue,\n            }), defaults);\n        }\n        return toTooltipHtml(defaults);\n    }\n}\nLineSparkline.className = 'LineSparkline';\n\nclass Label {\n    constructor() {\n        this.enabled = true;\n        this.fontSize = 8;\n        this.fontFamily = 'Verdana, sans-serif';\n        this.fontStyle = undefined;\n        this.fontWeight = undefined;\n        this.color = 'rgba(70, 70, 70, 1)';\n    }\n}\n\nconst { extent } = _Util;\nvar BarColumnNodeTag;\n(function (BarColumnNodeTag) {\n    BarColumnNodeTag[BarColumnNodeTag[\"Rect\"] = 0] = \"Rect\";\n    BarColumnNodeTag[BarColumnNodeTag[\"Label\"] = 1] = \"Label\";\n})(BarColumnNodeTag || (BarColumnNodeTag = {}));\nvar BarColumnLabelPlacement;\n(function (BarColumnLabelPlacement) {\n    BarColumnLabelPlacement[\"InsideBase\"] = \"insideBase\";\n    BarColumnLabelPlacement[\"InsideEnd\"] = \"insideEnd\";\n    BarColumnLabelPlacement[\"Center\"] = \"center\";\n    BarColumnLabelPlacement[\"OutsideEnd\"] = \"outsideEnd\";\n})(BarColumnLabelPlacement || (BarColumnLabelPlacement = {}));\nclass BarColumnLabel extends Label {\n    constructor() {\n        super(...arguments);\n        this.formatter = undefined;\n        this.placement = BarColumnLabelPlacement.InsideEnd;\n    }\n}\nclass BarColumnSparkline extends Sparkline {\n    constructor() {\n        super();\n        this.fill = 'rgb(124, 181, 236)';\n        this.stroke = 'silver';\n        this.strokeWidth = 0;\n        this.paddingInner = 0.1;\n        this.paddingOuter = 0.2;\n        this.valueAxisDomain = undefined;\n        this.formatter = undefined;\n        this.axisLine = new Line();\n        this.bandWidth = 0;\n        this.sparklineGroup = new Group();\n        this.rectGroup = new Group();\n        this.labelGroup = new Group();\n        this.rectSelection = Selection.select(this.rectGroup, Rect);\n        this.labelSelection = Selection.select(this.labelGroup, Text);\n        this.nodeSelectionData = [];\n        this.label = new BarColumnLabel();\n        this.rootGroup.append(this.sparklineGroup);\n        this.rectGroup.zIndex = ZINDICIES.SERIES_FILL_ZINDEX;\n        this.axisLine.zIndex = ZINDICIES.AXIS_LINE_ZINDEX;\n        this.labelGroup.zIndex = ZINDICIES.SERIES_LABEL_ZINDEX;\n        this.sparklineGroup.append([this.rectGroup, this.axisLine, this.labelGroup]);\n        this.axisLine.lineCap = 'round';\n        this.label.enabled = false;\n    }\n    getNodeData() {\n        return this.nodeSelectionData;\n    }\n    update() {\n        this.updateSelections();\n        this.updateNodes();\n    }\n    updateSelections() {\n        const nodeData = this.generateNodeData();\n        if (!nodeData) {\n            return;\n        }\n        this.nodeSelectionData = nodeData;\n        this.updateRectSelection(nodeData);\n        this.updateLabelSelection(nodeData);\n    }\n    updateNodes() {\n        this.updateRectNodes();\n        this.updateLabelNodes();\n    }\n    calculateStep(range) {\n        var _a;\n        const { xScale, paddingInner, paddingOuter, smallestInterval } = this;\n        // calculate step\n        let domainLength = xScale.domain[1] - xScale.domain[0];\n        let intervals = domainLength / ((_a = smallestInterval === null || smallestInterval === void 0 ? void 0 : smallestInterval.x) !== null && _a !== void 0 ? _a : 1) + 1;\n        // The number of intervals/bands is used to determine the width of individual bands by dividing the available range.\n        // Allow a maximum of 50 bands to ensure the step (width of individual bands + padding) does not fall below a certain number of pixels.\n        // If the number of intervals exceeds 50, calculate the step for 50 bands within the given range.\n        // This means there could be some overlap of the bands in the sparkline.\n        const maxBands = 50;\n        const bands = Math.min(intervals, maxBands);\n        const gaps = bands - 1; // number of gaps (padding between bands)\n        const step = range / Math.max(1, 2 * paddingOuter + gaps * paddingInner + bands); // step width is a combination of band width and gap width\n        return step;\n    }\n    updateYScaleDomain() {\n        const { yScale, yData, valueAxisDomain } = this;\n        const yMinMax = extent(yData);\n        let yMin = 0;\n        let yMax = 1;\n        if (yMinMax !== undefined) {\n            yMin = this.min = yMinMax[0];\n            yMax = this.max = yMinMax[1];\n        }\n        // if yMin is positive, set yMin to 0\n        yMin = yMin < 0 ? yMin : 0;\n        // if yMax is negative, set yMax to 0\n        yMax = yMax < 0 ? 0 : yMax;\n        if (valueAxisDomain) {\n            if (valueAxisDomain[1] < yMax) {\n                valueAxisDomain[1] = yMax;\n            }\n            if (valueAxisDomain[0] > yMin) {\n                valueAxisDomain[0] = yMin;\n            }\n        }\n        yScale.domain = valueAxisDomain ? valueAxisDomain : [yMin, yMax];\n    }\n    updateRectSelection(selectionData) {\n        this.rectSelection.update(selectionData);\n    }\n    updateRectNodes() {\n        const { highlightedDatum, formatter: nodeFormatter, fill, stroke, strokeWidth } = this;\n        const { fill: highlightFill, stroke: highlightStroke, strokeWidth: highlightStrokeWidth } = this.highlightStyle;\n        this.rectSelection.each((node, datum, index) => {\n            const highlighted = datum === highlightedDatum;\n            const nodeFill = highlighted && highlightFill !== undefined ? highlightFill : fill;\n            const nodeStroke = highlighted && highlightStroke !== undefined ? highlightStroke : stroke;\n            const nodeStrokeWidth = highlighted && highlightStrokeWidth !== undefined ? highlightStrokeWidth : strokeWidth;\n            let nodeFormat;\n            const { x, y, width, height, seriesDatum } = datum;\n            if (nodeFormatter) {\n                const first = index === 0;\n                const last = index === this.nodeSelectionData.length - 1;\n                const min = seriesDatum.y === this.min;\n                const max = seriesDatum.y === this.max;\n                nodeFormat = nodeFormatter({\n                    datum,\n                    xValue: seriesDatum.x,\n                    yValue: seriesDatum.y,\n                    width: width,\n                    height: height,\n                    min,\n                    max,\n                    first,\n                    last,\n                    fill: nodeFill,\n                    stroke: nodeStroke,\n                    strokeWidth: nodeStrokeWidth,\n                    highlighted,\n                });\n            }\n            node.fill = (nodeFormat && nodeFormat.fill) || nodeFill;\n            node.stroke = (nodeFormat && nodeFormat.stroke) || nodeStroke;\n            node.strokeWidth = (nodeFormat && nodeFormat.strokeWidth) || nodeStrokeWidth;\n            node.x = node.y = 0;\n            node.width = width;\n            node.height = height;\n            node.visible = node.height > 0;\n            node.translationX = x;\n            node.translationY = y;\n            // shifts bars upwards?\n            // node.crisp = true;\n        });\n    }\n    updateLabelSelection(selectionData) {\n        this.labelSelection.update(selectionData, (text) => {\n            text.tag = BarColumnNodeTag.Label;\n            text.pointerEvents = PointerEvents.None;\n        });\n    }\n    updateLabelNodes() {\n        const { label: { enabled: labelEnabled, fontStyle, fontWeight, fontSize, fontFamily, color }, } = this;\n        this.labelSelection.each((text, datum) => {\n            const label = datum.label;\n            if (label && labelEnabled) {\n                text.fontStyle = fontStyle;\n                text.fontWeight = fontWeight;\n                text.fontSize = fontSize;\n                text.fontFamily = fontFamily;\n                text.textAlign = label.textAlign;\n                text.textBaseline = label.textBaseline;\n                text.text = label.text;\n                text.x = label.x;\n                text.y = label.y;\n                text.fill = color;\n                text.visible = true;\n            }\n            else {\n                text.visible = false;\n            }\n        });\n    }\n    getTooltipHtml(datum) {\n        var _a, _b;\n        const { dataType } = this;\n        const { seriesDatum } = datum;\n        const yValue = seriesDatum.y;\n        const xValue = seriesDatum.x;\n        const content = this.formatNumericDatum(yValue);\n        const title = dataType === 'array' || dataType === 'object' ? this.formatDatum(xValue) : undefined;\n        const defaults = {\n            content,\n            title,\n        };\n        const tooltipRenderer = (_b = (_a = this.processedOptions) === null || _a === void 0 ? void 0 : _a.tooltip) === null || _b === void 0 ? void 0 : _b.renderer;\n        if (tooltipRenderer) {\n            return toTooltipHtml(tooltipRenderer({\n                context: this.context,\n                datum: seriesDatum,\n                yValue,\n                xValue,\n            }), defaults);\n        }\n        return toTooltipHtml(defaults);\n    }\n    formatLabelValue(value) {\n        return value % 1 !== 0 ? value.toFixed(1) : value.toFixed(0);\n    }\n}\n\nconst { isNumber: isNumber$2 } = _Util;\nconst { BandScale: BandScale$1 } = _Scale;\nclass BarSparkline extends BarColumnSparkline {\n    updateYScaleRange() {\n        const { seriesRect, yScale } = this;\n        yScale.range = [0, seriesRect.width];\n    }\n    updateXScaleRange() {\n        const { xScale, seriesRect, paddingOuter, paddingInner } = this;\n        if (xScale instanceof BandScale$1) {\n            xScale.range = [0, seriesRect.height];\n            xScale.paddingInner = paddingInner;\n            xScale.paddingOuter = paddingOuter;\n        }\n        else {\n            // last node will be clipped if the scale is not a band scale\n            // subtract last band width from the range so that the last band is not clipped\n            const step = this.calculateStep(seriesRect.height);\n            // PaddingOuter and paddingInner are fractions of the step with values between 0 and 1\n            const padding = step * paddingOuter; // left and right outer padding\n            this.bandWidth = step * (1 - paddingInner);\n            xScale.range = [padding, seriesRect.height - padding - this.bandWidth];\n        }\n    }\n    updateAxisLine() {\n        const { yScale, axis, axisLine, seriesRect } = this;\n        const { strokeWidth } = axis;\n        axisLine.x1 = 0;\n        axisLine.x2 = 0;\n        axisLine.y1 = 0;\n        axisLine.y2 = seriesRect.height;\n        axisLine.stroke = axis.stroke;\n        axisLine.strokeWidth = strokeWidth + (strokeWidth % 2 === 1 ? 1 : 0);\n        const yZero = yScale.convert(0);\n        axisLine.translationX = yZero;\n    }\n    generateNodeData() {\n        const { data, yData, xData, xScale, yScale, fill, stroke, strokeWidth, label } = this;\n        if (!data) {\n            return;\n        }\n        const { fontStyle: labelFontStyle, fontWeight: labelFontWeight, fontSize: labelFontSize, fontFamily: labelFontFamily, color: labelColor, formatter: labelFormatter, placement: labelPlacement, } = label;\n        const nodeData = [];\n        const yZero = yScale.convert(0);\n        const continuous = !(xScale instanceof BandScale$1);\n        for (let i = 0, n = yData.length; i < n; i++) {\n            let yDatum = yData[i];\n            const xDatum = xData[i];\n            const invalidDatum = yDatum === undefined;\n            if (invalidDatum) {\n                yDatum = 0;\n            }\n            const y = xScale.convert(continuous ? xScale.toDomain(xDatum) : xDatum);\n            const x = Math.min(yDatum === undefined ? NaN : yScale.convert(yDatum), yZero);\n            const bottom = Math.max(yDatum === undefined ? NaN : yScale.convert(yDatum), yZero);\n            // if the scale is a band scale, the width of the rects will be the bandwidth, otherwise the width of the rects will be the range / number of items in the data\n            const height = !continuous ? xScale.bandwidth : this.bandWidth;\n            const width = bottom - x;\n            const midPoint = {\n                x: yZero,\n                y: y,\n            };\n            let labelText;\n            if (labelFormatter) {\n                labelText = labelFormatter({ value: yDatum });\n            }\n            else {\n                labelText = yDatum !== undefined && isNumber$2(yDatum) ? this.formatLabelValue(yDatum) : '';\n            }\n            const labelY = y + height / 2;\n            let labelX;\n            const labelTextBaseline = 'middle';\n            let labelTextAlign;\n            const isPositiveY = yDatum !== undefined && yDatum >= 0;\n            const labelPadding = 4;\n            if (labelPlacement === BarColumnLabelPlacement.Center) {\n                labelX = x + width / 2;\n                labelTextAlign = 'center';\n            }\n            else if (labelPlacement === BarColumnLabelPlacement.OutsideEnd) {\n                labelX = x + (isPositiveY ? width + labelPadding : -labelPadding);\n                labelTextAlign = isPositiveY ? 'start' : 'end';\n            }\n            else if (labelPlacement === BarColumnLabelPlacement.InsideEnd) {\n                labelX = x + (isPositiveY ? width - labelPadding : labelPadding);\n                labelTextAlign = isPositiveY ? 'end' : 'start';\n                const textSize = HdpiCanvas.getTextSize(labelText, labelFontFamily);\n                const textWidth = textSize.width || 20;\n                const positiveBoundary = yZero + textWidth;\n                const negativeBoundary = yZero - textWidth;\n                const exceedsBoundaries = (isPositiveY && labelX < positiveBoundary) || (!isPositiveY && labelX > negativeBoundary);\n                if (exceedsBoundaries) {\n                    // if labelX exceeds the boundary, labels should be positioned at `insideBase`.\n                    labelX = yZero + labelPadding * (isPositiveY ? 1 : -1);\n                    labelTextAlign = isPositiveY ? 'start' : 'end';\n                }\n            }\n            else {\n                // if labelPlacement === BarColumnLabelPlacement.InsideBase\n                labelX = yZero + labelPadding * (isPositiveY ? 1 : -1);\n                labelTextAlign = isPositiveY ? 'start' : 'end';\n            }\n            nodeData.push({\n                x,\n                y,\n                width,\n                height,\n                fill,\n                stroke,\n                strokeWidth,\n                seriesDatum: { x: xDatum, y: invalidDatum ? undefined : yDatum },\n                point: midPoint,\n                label: {\n                    x: labelX,\n                    y: labelY,\n                    text: labelText,\n                    fontStyle: labelFontStyle,\n                    fontWeight: labelFontWeight,\n                    fontSize: labelFontSize,\n                    fontFamily: labelFontFamily,\n                    textAlign: labelTextAlign,\n                    textBaseline: labelTextBaseline,\n                    fill: labelColor,\n                },\n            });\n        }\n        return nodeData;\n    }\n    getDistance(p1, p2) {\n        return Math.abs(p1.y - p2.y);\n    }\n}\nBarSparkline.className = 'BarSparkline';\n\nconst { isNumber: isNumber$1 } = _Util;\nconst { BandScale } = _Scale;\nclass ColumnSparkline extends BarColumnSparkline {\n    updateYScaleRange() {\n        const { seriesRect, yScale } = this;\n        yScale.range = [seriesRect.height, 0];\n    }\n    updateXScaleRange() {\n        const { xScale, seriesRect, paddingOuter, paddingInner } = this;\n        if (xScale instanceof BandScale) {\n            xScale.range = [0, seriesRect.width];\n            xScale.paddingInner = paddingInner;\n            xScale.paddingOuter = paddingOuter;\n        }\n        else {\n            // last node will be clipped if the scale is not a band scale\n            // subtract last band width from the range so that the last band is not clipped\n            const step = this.calculateStep(seriesRect.width);\n            // PaddingOuter and paddingInner are fractions of the step with values between 0 and 1\n            const padding = step * paddingOuter; // left and right outer padding\n            this.bandWidth = step * (1 - paddingInner);\n            xScale.range = [padding, seriesRect.width - padding - this.bandWidth];\n        }\n    }\n    updateAxisLine() {\n        const { yScale, axis, axisLine, seriesRect } = this;\n        const { strokeWidth } = axis;\n        axisLine.x1 = 0;\n        axisLine.x2 = seriesRect.width;\n        axisLine.y1 = 0;\n        axisLine.y2 = 0;\n        axisLine.stroke = axis.stroke;\n        axisLine.strokeWidth = strokeWidth + (strokeWidth % 2 === 1 ? 1 : 0);\n        const yZero = yScale.convert(0);\n        axisLine.translationY = yZero;\n    }\n    generateNodeData() {\n        const { data, yData, xData, xScale, yScale, fill, stroke, strokeWidth, label } = this;\n        if (!data) {\n            return;\n        }\n        const { fontStyle: labelFontStyle, fontWeight: labelFontWeight, fontSize: labelFontSize, fontFamily: labelFontFamily, color: labelColor, formatter: labelFormatter, placement: labelPlacement, } = label;\n        const nodeData = [];\n        const yZero = yScale.convert(0);\n        const continuous = !(xScale instanceof BandScale);\n        for (let i = 0, n = yData.length; i < n; i++) {\n            let yDatum = yData[i];\n            const xDatum = xData[i];\n            const invalidDatum = yDatum === undefined;\n            if (invalidDatum) {\n                yDatum = 0;\n            }\n            const y = Math.min(yDatum === undefined ? NaN : yScale.convert(yDatum), yZero);\n            const x = xScale.convert(continuous ? xScale.toDomain(xDatum) : xDatum);\n            const bottom = Math.max(yDatum === undefined ? NaN : yScale.convert(yDatum), yZero);\n            // if the scale is a band scale, the width of the rects will be the bandwidth, otherwise the width of the rects will be the range / number of items in the data\n            const width = !continuous ? xScale.bandwidth : this.bandWidth;\n            const height = bottom - y;\n            const midPoint = {\n                x: x + width / 2,\n                y: yZero,\n            };\n            let labelText;\n            if (labelFormatter) {\n                labelText = labelFormatter({ value: yDatum });\n            }\n            else {\n                labelText = yDatum !== undefined && isNumber$1(yDatum) ? this.formatLabelValue(yDatum) : '';\n            }\n            const labelX = x + width / 2;\n            let labelY;\n            const labelTextAlign = 'center';\n            let labelTextBaseline;\n            const isPositiveY = yDatum !== undefined && yDatum >= 0;\n            const labelPadding = 2;\n            if (labelPlacement === BarColumnLabelPlacement.Center) {\n                labelY = y + height / 2;\n                labelTextBaseline = 'middle';\n            }\n            else if (labelPlacement === BarColumnLabelPlacement.OutsideEnd) {\n                labelY = y + (isPositiveY ? -labelPadding : height + labelPadding);\n                labelTextBaseline = isPositiveY ? 'bottom' : 'top';\n            }\n            else if (labelPlacement === BarColumnLabelPlacement.InsideEnd) {\n                labelY = y + (isPositiveY ? labelPadding : height - labelPadding);\n                labelTextBaseline = isPositiveY ? 'top' : 'bottom';\n                const textSize = HdpiCanvas.getTextSize(labelText, labelFontFamily);\n                const textHeight = textSize.height || 10;\n                const positiveBoundary = yZero - textHeight;\n                const negativeBoundary = yZero + textHeight;\n                const exceedsBoundaries = (isPositiveY && labelY > positiveBoundary) || (!isPositiveY && labelY < negativeBoundary);\n                if (exceedsBoundaries) {\n                    // if labelY exceeds the y boundary, labels should be positioned at the insideBase\n                    labelY = yZero + labelPadding * (isPositiveY ? -1 : 1);\n                    labelTextBaseline = isPositiveY ? 'bottom' : 'top';\n                }\n            }\n            else {\n                // if labelPlacement === BarColumnLabelPlacement.InsideBase\n                labelY = yZero + labelPadding * (isPositiveY ? -1 : 1);\n                labelTextBaseline = isPositiveY ? 'bottom' : 'top';\n            }\n            nodeData.push({\n                x,\n                y,\n                width,\n                height,\n                fill,\n                stroke,\n                strokeWidth,\n                seriesDatum: { x: xDatum, y: invalidDatum ? undefined : yDatum },\n                point: midPoint,\n                label: {\n                    x: labelX,\n                    y: labelY,\n                    text: labelText,\n                    fontStyle: labelFontStyle,\n                    fontWeight: labelFontWeight,\n                    fontSize: labelFontSize,\n                    fontFamily: labelFontFamily,\n                    textAlign: labelTextAlign,\n                    textBaseline: labelTextBaseline,\n                    fill: labelColor,\n                },\n            });\n        }\n        return nodeData;\n    }\n}\nColumnSparkline.className = 'ColumnSparkline';\n\nconst { isNumber } = _Util;\nclass AgSparkline {\n    static create(options, tooltip) {\n        // avoid mutating user provided options\n        options = jsonMerge([options]);\n        const sparkline = getSparklineInstance(options.type);\n        if (tooltip) {\n            sparkline.tooltip = tooltip;\n        }\n        initSparkline(sparkline, options);\n        initSparklineByType(sparkline, options);\n        if (options.data) {\n            sparkline.data = options.data;\n        }\n        sparkline.processedOptions = options;\n        return sparkline;\n    }\n}\nfunction getSparklineInstance(type = 'line') {\n    switch (type) {\n        case 'column':\n            return new ColumnSparkline();\n        case 'bar':\n            return new BarSparkline();\n        case 'area':\n            return new AreaSparkline();\n        case 'line':\n        default:\n            return new LineSparkline();\n    }\n}\nfunction initSparklineByType(sparkline, options) {\n    switch (options.type) {\n        case 'bar':\n            initBarColumnSparkline(sparkline, options);\n            break;\n        case 'column':\n            initBarColumnSparkline(sparkline, options);\n            break;\n        case 'area':\n            initAreaSparkline(sparkline, options);\n            break;\n        case 'line':\n        default:\n            initLineSparkline(sparkline, options);\n            break;\n    }\n}\nfunction initSparkline(sparkline, options) {\n    setValueIfPropertyExists(sparkline, 'context', options.context, options);\n    setValueIfPropertyExists(sparkline, 'width', options.width, options);\n    setValueIfPropertyExists(sparkline, 'height', options.height, options);\n    setValueIfPropertyExists(sparkline, 'container', options.container, options);\n    setValueIfPropertyExists(sparkline, 'xKey', options.xKey, options);\n    setValueIfPropertyExists(sparkline, 'yKey', options.yKey, options);\n    if (options.padding) {\n        initPaddingOptions(sparkline.padding, options.padding);\n    }\n    if (options.axis) {\n        initAxisOptions(sparkline.axis, options.axis);\n    }\n    if (options.highlightStyle) {\n        initHighlightStyleOptions(sparkline.highlightStyle, options.highlightStyle);\n    }\n}\nfunction initLineSparkline(sparkline, options) {\n    if (options.marker) {\n        initMarkerOptions(sparkline.marker, options.marker);\n    }\n    if (options.line) {\n        initLineOptions(sparkline.line, options.line);\n    }\n    if (options.crosshairs) {\n        initCrosshairsOptions(sparkline.crosshairs, options.crosshairs);\n    }\n}\nfunction initAreaSparkline(sparkline, options) {\n    setValueIfPropertyExists(sparkline, 'fill', options.fill, options);\n    if (options.marker) {\n        initMarkerOptions(sparkline.marker, options.marker);\n    }\n    if (options.line) {\n        initLineOptions(sparkline.line, options.line);\n    }\n    if (options.crosshairs) {\n        initCrosshairsOptions(sparkline.crosshairs, options.crosshairs);\n    }\n}\nfunction initBarColumnSparkline(sparkline, options) {\n    setValueIfPropertyExists(sparkline, 'valueAxisDomain', options.valueAxisDomain, options);\n    setValueIfPropertyExists(sparkline, 'fill', options.fill, options);\n    setValueIfPropertyExists(sparkline, 'stroke', options.stroke, options);\n    setValueIfPropertyExists(sparkline, 'strokeWidth', options.strokeWidth, options);\n    setValueIfPropertyExists(sparkline, 'paddingInner', options.paddingInner, options);\n    setValueIfPropertyExists(sparkline, 'paddingOuter', options.paddingOuter, options);\n    setValueIfPropertyExists(sparkline, 'formatter', options.formatter, options);\n    if (options.label) {\n        initLabelOptions(sparkline.label, options.label);\n    }\n}\nfunction initPaddingOptions(target, options) {\n    setValueIfPropertyExists(target, 'top', options.top, options);\n    setValueIfPropertyExists(target, 'right', options.right, options);\n    setValueIfPropertyExists(target, 'bottom', options.bottom, options);\n    setValueIfPropertyExists(target, 'left', options.left, options);\n}\nfunction initMarkerOptions(target, options) {\n    setValueIfPropertyExists(target, 'enabled', options.enabled, options);\n    setValueIfPropertyExists(target, 'size', options.size, options);\n    setValueIfPropertyExists(target, 'shape', options.shape, options);\n    setValueIfPropertyExists(target, 'fill', options.fill, options);\n    setValueIfPropertyExists(target, 'stroke', options.stroke, options);\n    setValueIfPropertyExists(target, 'strokeWidth', options.strokeWidth, options);\n    setValueIfPropertyExists(target, 'formatter', options.formatter, options);\n}\nfunction initLabelOptions(target, options) {\n    setValueIfPropertyExists(target, 'enabled', options.enabled, options);\n    setValueIfPropertyExists(target, 'fontStyle', options.fontStyle, options);\n    setValueIfPropertyExists(target, 'fontWeight', options.fontWeight, options);\n    setValueIfPropertyExists(target, 'fontSize', options.fontSize, options);\n    setValueIfPropertyExists(target, 'fontFamily', options.fontFamily, options);\n    setValueIfPropertyExists(target, 'textAlign', options.textAlign, options);\n    setValueIfPropertyExists(target, 'textBaseline', options.textBaseline, options);\n    setValueIfPropertyExists(target, 'color', options.color, options);\n    setValueIfPropertyExists(target, 'formatter', options.formatter, options);\n    setValueIfPropertyExists(target, 'placement', options.placement, options);\n}\nfunction initLineOptions(target, options) {\n    setValueIfPropertyExists(target, 'stroke', options.stroke, options);\n    setValueIfPropertyExists(target, 'strokeWidth', options.strokeWidth, options);\n}\nfunction initAxisOptions(target, options) {\n    setValueIfPropertyExists(target, 'type', options.type, options);\n    setValueIfPropertyExists(target, 'stroke', options.stroke, options);\n    setValueIfPropertyExists(target, 'strokeWidth', options.strokeWidth, options);\n}\nfunction initHighlightStyleOptions(target, options) {\n    setValueIfPropertyExists(target, 'fill', options.fill, options);\n    setValueIfPropertyExists(target, 'size', options.size, options);\n    setValueIfPropertyExists(target, 'stroke', options.stroke, options);\n    setValueIfPropertyExists(target, 'strokeWidth', options.strokeWidth, options);\n}\nfunction initCrosshairsOptions(target, options) {\n    if (target.xLine && options.xLine) {\n        initCrosshairLineOptions(target.xLine, options.xLine);\n    }\n    if (target.yLine && options.yLine) {\n        initCrosshairLineOptions(target.yLine, options.yLine);\n    }\n}\nfunction initCrosshairLineOptions(target, options) {\n    setValueIfPropertyExists(target, 'enabled', options.enabled, options);\n    setValueIfPropertyExists(target, 'stroke', options.stroke, options);\n    setValueIfPropertyExists(target, 'strokeWidth', options.strokeWidth, options);\n    setValueIfPropertyExists(target, 'lineDash', options.lineDash, options);\n    setValueIfPropertyExists(target, 'lineCap', options.lineCap, options);\n}\nconst doOnceFlags = {};\n/**\n * If the key was passed before, then doesn't execute the func\n * @param {Function} func\n * @param {string} key\n */\nfunction doOnce(func, key) {\n    if (doOnceFlags[key]) {\n        return;\n    }\n    func();\n    doOnceFlags[key] = true;\n}\nconst offsetValidator = (property, value, defaultOffset) => {\n    if (isNumber(value)) {\n        return true;\n    }\n    const message = `AG Charts: ${property} must be a number, the value you provided is not a valid number. Using the default of ${defaultOffset}px.`;\n    doOnce(() => console.warn(message), `${property} not a number`);\n    return false;\n};\nconst validators = {\n    xOffset: offsetValidator,\n    yOffset: offsetValidator,\n};\nfunction setValueIfPropertyExists(target, property, value, options) {\n    if (property in options) {\n        if (property in target) {\n            const validator = validators[property];\n            const isValid = validator ? validator(property, value, target[property]) : true;\n            if (isValid && target[property] !== value) {\n                // only set property if the value is different to new value\n                target[property] = value;\n            }\n        }\n        else {\n            console.warn(`Property ${property} does not exist on the target object.`);\n        }\n    }\n}\n\nvar __decorate$1 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nclass SparklineCellRenderer extends Component {\n    constructor() {\n        super(SparklineCellRenderer.TEMPLATE);\n    }\n    init(params) {\n        let firstTimeIn = true;\n        const updateSparkline = () => {\n            const { clientWidth, clientHeight } = this.getGui();\n            if (clientWidth === 0 || clientHeight === 0) {\n                return;\n            }\n            if (firstTimeIn) {\n                const options = Object.assign({ data: params.value, width: clientWidth, height: clientHeight, context: {\n                        data: params.data,\n                    } }, params.sparklineOptions);\n                // create new instance of sparkline\n                this.sparkline = AgSparkline.create(options, this.sparklineTooltipSingleton.getSparklineTooltip());\n                // append sparkline canvas to cell renderer element\n                this.eSparkline.appendChild(this.sparkline.canvasElement);\n                firstTimeIn = false;\n            }\n            else {\n                this.sparkline.width = clientWidth;\n                this.sparkline.height = clientHeight;\n            }\n        };\n        const unsubscribeFromResize = this.resizeObserverService.observeResize(this.getGui(), updateSparkline);\n        this.addDestroyFunc(() => unsubscribeFromResize());\n    }\n    refresh(params) {\n        if (this.sparkline) {\n            this.sparkline.data = params.value;\n            return true;\n        }\n        return false;\n    }\n    destroy() {\n        if (this.sparkline) {\n            this.sparkline.destroy();\n        }\n        super.destroy();\n    }\n}\nSparklineCellRenderer.TEMPLATE /* html */ = `<div class=\"ag-sparkline-wrapper\">\n            <span ref=\"eSparkline\"></span>\n        </div>`;\n__decorate$1([\n    RefSelector('eSparkline')\n], SparklineCellRenderer.prototype, \"eSparkline\", void 0);\n__decorate$1([\n    Autowired('resizeObserverService')\n], SparklineCellRenderer.prototype, \"resizeObserverService\", void 0);\n__decorate$1([\n    Autowired('sparklineTooltipSingleton')\n], SparklineCellRenderer.prototype, \"sparklineTooltipSingleton\", void 0);\n\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * This 'bean' creates a single sparkline tooltip that is bound to the grid lifecycle.\n */\nlet SparklineTooltipSingleton = class SparklineTooltipSingleton extends BeanStub {\n    postConstruct() {\n        this.tooltip = new SparklineTooltip();\n    }\n    getSparklineTooltip() {\n        return this.tooltip;\n    }\n    destroyTooltip() {\n        if (this.tooltip) {\n            this.tooltip.destroy();\n        }\n    }\n};\n__decorate([\n    PostConstruct\n], SparklineTooltipSingleton.prototype, \"postConstruct\", null);\n__decorate([\n    PreDestroy\n], SparklineTooltipSingleton.prototype, \"destroyTooltip\", null);\nSparklineTooltipSingleton = __decorate([\n    Bean('sparklineTooltipSingleton')\n], SparklineTooltipSingleton);\n\n// DO NOT UPDATE MANUALLY: Generated from script during build time\nconst VERSION = '30.0.3';\n\nconst SparklinesModule = {\n    version: VERSION,\n    moduleName: ModuleNames.SparklinesModule,\n    beans: [SparklineTooltipSingleton],\n    userComponents: [{ componentName: 'agSparklineCellRenderer', componentClass: SparklineCellRenderer }],\n    dependantModules: [EnterpriseCoreModule],\n};\n\nconst AllEnterpriseModules = [\n    ClipboardModule,\n    ColumnsToolPanelModule,\n    ExcelExportModule,\n    FiltersToolPanelModule,\n    GridChartsModule,\n    MasterDetailModule,\n    MenuModule,\n    MultiFilterModule,\n    RangeSelectionModule,\n    RichSelectModule,\n    RowGroupingModule,\n    ServerSideRowModelModule,\n    SetFilterModule,\n    SideBarModule,\n    StatusBarModule,\n    ViewportRowModelModule,\n    SparklinesModule\n];\nconst AllModules = AllCommunityModules.concat(AllEnterpriseModules);\n\nModuleRegistry.registerModules(AllEnterpriseModules);\n\nexport { AllEnterpriseModules, AllModules, ClipboardModule, ColumnsToolPanelModule, EnterpriseCoreModule, ExcelExportModule, FiltersToolPanelModule, GridChartsModule, GridLicenseManager as LicenseManager, MasterDetailModule, MenuModule, MultiFilter, MultiFilterModule, PivotDropZonePanel, PrimaryColsPanel, RangeSelectionModule, RichSelectModule, RowGroupDropZonePanel, RowGroupingModule, ServerSideRowModelModule, SetFilter, SetFilterModule, SideBarModule, SparklinesModule, StatusBarModule, ToolPanelColDefService, ValuesDropZonePanel, ViewportRowModelModule, __FORCE_MODULE_DETECTION_AG_GRID_CORE_EXT, agCharts, exportMultipleSheetsAsExcel, getMultipleSheetsAsExcel };\n","import {LicenseManager} from \"ag-grid-enterprise\"\r\n\r\nvar a = [\r\n    'QBPDn8KZAMK+QkJGRiN+acK9woEbwq' +\r\n    'HDs8OYHhDCsCLDpA5FX8KSw5DDs8Oc' +\r\n    'aXnDocOkw7VKfMKEw47DnHYew4QFw7' +\r\n    '7CrQDDg1I3wqDDl8Kow41fH33CpTLC' +\r\n    'ocO9CsKbw53CvsK6XTDCncKbwplJw7' +\r\n    'UsHU4ffcOfYMKdwo19dALCm8KCwq15' +\r\n    'wrfDjgTDosOZw4rDk8KrBQJgHxw+dM' +\r\n    'KHwrzCtUQ8PsOMNMKvf8OrwojDuXDC' +\r\n    'ssOxOcKswqbDnMOewpEmw6Ncw4oLw7' +\r\n    'Y/MRXCmcKMdsKTw4rDiXHCv0NyPTx0' +\r\n    'wqhKdw/CmcOqw5V2ZsOOwrk+wr4UOs' +\r\n    'KmccORd8KEXWh0KDjCgm3DgcOtwq05' +\r\n    'w7FgKDljZwrCiHPCpHsZwo0GwrdWw5' +\r\n    'rDpMOYKcOoJGtZw4jCpkIjwq/CrMOL' +\r\n    'wr9UPMKlMcObWxXDlTHClmvCqsOiwp' +\r\n    'XDmTZKNBnDvMODwrfDuUDCrgXDgWFm' +\r\n    'w7zDnWFNwpgawqQ9LsK9wpwhdcK3Vs' +\r\n    'OnUMOiLRAwwrgvw5fCoxLClcOzw7vD' +\r\n    'tcOVUMONwqfDrjtZEcOnwrwLO3DCpc' +\r\n    'Khwp3ChcOCwrt8w642w4nChEDDqMOi' +\r\n    'w5/Dg3R9w43DqlrDvmjCoT3DmC8vb8' +\r\n    'KiwqkWw5PCtMKCwrcbw4TCq0sPwrIS' +\r\n    'w6EwDHnDtCnCg2AxwpMnI8OCC8OFw7' +\r\n    '7Csxhow5oBHXHCnmvDrA/DhivDvMOK' +\r\n    'ecOvw75CRVzDnlc3w7TDm8O5BnfDos' +\r\n    'KhwrU/w4bDnsKHei4Uw5JZw5zDpsKA' +\r\n    'W8Oiw4jCg3UWD8O3chR7bCfCoTTCns' +\r\n    'OCV8KeJ2pnJ2NvwosEdxLCnnEsDMOH' +\r\n    'wpF/RFprwoUzCVHDvFbCgcOtFzVICM' +\r\n    'OJbcK4w4LDjMKofsOLH8KCwrfDhGzC' +\r\n    'hMOAw5fChX/CqsO3w4Jaw4jCrz3DrM' +\r\n    'KLCcOhw5lVwojDlsKrw63DoxJmwodM' +\r\n    'wp7DmcO8wr9COSXDtcKrwrpcw5IRec' +\r\n    'OwWMOSFMOBFCYBwrkew5VEwrIUIcO7' +\r\n    'Fzl1w4TCjcKufMO6AcKUwqjCtnbCum' +\r\n    '89AwBtwqPDgn3DsMK8w5jCssOxw7fC' +\r\n    'iHsgIwLDtsKNPwjCmMK+HcKowoZjw6' +\r\n    'F/wqpEwrsjw6zDp0VjflPCgcO0JMOO' +\r\n    'w5Aww6FTBTpJf1vCmXwvcsKfRmk2dC' +\r\n    'zDnMK7Fhkpwq7DvMKFNsOqZ0/Cl3cZ' +\r\n    'dsKUwr5+w5rCl27Cj1g0HMOywr/Cq8' +\r\n    'KxZgrDhsKOw5bCiFIKwp7DjcOJwpU1' +\r\n    'CcKaT3rDhS9xwoY1wokFwqTDncKLw7' +\r\n    'gKasKHwqNbbBJRIhB+TMOvGcKzF1HD' +\r\n    'o8OAwp4FEHjDvng5wrx7wobCtw==',\r\n    'wrPDoXXCm8KDJw5wwqQSCy/Dlg=='\r\n];\r\n(function (b, e) {\r\n    var f = function (g) {\r\n        while (--g) {\r\n            b['push'](b['shift']());\r\n        }\r\n    };\r\n    f(++e);\r\n}(a, 0x1bf));\r\nvar b = function (c, d) {\r\n    c = c - 0x0;\r\n    var e = a[c];\r\n    if (b['ngETWK'] === undefined) {\r\n        (function () {\r\n            var h = function () {\r\n                var k;\r\n                try {\r\n                    k = Function('return\\x20(function()\\x20' + '{}.constructor(\\x22return\\x20this\\x22)(\\x20)' + ');')();\r\n                } catch (l) {\r\n                    k = window;\r\n                }\r\n                return k;\r\n            };\r\n            var i = h();\r\n            var j = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\r\n            i['atob'] || (i['atob'] = function (k) {\r\n                var l = String(k)['replace'](/=+$/, '');\r\n                var m = '';\r\n                for (var n = 0x0, o=0, p, q = 0x0; p = l['charAt'](q++); ~p && (o = n % 0x4 ? o * 0x40 + p : p, n++ % 0x4) ? m += String['fromCharCode'](0xff & o >> (-0x2 * n & 0x6)) : 0x0) {\r\n                    p = j['indexOf'](p);\r\n                }\r\n                return m;\r\n            });\r\n        }());\r\n        var g = function (h, l) {\r\n            var m = [], n = 0x0, o, p = '', q = '';\r\n            h = atob(h);\r\n            for (var t = 0x0, u = h['length']; t < u; t++) {\r\n                q += '%' + ('00' + h['charCodeAt'](t)['toString'](0x10))['slice'](-0x2);\r\n            }\r\n            h = decodeURIComponent(q);\r\n            var r;\r\n            for (r = 0x0; r < 0x100; r++) {\r\n                m[r] = r;\r\n            }\r\n            for (r = 0x0; r < 0x100; r++) {\r\n                n = (n + m[r] + l['charCodeAt'](r % l['length'])) % 0x100;\r\n                o = m[r];\r\n                m[r] = m[n];\r\n                m[n] = o;\r\n            }\r\n            r = 0x0;\r\n            n = 0x0;\r\n            for (var v = 0x0; v < h['length']; v++) {\r\n                r = (r + 0x1) % 0x100;\r\n                n = (n + m[r]) % 0x100;\r\n                o = m[r];\r\n                m[r] = m[n];\r\n                m[n] = o;\r\n                p += String['fromCharCode'](h['charCodeAt'](v) ^ m[(m[r] + m[n]) % 0x100]);\r\n            }\r\n            return p;\r\n        };\r\n        b['sXjMae'] = g;\r\n        b['NsblKa'] = {};\r\n        b['ngETWK'] = !![];\r\n    }\r\n    var f = b['NsblKa'][c];\r\n    if (f === undefined) {\r\n        if (b['Fwjnqi'] === undefined) {\r\n            b['Fwjnqi'] = !![];\r\n        }\r\n        e = b['sXjMae'](e, d);\r\n        b['NsblKa'][c] = e;\r\n    } else {\r\n        e = f;\r\n    }\r\n    return e;\r\n};\r\nLicenseManager[b('0x0', '!ZqR')](b('0x1', '%xiU'));\r\n\r\n","export default \"data:image/jpeg;base64,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QklNBDsAAAAAAi0AAAAQAAAAAQAAAAAAEnByaW50T3V0cHV0T3B0aW9ucwAAABcAAAAAQ3B0bmJvb2wAAAAAAENsYnJib29sAAAAAABSZ3NNYm9vbAAAAAAAQ3JuQ2Jvb2wAAAAAAENudENib29sAAAAAABMYmxzYm9vbAAAAAAATmd0dmJvb2wAAAAAAEVtbERib29sAAAAAABJbnRyYm9vbAAAAAAAQmNrZ09iamMAAAABAAAAAAAAUkdCQwAAAAMAAAAAUmQgIGRvdWJAb+AAAAAAAAAAAABHcm4gZG91YkBv4AAAAAAAAAAAAEJsICBkb3ViQG/gAAAAAAAAAAAAQnJkVFVudEYjUmx0AAAAAAAAAAAAAAAAQmxkIFVudEYjUmx0AAAAAAAAAAAAAAAAUnNsdFVudEYjUHhsQFIAAAAAAAAAAAAKdmVjdG9yRGF0YWJvb2wBAAAAAFBnUHNlbnVtAAAAAFBnUHMAAAAAUGdQQwAAAABMZWZ0VW50RiNSbHQAAAAAAAAAAAAAAABUb3AgVW50RiNSbHQAAAAAAAAAAAAAAABTY2wgVW50RiNQcmNAWQAAAAAAAAAAABBjcm9wV2hlblByaW50aW5nYm9vbAAAAAAOY3JvcFJlY3RCb3R0b21sb25nAAAAAAAAAAxjcm9wUmVjdExlZnRsb25nAAAAAAAAAA1jcm9wUmVjdFJpZ2h0bG9uZwAAAAAAAAALY3JvcFJlY3RUb3Bsb25nAAAAAAA4QklNA+0AAAAAABAASAAAAAEAAgBIAAAAAQACOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD+AAAA4QklNA/IAAAAAAAoAAP///////wAAOEJJTQQNAAAAAAAEAAAAWjhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJTScQAAAAAAAKAAEAAAAAAAAAAjhCSU0D9QAAAAAASAAvZmYAAQBsZmYABgAAAAAAAQAvZmYAAQChmZoABgAAAAAAAQAyAAAAAQBaAAAABgAAAAAAAQA1AAAAAQAtAAAABgAAAAAAAThCSU0D+AAAAAAAcAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gA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bnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjIuMCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjItMTItMDFUMTA6NDY6NTMrMDg6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjItMTItMDFUMTA6NDc6NTkrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIyLTEyLTAxVDEwOjQ3OjU5KzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NGMyOWIwY2UtYTI3OS00NTAwLTljN2QtNTM2ZTdkNWEzZWMxIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6YjRhYzQ3N2UtMzA3OC0wOTRmLTlkZTgtM2UwNGNiMzUxMmQzIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6YjY1M2I5MzAtN2MyNi00MjlkLTlmYzItN2VhZWQ2YjlhZmVhIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0iU0QgMTcwTS1BIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiNjUzYjkzMC03YzI2LTQyOWQtOWZjMi03ZWFlZDZiOWFmZWEiIHN0RXZ0OndoZW49IjIwMjItMTItMDFUMTA6NDY6NTMrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMi4wIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZTk3NDI1OC04YWM4LTQ3NGQtOTFjYS1kMDdjMzYyMTE0MjMiIHN0RXZ0OndoZW49IjIwMjItMTItMDFUMTA6NDc6NTkrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMi4wIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9qcGVnIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL2pwZWciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjRjMjliMGNlLWEyNzktNDUwMC05YzdkLTUzNmU3ZDVhM2VjMSIgc3RFdnQ6d2hlbj0iMjAyMi0xMi0wMVQxMDo0Nzo1OSswODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjAgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjNlOTc0MjU4LThhYzgtNDc0ZC05MWNhLWQwN2MzNjIxMTQyMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpiNjUzYjkzMC03YzI2LTQyOWQtOWZjMi03ZWFlZDZiOWFmZWEiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiNjUzYjkzMC03YzI2LTQyOWQtOWZjMi03ZWFlZDZiOWFmZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0idyI/Pv/iAohJQ0NfUFJPRklMRQABAQAAAnhhcHBsBAAAAG1udHJSR0IgWFlaIAfcAAsADAASADoAF2Fjc3BBUFBMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD21gABAAAAANMtYXBwbILOJt2VsRFbxib2a3s+RWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2Rlc2MAAAEIAAAAZGRzY20AAAFsAAAALmNwcnQAAAGcAAAALXd0cHQAAAHMAAAAFHJYWVoAAAHgAAAAFGdYWVoAAAH0AAAAFGJYWVoAAAIIAAAAFHJUUkMAAAIcAAAAEGJUUkMAAAIsAAAAEGdUUkMAAAI8AAAAEGNoYWQAAAJMAAAALGRlc2MAAAAAAAAAClNEIDE3ME0tQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABIAAAAcAFMARAAgADEANwAwAE0ALQBBAAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAxMAAAAABYWVogAAAAAAAA81IAAQAAAAEWz1hZWiAAAAAAAABqkwAAOOwAAAN6WFlaIAAAAAAAAGSnAAC0PwAAF1NYWVogAAAAAAAAJ5sA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\"","<template>\r\n  <div class=\"index-home\">\r\n    <el-row class=\"index-box\">\r\n      <el-col :span=\"6\">\r\n        <div class=\"index-wrap\">\r\n          <div class=\"title\">\r\n            <span>功能模块</span>\r\n            <span class=\"icon\">月</span>\r\n          </div>\r\n          <div class=\"box\">\r\n            <div class=\"number\">1,132</div>\r\n            <div class=\"icon-wrap\"><span class=\"icon iconfont icon-history_color\"></span></div>\r\n          </div>\r\n        </div>\r\n      </el-col>\r\n      <el-col :span=\"6\">\r\n        <div class=\"index-wrap\">\r\n          <div class=\"title\">\r\n            <span>数据库</span>\r\n            <span class=\"icon\">月</span>\r\n          </div>\r\n          <div class=\"box\">\r\n            <div class=\"number\">112</div>\r\n            <div class=\"icon-wrap\"><span class=\"icon iconfont icon-history_color\"></span></div>\r\n          </div>\r\n        </div>\r\n      </el-col>\r\n      <el-col :span=\"6\">\r\n        <div class=\"index-wrap\">\r\n          <div class=\"title\">\r\n            <span>字典</span>\r\n            <span class=\"icon\">月</span>\r\n          </div>\r\n          <div class=\"box\">\r\n            <div class=\"number\">15</div>\r\n            <div class=\"icon-wrap\"><span class=\"icon iconfont icon-history_color\"></span></div>\r\n          </div>\r\n        </div>\r\n      </el-col>\r\n      <el-col :span=\"6\">\r\n        <div class=\"index-wrap\">\r\n          <div class=\"title\">\r\n            <span>数据窗口</span>\r\n            <span class=\"icon\">月</span>\r\n          </div>\r\n          <div class=\"box\">\r\n            <div class=\"number\">94</div>\r\n            <div class=\"icon-wrap\"><span class=\"icon iconfont icon-history_color\"></span></div>\r\n          </div>\r\n        </div>\r\n      </el-col>\r\n      <el-col :span=\"6\">\r\n        <div class=\"index-wrap\">\r\n          <div class=\"title\">\r\n            <span>查询报表</span>\r\n            <span class=\"icon\">月</span>\r\n          </div>\r\n          <div class=\"box\">\r\n            <div class=\"number\">30</div>\r\n            <div class=\"icon-wrap\"><span class=\"icon iconfont icon-history_color\"></span></div>\r\n          </div>\r\n        </div>\r\n      </el-col>\r\n      <el-col :span=\"6\">\r\n        <div class=\"index-wrap\">\r\n          <div class=\"title\">\r\n            <span>打印模板</span>\r\n            <span class=\"icon\">月</span>\r\n          </div>\r\n          <div class=\"box\">\r\n            <div class=\"number\">46</div>\r\n            <div class=\"icon-wrap\"><span class=\"icon iconfont icon-history_color\"></span></div>\r\n          </div>\r\n        </div>\r\n      </el-col>\r\n    </el-row>\r\n    <el-divider/>\r\n    <div class=\"guess-title\">猜您需要</div>\r\n    <div class=\"guess\">\r\n      <div class=\"box\">\r\n        <div class=\"img\">s\r\n          <img src=\"../../../static/add-img.jpg\"/>\r\n        </div>\r\n        <div class=\"title\">从空白处新建</div>\r\n        <div class=\"sub-title\"><el-icon><Plus /></el-icon> PC 对话框</div>\r\n      </div>\r\n      <div class=\"box\">\r\n        <div class=\"img\">\r\n          <img src=\"../../../static/add-img.jpg\"/>\r\n        </div>\r\n        <div class=\"title\">从空白处新建</div>\r\n        <div class=\"sub-title\"><el-icon><Plus /></el-icon> PC 对话框</div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport {Plus} from '@element-plus/icons-vue'\r\nexport default {\r\n    components:{\r\n      Plus\r\n    }\r\n}\r\n</script>\r\n<style scoped lang=\"less\">\r\n  .index-home{\r\n    width: 100%;\r\n    height: 100%;\r\n    overflow: auto;\r\n    .index-box{\r\n      border:none;\r\n    }\r\n    .index-wrap{\r\n      min-height: 180px;\r\n      margin:5px;\r\n      border:3px solid #f0f2f4;\r\n      box-sizing: border-box;\r\n      .title{\r\n        height: 40px;\r\n        border-bottom:1px solid #f1f1f1;\r\n        padding:0 10px;\r\n        display:flex;\r\n        flex-direction: row;\r\n        justify-content: space-between;\r\n        span:nth-child(1){\r\n          color: #000;\r\n          font-weight: 500;\r\n          font-size: 16px;\r\n          line-height: 40px;\r\n        }\r\n        .icon{\r\n          border:1px solid #b9eb93;\r\n          display: block;\r\n          padding:0 5px;\r\n          background: #f6ffed;\r\n          height: 20px;\r\n          line-height: 20px;\r\n          margin-top:9px\r\n        }\r\n      }\r\n      .box{\r\n        display:flex;\r\n        flex-direction: row;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        justify-items: center;\r\n        height: 129px;\r\n        .number{\r\n          font-weight: 600;\r\n          font-size: 18px;\r\n          padding-left: 24px;\r\n        }\r\n        .icon-wrap{\r\n          padding:0 20px;\r\n          margin-top:10px;\r\n          .icon{\r\n            font-size: 36px;\r\n            color: #ffc214;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    .el-divider--horizontal{\r\n      margin:5px 0;\r\n    }\r\n    .guess-title{\r\n      padding-left: 20px;\r\n      color:#000\r\n    }\r\n    .guess{\r\n      display: flex;\r\n      flex-direction: row;\r\n      flex-wrap: wrap;\r\n      padding:0 5px;\r\n      .box{\r\n        width: 280px;\r\n        height: 150px;\r\n        margin:5px;\r\n        border:1px solid #f0f2f4;\r\n        box-shadow: 0px 5px 5px rgba(236,236,236,.5);\r\n        border-top-left-radius: 5px;\r\n        border-top-right-radius: 5px;\r\n        .img{\r\n          width: 100%;\r\n          height: 100px;\r\n          background: #f1f0ee;\r\n          display: flex;\r\n          flex-direction: row;\r\n          justify-content: center;\r\n        }\r\n        .title{\r\n          font-size: 14px;\r\n          color: #000;\r\n          font-weight: 500;\r\n          padding:5px 10px\r\n        }\r\n        .sub-title{\r\n          font-size: 12px;\r\n          padding:0 10px;\r\n          i{\r\n            position: relative;\r\n            top:1px\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n</style>","<script>\r\nimport VJsonContext from \"../../components/vjson/VJsonContext\";\r\nimport Designer from \"../../components/design/designer\";\r\n\r\nexport default {\r\n  props: {\r\n    vcxt: VJsonContext,\r\n    designer: Designer,\r\n    showNewModule: Object,\r\n  },\r\n  emits: [\r\n    'openModule',\r\n    'hideThis',\r\n  ]\r\n}\r\n</script>\r\n\r\n<template>\r\n  API\r\n</template>\r\n","<script>\r\nimport VJsonContext from \"../../components/vjson/VJsonContext\";\r\nimport Designer from \"../../components/design/designer\";\r\n\r\nexport default {\r\n  props: {\r\n    vcxt: VJsonContext,\r\n    designer: Designer,\r\n    showNewModule: Object,\r\n  },\r\n  emits: [\r\n    'openModule',\r\n    'hideThis',\r\n  ]\r\n}\r\n</script>\r\n\r\n<template>\r\n  FAV\r\n</template>\r\n","<template>\r\n  <el-dialog title=\"添加功能\" v-model=\"showNewModule\" :width=\"500\" :append-to-body=\"true\">\r\n    <el-form :inline=\"true\" :model=\"newModuleForm\" :label-width=\"80\" class=\"newModuleForm\">\r\n      <el-form-item label=\"模块类型\">\r\n        <el-input v-model=\"newModuleForm.moduleType\" readonly/>\r\n      </el-form-item>\r\n      <el-form-item label=\"路径\">\r\n        <el-input v-model=\"newModuleForm.path\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"功能名称\">\r\n        <el-input v-model=\"newModuleForm.name\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"模版\">\r\n        <el-select v-model=\"newModuleForm.template\">\r\n          <el-option\r\n              v-for=\"item in moduleTemplate\"\r\n              :key=\"item.label\"\r\n              :label=\"item.label\"\r\n              :value=\"item.value\"\r\n          />\r\n        </el-select>\r\n      </el-form-item>\r\n    </el-form>\r\n    <template #footer>\r\n      <div style=\"\">\r\n        <el-button @click=\"()=>{$data.showNewModule=false;}\">取消</el-button>\r\n        <el-button type=\"primary\" @click=\"submitNewModule\">提交</el-button>\r\n      </div>\r\n    </template>\r\n  </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport {getLayoutList} from \"../../components/design/yv-designer-desc\";\r\n\r\nexport default {\r\n  data() {\r\n    return {\r\n      showNewModule: false,\r\n      moduleTemplate: getLayoutList()\r\n          .filter(item => this.moduleType === item.layoutType && item.designSupport)\r\n          .map(({layout, name}) => ({value: layout, label: `${name}(${layout})`})),\r\n      newModuleForm: {\r\n        path: \"\",\r\n        name: \"\",\r\n        template: \"\",\r\n        moduleType: 'pc'\r\n      },\r\n    }\r\n  },\r\n  methods: {\r\n    show(path, moduleType) {\r\n      this.moduleTemplate = getLayoutList()\r\n          .filter(item => moduleType === item.layoutType && item.designSupport)\r\n          .map(({layout, name}) => ({value: layout, label: `${name}(${layout})`})),\r\n\r\n      this.showNewModule = true;\r\n      this.newModuleForm = {\r\n        path: \"\",\r\n        name: \"\",\r\n        template: \"\",\r\n        moduleType: moduleType\r\n      }\r\n      if (path) this.newModuleForm.path = path\r\n      if (moduleType) this.newModuleForm.moduleType = moduleType\r\n    },\r\n    close() {\r\n      this.showNewModule = false;\r\n    },\r\n    submitNewModule() {\r\n      this.$emit(\"submitNewModule\", this.newModuleForm);\r\n    },\r\n  },\r\n}\r\n</script>\r\n\r\n<style>\r\n.newModuleForm .el-form-item {\r\n  width: 100%;\r\n}\r\n</style>\r\n","import _ from 'lodash'\r\n\r\ninterface TreeNode {\r\n    text?: string\r\n    children?: TreeNode[]\r\n\r\n    [key: string]: any\r\n}\r\n\r\ninterface ModuleFile {\r\n    /** 是否存在 */\r\n    exists: boolean\r\n    /** 绝对路径 */\r\n    absolutePath: string\r\n    /** 文件名称 */\r\n    name: string\r\n    /** 最后修改时间 */\r\n    lastModified: string\r\n}\r\n\r\ninterface Module {\r\n    /** 绝对路径 */\r\n    absolutePath: string\r\n    /** 模块名称 */\r\n    name: string\r\n    /** 模块路径(相对路径) */\r\n    path: string\r\n    /** design.js 文件 */\r\n    designJs?: ModuleFile\r\n    /** vue 文件 */\r\n    vue?: ModuleFile\r\n}\r\n\r\ninterface ModuleTreeNode extends TreeNode {\r\n    type: \"Module\" | \"Dir\"\r\n    path: string\r\n    module?: Module\r\n    children?: ModuleTreeNode[]\r\n}\r\n\r\n/**\r\n * Module数据转换成Tree数据\r\n */\r\nfunction modulesToTreeData(modules: Module[]): ModuleTreeNode {\r\n    const separator = \"/\"\r\n    const treeNodeMap = new Map<string, ModuleTreeNode>()\r\n    const root: ModuleTreeNode = {\r\n        type: \"Dir\",\r\n        path: \"\",\r\n        expanded: true,\r\n        leaf: false,\r\n        children: [],\r\n    }\r\n    root.id = getModuleId(root.path)\r\n    treeNodeMap.set(root.path, root)\r\n    modules.forEach(module => {\r\n        const paths = _.split(module.path, separator)?.filter(path => path)\r\n        if (paths.length <= 0) return\r\n        const path: string[] = []\r\n        let parent = root\r\n        paths.forEach((dirName, idx) => {\r\n            const parentPath = path.join(separator)\r\n            parent = treeNodeMap.get(parentPath)\r\n            path.push(dirName)\r\n            const currentPath = path.join(separator)\r\n            let child = treeNodeMap.get(currentPath)\r\n            if (child == null) {\r\n                // 获取当前path 绝对路径\r\n                const indexLength: number = module.absolutePath.indexOf(currentPath)\r\n                let currentAbsolutePath: string = \"\"\r\n                if (indexLength > 0) {\r\n                    currentAbsolutePath = module.absolutePath.substring(0, indexLength) + currentPath\r\n                }\r\n                child = {\r\n                    type: \"Dir\",\r\n                    path: currentPath,\r\n                    absolutePath: currentAbsolutePath,\r\n                    leaf: false,\r\n                    children: [],\r\n                    text: dirName\r\n                }\r\n                child.id = getModuleId(child.path)\r\n                parent.children.push(child)\r\n                treeNodeMap.set(child.path, child)\r\n            }\r\n            if ((idx + 1) === paths.length && module.name && module.designJs) {\r\n                const leaf: ModuleTreeNode = {\r\n                    type: \"Module\",\r\n                    path: module.path + separator + module.name,\r\n                    absolutePath: module.absolutePath,\r\n                    leaf: true,\r\n                    text: module.name,\r\n                    module: module,\r\n                }\r\n                leaf.id = getModuleId(leaf.path)\r\n                child.children.push(leaf)\r\n                treeNodeMap.set(leaf.path, leaf)\r\n            }\r\n        })\r\n    })\r\n    // 排序处理\r\n    treeNodeMap.forEach(module => {\r\n        if (module.children) {\r\n            const children = _.sortBy(module.children, item => `${item.type}_${item.path}`)\r\n            module.children.length = 0\r\n            children.forEach(item => module.children.push(item))\r\n        }\r\n    })\r\n    return root\r\n}\r\n\r\nfunction getModuleId(path: string) {\r\n    const separator = \"/\"\r\n    const sps = path.split(separator)\r\n    const joinSps = sps.join('$')\r\n    if (!joinSps) {\r\n        return \"ROOT\"\r\n    }\r\n    return joinSps\r\n}\r\n\r\nexport {\r\n    modulesToTreeData,\r\n}","<template>\r\n  <div class=\"design-file\">\r\n    <div class=\"title\">\r\n      <span>模块浏览</span>\r\n      <el-icon @click=\"hideThis\">\r\n        <Close/>\r\n      </el-icon>\r\n    </div>\r\n    <el-tabs v-model=\"activeName\" class=\"design-file-tab\">\r\n      <el-tab-pane label=\"PC\" name=\"PC\">\r\n        <yv-vjson-tree ref=\"_inner\" :vjson=\"treeVJson\" :vcxt=\"vcxtOfTree\" @node-click=\"openPcModule\"\r\n                       @contextMenu=\"contextMenu\" class=\"design-file-tree\"/>\r\n      </el-tab-pane>\r\n      <el-tab-pane label=\"PDA\" name=\"PDA\">\r\n        <yv-vjson-tree ref=\"_innerPDA\" :vjson=\"pdaTreeVJson\" :vcxt=\"vcxtOfTree\" @node-click=\"openPdaModule\"\r\n                       @contextMenu=\"contextMenu\" class=\"design-file-tree\"/>\r\n      </el-tab-pane>\r\n    </el-tabs>\r\n\r\n    <el-dialog :title=\"showModuleTitle\" v-model=\"showModule\" :width=\"500\" :append-to-body=\"true\">\r\n      <el-form :inline=\"true\" :model=\"moduleForm\" :label-width=\"60\" class=\"newModuleForm\">\r\n        <el-form-item label=\"新路径\">\r\n          <el-input v-model=\"moduleForm.path\"/>\r\n        </el-form-item>\r\n      </el-form>\r\n      <template #footer>\r\n        <div style=\"\">\r\n          <el-button @click=\"() => { $data.showModule = false; }\">取消</el-button>\r\n          <el-button type=\"primary\" @click=\"submitModule\">提交</el-button>\r\n        </div>\r\n      </template>\r\n    </el-dialog>\r\n\r\n    <YvStudioModuleDialog ref=\"moduleDialog\" @submitNewModule=\"submitNewModule\"/>\r\n\r\n    <el-dialog :width=\"600\" v-model=\"showRegisterResource\" :append-to-body=\"true\" title=\"注册模块\" class=\"register\">\r\n      <el-container style=\"height: 400px\">\r\n        <el-aside width=\"50%\">\r\n          <el-tabs type=\"border-card\" @tab-change=\"tabChange\">\r\n            <el-tab-pane label=\"PC菜单\">\r\n              <el-tree ref=\"treeRef1\" @node-click=\"treeClick\" :data=\"pcTreeData\" v-loading=\"treeLoading1\">\r\n                <template #default=\"{ node }\">\r\n                  <span v-if=\"node.data.iconCls\">\r\n                    <i :class=\"node.data.iconCls\" aria-hidden=\"true\"></i>\r\n                    {{ node.data.label }}\r\n                  </span>\r\n                  <span v-else-if=\"node.data.target\">\r\n                    <i class=\"fa fa-file\" aria-hidden=\"true\"></i>\r\n                    {{ node.data.label }}\r\n                  </span>\r\n                  <span v-else>\r\n                    <i class=\"fa fa-folder\" aria-hidden=\"true\"></i>\r\n                    {{ node.data.label }}\r\n                  </span>\r\n                </template>\r\n              </el-tree>\r\n            </el-tab-pane>\r\n            <el-tab-pane label=\"PDA菜单\">\r\n              <el-tree ref=\"treeRef2\" @node-click=\"treeClick\" :data=\"pdaTreeData\" v-loading=\"treeLoading2\">\r\n                <template #default=\"{ node }\">\r\n                  <span v-if=\"node.data.iconCls\">\r\n                    <i :class=\"['icon', 'iconfont', node.data.iconCls]\" aria-hidden=\"true\"></i>\r\n                    {{ node.data.label }}\r\n                  </span>\r\n                  <span v-else-if=\"node.data.target\">\r\n                    <i class=\"fa fa-file\" aria-hidden=\"true\"></i>\r\n                    {{ node.data.label }}\r\n                  </span>\r\n                  <span v-else>\r\n                    <i class=\"fa fa-folder\" aria-hidden=\"true\"></i>\r\n                    {{ node.data.label }}\r\n                  </span>\r\n                </template>\r\n              </el-tree>\r\n            </el-tab-pane>\r\n          </el-tabs>\r\n        </el-aside>\r\n        <el-main width=\"50%\">\r\n          <el-form ref=\"formRef\" :inline=\"true\" class=\"register-form\">\r\n            <el-form-item label=\"上级资源ID\" prop=\"resource_parent\">\r\n              <el-input readonly v-model=\"regForm.resource_parent\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"资源名称\" prop=\"资源名称\" :rules=\"[{ required: true, }]\">\r\n              <el-input type=\"text\" v-model=\"regForm.resource_name\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"资源排序\" prop=\"资源排序\" :rules=\"[{ required: true, }, { type: 'number' }]\">\r\n              <el-input type=\"number\" v-model=\"regForm.resource_order\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"功能URL\" prop=\"scope_url\">\r\n              <el-input type=\"text\" readonly v-model=\"regForm.scope_url\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"权限编码\" prop=\"permission_code\">\r\n              <el-input type=\"text\" v-model=\"regForm.permission_code\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"功能参数\" prop=\"scope_params\">\r\n              <el-input type=\"text\" v-model=\"regForm.scope_params\"/>\r\n            </el-form-item>\r\n          </el-form>\r\n        </el-main>\r\n      </el-container>\r\n\r\n      <template #footer>\r\n        <span class=\"dialog-footer\">\r\n          <el-button @click=\"showRegisterResource = false\">关闭</el-button>\r\n          <el-button type=\"primary\" @click=\"confirmRegisterResource\">确定</el-button>\r\n        </span>\r\n      </template>\r\n\r\n    </el-dialog>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport {toRaw} from 'vue'\r\nimport VJsonContext from \"../../components/vjson/VJsonContext\";\r\nimport YvStudioModuleDialog from \"./yv-studio-module-dialog.vue\"\r\nimport {Close} from \"@element-plus/icons-vue\"\r\n// import { SyncOutlined, PrinterOutlined, SettingFilled } from \"@ant-design/icons-vue\";\r\nimport {ElMessage, ElMessageBox} from 'element-plus'\r\nimport {modulesToTreeData} from \"../utils/FileHelp\";\r\n\r\nexport default {\r\n  components: {\r\n    Close,\r\n    YvStudioModuleDialog,\r\n  },\r\n  props: {\r\n    showNewModule: Object,\r\n  },\r\n  data() {\r\n    const vcxtOfTree = new VJsonContext()\r\n    const treeVJson = {\r\n      xtype: 'tree',\r\n      defaultExpandAll: true,\r\n      checkStrictly: true,\r\n      enableFilter: true,\r\n      data: [],\r\n      nodeContextMenu: [\r\n        {\r\n          label: '添加',\r\n          icon: \"FileAddOutlined\",\r\n          divided: true,\r\n          click: (menu, {node, data, evt}) => {\r\n            this.addPC(node, data, evt)\r\n          },\r\n        },\r\n        {\r\n          label: '复制',\r\n          icon: \"CopyOutlined\",\r\n          click: (menu, {node, data, evt}) => {\r\n            this.copyPC(node, data, evt)\r\n          },\r\n        },\r\n        {\r\n          label: '移动(重命名)',\r\n          icon: \"EditOutlined\",\r\n          divided: true,\r\n          click: (menu, {node, data, evt}) => {\r\n            this.movePC(node, data, evt)\r\n          },\r\n        },\r\n        {\r\n          label: '删除',\r\n          icon: \"DeleteOutlined\",\r\n          divided: true,\r\n          click: (menu, {node, data, evt}) => {\r\n            this.deletePC(node, data, evt)\r\n          },\r\n        },\r\n        {\r\n          label: '注册到菜单',\r\n          icon: \"AppstoreAddOutlined\",\r\n          divided: true,\r\n          click: (menu, {node, data, evt}) => {\r\n            if (\"Module\" !== node.type) {\r\n              ElMessage.error(\"非文件模块不允许注册!\")\r\n              return\r\n            }\r\n\r\n            this.regForm = {}\r\n            this.showRegisterResource = true\r\n            this.regForm.scope_url = \".\" + node.path\r\n            // 加载菜单数据\r\n            this.reloadPCTreeData()\r\n          },\r\n        }\r\n      ],\r\n      getIconName: (node, data) => {\r\n        switch (data.type) {\r\n          case \"Dir\":\r\n            return \"FolderOutlined\"\r\n          case \"Module\":\r\n            return \"FileOutlined\"\r\n        }\r\n        return \"FileUnknownOutlined\";\r\n      }\r\n    }\r\n    const pdaTreeVJson = {\r\n      xtype: 'tree',\r\n      defaultExpandAll: true,\r\n      checkStrictly: true,\r\n      enableFilter: true,\r\n      data: [],\r\n      nodeContextMenu: [\r\n        {\r\n          label: '添加',\r\n          icon: \"FileAddOutlined\",\r\n          divided: true,\r\n          click: (menu, {node, data, evt}) => {\r\n            this.addPC(node, data, evt, 'pda')\r\n          },\r\n        },\r\n        {\r\n          label: '复制',\r\n          icon: \"CopyOutlined\",\r\n          click: (menu, {node, data, evt}) => {\r\n            this.copyPC(node, data, evt, 'pda')\r\n          },\r\n        },\r\n        {\r\n          label: '移动(重命名)',\r\n          icon: \"EditOutlined\",\r\n          divided: true,\r\n          click: (menu, {node, data, evt}) => {\r\n            this.movePC(node, data, evt, 'pda')\r\n          },\r\n        },\r\n        {\r\n          label: '删除',\r\n          icon: \"DeleteOutlined\",\r\n          divided: true,\r\n          click: (menu, {node, data, evt}) => {\r\n            this.deletePC(node, data, evt, 'pda')\r\n          },\r\n        },\r\n        {\r\n          label: '注册到菜单',\r\n          icon: \"AppstoreAddOutlined\",\r\n          divided: true,\r\n          click: (menu, {node, data, evt}) => {\r\n            if (\"Module\" !== node.type) {\r\n              ElMessage.error(\"非文件模块不允许注册!\")\r\n              return\r\n            }\r\n\r\n            this.regForm = {}\r\n            this.showRegisterResource = true\r\n            this.regForm.scope_url = \".\" + node.path\r\n            // 加载菜单数据\r\n            this.reloadPCTreeData()\r\n          },\r\n        }\r\n      ],\r\n      getIconName: (node, data) => {\r\n        switch (data.type) {\r\n          case \"Dir\":\r\n            return \"FolderOutlined\"\r\n          case \"Module\":\r\n            return \"FileOutlined\"\r\n        }\r\n        return \"FileUnknownOutlined\";\r\n      }\r\n    }\r\n    return {\r\n      activeName: 'PC',\r\n      vcxtOfTree,\r\n      treeVJson,\r\n      pdaTreeVJson,\r\n      showModuleTitle: \"复制模块\",\r\n      showModule: false,\r\n      moduleForm: {\r\n        oldPath: \"\",\r\n        path: \"\",\r\n      },\r\n      showRegisterResource: false,\r\n      pcTreeData: [],\r\n      pdaTreeData: [],\r\n      treeLoading1: false,\r\n      treeLoading2: false,\r\n      regForm: {\r\n        tabKey: '',\r\n        resource_parent: '',\r\n        resource_name: '',\r\n        resource_order: '',\r\n        scope_url: '',\r\n        permission_code: '',\r\n        scope_params: '',\r\n        resource_icon: '',\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    hideThis() {\r\n      this.$emit('hideThis')\r\n    },\r\n    reloadPcModule() {\r\n      const me = this;\r\n      return system.invokeStudio(\"DesignModuleFile@pcModule\", {}).then(({data}) => {\r\n        const treeData = modulesToTreeData(data).children;\r\n        me.$refs._inner.setData(treeData)\r\n      })\r\n    },\r\n    openPcModule(data) {\r\n      if (data.type === 'Module') {\r\n        system.invokeStudio(\"DesignModuleFile@getModuleFileContent\", data.module).then(({data: content}) => {\r\n          this.$emit('openModule', content, data.module)\r\n        })\r\n      }\r\n    },\r\n\r\n    reloadPdaModule() {\r\n      const me = this;\r\n      return system.invokeStudio(\"DesignModuleFile@pdaModule\", {}).then(({data}) => {\r\n        const treeData = modulesToTreeData(data).children;\r\n        me.$refs._innerPDA.setData(treeData)\r\n      })\r\n    },\r\n    openPdaModule(data) {\r\n      if (data.type === 'Module') {\r\n        system.invokeStudio(\"DesignModuleFile@getModuleFileContent\", data.module).then(({data: content}) => {\r\n          this.$emit('openModule', content, data.module)\r\n        })\r\n      }\r\n    },\r\n\r\n    contextMenu(data) {\r\n      this.contextMenuData = data;\r\n    },\r\n    addPC(node, data, evt, moduleType) {\r\n      let path;\r\n      if (this.contextMenuData) {\r\n        path = this.contextMenuData?.module?.path || this.contextMenuData?.path;\r\n      }\r\n      this.$refs.moduleDialog.show(path, moduleType ? moduleType : 'pc');\r\n    },\r\n    copyPC(node, data, evt, moduleType) {\r\n      if (!this.contextMenuData) {\r\n        system.msg(\"未选中模块!\");\r\n        return;\r\n      }\r\n      if (this.contextMenuData.type === \"Dir\") {\r\n        system.msg(\"不支持目录复制\");\r\n        return;\r\n      }\r\n      this.showModuleTitle = \"复制模块\"\r\n      this.moduleForm = {\r\n        oldPath: this.contextMenuData.path,\r\n        path: `${this.contextMenuData.path}_copy`,\r\n        moduleType,\r\n      }\r\n      this.showModule = true\r\n    },\r\n    movePC(node, data, evt, moduleType) {\r\n      if (!this.contextMenuData) {\r\n        system.msg(\"未选中模块!\");\r\n        return;\r\n      }\r\n      if (this.contextMenuData.type === \"Dir\") {\r\n        system.msg(\"不支持目录移动\");\r\n        return;\r\n      }\r\n      this.showModuleTitle = \"移动模块\"\r\n      this.moduleForm = {\r\n        oldPath: this.contextMenuData.path,\r\n        path: `${this.contextMenuData.path}`,\r\n        moduleType,\r\n      }\r\n      this.showModule = true\r\n    },\r\n    deletePC(node, data, evt, moduleType) {\r\n      if (!this.contextMenuData) {\r\n        system.msg(\"未选中模块!\");\r\n        return;\r\n      }\r\n      ElMessageBox.confirm(`确认删除${this.contextMenuData.text}`).then(() => {\r\n        system.invokeStudio(\"DesignModuleFile@delModule\", {...this.contextMenuData, moduleType}).then(({\r\n                                                                                                         msg,\r\n                                                                                                         success\r\n                                                                                                       }) => {\r\n          if (success) {\r\n            this.reloadPcModule().finally()\r\n          } else {\r\n            system.msg(msg);\r\n          }\r\n        })\r\n      })\r\n    },\r\n    submitModule() {\r\n      system.invokeStudio(\r\n          `DesignModuleFile@${this.showModuleTitle === \"移动模块\" ? 'moveModule' : 'cloneModule'}`,\r\n          this.moduleForm,\r\n      ).then(({msg, success}) => {\r\n        if (success) {\r\n          this.showModule = false\r\n          this.reloadPcModule().finally()\r\n        } else {\r\n          system.msg(msg);\r\n        }\r\n      })\r\n    },\r\n    submitNewModule(newModuleForm) {\r\n      system.invokeStudio(\"DesignModuleFile@createModule\", newModuleForm)\r\n          .then(() => {\r\n            this.left_1?.reloadPcModule();\r\n            this.$refs.moduleDialog.close();\r\n          })\r\n    },\r\n    reloadPCTreeData() {\r\n      this.treeLoading1 = true\r\n      system.invokeStudio(\"DesignModuleFile@getMenuTree\", {type: 'PC'}).then((res) => {\r\n        if (res.success) {\r\n          this.pcTreeData = res.data\r\n        }\r\n      }).finally(() => {\r\n        this.treeLoading1 = false\r\n      })\r\n    },\r\n    reloadPDATreeData() {\r\n      this.treeLoading2 = true\r\n      system.invokeStudio(\"DesignModuleFile@getMenuTree\", {type: 'PDA'}).then((res) => {\r\n        if (res.success) {\r\n          this.pdaTreeData = res.data\r\n        }\r\n      }).finally(() => {\r\n        this.treeLoading2 = false\r\n      })\r\n    },\r\n    treeClick(node) {\r\n      if (node.id) {\r\n        const id = node.id?.split(\"_\")[1]\r\n        this.regForm.resource_parent = id\r\n      }\r\n    },\r\n    confirmRegisterResource() {\r\n      // 检验菜单数据\r\n      const param = this.regForm\r\n      if (!param.resource_name) {\r\n        ElMessage.error('资源名称不能为空')\r\n        return\r\n      }\r\n      if (!param.scope_url) {\r\n        ElMessage.error('功能URL不能为空')\r\n        return\r\n      }\r\n      let type = this.activeName\r\n      system.invokeStudio(\"DesignModuleFile@registerResource\", {...param, type}).then((res) => {\r\n        if (res.success) {\r\n          this.showRegisterResource = false\r\n          ElMessage({message: '注册成功！', type: 'success',})\r\n        } else {\r\n          ElMessage.error(res.msg)\r\n        }\r\n      }).catch((error) => {\r\n        system.showErrorDialog(error)\r\n      }).finally(() => {\r\n      })\r\n\r\n    },\r\n    tabChange(index) {\r\n      if (index === \"0\") {\r\n        this.reloadPCTreeData()\r\n      } else if (index === \"1\") {\r\n        this.reloadPDATreeData()\r\n      }\r\n      this.tabKey = index\r\n    },\r\n  },\r\n  mounted() {\r\n    this.reloadPcModule().finally();\r\n    this.reloadPdaModule().finally();\r\n  },\r\n}\r\n\r\n</script>\r\n<style lang=\"less\">\r\n.newModuleForm .el-form-item {\r\n  width: 100%;\r\n}\r\n\r\n.design-file {\r\n  height: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .title {\r\n    height: 38px;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n\r\n    span {\r\n      margin-left: 10px;\r\n      font-size: 16px;\r\n      color: #000;\r\n      font-weight: bold;\r\n    }\r\n\r\n    .el-icon {\r\n      font-size: 16px;\r\n      position: relative;\r\n      cursor: pointer;\r\n      top: 11px;\r\n      margin-right: 10px;\r\n    }\r\n  }\r\n\r\n  .design-file-tab {\r\n    flex: 1;\r\n    overflow: hidden;\r\n    display: flex;\r\n    flex-direction: column;\r\n\r\n    .el-tabs__header {\r\n      margin: 0 0 5px 0;\r\n\r\n      .el-tabs__nav-scroll {\r\n        .el-tabs__item {\r\n          padding: 0 10px;\r\n\r\n          &.is-active {\r\n            color: #000;\r\n            font-weight: 500;\r\n          }\r\n\r\n          &:hover {\r\n            color: var(--main-color);\r\n          }\r\n        }\r\n\r\n        .el-tabs__active-bar {\r\n          background-color: var(--main-color);\r\n        }\r\n      }\r\n    }\r\n\r\n    .el-tabs__content {\r\n      flex: 1;\r\n      overflow: hidden;\r\n\r\n      & > .el-tab-pane {\r\n        width: 100%;\r\n        height: 100%;\r\n\r\n        .design-file-tree {\r\n          width: 100%;\r\n          height: 100%;\r\n          display: flex;\r\n          flex-direction: column;\r\n          overflow: hidden;\r\n\r\n          & > .el-row {\r\n            margin: 5px 8px;\r\n\r\n            .el-input {\r\n              .el-input__wrapper {\r\n                border-radius: 0;\r\n              }\r\n            }\r\n          }\r\n\r\n          & > .el-scrollbar {\r\n            flex: 1;\r\n            overflow: auto;\r\n\r\n            .el-tree {\r\n              background: var(--sub-header-color);\r\n\r\n              .el-tree-node.is-current > .el-tree-node__content {\r\n                background: #d7d7d7;\r\n                color: #000;\r\n              }\r\n\r\n              .el-tree-node__content {\r\n                height: 30px;\r\n                font-size: 14px;\r\n                font-weight: 300;\r\n\r\n                &:hover {\r\n                  background: #d7d7d7;\r\n                  color: #000;\r\n                }\r\n\r\n                .el-icon {\r\n                  position: relative;\r\n                  top: 3px;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n.register {\r\n  .el-main {\r\n    padding: 0;\r\n  }\r\n\r\n  .register-form.el-form--inline {\r\n    .el-form-item {\r\n      margin-right: 0\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <yv-vjson-tree ref=\"_inner\" :vjson=\"treeVJson\" :vcxt=\"vcxtOfTree\"\r\n                 @node-click=\"_nodeClick\"/>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {toRaw} from 'vue'\r\nimport VJsonContext from \"../vjson/VJsonContext\"\r\nimport Designer from \"./designer\"\r\n\r\nexport default {\r\n  props: {\r\n    vcxt: VJsonContext,\r\n    designer: Designer,\r\n  },\r\n  data() {\r\n    const vcxtOfTree = new VJsonContext()\r\n    const treeVJson = {\r\n      xtype: 'tree',\r\n      enableFilter: true,\r\n      defaultExpandAll: true,\r\n      data: [],\r\n    }\r\n\r\n    return {\r\n      vcxtOfTree,\r\n      treeVJson\r\n    }\r\n  },\r\n  watch: {\r\n    'designer.vjson': {\r\n      deep: true,\r\n      immediate: true,\r\n      handler(newVal) {\r\n        this.buildTreeVJson(this)\r\n      }\r\n    },\r\n    'designer.selectedWidget': {\r\n      handler(widget) {\r\n        if (widget?.id) {\r\n          this.$nextTick(() => {\r\n            this.$refs._inner.setCurrentKey('K' + widget.id)\r\n          })\r\n        }\r\n      }\r\n    }\r\n  },\r\n  mounted() {\r\n\r\n  },\r\n  methods: {\r\n    _nodeClick(nodeData) {\r\n      if (nodeData.vjsonId) {\r\n        this.designer.selectById(nodeData.vjsonId)\r\n      }\r\n    },\r\n    buildTreeVJson: _.debounce((me) => {\r\n      // 构建根级变量\r\n      const dataRoot = me.designer.buildVExportData('reviewOnly')\r\n\r\n      /**\r\n       * 将根级变量，变换为树形结构\r\n       */\r\n      const root = {children: []}\r\n\r\n      function travVar(parent, obj) {\r\n        _.forOwn(obj, (v, key) => {\r\n          const node = {\r\n            text: key\r\n          }\r\n          parent.children.push(node)\r\n\r\n          if (typeof v === 'object') {\r\n            node.children = []\r\n            travVar(node, v)\r\n          } else {\r\n            node.vjsonId = v\r\n          }\r\n        })\r\n      }\r\n\r\n      travVar(root, dataRoot)\r\n\r\n      me.$nextTick(() => {\r\n        me.$refs._inner.data = root.children\r\n      })\r\n    }, 500)\r\n  }\r\n}\r\n</script>\r\n","<template>\r\n  <yv-vjson-tree ref=\"_inner\" :vjson=\"treeVJson\" :vcxt=\"vcxtOfTree\"\r\n                 @node-click=\"_nodeClick\"/>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {toRaw} from 'vue'\r\nimport VJsonContext from \"../vjson/VJsonContext\"\r\nimport Designer from \"./designer\"\r\nimport {getComponentDesc, getLayoutOutlineDefine} from './yv-designer-desc'\r\n\r\nexport default {\r\n  props: {\r\n    vcxt: VJsonContext,\r\n    designer: Designer,\r\n  },\r\n  data() {\r\n    const vcxtOfTree = new VJsonContext()\r\n    const treeVJson = {\r\n      xtype: 'tree',\r\n      enableFilter: true,\r\n      defaultExpandAll: true,\r\n      data: [],\r\n    }\r\n\r\n    return {\r\n      vcxtOfTree,\r\n      treeVJson\r\n    }\r\n  },\r\n  watch: {\r\n    'designer.vjson': {\r\n      deep: true,\r\n      immediate: true,\r\n      handler(newVal) {\r\n        this.buildTreeVJson(this)\r\n      }\r\n    },\r\n    'designer.selectedWidget': {\r\n      handler(widget) {\r\n        if (widget?.id) {\r\n          this.$nextTick(() => {\r\n            this.$refs._inner.setCurrentKey('K' + widget.id)\r\n          })\r\n        }\r\n      }\r\n    }\r\n  },\r\n  mounted() {\r\n\r\n  },\r\n  methods: {\r\n    _nodeClick(nodeData) {\r\n      if (nodeData.vjson?.id) {\r\n        this.designer.selectById(nodeData.vjson.id)\r\n      }\r\n    },\r\n    buildTreeVJson: _.debounce((me) => {\r\n\r\n      const chooseDisplayName = (vjson) => {\r\n        const desc = getComponentDesc(vjson.xtype)\r\n        if (!desc || !desc.displayFn) {\r\n          return vjson.xtype + ' #' + vjson.id\r\n        }\r\n        return desc.displayFn(vjson)\r\n      }\r\n\r\n      // 遍历树\r\n      function travItem(parent, vjson) {\r\n        const treeNode = {\r\n          id: 'K' + vjson.id,\r\n          // text: vjson.xtype ?? 'panel' + vjson.id,\r\n          text: chooseDisplayName(vjson),\r\n          vjson: vjson\r\n        }\r\n        // if (vjson.text) {\r\n        //   treeNode.text = treeNode.text + '(' + vjson.text + ')'\r\n        // }\r\n        // if (vjson.fieldLabel) {\r\n        //   treeNode.text = treeNode.text + '(' + vjson.fieldLabel + ')'\r\n        // }\r\n        // if (vjson.title) {\r\n        //   treeNode.text = treeNode.text + '(' + vjson.title + ')'\r\n        // }\r\n        // if (vjson.reference) {\r\n        //   treeNode.text = treeNode.text + ' $' + vjson.reference\r\n        // }\r\n        // if (vjson.bind?.value) {\r\n        //   treeNode.text = treeNode.text + ' ' + vjson.bind.value\r\n        // }\r\n        parent.children.push(treeNode)\r\n\r\n        // 遍历下级元素\r\n        if (vjson.xtype === 'aggrid') {\r\n          if (vjson.columns && _.size(vjson.columns) > 0) {\r\n            treeNode.children = []\r\n            _.forEach(vjson.columns, column => {\r\n              const columnNode = {\r\n                id: 'K' + column.id,\r\n                text: column.header,\r\n                vjson: column\r\n              }\r\n              treeNode.children.push(columnNode)\r\n              if (column.dataIndex) {\r\n                columnNode.text = columnNode.text + ' :' + column.dataIndex\r\n              }\r\n            })\r\n          }\r\n        }\r\n        if (vjson.items && _.size(vjson.items) > 0) {\r\n          treeNode.children = []\r\n          _.forEach(vjson.items, item => {\r\n            travItem(treeNode, item)\r\n          })\r\n        }\r\n\r\n        return treeNode\r\n      }\r\n\r\n      const root = {\r\n        children: []\r\n      }\r\n      const vjson = toRaw(me.designer.vjson)\r\n\r\n      const define = getLayoutOutlineDefine(vjson)\r\n      if (!define) {\r\n        console.error('没有找到布局定义', vjson)\r\n      } else {\r\n        _.forOwn(define, (define, propName) => {\r\n          if (define.isList === true) {\r\n            // 按枚举的方式进行\r\n            let i = 0\r\n            const parentNode = {\r\n              text: define.title,\r\n              children: []\r\n            }\r\n            root.children.push(parentNode)\r\n            _.forEach(vjson[propName], item => {\r\n              const node = {\r\n                text: '[' + i + ']',\r\n                children: []\r\n              }\r\n              parentNode.children.push(node)\r\n\r\n              travItem(node, item)\r\n              i++\r\n            })\r\n\r\n          } else {\r\n            // 按对象的方式进行\r\n            const node = travItem(root, vjson[propName])\r\n            node.text = define.title\r\n          }\r\n\r\n        })\r\n      }\r\n\r\n      me.$nextTick(() => {\r\n        me.$refs._inner.data = root.children\r\n      })\r\n    }, 500)\r\n  }\r\n}\r\n</script>\r\n","<!--大纲-->\r\n<template>\r\n  <split class=\"outline\" direction=\"vertical\">\r\n    <split-area :size=\"50\">\r\n      <YvDesignerDataStructure :designer=\"designer\" :vcxt=\"vcxt\" class=\"outline-designer\"\r\n      />\r\n    </split-area>\r\n    <split-area :size=\"50\">\r\n      <YvDesignerRefStructure :designer=\"designer\" :vcxt=\"vcxt\" class=\"outline-designer\"/>\r\n    </split-area>\r\n  </split>\r\n</template>\r\n<script>\r\nimport YvDesignerDataStructure from \"../../components/design/yv-designer-data-structure.vue\"\r\nimport YvDesignerRefStructure from \"../../components/design/yv-designer-ref-structure.vue\"\r\nimport VJsonContext from \"../../components/vjson/VJsonContext\"\r\nimport Designer from \"../../components/design/designer\"\r\nimport {toRaw} from \"vue\"\r\n\r\nexport default {\r\n  components: {\r\n    YvDesignerDataStructure,\r\n    YvDesignerRefStructure,\r\n  },\r\n  props: {\r\n    vcxt: VJsonContext,\r\n    designer: Designer,\r\n    showNewModule: Object,\r\n  },\r\n  data() {\r\n    return {\r\n      modelTreeData: [],\r\n      refTreeProps: [],\r\n      modelTreeProps: [],\r\n    }\r\n  },\r\n  watch: {},\r\n  methods: {\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n  .outline{\r\n    .splitpanes__pane{\r\n      overflow: hidden;\r\n    }\r\n    .outline-designer{\r\n      height: 100%;\r\n      overflow: hidden;\r\n      display: flex;\r\n      flex-direction: column;\r\n      &>.el-row{\r\n        margin:5px 8px;\r\n        .el-input__wrapper{\r\n          border-radius: 0;\r\n        }\r\n      }\r\n      .el-scrollbar{\r\n        flex:1;\r\n        overflow: auto;\r\n        .el-scrollbar__wrap{\r\n          overflow: auto;\r\n          .el-tree{\r\n            background-color: transparent;\r\n            .el-tree-node:focus>.el-tree-node__content{\r\n              background-color: #d7d7d7;\r\n            }\r\n            .el-tree-node__content{\r\n              font-size: 14px;\r\n              font-weight: 300;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n</style>\r\n\r\n\r\n","import _ from 'lodash'\r\nimport {addVJsonId} from \"../yv-utils\";\r\nimport {setupToolbox} from \"./yv-designer-desc\";\r\nimport {renderIcon} from \"../../utils\";\r\nimport {\r\n    Form,\r\n    Toolbar,\r\n    Aggrid,\r\n    Split,\r\n    Tabs,\r\n    Alert,\r\n    Button,\r\n    Textfield,\r\n    Numberfield,\r\n    Combogrid,\r\n    Combosearch,\r\n    Combo,\r\n    Checkbox,\r\n    Radiogroup,\r\n    Staticfield, Datefield, Datetimefield, Filefield, List, Tree, Divider, Treefield\r\n} from \"../vjson/Defaults\";\r\n\r\nconst containers = [\r\n    {\r\n        xtype: 'form',\r\n        icon: 'icon-17',\r\n        text: '表单',\r\n        onCreate(from) {\r\n            const vjson = _.defaults({\r\n                xtype: 'form',\r\n                colsOfRow: 2,\r\n                items: [\r\n                    {\r\n                        xtype: 'textfield',\r\n                        fieldLabel: '字段1',\r\n                        bind: {value: ''},\r\n                    },\r\n                    {\r\n                        xtype: 'textfield',\r\n                        fieldLabel: '字段2',\r\n                        bind: {value: ''},\r\n                    },\r\n                    {\r\n                        xtype: 'textfield',\r\n                        fieldLabel: '字段3',\r\n                        bind: {value: ''},\r\n                    },\r\n                ]\r\n            }, Form)\r\n\r\n            return addVJsonId(vjson)\r\n        }\r\n    },\r\n    {\r\n        xtype: 'toolbar',\r\n        category: 'container',\r\n        icon: 'icon-toolbar-',\r\n        text: '工具条',\r\n        onCreate(from) {\r\n            const vjson = _.defaults({\r\n                xtype: 'toolbar',\r\n                items: [\r\n                    {\r\n                        xtype: 'button',\r\n                        text: '按钮1',\r\n                    }\r\n                ]\r\n            }, Toolbar)\r\n\r\n            return addVJsonId(vjson)\r\n        }\r\n    },\r\n    {\r\n        xtype: 'tabpanel',\r\n        category: 'container',\r\n        icon: 'icon-xuanxiangqia',\r\n        text: '选项卡',\r\n        onCreate(from) {\r\n            const vjson = _.defaults({\r\n                xtype: 'tabs',\r\n                items: [\r\n                    {\r\n                        xtype: 'tabpanel',\r\n                        title: '选项卡1',\r\n                        items: []\r\n                    },\r\n                    {\r\n                        xtype: 'tabpanel',\r\n                        title: '选项卡2',\r\n                        items: []\r\n                    },\r\n                ]\r\n            }, Tabs)\r\n\r\n            return addVJsonId(vjson)\r\n        }\r\n    },\r\n    {\r\n        xtype: 'split',\r\n        category: 'container',\r\n        icon: 'icon-fengexian1',\r\n        text: '切分面板',\r\n        onCreate(from) {\r\n            const vjson = _.defaults({\r\n                xtype: 'split',\r\n                items: [\r\n                    {\r\n                        items: []\r\n                    },\r\n                    {\r\n                        items: []\r\n                    },\r\n                ]\r\n            }, Split)\r\n\r\n            return addVJsonId(vjson)\r\n        }\r\n    },\r\n    {\r\n        xtype: 'alert',\r\n        icon: renderIcon('InfoFilled'),\r\n        text: '提示文本',\r\n        onCreate(from) {\r\n            const vjson = _.defaults({\r\n                xtype: 'alert',\r\n            }, Alert)\r\n\r\n            return addVJsonId(vjson)\r\n        }\r\n    },\r\n]\r\n\r\nconst basicFields = [\r\n    {\r\n        xtype: 'button',\r\n        icon: 'icon-jinjianniubeifen',\r\n        text: '按钮',\r\n        onCreate(from) {\r\n            const vjson = _.defaults({\r\n                xtype: 'button',\r\n                text: '新按钮',\r\n            }, Button)\r\n\r\n            return addVJsonId(vjson)\r\n        }\r\n    },\r\n    {\r\n        xtype: 'staticfield',\r\n        icon: 'icon-wenben',\r\n        text: '静态文本',\r\n        onCreate(from) {\r\n            const vjson = _.defaults({\r\n                xtype: 'staticfield',\r\n                fieldLabel: '文本字段',\r\n                bind: {value: ''},\r\n            }, Staticfield)\r\n\r\n            return addVJsonId(vjson)\r\n        }\r\n    },\r\n    {\r\n        xtype: 'checkbox',\r\n        icon: 'icon-yigouxuan',\r\n        text: '勾选',\r\n        onCreate(from) {\r\n            const vjson = _.defaults({\r\n                xtype: 'checkbox',\r\n                fieldLabel: '勾选字段',\r\n                bind: {value: ''},\r\n            }, Checkbox)\r\n\r\n            return addVJsonId(vjson)\r\n        }\r\n    },\r\n    {\r\n        xtype: 'radiogroup',\r\n        icon: 'icon-gouxuan',\r\n        text: '单选',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n\r\n            const vjson = _.defaults({\r\n                id: tmpId,\r\n                xtype: 'radiogroup',\r\n                fieldLabel: '单选' + tmpId,\r\n            }, Radiogroup)\r\n\r\n            return vjson\r\n        }\r\n    },\r\n    {\r\n        xtype: 'textfield',\r\n        icon: 'icon-biaodanzujian-shurukuang',\r\n        text: '文本输入框',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n\r\n            const vjson = _.defaults({\r\n                id: tmpId,\r\n                xtype: 'textfield',\r\n                fieldLabel: '输入框' + tmpId,\r\n                bind: {\r\n                    value: ''\r\n                }\r\n            }, Textfield)\r\n\r\n            return vjson\r\n        }\r\n    },\r\n    {\r\n        xtype: 'select',\r\n        icon: 'icon-biaodanzujian-xialakuang',\r\n        text: '下拉选择',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n            const vjson = _.defaults({\r\n                id: tmpId,\r\n                xtype: 'combo',\r\n                fieldLabel: '下拉框' + tmpId,\r\n                bind: {\r\n                    value: ''\r\n                }\r\n            }, Combo)\r\n\r\n            return vjson\r\n        }\r\n    },\r\n    {\r\n        xtype: 'numberfield',\r\n        icon: 'icon-fuhao-shuzishurukuang',\r\n        text: '数字',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n            const vjson = _.defaults({\r\n                id: tmpId,\r\n                xtype: 'numberfield',\r\n                fieldLabel: '数字框' + tmpId,\r\n                bind: {\r\n                    value: ''\r\n                }\r\n            }, Numberfield)\r\n\r\n            return vjson\r\n        }\r\n    },\r\n    {\r\n        xtype: 'combogrid',\r\n        icon: 'icon-sousuokuang',\r\n        text: '查询输入框',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n            const vjson = _.defaults({\r\n                id: tmpId,\r\n                xtype: 'combogrid',\r\n                fieldLabel: '查询框' + tmpId,\r\n                bind: {\r\n                    value: ''\r\n                }\r\n            }, Combogrid)\r\n\r\n            return vjson\r\n        }\r\n    },\r\n    {\r\n        xtype: 'combosearch',\r\n        icon: 'icon-sousuokuang',\r\n        text: '自定查询框',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n            const vjson = _.defaults({\r\n                id: tmpId,\r\n                xtype: 'combosearch',\r\n                fieldLabel: '自定义查询框' + tmpId,\r\n                bind: {\r\n                    value: ''\r\n                }\r\n            }, Combosearch)\r\n\r\n            return vjson\r\n        }\r\n    },\r\n    {\r\n        xtype: 'datefield',\r\n        icon: 'icon-riqi',\r\n        text: '日期',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n            const vjson = _.defaults({\r\n                id: tmpId,\r\n                xtype: 'datefield',\r\n                type: 'date',\r\n                fieldLabel: '日期框' + tmpId,\r\n                bind: {\r\n                    value: ''\r\n                }\r\n            }, Datefield)\r\n\r\n            return vjson\r\n        }\r\n    },\r\n    {\r\n        xtype: 'datetimefield',\r\n        icon: 'icon-a-ziyuan22',\r\n        text: '日期时间',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n            const vjson = _.defaults({\r\n                id: tmpId,\r\n                xtype: 'datetimefield',\r\n                fieldLabel: '日期时间框' + tmpId,\r\n                bind: {\r\n                    value: ''\r\n                }\r\n            }, Datetimefield)\r\n\r\n            return vjson\r\n        }\r\n    },\r\n    // {\r\n    //     xtype: 'tag',\r\n    //     icon: 'icon-tag',\r\n    //     text: '标签输入',\r\n    //     onCreate(from) {\r\n    //         const tmpId = _.uniqueId('_id')\r\n    //         return {\r\n    //             id: tmpId,\r\n    //             xtype: 'datefield',\r\n    //             fieldLabel: '输入框' + tmpId,\r\n    //             bind: {\r\n    //                 value: ''\r\n    //             }\r\n    //         }\r\n    //     }\r\n    // },\r\n    {\r\n        xtype: 'file',\r\n        icon: 'icon-13wenjianshangchuan',\r\n        text: '文件上传',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n            const vjson = _.defaults({\r\n                id: tmpId,\r\n                xtype: 'filefield',\r\n                fieldLabel: '文件上传' + tmpId,\r\n                bind: {\r\n                    value: ''\r\n                }\r\n            }, Filefield)\r\n\r\n            return vjson\r\n        }\r\n    },\r\n    {\r\n        xtype: 'treefield',\r\n        icon: 'icon-biaodanzujian-xialakuang',\r\n        text: '下拉树',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n            const vjson = _.defaults({\r\n                id: tmpId,\r\n                xtype: 'treefield',\r\n                fieldLabel: '下拉树' + tmpId,\r\n                bind: {\r\n                    value: ''\r\n                }\r\n            }, Treefield)\r\n\r\n            return vjson\r\n        }\r\n    },\r\n    {\r\n        xtype: 'titlefield',\r\n        icon: renderIcon('Minus'),\r\n        text: '表单强制分段',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n            return {\r\n                id: tmpId,\r\n                xtype: 'titlefield',\r\n            }\r\n        }\r\n    },\r\n    {\r\n        xtype: 'divider_formitem',\r\n        icon: renderIcon('SortDown'),\r\n        text: '纵向分隔符',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n            return {\r\n                id: tmpId,\r\n                xtype: 'divider_formitem',\r\n            }\r\n        }\r\n    },\r\n    {\r\n        xtype: 'fieldslot',\r\n        icon: renderIcon('Flag'),\r\n        text: '字段插槽',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n            return {\r\n                id: tmpId,\r\n                xtype: 'fieldslot',\r\n                name: \"slot\" + tmpId,\r\n            }\r\n        }\r\n    },\r\n    {\r\n        xtype: 'gridcheck',\r\n        icon: renderIcon('fa CheckDouble'),\r\n        text: '表格跨页多选框',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n            return {\r\n                id: tmpId,\r\n                xtype: 'gridcheck',\r\n            }\r\n        }\r\n    }\r\n]\r\n\r\nconst advancedFields = [\r\n    {\r\n        xtype: 'aggrid',\r\n        icon: 'icon-jurassic_table',\r\n        text: '表格-AG',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n            const vjson = _.defaults({\r\n                id: tmpId,\r\n                xtype: 'aggrid',\r\n                columns: [\r\n                    {\r\n                        dataIndex: 'field1', header: '字段1', id: _.uniqueId('_id')\r\n                    },\r\n                    {\r\n                        dataIndex: 'field2', header: '字段2', id: _.uniqueId('_id')\r\n                    },\r\n                ]\r\n            }, Aggrid)\r\n\r\n\r\n            return vjson\r\n        }\r\n    },\r\n    {\r\n        xtype: 'list',\r\n        icon: renderIcon('fa ListAltRegular'),\r\n        text: '列表',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n            const vjson = _.defaults({\r\n                id: tmpId,\r\n                xtype: 'list',\r\n                pagination: true,\r\n                items: []\r\n            }, List)\r\n\r\n            return vjson\r\n        }\r\n    },\r\n    {\r\n        xtype: 'tree',\r\n        icon: 'icon-wenjianshu',\r\n        text: '树',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n            const vjson = _.defaults({\r\n                id: tmpId,\r\n                xtype: 'tree',\r\n            }, Tree)\r\n\r\n            return vjson\r\n        }\r\n    },\r\n    {\r\n        xtype: 'divider',\r\n        icon: renderIcon('Minus'),\r\n        text: '横向分割线',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n            const vjson = _.defaults({\r\n                id: tmpId,\r\n                xtype: 'divider',\r\n            }, Divider)\r\n\r\n            return vjson\r\n        }\r\n    },\r\n    {\r\n        xtype: 'slot',\r\n        icon: renderIcon('Flag'),\r\n        text: '插槽',\r\n        onCreate(from) {\r\n            const tmpId = _.uniqueId('_id')\r\n            return {\r\n                id: tmpId,\r\n                xtype: 'slot',\r\n                name: \"slot\" + tmpId,\r\n            }\r\n        }\r\n    },\r\n    {\r\n        xtype: 'exprform',\r\n        icon: renderIcon('element Memo'),\r\n        text: '表达式构造面板',\r\n        onCreate(from) {\r\n            return {\r\n                xtype: 'exprform', id: _.uniqueId('_id')\r\n            }\r\n        }\r\n    },\r\n    {\r\n        xtype: 'source',\r\n        icon: renderIcon('element Tickets'),\r\n        text: '源码编辑器',\r\n        onCreate(from) {\r\n            return {\r\n                xtype: 'source', id: _.uniqueId('_id')\r\n            }\r\n        }\r\n    },\r\n    {\r\n        xtype: 'editorprop',\r\n        icon: renderIcon('element Memo'),\r\n        text: '属性编辑器',\r\n        onCreate(from) {\r\n            return {\r\n                xtype: 'editorprop', id: _.uniqueId('_id')\r\n            }\r\n        }\r\n    },\r\n    {\r\n        xtype: 'log',\r\n        icon: renderIcon('element Memo'),\r\n        text: '操作日志查询',\r\n        onCreate(from) {\r\n            return {\r\n                xtype: 'log', id: _.uniqueId('_id')\r\n            }\r\n        }\r\n    },\r\n]\r\n\r\nconst customFields = [\r\n    {\r\n        xtype: 'gridcolumn',\r\n        icon: renderIcon('Coin'),\r\n        text: '表格字段',\r\n        onCreate(from) {\r\n            return {\r\n                xtype: 'aggridcolumn',\r\n                dataIndex: 'dataIndex', header: \"字段\", id: _.uniqueId('_id')\r\n            }\r\n        }\r\n    },\r\n]\r\nconst customFields2 = [\r\n    {\r\n        xtype: 'textel',\r\n        icon: renderIcon('fa ListAltRegular'),\r\n        text: '列表字段',\r\n        onCreate(from) {\r\n            return {\r\n                xtype: 'textel', fieldLabel: \"字段\", id: _.uniqueId('_id')\r\n            }\r\n        }\r\n    },\r\n]\r\nexport default function loadToolbox() {\r\n    setupToolbox({\r\n        containers,\r\n        basicFields,\r\n        advancedFields,\r\n        customFields,\r\n        customFields2,\r\n    })\r\n}","<template>\r\n  <div class=\"design-toolbox\">\r\n    <div class=\"title\">\r\n      <span>工具箱</span>\r\n      <el-icon @click=\"hideThis\">\r\n        <Close/>\r\n      </el-icon>\r\n    </div>\r\n    <el-scrollbar class=\"side-scroll-bar\">\r\n      <el-collapse v-model=\"activeNames\" class=\"widget-collapse\">\r\n        <el-collapse-item name=\"1\" title=\"容器\">\r\n          <draggable tag=\"ul\" :list=\"getToolbox('containers')\" item-key=\"key\"\r\n                     :group=\"{name: 'rowGroup', pull: 'clone', put: false}\"\r\n                     :clone=\"_widgetClone\" ghost-class=\"ghost\" :sort=\"false\"\r\n                     :move=\"_hoverMove\" @end=\"_dragEnd\">\r\n            <template #item=\"{ element: ctn }\">\r\n              <li class=\"container-widget-item\" :title=\"ctn.text\" @dblclick=\"addContainerByDbClick(ctn)\">\r\n                <div class=\"item-wrap\">\r\n                  <component :is=\"getIconDiv(ctn.icon)\"/>\r\n                  <span>{{ ctn.text }}</span>\r\n                </div>\r\n              </li>\r\n            </template>\r\n          </draggable>\r\n        </el-collapse-item>\r\n\r\n        <el-collapse-item name=\"2\" title=\"基础字段\">\r\n          <draggable tag=\"ul\" :list=\"getToolbox('basicFields')\" item-key=\"key\"\r\n                     :group=\"{name: 'fieldGroup', pull: 'clone', put: false}\"\r\n                     :move=\"_hoverMove\" @end=\"_dragEnd\"\r\n                     :clone=\"_widgetClone\" ghost-class=\"ghost\" :sort=\"false\">\r\n            <template #item=\"{ element: fld }\">\r\n              <li class=\"field-widget-item\" :title=\"fld.text\" @dblclick=\"addFieldByDbClick(fld)\">\r\n                <div class=\"item-wrap\">\r\n                  <component :is=\"getIconDiv(fld.icon)\"/>\r\n                  <span>{{ fld.text }}</span>\r\n                </div>\r\n              </li>\r\n            </template>\r\n          </draggable>\r\n        </el-collapse-item>\r\n\r\n        <el-collapse-item name=\"3\" title=\"高级\">\r\n          <draggable tag=\"ul\" :list=\"getToolbox('advancedFields')\" item-key=\"key\"\r\n                     :group=\"{name: 'rowGroup', pull: 'clone', put: false}\"\r\n                     :move=\"_hoverMove\" @end=\"_dragEnd\"\r\n                     :clone=\"_widgetClone\" ghost-class=\"ghost\" :sort=\"false\">\r\n            <template #item=\"{ element: fld }\">\r\n              <li class=\"field-widget-item\" :title=\"fld.text\" @dblclick=\"addFieldByDbClick(fld)\">\r\n                <div class=\"item-wrap\">\r\n                  <component :is=\"getIconDiv(fld.icon)\"/>\r\n                  <span>{{ fld.text }}</span>\r\n                </div>\r\n              </li>\r\n            </template>\r\n          </draggable>\r\n        </el-collapse-item>\r\n\r\n        <el-collapse-item name=\"4\" title=\"字段\">\r\n          <draggable tag=\"ul\" :list=\"getToolbox('customFields')\" item-key=\"key\"\r\n                     :group=\"{name: 'columnGrop', pull: 'clone', put: false}\"\r\n                     :move=\"_hoverMove\" @end=\"_dragEnd\"\r\n                     :clone=\"_widgetClone\" ghost-class=\"ghost\" :sort=\"false\">\r\n            <template #item=\"{ element: fld }\">\r\n              <li class=\"field-widget-item\" :title=\"fld.text\" @dblclick=\"addFieldByDbClick(fld)\">\r\n                <div class=\"item-wrap\">\r\n                  <component :is=\"getIconDiv(fld.icon)\"/>\r\n                  <span>{{ fld.text }}</span>\r\n                </div>\r\n              </li>\r\n            </template>\r\n          </draggable>\r\n          <draggable tag=\"ul\" :list=\"getToolbox('customFields2')\" item-key=\"key\"\r\n                     :group=\"{name: 'elGroup', pull: 'clone', put: false}\"\r\n                     :move=\"_hoverMove\" @end=\"_dragEnd\"\r\n                     :clone=\"_widgetClone\" ghost-class=\"ghost\" :sort=\"false\">\r\n            <template #item=\"{ element: fld }\">\r\n              <li class=\"field-widget-item\" :title=\"fld.text\" @dblclick=\"addFieldByDbClick(fld)\">\r\n                <div class=\"item-wrap\">\r\n                  <component :is=\"getIconDiv(fld.icon)\"/>\r\n                  <span>{{ fld.text }}</span>\r\n                </div>\r\n              </li>\r\n            </template>\r\n          </draggable>\r\n        </el-collapse-item>\r\n      </el-collapse>\r\n    </el-scrollbar>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport {h} from 'vue'\r\nimport {ElIcon} from 'element-plus'\r\nimport loadToolbox from \"../../components/design/yv-designer-toolbox-config\";\r\nimport {getToolbox} from \"../../components/design/yv-designer-desc\";\r\nimport Designer from \"../../components/design/designer\";\r\nimport VJsonContext from \"../../components/vjson/VJsonContext\";\r\nimport {Close} from \"@element-plus/icons-vue\"\r\nimport {renderIcon} from \"../../utils\";\r\n\r\nexport default {\r\n  components: {\r\n    Close\r\n  },\r\n  props: {\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n    showNewModule: Object,\r\n  },\r\n  data() {\r\n    return {\r\n      activeNames: ['1', '2', '3', '4'],\r\n    }\r\n  },\r\n  created() {\r\n    loadToolbox()\r\n  },\r\n  methods: {\r\n    getToolbox,\r\n    getIconDiv(icon) {\r\n      if (typeof icon === 'string') {\r\n        return h('div', {class: 'item-icon'}, [\r\n          h('span', {class: 'icon iconfont ' + icon})\r\n        ])\r\n      }\r\n      if (typeof icon === 'function') {\r\n        return h('div', {class: 'item-icon'}, [\r\n          h(icon)\r\n        ])\r\n      }\r\n      // return  Tickets /></el-icon>\r\n      return h('div', {class: 'item-icon'}, [\r\n        renderIcon('Tickets')\r\n      ])\r\n    },\r\n    hideThis() {\r\n      this.$emit('hideThis')\r\n    },\r\n    addContainerByDbClick(container) {\r\n      this.designer.addContainerByDbClick(container)\r\n    },\r\n\r\n    addFieldByDbClick(widget) {\r\n      this.designer.addFieldByDbClick(widget)\r\n    },\r\n    checkMove(evt) {\r\n      return this.designer.checkWidgetMove(evt)\r\n    },\r\n\r\n    _hoverMove(evt) {\r\n      return this.designer.checkWidgetMove(evt)\r\n    },\r\n\r\n    _dragEnd(evt) {\r\n      return this.designer.dragEnd()\r\n    },\r\n\r\n    _widgetClone(origin) {\r\n      return this.designer.copyNewWidget(origin)\r\n    },\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.design-toolbox {\r\n  height: 100%;\r\n  overflow: hidden;\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  .title {\r\n    height: 38px;\r\n    border-bottom: 1px solid #e1e1e1;\r\n    display: flex;\r\n    flex-direction: row;\r\n    justify-content: space-between;\r\n    line-height: 38px;\r\n\r\n    span {\r\n      margin-left: 10px;\r\n      font-size: 16px;\r\n      color: #000;\r\n      font-weight: bold;\r\n    }\r\n\r\n    .el-icon {\r\n      font-size: 16px;\r\n      position: relative;\r\n      cursor: pointer;\r\n      top: 11px;\r\n      margin-right: 10px;\r\n    }\r\n  }\r\n\r\n  .side-scroll-bar {\r\n    flex: 1;\r\n    overflow: auto;\r\n\r\n    .el-collapse-item {\r\n      .el-collapse-item__header {\r\n        background: var(--header-color);\r\n        border: none;\r\n        padding-left: 10px;\r\n        height: 38px;\r\n      }\r\n\r\n      .el-collapse-item__wrap {\r\n        .el-collapse-item__content {\r\n          padding: 0;\r\n\r\n          ul {\r\n            margin: 0;\r\n            display: flex;\r\n            flex-direction: row;\r\n            flex-wrap: wrap;\r\n            padding: 5px;\r\n\r\n            li {\r\n              list-style: none;\r\n              width: 50%;\r\n              padding: 0 5px;\r\n\r\n              .item-wrap {\r\n                height: 36px;\r\n                border: 1px solid #edeef0;\r\n                display: flex;\r\n                flex-direction: row;\r\n                cursor: pointer;\r\n                transition: box-shadow .2s ease, -webkit-box-shadow .2s ease;\r\n                margin: 5px 0;\r\n\r\n                &:hover {\r\n                  border-color: #409eff;\r\n                }\r\n\r\n                .item-icon {\r\n                  height: 36px;\r\n                  line-height: 36px;\r\n                  text-align: center;\r\n                  margin: 0 5px;\r\n\r\n                  span {\r\n                    font-size: 18px;\r\n\r\n                    &.icon-yigouxuan {\r\n                      font-size: 15px;\r\n                    }\r\n\r\n                    &.icon-gouxuan {\r\n                      font-size: 15px;\r\n                    }\r\n\r\n                    &.icon-sousuokuang {\r\n                      font-size: 25px;\r\n                    }\r\n\r\n                  }\r\n\r\n                  & + span {\r\n                    display: inline-block;\r\n                    line-height: 36px;\r\n                    flex: 1;\r\n                    overflow: hidden;\r\n                    white-space: nowrap;\r\n                    text-overflow: ellipsis;\r\n                    -o-text-overflow: ellipsis;\r\n                    margin-right: 5px;\r\n                  }\r\n\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>\r\n","<template>\r\n  <div class=\"bem-tools\" ref=\"bemTool\" style=\"transform: translate(0px, 0px);\">\r\n    <div class=\"borders borders-selecting\" v-if=\"cWidth>0\"\r\n         :style=\"{width: cWidth+'px', height: cHeight+'px', transform: `translate3d(${cX}px, ${cY}px, 0px)`}\">\r\n\r\n      <div v-if=\"copyEnable\" class=\"borders-actions\"\r\n           style=\"top: -23px; height: 20px; justify-content: space-between;width: 100%;\">\r\n        <div class=\"borders-actions-left\">\r\n          <div v-if=\"isHide\" class=\"borders-action\" @click.stop=\"_hideShow\">\r\n            <el-icon>\r\n              <Hide/>\r\n            </el-icon>\r\n          </div>\r\n          <div class=\"borders-action\" @click.stop=\"_copy\">\r\n            <el-icon>\r\n              <CopyDocument/>\r\n            </el-icon>\r\n          </div>\r\n          <div class=\"borders-action\" @click.stop=\"_delete\">\r\n            <el-icon>\r\n              <Delete/>\r\n            </el-icon>\r\n          </div>\r\n        </div>\r\n        <div class=\"instance-node-selector\" v-if=\"!!name\">\r\n          <div class=\"instance-node-selector-current\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n            <span class=\"title instance-node-selector-node-title\">\r\n              <b class=\"title-icon\"></b><span\r\n                class=\"title-txt\">{{ name }}</span></span></div>\r\n        </div>\r\n      </div>\r\n\r\n    </div>\r\n\r\n    <template v-for=\"item in mulSelect\">\r\n      <div class=\"borders-mulselect\"\r\n           :style=\"{width: item.width+'px', height: item.height+'px', transform: `translate3d(${item.x}px, ${item.y}px, 0px)`}\"></div>\r\n    </template>\r\n  </div>\r\n  <div class=\"insertion\" v-if=\"hoverWidth>0\"\r\n       :style=\"{width: hoverWidth+'px', height: hoverHeight+'px', transform: `translate3d(${hoverX}px, ${hoverY}px, 0px)`}\"></div>\r\n</template>\r\n<script>\r\nimport _ from 'lodash'\r\nimport {Delete, CopyDocument, Hide} from '@element-plus/icons-vue'\r\nimport VJsonContext from \"../vjson/VJsonContext\"\r\nimport Designer from \"./designer\"\r\nimport eventBus from '../../event-bus'\r\n\r\nexport default {\r\n  props: {\r\n    vcxt: VJsonContext,\r\n    designer: Designer,\r\n  },\r\n  components: {\r\n    Delete, CopyDocument, Hide\r\n  },\r\n  data() {\r\n    return {\r\n      mulSelect: [],\r\n      cWidth: 0,\r\n      cHeight: 0,\r\n      cX: 0,\r\n      cY: 0,\r\n      hoverWidth: 0,\r\n      hoverHeight: 4,\r\n      hoverX: 0,\r\n      hoverY: 0,\r\n    }\r\n  },\r\n  mounted() {\r\n    const me = this\r\n    eventBus.$on('bem-refresh', () => {\r\n      me.refreshPosition(me)\r\n      me.refreshMulPosition(me)\r\n    })\r\n    eventBus.$on('drag-related', ({evt, rect}) => {\r\n      if (!me.$refs.bemTool) {\r\n        return\r\n      }\r\n      const prec = me.$refs.bemTool.getBoundingClientRect()\r\n      // console.log('drag-related', evt)\r\n\r\n      if (window['targetNoWidgetHint']) {\r\n        // 删除高亮的 \"拖拽目标至此\"\r\n        window['targetNoWidgetHint'].classList.remove('draghover')\r\n        delete window['targetNoWidgetHint']\r\n      }\r\n      const targetDOM = evt.originalEvent?.target\r\n      if (targetDOM && targetDOM.classList.contains('no-widget-hint')) {\r\n        // no-widget-hint = \"拖拽目标至此\"\r\n        targetDOM.classList.add('draghover')\r\n        window['targetNoWidgetHint'] = targetDOM\r\n        this.cWidth = 0\r\n        this.hoverWidth = 0\r\n        return\r\n      }\r\n\r\n      if (evt.to && (\r\n          evt.to.classList.contains('yv-field-container') ||\r\n          evt.to.classList.contains('yv-column-container') ||\r\n          evt.to.classList.contains('yv-form-row') ||\r\n          evt.to.classList.contains('yv-toolbar') ||\r\n          evt.to.classList.contains('el-row'))\r\n      ) {\r\n        // 纵向标记\r\n        if (evt.willInsertAfter) {\r\n          // 插入在后面\r\n          this.hoverWidth = 4\r\n          this.hoverHeight = rect.height\r\n          this.hoverX = rect.left + rect.width - prec.x\r\n          this.hoverY = rect.top - prec.y\r\n\r\n        } else {\r\n          // 插入在前面\r\n          this.hoverWidth = 4\r\n          this.hoverHeight = rect.height\r\n          this.hoverX = rect.left - prec.x\r\n          this.hoverY = rect.top - prec.y\r\n        }\r\n\r\n      } else {\r\n        // 横向标记\r\n        if (evt.willInsertAfter) {\r\n          // 插入在后面\r\n          this.hoverWidth = rect.width\r\n          this.hoverHeight = 4\r\n          this.hoverX = rect.left - prec.x\r\n          this.hoverY = rect.top + rect.height - prec.y\r\n        } else {\r\n          // 插入在前面\r\n          this.hoverWidth = rect.width\r\n          this.hoverHeight = 4\r\n          this.hoverX = rect.left - prec.x\r\n          this.hoverY = rect.top - prec.y\r\n        }\r\n      }\r\n    })\r\n    eventBus.$on('drag-end', () => {\r\n      // console.log('drag-end')\r\n      this.hoverWidth = 0\r\n      if (window['targetNoWidgetHint']) {\r\n        // no-widget-hint = \"拖拽目标至此\"\r\n        window['targetNoWidgetHint'].classList.remove('draghover')\r\n        delete window['targetNoWidgetHint']\r\n      }\r\n    })\r\n  },\r\n  watch: {\r\n    'designer.selectedWidget': {\r\n      handler(vjson) {\r\n        this.refreshPosition(this)\r\n      }\r\n    },\r\n    'designer.mulSelect': {\r\n      deep: true,\r\n      handler() {\r\n        this.refreshMulPosition(this)\r\n      }\r\n    },\r\n  },\r\n  computed: {\r\n    isHide() {\r\n      return this.designer.selectedWidget?.hidden ?? false\r\n    },\r\n    name() {\r\n      return this.designer.selectedWidgetName\r\n    },\r\n    copyEnable() {\r\n      return this.designer.selectedOption.parentList\r\n    },\r\n  },\r\n  methods: {\r\n    refreshMulPosition: _.debounce((me) => {\r\n      const retList = []\r\n      if (!me.$refs.bemTool) {\r\n        me.mulSelect = retList\r\n        return\r\n      }\r\n      const prec = me.$refs.bemTool.getBoundingClientRect()\r\n\r\n      _.forEach(me.designer.mulSelect, selItem => {\r\n        const el = document.getElementById(selItem.vjson.id)\r\n        if (el) {\r\n          const rec = el.getBoundingClientRect()\r\n          retList.push({\r\n            width: rec.width,\r\n            height: rec.height,\r\n            x: rec.x - prec.x,\r\n            y: rec.y - prec.y,\r\n          })\r\n        }\r\n      })\r\n\r\n      me.mulSelect = retList\r\n    }),\r\n    refreshPosition: _.debounce((me) => {\r\n      const vjson = me.designer.selectedWidget\r\n      let el = undefined\r\n      if (vjson && vjson.id) {\r\n        el = document.getElementById(vjson.id)\r\n      } else if (vjson && typeof vjson.layout === 'string') {\r\n        el = $('.yv-design-mode')[0]\r\n      }\r\n\r\n      if (el) {\r\n        const rec = el.getBoundingClientRect()\r\n        const prec = $('.bem-tools')[0].getBoundingClientRect()\r\n        me.cWidth = rec.width\r\n        me.cHeight = rec.height\r\n        me.cX = rec.x - prec.x\r\n        me.cY = rec.y - prec.y\r\n        return\r\n\r\n        /*\r\n        $(el).css({position: 'absolute'});\r\n        me.cWidth = rec.width\r\n        me.cHeight = rec.height\r\n        me.cX = $(el).offset().left\r\n        me.cY = $(el).offset().top\r\n        $(el).css({position: 'relative'});\r\n         */\r\n      }\r\n\r\n      me.cWidth = 0\r\n    }),\r\n    _hideShow() {\r\n      this.designer.selectedWidget.hidden = false\r\n    },\r\n    _copy() {\r\n      this.designer.copyComponent(this, this.designer.selectedWidget)\r\n    },\r\n    _delete() {\r\n      this.designer.deleteComponent(this, this.designer.selectedWidget)\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n:root {\r\n  --color-brand: #006cff;\r\n  --color-brand-light: #197aff;\r\n}\r\n\r\n.insertion {\r\n  position: absolute;\r\n  top: -2px;\r\n  left: 0;\r\n  z-index: 12;\r\n  pointer-events: none !important;\r\n  background-color: var(--color-brand-light);\r\n  height: 4px\r\n}\r\n\r\n.insertion.cover {\r\n  top: 0;\r\n  height: auto;\r\n  width: auto;\r\n  border: none;\r\n  opacity: .3\r\n}\r\n\r\n.insertion.vertical {\r\n  top: 0;\r\n  left: -2px;\r\n  width: 4px;\r\n  height: auto\r\n}\r\n\r\n.insertion.invalid {\r\n  background-color: red\r\n}\r\n\r\n.bem-tools {\r\n  bottom: 0;\r\n  right: 0;\r\n  z-index: 800;\r\n\r\n  .instance-node-selector {\r\n    .title {\r\n      padding: 1px 5px;\r\n      display: block;\r\n      background-color: #006cff;\r\n      color: #fff;\r\n      font-size: 13px;\r\n    }\r\n  }\r\n}\r\n\r\n.bem-tools, .borders {\r\n  pointer-events: none;\r\n  position: absolute;\r\n  top: 0;\r\n  left: 0;\r\n  overflow: visible\r\n}\r\n\r\n.borders {\r\n  -webkit-box-sizing: border-box;\r\n  box-sizing: border-box;\r\n  z-index: 1;\r\n  border: 1px solid var(--color-brand-light);\r\n  will-change: transform, width, height\r\n}\r\n\r\n.borders.borders-selecting {\r\n  z-index: 2;\r\n  border-width: 2px\r\n}\r\n\r\n.borders-mulselect {\r\n  position: absolute;\r\n  z-index: 2;\r\n  -webkit-box-sizing: border-box;\r\n  box-sizing: border-box;\r\n  border: 1px dashed var(--color-brand-light);\r\n}\r\n\r\n.bem-tools, .borders {\r\n  pointer-events: none;\r\n  position: absolute;\r\n  top: 0;\r\n  left: 0;\r\n  overflow: visible\r\n}\r\n\r\n.borders {\r\n  -webkit-box-sizing: border-box;\r\n  box-sizing: border-box;\r\n  z-index: 1;\r\n  border: 1px solid var(--color-brand-light);\r\n  will-change: transform, width, height\r\n}\r\n\r\n.borders > .borders-title {\r\n  color: var(--color-brand-light)\r\n}\r\n\r\n.borders > .borders-status, .borders > .borders-title {\r\n  -webkit-transform: translateY(-100%);\r\n  -ms-transform: translateY(-100%);\r\n  transform: translateY(-100%);\r\n  font-weight: lighter\r\n}\r\n\r\n.borders > .borders-status {\r\n  margin-left: 5px;\r\n  color: #3c3c3c\r\n}\r\n\r\n.borders > .borders-actions {\r\n  position: absolute;\r\n  display: -webkit-box;\r\n  display: -webkit-flex;\r\n  display: -ms-flexbox;\r\n  display: flex;\r\n  -webkit-box-orient: horizontal;\r\n  -webkit-box-direction: reverse;\r\n  -webkit-flex-direction: row-reverse;\r\n  -ms-flex-direction: row-reverse;\r\n  flex-direction: row-reverse;\r\n  -webkit-box-align: stretch;\r\n  -webkit-align-items: stretch;\r\n  -ms-flex-align: stretch;\r\n  align-items: stretch;\r\n  -webkit-box-pack: end;\r\n  -webkit-justify-content: flex-end;\r\n  -ms-flex-pack: end;\r\n  justify-content: flex-end;\r\n  pointer-events: none;\r\n}\r\n\r\n.borders > .borders-actions > * {\r\n  -webkit-flex-shrink: 0;\r\n  -ms-flex-negative: 0;\r\n  flex-shrink: 0\r\n}\r\n\r\n.borders-action, .borders .ve-icon-button.ve-action-save {\r\n  -webkit-box-sizing: border-box;\r\n  box-sizing: border-box;\r\n  cursor: pointer;\r\n  height: 20px;\r\n  width: 20px;\r\n  display: -webkit-inline-flex;\r\n  display: -ms-inline-flexbox;\r\n  display: inline-flex;\r\n  -webkit-box-align: center;\r\n  -webkit-align-items: center;\r\n  -ms-flex-align: center;\r\n  align-items: center;\r\n  -webkit-box-pack: center;\r\n  -webkit-justify-content: center;\r\n  -ms-flex-pack: center;\r\n  justify-content: center;\r\n  background: #006cff;\r\n  background: var(--color-brand, #006cff);\r\n  opacity: 1;\r\n  max-height: 100%;\r\n  overflow: hidden;\r\n  color: #fff;\r\n  pointer-events: auto;\r\n}\r\n\r\n.borders-action:hover, .borders .ve-icon-button.ve-action-save:hover {\r\n  background: #006cff;\r\n  background: var(--color-brand-light, #006cff)\r\n}\r\n\r\n.borders.resize-corner {\r\n  display: inline-block;\r\n  width: 8px;\r\n  height: 8px;\r\n  border: 1px solid #197aff;\r\n  background: #fff;\r\n  pointer-events: auto;\r\n  z-index: 2\r\n}\r\n\r\n.borders.resize-side {\r\n  border-width: 0;\r\n  z-index: 1;\r\n  pointer-events: auto;\r\n  -webkit-box-align: center;\r\n  -webkit-align-items: center;\r\n  -ms-flex-align: center;\r\n  align-items: center;\r\n  -webkit-box-pack: center;\r\n  -webkit-justify-content: center;\r\n  -ms-flex-pack: center;\r\n  justify-content: center;\r\n  display: -webkit-box;\r\n  display: -webkit-flex;\r\n  display: -ms-flexbox;\r\n  display: flex\r\n}\r\n\r\n.borders.resize-side:after {\r\n  content: \"\";\r\n  display: block;\r\n  border: 1px solid #197aff;\r\n  background: #fff;\r\n  border-radius: 2px\r\n}\r\n\r\n.borders.resize-side.e, .borders.resize-side.w {\r\n  cursor: ew-resize\r\n}\r\n\r\n.borders.resize-side.e:after, .borders.resize-side.w:after {\r\n  width: 4px;\r\n  min-height: 50%\r\n}\r\n\r\n.borders.resize-side.n, .borders.resize-side.s {\r\n  cursor: ns-resize\r\n}\r\n\r\n.borders.resize-side.n:after, .borders.resize-side.s:after {\r\n  min-width: 50%;\r\n  height: 4px\r\n}\r\n\r\n.borders.borders-detecting {\r\n  z-index: 1;\r\n  border-style: dashed;\r\n  background: rgba(0, 121, 242, .04)\r\n}\r\n\r\n.borders.borders-detecting.x-loop {\r\n  border-color: rgba(138, 93, 226, .8);\r\n  background: rgba(138, 93, 226, .04)\r\n}\r\n\r\n.borders.borders-detecting.x-loop > .borders-title {\r\n  color: #8a5de2\r\n}\r\n\r\n.borders.borders-detecting.x-condition {\r\n  border-color: rgba(255, 99, 8, .8);\r\n  background: rgba(255, 99, 8, .04)\r\n}\r\n\r\n.borders.borders-detecting.x-condition > .borders-title {\r\n  color: #ff6308\r\n}\r\n\r\n.borders.borders-selecting {\r\n  z-index: 2;\r\n  border-width: 2px\r\n}\r\n\r\n.borders.borders-selecting.x-loop {\r\n  border-color: #9370db;\r\n  background: rgba(147, 112, 219, .04)\r\n}\r\n\r\n.borders.borders-selecting.x-loop > borders-title {\r\n  color: #9370db\r\n}\r\n\r\n.borders.borders-selecting.x-loop.highlight {\r\n  background: transparent\r\n}\r\n\r\n.borders.borders-selecting.x-condition {\r\n  border-color: #ff6308\r\n}\r\n\r\n.borders.borders-selecting.x-condition > borders-title {\r\n  color: #ff6308\r\n}\r\n\r\n.borders.borders-selecting.dragging {\r\n  background: rgba(182, 178, 178, .8);\r\n  border: none\r\n}\r\n</style>","<template>\r\n  <div class=\"form-widget-container\" ref=\"widgetContainer\" @click=\"_selectLayout\">\r\n    <div class=\"yv-design-mode full-height-width noselect\" :class=\"[customClass, layoutType + '-layout']\"\r\n         ref=\"yvDesignScoll\"\r\n         @click=\"_selectLayout\">\r\n      <Bem :designer=\"designer\" :vcxt=\"vcxt\"/>\r\n      <DefaultLayoutDesign v-if=\"!!computDialogVJson\"\r\n                           :designer=\"designer\"\r\n                           :vjson=\"computDialogVJson\"\r\n                           :vcxt=\"vcxt\"\r\n      />\r\n      <component v-else\r\n                 :is=\"getLayoutDesign(designer.vjson)\"\r\n                 :designer=\"designer\"\r\n                 :vjson=\"designer.vjson\"\r\n                 :vcxt=\"vcxt\"\r\n      />\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport $ from 'jquery'\r\nimport _ from 'lodash'\r\nimport Bem from './Bem.vue'\r\nimport Designer from \"./designer\"\r\nimport {getDesignCmp, getLayoutDesign} from \"./yv-designer-desc\"\r\nimport VJsonContext from \"../vjson/VJsonContext\";\r\nimport eventBus from \"../../event-bus\";\r\nimport DefaultLayoutDesign from \"../layout/DefaultLayoutDesign.vue\";\r\n\r\nexport default {\r\n  components: {\r\n    DefaultLayoutDesign,\r\n    Bem\r\n  },\r\n  props: {\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    this.designer.initDesigner()\r\n\r\n    return {\r\n      labelPosition: 'left',\r\n      customClass: '',\r\n      size: 'default',\r\n      calcStyle: {}\r\n    }\r\n  },\r\n  mounted() {\r\n    /* 禁用Firefox默认拖拽搜索功能!! */\r\n    this.disableFirefoxDefaultDrop()\r\n\r\n    this.calcHeight()\r\n    $(window).on('resize', this.calcHeight.bind(this))\r\n\r\n    // $(this.$refs.widgetContainer).on('scroll', () => {\r\n    //   eventBus.$emit('bem-refresh', {sender: this, source: 'scroll'})\r\n    // })\r\n    $(this.$refs.yvDesignScoll).on('scroll', () => {\r\n      eventBus.$emit('bem-refresh', {sender: this, source: 'scroll'})\r\n    })\r\n    // 对子节点的滚动监听无效了 !_!\r\n    // $(this.$refs.widgetContainer).on('scroll', '*', () => {\r\n    //   eventBus.$emit('bem-refresh', {sender: this, source: 'scroll'})\r\n    // })\r\n  },\r\n  unmounted() {\r\n    $(window).off('resize', this.calcHeight.bind(this))\r\n  },\r\n  computed: {\r\n    layoutType() {\r\n      return this.designer.getLayoutType()\r\n    },\r\n    computDialogVJson() {\r\n      return _.find(this.designer.vjson.dialogs, d => d.id === this.designer.selectedDialogId)\r\n    },\r\n  },\r\n  watch: {\r\n    layoutType: {\r\n      handler() {\r\n        this.calcHeight()\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    getDesignCmp,\r\n    getLayoutDesign,\r\n\r\n    _selectLayout() {\r\n      this.designer.setSelected(this.designer.vjson)\r\n    },\r\n\r\n    calcHeight() {\r\n      if(this.$refs.widgetContainer) {\r\n        if (this.designer.getLayoutType() === 'PC') {\r\n          this.$refs.widgetContainer.style.height = (window.innerHeight - 50) + 'px'\r\n        } else {\r\n          this.$refs.widgetContainer.style.height = 'auto'\r\n        }\r\n      }\r\n    },\r\n\r\n    disableFirefoxDefaultDrop() {\r\n      let isFirefox = (navigator.userAgent.toLowerCase().indexOf(\"firefox\") !== -1)\r\n      if (isFirefox) {\r\n        document.body.ondrop = function (event) {\r\n          event.stopPropagation();\r\n          event.preventDefault();\r\n        }\r\n      }\r\n    },\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.yv-design-mode {\r\n  .no-widget-hint {\r\n    margin: 10px;\r\n    background: #f1f1f1;\r\n    height: 80px;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    text-align: center;\r\n    font-size: 18px;\r\n    color: #a7b1bd;\r\n  }\r\n\r\n  .no-widget-hint.draghover {\r\n    background-color: #197aff;\r\n  }\r\n}\r\n</style>\r\n\r\n<style lang=\"less\" scoped>\r\n.container-scroll-bar {\r\n  :deep(.el-scrollbar__wrap), :deep(.el-scrollbar__view) {\r\n    overflow-x: hidden;\r\n  }\r\n}\r\n\r\n.form-widget-container {\r\n  padding: 10px;\r\n  background: #f1f2f3;\r\n\r\n  overflow-x: hidden;\r\n  overflow-y: auto;\r\n\r\n  .yv-design-mode.full-height-width {\r\n    height: 100%;\r\n    padding: 3px;\r\n    background: #ffffff;\r\n\r\n    .form-widget-list {\r\n      min-height: calc(100vh - 56px - 68px);\r\n      padding: 3px;\r\n    }\r\n  }\r\n\r\n  .yv-design-mode.PC-layout {\r\n    min-height: 500px;\r\n    height: 100%;\r\n  }\r\n\r\n  .yv-design-mode.PDA-layout {\r\n    margin: 0 auto;\r\n    max-width: 1024px;\r\n    height: 768px;\r\n    border-radius: 15px;\r\n    box-shadow: 0 0 1px 10px #495060;\r\n  }\r\n\r\n  .yv-design-mode.RF-layout {\r\n    margin: 0 auto;\r\n    width: 480px;\r\n    height: 800px;\r\n    border-radius: 15px;\r\n    //border-width: 10px;\r\n    box-shadow: 0 0 1px 10px #495060;\r\n  }\r\n\r\n  .yv-design-mode :deep(.el-row) {\r\n    padding: 2px;\r\n    border: 1px dashed rgba(170, 170, 170, 0.75);\r\n  }\r\n}\r\n\r\n.grid-cell {\r\n  min-height: 30px;\r\n  border-right: 1px dotted #cccccc;\r\n\r\n}\r\n\r\n.fade-enter-active, .fade-leave-active {\r\n  transition: opacity .5s;\r\n}\r\n\r\n.fade-enter, .fade-leave-to {\r\n  opacity: 0;\r\n}\r\n</style>","<template>\r\n  <el-button link class=\"toolbar-btn\" @click=\"exportJson\" :icon=\"h('i',{class:'x-fa fa-download'})\">\r\n    导出VJson\r\n  </el-button>\r\n  <el-button link class=\"toolbar-btn\" type=\"primary\" @click=\"importDesign\" :icon=\"h('i',{class:'x-fa fa-file-code-o'})\">\r\n    出码\r\n  </el-button>\r\n\r\n  <el-dialog\r\n      v-model=\"dialogVisible\"\r\n      title=\"导出\"\r\n      width=\"70%\"\r\n      :before-close=\"handleClose\"\r\n      :append-to-body=\"true\"\r\n  >\r\n    <yv-src-editor v-model=\"theVjson\" language=\"json\" style=\"height:400px\"/>\r\n    <template #footer>\r\n      <span class=\"dialog-footer\">\r\n        <el-button @click=\"handleClose\">关闭</el-button>\r\n      </span>\r\n    </template>\r\n  </el-dialog>\r\n\r\n  <el-dialog\r\n      v-model=\"dialogVisible2\"\r\n      title=\"design.js 编码内容\"\r\n      width=\"70%\"\r\n      :before-close=\"handleClose2\"\r\n      :append-to-body=\"true\"\r\n  >\r\n    <yv-src-editor v-model=\"theVjson2\" language=\"javascript\" style=\"height:400px\"/>\r\n    <template #footer>\r\n      <span class=\"dialog-footer\">\r\n        <el-button type=\"primary\" @click=\"save\">\r\n          导入\r\n        </el-button>\r\n        <el-button @click=\"handleClose2\">关闭</el-button>\r\n      </span>\r\n    </template>\r\n  </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {h} from 'vue'\r\nimport {Finished} from '@element-plus/icons-vue'\r\nimport VJsonContext from '../vjson/VJsonContext'\r\nimport Designer from \"./designer\";\r\nimport {removeVJsonId} from \"../yv-utils\";\r\n\r\nexport default {\r\n  components: {\r\n    Finished\r\n  },\r\n  props: {\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      dialogVisible: false,\r\n      dialogVisible2: false,\r\n      theVjson: '',\r\n      theVjson2: '',\r\n    }\r\n  },\r\n  computed: {},\r\n  methods: {\r\n    h,\r\n    exportJson() {\r\n      const vj = _.cloneDeep(this.designer.vjson)\r\n      removeVJsonId(vj)\r\n      this.theVjson = JSON.stringify(vj, null, '  ')\r\n\r\n      this.dialogVisible = true\r\n    },\r\n    importDesign() {\r\n      this.theVjson2 = `export default {\r\n  props: {},\r\n  data: {\r\n  },\r\n  computed: {\r\n  },\r\n  methods: {\r\n  }\r\n}`\r\n      this.theVjson2 = this.designer.exportFile()\r\n\r\n      this.dialogVisible2 = true\r\n    },\r\n    save() {\r\n      // try {\r\n      this.designer.loadFormFile(this.theVjson2)\r\n      this.dialogVisible2 = false\r\n\r\n      // } catch (e) {\r\n      //  system.showErrorDialog(e.toString())\r\n      // }\r\n    },\r\n    handleClose() {\r\n      this.dialogVisible = false\r\n    },\r\n    handleClose2() {\r\n      this.dialogVisible2 = false\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <el-button link class=\"toolbar-btn\" @click=\"showPreview\" :icon=\"renderIcon('Eye')\">\r\n    预览\r\n  </el-button>\r\n  <!--\r\n  <el-dialog\r\n      v-model=\"dialogVisible\"\r\n      title=\"预览\"\r\n      width=\"80%\"\r\n      @opened=\"onOpen\"\r\n      class=\"yv-preview fit-height\"\r\n      :draggable=\"true\"\r\n      :before-close=\"closePreview\"\r\n      :close-on-press-escape=\"false\"\r\n      :close-on-click-modal=\"true\"\r\n      :destroy-on-close=\"true\"\r\n      :append-to-body=\"true\"\r\n  >\r\n    <component :is=\"previewComponentName\" v-bind=\"previewComponentProps\" class=\"dialog-preview\"/>\r\n  </el-dialog>\r\n\r\n  <yv-vjson-dialog\r\n      v-model=\"dialogVisible\"\r\n      title=\"预览\"\r\n      width=\"70%\"\r\n      height=\"80%\"\r\n      @open=\"onOpen\"\r\n      @close=\"closePreview\">\r\n    <component :is=\"previewComponentName\" v-bind=\"previewComponentProps\"/>\r\n  </yv-vjson-dialog>\r\n  -->\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport VJsonContext from '../vjson/VJsonContext'\r\nimport Designer from \"./designer\";\r\nimport {parseJsObject} from \"../yv-utils\";\r\nimport {defineComponent, h, markRaw} from \"vue\";\r\nimport YvVjsonLayout from \"../vjson/yv-vjson-layout.vue\";\r\nimport bizMixin from \"../../runtime/bizMixin\";\r\nimport {renderIcon} from \"../../utils\";\r\n\r\nexport default {\r\n  emits: [\"before-review\"],\r\n  props: {\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      dialogVisible: false,\r\n      runtimeVcxt: null,\r\n      previewComponentName: 'div',\r\n      previewComponentProps: {},\r\n    }\r\n  },\r\n  computed: {\r\n    myName() {\r\n      return 'dialogVisible=' + this.dialogVisible\r\n    }\r\n  },\r\n  methods: {\r\n    renderIcon: renderIcon,\r\n    onOpen() {\r\n      console.timeEnd()\r\n    },\r\n    showPreview() {\r\n      const me = this\r\n\r\n      const opt = {cancel: false}\r\n      this.$emit('before-review', opt)\r\n      if (opt.cancel) {\r\n        return\r\n      }\r\n      console.time()\r\n\r\n      /**\r\n       * 生成 mixins, 定义一个空的 YvVjsonObject 对象 进行预览\r\n       */\r\n      let fileContent = _.trim(this.vcxt.designer.exportFile())\r\n      if (_.startsWith(fileContent, 'export default')) {\r\n        fileContent = fileContent.substring('export default'.length)\r\n      }\r\n\r\n      let vexport\r\n      try {\r\n        vexport = parseJsObject(fileContent)\r\n      } catch (e) {\r\n        console.error(e)\r\n        system.showErrorDialog('编译错误, 请修正后再预览', e)\r\n        debugger\r\n        return\r\n      }\r\n\r\n      const id = this.designer.spaceIdList[this.designer.spaceCurrentIndex]\r\n      if (!id) {\r\n        system.showErrorDialog(\"can't found spaceIdList at \" + this.designer.spaceCurrentIndex)\r\n        return\r\n      }\r\n\r\n      const si = this.designer.spaceInfo[id]\r\n      if (!si) {\r\n        system.showErrorDialog(\"can't found spaceInfo at \" + id)\r\n        return\r\n      }\r\n\r\n      const p = si.module.vue.absolutePath\r\n      const _absPath = p.substring(0, p.lastIndexOf('.vue'))\r\n\r\n      const idx = _absPath?.indexOf('/src/pages')\r\n      let _relPath\r\n      if (idx > 0) {\r\n        _relPath = _absPath.substring(idx + 4)\r\n      }\r\n\r\n      const componentOptions = {\r\n        mixins: [vexport, bizMixin],\r\n        data() {\r\n          return {\r\n            _absPath,\r\n            _relPath\r\n          }\r\n        },\r\n        mounted() {\r\n          console.timeEnd()\r\n        },\r\n        unmounted() {\r\n          window['is_preview_mode'] = false\r\n        },\r\n        render() {\r\n          // return h(YvVjsonObject, {vjson: this.vjson, vcxt: this.vcxt})\r\n          return h(YvVjsonLayout, {vjson: this.vjson, vcxt: this.vcxt})\r\n        }\r\n      }\r\n\r\n      window['is_preview_mode'] = true\r\n      system.showDialog(markRaw(defineComponent(componentOptions)), {}).then(res => {\r\n        console.log('then 响应', res)\r\n      })\r\n\r\n    },\r\n    closePreview() {\r\n      this.dialogVisible = false\r\n      this.previewComponentName = 'div'\r\n      this.previewComponentProps = {}\r\n    },\r\n  }\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.dialog-preview.template-one, .dialog-preview.template-two, .dialog-preview.template-three, .dialog-preview.template-four, .dialog-preview.template-five, .dialog-preview.template-six {\r\n  height: 700px;\r\n}\r\n</style>","<template>\r\n  <el-table ref=\"table\" :data=\"tableData\" style=\"width: 100%\">\r\n    <el-table-column fixed=\"left\" width=\"120\">\r\n      <template #default=\"scope\">\r\n        <el-button v-if=\"scope.row.layout === $props.layout\" link type=\"danger\" size=\"small\" @click=\"handleClick(scope.row)\">当前</el-button>\r\n        <el-button v-else-if=\"scope.row.designSupport\" link type=\"primary\" size=\"small\" @click=\"handleClick(scope.row)\">\r\n          选择\r\n        </el-button>\r\n        <el-button v-else link type=\"primary\" size=\"small\" disabled>不支持</el-button>\r\n      </template>\r\n    </el-table-column>\r\n    <el-table-column prop=\"layout\" label=\"名称\" :width=\"200\"/>\r\n    <el-table-column prop=\"name\" label=\"描述\"/>\r\n  </el-table>\r\n</template>\r\n<script>\r\nimport BizMix from '../../runtime/bizMixin'\r\nimport {getLayoutList} from \"../../components/design/yv-designer-desc\";\r\n\r\nexport default {\r\n  mixins: [BizMix],\r\n  props: [\r\n    'layout'\r\n  ],\r\n  mounted() {\r\n  },\r\n  methods: {\r\n    handleClick(row) {\r\n      this.ok({layout: row.layout})\r\n    }\r\n  },\r\n  data() {\r\n    const layouts = getLayoutList()\r\n    return {\r\n      tableData: layouts,\r\n    }\r\n  }\r\n}\r\n\r\n</script>","<template>\r\n  <el-button @click=\"showCode\" :icon=\"renderIcon('Code')\">\r\n    全部代码\r\n    <el-dialog\r\n        v-model=\"dialogVisible\"\r\n        title=\"design.js 代码预览\"\r\n        width=\"80%\"\r\n        :draggable=\"true\"\r\n        :close-on-press-escape=\"false\"\r\n        :close-on-click-modal=\"true\"\r\n        :destroy-on-close=\"true\"\r\n        :append-to-body=\"true\"\r\n    >\r\n      <yv-src-editor v-model=\"code\" :style=\"{height: codeEditorHeight}\"/>\r\n      <template #footer>\r\n        <el-button type=\"primary\" :icon=\"renderIcon('Save')\" @click=\"tryLoadCode\">保存</el-button>\r\n        <el-button :icon=\"renderIcon('Times')\" @click=\"()=>this.dialogVisible=false\">关闭</el-button>\r\n      </template>\r\n    </el-dialog>\r\n  </el-button>\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport VJsonContext from '../vjson/VJsonContext'\r\nimport Designer from \"./designer\";\r\nimport {parseJsObject} from \"../yv-utils\";\r\nimport {defineComponent, h, markRaw, nextTick} from \"vue\";\r\nimport YvVjsonLayout from \"../vjson/yv-vjson-layout.vue\";\r\nimport bizMixin from \"../../runtime/bizMixin\";\r\nimport {renderIcon} from \"../../utils\";\r\n\r\nexport default {\r\n  emits: [\"before-review\"],\r\n  props: {\r\n    designer: Designer,\r\n    vcxt: VJsonContext,\r\n  },\r\n  data() {\r\n    return {\r\n      dialogVisible: false,\r\n      codeEditorHeight: window.innerHeight * 0.6 + 'px',\r\n      code: '',\r\n    }\r\n  },\r\n  computed: {},\r\n  methods: {\r\n    renderIcon: renderIcon,\r\n    showCode() {\r\n      let fileContent = _.trim(this.vcxt.designer.exportFile())\r\n      this.code = fileContent\r\n      this.dialogVisible = true\r\n    },\r\n    tryLoadCode() {\r\n      this.designer.loadFormFile(this.code)\r\n      nextTick(() => {\r\n        system.msg('导入成功')\r\n        this.dialogVisible = false\r\n      })\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <div class=\"design\">\r\n    <div class=\"toolbar\">\r\n      <el-button link class=\"toolbar-btn\" :icon=\"renderIcon('DocumentAdd')\" @click=\"showNewModuleDialog\">新建功能\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" :icon=\"renderIcon('InfoFilled')\" title=\"模块详情\"\r\n                 :disabled=\"designer.spaceCurrentIndex<0\"\r\n                 @click=\"()=>{moduleInfoDialogShow=true}\"/>\r\n      <el-divider direction=\"vertical\"/>\r\n      <el-button link class=\"toolbar-btn\" @click=\"save\" :icon=\"renderIcon('fa Save')\">\r\n        保存\r\n      </el-button>\r\n      <!--\r\n      <el-button link class=\"toolbar-btn\" :disabled=\"undoDisabled\" title=\"\" @click=\"undoHistory\"\r\n                 :icon=\"renderIcon('x-fa fa-undo')\">\r\n        撤销\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" :disabled=\"redoDisabled\" title=\"\" @click=\"redoHistory\"\r\n                 :icon=\"renderIcon('x-fa fa-repeat')\">\r\n        重做\r\n      </el-button>\r\n      -->\r\n      <el-button link class=\"toolbar-btn\" title=\"\" @click=\"revertFile\"\r\n                 :icon=\"renderIcon('fa Repeat')\">\r\n        还原文件\r\n      </el-button>\r\n      <el-divider direction=\"vertical\"/>\r\n      <el-button link class=\"toolbar-btn\" :disabled=\"clipCopyDisabled\" title=\"\" @click=\"clipCopy\"\r\n                 :icon=\"renderIcon('DocumentCopy')\">\r\n        复制\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" :disabled=\"pasteDisabled\" title=\"\" @click=\"clipPaste\"\r\n                 :icon=\"renderIcon('List')\">\r\n        粘贴\r\n      </el-button>\r\n      <el-divider direction=\"vertical\"/>\r\n      <el-button link class=\"toolbar-btn\" @click=\"clearFormWidget\" :icon=\"renderIcon('element RefreshLeft')\">重置布局\r\n      </el-button>\r\n      <YvPreview :designer=\"designer\" :vcxt=\"vcxt\" @before-review=\"beforeReview\"/>\r\n      <el-button link class=\"toolbar-btn\" @click=\"showCodeWindow\" :icon=\"renderIcon('fa Code')\">代码窗口\r\n      </el-button>\r\n      <!--\r\n      <YvDesignerExport :designer=\"designer\" :vcxt=\"vcxt\"/>\r\n      -->\r\n\r\n    </div>\r\n    <div class=\"sub-toolbar\">\r\n      <div class=\"editor-fixed\" style=\"cursor: pointer;padding: 0 5px;\" @click.stop=\"showAllEvents($event)\">\r\n        <el-icon>\r\n          <Memo/>\r\n        </el-icon>\r\n        <el-drawer v-model=\"eventMenuIsOpen\" title=\"全部事件\" direction=\"ltr\" :size=\"600\">\r\n          <el-table :data=\"eventMenus\" style=\"height:100%\" @row-click=\"handleEventMap\">\r\n            <el-table-column prop=\"displayName\" label=\"组件\" :width=\"400\"/>\r\n            <el-table-column prop=\"label\" label=\"属性名\" :width=\"200\"/>\r\n          </el-table>\r\n        </el-drawer>\r\n      </div>\r\n      <el-select v-model=\"bindKey\" placeholder=\"选择属性或事件\" placement=\"bottom\"\r\n                 fit-input-width\r\n                 style=\"min-width: 300px;\" :disabled=\"_bindKeyDisabled\"\r\n                 @change=\"_bindKeyClick\">\r\n        <el-option-group key=\"event\" label=\"事件\">\r\n          <el-option v-for=\"item in componentDesc.events\" :label=\"item.name\" :value=\"item.name\">\r\n            <span :style=\"{float: 'left', fontWeight: tryGetEvent(item.name)}\">{{ item.name }}</span>\r\n            <span style=\"float: right; color: var(--el-text-color-secondary); font-size: 13px;\">{{ item.desc }}</span>\r\n          </el-option>\r\n        </el-option-group>\r\n        <el-option-group key=\"bind\" label=\"属性\">`\r\n          <el-option v-for=\"item in componentDesc.bind\" :label=\"item.name\" :value=\"item.name\">\r\n            <span :style=\"{float: 'left', fontWeight: tryGetBind(item.name)}\">{{ item.name }}</span>\r\n            <span style=\"float: right; color: var(--el-text-color-secondary); font-size: 13px;\">{{ item.desc }}</span>\r\n          </el-option>\r\n        </el-option-group>\r\n      </el-select>\r\n\r\n      <div class=\"toolbar-icon\"><span class=\"icon iconfont icon-equal\"></span></div>\r\n      <!--\r\n      <div class=\"btn\"><span class=\"icon iconfont icon-icon_fx1\"></span></div>\r\n      -->\r\n      <div class=\"editor-fixed\">\r\n        <el-icon>\r\n          <Place/>\r\n        </el-icon>\r\n      </div>\r\n      <!--\r\n      <el-input v-model=\"bindValue\" :rows=\"_bindValueMaxRows\"\r\n                :disabled=\"!bindKey\"\r\n                @focus=\"_bindValueFocus\"\r\n                @blur=\"_bindValueBlur\"\r\n                style=\"z-index: 10;\"\r\n                type=\"textarea\"\r\n                placeholder=\"函数体\"/>\r\n      -->\r\n      <div class=\"design-code-wrap\">\r\n        <div :class=\"bindKey?'':'editor-disabled'\"></div>\r\n        <yv-src-editor v-model=\"bindValue\" language=\"javascript\" :style=\"{height:(_isExpressExpand?310:31)+'px'}\"\r\n                       ref=\"bindValueEditor\"\r\n                       :class=\"_isExpressExpand?'expand':''\"\r\n                       express-mode\r\n                       @editor-focus=\"_bindValueFocus\"\r\n                       @editor-blur=\"_bindValueBlur\"\r\n        />\r\n      </div>\r\n\r\n    </div>\r\n    <div class=\"content\">\r\n      <div class=\"tree-menu\">\r\n        <div :class=\"(currentTab === '模块'?'selected':'')\" @click=\"selectTab('模块')\" title=\"模块\">\r\n          <span class=\"icon iconfont icon-mokuai1\"></span>\r\n        </div>\r\n        <div :class=\"(currentTab === '工具箱'?'selected':'')\" @click=\"selectTab('工具箱')\" title=\"工具箱\"><span\r\n            class=\"icon iconfont icon-gongjuxiang\"></span></div>\r\n        <div :class=\"(currentTab === '收藏'?'selected':'')\" @click=\"selectTab('收藏')\" title=\"收藏\"><span\r\n            class=\"icon iconfont icon-shoucang\"></span></div>\r\n        <div :class=\"(currentTab === '大纲'?'selected':'')\" @click=\"selectTab('大纲')\" title=\"大纲\"><span\r\n            class=\"icon iconfont icon-kechengdagang\"></span></div>\r\n        <div :class=\"(currentTab === 'API'?'selected':'')\" @click=\"selectTab('API')\" title=\"API\"><span\r\n            class=\"icon iconfont icon-API\"></span></div>\r\n      </div>\r\n      <div class=\"content-split\">\r\n        <split :class=\"[this._hideLeft ? 'hideLeft1':'','default-theme','split-wrap']\" @onDrag=\"dragEnd\"\r\n               :first-area-default-size=\"300\" :last-area-default-size=\"300\">\r\n          <split-area :min-size='5' :size='15' class=\"left\">\r\n            <component\r\n                :is=\"leftCmp\"\r\n                @hide-this=\"hideLeft\"\r\n                v-bind=\"leftCmpProps\"\r\n                @openModule=\"openModule\"\r\n                :showNewModule=\"$refs.moduleDialog\"\r\n                :ref=\"setLeftCmp\"\r\n            />\r\n          </split-area>\r\n          <split-area :size=\"70\" class=\"center\">\r\n            <div v-if=\"designer.spaceCurrentIndex<0\">\r\n              <el-empty description=\"未打开模块\"></el-empty>\r\n            </div>\r\n            <template v-else>\r\n              <el-row class=\"content-tabs\">\r\n                <template v-for=\"(id,idx) in designer.spaceIdList\">\r\n                  <el-button :class=\"idx===designer.spaceCurrentIndex? 'selected':''\"\r\n                             @click=\"designer.switchSpace(idx).finally()\">{{\r\n                      designer.spaceInfo[id].label\r\n                    }}\r\n                    <el-icon @click.stop=\"designer.closeSpace(idx).finally()\">\r\n                      <Close/>\r\n                    </el-icon>\r\n                  </el-button>\r\n                </template>\r\n              </el-row>\r\n              <yv-designer-paint :designer=\"designer\" :vcxt=\"vcxt\"/>\r\n              <div class=\"toolbar-bottom\">\r\n                <el-button-group class=\"btn-left\">\r\n                  <el-button :type=\"layoutType === 'PC' ?'primary':'default'\" @click=\"changeLayoutType('PC')\">PC\r\n                  </el-button>\r\n                  <el-button :type=\"layoutType === 'PDA' ?'primary':'default'\" @click=\"changeLayoutType('PDA')\">PDA\r\n                  </el-button>\r\n                  <el-button :type=\"layoutType === 'RF' ?'primary':'default'\" @click=\"changeLayoutType('RF')\">RF\r\n                  </el-button>\r\n                </el-button-group>\r\n\r\n                <div class=\"btns-add-dialog\">\r\n                  <template v-for=\"dlg in dialogs\">\r\n                    <el-button v-if=\"dlg.type==='main'\" :type=\"dlg.isSelected?'primary':'default'\"\r\n                               @click=\"selectDialogId(dlg.id)\">{{ dlg.title }}\r\n                    </el-button>\r\n                    <el-dropdown split-button trigger=\"click\"\r\n                                 v-else\r\n                                 :type=\"dlg.isSelected?'primary':'default'\"\r\n                                 @click=\"selectDialogId(dlg.id)\"\r\n\r\n                    >{{ dlg.title }}\r\n                      <template #dropdown>\r\n                        <el-dropdown-menu>\r\n                          <el-dropdown-item @click=\"removeDialogById(dlg.id)\">删除</el-dropdown-item>\r\n                        </el-dropdown-menu>\r\n                      </template>\r\n                    </el-dropdown>\r\n                  </template>\r\n                  <el-button class=\"add\" link @click=\"createDialog\" :icon=\"renderIcon('Plus')\"/>\r\n                </div>\r\n\r\n                <yv-preview-code class=\"btn-right\" :designer=\"designer\" :vcxt=\"vcxt\" @before-review=\"beforeReview\"/>\r\n              </div>\r\n            </template>\r\n          </split-area>\r\n          <split-area :size=\"15\" :min-size='5'>\r\n            <component :is=\"currentPropComponent\"\r\n                       :vjson=\"currentVJson\"\r\n                       :designer=\"designer\"\r\n                       :vcxt=\"vcxt\"\r\n            />\r\n          </split-area>\r\n        </split>\r\n      </div>\r\n    </div>\r\n    <YvStudioModuleDialog ref=\"moduleDialog\" @submitNewModule=\"submitNewModule\"/>\r\n\r\n    <el-dialog title=\"添加对话框\" v-model=\"createDialogShow\" :append-to-body=\"true\" width=\"300px\"\r\n               @opened=\"createDialogOpened\">\r\n      <el-form :model=\"createDialogForm\" ref=\"vForm\" :rules=\"[]\" label-position=\"right\" label-width=\"80px\"\r\n               size=\"default\" @submit.native.prevent>\r\n        <el-form-item label=\"引用名\" prop=\"reference\">\r\n          <el-input ref=\"createDialogTitle\" v-model=\"createDialogForm.reference\" type=\"text\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"标题\" prop=\"title\">\r\n          <el-input v-model=\"createDialogForm.title\" type=\"text\" clearable/>\r\n        </el-form-item>\r\n        <el-form-item label=\"类型\" prop=\"xtype\">\r\n          <el-select v-model=\"createDialogForm.xtype\">\r\n            <el-option label=\"对话框\" value=\"dialog\"/>\r\n            <el-option label=\"抽屉\" value=\"drawer\"/>\r\n          </el-select>\r\n        </el-form-item>\r\n        <el-form-item label=\"宽度\" prop=\"width\">\r\n          <el-input v-model=\"createDialogForm.width\" clearable/>\r\n        </el-form-item>\r\n      </el-form>\r\n      <template #footer>\r\n        <div>\r\n          <el-button type=\"primary\" @click=\"createDialogCommit\">确认</el-button>\r\n        </div>\r\n      </template>\r\n    </el-dialog>\r\n\r\n    <el-dialog title=\"模块详情\" v-model=\"moduleInfoDialogShow\" :append-to-body=\"true\">\r\n      <el-descriptions size=\"large\" direction=\"horizontal\" :column=\"1\">\r\n        <el-descriptions-item label=\"名称\">{{ getModuleInfo().label }}</el-descriptions-item>\r\n        <el-descriptions-item label=\"绝对路径\">{{ getModuleInfo().module.designJs.absolutePath }}</el-descriptions-item>\r\n        <el-descriptions-item label=\"修改时间\">{{\r\n            formatTimestamp(getModuleInfo().module.designJs.lastModified)\r\n          }}\r\n        </el-descriptions-item>\r\n        <el-descriptions-item label=\"Vue文件\">{{ getModuleInfo().module.vue.absolutePath }}</el-descriptions-item>\r\n      </el-descriptions>\r\n    </el-dialog>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from \"lodash\"\r\nimport {h, markRaw, nextTick, reactive, toRaw} from 'vue'\r\nimport {Close, Memo, Place} from '@element-plus/icons-vue'\r\nimport {ElEmpty} from 'element-plus'\r\nimport YvStudioDesignApi from './yv-studio-design-api.vue'\r\nimport YvStudioDesignFav from './yv-studio-design-fav.vue'\r\nimport YvStudioDesignFile from './yv-studio-design-file.vue'\r\nimport YvStudioDesignOutline from './yv-studio-design-outline.vue'\r\nimport YvStudioDesignToolbox from './yv-studio-design-toolbox.vue'\r\nimport YvStudioModuleDialog from \"./yv-studio-module-dialog.vue\"\r\nimport YvDesignerPaint from \"../../components/design/yv-designer-paint.vue\"\r\nimport Designer from \"../../components/design/designer\"\r\nimport VJsonContext from \"../../components/vjson/VJsonContext\"\r\nimport {getComponentDesc, getDesignPropCmp, getLayoutEmptyTemplate} from \"../../components/design/yv-designer-desc\"\r\nimport YvDesignerExport from \"../../components/design/yv-designer-export.vue\"\r\nimport YvPreview from \"../../components/design/yv-preview.vue\"\r\nimport {renderIcon} from '../../utils'\r\nimport Split from '../../components/split.vue'\r\nimport SplitArea from '../../components/split-area.vue'\r\nimport YvStudioDesignResetLayout from './yv-studio-design-reset-layout.vue'\r\nimport eventBus from \"../../event-bus\"\r\nimport TsLanguageSupport from \"../../components/design/TsLanguageSupport\"\r\nimport YvPreviewCode from \"../../components/design/yv-preview-code.vue\"\r\nimport {Dialog as DialogDefault, Drawer as DrawerDefault} from '../../components/vjson/Defaults'\r\n\r\nwindow.onload = function () {\r\n  // 两个窗口之间通信消息\r\n  // 关联 MultiPage.vue:openStudioModule\r\n  // 关联 TreeMenuLayout.vue:showStudio\r\n  window.addEventListener('message', function (event) {\r\n    const path = event.data?.path\r\n    if (!path) {\r\n      return\r\n    }\r\n\r\n    // path格式: /src/pages/rule/lot/RuleLot.vue\r\n    const currentYvStudioDesign = window['current_yv_studio_design']\r\n    if (!currentYvStudioDesign) {\r\n      return\r\n    }\r\n    system.invokeStudio(\"DesignModuleFile@getPcModuleByVue\", {path: path}).then(({data}) => {\r\n      if (data[0]) {\r\n        system.invokeStudio(\"DesignModuleFile@getModuleFileContent\", data[0]).then(({data: content}) => {\r\n          currentYvStudioDesign.openModule(content, data[0])\r\n        })\r\n      }\r\n    })\r\n  });\r\n}\r\n\r\nexport default {\r\n  components: {\r\n    YvPreviewCode,\r\n    YvDesignerPaint,\r\n    YvStudioDesignApi,\r\n    YvStudioDesignFav,\r\n    YvStudioDesignFile,\r\n    YvStudioDesignOutline,\r\n    YvStudioDesignToolbox,\r\n    YvDesignerExport,\r\n    YvPreview,\r\n    YvStudioModuleDialog,\r\n    Split,\r\n    SplitArea, Close, Place, Memo\r\n  },\r\n  data() {\r\n    const raw = new Designer(this)\r\n    const designer = reactive(raw)\r\n    window['designer'] = designer\r\n\r\n    const raw2 = new VJsonContext()\r\n    const vcxt = reactive(raw2)\r\n\r\n    vcxt.designer = designer\r\n    vcxt.designerConfig = this.designerConfig\r\n    TsLanguageSupport.instance.init(designer)\r\n\r\n    window.getDesigner = () => {\r\n      return toRaw(designer)\r\n    }\r\n    window.getVcxt = () => {\r\n      return toRaw(vcxt)\r\n    }\r\n\r\n    return {\r\n      ignore: {},\r\n      designer: designer,\r\n      vcxt: vcxt,\r\n\r\n      /**\r\n       * leftBar 相关属性\r\n       */\r\n      currentTab: \"模块\",\r\n      leftCmp: markRaw(() => {\r\n        // <el-empty desc='1212' />\r\n        return h(ElEmpty, {description: '请选择'})\r\n      }),\r\n\r\n      /**\r\n       * props 相关属性\r\n       */\r\n      leftCmpProps: {},\r\n      currentPropComponent: markRaw(() => {\r\n        // <el-empty desc='1212' />\r\n        return h(ElEmpty, {description: '未选择组件'})\r\n      }),\r\n      currentVJson: undefined,\r\n\r\n      /**\r\n       * bind 相关属性\r\n       */\r\n      bindKey: '',\r\n      bindValue: '',\r\n      _bindKeyDisabled: true,\r\n      _bindValueChangeAllow: false,\r\n      _hideLeft: false,\r\n      _isExpressExpand: false,\r\n\r\n      eventMenus: [],\r\n      eventMenuIsOpen: false,\r\n\r\n      moduleInfoDialogShow: false,\r\n      createDialogShow: false,\r\n      createDialogForm: {\r\n        xtype: 'dialog',\r\n        title: '',\r\n        width: '400px',\r\n      },\r\n      componentDesc: {\r\n        bind: [],\r\n        events: []\r\n      },\r\n    }\r\n  },\r\n  mounted() {\r\n    this.designer.loadSpace()\r\n    window['current_yv_studio_design'] = this\r\n  },\r\n  activated() {\r\n    const me = this;\r\n    let running = false\r\n    this.clearInt = setInterval(() => {\r\n      if (running || me.__revertFile2) return;\r\n      const vuePath = this.getModuleInfo().module.vue.absolutePath;\r\n      const vuePathLastModified = this.getModuleInfo().module.vue.lastModified;\r\n      const designJsPath = this.getModuleInfo().module.designJs.absolutePath;\r\n      const designJsPathLastModified = this.getModuleInfo().module.designJs.lastModified;\r\n      if (this.ignore[designJsPath]) return;\r\n      running = true;\r\n      system.invokeStudio(\"DesignModuleFile@checkLastModified\", {\r\n        vuePath,\r\n        vuePathLastModified,\r\n        designJsPath,\r\n        designJsPathLastModified,\r\n      }).then(res => {\r\n        if (res.data === true) {\r\n          me.revertFile2();\r\n          me.__revertFile2 = true;\r\n        }\r\n        // console.log(\"@@@\", res);\r\n      }).finally(() => {\r\n        running = false;\r\n      })\r\n    }, 3_000_000);\r\n  },\r\n  deactivated() {\r\n    if (this.clearInt) {\r\n      clearInterval(this.clearInt);\r\n    }\r\n  },\r\n  watch: {\r\n    '_isExpressExpand': {\r\n      handler(newVal) {\r\n        TsLanguageSupport.instance.setActived(newVal)\r\n      }\r\n    },\r\n    'currentTab': {\r\n      immediate: true,\r\n      handler(newVal) {\r\n        this.leftCmpProps = {designer: this.designer, vcxt: this.vcxt}\r\n        switch (newVal) {\r\n          case '模块':\r\n            this.leftCmp = markRaw(YvStudioDesignFile)\r\n            break;\r\n          case '工具箱':\r\n            this.leftCmp = markRaw(YvStudioDesignToolbox)\r\n            break;\r\n          case '收藏':\r\n            this.leftCmp = markRaw(YvStudioDesignFav)\r\n            break;\r\n          case '大纲':\r\n            this.leftCmp = markRaw(YvStudioDesignOutline)\r\n            break;\r\n          case 'API':\r\n            this.leftCmp = markRaw(YvStudioDesignApi)\r\n            break;\r\n        }\r\n      }\r\n    },\r\n    'designer.selectedWidget': {\r\n      handler(newVal) {\r\n        this.currentPropComponent = getDesignPropCmp(newVal, designer)\r\n        this.currentVJson = newVal\r\n\r\n        if (newVal) {\r\n          this._bindKeyDisabled = false\r\n          if (!newVal.xtype && typeof newVal.layout === \"string\") {\r\n            // 布局属性池\r\n            this.componentDesc = {\r\n              bind: [],\r\n              events: this.isRf ? [\r\n                {name: 'onCreated', desc: '创建时触发'},\r\n                {name: 'onMounted', desc: '渲染后触发'},\r\n                {name: 'onUnmounted', desc: '销毁后触发'},\r\n                {name: 'onGoBack', desc: '返回到页面时候触发'},\r\n              ] : [\r\n                {name: 'onCreated', desc: '创建时触发'},\r\n                {name: 'onMounted', desc: '渲染后触发'},\r\n                {name: 'onUnmounted', desc: '销毁后触发'},\r\n              ]\r\n            }\r\n            const selectedDialogId = this.designer.selectedDialogId\r\n            if (selectedDialogId && !this.isRf) {\r\n              const dialog = _.find(newVal.dialogs, d => d.id === selectedDialogId)\r\n              if (dialog) {\r\n                this.componentDesc.events.push(\r\n                    {name: 'closed', desc: '关闭后触发'},\r\n                    {name: 'opened', desc: '打开后触发'},\r\n                )\r\n\r\n              } else {\r\n                system.msg('未找到对应的dialog ' + selectedDialogId)\r\n              }\r\n            }\r\n\r\n          } else {\r\n            // 组件属性池\r\n            const desc = getComponentDesc(newVal.xtype)\r\n            if (!desc) {\r\n              // 没有找到组件\r\n              this.componentDesc = {\r\n                bind: [],\r\n                events: []\r\n              }\r\n\r\n            } else {\r\n              this.componentDesc = {\r\n                bind: desc.props.filter(i => i.bindable === true),\r\n                events: desc.events\r\n              }\r\n            }\r\n          }\r\n\r\n        } else {\r\n          this._bindKeyDisabled = true\r\n        }\r\n\r\n        this.bindKey = ''\r\n      }\r\n    },\r\n    'bindKey': {\r\n      handler(bindKey) {\r\n        if (!bindKey) {\r\n          this._bindValueChangeAllow = false\r\n          this.bindValue = ''\r\n          nextTick(() => {\r\n            this._bindValueChangeAllow = true\r\n          })\r\n          return\r\n        }\r\n\r\n        let eventContent = ''\r\n\r\n        const bindTarget = _.find(this.componentDesc.bind, i => i.name === bindKey)\r\n        if (bindTarget != null) {\r\n          if (this.designer.selectedWidget.bind) {\r\n            eventContent = this.designer.selectedWidget.bind[bindKey] ?? ''\r\n          }\r\n        }\r\n\r\n        const eventTarget = _.find(this.componentDesc.events, i => i.name === bindKey)\r\n        if (eventTarget != null) {\r\n          if (this.designer.selectedWidget.listeners) {\r\n            eventContent = this.designer.selectedWidget.listeners[bindKey] ?? ''\r\n          }\r\n        }\r\n\r\n        this._bindValueChangeAllow = false\r\n        this.bindValue = eventContent\r\n        nextTick(() => {\r\n          this._bindValueChangeAllow = true\r\n        })\r\n      }\r\n    },\r\n    'bindValue': {\r\n      handler(bindValue) {\r\n        if (!this._bindValueChangeAllow) {\r\n          return\r\n        }\r\n\r\n        // this.saveCodeRaise(this, bindValue)\r\n        const componentDesc = toRaw(this.componentDesc)\r\n        let selectedWidget = this.designer.selectedWidget\r\n        const bindKey = this.bindKey\r\n\r\n        // 如果选中的是布局，并且选中了对话框，就吧对话框的 vjson 当成 selectedWidget\r\n        const selectedDialogId = this.designer.selectedDialogId\r\n        if (selectedDialogId && selectedWidget.dialogs && selectedWidget.layout) {\r\n          const dialog = _.find(selectedWidget.dialogs, d => d.id === selectedDialogId)\r\n          if (dialog) {\r\n            selectedWidget = dialog\r\n          } else {\r\n            system.msg('未找到对应的dialog ' + selectedDialogId)\r\n          }\r\n        }\r\n\r\n        this.saveCodeRaise(this, componentDesc, selectedWidget, bindKey, bindValue)\r\n      }\r\n    }\r\n  },\r\n  computed: {\r\n    dialogs() {\r\n      const selectedDialogId = this.designer.selectedDialogId\r\n      const result = [\r\n        {title: '主界面', type: 'main', isSelected: !selectedDialogId}\r\n      ]\r\n      _.forEach(this.designer.vjson.dialogs, (dialog, idx) => {\r\n        result.push({\r\n          title: dialog.title ?? '对话框' + idx,\r\n          id: dialog.id,\r\n          isSelected: selectedDialogId === dialog.id,\r\n          type: 'dialog'\r\n        })\r\n      })\r\n\r\n      return result\r\n    },\r\n\r\n    undoDisabled() {\r\n      return !this.designer.undoEnabled()\r\n    },\r\n\r\n    redoDisabled() {\r\n      return !this.designer.redoEnabled()\r\n    },\r\n\r\n    clipCopyDisabled() {\r\n      return this.designer.mulSelect.length <= 0\r\n    },\r\n\r\n    pasteDisabled() {\r\n      return !this.designer.clipData || !this.designer.selectedWidget\r\n    },\r\n\r\n    layoutType() {\r\n      return this.designer.getLayoutType()\r\n    },\r\n\r\n    isRf() {\r\n      return this.designer.vjson.layout === \"MobileDefaultLayout\";\r\n    },\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    createDialogOpened() {\r\n      this.$refs.createDialogTitle.focus()\r\n    },\r\n    createDialog() {\r\n      this.createDialogShow = true\r\n      const seq = (_.size(this.designer.vjson.dialogs ?? []) + 1)\r\n      this.createDialogForm = {\r\n        xtype: 'dialog',\r\n        title: '对话框' + seq,\r\n        reference: 'dialog' + seq,\r\n        width: '400px',\r\n        isShow: false\r\n      }\r\n    },\r\n    createDialogCommit() {\r\n      const id = _.uniqueId('dialog')\r\n      const newVJson = {\r\n        id: id,\r\n      }\r\n\r\n      if (!this.designer.vjson.dialogs) {\r\n        this.designer.vjson.dialogs = []\r\n      }\r\n      if (this.createDialogForm.xtype === 'dialog') {\r\n        _.assign(newVJson, {\r\n          width: this.createDialogForm.width,\r\n          ...DialogDefault\r\n        })\r\n\r\n      } else if (this.createDialogForm.xtype === 'drawer') {\r\n        _.assign(newVJson, {\r\n          size: this.createDialogForm.width,\r\n          ...DrawerDefault\r\n        })\r\n      }\r\n\r\n      _.assign(newVJson, {\r\n        xtype: this.createDialogForm.xtype,\r\n        title: this.createDialogForm.title,\r\n        reference: this.createDialogForm.reference,\r\n        items: []\r\n      })\r\n\r\n      this.designer.vjson.dialogs.push(newVJson)\r\n      this.designer.emitHistoryChange()\r\n\r\n      this.createDialogShow = false\r\n      this.$nextTick(() => {\r\n        this.designer.selectedDialogId = id\r\n      })\r\n    },\r\n    selectDialogId(dialogId) {\r\n      this.designer.selectedDialogId = dialogId\r\n      this.designer.clearSelected()\r\n      this.$nextTick(() => {\r\n        this.designer.setSelected(this.designer.vjson)\r\n        this.designer.saveCurrentHistoryStep()\r\n      })\r\n    },\r\n    removeDialogById(dialogId) {\r\n      this.designer.selectedDialogId = null\r\n      _.remove(this.designer.vjson.dialogs, i => i.id === dialogId)\r\n      this.$nextTick(() => {\r\n        this.designer.saveCurrentHistoryStep()\r\n      })\r\n    },\r\n    showCodeWindow() {\r\n      const id = this.designer.spaceIdList[this.designer.spaceCurrentIndex]\r\n      const newWindow = window.open('/code.html?id=' + id, id, 'status=yes,toolbar=no,scrollbars=1,titlebar=no,width=800,height=600,top=200,left=200');\r\n      if (newWindow.focus) {\r\n        newWindow.focus()\r\n      }\r\n\r\n      window['designerFuncChangeCallback'] = (id, funcObj, funcPropName, newValue) => {\r\n        const nowId = this.designer.spaceIdList[this.designer.spaceCurrentIndex]\r\n\r\n        if (id === nowId) {\r\n          // 被通知，当前页面的内容被重读\r\n          this.designer.loadFormContentFromStorage().finally()\r\n        }\r\n      }\r\n    },\r\n    revertFile() {\r\n      const id = this.designer.spaceIdList[this.designer.spaceCurrentIndex]\r\n      const info = this.designer.spaceInfo[id]\r\n      if (info?.module) {\r\n        const {path, name} = info.module\r\n        system.confirm('文件将重新从服务端拉取，真的要这样？ 路径:' + path + '/' + name).then(() => {\r\n          system.invokeStudio(\"DesignModuleFile@getModuleFileContent\", info.module).then(({data: content}) => {\r\n            if (content?.designJs) {\r\n              this.designer.loadFormFile(content.designJs)\r\n              system.msg('还原文件成功')\r\n              this.getModuleInfo().module.designJs.lastModified = content.designJsPathLastModified;\r\n              this.getModuleInfo().module.vue.lastModified = content.vuePathLastModified;\r\n              this.designer.saveSpace().finally();\r\n            } else {\r\n              system.showErrorDialog('无法获取文件内容:' + id)\r\n            }\r\n          })\r\n        })\r\n      } else {\r\n        system.showErrorDialog('找不到文件信息:' + id)\r\n      }\r\n    },\r\n    revertFile2() {\r\n      const id = this.designer.spaceIdList[this.designer.spaceCurrentIndex]\r\n      const info = this.designer.spaceInfo[id]\r\n      if (info?.module) {\r\n        const {path, name} = info.module\r\n        system.confirm('文件发生变化，需要重新从服务端拉取？ 路径:' + path + '/' + name).then(() => {\r\n          system.invokeStudio(\"DesignModuleFile@getModuleFileContent\", info.module).then(({data: content}) => {\r\n            if (content?.designJs) {\r\n              this.designer.loadFormFile(content.designJs)\r\n              system.msg('还原文件成功')\r\n              this.getModuleInfo().module.designJs.lastModified = content.designJsPathLastModified;\r\n              this.getModuleInfo().module.vue.lastModified = content.vuePathLastModified;\r\n              this.designer.saveSpace().finally();\r\n            } else {\r\n              system.showErrorDialog('无法获取文件内容:' + id)\r\n            }\r\n          })\r\n        }).catch(() => {\r\n          // console.log(\"@#￥@@#\");\r\n          this.ignore[info.module.designJs.absolutePath] = true;\r\n        }).finally(() => {\r\n          this.__revertFile2 = false;\r\n        })\r\n      } else {\r\n        system.showErrorDialog('找不到文件信息:' + id)\r\n      }\r\n    },\r\n    showAllEvents(evt) {\r\n      const eventMap = this.designer.buildEventMap()\r\n\r\n      this.eventMenus = eventMap\r\n      this.eventMenuIsOpen = true\r\n    },\r\n    handleEventMap(row, column, evt) {\r\n      const {cmpId, propName} = row\r\n      if (!cmpId) {\r\n        system.msg(\"can't select cmpId:\" + cmpId)\r\n        return\r\n      }\r\n      if (cmpId === 'ROOT') {\r\n        this.eventMenuIsOpen = false\r\n        this.designer.setSelected(this.designer.vjson)\r\n        nextTick(() => {\r\n          this.bindKey = propName\r\n          nextTick(() => {\r\n            this.$refs.bindValueEditor.focus()\r\n          })\r\n        })\r\n        return\r\n      }\r\n      this.designer.selectById(cmpId)\r\n      nextTick(() => {\r\n        if (this.designer.selectedId === cmpId) {\r\n          this.eventMenuIsOpen = false\r\n          this.bindKey = propName\r\n          nextTick(() => {\r\n            this.$refs.bindValueEditor.focus()\r\n          })\r\n\r\n        } else {\r\n          system.msg(\"can't select \" + cmpId)\r\n        }\r\n      })\r\n    },\r\n    _bindKeyClick() {\r\n      this.$nextTick(() => {\r\n        _.defer(() => {\r\n          this.$refs.bindValueEditor.focus()\r\n        })\r\n      })\r\n    },\r\n    formatTimestamp(timestamp) {\r\n      if (typeof timestamp === 'string') {\r\n        timestamp = parseInt(timestamp)\r\n      }\r\n      const date = new Date(timestamp)\r\n      const Y = date.getFullYear()\r\n      const M = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1\r\n      const D = date.getDate()\r\n      return `${Y}-${M}-${D} ${date.toTimeString().substr(0, 8)}`\r\n    },\r\n    getModuleInfo() {\r\n      // console.log(\"@@ this.designer.spaceIdList\")\r\n      const id = this.designer.spaceIdList[this.designer.spaceCurrentIndex]\r\n      if (!id) {\r\n        return {}\r\n      }\r\n\r\n      return this.designer.spaceInfo[id] ?? {}\r\n    },\r\n    dragEnd() {\r\n      eventBus.$emit('bem-refresh', {sender: this, source: 'split-dragEnd'})\r\n    },\r\n    clipCopy() {\r\n      this.designer.clipCopy()\r\n    },\r\n    clipPaste() {\r\n      this.designer.tryPaste()\r\n    },\r\n    _bindValueFocus() {\r\n      if (this.bindKey) {\r\n        this._isExpressExpand = true\r\n      }\r\n    },\r\n    _bindValueBlur() {\r\n      this._isExpressExpand = false\r\n    },\r\n    setLeftCmp(ref) {\r\n      switch (this.currentTab) {\r\n        case '模块':\r\n          this.left_1 = ref\r\n          break;\r\n        case '工具箱':\r\n          this.left_2 = ref\r\n          break;\r\n        case '收藏':\r\n          this.left_3 = ref\r\n          break;\r\n        case '大纲':\r\n          this.left_4 = ref\r\n          break;\r\n        case 'API':\r\n          this.left_5 = ref\r\n          break;\r\n      }\r\n    },\r\n    beforeReview(review) {\r\n      if (this.$refs._design_code) {\r\n        try {\r\n          this.$refs._design_code.tryLoadFile()\r\n\r\n        } catch (e) {\r\n          system.showErrorDialog('编译错误, 请修正后再预览', e)\r\n          debugger\r\n          review.cancel = true\r\n        }\r\n      }\r\n    },\r\n\r\n    hideLeft() {\r\n      this._hideLeft = true\r\n      // this.currentTab = ''\r\n    },\r\n\r\n    save() {\r\n      const module = this.designer.spaceIdList[this.designer.spaceCurrentIndex]\r\n      if (!module) return;\r\n      const designJs = this.designer.exportFile()\r\n      system.invokeStudio(\"DesignModuleFile@saveFile\", {\r\n        absolutePath: `${module}.design.js`,\r\n        content: designJs,\r\n      }).then((res) => {\r\n        system.msg('保存成功')\r\n        this.getModuleInfo().module.designJs.lastModified = res.data.lastModified;\r\n        this.designer.saveSpace().finally();\r\n        // console.log(\"###\", res)\r\n      }).catch(() => system.msg('保存失败，请重试！'))\r\n    },\r\n\r\n    undoHistory() {\r\n      this.designer.undoHistoryStep(this)\r\n    },\r\n\r\n    redoHistory() {\r\n      this.designer.redoHistoryStep(this)\r\n    },\r\n\r\n    changeLayoutType(newType) {\r\n      this.designer.changeLayoutType(newType)\r\n    },\r\n\r\n    clearFormWidget() {\r\n      system.showDialog(YvStudioDesignResetLayout, {\r\n        layout: this.designer.vjson.layout,\r\n        title: '选择要重置的布局'\r\n\r\n      }).then(res => {\r\n        this.designer.clearSelected()\r\n        const tt = getLayoutEmptyTemplate(res.layout)\r\n        if (tt) {\r\n          this.designer.loadFormFile(tt)\r\n        }\r\n      })\r\n    },\r\n    selectTab(name) {\r\n      this._hideLeft = false\r\n      this.currentTab = name\r\n    },\r\n    tryGetEvent(name) {\r\n      if (!this.designer.selectedWidget?.listeners) {\r\n        return ''\r\n      }\r\n      return (this.designer.selectedWidget.listeners[name] ? 'bold' : '')\r\n    },\r\n    tryGetBind(name) {\r\n      if (!this.designer.selectedWidget?.bind) {\r\n        return ''\r\n      }\r\n      return (this.designer.selectedWidget.bind[name] ? 'bold' : '')\r\n    },\r\n\r\n    saveCodeRaise: _.debounce((me, componentDesc, selectedWidget, bindKey, bindValue) => {\r\n\r\n      me.saveCode(componentDesc, selectedWidget, bindKey, bindValue)\r\n\r\n    }, 200),\r\n\r\n    saveCode(componentDesc, selectedWidget, bindKey, bindValue) {\r\n      if (!bindKey) {\r\n        system.showErrorDialog('没有指定事件或属性名')\r\n        return\r\n      }\r\n\r\n      const bindTarget = _.find(componentDesc.bind, i => i.name === bindKey)\r\n      if (bindTarget != null) {\r\n        if (!selectedWidget.bind) {\r\n          selectedWidget.bind = {}\r\n        }\r\n\r\n        if (bindValue) {\r\n          // console.log('write bind[' + bindKey + ']', selectedWidget, bindValue)\r\n          selectedWidget.bind[bindKey] = bindValue\r\n        } else {\r\n          delete selectedWidget.bind[bindKey]\r\n        }\r\n      }\r\n\r\n      const eventTarget = _.find(componentDesc.events, i => i.name === bindKey)\r\n      if (eventTarget != null) {\r\n        if (!selectedWidget.listeners) {\r\n          selectedWidget.listeners = {}\r\n        }\r\n        if (bindValue) {\r\n          // console.log('write listeners[' + bindKey + ']', selectedWidget, bindValue)\r\n          selectedWidget.listeners[bindKey] = bindValue\r\n        } else {\r\n          delete selectedWidget.listeners[bindKey]\r\n        }\r\n      }\r\n      // system.msg('保存成功')\r\n    },\r\n    openModule(content, module) {\r\n      this.designer.createSpace(module.absolutePath + '/' + module.name, module, content.designJs).finally()\r\n    },\r\n    showNewModuleDialog() {\r\n      this.$refs.moduleDialog.show()\r\n    },\r\n    submitNewModule(newModuleForm) {\r\n      system.invokeStudio(\"DesignModuleFile@createModule\", newModuleForm)\r\n          .then(() => {\r\n            this.left_1?.reloadPcModule();\r\n            this.$refs.moduleDialog.close();\r\n          })\r\n    },\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n* {\r\n  box-sizing: border-box;\r\n}\r\n\r\n.newModuleForm .el-form-item {\r\n  width: 100%;\r\n}\r\n\r\n.design {\r\n  width: 100%;\r\n  height: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  .toolbar {\r\n    height: 38px;\r\n    flex-grow: 0;\r\n    display: flex;\r\n    flex-direction: row;\r\n    padding: 0 5px;\r\n    background: var(--sub-header-color);\r\n\r\n    .toolbar-btn {\r\n      padding: 0 10px;\r\n      line-height: 38px;\r\n      cursor: pointer;\r\n      font-size: 14px;\r\n      font-weight: normal;\r\n\r\n      &:not(.is-disabled):focus, &:not(.is-disabled):hover {\r\n        background: #c5c5c5;\r\n        border-radius: 0;\r\n        color: #000\r\n      }\r\n    }\r\n\r\n    .el-divider {\r\n      height: auto;\r\n    }\r\n  }\r\n\r\n  .sub-toolbar {\r\n    height: 38px;\r\n    line-height: 38px;\r\n    flex-grow: 0;\r\n    display: flex;\r\n    flex-direction: row;\r\n    border-top: 1px solid #ccc;\r\n    background: var(--sub-header-color);\r\n    position: relative;\r\n    z-index: 2;\r\n\r\n    .el-select {\r\n      margin: 3px 0 0 3px;\r\n\r\n      .el-input__wrapper {\r\n        box-shadow: none;\r\n        border: 1px solid #ccc;\r\n        border-radius: 0;\r\n      }\r\n\r\n      .el-input.is-focus .el-input__wrapper {\r\n        box-shadow: none !important;\r\n      }\r\n\r\n      .el-input__inner {\r\n        height: 28px !important;\r\n      }\r\n    }\r\n\r\n    .toolbar-icon {\r\n      text-align: center;\r\n      padding: 0 10px;\r\n    }\r\n\r\n    .btn {\r\n      text-align: center;\r\n      padding: 0 5px;\r\n      cursor: pointer;\r\n\r\n      span {\r\n        font-size: 26px;\r\n      }\r\n    }\r\n\r\n    .design-code-wrap {\r\n      width: 100%;\r\n      padding-top: 3px;\r\n      position: relative;\r\n      /*z-index: 3;*/\r\n\r\n      .editor-disabled {\r\n        position: absolute;\r\n        width: 100%;\r\n        height: 31px;\r\n        left: 0;\r\n        top: 3px;\r\n        background-color: rgba(0, 0, 0, .1);\r\n        z-index: 3;\r\n      }\r\n\r\n      & > .codeEditBox {\r\n        border: 1px solid #ccc;\r\n        position: relative;\r\n        z-index: 2;\r\n\r\n        &.expand {\r\n          box-shadow: 3px 3px 3px rgb(0 0 0 / 50%);\r\n        }\r\n\r\n        .monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main {\r\n          flex-direction: row;\r\n          font-size: 14px;\r\n\r\n          .suggest-icon {\r\n            font-size: 14px;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    & > input {\r\n      flex: 1;\r\n      margin: 3px 5px 3px 0;\r\n      border: 1px solid #ccc;\r\n      padding: 0 10px\r\n    }\r\n  }\r\n\r\n  .content {\r\n    flex: 1;\r\n    border-top: 1px solid #ccc;\r\n    display: flex;\r\n    flex-direction: row;\r\n    overflow: hidden;\r\n    position: relative;\r\n    z-index: 1;\r\n\r\n    .tree-menu {\r\n      width: 42px;\r\n      min-width: 42px;\r\n      flex-grow: 0;\r\n      display: flex;\r\n      flex-direction: column;\r\n      border-right: 1px solid #ccc;\r\n      background: var(--sub-header-color);\r\n\r\n      & > div {\r\n        cursor: pointer;\r\n        text-align: center;\r\n        padding: 15px 0;\r\n        box-sizing: border-box;\r\n\r\n        &.selected {\r\n          background: #fff;\r\n          position: relative;\r\n          transition: all .3s linear;\r\n\r\n          &:before {\r\n            content: '';\r\n            position: absolute;\r\n            width: 3px;\r\n            height: 20px;\r\n            background: var(--main-color);\r\n            top: 14px;\r\n            left: 2px;\r\n            border-radius: 5px;\r\n            transition: background 1s linear;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    .content-split {\r\n      flex-grow: 1;\r\n\r\n      .split-wrap {\r\n        height: 100%;\r\n        width: 100%;\r\n        background: var(--sub-header-color);\r\n\r\n        &.hideLeft1 > .left {\r\n          display: none;\r\n        }\r\n\r\n        &.hideLeft1 div:nth-child(2) {\r\n          display: none;\r\n        }\r\n\r\n        .left {\r\n        }\r\n\r\n        .center {\r\n          display: flex;\r\n          flex-direction: column;\r\n\r\n          .form-widget-container {\r\n            background: #919191;\r\n            position: relative;\r\n            overflow: hidden;\r\n\r\n            .yv-designer.full-height-width {\r\n              height: auto\r\n            }\r\n\r\n            & > .yv-design-mode.full-height-width {\r\n              height: 100%;\r\n              overflow-y: auto;\r\n              overflow-x: hidden;\r\n            }\r\n          }\r\n\r\n          .content-tabs {\r\n            /*border-left: 1px solid #dcdbdc;*/\r\n\r\n            button {\r\n              background: none;\r\n              border-radius: 0;\r\n              border: none;\r\n              border-bottom: 2px solid transparent;\r\n\r\n              .el-icon {\r\n                margin-left: 5px;\r\n              }\r\n\r\n              &:hover, &:focus {\r\n                color: #000\r\n              }\r\n\r\n              &.selected {\r\n                border-bottom: 2px solid var(--main-color);\r\n                font-weight: bold;\r\n                color: #000\r\n              }\r\n            }\r\n          }\r\n\r\n          .toolbar-bottom {\r\n            display: flex;\r\n            flex-direction: row;\r\n            justify-content: space-between;\r\n            padding: 0 10px;\r\n\r\n            .btn-left {\r\n              margin: 5px 0;\r\n            }\r\n\r\n            .btn-right {\r\n              margin: 5px 0;\r\n            }\r\n\r\n            .btns-add-dialog {\r\n              position: relative;\r\n\r\n              &:before {\r\n                content: '';\r\n                width: 1px;\r\n                height: 21px;\r\n                background: #ccc;\r\n                position: absolute;\r\n                left: -10px;\r\n                top: 5px\r\n              }\r\n\r\n              &:after {\r\n                content: '';\r\n                width: 1px;\r\n                height: 21px;\r\n                background: #ccc;\r\n                position: absolute;\r\n                right: 0;\r\n                top: 5px\r\n              }\r\n\r\n              .el-button--default {\r\n                background: none;\r\n                border-top: 0\r\n              }\r\n\r\n              .el-button--primary {\r\n                background: #fff;\r\n                color: var(--el-color-primary);\r\n                border-top: 0;\r\n                border-bottom: 3px solid #919191;\r\n                //box-shadow: inset 0px 0px 20px 0px var(--el-color-primary)\r\n              }\r\n\r\n              .add {\r\n                padding: 0 10px;\r\n                margin-left: 0;\r\n              }\r\n\r\n              .el-button-group {\r\n                .el-button--default:first-child {\r\n                  border-right: 0;\r\n\r\n                  &:hover {\r\n                    border-color: var(--el-border-color)\r\n                  }\r\n                }\r\n\r\n                .el-dropdown__caret-button {\r\n                  &:hover {\r\n                    border-color: var(--el-border-color)\r\n                  }\r\n\r\n                  &.el-button--default:hover {\r\n                    color: var(--el-color-primary);\r\n                  }\r\n\r\n                  &.el-button--primary:hover {\r\n                    border-right-color: var(--el-color-primary);\r\n                    border-bottom-color: #919191;\r\n                  }\r\n                }\r\n\r\n                .el-dropdown__caret-button::before {\r\n                  display: none\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        .right {\r\n        }\r\n      }\r\n\r\n      & > .splitpanes {\r\n        & > .splitpanes__splitter {\r\n          /*background: #dcdbdc;*/\r\n        }\r\n\r\n        &.default-theme > .splitpanes__splitter:before, &.default-theme > .splitpanes__splitter:after {\r\n          background: #000;\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div>\r\n    <!-- 代码编辑器弹层 -->\r\n    <el-dialog v-model=\"sqlEditorDialogProps.visible\"\r\n               :title=\"sqlEditorDialogProps.title\"\r\n               style=\"max-width: 800px\"\r\n               :append-to-body=\"true\">\r\n      <div style=\"height: 500px\">\r\n        <yv-src-editor v-model=\"sqlEditorDialogProps.data.codeValue\" language=\"sql\" style=\"height:100%\"/>\r\n      </div>\r\n      <template #footer>\r\n      <span class=\"dialog-footer\">\r\n        <el-button :icon=\"renderIcon('Close')\" @click=\"sqlEditorDialogProps.visible = false\">取消</el-button>\r\n        <el-button :icon=\"renderIcon('Save')\" type=\"primary\" @click=\"executeDDL\" :loading=\"isButtonLoading\">执行</el-button>\r\n      </span>\r\n      </template>\r\n    </el-dialog>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {SqlOperationType} from \"../../../constant\"\r\nimport {renderIcon} from \"../../../utils\";\r\n\r\nexport default {\r\n  name: \"yvDatabaseSqlEditorDialog\",\r\n  expose: ['show'],\r\n  data() {\r\n    return {\r\n      isButtonLoading: false,\r\n      sqlEditorDialogProps: {\r\n        visible: false,\r\n        title: \"SQL浏览\",\r\n        data: {}\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    show(sqlEditorData) {\r\n      this.sqlEditorDialogProps.visible = true;\r\n      this.sqlEditorDialogProps.data = sqlEditorData;\r\n    },\r\n    executeDDL() {\r\n      const params = {\r\n        datasource: this.sqlEditorDialogProps.data.datasource,\r\n        ddl: this.sqlEditorDialogProps.data.codeValue,\r\n        schema_name: this.sqlEditorDialogProps.data.schemaName,\r\n        table_name: this.sqlEditorDialogProps.data.tableName,\r\n      }\r\n      // 重命名表名\r\n      if (this.sqlEditorDialogProps.data.operationType === SqlOperationType.RENAME) {\r\n        const renameParams = {\r\n          ...params,\r\n          ...{\r\n            old_table_name: this.sqlEditorDialogProps.data.tableName,\r\n            table_name: this.sqlEditorDialogProps.data.reTableName\r\n          }\r\n        };\r\n        this.doExecute(renameParams, res => {\r\n          this.sqlEditorDialogProps.visible = false;\r\n          system.msg(!!res.msg ? res.msg : '执行成功');\r\n          this.$emit('callback', {sqlOperationType: SqlOperationType.RENAME, value: res})\r\n        })\r\n        return;\r\n      }\r\n      // 删除表结构\r\n      if (this.sqlEditorDialogProps.data.operationType === SqlOperationType.DROP) {\r\n        this.doExecute(params, res => {\r\n          this.sqlEditorDialogProps.visible = false;\r\n          system.msg(!!res.msg ? res.msg : '执行成功');\r\n          this.$emit('callback', {sqlOperationType: SqlOperationType.DROP, value: res})\r\n        })\r\n        return;\r\n      }\r\n      // 新建表结构\r\n      if (this.sqlEditorDialogProps.data.operationType === SqlOperationType.CREATE) {\r\n        this.doExecute(params, res => {\r\n          this.sqlEditorDialogProps.visible = false;\r\n          system.msg(!!res.msg ? res.msg : '执行成功');\r\n          this.$emit('callback', {sqlOperationType: SqlOperationType.CREATE, value: res})\r\n        })\r\n        return;\r\n      }\r\n      // 修改表结构\r\n      if (this.sqlEditorDialogProps.data.operationType === SqlOperationType.UPDATE) {\r\n        this.doExecute(params, res => {\r\n          this.sqlEditorDialogProps.visible = false;\r\n          system.msg(!!res.msg ? res.msg : '执行成功');\r\n          this.$emit('callback', {sqlOperationType: SqlOperationType.UPDATE, value: res})\r\n        })\r\n        return;\r\n      }\r\n    },\r\n    doExecute(params, callback) {\r\n      this.isButtonLoading = true\r\n      system.invokeStudio(\"FileManager@pushToDbCommit\", params).then((res) => {\r\n        console.log('res', res)\r\n        if (!res.success) {\r\n          system.showErrorDialog(!!res.msg ? res.msg : '执行DDL语句失败, 请联系管理员');\r\n          return;\r\n        }\r\n        if (typeof callback === 'function') {\r\n          callback(res);\r\n        }\r\n      }, (res) => {\r\n        console.log('error', res)\r\n        system.showErrorDialog(!!res.response?.data?.msg ? res.response?.data?.msg : '执行DDL语句失败, 请联系管理员');\r\n      }).finally(() => {\r\n        this.isButtonLoading = false\r\n      })\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <div>\r\n    <!-- 代码编辑器弹层 -->\r\n    <el-dialog v-model=\"sqlEditorDialogProps.visible\"\r\n               :title=\"sqlEditorDialogProps.title\"\r\n               style=\"max-width: 800px\"\r\n               :append-to-body=\"true\">\r\n      <div style=\"height: 500px\">\r\n        <yv-src-editor v-model=\"sqlEditorDialogProps.data.codeValue\" language=\"sql\" style=\"height:100%\"/>\r\n      </div>\r\n      <template #footer>\r\n      <span class=\"dialog-footer\">\r\n        <el-button :icon=\"renderIcon('Close')\" @click=\"sqlEditorDialogProps.visible = false\">取消</el-button>\r\n        <el-button :icon=\"renderIcon('Save')\" type=\"primary\" @click=\"executeDDL\" :loading=\"isButtonLoading\">执行</el-button>\r\n      </span>\r\n      </template>\r\n    </el-dialog>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {SqlOperationType} from \"../../../constant\"\r\nimport {renderIcon} from \"../../../utils\";\r\n\r\nexport default {\r\n  name: \"yvDatabaseSqlEditorDialog\",\r\n  expose: ['show'],\r\n  data() {\r\n    return {\r\n      isButtonLoading: false,\r\n      sqlEditorDialogProps: {\r\n        visible: false,\r\n        title: \"SQL浏览\",\r\n        data: {}\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    show(sqlEditorData) {\r\n      this.sqlEditorDialogProps.visible = true;\r\n      this.sqlEditorDialogProps.data = sqlEditorData;\r\n    },\r\n    executeDDL() {\r\n      const params = {\r\n        datasource: this.sqlEditorDialogProps.data.datasource,\r\n        ddl: this.sqlEditorDialogProps.data.codeValue,\r\n        schema_name: this.sqlEditorDialogProps.data.schemaName,\r\n        table_name: this.sqlEditorDialogProps.data.tableName,\r\n      }\r\n      // 重命名表名\r\n      if (this.sqlEditorDialogProps.data.operationType === SqlOperationType.RENAME) {\r\n        const renameParams = {\r\n          ...params,\r\n          ...{\r\n            old_table_name: this.sqlEditorDialogProps.data.tableName,\r\n            table_name: this.sqlEditorDialogProps.data.reTableName\r\n          }\r\n        };\r\n        this.doExecute(renameParams, res => {\r\n          this.sqlEditorDialogProps.visible = false;\r\n          system.msg(!!res.msg ? res.msg : '执行成功');\r\n          this.$emit('callback', {sqlOperationType: SqlOperationType.RENAME, value: res})\r\n        })\r\n        return;\r\n      }\r\n      // 删除表结构\r\n      if (this.sqlEditorDialogProps.data.operationType === SqlOperationType.DROP) {\r\n        this.doExecute(params, res => {\r\n          this.sqlEditorDialogProps.visible = false;\r\n          system.msg(!!res.msg ? res.msg : '执行成功');\r\n          this.$emit('callback', {sqlOperationType: SqlOperationType.DROP, value: res})\r\n        })\r\n        return;\r\n      }\r\n      // 新建表结构\r\n      if (this.sqlEditorDialogProps.data.operationType === SqlOperationType.CREATE) {\r\n        this.doExecute(params, res => {\r\n          this.sqlEditorDialogProps.visible = false;\r\n          system.msg(!!res.msg ? res.msg : '执行成功');\r\n          this.$emit('callback', {sqlOperationType: SqlOperationType.CREATE, value: res})\r\n        })\r\n        return;\r\n      }\r\n      // 修改表结构\r\n      if (this.sqlEditorDialogProps.data.operationType === SqlOperationType.UPDATE) {\r\n        this.doExecute(params, res => {\r\n          this.sqlEditorDialogProps.visible = false;\r\n          system.msg(!!res.msg ? res.msg : '执行成功');\r\n          this.$emit('callback', {sqlOperationType: SqlOperationType.UPDATE, value: res})\r\n        })\r\n        return;\r\n      }\r\n    },\r\n    doExecute(params, callback) {\r\n      this.isButtonLoading = true\r\n      system.invokeStudio(\"FileManager@pushToDbCommit\", params).then((res) => {\r\n        console.log('res', res)\r\n        if (!res.success) {\r\n          system.showErrorDialog(!!res.msg ? res.msg : '执行DDL语句失败, 请联系管理员');\r\n          return;\r\n        }\r\n        if (typeof callback === 'function') {\r\n          callback(res);\r\n        }\r\n      }, (res) => {\r\n        console.log('error', res)\r\n        system.showErrorDialog(!!res.response?.data?.msg ? res.response?.data?.msg : '执行DDL语句失败, 请联系管理员');\r\n      }).finally(() => {\r\n        this.isButtonLoading = false\r\n      })\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <div>\r\n    <el-dialog\r\n        :title=\"'调整字段顺序'\"\r\n        style=\"width: 600px;\"\r\n        :append-to-body=\"true\"\r\n        v-model=\"show\"\r\n    >\r\n      <ag-grid-vue\r\n          style=\"width: 100%;height: 500px;\"\r\n          class=\"table ag-theme-balham\"\r\n          v-bind=\"gridOption\"\r\n          :rowHeight=\"30\"\r\n          :headerHeight=\"38\"\r\n          :rowData=\"gridOption.fieldList\"\r\n          :enableColResize=\"true\"\r\n          :animateRows=\"true\"\r\n          :rowDragManaged=\"true\"\r\n          @grid-ready=\"onGridReady\"\r\n      ></ag-grid-vue>\r\n      <template #footer>\r\n        <span class=\"dialog-footer\">\r\n          <el-button @click=\"show = false\">取消</el-button>\r\n          <el-button type=\"primary\" @click=\"executeDDL\" :loading=\"loading\">确定</el-button>\r\n        </span>\r\n      </template>\r\n    </el-dialog>\r\n\r\n    <YvDatabaseSqlEditorDialog ref=\"sqlEditorRef\" @callback=\"sqlEditorDialogCallback\"/>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport YvDatabaseSqlEditorDialog from \"./yv-database-sql-editor-dialog.vue\";\r\nimport {SqlOperationType} from \"../../../constant\";\r\n\r\nexport default {\r\n  components: {\r\n    YvDatabaseSqlEditorDialog,\r\n  },\r\n  data() {\r\n    return {\r\n      show: false,\r\n      loading: false,\r\n      gridOption: {\r\n        enableRangeSelection: true,\r\n        defaultColDef: {\r\n          resizable: true,\r\n          editable: false,\r\n          singleClickEdit: true,\r\n          suppressMovable: true,\r\n          sortable: true,\r\n        },\r\n        gridApi: {},\r\n        rowSelection: 'single',\r\n        columnDefs: [\r\n          {\r\n            width: 50,\r\n            maxWidth: 100,\r\n            filter: false,\r\n            editable: false,\r\n            pinned: 'left',\r\n            headerName: '#',\r\n            minWidth: 45,\r\n            resizable: false,\r\n            sortable: true,\r\n            enableRowGroup: false,\r\n            enablePivot: false,\r\n            suppressMenu: true,\r\n            suppressColumnsToolPanel: true,\r\n            rowDrag: true,\r\n            valueGetter: (params) => {\r\n              return params.node?.rowIndex + 1\r\n            }\r\n          },\r\n          {headerName: '字段名', field: 'column_name', 'pinned': 'left', minWidth: 150},\r\n          {headerName: '字段中文名', field: 'column_comment', minWidth: 150},\r\n          {headerName: '数据类型', field: 'data_type', minWidth: 150},\r\n        ],\r\n        fieldList: []\r\n      },\r\n      tableInfo: {},\r\n      table: {},\r\n    }\r\n  },\r\n  methods: {\r\n    executeDDL() {\r\n      const tableInfo = {\r\n        archive_cron: '',\r\n        archive_condition: '',\r\n        archive_enable: false,\r\n        biz_category: \"\",\r\n        db_type: this.table.data.db_type,\r\n        description: this.tableInfo.tableComment,\r\n        is_create: this.table.data.is_create ? this.table.data.is_create : false,\r\n        note: \"\",\r\n        schema_name: this.table.data.schema_name,\r\n        table_name: this.tableInfo.tableName\r\n      }\r\n      const columnList = [];\r\n      this.gridApi.forEachNode(function (node, index) {\r\n        columnList.push(node.data)\r\n      });\r\n      const params = {\r\n        datasource: 'master',\r\n        schema_name: this.table.data.schema_name,\r\n        table_name: this.tableInfo.tableName,\r\n        tableInfo: tableInfo,\r\n        column_list: columnList\r\n      };\r\n      this.loading = true;\r\n      system.invokeStudio(\"FileManager@updateFieldOrder\", params).then((res) => {\r\n        if (!res.success) {\r\n          console.error(\"保存到数据库失败\", res.msg);\r\n          system.showErrorDialog(!!res.msg ? res.msg : '保存到数据库失败，请稍后再试');\r\n          return;\r\n        }\r\n        const sqlEditorData = {\r\n          operationType: this.table.data.is_create ? SqlOperationType.CREATE : SqlOperationType.UPDATE,\r\n          datasource: 'master',\r\n          schemaName: this.table.data.schema_name,\r\n          tableName: this.tableInfo.tableName,\r\n          codeValue: res.data?.ddl\r\n        };\r\n        this.$refs.sqlEditorRef.show(sqlEditorData);\r\n      }).finally(() => this.loading = false);\r\n    },\r\n    sqlEditorDialogCallback(sqlOperationType, value) {\r\n      this.show = false;\r\n      if (this.parent?.refresh) this.parent?.refresh();\r\n      if (window['studio_database_vuerefreshTableClick']) window['studio_database_vuerefreshTableClick']();\r\n    },\r\n    showDialog(show) {\r\n      this.show = show;\r\n    },\r\n    onGridReady(params) {\r\n      params.api.sizeColumnsToFit();\r\n      this.gridApi = params.api;\r\n    },\r\n    setData(data) {\r\n      this.gridOption.fieldList = data;\r\n    },\r\n    init(initData) {\r\n      this.parent = initData.parent\r\n      this.tableInfo = initData.tableInfo\r\n      this.table = initData.table\r\n    },\r\n  }\r\n}\r\n</script>\r\n\r\n","<template>\r\n  <div>\r\n    <el-dialog\r\n        :title=\"'调整字段顺序'\"\r\n        style=\"width: 600px;\"\r\n        :append-to-body=\"true\"\r\n        v-model=\"show\"\r\n    >\r\n      <ag-grid-vue\r\n          style=\"width: 100%;height: 500px;\"\r\n          class=\"table ag-theme-balham\"\r\n          v-bind=\"gridOption\"\r\n          :rowHeight=\"30\"\r\n          :headerHeight=\"38\"\r\n          :rowData=\"gridOption.fieldList\"\r\n          :enableColResize=\"true\"\r\n          :animateRows=\"true\"\r\n          :rowDragManaged=\"true\"\r\n          @grid-ready=\"onGridReady\"\r\n      ></ag-grid-vue>\r\n      <template #footer>\r\n        <span class=\"dialog-footer\">\r\n          <el-button @click=\"show = false\">取消</el-button>\r\n          <el-button type=\"primary\" @click=\"executeDDL\" :loading=\"loading\">确定</el-button>\r\n        </span>\r\n      </template>\r\n    </el-dialog>\r\n\r\n    <YvDatabaseSqlEditorDialog ref=\"sqlEditorRef\" @callback=\"sqlEditorDialogCallback\"/>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport YvDatabaseSqlEditorDialog from \"./yv-database-sql-editor-dialog.vue\";\r\nimport {SqlOperationType} from \"../../../constant\";\r\n\r\nexport default {\r\n  components: {\r\n    YvDatabaseSqlEditorDialog,\r\n  },\r\n  data() {\r\n    return {\r\n      show: false,\r\n      loading: false,\r\n      gridOption: {\r\n        enableRangeSelection: true,\r\n        defaultColDef: {\r\n          resizable: true,\r\n          editable: false,\r\n          singleClickEdit: true,\r\n          suppressMovable: true,\r\n          sortable: true,\r\n        },\r\n        gridApi: {},\r\n        rowSelection: 'single',\r\n        columnDefs: [\r\n          {\r\n            width: 50,\r\n            maxWidth: 100,\r\n            filter: false,\r\n            editable: false,\r\n            pinned: 'left',\r\n            headerName: '#',\r\n            minWidth: 45,\r\n            resizable: false,\r\n            sortable: true,\r\n            enableRowGroup: false,\r\n            enablePivot: false,\r\n            suppressMenu: true,\r\n            suppressColumnsToolPanel: true,\r\n            rowDrag: true,\r\n            valueGetter: (params) => {\r\n              return params.node?.rowIndex + 1\r\n            }\r\n          },\r\n          {headerName: '字段名', field: 'column_name', 'pinned': 'left', minWidth: 150},\r\n          {headerName: '字段中文名', field: 'column_comment', minWidth: 150},\r\n          {headerName: '数据类型', field: 'data_type', minWidth: 150},\r\n        ],\r\n        fieldList: []\r\n      },\r\n      tableInfo: {},\r\n      table: {},\r\n    }\r\n  },\r\n  methods: {\r\n    executeDDL() {\r\n      const tableInfo = {\r\n        archive_cron: '',\r\n        archive_condition: '',\r\n        archive_enable: false,\r\n        biz_category: \"\",\r\n        db_type: this.table.data.db_type,\r\n        description: this.tableInfo.tableComment,\r\n        is_create: this.table.data.is_create ? this.table.data.is_create : false,\r\n        note: \"\",\r\n        schema_name: this.table.data.schema_name,\r\n        table_name: this.tableInfo.tableName\r\n      }\r\n      const columnList = [];\r\n      this.gridApi.forEachNode(function (node, index) {\r\n        columnList.push(node.data)\r\n      });\r\n      const params = {\r\n        datasource: 'master',\r\n        schema_name: this.table.data.schema_name,\r\n        table_name: this.tableInfo.tableName,\r\n        tableInfo: tableInfo,\r\n        column_list: columnList\r\n      };\r\n      this.loading = true;\r\n      system.invokeStudio(\"FileManager@updateFieldOrder\", params).then((res) => {\r\n        if (!res.success) {\r\n          console.error(\"保存到数据库失败\", res.msg);\r\n          system.showErrorDialog(!!res.msg ? res.msg : '保存到数据库失败，请稍后再试');\r\n          return;\r\n        }\r\n        const sqlEditorData = {\r\n          operationType: this.table.data.is_create ? SqlOperationType.CREATE : SqlOperationType.UPDATE,\r\n          datasource: 'master',\r\n          schemaName: this.table.data.schema_name,\r\n          tableName: this.tableInfo.tableName,\r\n          codeValue: res.data?.ddl\r\n        };\r\n        this.$refs.sqlEditorRef.show(sqlEditorData);\r\n      }).finally(() => this.loading = false);\r\n    },\r\n    sqlEditorDialogCallback(sqlOperationType, value) {\r\n      this.show = false;\r\n      if (this.parent?.refresh) this.parent?.refresh();\r\n      if (window['studio_database_vuerefreshTableClick']) window['studio_database_vuerefreshTableClick']();\r\n    },\r\n    showDialog(show) {\r\n      this.show = show;\r\n    },\r\n    onGridReady(params) {\r\n      params.api.sizeColumnsToFit();\r\n      this.gridApi = params.api;\r\n    },\r\n    setData(data) {\r\n      this.gridOption.fieldList = data;\r\n    },\r\n    init(initData) {\r\n      this.parent = initData.parent\r\n      this.tableInfo = initData.tableInfo\r\n      this.table = initData.table\r\n    },\r\n  }\r\n}\r\n</script>\r\n\r\n","<template>\r\n  <el-select v-model=\"columnDomainId\" @change=\"onChange\" clearable placeholder=\"请选择字段域\">\r\n    <el-option\r\n        v-for=\"columnDomain in params.columnDomainList\"\r\n        :key=\"columnDomain.domain_id\"\r\n        :label=\"columnDomain.domain_name\"\r\n        :value=\"columnDomain.domain_id\"\r\n    />\r\n  </el-select>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport default {\r\n  data() {\r\n    return {\r\n      columnDomainId: this.params.data?.column_domain,\r\n    };\r\n  },\r\n  methods: {\r\n    getValue() {\r\n      return this.columnDomainId;\r\n    },\r\n    onChange(newValue) {\r\n      const columnInfo = this.params.data;\r\n      const dbType = this.params.dbType;\r\n      const columnDomain = this.params.columnDomainList.find(columnDomain => columnDomain.domain_id === newValue);\r\n      if (columnDomain) {\r\n        columnInfo.column_domain = columnDomain.domain_id;\r\n        columnInfo.column_size = columnDomain.column_size;\r\n        columnInfo.default_value = columnDomain.default_value;\r\n        columnInfo.column_dict = columnDomain.domain_column_dict;\r\n        columnInfo.domain_column_ui = columnDomain.domain_column_ui;\r\n        columnInfo.decimal_digits = columnDomain.decimal_digits;\r\n        if (dbType === 'pgsql') {\r\n          columnInfo.data_type = columnDomain.pgsql_datatype;\r\n        } else if (dbType === 'mysql') {\r\n          columnInfo.data_type = columnDomain.mysql_datatype;\r\n        } else if (dbType === 'oracle') {\r\n          columnInfo.data_type = columnDomain.oracle_datatype;\r\n        } else if (dbType === 'sqlserver') {\r\n          columnInfo.data_type = columnDomain.sqlserver_datatype;\r\n        }\r\n        this.params.api.applyTransaction({update: [columnInfo]})\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <el-select v-model=\"columnDomainId\" @change=\"onChange\" clearable placeholder=\"请选择字段域\">\r\n    <el-option\r\n        v-for=\"columnDomain in params.columnDomainList\"\r\n        :key=\"columnDomain.domain_id\"\r\n        :label=\"columnDomain.domain_name\"\r\n        :value=\"columnDomain.domain_id\"\r\n    />\r\n  </el-select>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport default {\r\n  data() {\r\n    return {\r\n      columnDomainId: this.params.data?.column_domain,\r\n    };\r\n  },\r\n  methods: {\r\n    getValue() {\r\n      return this.columnDomainId;\r\n    },\r\n    onChange(newValue) {\r\n      const columnInfo = this.params.data;\r\n      const dbType = this.params.dbType;\r\n      const columnDomain = this.params.columnDomainList.find(columnDomain => columnDomain.domain_id === newValue);\r\n      if (columnDomain) {\r\n        columnInfo.column_domain = columnDomain.domain_id;\r\n        columnInfo.column_size = columnDomain.column_size;\r\n        columnInfo.default_value = columnDomain.default_value;\r\n        columnInfo.column_dict = columnDomain.domain_column_dict;\r\n        columnInfo.domain_column_ui = columnDomain.domain_column_ui;\r\n        columnInfo.decimal_digits = columnDomain.decimal_digits;\r\n        if (dbType === 'pgsql') {\r\n          columnInfo.data_type = columnDomain.pgsql_datatype;\r\n        } else if (dbType === 'mysql') {\r\n          columnInfo.data_type = columnDomain.mysql_datatype;\r\n        } else if (dbType === 'oracle') {\r\n          columnInfo.data_type = columnDomain.oracle_datatype;\r\n        } else if (dbType === 'sqlserver') {\r\n          columnInfo.data_type = columnDomain.sqlserver_datatype;\r\n        }\r\n        this.params.api.applyTransaction({update: [columnInfo]})\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <el-select v-model=\"dictCode\" filterable clearable placeholder=\"请选择字典数据\">\r\n    <el-option\r\n        v-for=\"dict in params.dictList\"\r\n        :key=\"dict.code\"\r\n        :label=\"dict.desc\"\r\n        :value=\"dict.code\"\r\n    />\r\n  </el-select>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport default {\r\n  data() {\r\n    return {\r\n      dictCode: this.params.data?.column_dict,\r\n    };\r\n  },\r\n  methods: {\r\n    getValue() {\r\n      return this.dictCode;\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <el-select v-model=\"dictCode\" filterable clearable placeholder=\"请选择字典数据\">\r\n    <el-option\r\n        v-for=\"dict in params.dictList\"\r\n        :key=\"dict.code\"\r\n        :label=\"dict.desc\"\r\n        :value=\"dict.code\"\r\n    />\r\n  </el-select>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport default {\r\n  data() {\r\n    return {\r\n      dictCode: this.params.data?.column_dict,\r\n    };\r\n  },\r\n  methods: {\r\n    getValue() {\r\n      return this.dictCode;\r\n    }\r\n  }\r\n}\r\n</script>","<template>\r\n  <div class=\"yv-db-table-design\">\r\n    <div class=\"yv-db-table-design-func\">\r\n      <el-button class=\"toolbar-btn\" @click=\"handleAddTableField\" :icon=\"renderIcon('fa PlusCircle')\">\r\n        添加\r\n      </el-button>\r\n      <el-button class=\"toolbar-btn\" @click=\"handleRemoveTableField\" :icon=\"renderIcon('fa MinusCircle')\">\r\n        删除\r\n      </el-button>\r\n      <el-button class=\"toolbar-btn\" @click=\"handleSaveToDatabase\" :icon=\"renderIcon('fa Save')\">\r\n        保存到数据库\r\n      </el-button>\r\n      <el-button class=\"toolbar-btn\" @click=\"handleRefreshQueryDSL\" :icon=\"renderIcon('fa Refresh')\">\r\n        刷新QueryDSL\r\n      </el-button>\r\n      <el-button class=\"toolbar-btn\" @click=\"handleSaveDDL\" :icon=\"renderIcon('fa FileText')\">\r\n        生成DDL\r\n      </el-button>\r\n      <el-button class=\"toolbar-btn\" @click=\"()=>{this.$refs.tableDialogRef.showDialog(true)}\" :icon=\"renderIcon('fa Arrows')\">\r\n        字段顺序\r\n      </el-button>\r\n      <el-button class=\"toolbar-btn\" @click=\"refresh\" :icon=\"renderIcon('fa Refresh')\">\r\n        刷新\r\n      </el-button>\r\n    </div>\r\n    <div class=\"yv-db-table-design-content\">\r\n      <div class=\"yv-db-table-field-content\">\r\n        <div class=\"yv-db-table-name\">\r\n          <el-row :gutter=\"50\">\r\n            <el-col :span=\"1\"></el-col>\r\n            <el-col :span=\"10\">\r\n              <el-form-item label=\"表名\">\r\n                <el-input v-model=\"tableInfo.tableName\" :disabled=\"!this.table.data.is_create\" clearable\r\n                          placeholder=\"请输入表名\"/>\r\n              </el-form-item>\r\n            </el-col>\r\n            <el-col :span=\"10\">\r\n              <el-form-item label=\"描述\">\r\n                <el-input v-model=\"tableInfo.tableComment\" clearable placeholder=\"请输入描述信息\"/>\r\n              </el-form-item>\r\n            </el-col>\r\n          </el-row>\r\n        </div>\r\n        <div class=\"yv-db-table-field-list\">\r\n          <ag-grid-vue\r\n              style=\"width: 100%;\"\r\n              class=\"table ag-theme-balham\"\r\n              v-bind=\"gridOption\"\r\n              :rowHeight=\"30\"\r\n              :headerHeight=\"38\"\r\n              :rowData=\"agGridInfo.fieldList\"\r\n              :enableColResize=\"true\"\r\n              @grid-ready=\"onGridReady\"\r\n              @cell-value-changed=\"onCellValueChanged\"\r\n          ></ag-grid-vue>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n\r\n    <!-- SQL编辑器弹层 -->\r\n    <yv-database-sql-editor-dialog :ref=\"sqlEditorDialogProps.ref\" @callback=\"sqlEditorDialogCallback\"/>\r\n    <YvDatabaseTableDialog ref=\"tableDialogRef\"/>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport YvDatabaseSqlEditorDialog from \"./yv-database-sql-editor-dialog.vue\";\r\nimport YvDatabaseTableDialog from \"./yv-database-table-dialog.vue\";\r\nimport GridColumnDomainCellEditor from \"./grid/grid-column-domain-cell-editor.vue\";\r\nimport GridDictCellEditor from \"./grid/grid-dict-cell-editor.vue\";\r\nimport {renderIcon} from '../../../utils'\r\nimport {DatabaseConstant, SqlOperationType} from \"../../../constant\"\r\n\r\nexport default {\r\n  name: 'yvDatabaseTableDesign',\r\n  components: {\r\n    YvDatabaseSqlEditorDialog,\r\n    GridColumnDomainCellEditor,\r\n    GridDictCellEditor,\r\n    YvDatabaseTableDialog,\r\n  },\r\n  data() {\r\n    const _this = this;\r\n    const columnDefs = [\r\n      {\r\n        width: 30,\r\n        maxWidth: 100,\r\n        filter: false,\r\n        editable: false,\r\n        pinned: 'left',\r\n        headerName: '#',\r\n        minWidth: 45,\r\n        resizable: true,\r\n        sortable: false,\r\n        enableRowGroup: false,\r\n        enablePivot: false,\r\n        suppressMenu: true,\r\n        suppressColumnsToolPanel: true,\r\n        valueGetter: (params) => {\r\n          return params.node?.rowIndex + 1\r\n        }\r\n      },\r\n      {headerName: '字段名', field: 'column_name', 'pinned': 'left', minWidth: 150},\r\n      {headerName: '字段中文名', field: 'column_comment', minWidth: 150},\r\n      {\r\n        headerName: '主键',\r\n        field: 'is_primary_key',\r\n        editable: false,\r\n        minWidth: 80,\r\n        cellRenderer: (params) => {\r\n          const input = document.createElement(\"input\")\r\n          input.type = \"checkbox\";\r\n          input.checked = params.data.is_primary_key\r\n          input.addEventListener('change', function () {\r\n            const row = params.data;\r\n            row.is_primary_key = input.checked;\r\n            params.api.applyTransaction({update: [row]});\r\n          })\r\n          return input\r\n        }\r\n      },\r\n      {\r\n        headerName: '必填',\r\n        field: 'not_null',\r\n        editable: false,\r\n        minWidth: 80,\r\n        cellRenderer: (params) => {\r\n          const input = document.createElement(\"input\")\r\n          input.type = \"checkbox\";\r\n          input.checked = params.data.not_null;\r\n          input.addEventListener('change', function () {\r\n            const row = params.data;\r\n            row.not_null = input.checked;\r\n            params.api.applyTransaction({update: [row]});\r\n          })\r\n          return input\r\n        }\r\n      },\r\n      {\r\n        headerName: '字段域',\r\n        field: 'column_domain',\r\n        minWidth: 150,\r\n        cellEditor: 'GridColumnDomainCellEditor',\r\n        cellEditorParams: {\r\n          dbType: this.table.data.db_type,\r\n          columnDomainList: this.table.data.columnDomainList\r\n        },\r\n        valueFormatter: (params) => {\r\n          const columnDomainList = this.table.data.columnDomainList;\r\n          const columnDomain = columnDomainList?.find(columnDomain => columnDomain.domain_id === params.data?.column_domain);\r\n          if (columnDomain) {\r\n            return columnDomain.domain_name;\r\n          }\r\n          return '';\r\n        }\r\n      },\r\n      {headerName: '数据类型', field: 'data_type', minWidth: 150},\r\n      {headerName: '长度', field: 'column_size', minWidth: 150},\r\n      {headerName: '小数位', field: 'decimal_digits', minWidth: 150},\r\n      {headerName: '默认值', field: 'default_value', minWidth: 150},\r\n      {\r\n        headerName: '字典',\r\n        field: 'column_dict',\r\n        minWidth: 150,\r\n        cellEditor: 'GridDictCellEditor',\r\n        cellEditorParams: {\r\n          dictList: this.table.data.dictList\r\n        },\r\n        valueFormatter: (params) => {\r\n          const dictList = this.table.data.dictList;\r\n          // console.log('dictList', dictList, params.data?.column_dict)\r\n          const dict = dictList?.find(dict => dict.code === params.data?.column_dict);\r\n          if (dict) {\r\n            return dict.desc;\r\n          }\r\n          return '';\r\n        }\r\n      },\r\n    ];\r\n    return {\r\n      tableInfo: {\r\n        tableName: this.table.data.table_name,\r\n        tableComment: this.table.data.description,\r\n      },\r\n      gridOption: {\r\n        enableRangeSelection: true,\r\n        defaultColDef: {\r\n          resizable: true,\r\n          editable: true,\r\n          singleClickEdit: true\r\n        },\r\n        rowSelection: 'single',\r\n        columnDefs,\r\n      },\r\n      agGridInfo: {\r\n        gridApi: {},\r\n        fieldList: []\r\n      },\r\n      sqlEditorDialogProps: {\r\n        ref: 'sqlEditorDialogRef',\r\n        data: {\r\n          operationType: '',\r\n          datasource: 'master',\r\n          schemaName: '',\r\n          tableName: '',\r\n          reTableName: '',\r\n          codeValue: ''\r\n        }\r\n      },\r\n    }\r\n  },\r\n  mounted() {\r\n    if (this.table.data?.column_list) {\r\n      this.agGridInfo.fieldList = this.table.data.column_list;\r\n      this.$refs.tableDialogRef.setData(this.table.data.column_list)\r\n      this.$refs.tableDialogRef.init({\r\n        parent: this,\r\n        tableInfo: this.tableInfo,\r\n        table: this.table,\r\n      });\r\n    }\r\n  },\r\n\r\n  props: [\r\n    'table'\r\n  ],\r\n\r\n  watch: {},\r\n\r\n  methods: {\r\n    renderIcon,\r\n    onGridReady(params) {\r\n      params.api.sizeColumnsToFit();\r\n      this.agGridInfo.gridApi = params.api;\r\n    },\r\n    onCellValueChanged(params) {\r\n      const colId = params.column.getColId()\r\n      if (colId !== 'column_domain') {\r\n        return;\r\n      }\r\n      const newValue = params.newValue;\r\n      const oldValue = params.oldValue;\r\n      if (newValue === oldValue) {\r\n        return;\r\n      }\r\n      const columnInfo = params.data;\r\n      const dbType = this.table.data.db_type;\r\n      const columnDomain = this.table.data.columnDomainList.find(columnDomain => columnDomain.domain_id === newValue);\r\n      if (columnDomain) {\r\n        columnInfo.column_domain = columnDomain.domain_id;\r\n        columnInfo.column_size = columnDomain.column_size;\r\n        columnInfo.default_value = columnDomain.default_value;\r\n        columnInfo.column_dict = columnDomain.domain_column_dict;\r\n        columnInfo.domain_column_ui = columnDomain.domain_column_ui;\r\n        columnInfo.decimal_digits = columnDomain.decimal_digits;\r\n        if (dbType === 'pgsql') {\r\n          columnInfo.data_type = columnDomain.pgsql_datatype;\r\n        } else if (dbType === 'mysql') {\r\n          columnInfo.data_type = columnDomain.mysql_datatype;\r\n        } else if (dbType === 'oracle') {\r\n          columnInfo.data_type = columnDomain.oracle_datatype;\r\n        } else if (dbType === 'sqlserver') {\r\n          columnInfo.data_type = columnDomain.sqlserver_datatype;\r\n        }\r\n        params.api.applyTransaction({update: [columnInfo]})\r\n      }\r\n    },\r\n    handleAddTableField() {\r\n      this.finishEdit()\r\n      const columnList = [];\r\n      this.agGridInfo.gridApi.forEachNode(function (node, index) {\r\n        columnList.push(node.data)\r\n        node.setSelected(true);\r\n      });\r\n      columnList.push({});\r\n      this.agGridInfo.gridApi.setRowData(columnList);\r\n      this.agGridInfo.gridApi.ensureIndexVisible(columnList.length - 1, 'middle');\r\n    },\r\n    handleRemoveTableField() {\r\n      this.finishEdit()\r\n      const selectedRows = this.agGridInfo.gridApi.getSelectedRows();\r\n      if (selectedRows.length <= 0) {\r\n        system.showErrorDialog('请选择需要删除的数据');\r\n        return;\r\n      }\r\n      this.agGridInfo.gridApi.applyTransaction({remove: selectedRows});\r\n    },\r\n    handleSaveToDatabase() {\r\n      this.finishEdit()\r\n      const tableInfo = {\r\n        archive_cron: '',\r\n        archive_condition: '',\r\n        archive_enable: false,\r\n        biz_category: \"\",\r\n        db_type: this.table.data.db_type,\r\n        description: this.tableInfo.tableComment,\r\n        is_create: this.table.data.is_create ? this.table.data.is_create : false,\r\n        note: \"\",\r\n        schema_name: this.table.data.schema_name,\r\n        table_name: this.tableInfo.tableName\r\n      }\r\n      const columnList = [];\r\n      this.agGridInfo.gridApi.forEachNode(function (node, index) {\r\n        columnList.push(node.data)\r\n      });\r\n      const params = {\r\n        datasource: 'master',\r\n        schema_name: this.table.data.schema_name,\r\n        table_name: this.tableInfo.tableName,\r\n        tableInfo: tableInfo,\r\n        column_list: columnList\r\n      };\r\n      system.invokeStudio(\"FileManager@saveMetaExBuildDDL\", params).then((res) => {\r\n        if (!res.success) {\r\n          console.error(\"保存到数据库失败\", res.msg);\r\n          system.showErrorDialog(!!res.msg ? res.msg : '保存到数据库失败，请稍后再试');\r\n          return;\r\n        }\r\n        const sqlEditorData = {\r\n          operationType: this.table.data.is_create ? SqlOperationType.CREATE : SqlOperationType.UPDATE,\r\n          datasource: 'master',\r\n          schemaName: this.table.data.schema_name,\r\n          tableName: this.tableInfo.tableName,\r\n          codeValue: res.data?.ddl\r\n        };\r\n        this.$refs[this.sqlEditorDialogProps.ref].show(sqlEditorData);\r\n      });\r\n    },\r\n    handleRefreshQueryDSL() {\r\n      this.finishEdit()\r\n      const params = {schema_name: \"public\", table_name: this.tableInfo.tableName};\r\n      // TODO createAllQueryDSLFile createQueryDSLFile\r\n      system.invokeStudio(\"FileManager@createQueryDSLFile\", params).then((res) => {\r\n        if (!res.success) {\r\n          console.error(\"刷新QueryDSL失败\", res.msg);\r\n          system.showErrorDialog('刷新QueryDSL失败，请稍后再试');\r\n          return;\r\n        }\r\n        system.msg(!!res.msg ? res.msg : '刷新QueryDSL成功!');\r\n      });\r\n    },\r\n    handleSaveDDL() {\r\n      this.finishEdit()\r\n    },\r\n    sqlEditorDialogCallback(sqlOperationType, value) {\r\n\r\n    },\r\n    finishEdit() {\r\n      // 提交修改中的文字\r\n      this.agGridInfo.gridApi.stopEditing()\r\n    },\r\n    refresh() {\r\n      system.invokeStudio(\"FileManager@getMateDataByTableName\", {\r\n        datasource: 'master',\r\n        schema_name: this.table.data.schema_name,\r\n        table_name: this.tableInfo.tableName,\r\n      }).then((res) => {\r\n        const column_list = res[0]?.table_list[0]?.column_list\r\n        if(column_list) {\r\n          this.agGridInfo.fieldList = column_list;\r\n          this.$refs.tableDialogRef.setData(column_list)\r\n        }\r\n      });\r\n    },\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.yv-db-table-design {\r\n  height: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  .yv-db-table-design-func {\r\n    padding: 10px;\r\n    background: #fff;\r\n  }\r\n}\r\n\r\n.yv-db-table-design-tabs {\r\n  .el-tabs__header {\r\n    border-top-left-radius: 5px;\r\n    border-top-right-radius: 5px;\r\n    background: var(--main-color);\r\n  }\r\n\r\n  .el-tabs__item {\r\n    color: #FFFFFF;\r\n  }\r\n\r\n  .is-active {\r\n    color: #000000;\r\n    background: #EFEFEF;\r\n  }\r\n}\r\n\r\n.yv-db-table-design-content {\r\n  flex: 1;\r\n\r\n  .yv-db-table-field-content {\r\n    height: 100%;\r\n    display: flex;\r\n    flex-direction: column;\r\n\r\n    .yv-db-table-name {\r\n      background: #fff;\r\n      border-bottom: 1px solid #e5e5e5;\r\n\r\n      .el-form-item {\r\n        margin-bottom: 10px\r\n      }\r\n    }\r\n\r\n    .yv-db-table-field-list {\r\n      flex: 1;\r\n      overflow: hidden;\r\n      margin: 10px;\r\n\r\n      .table.ag-theme-balham {\r\n        height: 100%;\r\n        font-size: 14px;\r\n        font-weight: 400;\r\n\r\n        .ag-root-wrapper {\r\n          border-color: #e5e5e5;\r\n        }\r\n\r\n        .ag-header {\r\n          border-color: #e5e5e5;\r\n          background-color: #f0f0f0;\r\n\r\n          .ag-pinned-left-header {\r\n            border-color: #e5e5e5;\r\n          }\r\n\r\n          .ag-header-row {\r\n            color: #333\r\n          }\r\n        }\r\n\r\n        .ag-row {\r\n          border-color: #e5e5e5;\r\n          color: #606266\r\n        }\r\n\r\n        .ag-cell.ag-cell-last-left-pinned:not(.ag-cell-range-right):not(.ag-cell-range-single-cell) {\r\n          border-right-color: #e5e5e5;\r\n        }\r\n      }\r\n    }\r\n\r\n    .yv-db-table-field-func {\r\n      padding-left: 10px;\r\n      padding-bottom: 15px;\r\n      border-bottom: 1px solid #FFFFFF;\r\n    }\r\n  }\r\n\r\n  .yv-db-table-advanced-props {\r\n    padding: 2px 0 0 10px;\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"yv-db-field-type-list\">\r\n    <div class=\"yv-db-field-type-func\">\r\n      <el-button class=\"toolbar-btn\" @click=\"addColumnDomain\" :icon=\"renderIcon('fa PlusSquare')\">\r\n        添加\r\n      </el-button>\r\n      <el-button type=\"danger\" plain class=\"toolbar-btn\" @click=\"removeColumnDomain\" :icon=\"renderIcon('fa Trash')\">\r\n        删除\r\n      </el-button>\r\n      <el-button type=\"primary\" plain class=\"toolbar-btn\" @click=\"saveColumnDomain\" :icon=\"renderIcon('fa Save')\">\r\n        保存\r\n      </el-button>\r\n    </div>\r\n    <div class=\"yv-db-field-type-item\">\r\n      <ag-grid-vue\r\n          style=\"width: 100%;\"\r\n          class=\"table ag-theme-balham\"\r\n          :rowHeight=\"30\"\r\n          :headerHeight=\"38\"\r\n          :defaultColDef=\"agGridInfo.defaultColDef\"\r\n          :columnDefs=\"agGridInfo.columnDefs\"\r\n          :rowData=\"agGridInfo.columnDomainList\"\r\n          :rowSelection=\"agGridInfo.rowSelection\"\r\n          :enableColResize=\"true\"\r\n          :suppressContextMenu=\"true\"\r\n          @grid-ready=\"onGridReady\"\r\n          @cellValueChanged=\"onCellValueChanged\"\r\n      ></ag-grid-vue>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from \"lodash\"\r\nimport {renderIcon} from '../../../utils'\r\nimport {DatabaseConstant, OperationType} from \"../../../constant\";\r\n\r\nexport default {\r\n  name: 'yvDatabaseColumnDomain',\r\n  data() {\r\n    const columnDefs = [\r\n      {\r\n        'pinned': 'left',\r\n        minWidth: 45,\r\n        valueGetter: (params) => {\r\n          return params.node?.rowIndex + 1\r\n        }\r\n      },\r\n      {headerName: '字段域名称', field: 'domain_name', 'pinned': 'left', minWidth: 150},\r\n      {headerName: 'PgSQL类型', field: 'pgsql_datatype', minWidth: 120},\r\n      {headerName: 'MySQL类型', field: 'mysql_datatype', minWidth: 120},\r\n      {headerName: 'Oracle类型', field: 'oracle_datatype', minWidth: 120},\r\n      {headerName: 'SqlServer类型', field: 'sqlserver_datatype', minWidth: 130},\r\n      {headerName: 'Java类型', field: 'java_datatype', minWidth: 120},\r\n      {\r\n        headerName: '固定长度',\r\n        field: 'is_fix_size',\r\n        editable: false,\r\n        minWidth: 100,\r\n        cellRenderer: (params) => {\r\n          const input = document.createElement(\"input\")\r\n          input.type = \"checkbox\";\r\n          input.checked = params.data.is_fix_size === 1\r\n          input.addEventListener('change', function () {\r\n            const row = params.data;\r\n            row.is_fix_size = input.checked ? 1 : 0;\r\n            console.log('params', params)\r\n            params.api.applyTransaction({update: [row]});\r\n          })\r\n          return input\r\n        }\r\n      },\r\n      {headerName: '长度', field: 'column_size', minWidth: 80},\r\n      {headerName: '小数位', field: 'decimal_digits', minWidth: 80},\r\n      {headerName: '字典', field: 'domain_column_dict', minWidth: 80},\r\n      {\r\n        headerName: '固定默认值',\r\n        field: 'is_fix_default_value',\r\n        editable: false,\r\n        minWidth: 100,\r\n        cellRenderer: (params) => {\r\n          const input = document.createElement(\"input\")\r\n          input.type = \"checkbox\";\r\n          input.checked = params.data.is_fix_default_value === 1\r\n          input.addEventListener('change', function () {\r\n            const row = params.data;\r\n            row.is_fix_default_value = input.checked ? 1 : 0;\r\n            console.log('params', params)\r\n            params.api.applyTransaction({update: [row]});\r\n          })\r\n          return input\r\n        }\r\n      },\r\n      {headerName: '默认值', field: 'default_value', minWidth: 120},\r\n      {\r\n        headerName: 'UI建议',\r\n        minWidth: 100,\r\n        field: 'domain_column_ui',\r\n        cellEditor: \"agSelectCellEditor\",\r\n        cellEditorParams: {values: DatabaseConstant.UI_TYPE_LIST.map(uiType => uiType.value)}\r\n      },\r\n      {headerName: '详情描述', field: 'domain_note', minWidth: 100},\r\n      {headerName: '负责人', field: 'domain_person', minWidth: 100},\r\n      {headerName: '版本号', field: 'domain_version', minWidth: 100},\r\n    ];\r\n\r\n    return {\r\n      domainIdRule: {\r\n        start: 1,\r\n        step: 1\r\n      },\r\n      agGridInfo: {\r\n        defaultColDef: {\r\n          resizable: true,\r\n          editable: true\r\n        },\r\n        gridApi: {},\r\n        rowSelection: 'single',\r\n        columnDefs,\r\n        columnDomainList: []\r\n      },\r\n      saveParams: {\r\n        datasource: 'master',\r\n        removeRecords: []\r\n      }\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    const _this = this;\r\n    window.addEventListener('resize', () => {\r\n      _this.sizeColumnsToFit();\r\n    })\r\n    _this.loadColumnDomainList();\r\n  },\r\n\r\n  watch: {},\r\n\r\n  methods: {\r\n    renderIcon,\r\n    loadColumnDomainList() {\r\n      system.invokeStudio(\"FileManager@getColumnDomain\", {datasource: \"master\"}).then((res) => {\r\n        if (!res.success) {\r\n          console.error(\"加载字段域数据错误\", res.msg);\r\n          system.showErrorDialog('加载字段域数据错误');\r\n          return;\r\n        }\r\n        this.agGridInfo.columnDomainList = res.data;\r\n      });\r\n    },\r\n    onGridReady(params) {\r\n      this.agGridInfo.gridApi = params.api;\r\n      this.sizeColumnsToFit();\r\n    },\r\n    sizeColumnsToFit() {\r\n      this.agGridInfo.gridApi?.sizeColumnsToFit();\r\n    },\r\n    onCellValueChanged(row) {\r\n      const columnDomain = row.data;\r\n      if (typeof columnDomain.op_type === 'undefined' || columnDomain.op_type !== OperationType.NEW) {\r\n        columnDomain.op_type = OperationType.UPDATE;\r\n      }\r\n      this.agGridInfo.gridApi.applyTransaction({update: [columnDomain]});\r\n    },\r\n    obtainDomainId() {\r\n      const vDomainId = DatabaseConstant.V_ID_PREFIX + this.domainIdRule.start;\r\n      this.domainIdRule.start = this.domainIdRule.start + this.domainIdRule.step;\r\n      return vDomainId;\r\n    },\r\n    addColumnDomain() {\r\n      const columnDomainList = [];\r\n      this.agGridInfo.gridApi.forEachNode(function (node, index) {\r\n        columnDomainList.push(node.data)\r\n      });\r\n      columnDomainList.push({domain_id: this.obtainDomainId(), op_type: OperationType.NEW});\r\n      this.agGridInfo.gridApi.setRowData(columnDomainList);\r\n      this.agGridInfo.gridApi.ensureIndexVisible(columnDomainList.length - 1, 'middle');\r\n    },\r\n    removeColumnDomain() {\r\n      const selectedRows = this.agGridInfo.gridApi.getSelectedRows();\r\n      if (selectedRows.length <= 0) {\r\n        system.showErrorDialog('请选择需要删除的数据');\r\n        return;\r\n      }\r\n      if (typeof selectedRows.op_type === 'undefined' || selectedRows.op_type !== OperationType.NEW) {\r\n        selectedRows.map(row => {\r\n          this.saveParams.removeRecords.push(row);\r\n        })\r\n      }\r\n      this.agGridInfo.gridApi.applyTransaction({remove: selectedRows});\r\n    },\r\n    saveColumnDomain() {\r\n      const _this = this;\r\n      const saveParams = {\r\n        newRows: [],\r\n        modifyRows: [],\r\n        ..._this.saveParams\r\n      }\r\n      this.agGridInfo.gridApi.forEachNode(function (node, index) {\r\n        const columnDomain = node.data;\r\n        if (columnDomain.op_type === OperationType.NEW) {\r\n          saveParams.newRows.push(columnDomain);\r\n        } else if (columnDomain.op_type === OperationType.UPDATE) {\r\n          saveParams.modifyRows.push(columnDomain);\r\n        }\r\n      });\r\n      if (saveParams.newRows.length <= 0\r\n          && saveParams.modifyRows.length <= 0\r\n          && saveParams.removeRecords.length <= 0) {\r\n        system.msg('未检查到修改的字段域数据，无需保存');\r\n        return;\r\n      }\r\n      if (saveParams.modifyRows.length > 0) {\r\n        for (let i = 0; i < saveParams.modifyRows.length; i++) {\r\n          let modifyRow = saveParams.modifyRows[i];\r\n          modifyRow._origin = {domain_id: modifyRow.domain_id};\r\n          saveParams.modifyRows[i] = modifyRow;\r\n        }\r\n      }\r\n      if (saveParams.removeRecords.length > 0) {\r\n        for (let i = 0; i < saveParams.removeRecords.length; i++) {\r\n          let removeRow = saveParams.removeRecords[i];\r\n          removeRow._origin = {domain_id: removeRow.domain_id};\r\n          saveParams.removeRecords[i] = removeRow;\r\n        }\r\n      }\r\n      system.invokeStudio(\"FileManager@saveColumnDomain\", saveParams).then((res) => {\r\n        if (!res.success) {\r\n          console.error(\"保存字段域数据失败\", res.msg);\r\n          system.showErrorDialog('保存字段域数据失败,请稍后再试');\r\n          return;\r\n        }\r\n        _this.saveParams.removeRecords = [];\r\n        _this.loadColumnDomainList();\r\n        if (res.msg) {\r\n          system.msg(res.msg);\r\n          return;\r\n        }\r\n        system.msg('保存成功');\r\n      });\r\n    }\r\n  }\r\n}\r\n\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.yv-db-field-type-list {\r\n  height:100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  .yv-db-field-type-func {\r\n    padding:10px;\r\n    background: #fff;\r\n    border-bottom:1px solid #e5e5e5;\r\n  }\r\n\r\n  .yv-db-field-type-item {\r\n    margin: 10px;\r\n    flex:1;\r\n    .table.ag-theme-balham{\r\n      height:100%;\r\n      font-size: 14px;\r\n      font-weight: 400;\r\n      .ag-root-wrapper{\r\n        border-color:#e5e5e5;\r\n      }\r\n      .ag-header{\r\n        border-color:#e5e5e5;\r\n        background-color: #f0f0f0;\r\n        .ag-pinned-left-header{\r\n          border-color:#e5e5e5;\r\n        }\r\n        .ag-header-row{\r\n          color:#333\r\n        }\r\n      }\r\n      .ag-row{\r\n        border-color:#e5e5e5;\r\n        color:#606266\r\n      }\r\n      .ag-cell.ag-cell-last-left-pinned:not(.ag-cell-range-right):not(.ag-cell-range-single-cell){\r\n        border-right-color:#e5e5e5;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"design\">\r\n    <div class=\"toolbar\">\r\n      <el-button link class=\"toolbar-btn\" @click=\"createTableClick\" :icon=\"renderIcon('fa PlusSquare')\">\r\n        新建表\r\n      </el-button>\r\n      <el-divider direction=\"vertical\"/>\r\n      <el-button link class=\"toolbar-btn\" @click=\"selectTableClick\" :icon=\"renderIcon('fa Crosshairs')\">\r\n        选中当前打开的表\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"refreshTableClick\" :icon=\"renderIcon('element Refresh')\">\r\n        刷新\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"rebuildMetadataClick\" :icon=\"renderIcon('fa Download')\">\r\n        重新拉取生成元数据(耗时很长)\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"dataStructSyncClick\" :icon=\"renderIcon('fa Share')\">\r\n        数据结构同步\r\n      </el-button>\r\n      <el-divider direction=\"vertical\"/>\r\n      <el-button link class=\"toolbar-btn\" @click=\"columnDomainManage\" :icon=\"renderIcon('fa Database')\">\r\n        字段域管理\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" :icon=\"renderIcon('fa WindowRestore')\">\r\n        数据迁移\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"closeAllTabOnClick\" :icon=\"renderIcon('fa Times')\">\r\n        关闭所有\r\n      </el-button>\r\n    </div>\r\n    <div class=\"content\">\r\n      <div class=\"content-split\">\r\n        <split class=\"default-theme split-wrap database\">\r\n          <split-area :size=\"30\" class=\"left\">\r\n            <div class=\"yvan-db-table\">\r\n              <el-input v-model=\"gridOption.filterTableName\" id=\"filterTableName\" clearable placeholder=\"搜索过滤\"\r\n                        v-on:input=\"onFilterTextBoxChanged()\"/>\r\n              <ag-grid-vue\r\n                  style=\"width: 100%; height: 100%;\"\r\n                  class=\"ag-theme-alpine\"\r\n                  :columnDefs=\"gridOption.columnDefs\"\r\n                  @grid-ready=\"onGridReady\"\r\n                  :rowData=\"gridOption.rowData\"\r\n                  :treeData=\"true\"\r\n                  :animateRows=\"true\"\r\n                  :isGroupOpenByDefault=\"gridOption.isGroupOpenByDefault\"\r\n                  :autoGroupColumnDef=\"gridOption.autoGroupColumnDef\"\r\n                  :getDataPath=\"gridOption.getDataPath\"\r\n                  :getContextMenuItems=\"getContextMenuItems\">\r\n              </ag-grid-vue>\r\n            </div>\r\n          </split-area>\r\n          <split-area :size=\"70\" class=\"center\" style=\"display: flex;flex-direction: column;\">\r\n            <div class=\"yvan-db-content\">\r\n              <el-tabs\r\n                  v-model=\"tabProps.activeTabName\"\r\n                  closable\r\n                  class=\"yvan-db-content-tabs\"\r\n                  :type=\"tabProps.type\"\r\n                  @tab-remove=\"removeContentTab\"\r\n              >\r\n                <el-tab-pane\r\n                    v-for=\"item in tabProps.editableTabs\"\r\n                    :key=\"item.name\"\r\n                    :label=\"item.title\"\r\n                    :name=\"item.name\"\r\n                >\r\n                  <component :is=\"item.component\" :table=\"item\"/>\r\n\r\n                  <!--\r\n                  <keep-alive>\r\n                    <component :is=\"componentInfo.componentName\" :table-name=\"componentInfo.tableName\"\r\n                               :table-data=\"componentInfo.tableData\"/>\r\n                  </keep-alive>\r\n                  -->\r\n                </el-tab-pane>\r\n              </el-tabs>\r\n            </div>\r\n          </split-area>\r\n        </split>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- 重命名表名弹层 -->\r\n    <el-dialog v-model=\"renameDialogProps.visible\"\r\n               :title=\"renameDialogProps.title\"\r\n               style=\"max-width: 500px\">\r\n      <div style=\"margin: 10px\">\r\n        <span>请输入新表名</span>\r\n        <el-input v-model=\"renameDialogProps.data.reTableName\" clearable/>\r\n      </div>\r\n      <template #footer>\r\n      <span class=\"dialog-footer\">\r\n        <el-button @click=\"renameDialogProps.visible = false\">取消</el-button>\r\n        <el-button type=\"primary\" @click=\"submitRenameTableNameDialog\">确定</el-button>\r\n      </span>\r\n      </template>\r\n    </el-dialog>\r\n\r\n    <!-- SQL编辑器弹层 -->\r\n    <yv-database-sql-editor-dialog :ref=\"sqlEditorDialogProps.ref\" @callback=\"sqlEditorDialogCallback\"/>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\n/*\r\nimport yvDatabaseComparison from '../../components/database/yv-database-comparison.vue'\r\n */\r\nimport _ from \"lodash\"\r\nimport {markRaw, nextTick} from \"vue\";\r\nimport {ElLoading} from 'element-plus'\r\nimport {renderIcon} from '../../utils'\r\nimport {dict} from \"../../store\";\r\nimport YvStudioDatabaseTable from './database/yv-database-table-design.vue'\r\nimport YvDatabaseColumnDomain from './database/yv-database-column-domain.vue'\r\nimport YvDatabaseSqlEditorDialog from \"./database/yv-database-sql-editor-dialog.vue\"\r\nimport {SqlOperationType, TableSchemaType, DatabaseConstant} from \"../../constant\"\r\n\r\nexport default {\r\n  components: {\r\n    /*\r\n    yvDatabaseComparison,\r\n     */\r\n    YvStudioDatabaseTable,\r\n    YvDatabaseColumnDomain,\r\n    YvDatabaseSqlEditorDialog,\r\n  },\r\n  data() {\r\n    const dictData = []\r\n    _.each(dict.value, item => {\r\n      dictData.push({code: item.code, desc: item.desc})\r\n    })\r\n    const _this = this\r\n    return {\r\n      columnDomainList: [],\r\n      dictList: dictData,\r\n      gridOption: {\r\n        filterTableName: '',\r\n        columnDefs: [\r\n          {field: 'comment', headerName: '描述'}\r\n        ],\r\n        gridApi: null,\r\n        autoGroupColumnDef: {\r\n          headerName: '数据库表',\r\n          minWidth: 300,\r\n          cellRendererParams: {\r\n            suppressCount: true,\r\n            innerRenderer: (params) => {\r\n              if (_this.isDatabaseNode(params)) {\r\n                return '<i class=\"fa fa-database\"></i> ' + params.value;\r\n              }\r\n              if (_this.isTableNode(params)) {\r\n                return '<i class=\"fa fa-table\"></i> ' + params.value;\r\n              }\r\n              if (_this.isColumnNode(params) && _this.isPrimaryKey(params)) {\r\n                return '<i class=\"fa fa-key\"></i> ' + params.value;\r\n              }\r\n              if (_this.isColumnNode(params) && _this.isNotNull(params)) {\r\n                return '<i class=\"fa fa-check-square\"></i> ' + params.value;\r\n              }\r\n              if (_this.isColumnNode(params)) {\r\n                return '<i class=\"fa fa-square-o\"></i> ' + params.value;\r\n              }\r\n              return params.value;\r\n            }\r\n          },\r\n        },\r\n        rowData: [],\r\n        isGroupOpenByDefault: (params) => {\r\n          return params.level === 0\r\n        },\r\n        getDataPath: (data) => {\r\n          return data.name;\r\n        },\r\n      },\r\n      tabProps: {\r\n        type: 'card',\r\n        activeTabName: '',\r\n        editableTabs: [],\r\n      },\r\n      renameDialogProps: {\r\n        visible: false,\r\n        title: \"重命名表名\",\r\n        data: {\r\n          schemaName: '',\r\n          tableName: '',\r\n          reTableName: ''\r\n        }\r\n      },\r\n      sqlEditorDialogProps: {\r\n        ref: 'sqlEditorDialogRef',\r\n        data: {\r\n          operationType: '',\r\n          datasource: 'master',\r\n          schemaName: '',\r\n          tableName: '',\r\n          reTableName: '',\r\n          codeValue: ''\r\n        }\r\n      },\r\n      dataBaseInfo: {}\r\n    }\r\n  },\r\n\r\n  created() {\r\n\r\n  },\r\n\r\n  mounted() {\r\n    // this.rebuildMetadataClick()\r\n    this.loadColumnDomainList();\r\n    window['studio_database_vuerefreshTableClick'] = this.refreshTableClick;\r\n  },\r\n\r\n  methods: {\r\n    renderIcon,\r\n    onFilterTextBoxChanged() {\r\n      this.gridOption.gridApi.setQuickFilter(this.gridOption.filterTableName);\r\n    },\r\n    onGridReady(params) {\r\n      this.gridOption.gridApi = params.api;\r\n      this.gridOption.gridApi.sizeColumnsToFit(params)\r\n      this.loadTableInfo();\r\n    },\r\n    getContextMenuItems(params) {\r\n      const node = params.node;\r\n      return [\r\n        {\r\n          name: '编辑',\r\n          disabled: !this.isTableNode(node),\r\n          action: () => {\r\n            const tableData = node.data;\r\n            tableData.columnDomainList = this.columnDomainList;\r\n            tableData.dictList = this.dictList;\r\n            console.log('>> ', tableData)\r\n            this.addContentTab({\r\n              component: markRaw(YvStudioDatabaseTable),\r\n              name: node.data.table_name,\r\n              data: tableData,\r\n            })\r\n          },\r\n          icon: '<i class=\"fa fa-edit\"></i>',\r\n        },\r\n        {\r\n          name: '重命名',\r\n          disabled: !this.isTableNode(node),\r\n          action: () => {\r\n            this.renameDialogProps.visible = true;\r\n            this.renameDialogProps.data.schemaName = node.data.schema_name;\r\n            this.renameDialogProps.data.tableName = node.data.table_name;\r\n            this.renameDialogProps.data.reTableName = node.data.table_name;\r\n          },\r\n          icon: '<i class=\"fa fa-magic\"></i>',\r\n        },\r\n        'separator',\r\n        {\r\n          name: '删除',\r\n          disabled: !this.isTableNode(node),\r\n          action: () => {\r\n            const params = {schemaName: node.data.schema_name, tableName: node.data.table_name}\r\n            system.invokeStudio(\"FileManager@dropTableDDL\", params).then((res) => {\r\n              if (!res.success) {\r\n                system.showErrorDialog(!!res.msg ? res.msg : '执行DDL语句失败, 请稍后再试');\r\n                return;\r\n              }\r\n              this.sqlEditorDialogProps.data = {...params};\r\n              this.sqlEditorDialogProps.data.operationType = SqlOperationType.DROP;\r\n              this.sqlEditorDialogProps.data.codeValue = res.data;\r\n              this.$refs[this.sqlEditorDialogProps.ref].show(this.sqlEditorDialogProps.data);\r\n            }).catch(e => {\r\n              system.showErrorDialog(!!e.msg ? e.msg : '执行DDL语句失败, 请稍后再试');\r\n            })\r\n          },\r\n          icon: '<i class=\"fa fa-trash\"></i>',\r\n        },\r\n      ];\r\n    },\r\n    createTableClick() {\r\n      this.dataBaseInfo.is_create = true;\r\n      this.dataBaseInfo.columnDomainList = this.columnDomainList;\r\n      this.dataBaseInfo.dictList = this.dictList;\r\n      this.dataBaseInfo.table_name = \"new_table\";\r\n      this.addContentTab({\r\n        component: markRaw(YvStudioDatabaseTable),\r\n        name: this.dataBaseInfo.table_name,\r\n        data: this.dataBaseInfo,\r\n      })\r\n    },\r\n    selectTableClick() {\r\n      const tableName = this.tabProps.activeTabName;\r\n      if (!tableName) {\r\n        return;\r\n      }\r\n      // for (let field of this.tableTreeProps.treeData) {\r\n      //   if (field.label === tableName) {\r\n      //     this.$refs[this.tableTreeProps.ref]!.setCurrentKey(field.label);\r\n      //     return;\r\n      //   }\r\n      //   if (field.children) {\r\n      //     for (let childField of field.children) {\r\n      //       if (childField.label === tableName) {\r\n      //         this.$refs[this.tableTreeProps.ref]!.setCurrentKey(childField.label);\r\n      //         return;\r\n      //       }\r\n      //     }\r\n      //   }\r\n      // }\r\n    },\r\n    refreshTableClick() {\r\n      this.loadTableInfo();\r\n    },\r\n    loadColumnDomainList() {\r\n      system.invokeStudio(\"FileManager@getColumnDomain\", {datasource: \"master\"}).then((res) => {\r\n        if (!res.success) {\r\n          console.error(\"加载字段域数据错误\", res.msg);\r\n          system.showErrorDialog('加载字段域数据错误');\r\n          return;\r\n        }\r\n        this.columnDomainList = res.data;\r\n      });\r\n    },\r\n    rebuildMetadataClick() {\r\n      const loadingInstance = ElLoading.service({fullscreen: true, text: '拉取中...'})\r\n      window['database_meta'] = null\r\n      system.invokeStudio(\"FileManager@dbToMeta\", {datasource: \"master\"}).then((res) => {\r\n        if (!res.success) {\r\n          console.error(\"重新生成元数据失败\", res.msg);\r\n          system.showErrorDialog('重新生成元数据失败，请稍后再试');\r\n          return;\r\n        }\r\n        this.loadTableInfo();\r\n      }).finally(() => {\r\n        loadingInstance.close();\r\n      });\r\n    },\r\n    loadTableInfo() {\r\n      this.gridOption.gridApi.showLoadingOverlay();\r\n      system.invokeStudio(\"FileManager@getMateData\", {datasource: \"master\"}).then((res) => {\r\n        if (!res) {\r\n          system.showErrorDialog('加载数据表数据错误');\r\n          return;\r\n        }\r\n        const databaseData = []\r\n        _.forEach(res, database => {\r\n          const databaseNames = [database.schema_name]\r\n          const databaseNode = {\r\n            name: databaseNames,\r\n            comment: database.schema_name,\r\n            schema_type: TableSchemaType.DATABASE,\r\n            db_type: database.db_type,\r\n          }\r\n          this.dataBaseInfo = {\r\n            schema_name: database.schema_name,\r\n            label: database.schema_name,\r\n            schema_type: TableSchemaType.DATABASE,\r\n            db_type: database.db_type,\r\n          }\r\n          databaseData.push(databaseNode)\r\n          if (database.table_list) {\r\n            _.forEach(database.table_list, table => {\r\n              const {column_list, ...tableNode} = table;\r\n              const tableNames = _.cloneDeep(databaseNames)\r\n              tableNames.push(table.table_name)\r\n              tableNode.name = tableNames;\r\n              tableNode.comment = table.description;\r\n              tableNode.schema_type = TableSchemaType.TABLE;\r\n              tableNode.column_list = column_list\r\n              databaseData.push(tableNode)\r\n              if (table.column_list) {\r\n                _.forEach(table.column_list, column => {\r\n                  const columnNames = _.cloneDeep(tableNames)\r\n                  columnNames.push(column.column_name)\r\n                  const {...columnNode} = column\r\n                  columnNode.name = columnNames\r\n                  columnNode.comment = column.column_comment;\r\n                  columnNode.schema_type = TableSchemaType.COLUMN\r\n                  databaseData.push(columnNode)\r\n                });\r\n              }\r\n            })\r\n          }\r\n        })\r\n        this.gridOption.rowData = databaseData\r\n      }).finally(() => {\r\n        this.gridOption.gridApi.hideOverlay();\r\n      })\r\n    },\r\n    isDatabaseNode(node) {\r\n      return node.data.schema_type === TableSchemaType.DATABASE;\r\n    },\r\n    isTableNode(node) {\r\n      return node.data.schema_type === TableSchemaType.TABLE;\r\n    },\r\n    isColumnNode(node) {\r\n      return node.data.schema_type === TableSchemaType.COLUMN;\r\n    },\r\n    isPrimaryKey(node) {\r\n      return node.data.is_primary_key;\r\n    },\r\n    isNotNull(node) {\r\n      return node.data.not_null;\r\n    },\r\n    hasDescription(node) {\r\n      return !!node.data.description;\r\n    },\r\n    hasComment(node) {\r\n      return !!node.data.column_comment;\r\n    },\r\n    dataStructSyncClick() {\r\n      const dataStructSyncTabName = '数据库同步';\r\n      this.componentInfo.componentName = yvDatabaseComparison.name;\r\n      this.addContentTab(dataStructSyncTabName)\r\n    },\r\n    columnDomainManage() {\r\n      const columnDomainManageTabName = '字段域';\r\n      this.addContentTab({\r\n        component: markRaw(YvDatabaseColumnDomain),\r\n        name: columnDomainManageTabName,\r\n        data: {},\r\n      })\r\n    },\r\n    addContentTab(tabInfo) {\r\n      const tabs = this.tabProps.editableTabs;\r\n      for (let tab of tabs) {\r\n        // 是否已经打开了\r\n        if (tab.name === tabInfo.name) {\r\n          this.tabProps.activeTabName = tab.name;\r\n          return;\r\n        }\r\n      }\r\n      if (tabs.length >= DatabaseConstant.DATABASE_MAX_TABS_LEN) {\r\n        tabs.splice(0, 1);\r\n      }\r\n      tabs.push({\r\n        title: tabInfo.name,\r\n        name: tabInfo.name,\r\n        ...tabInfo\r\n      });\r\n      this.tabProps.activeTabName = tabInfo.name;\r\n    },\r\n    submitRenameTableNameDialog() {\r\n      if (!this.renameDialogProps.data.reTableName) {\r\n        system.showErrorDialog(\"请输入新表名\");\r\n        return;\r\n      }\r\n      if (this.renameDialogProps.data.reTableName === this.renameDialogProps.data.tableName) {\r\n        this.renameDialogProps.visible = false;\r\n        return;\r\n      }\r\n      const params = this.renameDialogProps.data;\r\n      system.invokeStudio(\"FileManager@renameTableDDL\", params).then((res) => {\r\n        if (!res.success) {\r\n          system.showErrorDialog(!!res.msg ? res.msg : '执行DDL语句失败, 请稍后再试');\r\n          return;\r\n        }\r\n        this.renameDialogProps.visible = false;\r\n        this.sqlEditorDialogProps.data = {...this.renameDialogProps.data}\r\n        this.sqlEditorDialogProps.data.operationType = SqlOperationType.RENAME;\r\n        this.sqlEditorDialogProps.data.codeValue = res.data;\r\n        this.$refs[this.sqlEditorDialogProps.ref].show(this.sqlEditorDialogProps.data);\r\n      })\r\n    },\r\n    removeContentTab(targetName: string) {\r\n      const tabs = this.tabProps.editableTabs\r\n      if (this.tabProps.activeTabName === targetName) {\r\n        tabs.forEach((tab, index) => {\r\n          if (tab.name === targetName) {\r\n            const nextTab = tabs[index + 1] || tabs[index - 1]\r\n            if (nextTab) {\r\n              this.tabProps.activeTabName = nextTab.name\r\n            }\r\n          }\r\n        })\r\n      }\r\n      this.tabProps.editableTabs = tabs.filter((tab) => tab.name !== targetName)\r\n    },\r\n    sqlEditorDialogCallback(sqlOperationType, value) {\r\n      this.loadTableInfo();\r\n    },\r\n    closeAllTabOnClick() {\r\n      this.tabProps.editableTabs = []\r\n    }\r\n  }\r\n}\r\n\r\ninterface Tree {\r\n  id: number\r\n  label: string\r\n  children?: Tree[]\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.content-split {\r\n  .yvan-db-table {\r\n    margin: 10px;\r\n    max-height: 150px;\r\n\r\n    .el-tree {\r\n      margin-top: 5px;\r\n      background: #EFEFEF !important;\r\n\r\n      .is-current {\r\n        > .el-tree-node__content {\r\n          color: #ffffff;\r\n          background-color: var(--main-color) !important;\r\n        }\r\n      }\r\n    }\r\n\r\n    .el-tree-node__content {\r\n      height: 35px;\r\n    }\r\n  }\r\n\r\n  .yvan-db-table-tree-node {\r\n    .el-dropdown {\r\n      position: absolute;\r\n      right: 15px;\r\n    }\r\n  }\r\n}\r\n\r\n.yvan-db-content .el-tabs__header {\r\n  border-top-left-radius: 5px;\r\n  border-top-right-radius: 5px;\r\n  /*background: var(--main-color);*/\r\n}\r\n\r\n.yvan-db-content-tabs {\r\n  .el-tabs__item {\r\n    color: #FFFFFF;\r\n  }\r\n\r\n  .is-active {\r\n    color: #000000;\r\n    background: #EFEFEF;\r\n  }\r\n}\r\n\r\n.database {\r\n  & > .left {\r\n    overflow: hidden;\r\n  }\r\n\r\n  & > .gutter {\r\n    background-color: #e1e1e1;\r\n  }\r\n\r\n  .yvan-db-table {\r\n    height: 100%;\r\n    max-height: none;\r\n    display: flex;\r\n    flex-direction: column;\r\n\r\n    & > .el-input {\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n\r\n    & > .el-tree {\r\n      flex: 1;\r\n      margin-bottom: 10px;\r\n      overflow: auto;\r\n\r\n      .yvan-db-table-tree-node {\r\n        font-size: 14px;\r\n      }\r\n    }\r\n  }\r\n\r\n  .yvan-db-content {\r\n    height: 100%;\r\n    overflow: hidden;\r\n\r\n    .el-tabs--card {\r\n      height: 100%;\r\n      display: flex;\r\n      flex-direction: column;\r\n\r\n      & > .el-tabs__header {\r\n        border-color: #ccc;\r\n        margin: 0;\r\n\r\n        .el-tabs__item.is-closable:hover {\r\n          padding-left: 20px;\r\n          padding-right: 20px;\r\n        }\r\n\r\n        .el-tabs__item.is-active {\r\n          border-bottom: 2px solid var(--main-color);\r\n        }\r\n\r\n        .el-tabs__nav {\r\n          border: none\r\n        }\r\n\r\n        .el-tabs__item {\r\n          color: var(--el-button-text-color);\r\n          border-left-color: var(--sub-header-color)\r\n        }\r\n      }\r\n\r\n      & > .el-tabs__content {\r\n        flex: 1;\r\n\r\n        & > .el-tab-pane {\r\n          height: 100%\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"design\">\r\n    <div class=\"toolbar\">\r\n      <el-button link class=\"toolbar-btn\" @click=\"createTableClick\" :icon=\"renderIcon('fa PlusSquare')\">\r\n        新建表\r\n      </el-button>\r\n      <el-divider direction=\"vertical\"/>\r\n      <el-button link class=\"toolbar-btn\" @click=\"selectTableClick\" :icon=\"renderIcon('fa Crosshairs')\">\r\n        选中当前打开的表\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"refreshTableClick\" :icon=\"renderIcon('element Refresh')\">\r\n        刷新\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"rebuildMetadataClick\" :icon=\"renderIcon('fa Download')\">\r\n        重新拉取生成元数据(耗时很长)\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"dataStructSyncClick\" :icon=\"renderIcon('fa Share')\">\r\n        数据结构同步\r\n      </el-button>\r\n      <el-divider direction=\"vertical\"/>\r\n      <el-button link class=\"toolbar-btn\" @click=\"columnDomainManage\" :icon=\"renderIcon('fa Database')\">\r\n        字段域管理\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" :icon=\"renderIcon('fa WindowRestore')\">\r\n        数据迁移\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"closeAllTabOnClick\" :icon=\"renderIcon('fa Times')\">\r\n        关闭所有\r\n      </el-button>\r\n    </div>\r\n    <div class=\"content\">\r\n      <div class=\"content-split\">\r\n        <split class=\"default-theme split-wrap database\">\r\n          <split-area :size=\"30\" class=\"left\">\r\n            <div class=\"yvan-db-table\">\r\n              <el-input v-model=\"gridOption.filterTableName\" id=\"filterTableName\" clearable placeholder=\"搜索过滤\"\r\n                        v-on:input=\"onFilterTextBoxChanged()\"/>\r\n              <ag-grid-vue\r\n                  style=\"width: 100%; height: 100%;\"\r\n                  class=\"ag-theme-alpine\"\r\n                  :columnDefs=\"gridOption.columnDefs\"\r\n                  @grid-ready=\"onGridReady\"\r\n                  :rowData=\"gridOption.rowData\"\r\n                  :treeData=\"true\"\r\n                  :animateRows=\"true\"\r\n                  :isGroupOpenByDefault=\"gridOption.isGroupOpenByDefault\"\r\n                  :autoGroupColumnDef=\"gridOption.autoGroupColumnDef\"\r\n                  :getDataPath=\"gridOption.getDataPath\"\r\n                  :getContextMenuItems=\"getContextMenuItems\">\r\n              </ag-grid-vue>\r\n            </div>\r\n          </split-area>\r\n          <split-area :size=\"70\" class=\"center\" style=\"display: flex;flex-direction: column;\">\r\n            <div class=\"yvan-db-content\">\r\n              <el-tabs\r\n                  v-model=\"tabProps.activeTabName\"\r\n                  closable\r\n                  class=\"yvan-db-content-tabs\"\r\n                  :type=\"tabProps.type\"\r\n                  @tab-remove=\"removeContentTab\"\r\n              >\r\n                <el-tab-pane\r\n                    v-for=\"item in tabProps.editableTabs\"\r\n                    :key=\"item.name\"\r\n                    :label=\"item.title\"\r\n                    :name=\"item.name\"\r\n                >\r\n                  <component :is=\"item.component\" :table=\"item\"/>\r\n\r\n                  <!--\r\n                  <keep-alive>\r\n                    <component :is=\"componentInfo.componentName\" :table-name=\"componentInfo.tableName\"\r\n                               :table-data=\"componentInfo.tableData\"/>\r\n                  </keep-alive>\r\n                  -->\r\n                </el-tab-pane>\r\n              </el-tabs>\r\n            </div>\r\n          </split-area>\r\n        </split>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- 重命名表名弹层 -->\r\n    <el-dialog v-model=\"renameDialogProps.visible\"\r\n               :title=\"renameDialogProps.title\"\r\n               style=\"max-width: 500px\">\r\n      <div style=\"margin: 10px\">\r\n        <span>请输入新表名</span>\r\n        <el-input v-model=\"renameDialogProps.data.reTableName\" clearable/>\r\n      </div>\r\n      <template #footer>\r\n      <span class=\"dialog-footer\">\r\n        <el-button @click=\"renameDialogProps.visible = false\">取消</el-button>\r\n        <el-button type=\"primary\" @click=\"submitRenameTableNameDialog\">确定</el-button>\r\n      </span>\r\n      </template>\r\n    </el-dialog>\r\n\r\n    <!-- SQL编辑器弹层 -->\r\n    <yv-database-sql-editor-dialog :ref=\"sqlEditorDialogProps.ref\" @callback=\"sqlEditorDialogCallback\"/>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\n/*\r\nimport yvDatabaseComparison from '../../components/database/yv-database-comparison.vue'\r\n */\r\nimport _ from \"lodash\"\r\nimport {markRaw, nextTick} from \"vue\";\r\nimport {ElLoading} from 'element-plus'\r\nimport {renderIcon} from '../../utils'\r\nimport {dict} from \"../../store\";\r\nimport YvStudioDatabaseTable from './database/yv-database-table-design.vue'\r\nimport YvDatabaseColumnDomain from './database/yv-database-column-domain.vue'\r\nimport YvDatabaseSqlEditorDialog from \"./database/yv-database-sql-editor-dialog.vue\"\r\nimport {SqlOperationType, TableSchemaType, DatabaseConstant} from \"../../constant\"\r\n\r\nexport default {\r\n  components: {\r\n    /*\r\n    yvDatabaseComparison,\r\n     */\r\n    YvStudioDatabaseTable,\r\n    YvDatabaseColumnDomain,\r\n    YvDatabaseSqlEditorDialog,\r\n  },\r\n  data() {\r\n    const dictData = []\r\n    _.each(dict.value, item => {\r\n      dictData.push({code: item.code, desc: item.desc})\r\n    })\r\n    const _this = this\r\n    return {\r\n      columnDomainList: [],\r\n      dictList: dictData,\r\n      gridOption: {\r\n        filterTableName: '',\r\n        columnDefs: [\r\n          {field: 'comment', headerName: '描述'}\r\n        ],\r\n        gridApi: null,\r\n        autoGroupColumnDef: {\r\n          headerName: '数据库表',\r\n          minWidth: 300,\r\n          cellRendererParams: {\r\n            suppressCount: true,\r\n            innerRenderer: (params) => {\r\n              if (_this.isDatabaseNode(params)) {\r\n                return '<i class=\"fa fa-database\"></i> ' + params.value;\r\n              }\r\n              if (_this.isTableNode(params)) {\r\n                return '<i class=\"fa fa-table\"></i> ' + params.value;\r\n              }\r\n              if (_this.isColumnNode(params) && _this.isPrimaryKey(params)) {\r\n                return '<i class=\"fa fa-key\"></i> ' + params.value;\r\n              }\r\n              if (_this.isColumnNode(params) && _this.isNotNull(params)) {\r\n                return '<i class=\"fa fa-check-square\"></i> ' + params.value;\r\n              }\r\n              if (_this.isColumnNode(params)) {\r\n                return '<i class=\"fa fa-square-o\"></i> ' + params.value;\r\n              }\r\n              return params.value;\r\n            }\r\n          },\r\n        },\r\n        rowData: [],\r\n        isGroupOpenByDefault: (params) => {\r\n          return params.level === 0\r\n        },\r\n        getDataPath: (data) => {\r\n          return data.name;\r\n        },\r\n      },\r\n      tabProps: {\r\n        type: 'card',\r\n        activeTabName: '',\r\n        editableTabs: [],\r\n      },\r\n      renameDialogProps: {\r\n        visible: false,\r\n        title: \"重命名表名\",\r\n        data: {\r\n          schemaName: '',\r\n          tableName: '',\r\n          reTableName: ''\r\n        }\r\n      },\r\n      sqlEditorDialogProps: {\r\n        ref: 'sqlEditorDialogRef',\r\n        data: {\r\n          operationType: '',\r\n          datasource: 'master',\r\n          schemaName: '',\r\n          tableName: '',\r\n          reTableName: '',\r\n          codeValue: ''\r\n        }\r\n      },\r\n      dataBaseInfo: {}\r\n    }\r\n  },\r\n\r\n  created() {\r\n\r\n  },\r\n\r\n  mounted() {\r\n    // this.rebuildMetadataClick()\r\n    this.loadColumnDomainList();\r\n    window['studio_database_vuerefreshTableClick'] = this.refreshTableClick;\r\n  },\r\n\r\n  methods: {\r\n    renderIcon,\r\n    onFilterTextBoxChanged() {\r\n      this.gridOption.gridApi.setQuickFilter(this.gridOption.filterTableName);\r\n    },\r\n    onGridReady(params) {\r\n      this.gridOption.gridApi = params.api;\r\n      this.gridOption.gridApi.sizeColumnsToFit(params)\r\n      this.loadTableInfo();\r\n    },\r\n    getContextMenuItems(params) {\r\n      const node = params.node;\r\n      return [\r\n        {\r\n          name: '编辑',\r\n          disabled: !this.isTableNode(node),\r\n          action: () => {\r\n            const tableData = node.data;\r\n            tableData.columnDomainList = this.columnDomainList;\r\n            tableData.dictList = this.dictList;\r\n            console.log('>> ', tableData)\r\n            this.addContentTab({\r\n              component: markRaw(YvStudioDatabaseTable),\r\n              name: node.data.table_name,\r\n              data: tableData,\r\n            })\r\n          },\r\n          icon: '<i class=\"fa fa-edit\"></i>',\r\n        },\r\n        {\r\n          name: '重命名',\r\n          disabled: !this.isTableNode(node),\r\n          action: () => {\r\n            this.renameDialogProps.visible = true;\r\n            this.renameDialogProps.data.schemaName = node.data.schema_name;\r\n            this.renameDialogProps.data.tableName = node.data.table_name;\r\n            this.renameDialogProps.data.reTableName = node.data.table_name;\r\n          },\r\n          icon: '<i class=\"fa fa-magic\"></i>',\r\n        },\r\n        'separator',\r\n        {\r\n          name: '删除',\r\n          disabled: !this.isTableNode(node),\r\n          action: () => {\r\n            const params = {schemaName: node.data.schema_name, tableName: node.data.table_name}\r\n            system.invokeStudio(\"FileManager@dropTableDDL\", params).then((res) => {\r\n              if (!res.success) {\r\n                system.showErrorDialog(!!res.msg ? res.msg : '执行DDL语句失败, 请稍后再试');\r\n                return;\r\n              }\r\n              this.sqlEditorDialogProps.data = {...params};\r\n              this.sqlEditorDialogProps.data.operationType = SqlOperationType.DROP;\r\n              this.sqlEditorDialogProps.data.codeValue = res.data;\r\n              this.$refs[this.sqlEditorDialogProps.ref].show(this.sqlEditorDialogProps.data);\r\n            }).catch(e => {\r\n              system.showErrorDialog(!!e.msg ? e.msg : '执行DDL语句失败, 请稍后再试');\r\n            })\r\n          },\r\n          icon: '<i class=\"fa fa-trash\"></i>',\r\n        },\r\n      ];\r\n    },\r\n    createTableClick() {\r\n      this.dataBaseInfo.is_create = true;\r\n      this.dataBaseInfo.columnDomainList = this.columnDomainList;\r\n      this.dataBaseInfo.dictList = this.dictList;\r\n      this.dataBaseInfo.table_name = \"new_table\";\r\n      this.addContentTab({\r\n        component: markRaw(YvStudioDatabaseTable),\r\n        name: this.dataBaseInfo.table_name,\r\n        data: this.dataBaseInfo,\r\n      })\r\n    },\r\n    selectTableClick() {\r\n      const tableName = this.tabProps.activeTabName;\r\n      if (!tableName) {\r\n        return;\r\n      }\r\n      // for (let field of this.tableTreeProps.treeData) {\r\n      //   if (field.label === tableName) {\r\n      //     this.$refs[this.tableTreeProps.ref]!.setCurrentKey(field.label);\r\n      //     return;\r\n      //   }\r\n      //   if (field.children) {\r\n      //     for (let childField of field.children) {\r\n      //       if (childField.label === tableName) {\r\n      //         this.$refs[this.tableTreeProps.ref]!.setCurrentKey(childField.label);\r\n      //         return;\r\n      //       }\r\n      //     }\r\n      //   }\r\n      // }\r\n    },\r\n    refreshTableClick() {\r\n      this.loadTableInfo();\r\n    },\r\n    loadColumnDomainList() {\r\n      system.invokeStudio(\"FileManager@getColumnDomain\", {datasource: \"master\"}).then((res) => {\r\n        if (!res.success) {\r\n          console.error(\"加载字段域数据错误\", res.msg);\r\n          system.showErrorDialog('加载字段域数据错误');\r\n          return;\r\n        }\r\n        this.columnDomainList = res.data;\r\n      });\r\n    },\r\n    rebuildMetadataClick() {\r\n      const loadingInstance = ElLoading.service({fullscreen: true, text: '拉取中...'})\r\n      window['database_meta'] = null\r\n      system.invokeStudio(\"FileManager@dbToMeta\", {datasource: \"master\"}).then((res) => {\r\n        if (!res.success) {\r\n          console.error(\"重新生成元数据失败\", res.msg);\r\n          system.showErrorDialog('重新生成元数据失败，请稍后再试');\r\n          return;\r\n        }\r\n        this.loadTableInfo();\r\n      }).finally(() => {\r\n        loadingInstance.close();\r\n      });\r\n    },\r\n    loadTableInfo() {\r\n      this.gridOption.gridApi.showLoadingOverlay();\r\n      system.invokeStudio(\"FileManager@getMateData\", {datasource: \"master\"}).then((res) => {\r\n        if (!res) {\r\n          system.showErrorDialog('加载数据表数据错误');\r\n          return;\r\n        }\r\n        const databaseData = []\r\n        _.forEach(res, database => {\r\n          const databaseNames = [database.schema_name]\r\n          const databaseNode = {\r\n            name: databaseNames,\r\n            comment: database.schema_name,\r\n            schema_type: TableSchemaType.DATABASE,\r\n            db_type: database.db_type,\r\n          }\r\n          this.dataBaseInfo = {\r\n            schema_name: database.schema_name,\r\n            label: database.schema_name,\r\n            schema_type: TableSchemaType.DATABASE,\r\n            db_type: database.db_type,\r\n          }\r\n          databaseData.push(databaseNode)\r\n          if (database.table_list) {\r\n            _.forEach(database.table_list, table => {\r\n              const {column_list, ...tableNode} = table;\r\n              const tableNames = _.cloneDeep(databaseNames)\r\n              tableNames.push(table.table_name)\r\n              tableNode.name = tableNames;\r\n              tableNode.comment = table.description;\r\n              tableNode.schema_type = TableSchemaType.TABLE;\r\n              tableNode.column_list = column_list\r\n              databaseData.push(tableNode)\r\n              if (table.column_list) {\r\n                _.forEach(table.column_list, column => {\r\n                  const columnNames = _.cloneDeep(tableNames)\r\n                  columnNames.push(column.column_name)\r\n                  const {...columnNode} = column\r\n                  columnNode.name = columnNames\r\n                  columnNode.comment = column.column_comment;\r\n                  columnNode.schema_type = TableSchemaType.COLUMN\r\n                  databaseData.push(columnNode)\r\n                });\r\n              }\r\n            })\r\n          }\r\n        })\r\n        this.gridOption.rowData = databaseData\r\n      }).finally(() => {\r\n        this.gridOption.gridApi.hideOverlay();\r\n      })\r\n    },\r\n    isDatabaseNode(node) {\r\n      return node.data.schema_type === TableSchemaType.DATABASE;\r\n    },\r\n    isTableNode(node) {\r\n      return node.data.schema_type === TableSchemaType.TABLE;\r\n    },\r\n    isColumnNode(node) {\r\n      return node.data.schema_type === TableSchemaType.COLUMN;\r\n    },\r\n    isPrimaryKey(node) {\r\n      return node.data.is_primary_key;\r\n    },\r\n    isNotNull(node) {\r\n      return node.data.not_null;\r\n    },\r\n    hasDescription(node) {\r\n      return !!node.data.description;\r\n    },\r\n    hasComment(node) {\r\n      return !!node.data.column_comment;\r\n    },\r\n    dataStructSyncClick() {\r\n      const dataStructSyncTabName = '数据库同步';\r\n      this.componentInfo.componentName = yvDatabaseComparison.name;\r\n      this.addContentTab(dataStructSyncTabName)\r\n    },\r\n    columnDomainManage() {\r\n      const columnDomainManageTabName = '字段域';\r\n      this.addContentTab({\r\n        component: markRaw(YvDatabaseColumnDomain),\r\n        name: columnDomainManageTabName,\r\n        data: {},\r\n      })\r\n    },\r\n    addContentTab(tabInfo) {\r\n      const tabs = this.tabProps.editableTabs;\r\n      for (let tab of tabs) {\r\n        // 是否已经打开了\r\n        if (tab.name === tabInfo.name) {\r\n          this.tabProps.activeTabName = tab.name;\r\n          return;\r\n        }\r\n      }\r\n      if (tabs.length >= DatabaseConstant.DATABASE_MAX_TABS_LEN) {\r\n        tabs.splice(0, 1);\r\n      }\r\n      tabs.push({\r\n        title: tabInfo.name,\r\n        name: tabInfo.name,\r\n        ...tabInfo\r\n      });\r\n      this.tabProps.activeTabName = tabInfo.name;\r\n    },\r\n    submitRenameTableNameDialog() {\r\n      if (!this.renameDialogProps.data.reTableName) {\r\n        system.showErrorDialog(\"请输入新表名\");\r\n        return;\r\n      }\r\n      if (this.renameDialogProps.data.reTableName === this.renameDialogProps.data.tableName) {\r\n        this.renameDialogProps.visible = false;\r\n        return;\r\n      }\r\n      const params = this.renameDialogProps.data;\r\n      system.invokeStudio(\"FileManager@renameTableDDL\", params).then((res) => {\r\n        if (!res.success) {\r\n          system.showErrorDialog(!!res.msg ? res.msg : '执行DDL语句失败, 请稍后再试');\r\n          return;\r\n        }\r\n        this.renameDialogProps.visible = false;\r\n        this.sqlEditorDialogProps.data = {...this.renameDialogProps.data}\r\n        this.sqlEditorDialogProps.data.operationType = SqlOperationType.RENAME;\r\n        this.sqlEditorDialogProps.data.codeValue = res.data;\r\n        this.$refs[this.sqlEditorDialogProps.ref].show(this.sqlEditorDialogProps.data);\r\n      })\r\n    },\r\n    removeContentTab(targetName: string) {\r\n      const tabs = this.tabProps.editableTabs\r\n      if (this.tabProps.activeTabName === targetName) {\r\n        tabs.forEach((tab, index) => {\r\n          if (tab.name === targetName) {\r\n            const nextTab = tabs[index + 1] || tabs[index - 1]\r\n            if (nextTab) {\r\n              this.tabProps.activeTabName = nextTab.name\r\n            }\r\n          }\r\n        })\r\n      }\r\n      this.tabProps.editableTabs = tabs.filter((tab) => tab.name !== targetName)\r\n    },\r\n    sqlEditorDialogCallback(sqlOperationType, value) {\r\n      this.loadTableInfo();\r\n    },\r\n    closeAllTabOnClick() {\r\n      this.tabProps.editableTabs = []\r\n    }\r\n  }\r\n}\r\n\r\ninterface Tree {\r\n  id: number\r\n  label: string\r\n  children?: Tree[]\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.content-split {\r\n  .yvan-db-table {\r\n    margin: 10px;\r\n    max-height: 150px;\r\n\r\n    .el-tree {\r\n      margin-top: 5px;\r\n      background: #EFEFEF !important;\r\n\r\n      .is-current {\r\n        > .el-tree-node__content {\r\n          color: #ffffff;\r\n          background-color: var(--main-color) !important;\r\n        }\r\n      }\r\n    }\r\n\r\n    .el-tree-node__content {\r\n      height: 35px;\r\n    }\r\n  }\r\n\r\n  .yvan-db-table-tree-node {\r\n    .el-dropdown {\r\n      position: absolute;\r\n      right: 15px;\r\n    }\r\n  }\r\n}\r\n\r\n.yvan-db-content .el-tabs__header {\r\n  border-top-left-radius: 5px;\r\n  border-top-right-radius: 5px;\r\n  /*background: var(--main-color);*/\r\n}\r\n\r\n.yvan-db-content-tabs {\r\n  .el-tabs__item {\r\n    color: #FFFFFF;\r\n  }\r\n\r\n  .is-active {\r\n    color: #000000;\r\n    background: #EFEFEF;\r\n  }\r\n}\r\n\r\n.database {\r\n  & > .left {\r\n    overflow: hidden;\r\n  }\r\n\r\n  & > .gutter {\r\n    background-color: #e1e1e1;\r\n  }\r\n\r\n  .yvan-db-table {\r\n    height: 100%;\r\n    max-height: none;\r\n    display: flex;\r\n    flex-direction: column;\r\n\r\n    & > .el-input {\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n\r\n    & > .el-tree {\r\n      flex: 1;\r\n      margin-bottom: 10px;\r\n      overflow: auto;\r\n\r\n      .yvan-db-table-tree-node {\r\n        font-size: 14px;\r\n      }\r\n    }\r\n  }\r\n\r\n  .yvan-db-content {\r\n    height: 100%;\r\n    overflow: hidden;\r\n\r\n    .el-tabs--card {\r\n      height: 100%;\r\n      display: flex;\r\n      flex-direction: column;\r\n\r\n      & > .el-tabs__header {\r\n        border-color: #ccc;\r\n        margin: 0;\r\n\r\n        .el-tabs__item.is-closable:hover {\r\n          padding-left: 20px;\r\n          padding-right: 20px;\r\n        }\r\n\r\n        .el-tabs__item.is-active {\r\n          border-bottom: 2px solid var(--main-color);\r\n        }\r\n\r\n        .el-tabs__nav {\r\n          border: none\r\n        }\r\n\r\n        .el-tabs__item {\r\n          color: var(--el-button-text-color);\r\n          border-left-color: var(--sub-header-color)\r\n        }\r\n      }\r\n\r\n      & > .el-tabs__content {\r\n        flex: 1;\r\n\r\n        & > .el-tab-pane {\r\n          height: 100%\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"design\">\r\n    <div class=\"content border-no\">\r\n      <div class=\"content-split\">\r\n        <split class=\"default-theme split-wrap database yvan-dict\">\r\n          <split-area :size=\"60\" class=\"left\">\r\n            <div class=\"yvan-dict-table\">\r\n              <div class=\"toolbar\">\r\n                <el-button link class=\"toolbar-btn\" @click=\"addDictOnClick\" :icon=\"renderIcon('fa PlusSquare')\">\r\n                  添加字典\r\n                </el-button>\r\n                <el-button link class=\"toolbar-btn\" @click=\"updateDictOnClick\" :icon=\"renderIcon('fa Edit')\">\r\n                  编辑字典\r\n                </el-button>\r\n                <el-button link class=\"toolbar-btn\" @click=\"deleteDictOnClick\" :icon=\"renderIcon('fa Trash')\">\r\n                  删除字典\r\n                </el-button>\r\n              </div>\r\n              <ag-grid-vue\r\n                  class=\"table ag-theme-balham\"\r\n                  v-bind=\"dictGridOption\"\r\n                  :rowHeight=\"30\"\r\n                  :headerHeight=\"38\"\r\n                  :enableColResize=\"true\"\r\n                  @grid-ready=\"dictGridOnGridReady\"\r\n                  :onRowClicked=\"dictGridOnRowClicked\"\r\n              ></ag-grid-vue>\r\n            </div>\r\n          </split-area>\r\n          <split-area :size=\"40\" class=\"center\" style=\"display: flex;flex-direction: column;\">\r\n            <div class=\"yvan-dict-item-table\">\r\n              <div class=\"toolbar\">\r\n                <el-button link class=\"toolbar-btn\" @click=\"addDictItemOnClick\" :icon=\"renderIcon('fa PlusSquare')\">\r\n                  添加字典项\r\n                </el-button>\r\n                <el-button link class=\"toolbar-btn\" @click=\"deleteDictItemOnClick\" :icon=\"renderIcon('fa Trash')\">\r\n                  删除字典项\r\n                </el-button>\r\n                <el-button link class=\"toolbar-btn\" @click=\"saveDictItemOnClick\" :icon=\"renderIcon('fa Save')\">\r\n                  保存\r\n                </el-button>\r\n                <el-button link class=\"toolbar-btn\" :loading=\"refreshCodeBtnOption.loading\"\r\n                           :disabled=\"refreshCodeBtnOption.disabled\" @click=\"refreshCodeOnClick\"\r\n                           :icon=\"renderIcon('fa Centercode')\">\r\n                  刷新代码\r\n                </el-button>\r\n              </div>\r\n              <ag-grid-vue\r\n                  class=\"table ag-theme-balham\"\r\n                  v-bind=\"dictItemGridOption\"\r\n                  :rowHeight=\"30\"\r\n                  :headerHeight=\"38\"\r\n                  :enableColResize=\"true\"\r\n                  @grid-ready=\"dictItemGridOnGridReady\"\r\n                  @cell-value-changed=\"dictItemOnCellValueChanged\"\r\n              ></ag-grid-vue>\r\n            </div>\r\n          </split-area>\r\n        </split>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <el-dialog v-model=\"this.dictDialogOption.visible\"\r\n             :title=\"this.dictDialogOption.title\"\r\n             width=\"40%\">\r\n    <el-form :model=\"dictForm\" label-width=\"120px\" ref=\"dictFormRef\">\r\n      <el-form-item label=\"字典编号\" prop=\"dict_code\" :rules=\"[\r\n        { required: true, message: '字典编号必填' }\r\n      ]\">\r\n        <el-input v-model=\"dictForm.dict_code\" clearable/>\r\n      </el-form-item>\r\n      <el-form-item label=\"字典描述\" prop=\"dict_desc\" :rules=\"[\r\n        { required: true, message: '字典描述必填' }\r\n      ]\">\r\n        <el-input v-model=\"dictForm.dict_desc\" clearable/>\r\n      </el-form-item>\r\n      <el-form-item label=\"字典类型\" prop=\"dict_type\" :rules=\"[\r\n        { required: true, message: '请选择字典类型' }\r\n      ]\">\r\n        <el-select v-model=\"dictForm.dict_type\">\r\n          <el-option v-for=\"dictType in dictTypes\" :label=\"dictType.text\" :value=\"dictType.value\"\r\n                     :key=\"dictType.value\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <el-form-item label=\"动态字典类型\">\r\n        <el-radio-group v-model=\"dictForm.is_dynamic\" prop=\"is_dynamic\">\r\n          <el-radio-button v-for=\"dynamicType in dynamicTypes\" :label=\"dynamicType.value\">\r\n            {{ dynamicType.text }}\r\n          </el-radio-button>\r\n        </el-radio-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"动态字典URL\" prop=\"dynamic_url\" v-if=\"isDynamicFromURL(this.dictForm.is_dynamic)\">\r\n        <el-input v-model=\"dictForm.dynamic_url\"/>\r\n      </el-form-item>\r\n      <template v-if=\"isDynamicFromSQL(this.dictForm.is_dynamic)\">\r\n        <el-alert\r\n            title=\"select 结果是 dict_value/dict_text, 例如:select t.project_id dict_value, t.project_name dict_text  from bas_project t\"\r\n            type=\"info\" show-icon/>\r\n        <el-form-item label=\"动态字典SQL\" prop=\"dynamic_sql\">\r\n          <el-input v-model=\"dictForm.dynamic_sql\" type=\"textarea\" :rows=\"5\"/>\r\n        </el-form-item>\r\n      </template>\r\n    </el-form>\r\n    <template #footer>\r\n      <span class=\"dialog-footer\">\r\n        <el-button @click=\"this.dictDialogOption.visible = false\">关闭</el-button>\r\n        <el-button type=\"primary\" @click=\"saveDict\">保存</el-button>\r\n      </span>\r\n    </template>\r\n  </el-dialog>\r\n\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport _ from \"lodash\";\r\nimport {toRaw} from \"vue\";\r\nimport {renderIcon} from '../../utils'\r\nimport {initDict} from '../../store'\r\nimport YvVjsonAggridInput from \"../../components/vjson/yv-vjson-aggrid-input.vue\"\r\nimport YvVjsonAggridColor from \"../../components/vjson/yv-vjson-aggrid-color.vue\";\r\n\r\nexport default {\r\n  components: {\r\n    YvVjsonAggridInput,\r\n    YvVjsonAggridColor\r\n  },\r\n  data() {\r\n    const dictTypes = [\r\n      {text: '用户字典', value: 0},\r\n      {text: '系统字典', value: 1},\r\n    ]\r\n    const dynamicTypes = [\r\n      {text: 'SQL', value: 1},\r\n      {text: 'URL', value: 2},\r\n      {text: 'Items', value: 3},\r\n    ]\r\n    const _this = this;\r\n    return {\r\n      dictTypes,\r\n      dynamicTypes,\r\n      editMode: false,\r\n      dictForm: {\r\n        dict_code: '',\r\n        dict_desc: '',\r\n        dict_type: 1,\r\n        is_dynamic: 0,\r\n        dynamic_url: '',\r\n        dynamic_sql: ''\r\n      },\r\n      dictDialogOption: {\r\n        visible: false,\r\n        title: '添加字典'\r\n      },\r\n      dictGridApi: null,\r\n      dictItemGridApi: null,\r\n      dictGridOption: {\r\n        enableRangeSelection: true,\r\n        rowSelection: 'single',\r\n        defaultColDef: {\r\n          resizable: true,\r\n          filter: true,\r\n          editable: false,\r\n          suppressMovable: true,\r\n          menuTabs: ['filterMenuTab'],\r\n        },\r\n        columnDefs: [\r\n          {\r\n            'pinned': 'left',\r\n            headerName: '#',\r\n            minWidth: 50,\r\n            editable: false,\r\n            suppressMenu: true,\r\n            valueGetter: (params) => {\r\n              return params.node?.rowIndex + 1\r\n            }\r\n          },\r\n          {\r\n            headerName: '字典编码',\r\n            field: 'dict_code',\r\n            minWidth: 180,\r\n            'pinned': 'left',\r\n            filter: 'agTextColumnFilter',\r\n            sortable: true,\r\n          },\r\n          {\r\n            headerName: '字典描述',\r\n            field: 'dict_desc',\r\n            minWidth: 150,\r\n            sortable: true,\r\n            filter: 'agTextColumnFilter',\r\n          },\r\n          {\r\n            headerName: '字典类别',\r\n            field: 'dict_type',\r\n            minWidth: 60,\r\n            sortable: true,\r\n            suppressMenu: true,\r\n            valueGetter: (params) => {\r\n              const dictType = dictTypes.find(dictType => dictType.value === params.data.dict_type)\r\n              if (dictType) {\r\n                return dictType.text;\r\n              }\r\n            }\r\n          },\r\n          {\r\n            headerName: '动态字典类型',\r\n            field: 'is_dynamic',\r\n            minWidth: 60,\r\n            sortable: true,\r\n            suppressMenu: true,\r\n            valueGetter: (params) => {\r\n              const defaultDynamicType = dynamicTypes[2];\r\n              if (typeof params.data.is_dynamic === 'undefined') {\r\n                params.data.is_dynamic = defaultDynamicType.value;\r\n                return defaultDynamicType.text;\r\n              }\r\n              const dynamicType = dynamicTypes.find(dynamicType => dynamicType.value === params.data.is_dynamic)\r\n              if (dynamicType) {\r\n                return dynamicType.text;\r\n              }\r\n              return defaultDynamicType.text;\r\n            }\r\n          },\r\n          {\r\n            headerName: '动态字典SQL',\r\n            field: 'dynamic_sql',\r\n            minWidth: 100,\r\n            tooltipField: 'dynamic_sql',\r\n            sortable: true,\r\n            suppressMenu: true\r\n          },\r\n          {\r\n            headerName: '动态字典URL',\r\n            field: 'dynamic_url',\r\n            minWidth: 100,\r\n            tooltipField: 'dynamic_url',\r\n            sortable: true,\r\n            suppressMenu: true\r\n          }\r\n        ],\r\n        rowData: []\r\n      },\r\n      dictItemGridOption: {\r\n        enableRangeSelection: true,\r\n        rowSelection: 'single',\r\n        defaultColDef: {\r\n          resizable: true,\r\n          editable: true,\r\n          suppressMovable: true,\r\n          suppressMenu: true,\r\n          suppressContextMenu: true\r\n        },\r\n        columnDefs: [\r\n          {\r\n            'pinned': 'left',\r\n            headerName: '#',\r\n            minWidth: 50,\r\n            maxWidth: 60,\r\n            editable: false,\r\n            valueGetter: (params) => {\r\n              return params.node?.rowIndex + 1\r\n            }\r\n          },\r\n          {headerName: '字典项', field: 'dict_text', minWidth: 120, 'pinned': 'left'},\r\n          {\r\n            headerName: '字典值',\r\n            field: 'dict_value',\r\n            minWidth: 90,\r\n            'pinned': 'left',\r\n            cellEditor: 'YvVjsonAggridInput',\r\n            cellEditorParams: {},\r\n          },\r\n          {\r\n            headerName: '排序',\r\n            field: 'dict_sort',\r\n            minWidth: 70,\r\n            'pinned': 'left',\r\n            cellEditor: 'YvVjsonAggridInput',\r\n            cellEditorParams: {type: 'number'},\r\n          },\r\n          {\r\n            headerName: '启用状态',\r\n            field: 'is_enable',\r\n            minWidth: 100,\r\n            'pinned': 'left',\r\n            editable: false,\r\n            cellRenderer: (params) => {\r\n              const input = document.createElement(\"input\")\r\n              input.type = \"checkbox\";\r\n              input.checked = params.data.is_enable == 1;\r\n              input.addEventListener('change', function () {\r\n                const row = params.data;\r\n                row.is_enable = input.checked ? 1 : 0;\r\n                _this.pushModifyRecords(params);\r\n                params.api.applyTransaction({update: [row]});\r\n              })\r\n              return input\r\n            }\r\n          },\r\n          {headerName: '变量名', field: 'var_name', minWidth: 120, tooltipField: 'var_name'},\r\n          {headerName: 'udf1', field: 'udf1', minWidth: 100},\r\n          {headerName: 'udf2', field: 'udf2', minWidth: 10},\r\n          {\r\n            headerName: 'udf3', field: 'udf3', minWidth: 100,\r\n            editable: false,\r\n            cellRenderer: 'YvVjsonAggridColor',\r\n            cellRendererParams: {\r\n              top: this,\r\n              onChange(params) {\r\n                _this.pushModifyRecords(params);\r\n              }\r\n            }\r\n          }\r\n        ],\r\n        rowData: []\r\n      },\r\n      refreshCodeBtnOption: {\r\n        loading: false,\r\n        disabled: false\r\n      },\r\n      saveDictItemData: {\r\n        newRowIdxs: [],\r\n        modifyRowIdxs: [],\r\n        removeRecords: [],\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    // ----------------- http request -------------------\r\n    findDictList() {\r\n      this.dictGridApi.showLoadingOverlay();\r\n      system.invokeStudio(\"DictManager@query\", {}).then((res) => {\r\n        if (!res.success) {\r\n          console.error(\"获取字典列表失败\", res.msg);\r\n          system.showErrorDialog(!!res.msg ? res.msg : '获取字典列表失败，请稍后再试');\r\n          return;\r\n        }\r\n        this.dictGridApi.setRowData(res.data);\r\n      });\r\n    },\r\n    findDictItemList(dictCode) {\r\n      if (!dictCode) {\r\n        return;\r\n      }\r\n      this.dictItemGridApi.showLoadingOverlay();\r\n      system.invokeStudio(\"DictManager@queryItems\", {dict_code: dictCode}).then((res) => {\r\n        if (!res.success) {\r\n          console.error(\"获取字典项列表失败\", res.msg);\r\n          system.showErrorDialog(!!res.msg ? res.msg : '获取字典项列表失败，请稍后再试');\r\n          return;\r\n        }\r\n        const dictItemList = res.data;\r\n        const distDictItemList = [];\r\n        for (let dictItem of dictItemList) {\r\n          const distDictItem = _.cloneDeep(dictItem);\r\n          distDictItem._origin = dictItem;\r\n          distDictItemList.push(distDictItem);\r\n        }\r\n        this.dictItemGridApi.setRowData(distDictItemList);\r\n      });\r\n    },\r\n    // ----------------- dict -------------------\r\n    dictGridOnGridReady(params) {\r\n      params.api.sizeColumnsToFit();\r\n      this.dictGridApi = params.api;\r\n      this.findDictList();\r\n    },\r\n    addDictOnClick() {\r\n      this.editMode = false;\r\n      this.dictForm = {\r\n        origin_key: '',\r\n        dict_code: '',\r\n        dict_desc: '',\r\n        dict_type: this.dictTypes[1].value,\r\n        is_dynamic: this.dynamicTypes[2].value,\r\n        dynamic_url: '',\r\n        dynamic_sql: ''\r\n      }\r\n      this.dictDialogOption.visible = true;\r\n    },\r\n    updateDictOnClick() {\r\n      const selectedRows = this.dictGridApi.getSelectedRows();\r\n      if (selectedRows.length <= 0) {\r\n        system.showErrorDialog('请选择需要编辑的字典数据');\r\n        return;\r\n      }\r\n      this.editMode = true;\r\n      this.dictForm = _.cloneDeep(selectedRows[0]);\r\n      this.dictForm.origin_key = selectedRows[0].dict_code;\r\n      if (typeof this.dictForm.is_dynamic === 'undefined' || this.dictForm.is_dynamic === null) {\r\n        this.dictForm.is_dynamic = this.dynamicTypes[2].value;\r\n      }\r\n      this.dictDialogOption.title = '编辑字典';\r\n      this.dictDialogOption.visible = true;\r\n    },\r\n    deleteDictOnClick() {\r\n      const selectedRows = this.dictGridApi.getSelectedRows();\r\n      if (selectedRows.length <= 0) {\r\n        system.showErrorDialog('请选择需要删除的字典数据');\r\n        return;\r\n      }\r\n      const dictCode = selectedRows[0].dict_code;\r\n      system.confirm(`真的要删除【${dictCode}】?`).then(() => {\r\n        system.invokeStudio('DictManager@removeDict', {\r\n          dict_code: dictCode\r\n        }).then((res) => {\r\n          if (res.success) {\r\n            system.msg(res.msg ? res.msg : '保存成功');\r\n            this.findDictList();\r\n            return;\r\n          }\r\n          system.showErrorDialog(res.msg ? res.msg : '系统异常, 请联系管理员');\r\n        })\r\n      })\r\n    },\r\n    saveDict() {\r\n      this.$refs.dictFormRef.validate((valid, fields) => {\r\n        if (!valid) {\r\n          system.showErrorDialog(\"请规范填写表单数据\");\r\n          return;\r\n        }\r\n        system.invokeStudio('DictManager@createOrUpdate', {\r\n          edit: this.editMode,\r\n          form: this.dictForm\r\n        }).then((res) => {\r\n          if (res.success) {\r\n            system.msg(res.msg ? res.msg : '保存成功');\r\n            this.dictDialogOption.visible = false;\r\n            this.findDictList();\r\n            return;\r\n          }\r\n          system.showErrorDialog(res.msg ? res.msg : '保存失败');\r\n        })\r\n      })\r\n    },\r\n    dictGridOnRowClicked(params) {\r\n      console.log('params', params)\r\n      const is_dynamic = params.data.is_dynamic;\r\n      this.refreshCodeBtnOption.disabled = false;\r\n      if (is_dynamic === 1 || is_dynamic === 2) {\r\n        this.refreshCodeBtnOption.disabled = true;\r\n      }\r\n      this.findDictItemList(params.data.dict_code);\r\n    },\r\n    isDynamicFromSQL(is_dynamic) {\r\n      return is_dynamic == this.dynamicTypes[0].value;\r\n    },\r\n    isDynamicFromURL(is_dynamic) {\r\n      return is_dynamic == this.dynamicTypes[1].value;\r\n    },\r\n\r\n    // ----------------- dict item -------------------\r\n    dictItemGridOnGridReady(params) {\r\n      params.api.sizeColumnsToFit();\r\n      this.dictItemGridApi = params.api;\r\n    },\r\n    dictItemOnCellValueChanged(params) {\r\n      this.pushModifyRecords(params);\r\n    },\r\n    addDictItemOnClick() {\r\n      const dictSelectedRows = this.dictGridApi.getSelectedRows();\r\n      if (dictSelectedRows.length <= 0) {\r\n        system.showErrorDialog('请先选择字典数据');\r\n        return;\r\n      }\r\n      const dictItemList = [];\r\n      let maxDictItemSortNo = 0;\r\n      this.dictItemGridApi.forEachNode(rowNode => {\r\n        const dictItem = rowNode.data;\r\n        dictItemList.push(dictItem)\r\n        const sortNo = dictItem.dict_sort;\r\n        if (typeof sortNo !== 'undefined' && sortNo > maxDictItemSortNo) {\r\n          maxDictItemSortNo = sortNo;\r\n        }\r\n      });\r\n      dictItemList.push({\r\n        dict_code: dictSelectedRows[0].dict_code,\r\n        dict_text: '新配置项',\r\n        dict_value: '0000',\r\n        dict_sort: ++maxDictItemSortNo,\r\n        is_enable: 1\r\n      })\r\n      this.dictItemGridApi.setRowData(dictItemList);\r\n\r\n      // 找到最后一行\r\n      let lastNode = undefined\r\n      this.dictItemGridApi.forEachNode((node) => {\r\n        lastNode = node\r\n      });\r\n      if (lastNode) {\r\n        this.saveDictItemData.newRowIdxs.push(lastNode.rowIndex);\r\n        // 强制定位到这一行\r\n        lastNode.setSelected(true);\r\n        this.dictItemGridApi.ensureIndexVisible(lastNode.rowIndex, 'middle');\r\n      }\r\n    },\r\n    deleteDictItemOnClick() {\r\n      const selectedNodes = this.dictItemGridApi.getSelectedNodes();\r\n      if (selectedNodes.length <= 0) {\r\n        system.showErrorDialog('请选择需要删除的数据');\r\n        return;\r\n      }\r\n      const selectedRows = [];\r\n      selectedNodes.forEach((node) => {\r\n        selectedRows.push(node.data);\r\n        this.pushRemoveRecords(node);\r\n      })\r\n      this.dictItemGridApi.applyTransaction({remove: selectedRows});\r\n    },\r\n    saveDictItemOnClick() {\r\n      // 请求参数: {\"newRows\":[],\"modifyRows\":[],\"removeRecords\":[],\"dict_code\":\"SERIALPORT_PARITY\"}\r\n      const dictSelectedRows = this.dictGridApi.getSelectedRows();\r\n      if (dictSelectedRows.length <= 0) {\r\n        system.showErrorDialog('请选择一个字典后添加');\r\n        return;\r\n      }\r\n      const dictCode = dictSelectedRows[0].dict_code;\r\n      const editingCells = this.dictItemGridApi.getEditingCells();\r\n      this.dictItemGridApi.stopEditing();\r\n      // 处理编辑中的单元格, 没有触发cellValueChange事件, 导致modifyRowIdxs数据丢失问题\r\n      if (editingCells) {\r\n        _.forEach(editingCells, (cell) => {\r\n          const rowIdx = cell.rowIndex;\r\n          if (!this.saveDictItemData.newRowIdxs.includes(rowIdx)\r\n              && !this.saveDictItemData.modifyRowIdxs.includes(rowIdx)) {\r\n            this.saveDictItemData.modifyRowIdxs.push(rowIdx);\r\n          }\r\n        })\r\n      }\r\n      const newRows = [], modifyRows = [], varNames = [];\r\n      this.dictItemGridApi.forEachNode((node) => {\r\n        const rowIdx = node.rowIndex;\r\n        if (this.saveDictItemData.newRowIdxs.includes(rowIdx)) {\r\n          newRows.push(node.data);\r\n        }\r\n        if (this.saveDictItemData.modifyRowIdxs.includes(rowIdx)) {\r\n          modifyRows.push(node.data);\r\n        }\r\n        varNames.push(node.data.var_name);\r\n      });\r\n      /*判断添加明细变量名重复的数据*/\r\n      for (let i = 0; i < varNames.length; i++) {\r\n        for (let j = i + 1; j < varNames.length; j++) {\r\n          if (varNames[i] == varNames[j]) {\r\n            system.showErrorDialog('第' + (i + 1) + '行变量数据和第' + (j + 1) + '行变量数据重复，请检查！');\r\n            return;\r\n          }\r\n        }\r\n      }\r\n      system.invokeStudio('DictManager@saveItems', {\r\n        newRows,\r\n        modifyRows,\r\n        removeRecords: toRaw(this.saveDictItemData.removeRecords),\r\n        dict_code: dictCode\r\n      }).then(res => {\r\n        system.msg(res.msg)\r\n        this.findDictItemList(dictCode);\r\n        this.saveDictItemData = {\r\n          newRowIdxs: [],\r\n          modifyRowIdxs: [],\r\n          removeRecords: [],\r\n        }\r\n        initDict().finally()\r\n      })\r\n    },\r\n    refreshCodeOnClick() {\r\n      const dictSelectedRows = this.dictGridApi.getSelectedRows();\r\n      if (dictSelectedRows.length <= 0) {\r\n        system.showErrorDialog('请先选择字典');\r\n        return;\r\n      }\r\n      let dictCode = '';\r\n      let varNames = [];\r\n      this.dictItemGridApi.forEachNode((node) => {\r\n        dictCode = node.data.dict_code;\r\n        varNames.push(node.data.var_name);\r\n      })\r\n      /*判断添加明细变量名重复的数据*/\r\n      for (let i = 0; i < varNames.length; i++) {\r\n        for (let j = i + 1; j < varNames.length; j++) {\r\n          if (varNames[i] == varNames[j]) {\r\n            system.showErrorDialog('第' + (i + 1) + '行变量数据和第' + (j + 1) + '行变量数据重复，请检查！');\r\n            return;\r\n          }\r\n        }\r\n      }\r\n      this.refreshCodeBtnOption.loading = true\r\n      system.invokeStudio('FileManager@createDictEnum', {\r\n        dictCode: dictCode\r\n      }).then(res => {\r\n        system.msg(res.msg)\r\n      }).finally(() => {\r\n        this.refreshCodeBtnOption.loading = false;\r\n      })\r\n    },\r\n    /**\r\n     * 记录修改的数据行\r\n     */\r\n    pushModifyRecords(node) {\r\n      const rowIdx = node.rowIndex;\r\n      if (this.saveDictItemData.newRowIdxs.includes(rowIdx)) {\r\n        return;\r\n      }\r\n      if (!this.saveDictItemData.modifyRowIdxs.includes(rowIdx)) {\r\n        this.saveDictItemData.modifyRowIdxs.push(rowIdx);\r\n      }\r\n    },\r\n    /**\r\n     * 记录删除的数据行\r\n     */\r\n    pushRemoveRecords(node) {\r\n      const rowIdx = node.rowIndex;\r\n      if (this.saveDictItemData.newRowIdxs.includes(rowIdx)) {\r\n        this.saveDictItemData.newRowIdxs.splice(this.saveDictItemData.newRowIdxs.indexOf(rowIdx), 1);\r\n        return;\r\n      }\r\n      if (this.saveDictItemData.modifyRowIdxs.includes(rowIdx)) {\r\n        this.saveDictItemData.modifyRowIdxs.splice(this.saveDictItemData.modifyRowIdxs.indexOf(rowIdx), 1);\r\n      }\r\n      this.saveDictItemData.removeRecords.push(node.data);\r\n    },\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.design .content.border-no {\r\n  border: none\r\n}\r\n\r\n.yvan-dict {\r\n  .table.ag-theme-balham {\r\n    font-size: 14px;\r\n    font-weight: 400;\r\n\r\n    .ag-root-wrapper {\r\n      border-color: #ccc;\r\n    }\r\n\r\n    .ag-header {\r\n      border-color: #e5e5e5;\r\n      background-color: #f0f0f0;\r\n\r\n      .ag-pinned-left-header {\r\n        border-color: #e5e5e5;\r\n      }\r\n\r\n      .ag-header-row {\r\n        color: #333\r\n      }\r\n    }\r\n\r\n    .ag-row {\r\n      border-color: #e5e5e5;\r\n      color: #606266\r\n    }\r\n\r\n    .ag-cell.ag-cell-last-left-pinned:not(.ag-cell-range-right):not(.ag-cell-range-single-cell) {\r\n      border-right-color: #e5e5e5;\r\n    }\r\n  }\r\n\r\n  .yvan-dict-table, .yvan-dict-item-table {\r\n    height: 100%;\r\n    display: flex;\r\n    flex-direction: column;\r\n\r\n    .table {\r\n      flex: 1;\r\n      margin: 0 5px 5px 5px\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"design\">\r\n    <div class=\"content border-no\">\r\n      <div class=\"content-split\">\r\n        <split class=\"default-theme split-wrap database yvan-dict\">\r\n          <split-area :size=\"60\" class=\"left\">\r\n            <div class=\"yvan-dict-table\">\r\n              <div class=\"toolbar\">\r\n                <el-button link class=\"toolbar-btn\" @click=\"addDictOnClick\" :icon=\"renderIcon('fa PlusSquare')\">\r\n                  添加字典\r\n                </el-button>\r\n                <el-button link class=\"toolbar-btn\" @click=\"updateDictOnClick\" :icon=\"renderIcon('fa Edit')\">\r\n                  编辑字典\r\n                </el-button>\r\n                <el-button link class=\"toolbar-btn\" @click=\"deleteDictOnClick\" :icon=\"renderIcon('fa Trash')\">\r\n                  删除字典\r\n                </el-button>\r\n              </div>\r\n              <ag-grid-vue\r\n                  class=\"table ag-theme-balham\"\r\n                  v-bind=\"dictGridOption\"\r\n                  :rowHeight=\"30\"\r\n                  :headerHeight=\"38\"\r\n                  :enableColResize=\"true\"\r\n                  @grid-ready=\"dictGridOnGridReady\"\r\n                  :onRowClicked=\"dictGridOnRowClicked\"\r\n              ></ag-grid-vue>\r\n            </div>\r\n          </split-area>\r\n          <split-area :size=\"40\" class=\"center\" style=\"display: flex;flex-direction: column;\">\r\n            <div class=\"yvan-dict-item-table\">\r\n              <div class=\"toolbar\">\r\n                <el-button link class=\"toolbar-btn\" @click=\"addDictItemOnClick\" :icon=\"renderIcon('fa PlusSquare')\">\r\n                  添加字典项\r\n                </el-button>\r\n                <el-button link class=\"toolbar-btn\" @click=\"deleteDictItemOnClick\" :icon=\"renderIcon('fa Trash')\">\r\n                  删除字典项\r\n                </el-button>\r\n                <el-button link class=\"toolbar-btn\" @click=\"saveDictItemOnClick\" :icon=\"renderIcon('fa Save')\">\r\n                  保存\r\n                </el-button>\r\n                <el-button link class=\"toolbar-btn\" :loading=\"refreshCodeBtnOption.loading\"\r\n                           :disabled=\"refreshCodeBtnOption.disabled\" @click=\"refreshCodeOnClick\"\r\n                           :icon=\"renderIcon('fa Centercode')\">\r\n                  刷新代码\r\n                </el-button>\r\n              </div>\r\n              <ag-grid-vue\r\n                  class=\"table ag-theme-balham\"\r\n                  v-bind=\"dictItemGridOption\"\r\n                  :rowHeight=\"30\"\r\n                  :headerHeight=\"38\"\r\n                  :enableColResize=\"true\"\r\n                  @grid-ready=\"dictItemGridOnGridReady\"\r\n                  @cell-value-changed=\"dictItemOnCellValueChanged\"\r\n              ></ag-grid-vue>\r\n            </div>\r\n          </split-area>\r\n        </split>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <el-dialog v-model=\"this.dictDialogOption.visible\"\r\n             :title=\"this.dictDialogOption.title\"\r\n             width=\"40%\">\r\n    <el-form :model=\"dictForm\" label-width=\"120px\" ref=\"dictFormRef\">\r\n      <el-form-item label=\"字典编号\" prop=\"dict_code\" :rules=\"[\r\n        { required: true, message: '字典编号必填' }\r\n      ]\">\r\n        <el-input v-model=\"dictForm.dict_code\" clearable/>\r\n      </el-form-item>\r\n      <el-form-item label=\"字典描述\" prop=\"dict_desc\" :rules=\"[\r\n        { required: true, message: '字典描述必填' }\r\n      ]\">\r\n        <el-input v-model=\"dictForm.dict_desc\" clearable/>\r\n      </el-form-item>\r\n      <el-form-item label=\"字典类型\" prop=\"dict_type\" :rules=\"[\r\n        { required: true, message: '请选择字典类型' }\r\n      ]\">\r\n        <el-select v-model=\"dictForm.dict_type\">\r\n          <el-option v-for=\"dictType in dictTypes\" :label=\"dictType.text\" :value=\"dictType.value\"\r\n                     :key=\"dictType.value\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <el-form-item label=\"动态字典类型\">\r\n        <el-radio-group v-model=\"dictForm.is_dynamic\" prop=\"is_dynamic\">\r\n          <el-radio-button v-for=\"dynamicType in dynamicTypes\" :label=\"dynamicType.value\">\r\n            {{ dynamicType.text }}\r\n          </el-radio-button>\r\n        </el-radio-group>\r\n      </el-form-item>\r\n      <el-form-item label=\"动态字典URL\" prop=\"dynamic_url\" v-if=\"isDynamicFromURL(this.dictForm.is_dynamic)\">\r\n        <el-input v-model=\"dictForm.dynamic_url\"/>\r\n      </el-form-item>\r\n      <template v-if=\"isDynamicFromSQL(this.dictForm.is_dynamic)\">\r\n        <el-alert\r\n            title=\"select 结果是 dict_value/dict_text, 例如:select t.project_id dict_value, t.project_name dict_text  from bas_project t\"\r\n            type=\"info\" show-icon/>\r\n        <el-form-item label=\"动态字典SQL\" prop=\"dynamic_sql\">\r\n          <el-input v-model=\"dictForm.dynamic_sql\" type=\"textarea\" :rows=\"5\"/>\r\n        </el-form-item>\r\n      </template>\r\n    </el-form>\r\n    <template #footer>\r\n      <span class=\"dialog-footer\">\r\n        <el-button @click=\"this.dictDialogOption.visible = false\">关闭</el-button>\r\n        <el-button type=\"primary\" @click=\"saveDict\">保存</el-button>\r\n      </span>\r\n    </template>\r\n  </el-dialog>\r\n\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport _ from \"lodash\";\r\nimport {toRaw} from \"vue\";\r\nimport {renderIcon} from '../../utils'\r\nimport {initDict} from '../../store'\r\nimport YvVjsonAggridInput from \"../../components/vjson/yv-vjson-aggrid-input.vue\"\r\nimport YvVjsonAggridColor from \"../../components/vjson/yv-vjson-aggrid-color.vue\";\r\n\r\nexport default {\r\n  components: {\r\n    YvVjsonAggridInput,\r\n    YvVjsonAggridColor\r\n  },\r\n  data() {\r\n    const dictTypes = [\r\n      {text: '用户字典', value: 0},\r\n      {text: '系统字典', value: 1},\r\n    ]\r\n    const dynamicTypes = [\r\n      {text: 'SQL', value: 1},\r\n      {text: 'URL', value: 2},\r\n      {text: 'Items', value: 3},\r\n    ]\r\n    const _this = this;\r\n    return {\r\n      dictTypes,\r\n      dynamicTypes,\r\n      editMode: false,\r\n      dictForm: {\r\n        dict_code: '',\r\n        dict_desc: '',\r\n        dict_type: 1,\r\n        is_dynamic: 0,\r\n        dynamic_url: '',\r\n        dynamic_sql: ''\r\n      },\r\n      dictDialogOption: {\r\n        visible: false,\r\n        title: '添加字典'\r\n      },\r\n      dictGridApi: null,\r\n      dictItemGridApi: null,\r\n      dictGridOption: {\r\n        enableRangeSelection: true,\r\n        rowSelection: 'single',\r\n        defaultColDef: {\r\n          resizable: true,\r\n          filter: true,\r\n          editable: false,\r\n          suppressMovable: true,\r\n          menuTabs: ['filterMenuTab'],\r\n        },\r\n        columnDefs: [\r\n          {\r\n            'pinned': 'left',\r\n            headerName: '#',\r\n            minWidth: 50,\r\n            editable: false,\r\n            suppressMenu: true,\r\n            valueGetter: (params) => {\r\n              return params.node?.rowIndex + 1\r\n            }\r\n          },\r\n          {\r\n            headerName: '字典编码',\r\n            field: 'dict_code',\r\n            minWidth: 180,\r\n            'pinned': 'left',\r\n            filter: 'agTextColumnFilter',\r\n            sortable: true,\r\n          },\r\n          {\r\n            headerName: '字典描述',\r\n            field: 'dict_desc',\r\n            minWidth: 150,\r\n            sortable: true,\r\n            filter: 'agTextColumnFilter',\r\n          },\r\n          {\r\n            headerName: '字典类别',\r\n            field: 'dict_type',\r\n            minWidth: 60,\r\n            sortable: true,\r\n            suppressMenu: true,\r\n            valueGetter: (params) => {\r\n              const dictType = dictTypes.find(dictType => dictType.value === params.data.dict_type)\r\n              if (dictType) {\r\n                return dictType.text;\r\n              }\r\n            }\r\n          },\r\n          {\r\n            headerName: '动态字典类型',\r\n            field: 'is_dynamic',\r\n            minWidth: 60,\r\n            sortable: true,\r\n            suppressMenu: true,\r\n            valueGetter: (params) => {\r\n              const defaultDynamicType = dynamicTypes[2];\r\n              if (typeof params.data.is_dynamic === 'undefined') {\r\n                params.data.is_dynamic = defaultDynamicType.value;\r\n                return defaultDynamicType.text;\r\n              }\r\n              const dynamicType = dynamicTypes.find(dynamicType => dynamicType.value === params.data.is_dynamic)\r\n              if (dynamicType) {\r\n                return dynamicType.text;\r\n              }\r\n              return defaultDynamicType.text;\r\n            }\r\n          },\r\n          {\r\n            headerName: '动态字典SQL',\r\n            field: 'dynamic_sql',\r\n            minWidth: 100,\r\n            tooltipField: 'dynamic_sql',\r\n            sortable: true,\r\n            suppressMenu: true\r\n          },\r\n          {\r\n            headerName: '动态字典URL',\r\n            field: 'dynamic_url',\r\n            minWidth: 100,\r\n            tooltipField: 'dynamic_url',\r\n            sortable: true,\r\n            suppressMenu: true\r\n          }\r\n        ],\r\n        rowData: []\r\n      },\r\n      dictItemGridOption: {\r\n        enableRangeSelection: true,\r\n        rowSelection: 'single',\r\n        defaultColDef: {\r\n          resizable: true,\r\n          editable: true,\r\n          suppressMovable: true,\r\n          suppressMenu: true,\r\n          suppressContextMenu: true\r\n        },\r\n        columnDefs: [\r\n          {\r\n            'pinned': 'left',\r\n            headerName: '#',\r\n            minWidth: 50,\r\n            maxWidth: 60,\r\n            editable: false,\r\n            valueGetter: (params) => {\r\n              return params.node?.rowIndex + 1\r\n            }\r\n          },\r\n          {headerName: '字典项', field: 'dict_text', minWidth: 120, 'pinned': 'left'},\r\n          {\r\n            headerName: '字典值',\r\n            field: 'dict_value',\r\n            minWidth: 90,\r\n            'pinned': 'left',\r\n            cellEditor: 'YvVjsonAggridInput',\r\n            cellEditorParams: {},\r\n          },\r\n          {\r\n            headerName: '排序',\r\n            field: 'dict_sort',\r\n            minWidth: 70,\r\n            'pinned': 'left',\r\n            cellEditor: 'YvVjsonAggridInput',\r\n            cellEditorParams: {type: 'number'},\r\n          },\r\n          {\r\n            headerName: '启用状态',\r\n            field: 'is_enable',\r\n            minWidth: 100,\r\n            'pinned': 'left',\r\n            editable: false,\r\n            cellRenderer: (params) => {\r\n              const input = document.createElement(\"input\")\r\n              input.type = \"checkbox\";\r\n              input.checked = params.data.is_enable == 1;\r\n              input.addEventListener('change', function () {\r\n                const row = params.data;\r\n                row.is_enable = input.checked ? 1 : 0;\r\n                _this.pushModifyRecords(params);\r\n                params.api.applyTransaction({update: [row]});\r\n              })\r\n              return input\r\n            }\r\n          },\r\n          {headerName: '变量名', field: 'var_name', minWidth: 120, tooltipField: 'var_name'},\r\n          {headerName: 'udf1', field: 'udf1', minWidth: 100},\r\n          {headerName: 'udf2', field: 'udf2', minWidth: 10},\r\n          {\r\n            headerName: 'udf3', field: 'udf3', minWidth: 100,\r\n            editable: false,\r\n            cellRenderer: 'YvVjsonAggridColor',\r\n            cellRendererParams: {\r\n              top: this,\r\n              onChange(params) {\r\n                _this.pushModifyRecords(params);\r\n              }\r\n            }\r\n          }\r\n        ],\r\n        rowData: []\r\n      },\r\n      refreshCodeBtnOption: {\r\n        loading: false,\r\n        disabled: false\r\n      },\r\n      saveDictItemData: {\r\n        newRowIdxs: [],\r\n        modifyRowIdxs: [],\r\n        removeRecords: [],\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    // ----------------- http request -------------------\r\n    findDictList() {\r\n      this.dictGridApi.showLoadingOverlay();\r\n      system.invokeStudio(\"DictManager@query\", {}).then((res) => {\r\n        if (!res.success) {\r\n          console.error(\"获取字典列表失败\", res.msg);\r\n          system.showErrorDialog(!!res.msg ? res.msg : '获取字典列表失败，请稍后再试');\r\n          return;\r\n        }\r\n        this.dictGridApi.setRowData(res.data);\r\n      });\r\n    },\r\n    findDictItemList(dictCode) {\r\n      if (!dictCode) {\r\n        return;\r\n      }\r\n      this.dictItemGridApi.showLoadingOverlay();\r\n      system.invokeStudio(\"DictManager@queryItems\", {dict_code: dictCode}).then((res) => {\r\n        if (!res.success) {\r\n          console.error(\"获取字典项列表失败\", res.msg);\r\n          system.showErrorDialog(!!res.msg ? res.msg : '获取字典项列表失败，请稍后再试');\r\n          return;\r\n        }\r\n        const dictItemList = res.data;\r\n        const distDictItemList = [];\r\n        for (let dictItem of dictItemList) {\r\n          const distDictItem = _.cloneDeep(dictItem);\r\n          distDictItem._origin = dictItem;\r\n          distDictItemList.push(distDictItem);\r\n        }\r\n        this.dictItemGridApi.setRowData(distDictItemList);\r\n      });\r\n    },\r\n    // ----------------- dict -------------------\r\n    dictGridOnGridReady(params) {\r\n      params.api.sizeColumnsToFit();\r\n      this.dictGridApi = params.api;\r\n      this.findDictList();\r\n    },\r\n    addDictOnClick() {\r\n      this.editMode = false;\r\n      this.dictForm = {\r\n        origin_key: '',\r\n        dict_code: '',\r\n        dict_desc: '',\r\n        dict_type: this.dictTypes[1].value,\r\n        is_dynamic: this.dynamicTypes[2].value,\r\n        dynamic_url: '',\r\n        dynamic_sql: ''\r\n      }\r\n      this.dictDialogOption.visible = true;\r\n    },\r\n    updateDictOnClick() {\r\n      const selectedRows = this.dictGridApi.getSelectedRows();\r\n      if (selectedRows.length <= 0) {\r\n        system.showErrorDialog('请选择需要编辑的字典数据');\r\n        return;\r\n      }\r\n      this.editMode = true;\r\n      this.dictForm = _.cloneDeep(selectedRows[0]);\r\n      this.dictForm.origin_key = selectedRows[0].dict_code;\r\n      if (typeof this.dictForm.is_dynamic === 'undefined' || this.dictForm.is_dynamic === null) {\r\n        this.dictForm.is_dynamic = this.dynamicTypes[2].value;\r\n      }\r\n      this.dictDialogOption.title = '编辑字典';\r\n      this.dictDialogOption.visible = true;\r\n    },\r\n    deleteDictOnClick() {\r\n      const selectedRows = this.dictGridApi.getSelectedRows();\r\n      if (selectedRows.length <= 0) {\r\n        system.showErrorDialog('请选择需要删除的字典数据');\r\n        return;\r\n      }\r\n      const dictCode = selectedRows[0].dict_code;\r\n      system.confirm(`真的要删除【${dictCode}】?`).then(() => {\r\n        system.invokeStudio('DictManager@removeDict', {\r\n          dict_code: dictCode\r\n        }).then((res) => {\r\n          if (res.success) {\r\n            system.msg(res.msg ? res.msg : '保存成功');\r\n            this.findDictList();\r\n            return;\r\n          }\r\n          system.showErrorDialog(res.msg ? res.msg : '系统异常, 请联系管理员');\r\n        })\r\n      })\r\n    },\r\n    saveDict() {\r\n      this.$refs.dictFormRef.validate((valid, fields) => {\r\n        if (!valid) {\r\n          system.showErrorDialog(\"请规范填写表单数据\");\r\n          return;\r\n        }\r\n        system.invokeStudio('DictManager@createOrUpdate', {\r\n          edit: this.editMode,\r\n          form: this.dictForm\r\n        }).then((res) => {\r\n          if (res.success) {\r\n            system.msg(res.msg ? res.msg : '保存成功');\r\n            this.dictDialogOption.visible = false;\r\n            this.findDictList();\r\n            return;\r\n          }\r\n          system.showErrorDialog(res.msg ? res.msg : '保存失败');\r\n        })\r\n      })\r\n    },\r\n    dictGridOnRowClicked(params) {\r\n      console.log('params', params)\r\n      const is_dynamic = params.data.is_dynamic;\r\n      this.refreshCodeBtnOption.disabled = false;\r\n      if (is_dynamic === 1 || is_dynamic === 2) {\r\n        this.refreshCodeBtnOption.disabled = true;\r\n      }\r\n      this.findDictItemList(params.data.dict_code);\r\n    },\r\n    isDynamicFromSQL(is_dynamic) {\r\n      return is_dynamic == this.dynamicTypes[0].value;\r\n    },\r\n    isDynamicFromURL(is_dynamic) {\r\n      return is_dynamic == this.dynamicTypes[1].value;\r\n    },\r\n\r\n    // ----------------- dict item -------------------\r\n    dictItemGridOnGridReady(params) {\r\n      params.api.sizeColumnsToFit();\r\n      this.dictItemGridApi = params.api;\r\n    },\r\n    dictItemOnCellValueChanged(params) {\r\n      this.pushModifyRecords(params);\r\n    },\r\n    addDictItemOnClick() {\r\n      const dictSelectedRows = this.dictGridApi.getSelectedRows();\r\n      if (dictSelectedRows.length <= 0) {\r\n        system.showErrorDialog('请先选择字典数据');\r\n        return;\r\n      }\r\n      const dictItemList = [];\r\n      let maxDictItemSortNo = 0;\r\n      this.dictItemGridApi.forEachNode(rowNode => {\r\n        const dictItem = rowNode.data;\r\n        dictItemList.push(dictItem)\r\n        const sortNo = dictItem.dict_sort;\r\n        if (typeof sortNo !== 'undefined' && sortNo > maxDictItemSortNo) {\r\n          maxDictItemSortNo = sortNo;\r\n        }\r\n      });\r\n      dictItemList.push({\r\n        dict_code: dictSelectedRows[0].dict_code,\r\n        dict_text: '新配置项',\r\n        dict_value: '0000',\r\n        dict_sort: ++maxDictItemSortNo,\r\n        is_enable: 1\r\n      })\r\n      this.dictItemGridApi.setRowData(dictItemList);\r\n\r\n      // 找到最后一行\r\n      let lastNode = undefined\r\n      this.dictItemGridApi.forEachNode((node) => {\r\n        lastNode = node\r\n      });\r\n      if (lastNode) {\r\n        this.saveDictItemData.newRowIdxs.push(lastNode.rowIndex);\r\n        // 强制定位到这一行\r\n        lastNode.setSelected(true);\r\n        this.dictItemGridApi.ensureIndexVisible(lastNode.rowIndex, 'middle');\r\n      }\r\n    },\r\n    deleteDictItemOnClick() {\r\n      const selectedNodes = this.dictItemGridApi.getSelectedNodes();\r\n      if (selectedNodes.length <= 0) {\r\n        system.showErrorDialog('请选择需要删除的数据');\r\n        return;\r\n      }\r\n      const selectedRows = [];\r\n      selectedNodes.forEach((node) => {\r\n        selectedRows.push(node.data);\r\n        this.pushRemoveRecords(node);\r\n      })\r\n      this.dictItemGridApi.applyTransaction({remove: selectedRows});\r\n    },\r\n    saveDictItemOnClick() {\r\n      // 请求参数: {\"newRows\":[],\"modifyRows\":[],\"removeRecords\":[],\"dict_code\":\"SERIALPORT_PARITY\"}\r\n      const dictSelectedRows = this.dictGridApi.getSelectedRows();\r\n      if (dictSelectedRows.length <= 0) {\r\n        system.showErrorDialog('请选择一个字典后添加');\r\n        return;\r\n      }\r\n      const dictCode = dictSelectedRows[0].dict_code;\r\n      const editingCells = this.dictItemGridApi.getEditingCells();\r\n      this.dictItemGridApi.stopEditing();\r\n      // 处理编辑中的单元格, 没有触发cellValueChange事件, 导致modifyRowIdxs数据丢失问题\r\n      if (editingCells) {\r\n        _.forEach(editingCells, (cell) => {\r\n          const rowIdx = cell.rowIndex;\r\n          if (!this.saveDictItemData.newRowIdxs.includes(rowIdx)\r\n              && !this.saveDictItemData.modifyRowIdxs.includes(rowIdx)) {\r\n            this.saveDictItemData.modifyRowIdxs.push(rowIdx);\r\n          }\r\n        })\r\n      }\r\n      const newRows = [], modifyRows = [], varNames = [];\r\n      this.dictItemGridApi.forEachNode((node) => {\r\n        const rowIdx = node.rowIndex;\r\n        if (this.saveDictItemData.newRowIdxs.includes(rowIdx)) {\r\n          newRows.push(node.data);\r\n        }\r\n        if (this.saveDictItemData.modifyRowIdxs.includes(rowIdx)) {\r\n          modifyRows.push(node.data);\r\n        }\r\n        varNames.push(node.data.var_name);\r\n      });\r\n      /*判断添加明细变量名重复的数据*/\r\n      for (let i = 0; i < varNames.length; i++) {\r\n        for (let j = i + 1; j < varNames.length; j++) {\r\n          if (varNames[i] == varNames[j]) {\r\n            system.showErrorDialog('第' + (i + 1) + '行变量数据和第' + (j + 1) + '行变量数据重复，请检查！');\r\n            return;\r\n          }\r\n        }\r\n      }\r\n      system.invokeStudio('DictManager@saveItems', {\r\n        newRows,\r\n        modifyRows,\r\n        removeRecords: toRaw(this.saveDictItemData.removeRecords),\r\n        dict_code: dictCode\r\n      }).then(res => {\r\n        system.msg(res.msg)\r\n        this.findDictItemList(dictCode);\r\n        this.saveDictItemData = {\r\n          newRowIdxs: [],\r\n          modifyRowIdxs: [],\r\n          removeRecords: [],\r\n        }\r\n        initDict().finally()\r\n      })\r\n    },\r\n    refreshCodeOnClick() {\r\n      const dictSelectedRows = this.dictGridApi.getSelectedRows();\r\n      if (dictSelectedRows.length <= 0) {\r\n        system.showErrorDialog('请先选择字典');\r\n        return;\r\n      }\r\n      let dictCode = '';\r\n      let varNames = [];\r\n      this.dictItemGridApi.forEachNode((node) => {\r\n        dictCode = node.data.dict_code;\r\n        varNames.push(node.data.var_name);\r\n      })\r\n      /*判断添加明细变量名重复的数据*/\r\n      for (let i = 0; i < varNames.length; i++) {\r\n        for (let j = i + 1; j < varNames.length; j++) {\r\n          if (varNames[i] == varNames[j]) {\r\n            system.showErrorDialog('第' + (i + 1) + '行变量数据和第' + (j + 1) + '行变量数据重复，请检查！');\r\n            return;\r\n          }\r\n        }\r\n      }\r\n      this.refreshCodeBtnOption.loading = true\r\n      system.invokeStudio('FileManager@createDictEnum', {\r\n        dictCode: dictCode\r\n      }).then(res => {\r\n        system.msg(res.msg)\r\n      }).finally(() => {\r\n        this.refreshCodeBtnOption.loading = false;\r\n      })\r\n    },\r\n    /**\r\n     * 记录修改的数据行\r\n     */\r\n    pushModifyRecords(node) {\r\n      const rowIdx = node.rowIndex;\r\n      if (this.saveDictItemData.newRowIdxs.includes(rowIdx)) {\r\n        return;\r\n      }\r\n      if (!this.saveDictItemData.modifyRowIdxs.includes(rowIdx)) {\r\n        this.saveDictItemData.modifyRowIdxs.push(rowIdx);\r\n      }\r\n    },\r\n    /**\r\n     * 记录删除的数据行\r\n     */\r\n    pushRemoveRecords(node) {\r\n      const rowIdx = node.rowIndex;\r\n      if (this.saveDictItemData.newRowIdxs.includes(rowIdx)) {\r\n        this.saveDictItemData.newRowIdxs.splice(this.saveDictItemData.newRowIdxs.indexOf(rowIdx), 1);\r\n        return;\r\n      }\r\n      if (this.saveDictItemData.modifyRowIdxs.includes(rowIdx)) {\r\n        this.saveDictItemData.modifyRowIdxs.splice(this.saveDictItemData.modifyRowIdxs.indexOf(rowIdx), 1);\r\n      }\r\n      this.saveDictItemData.removeRecords.push(node.data);\r\n    },\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.design .content.border-no {\r\n  border: none\r\n}\r\n\r\n.yvan-dict {\r\n  .table.ag-theme-balham {\r\n    font-size: 14px;\r\n    font-weight: 400;\r\n\r\n    .ag-root-wrapper {\r\n      border-color: #ccc;\r\n    }\r\n\r\n    .ag-header {\r\n      border-color: #e5e5e5;\r\n      background-color: #f0f0f0;\r\n\r\n      .ag-pinned-left-header {\r\n        border-color: #e5e5e5;\r\n      }\r\n\r\n      .ag-header-row {\r\n        color: #333\r\n      }\r\n    }\r\n\r\n    .ag-row {\r\n      border-color: #e5e5e5;\r\n      color: #606266\r\n    }\r\n\r\n    .ag-cell.ag-cell-last-left-pinned:not(.ag-cell-range-right):not(.ag-cell-range-single-cell) {\r\n      border-right-color: #e5e5e5;\r\n    }\r\n  }\r\n\r\n  .yvan-dict-table, .yvan-dict-item-table {\r\n    height: 100%;\r\n    display: flex;\r\n    flex-direction: column;\r\n\r\n    .table {\r\n      flex: 1;\r\n      margin: 0 5px 5px 5px\r\n    }\r\n  }\r\n}\r\n</style>","export default {\r\n    props: {},\r\n    data() {\r\n        // @VExportData-Start\r\n        return {\r\n            grid1: {\r\n                isChanged: false,\r\n                selections: [],\r\n                checkedRows: [],\r\n                selection: null,\r\n            },\r\n            grid2: {\r\n                isChanged: false,\r\n                selections: [],\r\n                checkedRows: [],\r\n                selection: null,\r\n            },\r\n            vjson: {\r\n                layout: 'DefaultLayout',\r\n                items: [\r\n                    {\r\n                        xtype: 'split',\r\n                        items: [\r\n                            {\r\n                                items: [\r\n                                    {\r\n                                        xtype: 'toolbar',\r\n                                        items: [\r\n                                            {\r\n                                                xtype: 'button',\r\n                                                text: '新增',\r\n                                                iconCls: 'element Plus',\r\n                                                listeners: {\r\n                                                    click: '{button6_click}',\r\n                                                },\r\n                                            },\r\n                                            {\r\n                                                xtype: 'button',\r\n                                                text: '编辑',\r\n                                                iconCls: 'element Edit',\r\n                                                bind: {\r\n                                                    disabled: '{button1_disabled}',\r\n                                                },\r\n                                                listeners: {\r\n                                                    click: '{button1_click}',\r\n                                                },\r\n                                            },\r\n                                            {\r\n                                                xtype: 'button',\r\n                                                text: '删除',\r\n                                                iconCls: 'element Delete',\r\n                                                bind: {\r\n                                                    disabled: '{button2_disabled}',\r\n                                                },\r\n                                                listeners: {\r\n                                                    click: '{button2_click}',\r\n                                                },\r\n                                            },\r\n                                            {\r\n                                                xtype: 'button',\r\n                                                text: '刷新',\r\n                                                iconCls: 'element Refresh',\r\n                                                listeners: {\r\n                                                    click: '{button7_click}',\r\n                                                },\r\n                                            },\r\n                                        ],\r\n                                    },\r\n                                    {\r\n                                        xtype: 'aggrid',\r\n                                        pagination: false,\r\n                                        columns: [\r\n                                            {\r\n                                                xtype: 'aggridcolumn',\r\n                                                dataIndex: 'id',\r\n                                                header: 'ID',\r\n                                                hidden: true,\r\n                                            },\r\n                                            {\r\n                                                dataIndex: 'name',\r\n                                                header: '规则名称',\r\n                                                xtype: 'aggridcolumn',\r\n                                            },\r\n                                            {\r\n                                                dataIndex: 'priority',\r\n                                                header: '优先级',\r\n                                                xtype: 'aggridcolumn',\r\n                                                width: '80px',\r\n                                            },\r\n                                            {\r\n                                                xtype: 'aggridcolumn',\r\n                                                header: '目标地址',\r\n                                                dataIndex: 'uri',\r\n                                                width: '200px',\r\n                                            },\r\n                                            {\r\n                                                xtype: 'aggridcolumn',\r\n                                                header: '接口方向',\r\n                                                dataIndex: 'type',\r\n                                                width: '100px',\r\n                                            },\r\n                                            {\r\n                                                xtype: 'aggridcolumn',\r\n                                                dataIndex: 'enable',\r\n                                                header: '是否启用',\r\n                                                dict: 'IS_ENABLE',\r\n                                                width: '100px',\r\n                                            },\r\n                                        ],\r\n                                        heightMode: 'fit',\r\n                                        dataSource: {\r\n                                            url: '/com/yvan/studio/ApiProxy@queryList',\r\n                                            method: 'invoke',\r\n                                        },\r\n                                        autoLoad: true,\r\n                                        reference: 'grid1',\r\n                                        rowNumber: true,\r\n                                    },\r\n                                ],\r\n                                xtype: 'splitarea',\r\n                            },\r\n                            {\r\n                                items: [\r\n                                    {\r\n                                        xtype: 'toolbar',\r\n                                        items: [\r\n                                            {\r\n                                                xtype: 'button',\r\n                                                text: '新增',\r\n                                                iconCls: 'element Plus',\r\n                                                bind: {\r\n                                                    disabled: '{button3_disabled}',\r\n                                                },\r\n                                                listeners: {\r\n                                                    click: '{button3_click}',\r\n                                                },\r\n                                            },\r\n                                            {\r\n                                                xtype: 'button',\r\n                                                text: '编辑',\r\n                                                iconCls: 'element Edit',\r\n                                                bind: {\r\n                                                    disabled: '{button4_disabled}',\r\n                                                },\r\n                                                listeners: {\r\n                                                    click: '{button4_click}',\r\n                                                },\r\n                                            },\r\n                                            {\r\n                                                xtype: 'button',\r\n                                                text: '删除',\r\n                                                iconCls: 'element Delete',\r\n                                                bind: {\r\n                                                    disabled: '{button5_disabled}',\r\n                                                },\r\n                                                listeners: {\r\n                                                    click: '{button5_click}',\r\n                                                },\r\n                                            },\r\n                                        ],\r\n                                    },\r\n                                    {\r\n                                        xtype: 'aggrid',\r\n                                        pagination: false,\r\n                                        columns: [\r\n                                            {\r\n                                                dataIndex: 'name',\r\n                                                header: '接口名称',\r\n                                                xtype: 'aggridcolumn',\r\n                                            },\r\n                                            {\r\n                                                dataIndex: 'priority',\r\n                                                header: '优先级',\r\n                                                xtype: 'aggridcolumn',\r\n                                                width: '80px',\r\n                                            },\r\n                                            {\r\n                                                xtype: 'aggridcolumn',\r\n                                                dataIndex: 'enable',\r\n                                                header: '是否启用',\r\n                                                dict: 'IS_ENABLE',\r\n                                                width: '100px',\r\n                                            },\r\n                                            {\r\n                                                xtype: 'aggridcolumn',\r\n                                                header: '接口说明',\r\n                                                dataIndex: 'description',\r\n                                                width: '',\r\n                                            },\r\n                                            {\r\n                                                xtype: 'aggridcolumn',\r\n                                                header: '更新时间',\r\n                                                dataIndex: 'updateAt',\r\n                                                width: '150px',\r\n                                            },\r\n                                            {\r\n                                                xtype: 'aggridcolumn',\r\n                                                header: '创建时间',\r\n                                                dataIndex: 'createAt',\r\n                                                width: '150px',\r\n                                            },\r\n                                        ],\r\n                                        heightMode: 'fit',\r\n                                        dataSource: {\r\n                                            url: '/com/yvan/studio/ApiProxy@queryApiConfigList',\r\n                                            method: 'invoke',\r\n                                            params: {\r\n                                                proxy_config_id: 'watch:{grid1.selection.id}',\r\n                                            },\r\n                                        },\r\n                                        reference: 'grid2',\r\n                                        rowNumber: true,\r\n                                    },\r\n                                ],\r\n                                xtype: 'splitarea',\r\n                            },\r\n                        ],\r\n                        heightMode: 'fit',\r\n                        defaultSize: 50,\r\n                        firstAreaDefaultSize: 500,\r\n                    },\r\n                ],\r\n                isFlex: true,\r\n                height: '800px',\r\n            },\r\n        }\r\n        //@VExportData-End\r\n\r\n    },\r\n    methods: {\r\n        button6_click() {\r\n            console.log(\"新增\")\r\n            this.$data.showProxyDialog = true;\r\n            this.$nextTick(() => {\r\n                this.$refs.proxyDialog.setProxy({\r\n                    id: null,\r\n                    priority: 0,\r\n                    type: \"out\",\r\n                    name: null,\r\n                    uri: null,\r\n                    path: null,\r\n                    host: null,\r\n                    header: null,\r\n                    enable: true,\r\n                })\r\n            }).finally()\r\n        },\r\n        button1_click() {\r\n            console.log(\"编辑\", this.grid1.selection)\r\n            this.$data.showProxyDialog = true\r\n            this.$nextTick(() => {\r\n                this.$refs.proxyDialog.setProxy(this.grid1.selection)\r\n            }).finally()\r\n        },\r\n        button2_click() {\r\n            const id = this.grid1.selection.id\r\n            system.confirm(\"确定删除吗?\").then(()=> {\r\n                system.invokeServer(\"/com/yvan/studio/ApiProxy@deleteProxy\", {id:id}).then(()=> {\r\n                    this.refs.grid1.reload()\r\n                    this.refs.grid2.setData([])\r\n                })\r\n            })\r\n        },\r\n        button7_click() {\r\n            this.refs.grid1.reload()\r\n            this.refs.grid2.setData([])\r\n        },\r\n        button3_click() {\r\n            console.log(\"新增\")\r\n            this.$data.showApiInfoDialog = true;\r\n            this.$nextTick(() => {\r\n                this.$refs.apiInfoDialog.setApiInfo({\r\n                    proxyConfigId: this.grid1.selection.id,\r\n                    priority: 0,\r\n                    name: null,\r\n                    enable: true,\r\n                    method: null,\r\n                    path: null,\r\n                    pathIgnoreCase: null,\r\n                    reqBody: null,\r\n                    reqBodyIgnoreCase: null,\r\n                    respBody: null,\r\n                    respBodyIgnoreCase: null,\r\n                    description: null,\r\n                })\r\n            }).finally()\r\n        },\r\n        button4_click() {\r\n            console.log(\"编辑\", this.grid2.selection)\r\n            this.$data.showApiInfoDialog = true;\r\n            this.$nextTick(() => {\r\n                this.$refs.apiInfoDialog.setApiInfo(this.grid2.selection)\r\n            }).finally()\r\n        },\r\n        button5_click() {\r\n            const id = this.grid2.selection.id\r\n            system.confirm(\"确定删除吗?\").then(()=> {\r\n                system.invokeServer(\"/com/yvan/studio/ApiProxy@deleteApiconfig\", {id: id}).then(()=> {\r\n                    this.refs.grid2.reload()\r\n                })\r\n            })\r\n        },\r\n    },\r\n    computed: {\r\n        button1_disabled() {\r\n            return !this.grid1.selection\r\n        },\r\n        button2_disabled() {\r\n            return !this.grid1.selection\r\n        },\r\n        button3_disabled() {\r\n            return !this.grid1.selection\r\n        },\r\n        button4_disabled() {\r\n            return !this.grid2.selection\r\n        },\r\n        button5_disabled() {\r\n            return !this.grid2.selection\r\n        },\r\n    },\r\n}","import _ from \"lodash\";\r\n\r\nconst FILTERS = {\r\n    \"1\": \"addRequestHeader\",\r\n    \"2\": \"addRequestParameter\",\r\n    \"3\": \"addResponseHeader\",\r\n    \"4\": \"dedupeResponseHeader\",\r\n    \"5\": \"mapRequestHeader\",\r\n    \"6\": \"prefixPath\",\r\n    \"7\": \"preserveHostHeader\",\r\n    \"8\": \"redirectTo\",\r\n    \"9\": \"removeRequestHeader\",\r\n    \"10\": \"removeResponseHeader\",\r\n    \"11\": \"removeRequestParameter\",\r\n    \"12\": \"rewritePath\",\r\n    \"13\": \"rewriteLocationResponseHeader\",\r\n    \"14\": \"rewriteResponseHeader\",\r\n    \"15\": \"saveSession\",\r\n    \"16\": \"setPath\",\r\n    \"17\": \"setRequestHeader\",\r\n    \"18\": \"setResponseHeader\",\r\n    \"19\": \"setStatus\",\r\n    \"20\": \"stripPrefix\",\r\n};\r\n\r\nexport default {\r\n    props: {},\r\n    data() {\r\n        // @VExportData-Start\r\n        return {\r\n            f: {\r\n                id: null,\r\n                priority: 0,\r\n                type: \"out\",\r\n                name: null,\r\n                uri: null,\r\n                path: null,\r\n                host: null,\r\n                header: null,\r\n                enable: true,\r\n            },\r\n            enable: null,\r\n            grid1: {\r\n                isChanged: false,\r\n                selections: [],\r\n                checkedRows: [],\r\n                selection: null,\r\n            },\r\n            vjson: {\r\n                layout: 'DefaultLayout',\r\n                items: [\r\n                    {\r\n                        xtype: 'tabs',\r\n                        items: [\r\n                            {\r\n                                xtype: 'tabpanel',\r\n                                title: '接口配置',\r\n                                items: [\r\n                                    {\r\n                                        xtype: 'form',\r\n                                        colsOfRow: '6',\r\n                                        items: [\r\n                                            {\r\n                                                xtype: 'numberfield',\r\n                                                fieldLabel: '优先级',\r\n                                                bind: {\r\n                                                    value: '{f.priority}',\r\n                                                },\r\n                                                weight: 3,\r\n                                                required: true,\r\n                                            },\r\n                                            {\r\n                                                xtype: 'radiogroup',\r\n                                                fieldLabel: '接口方向',\r\n                                                dataType: 1,\r\n                                                dataEnum: [\r\n                                                    {\r\n                                                        id: 'out',\r\n                                                        text: '上传',\r\n                                                    },\r\n                                                    {\r\n                                                        id: 'in',\r\n                                                        text: '下传',\r\n                                                    },\r\n                                                ],\r\n                                                weight: 2,\r\n                                                reference: '',\r\n                                                bind: {\r\n                                                    value: '{f.type}',\r\n                                                },\r\n                                            },\r\n                                            {\r\n                                                xtype: 'checkbox',\r\n                                                fieldLabel: '是否启用',\r\n                                                bind: {\r\n                                                    value: '{f.enable}',\r\n                                                },\r\n                                                size: 'small',\r\n                                            },\r\n                                            {\r\n                                                xtype: 'textfield',\r\n                                                fieldLabel: '规则名称',\r\n                                                bind: {\r\n                                                    value: '{f.name}',\r\n                                                },\r\n                                                weight: 3,\r\n                                            },\r\n                                            {\r\n                                                xtype: 'textfield',\r\n                                                fieldLabel: '目标地址',\r\n                                                bind: {\r\n                                                    value: '{f.uri}',\r\n                                                },\r\n                                                weight: 3,\r\n                                            },\r\n                                            {\r\n                                                xtype: 'textfield',\r\n                                                fieldLabel: 'Path条件',\r\n                                                bind: {\r\n                                                    value: '{f.path}',\r\n                                                },\r\n                                                weight: 6,\r\n                                            },\r\n                                            {\r\n                                                xtype: 'textfield',\r\n                                                fieldLabel: 'Host条件',\r\n                                                bind: {\r\n                                                    value: '{f.host}',\r\n                                                },\r\n                                                weight: 6,\r\n                                            },\r\n                                            {\r\n                                                xtype: 'textfield',\r\n                                                fieldLabel: 'Header条件',\r\n                                                bind: {\r\n                                                    value: '{f.header}',\r\n                                                },\r\n                                                weight: 6,\r\n                                            },\r\n                                        ],\r\n                                        heightMode: 'fit',\r\n                                        reference: '',\r\n                                        labelWidth: '100px',\r\n                                        labelPosition: 'right',\r\n                                    },\r\n                                ],\r\n                            },\r\n                            {\r\n                                xtype: 'tabpanel',\r\n                                title: '请求重写',\r\n                                items: [\r\n                                    {\r\n                                        xtype: 'toolbar',\r\n                                        items: [\r\n                                            {\r\n                                                xtype: 'button',\r\n                                                text: '新增',\r\n                                                iconCls: 'element Plus',\r\n                                                listeners: {\r\n                                                    click: '{button2_click}',\r\n                                                },\r\n                                            },\r\n                                            {\r\n                                                xtype: 'button',\r\n                                                text: '删除',\r\n                                                iconCls: 'element Delete',\r\n                                                bind: {\r\n                                                    disabled: '{button1_disabled}',\r\n                                                },\r\n                                                listeners: {\r\n                                                    click: '{button1_click}',\r\n                                                },\r\n                                            },\r\n                                        ],\r\n                                    },\r\n                                    {\r\n                                        xtype: 'aggrid',\r\n                                        pagination: false,\r\n                                        columns: [\r\n                                            {\r\n                                                dataIndex: 'key',\r\n                                                header: '重写规则',\r\n                                                xtype: 'aggridcolumn',\r\n                                                editable: true,\r\n                                                editor: {\r\n                                                    xtype: 'combobox',\r\n                                                },\r\n                                                dict: 'API_PROXY_FILTER',\r\n                                                width: '260px',\r\n                                            },\r\n                                            {\r\n                                                dataIndex: 'value',\r\n                                                header: '配置值',\r\n                                                xtype: 'aggridcolumn',\r\n                                                editable: true,\r\n                                                editor: {\r\n                                                    xtype: 'textfield',\r\n                                                },\r\n                                                width: '300px',\r\n                                            },\r\n                                        ],\r\n                                        heightMode: 'fit',\r\n                                        rowNumber: true,\r\n                                        mode: 'edit2',\r\n                                        reference: 'grid1',\r\n                                    },\r\n                                ],\r\n                            },\r\n                            {\r\n                                title: '代理配置(自动生成)',\r\n                                items: [\r\n                                    {\r\n                                        xtype: 'form',\r\n                                        colsOfRow: '1',\r\n                                        items: [\r\n                                            {\r\n                                                xtype: 'fieldslot',\r\n                                                name: 'slot_code',\r\n                                            },\r\n                                        ],\r\n                                        heightMode: 'fix',\r\n                                        minHeight: '450px',\r\n                                        maxHeight: '450px',\r\n                                        height: '450px',\r\n                                    },\r\n                                ],\r\n                                xtype: 'tabpanel',\r\n                            },\r\n                        ],\r\n                        defaultActiveName: 'tab_0',\r\n                        heightMode: 'fit',\r\n                        listeners: {\r\n                            tabChange: '{tabs1_tabChange}',\r\n                        },\r\n                        lazy: false,\r\n                    },\r\n                    {\r\n                        xtype: 'toolbar',\r\n                        items: [\r\n                            {\r\n                                xtype: 'button',\r\n                                text: '取消',\r\n                                listeners: {\r\n                                    click: '{button3_click}',\r\n                                },\r\n                            },\r\n                            {\r\n                                xtype: 'button',\r\n                                text: '确定',\r\n                                listeners: {\r\n                                    click: '{button4_click}',\r\n                                },\r\n                                type: 'primary',\r\n                                plain: true,\r\n                            },\r\n                        ],\r\n                        alignRight: true,\r\n                    },\r\n                ],\r\n                isFlex: true,\r\n                height: '350',\r\n                title: '规则配置',\r\n            },\r\n        }\r\n        //@VExportData-End\r\n\r\n    },\r\n    methods: {\r\n        tabs1_tabChange(id) {\r\n            if (id === \"tab_2\") {\r\n                setTimeout(() => {\r\n                    this.$refs.editor?.setLanguage('yaml')\r\n                    this.$refs.editor?.updateOptions({readOnly: true})\r\n                }, 1000)\r\n            }\r\n        },\r\n        button4_click() {\r\n            const {f} = this.$data;\r\n            if (!(f.priority + \"\")) {\r\n                system.msg(\"优先级不能为空\")\r\n                return\r\n            }\r\n            if (!(f.type + \"\")) {\r\n                system.msg(\"必须选择接口方向\")\r\n                return\r\n            }\r\n            if (!(f.enable + \"\")) {\r\n                system.msg(\"请勾选是否启用\")\r\n                return\r\n            }\r\n            if (!f.name) {\r\n                system.msg(\"规则名称不能为空\")\r\n                return\r\n            }\r\n            if (!f.uri) {\r\n                system.msg(\"目标地址不能为空\")\r\n                return\r\n            }\r\n            f.config = {predicates: {}}\r\n            if (f.host) {\r\n                f.config.predicates.host = f.host\r\n            }\r\n            if (f.path) {\r\n                f.config.predicates.path = f.path\r\n            }\r\n            if (f.header) {\r\n                f.config.predicates.header = f.header\r\n            }\r\n            if(this.refs?.grid1) {\r\n                this.refs.grid1.stopEditing()\r\n                const rows = this.refs.grid1.getDataRows()\r\n                if (rows.length > 0) {\r\n                    const filters = {}\r\n                    rows.forEach(row => {\r\n                        if (FILTERS[`${row.key}`]) {\r\n                            filters[FILTERS[`${row.key}`]] = row.value\r\n                        }\r\n                    })\r\n                    f.config.filters = filters\r\n                }\r\n            }\r\n            system.invokeServer(\"/com/yvan/studio/ApiProxy@saveProxy\", f).then(res => {\r\n                if(res?.success) {\r\n                    console.log(\"关闭\")\r\n                    this.$props.top.setShowProxyDialog(false)\r\n                    this.$props.top.refs.grid1.reload()\r\n                    this.$props.top.refs.grid2.setData([])\r\n                }\r\n            })\r\n        },\r\n        button3_click() {\r\n            console.log(\"关闭\")\r\n            this.$props.top.setShowProxyDialog(false)\r\n        },\r\n        button2_click() {\r\n            this.refs.grid1.appendEditRow()\r\n        },\r\n        button1_click() {\r\n            this.refs.grid1.removeSelectedRow()\r\n        },\r\n        setProxy(item) {\r\n            let {config, ...other} = item\r\n            try {\r\n                config = JSON.parse(config)\r\n            } catch (e) {\r\n                config = {}\r\n            }\r\n            let predicates = {}\r\n            if(config.predicates) {\r\n                predicates = {...config.predicates}\r\n            }\r\n            this.$data.f = {...other, ...predicates}\r\n            this.$data.code = other.routeDefinition ?? \"\"\r\n            const dataArr = []\r\n            if (config.filters && this.refs?.grid1) {\r\n                _.forEach(config.filters ?? {}, (value, key) => {\r\n                    // console.log(value, key)\r\n                    const item = {key: \"\", value: value};\r\n                    _.forEach(FILTERS, (v, k) => {\r\n                        if (key === v) {\r\n                            item.key = k\r\n                        }\r\n                    })\r\n                    dataArr.push(item)\r\n                })\r\n                // console.log(this.refs?.grid1)\r\n            }\r\n            if(this.refs?.grid1) {\r\n                setTimeout(()=> {\r\n                    this.refs?.grid1.setData(dataArr)\r\n                }, 300)\r\n            }\r\n        },\r\n    },\r\n    computed: {\r\n        button1_disabled() {\r\n            return !this.grid1.selection\r\n        },\r\n    },\r\n}\r\n","<template>\r\n  <yv-vjson-layout :vjson=\"vjson\" :vcxt=\"vcxt\" class=\"api-config-dialog\">\r\n    <template #slot_code>\r\n      <YvSrcEditor ref=\"editor\" v-model=\"code\" :style=\"{height: 450}\"/>\r\n    </template>\r\n  </yv-vjson-layout>\r\n</template>\r\n\r\n<script>\r\nimport BizMixin from \"../../../runtime/bizMixin\"\r\nimport design from './ApiConfigDialog.design'\r\nimport YvSrcEditor from '../../../components/design/yv-src-editor.vue'\r\n\r\nexport default {\r\n  mixins: [design, BizMixin],\r\n  components: {\r\n    YvSrcEditor,\r\n  },\r\n  props: {\r\n    top: Object,\r\n  },\r\n  mounted() {\r\n  },\r\n  data() {\r\n    return {\r\n      code: '',\r\n    }\r\n  },\r\n  methods: {\r\n  },\r\n}\r\n</script>\r\n\r\n<style>\r\n.api-config-dialog #pane-tab_2 form .el-row {\r\n  height: 100%;\r\n}\r\n</style>\r\n","import _ from \"lodash\";\r\n\r\nexport default {\r\n    props: {},\r\n    data() {\r\n            // @VExportData-Start\r\n            return {\r\n                f: {\r\n                    proxyConfigId: null,\r\n                    priority: 0,\r\n                    name: null,\r\n                    enable: true,\r\n                    method: null,\r\n                    path: null,\r\n                    pathIgnoreCase: null,\r\n                    reqBody: null,\r\n                    reqBodyIgnoreCase: null,\r\n                    respBody: null,\r\n                    respBodyIgnoreCase: null,\r\n                    description: null,\r\n                },\r\n                vjson: {\r\n                    layout: 'DefaultLayout',\r\n                    items: [\r\n                        {\r\n                            xtype: 'form',\r\n                            colsOfRow: '6',\r\n                            items: [\r\n                                {\r\n                                    xtype: 'numberfield',\r\n                                    fieldLabel: '优先级',\r\n                                    bind: {\r\n                                        value: '{f.priority}',\r\n                                    },\r\n                                    required: true,\r\n                                    weight: 2,\r\n                                },\r\n                                {\r\n                                    xtype: 'textfield',\r\n                                    fieldLabel: '接口名称',\r\n                                    bind: {\r\n                                        value: '{f.name}',\r\n                                    },\r\n                                    weight: 3,\r\n                                    required: true,\r\n                                },\r\n                                {\r\n                                    xtype: 'checkbox',\r\n                                    fieldLabel: '启用',\r\n                                    bind: {\r\n                                        value: '{f.enable}',\r\n                                    },\r\n                                },\r\n                                {\r\n                                    xtype: 'combo',\r\n                                    fieldLabel: 'Http Method',\r\n                                    bind: {\r\n                                        value: '{f.method}',\r\n                                    },\r\n                                    weight: 2,\r\n                                    dataType: 1,\r\n                                    dataEnum: [\r\n                                        {\r\n                                            id: 'get',\r\n                                            text: 'GET',\r\n                                        },\r\n                                        {\r\n                                            id: 'post',\r\n                                            text: 'POST',\r\n                                        },\r\n                                        {\r\n                                            id: 'put',\r\n                                            text: 'PUT',\r\n                                        },\r\n                                        {\r\n                                            id: 'patch',\r\n                                            text: 'PATCH',\r\n                                        },\r\n                                        {\r\n                                            id: 'delete',\r\n                                            text: 'DELETE',\r\n                                        },\r\n                                        {\r\n                                            id: 'head',\r\n                                            text: 'HEAD',\r\n                                        },\r\n                                        {\r\n                                            id: 'options',\r\n                                            text: 'OPTIONS',\r\n                                        },\r\n                                    ],\r\n                                },\r\n                                {\r\n                                    xtype: 'textfield',\r\n                                    fieldLabel: 'Path条件',\r\n                                    bind: {\r\n                                        value: '{f.path}',\r\n                                    },\r\n                                    weight: 3,\r\n                                },\r\n                                {\r\n                                    xtype: 'checkbox',\r\n                                    fieldLabel: '忽略大小写',\r\n                                    bind: {\r\n                                        value: '{f.pathIgnoreCase}',\r\n                                    },\r\n                                },\r\n                                {\r\n                                    xtype: 'textfield',\r\n                                    fieldLabel: '请求 Body',\r\n                                    bind: {\r\n                                        value: '{f.reqBody}',\r\n                                    },\r\n                                    weight: 5,\r\n                                    textarea: true,\r\n                                    placeholder: '一行表示一个包含的字符串',\r\n                                },\r\n                                {\r\n                                    xtype: 'checkbox',\r\n                                    fieldLabel: '忽略大小写',\r\n                                    bind: {\r\n                                        value: '{f.reqBodyIgnoreCase}',\r\n                                    },\r\n                                },\r\n                                {\r\n                                    xtype: 'textfield',\r\n                                    fieldLabel: '响应 Body',\r\n                                    bind: {\r\n                                        value: '{f.respBody}',\r\n                                    },\r\n                                    weight: 5,\r\n                                    textarea: true,\r\n                                    placeholder: '一行表示一个包含的字符串',\r\n                                },\r\n                                {\r\n                                    xtype: 'checkbox',\r\n                                    fieldLabel: '忽略大小写',\r\n                                    bind: {\r\n                                        value: '{f.respBodyIgnoreCase}',\r\n                                    },\r\n                                },\r\n                                {\r\n                                    xtype: 'textfield',\r\n                                    fieldLabel: '接口说明',\r\n                                    bind: {\r\n                                        value: '{f.description}',\r\n                                    },\r\n                                    textarea: true,\r\n                                    weight: 6,\r\n                                },\r\n                            ],\r\n                            labelWidth: '110px',\r\n                            fieldsetTitlePosition: 'left',\r\n                            labelPosition: 'right',\r\n                        },\r\n                        {\r\n                            xtype: 'toolbar',\r\n                            items: [\r\n                                {\r\n                                    xtype: 'button',\r\n                                    text: '取消',\r\n                                    listeners: {\r\n                                        click: '{button1_click}',\r\n                                    },\r\n                                },\r\n                                {\r\n                                    xtype: 'button',\r\n                                    text: '保存',\r\n                                    type: 'primary',\r\n                                    plain: true,\r\n                                    listeners: {\r\n                                        click: '{button2_click}',\r\n                                    },\r\n                                },\r\n                            ],\r\n                            alignRight: true,\r\n                        },\r\n                    ],\r\n                },\r\n            }\r\n            //@VExportData-End\r\n            \r\n        },\r\n    methods: {\r\n        button1_click() {\r\n            console.log(\"取消\")\r\n            this.$props.top.setShowApiInfoDialog(false)\r\n        },\r\n        button2_click() {\r\n            console.log(\"确定\")\r\n            const form = this.$data.f;\r\n            if (!form.name) {\r\n                system.msg(\"API名称不能为空\")\r\n                return\r\n            }\r\n            const method = form.method\r\n            const path = form.path\r\n            const pathIgnoreCase = form.pathIgnoreCase\r\n            const reqBody = form.reqBody\r\n            const reqBodyIgnoreCase = form.reqBodyIgnoreCase\r\n            const respBody = form.respBody\r\n            const respBodyIgnoreCase = form.respBodyIgnoreCase\r\n            form.match = {}\r\n            if (_.trim(path).length > 0) {\r\n                form.match.path = [{\r\n                    \"values\": path,\r\n                    \"ignoreCase\": pathIgnoreCase,\r\n                }]\r\n            }\r\n            if (method) {\r\n                form.match.method = [method]\r\n            }\r\n            if (_.trim(reqBody).length > 0) {\r\n                const requestBody = []\r\n                reqBody?.split('\\n').forEach(value => {\r\n                    if (_.trim(value).length > 0) {\r\n                        requestBody.push({\r\n                            \"contains\": {\r\n                                \"values\": [value],\r\n                                \"ignoreCase\": reqBodyIgnoreCase\r\n                            },\r\n                        })\r\n                    }\r\n                })\r\n                if (requestBody.length > 0) {\r\n                    form.match.requestBody = requestBody\r\n                }\r\n            }\r\n            if (_.trim(respBody).length > 0) {\r\n                const responseBody = []\r\n                respBody?.split('\\n').forEach(value => {\r\n                    if (_.trim(value).length > 0) {\r\n                        responseBody.push({\r\n                            \"contains\": {\r\n                                \"values\": [value],\r\n                                \"ignoreCase\": respBodyIgnoreCase\r\n                            },\r\n                        })\r\n                    }\r\n                })\r\n                if (responseBody.length > 0) {\r\n                    form.match.responseBody = responseBody\r\n                }\r\n            }\r\n            system.invokeServer(\"/com/yvan/studio/ApiProxy@saveApiConfig\", form).then(res => {\r\n                    if(res?.success) {\r\n                        console.log(\"关闭\")\r\n                        this.$props.top.setShowApiInfoDialog(false)\r\n                        this.$props.top.refs.grid2.reload()\r\n                    }\r\n            })\r\n        },\r\n        setApiInfo(apiInfo) {\r\n            let {match,enable, ...other} = apiInfo;\r\n            this.$data.f = {enable: enable === 1, ...other}\r\n            try {\r\n                match = JSON.parse(match)\r\n            } catch (e) {\r\n                match = {}\r\n            }\r\n            // method\r\n            if (match.method?.length) {\r\n                this.$data.f.method = match.method[0]\r\n            }\r\n            // path\r\n            if (match.path?.length) {\r\n                if (match.path[0].values?.length) {\r\n                    this.$data.f.path = match.path[0].values\r\n                }\r\n                if (match.path[0].ignoreCase) {\r\n                    this.$data.f.pathIgnoreCase = match.path[0].ignoreCase\r\n                }\r\n            }\r\n            // reqBody\r\n            if (match.requestBody?.length) {\r\n                if (match.requestBody[0]?.contains?.values) {\r\n                    this.$data.f.reqBody = match.requestBody.filter(item => item?.contains?.values[0]).map(item => item.contains.values[0]).join(\"\\n\")\r\n                }\r\n                if (match.requestBody[0]?.contains?.ignoreCase) {\r\n                    this.$data.f.reqBodyIgnoreCase = (match.requestBody[0].contains).ignoreCase\r\n                }\r\n            }\r\n            if (match.responseBody?.length) {\r\n                if (match.responseBody[0]?.contains?.values) {\r\n                    this.$data.f.respBody  = match.responseBody.filter(item => item?.contains?.values[0]).map(item => item.contains.values[0]).join(\"\\n\")\r\n                }\r\n                if (match.responseBody[0]?.contains?.ignoreCase) {\r\n                    this.$data.f.respBodyIgnoreCase = (match.responseBody[0].contains).ignoreCase\r\n                }\r\n            }\r\n        },\r\n    },\r\n}","<template>\r\n  <yv-vjson-layout :vjson=\"vjson\" :vcxt=\"vcxt\"/>\r\n</template>\r\n\r\n<script>\r\nimport BizMixin from \"../../../runtime/bizMixin\"\r\nimport design from './ApiInfoConfigDialog.design'\r\n\r\nexport default {\r\n  mixins: [design, BizMixin],\r\n  props: {\r\n    top: Object,\r\n  },\r\n  data() {\r\n    return {}\r\n  },\r\n  methods: {},\r\n}\r\n</script>\r\n","<template>\r\n  <yv-vjson-layout :vjson=\"vjson\" :vcxt=\"vcxt\"/>\r\n\r\n  <el-dialog\r\n      title=\"规则配置\"\r\n      v-model=\"showProxyDialog\"\r\n      width=\"800px\"\r\n      height=\"350px\"\r\n      :append-to-body=\"true\"\r\n      class=\"api-config\">\r\n    <ApiConfigDialog ref=\"proxyDialog\" :top=\"this\"/>\r\n  </el-dialog>\r\n\r\n  <el-dialog\r\n      title=\"接口配置\"\r\n      v-model=\"showApiInfoDialog\"\r\n      width=\"915px\"\r\n      :append-to-body=\"true\"\r\n      class=\"api-config-2\">\r\n    <ApiInfoConfigDialog ref=\"apiInfoDialog\" :top=\"this\"/>\r\n  </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport BizMixin from \"../../../runtime/bizMixin\"\r\nimport design from './ApiConfig.design'\r\nimport ApiConfigDialog from './ApiConfigDialog.vue'\r\nimport ApiInfoConfigDialog from './ApiInfoConfigDialog.vue'\r\n\r\nexport default {\r\n  mixins: [design, BizMixin],\r\n  components: {\r\n    ApiConfigDialog,\r\n    ApiInfoConfigDialog,\r\n  },\r\n  data() {\r\n    return {\r\n      showProxyDialog: false,\r\n      showApiInfoDialog: false,\r\n    }\r\n  },\r\n  methods: {\r\n    setShowProxyDialog(show) {\r\n      this.showProxyDialog = show\r\n    },\r\n    setShowApiInfoDialog(show) {\r\n      this.showApiInfoDialog = show\r\n    },\r\n  },\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n  .el-dialog.api-config > .el-dialog__body{\r\n      height:500px\r\n  }\r\n</style>\r\n","import xmlFormat from 'xml-formatter'\r\nimport _ from \"lodash\";\r\n\r\nexport default {\r\n    props: {},\r\n    data() {\r\n        // @VExportData-Start\r\n        return {\r\n            f1: {\r\n                req: null,\r\n                resp: null,\r\n                start_time: null,\r\n                end_time: null,\r\n                api_config_id: null,\r\n            },\r\n            grid1: {\r\n                isChanged: false,\r\n                selections: [],\r\n                checkedRows: [],\r\n                selection: null,\r\n            },\r\n            vjson: {\r\n                layout: 'DefaultLayout',\r\n                items: [\r\n                    {\r\n                        xtype: 'split',\r\n                        items: [\r\n                            {\r\n                                items: [\r\n                                    {\r\n                                        xtype: 'tree',\r\n                                        autoLoad: true,\r\n                                        dataType: '1',\r\n                                        dataSource: {\r\n                                            url: '/com/yvan/studio/ApiProxy@getTree',\r\n                                            params: [],\r\n                                            idField: 'id',\r\n                                            parentField: '',\r\n                                            checkField: '',\r\n                                            textField: 'label',\r\n                                            method: 'invoke',\r\n                                            noBuildTree: true,\r\n                                            sqlId: '',\r\n                                        },\r\n                                        heightMode: 'fit',\r\n                                        enableFilter: true,\r\n                                        enableRefresh: true,\r\n                                        enableExpandedAll: false,\r\n                                        expandOnClickNode: false,\r\n                                        checkOnClickNode: false,\r\n                                        listeners: {\r\n                                            nodeClick: '{tree1_nodeClick}',\r\n                                        },\r\n                                        buildTree: true,\r\n                                        checkStrictly: true,\r\n                                        paddingRight: '',\r\n                                        marginRight: '8px',\r\n                                    },\r\n                                ],\r\n                                xtype: 'splitarea',\r\n                            },\r\n                            {\r\n                                items: [\r\n                                    {\r\n                                        xtype: 'form',\r\n                                        colsOfRow: '6',\r\n                                        items: [\r\n                                            {\r\n                                                xtype: 'textfield',\r\n                                                fieldLabel: '请求Body',\r\n                                                bind: {\r\n                                                    value: '{f1.req}',\r\n                                                },\r\n                                                autoLoad: false,\r\n                                                dataType: '0',\r\n                                                dataSource: {\r\n                                                    url: '',\r\n                                                    sqlId: '',\r\n                                                    params: [],\r\n                                                    idField: 'id',\r\n                                                    parentField: 'parent_id',\r\n                                                    checkField: 'check',\r\n                                                    textField: 'text',\r\n                                                },\r\n                                            },\r\n                                            {\r\n                                                xtype: 'textfield',\r\n                                                fieldLabel: '响应Body',\r\n                                                bind: {\r\n                                                    value: '{f1.resp}',\r\n                                                },\r\n                                            },\r\n                                            {\r\n                                                xtype: 'datetimefield',\r\n                                                fieldLabel: '开始时间',\r\n                                                bind: {\r\n                                                    value: '{f1.start_time}',\r\n                                                },\r\n                                                showPassword: false,\r\n                                            },\r\n                                            {\r\n                                                xtype: 'datetimefield',\r\n                                                fieldLabel: '结束时间',\r\n                                                bind: {\r\n                                                    value: '{f1.end_time}',\r\n                                                },\r\n                                            },\r\n                                            {\r\n                                                xtype: 'button',\r\n                                                text: '查询',\r\n                                                iconCls: 'element Search',\r\n                                                listeners: {\r\n                                                    click: '{button1_click}',\r\n                                                },\r\n                                            },\r\n                                            {\r\n                                                xtype: 'staticfield',\r\n                                                fieldLabel: '',\r\n                                                bind: {\r\n                                                    value: '{f1.api_config_id}',\r\n                                                },\r\n                                                hidden: true,\r\n                                                autoLoad: false,\r\n                                                dataType: '0',\r\n                                                dataSource: {\r\n                                                    url: '',\r\n                                                    sqlId: '',\r\n                                                    params: [],\r\n                                                    idField: 'id',\r\n                                                    parentField: 'parent_id',\r\n                                                    checkField: 'check',\r\n                                                    textField: 'text',\r\n                                                },\r\n                                            },\r\n                                        ],\r\n                                    },\r\n                                    {\r\n                                        xtype: 'aggrid',\r\n                                        pagination: true,\r\n                                        columns: [\r\n                                            {\r\n                                                dataIndex: 'access_at',\r\n                                                header: '调用时间',\r\n                                                xtype: 'aggridcolumn',\r\n                                                width: '150px',\r\n                                            },\r\n                                            {\r\n                                                dataIndex: 'is_re_send',\r\n                                                header: '重试请求',\r\n                                                xtype: 'aggridcolumn',\r\n                                                width: '100px',\r\n                                                dict: 'YESNO',\r\n                                            },\r\n                                            {\r\n                                                xtype: 'aggridcolumn',\r\n                                                dataIndex: 'method',\r\n                                                header: 'Method',\r\n                                                width: '100px',\r\n                                            },\r\n                                            {\r\n                                                xtype: 'aggridcolumn',\r\n                                                dataIndex: 'path',\r\n                                                header: '请求路径',\r\n                                                width: '',\r\n                                                flex: '1',\r\n                                            },\r\n                                            {\r\n                                                xtype: 'aggridcolumn',\r\n                                                dataIndex: 'http_status',\r\n                                                header: '状态码',\r\n                                                width: '80px',\r\n                                            },\r\n                                            {\r\n                                                xtype: 'aggridcolumn',\r\n                                                dataIndex: 'client_ip',\r\n                                                header: '调用者IP',\r\n                                                width: '150px',\r\n                                            },\r\n                                            {\r\n                                                xtype: 'aggridcolumn',\r\n                                                dataIndex: 'cost',\r\n                                                header: '接口耗时',\r\n                                                width: '100px',\r\n                                            },\r\n                                            {\r\n                                                xtype: 'aggridcolumn',\r\n                                                dataIndex: 'packet_size',\r\n                                                header: '接口数据大小',\r\n                                                width: '120px',\r\n                                            },\r\n                                        ],\r\n                                        heightMode: 'fit',\r\n                                        autoLoad: false,\r\n                                        dataType: '0',\r\n                                        dataSource: {\r\n                                            url: '/com/yvan/studio/ApiProxy@queryApiLogList',\r\n                                            params: {\r\n                                                api_config_id: '{f1.api_config_id}',\r\n                                                req: '{f1.req}',\r\n                                                resp: '{f1.resp}',\r\n                                                start_time: '{f1.start_time}',\r\n                                                end_time: '{f1.end_time}',\r\n                                            },\r\n                                            idField: 'id',\r\n                                            parentField: 'parent_id',\r\n                                            checkField: 'check',\r\n                                            textField: 'text',\r\n                                            method: 'invoke',\r\n                                            sqlId: '',\r\n                                        },\r\n                                        reference: 'grid1',\r\n                                        listeners: {\r\n                                            onRowDblClick: '{grid1_onRowDblClick}',\r\n                                        },\r\n                                    },\r\n                                ],\r\n                                xtype: 'splitarea',\r\n                            },\r\n                        ],\r\n                        heightMode: 'fit',\r\n                        firstAreaDefaultSize: 300,\r\n                        autoLoad: false,\r\n                        dataType: '0',\r\n                        dataSource: {\r\n                            url: '',\r\n                            sqlId: '',\r\n                            params: [],\r\n                            idField: 'id',\r\n                            parentField: 'parent_id',\r\n                            checkField: 'check',\r\n                            textField: 'text',\r\n                        },\r\n                        defaultSize: 23,\r\n                    },\r\n                ],\r\n                isFlex: true,\r\n                height: '800px',\r\n            },\r\n        }\r\n        //@VExportData-End\r\n\r\n    },\r\n    methods: {\r\n        tree1_nodeClick() {\r\n            if (arguments && arguments[0] && arguments[0].apiId) {\r\n                this.f1.api_config_id = arguments[0].apiId\r\n                this.refs.grid1.reload()\r\n            } else {\r\n                this.f1.api_config_id = null\r\n                this.refs.grid1.setData([])\r\n            }\r\n\r\n        },\r\n        button1_click() {\r\n            this.refs.grid1.reload()\r\n        },\r\n        grid1_onRowDblClick() {\r\n            const row = arguments[0].data;\r\n            console.log(\"@@@@@@@\", row)\r\n            this.$data.showLogDialog = true\r\n            this.$nextTick(() => {\r\n                this.setDialogData(row)\r\n            }).finally()\r\n        },\r\n        setDialogData(form) {\r\n            let request_body_language = 'plaintext'\r\n            let response_body_language = 'plaintext'\r\n            this.$data.reqH_code = this.format_headers(form)\r\n            if (form.request_body) {\r\n                form.request_body = _.trim(form.request_body)\r\n                if (form.request_body.startsWith(\"<\")) {\r\n                    this.$data.reqB_code =  this.format_xml(form.request_body)\r\n                    request_body_language = 'xml'\r\n                } else if (form.request_body.startsWith(\"{\")) {\r\n                    this.$data.reqB_code = this.format_json(form.request_body)\r\n                    request_body_language = 'json'\r\n                } else {\r\n                    this.$data.reqB_code = form.request_body\r\n                }\r\n            }\r\n            if (form.response_body) {\r\n                form.response_body = _.trim(form.response_body)\r\n                if (form.response_body.startsWith(\"<\")) {\r\n                    this.$data.resB_code = this.format_xml(form.response_body)\r\n                    response_body_language = 'xml'\r\n                } else if (form.response_body.startsWith(\"{\")) {\r\n                    this.$data.resB_code = this.format_json(form.response_body)\r\n                    response_body_language = 'json'\r\n                } else {\r\n                    this.$data.resB_code = form.response_body\r\n                }\r\n            }\r\n            this.$refs.reqH?.setLanguage('plaintext')\r\n            this.$refs.reqB?.setLanguage(request_body_language)\r\n            this.$refs.resB?.setLanguage(response_body_language)\r\n            this.$refs.reqH?.updateOptions({readOnly: true})\r\n            this.$refs.reqB?.updateOptions({readOnly: true})\r\n            this.$refs.resB?.updateOptions({readOnly: true})\r\n        },\r\n        format_xml(text) {\r\n            return xmlFormat(text)\r\n        },\r\n        format_json(json, options) {\r\n            return JSON.stringify(JSON.parse(json), null, 4)\r\n        },\r\n        format_headers(form) {\r\n            // general\r\n            let headers = \"General\" + \"\\n\"\r\n            headers += \"\\tRequest URL:\" + form.path + \"\\n\"\r\n            headers += \"\\tRequest Method:\" + form.method + \"\\n\"\r\n            headers += \"\\tStatus Code:\" + form.http_status + \"\\n\"\r\n            headers += \"\\tRemote Address:\" + form.client_ip + \"\\n\"\r\n\r\n            // response_header\r\n            headers += \"Response Header\" + \"\\n\"\r\n            headers += this.logHeaderToString(form.response_header)\r\n            // request_header\r\n            headers += \"Request Header\" + \"\\n\"\r\n            headers += this.logHeaderToString(form.request_header)\r\n            return headers\r\n        },\r\n        logHeaderToString(text) {\r\n            let stringHeaders = \"\"\r\n            const parseObj = JSON.parse(text)\r\n            for (let key in parseObj) {\r\n                stringHeaders += \"\\t\" + key + \": \" + parseObj[key] + \"\\n\"\r\n            }\r\n            return stringHeaders\r\n        },\r\n    },\r\n}\r\n","<template>\r\n  <yv-vjson-layout :vjson=\"vjson\" :vcxt=\"vcxt\" class=\"api-log\"/>\r\n\r\n  <el-dialog\r\n      title=\"接口日志\"\r\n      v-model=\"showLogDialog\"\r\n      width=\"800px\"\r\n      :append-to-body=\"true\"\r\n      class=\"api-config\">\r\n    <el-tabs>\r\n      <el-tab-pane label=\"请求头\" :lazy=\"false\">\r\n        <YvSrcEditor ref=\"reqH\" v-model=\"reqH_code\" :style=\"{height: 450}\"/>\r\n      </el-tab-pane>\r\n      <el-tab-pane label=\"请求体\" :lazy=\"false\">\r\n        <YvSrcEditor ref=\"reqB\" v-model=\"reqB_code\" :style=\"{height: 450}\"/>\r\n      </el-tab-pane>\r\n      <el-tab-pane label=\"响应体\" :lazy=\"false\">\r\n        <YvSrcEditor ref=\"resB\" v-model=\"resB_code\" :style=\"{height: 450}\"/>\r\n      </el-tab-pane>\r\n    </el-tabs>\r\n  </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport BizMixin from \"../../../runtime/bizMixin\"\r\nimport design from './ApiLogs.design'\r\n\r\nexport default {\r\n  mixins: [design, BizMixin],\r\n  data() {\r\n    return {\r\n      showLogDialog: false,\r\n      reqH_code: \"\",\r\n      reqB_code: \"\",\r\n      resB_code: \"\",\r\n    }\r\n  },\r\n  mounted() {\r\n    this.$refs.reqH?.updateOptions({readOnly: true})\r\n    this.$refs.reqB?.updateOptions({readOnly: true})\r\n    this.$refs.resB?.updateOptions({readOnly: true})\r\n    this.$refs.reqH?.setLanguage('plaintext')\r\n  },\r\n  methods: {},\r\n}\r\n</script>\r\n<style lang=\"less\">\r\n.el-dialog.api-config .codeEditBox {\r\n  height: 430px;\r\n}\r\n</style>\r\n","<script>\r\nimport ApiConfig from './api/ApiConfig.vue'\r\nimport ApiLogs from './api/ApiLogs.vue'\r\n\r\nexport default {\r\n  components: {\r\n    ApiConfig,\r\n    ApiLogs,\r\n  },\r\n  data() {\r\n    return {\r\n      addProxyConfig: {\r\n        showAddDialog: false\r\n      },\r\n      addApiConfig: {\r\n        showAddDialog: false\r\n\r\n      },\r\n      currentProxyConfigId: \"\",\r\n      proxyConfigListLoading: false,\r\n      proxyConfigList: [],\r\n\r\n      apiConfigListLoading: false,\r\n      apiConfigList: [],\r\n\r\n      treeLoading: false,\r\n      dataTree: [],\r\n\r\n      currentApiConfigId: \"\",\r\n      apiLogListLoading: false,\r\n      apiLogList: [],\r\n\r\n      \r\n    }\r\n  },\r\n\r\n  methods: {\r\n    showAddProxyConfig() {\r\n      this.addProxyConfig.showAddDialog = true\r\n    },\r\n\r\n    showAddApiConfig() {\r\n      this.addApiConfig.showAddDialog = true\r\n    },\r\n\r\n    queryProxyConfigList() {\r\n      this.proxyConfigListLoading = true\r\n      system.invokeStudio(\"ApiProxy@queryList\", {}).then((res) => {\r\n        if (res.success) {\r\n          this.proxyConfigList = res.data\r\n        }\r\n      }).finally(() => {\r\n        this.proxyConfigListLoading = false\r\n      })\r\n    },\r\n    proxyConfigListClick(row, column, cell, event) {\r\n      console.log(row.id)\r\n      this.currentProxyConfigId = row.id\r\n      this.queryApiConfigList()\r\n    },\r\n\r\n    queryApiConfigList() {\r\n      if (this.currentProxyConfigId) {\r\n        this.apiConfigListLoading = true\r\n        system.invokeStudio(\"ApiProxy@queryApiConfigList\", {\r\n          proxy_config_id: this.currentProxyConfigId\r\n        }).then((res) => {\r\n          if (res.success) {\r\n            this.apiConfigList = res.data\r\n          }\r\n        }).finally(() => {\r\n          this.apiConfigListLoading = false\r\n        })\r\n\r\n      }\r\n    },\r\n\r\n    queryApiLogList() {\r\n      if (this.currentApiConfigId) {\r\n        this.apiConfigListLoading = true\r\n        system.invokeStudio(\"ApiProxy@queryApiLogList\", {\r\n          api_config_id: this.currentApiConfigId,\r\n          req: \"{form.req}\",\r\n          resp: \"{form.resp}\",\r\n          start_time: \"{form.start_time}\",\r\n          end_time: \"{form.end_time}\",\r\n        }).then((res) => {\r\n          if (res.success) {\r\n            this.apiConfigList = res.data\r\n          }\r\n        }).finally(() => {\r\n          this.apiConfigListLoading = false\r\n        })\r\n      }\r\n    },\r\n\r\n    getTree() {\r\n      this.treeLoading = true\r\n      system.invokeStudio(\"ApiProxy@getTree\", {}).then((res) => {\r\n        if (res.success) {\r\n          this.dataTree = res.data\r\n        }\r\n      }).finally(() => {\r\n        this.treeLoading = false\r\n      })\r\n    },\r\n\r\n    treeClick(node) {\r\n      const apiId = node.apiId\r\n      if (!apiId) {\r\n        return\r\n      }\r\n      this.currentApiConfigId = apiId\r\n      this.queryApiLogList()\r\n    },\r\n\r\n    tabChange(index) {\r\n      if (index === \"0\") {\r\n        this.queryProxyConfigList()\r\n      } else if (index === \"1\") {\r\n        this.getTree()\r\n      }\r\n    },\r\n  },\r\n\r\n  mounted() {\r\n    this.queryProxyConfigList()\r\n  }\r\n}\r\n\r\n</script>\r\n<template>\r\n  <el-tabs class=\"_api_page\" type=\"border-card\" @tab-change=\"tabChange\">\r\n    <el-tab-pane style=\"height: 100%;\" label=\"接口配置\">\r\n      <ApiConfig />\r\n    </el-tab-pane>\r\n\r\n    <el-tab-pane label=\"接口日志\">\r\n      <ApiLogs />\r\n    </el-tab-pane>\r\n  </el-tabs>\r\n\r\n  <!-- 规则配置弹框 -->\r\n  <el-dialog title=\"规则配置\" v-model=\"addProxyConfig.showAddDialog\" width=\"41%\" center :append-to-body=\"true\">\r\n    <el-tabs>\r\n      <el-tab-pane label=\"接口配置\">\r\n\r\n        <el-form >\r\n          <el-row>\r\n            <el-col :span=\"12\">\r\n              <el-form-item label=\"优先级\">\r\n                <el-input type=\"number\" />\r\n              </el-form-item>\r\n            </el-col>\r\n            <el-col :span=\"8\">\r\n              <el-form-item label=\"接口方向\">\r\n                <el-radio-group >\r\n                  <el-radio label=\"上传\" />\r\n                  <el-radio label=\"下传\" />\r\n                </el-radio-group>\r\n              </el-form-item>\r\n            </el-col>\r\n            <el-col :span=\"4\">\r\n              <el-form-item label=\"是否启用\">\r\n                <el-switch />\r\n              </el-form-item>\r\n            </el-col>\r\n          </el-row>\r\n          <el-row>\r\n            <el-col :span=\"12\">\r\n              <el-form-item label=\"规则名称\">\r\n                <el-input type=\"text\" />\r\n              </el-form-item>\r\n            </el-col>\r\n            <el-col :span=\"12\">\r\n              <el-form-item label=\"目标地址\">\r\n                <el-input type=\"text\" />\r\n              </el-form-item>\r\n            </el-col>\r\n          </el-row>\r\n          <el-row>\r\n            <el-col :span=\"24\">\r\n              <el-form-item label=\"Path条件\">\r\n                <el-input type=\"text\" />\r\n              </el-form-item>\r\n            </el-col>\r\n          </el-row>\r\n          <el-row>\r\n            <el-col :span=\"24\">\r\n              <el-form-item label=\"Host条件\">\r\n                <el-input type=\"text\" />\r\n              </el-form-item>\r\n            </el-col>\r\n          </el-row>\r\n          <el-row>\r\n            <el-col :span=\"24\">\r\n              <el-form-item label=\"Header条件\">\r\n                <el-input type=\"text\" />\r\n              </el-form-item>\r\n            </el-col>\r\n          </el-row>\r\n        </el-form>\r\n      </el-tab-pane>\r\n      <el-tab-pane label=\"请求重写\">\r\n\r\n        <el-row>\r\n          <el-button type=\"primary\">新增</el-button>\r\n        </el-row>\r\n        <el-row>\r\n          <el-table border style=\"width: 100%\" >\r\n            <el-table-column prop=\"\" label=\"重写规则\" width=\"200px\" />\r\n            <el-table-column prop=\"\" label=\"配置值\" width=\"300px\" />\r\n            <el-table-column fixed=\"right\" label=\"操作\" width=\"120\">\r\n              <template #default=\"scope\">\r\n                <el-button link type=\"primary\">\r\n                  编辑\r\n                </el-button>\r\n                <el-button link type=\"primary\">\r\n                  删除\r\n                </el-button>\r\n              </template>\r\n            </el-table-column>\r\n          </el-table>\r\n        </el-row>\r\n\r\n      </el-tab-pane>\r\n      <el-tab-pane label=\"代理配置(自动生成)\">\r\n        <yv-src-editor language=\"yaml\" style=\"height:250px\" />\r\n      </el-tab-pane>\r\n    </el-tabs>\r\n  </el-dialog>\r\n  <!-- 接口配置弹框 -->\r\n  <el-dialog title=\"接口配置\" v-model=\"addApiConfig.showAddDialog\" width=\"41%\" center :append-to-body=\"true\">\r\n    <el-form  width=\"40%\">\r\n      <el-row>\r\n        <el-col :span=\"8\">\r\n          <el-form-item label=\"优先级\">\r\n            <el-input type=\"number\" />\r\n          </el-form-item>\r\n        </el-col>\r\n        <el-col :span=\"12\">\r\n          <el-form-item label=\"接口名称\">\r\n            <el-input type=\"text\" />\r\n          </el-form-item>\r\n        </el-col>\r\n        <el-col :span=\"4\">\r\n          <el-form-item label=\"启用\">\r\n            <el-switch />\r\n          </el-form-item>\r\n        </el-col>\r\n      </el-row>\r\n      <el-row>\r\n        <el-col :span=\"8\">\r\n          <el-form-item label=\"Http Method\">\r\n            <el-select placeholder=\"Http Method\">\r\n              <el-option label=\"GET\" value=\"get\" />\r\n              <el-option label=\"POST\" value=\"post\" />\r\n              <el-option label=\"PUT\" value=\"put\" />\r\n              <el-option label=\"PATCH\" value=\"patch\" />\r\n              <el-option label=\"DELETE\" value=\"delete\" />\r\n              <el-option label=\"HEAD\" value=\"head\" />\r\n              <el-option label=\"OPTIONS\" value=\"options\" />\r\n            </el-select>\r\n          </el-form-item>\r\n        </el-col>\r\n        <el-col :span=\"12\">\r\n          <el-form-item label=\"Path条件\">\r\n            <el-input type=\"text\" />\r\n          </el-form-item>\r\n        </el-col>\r\n        <el-col :span=\"4\">\r\n          <el-form-item label=\"忽略大小写\">\r\n            <el-switch />\r\n          </el-form-item>\r\n        </el-col>\r\n      </el-row>\r\n      <el-row>\r\n        <el-col :span=\"20\">\r\n          <el-form-item label=\"请求Body\">\r\n            <el-input type=\"textarea\" rows=\"5\" />\r\n          </el-form-item>\r\n        </el-col>\r\n        <el-col :span=\"4\">\r\n          <el-form-item label=\"忽略大小写\">\r\n            <el-switch />\r\n          </el-form-item>\r\n        </el-col>\r\n      </el-row>\r\n      <el-row>\r\n        <el-col :span=\"20\">\r\n          <el-form-item label=\"响应Body\">\r\n            <el-input type=\"textarea\" rows=\"5\"/>\r\n          </el-form-item>\r\n        </el-col>\r\n        <el-col :span=\"4\">\r\n          <el-form-item label=\"忽略大小写\">\r\n            <el-switch />\r\n          </el-form-item>\r\n        </el-col>\r\n      </el-row>\r\n      <el-row>\r\n        <el-col :span=\"20\">\r\n          <el-form-item label=\"接口说明\">\r\n            <el-input type=\"textarea\" rows=\"5\"/>\r\n          </el-form-item>\r\n        </el-col>\r\n        <el-col :span=\"4\">\r\n          <el-form-item label=\"忽略大小写\">\r\n            <el-switch />\r\n          </el-form-item>\r\n        </el-col>\r\n      </el-row>\r\n    </el-form>\r\n  </el-dialog>\r\n</template>\r\n\r\n<style lang=\"less\">\r\n._api_page {\r\n  height: 100%;\r\n  display: flex;\r\n  flex-direction:column;\r\n  &>.el-tabs__content{\r\n   flex:1;\r\n    .el-tab-pane{\r\n      height:100%\r\n    }\r\n  }\r\n}\r\n.yv-aggrid {\r\n  /*min-height: 500px;*/\r\n}\r\n</style>\r\n","<template>\r\n  <div class=\"print-plan design\">\r\n    <div class=\"toolbar\">\r\n      <el-button link class=\"toolbar-btn\" @click=\"searchPrintPlan\" :icon=\"renderIcon('fa Search')\">\r\n        查询\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"createPrintPlan\" :icon=\"renderIcon('fa PlusSquare')\">\r\n        新建\r\n      </el-button>\r\n      <!--<el-button link class=\"toolbar-btn\" @click=\"batchDeletePrintPlan\" :icon=\"renderIcon('fa Trash')\">-->\r\n      <!--  批量删除-->\r\n      <!--</el-button>-->\r\n    </div>\r\n    <div class=\"print-plan-content\">\r\n      <div class=\"print-plan-content-search\">\r\n        <el-form :inline=\"true\" :model=\"query\" class=\"\">\r\n          <el-form-item label=\"场景编码\">\r\n            <el-input v-model=\"query.print_plan_code\" placeholder=\"请输入打印场景编码\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"场景名称\">\r\n            <el-input v-model=\"query.print_plan_name\" placeholder=\"请输入打印场景名称\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"所属仓库\">\r\n            <el-select v-model=\"query.wh_id\" @change=\"whOnChange\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"item in whList\"\r\n                  :key=\"item.wh_id\"\r\n                  :label=\"item.wh_name\"\r\n                  :value=\"item.wh_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"所属项目\">\r\n            <el-select v-model=\"query.project_id\" placeholder=\"请选择所属项目\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"project in projectList\"\r\n                  :key=\"project.project_id\"\r\n                  :label=\"project.project_name\"\r\n                  :value=\"project.project_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"场景状态\">\r\n            <el-select v-model=\"query.is_enable\" placeholder=\"请选择场景状态\" filterable clearable>\r\n              <el-option :key=\"1\" label=\"启用\" :value=\"1\"/>\r\n              <el-option :key=\"0\" label=\"禁用\" :value=\"0\"/>\r\n            </el-select>\r\n          </el-form-item>\r\n        </el-form>\r\n      </div>\r\n      <div class=\"print-plan-content-table\">\r\n        <el-table\r\n            ref=\"printPlanTable\"\r\n            border\r\n            highlight-current-row\r\n            v-loading=\"printPlanTableOption.loading\"\r\n            :data=\"printPlanTableOption.rowData\"\r\n            @row-click=\"printPlanTableOnRowClick\">\r\n          <el-table-column fixed type=\"selection\" width=\"40\"/>\r\n          <el-table-column prop=\"print_plan_id\" label=\"ID\" width=\"60\"/>\r\n          <el-table-column prop=\"print_plan_code\" label=\"场景编码\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"print_plan_name\" label=\"场景名称\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"wh_id\" label=\"所属仓库ID\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"wh_name\" label=\"所属仓库名称\" :formatter=\"whNameFieldFormatter\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"project_name\" label=\"所属项目\" :formatter=\"projectNameFieldFormatter\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"is_enable\" label=\"状态\" :formatter=\"isEnableFieldFormatter\"/>\r\n          <el-table-column prop=\"create_at\" label=\"创建时间\"/>\r\n          <el-table-column prop=\"create_by\" label=\"创建者\"/>\r\n          <el-table-column prop=\"update_at\" label=\"最后修改时间\"/>\r\n          <el-table-column prop=\"update_by\" label=\"最后修改者\"/>\r\n          <el-table-column fixed=\"right\" label=\"操作\" width=\"120\" header-align=\"center\">\r\n            <template #default=\"scope\">\r\n              <el-button link type=\"primary\" @click.prevent=\"updatePrintPlan(scope.row)\">编辑</el-button>\r\n              <el-button link type=\"primary\" @click.prevent=\"enableOrDisablePrintPlan(scope.row, scope.row.is_enable)\"\r\n                         v-if=\"scope.row.is_enable === 1\">禁用\r\n              </el-button>\r\n              <el-button link type=\"primary\" @click.prevent=\"enableOrDisablePrintPlan(scope.row, scope.row.is_enable)\" v-else>启用</el-button>\r\n              <el-button link type=\"primary\" @click.prevent=\"testPrint(scope.row)\">打印测试</el-button>\r\n              <el-button link type=\"primary\" @click.prevent=\"test(scope.row)\">测试</el-button>\r\n            </template>\r\n          </el-table-column>\r\n        </el-table>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- create or update print plan drawer start -->\r\n    <el-drawer v-model=\"createOrUpdateDrawerOption.visible\"\r\n               direction=\"rtl\"\r\n               size=\"50%\">\r\n      <template #header>\r\n        <h4>{{ createOrUpdateDrawerOption.title }}</h4>\r\n      </template>\r\n      <template #default>\r\n        <div class=\"print-plan-drawer-content\">\r\n          <el-form :model=\"createOrUpdateDrawerOption.form\" label-width=\"120px\">\r\n            <el-form-item label=\"场景编码\">\r\n              <el-input v-model=\"createOrUpdateDrawerOption.form.print_plan_code\" placeholder=\"请输入打印场景编码\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"场景名称\">\r\n              <el-input v-model=\"createOrUpdateDrawerOption.form.print_plan_name\" placeholder=\"请输入打印场景名称\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"所属仓库\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.wh_id\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n                <el-option\r\n                    v-for=\"item in whList\"\r\n                    :key=\"item.wh_id\"\r\n                    :label=\"item.wh_name\"\r\n                    :value=\"item.wh_id\"\r\n                />\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"所属项目\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.project_id\" placeholder=\"请选择所属项目\" filterable clearable>\r\n                <el-option\r\n                    v-for=\"item in projectList\"\r\n                    :key=\"item.project_id\"\r\n                    :label=\"item.project_name\"\r\n                    :value=\"item.project_id\"\r\n                />\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"场景状态\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.is_enable\" placeholder=\"请选择场景状态\" filterable clearable>\r\n                <el-option :key=\"1\" label=\"启用\" :value=\"1\"/>\r\n                <el-option :key=\"0\" label=\"禁用\" :value=\"0\"/>\r\n              </el-select>\r\n            </el-form-item>\r\n            <div class=\"print-plan-drawer-content-template\"\r\n                 v-for=\"(printTemplate, templateIdx) in createOrUpdateDrawerOption.form.print_template_list\">\r\n              <div class=\"unbinding-print-template-btn right\">\r\n                <el-button link type=\"danger\" @click=\"unbindingPrintTemplate(templateIdx)\" :icon=\"renderIcon('fa Trash')\">删除</el-button>\r\n              </div>\r\n              <el-form-item label=\"打印模板\" label-width=\"100px\">\r\n                <el-col :span=\"20\">\r\n                  <el-select v-model=\"printTemplate.print_template_id\" placeholder=\"请选择打印模板\" filterable clearable style=\"width: 100%;\">\r\n                    <el-option v-for=\"template in printTemplateList\"\r\n                               :label=\"template.print_template_name\"\r\n                               :key=\"template.print_template_id\"\r\n                               :value=\"template.print_template_id\"/>\r\n                  </el-select>\r\n                </el-col>\r\n                <el-col :span=\"4\">\r\n                  <el-button link type=\"primary\" @click=\"previewTemplateParam(templateIdx)\">参数预览</el-button>\r\n                </el-col>\r\n              </el-form-item>\r\n              <el-form-item label=\"打印终端\" label-width=\"100px\">\r\n                <el-radio-group v-model=\"printTemplate.print_mode\">\r\n                  <el-radio-button label=\"1\">发送至请求者</el-radio-button>\r\n                  <el-radio-button label=\"2\">发送至其它</el-radio-button>\r\n                  <el-radio-button label=\"3\">发送至队列</el-radio-button>\r\n                </el-radio-group>\r\n              </el-form-item>\r\n              <el-form-item v-for=\"(printCondition, conditionIdx) in printTemplate.print_condition_list\" label-width=\"0px\">\r\n                <el-row :gutter=\"25\">\r\n                  <el-col :span=\"10\" :offset=\"2\">\r\n                    <el-form-item label=\"条件\" label-width=\"50px\">\r\n                      <el-input v-model=\"printCondition.print_condition\" placeholder=\"请输入打印条件\"/>\r\n                    </el-form-item>\r\n                  </el-col>\r\n                  <el-col :span=\"10\">\r\n                    <el-form-item label=\"终端\" label-width=\"50px\">\r\n                      <el-select v-model=\"printCondition.print_terminal_id\" placeholder=\"请选择打印终端\" filterable clearable>\r\n                        <el-option v-for=\"printTerminal in printTerminalList\"\r\n                                   :label=\"printTerminal.print_terminal_name\"\r\n                                   :key=\"printTerminal.print_terminal_id\"\r\n                                   :value=\"printTerminal.print_terminal_id\"/>\r\n                      </el-select>\r\n                    </el-form-item>\r\n                  </el-col>\r\n                  <el-col :span=\"1\">\r\n                    <el-button link @click=\"removePrintCondition(templateIdx, conditionIdx)\" :icon=\"renderIcon('fa MinusCircle')\">移除条件</el-button>\r\n                  </el-col>\r\n                </el-row>\r\n              </el-form-item>\r\n              <div class=\"add-print-condition-btn right\">\r\n                <el-button link type=\"primary\" @click=\"addPrintCondition(templateIdx)\" :icon=\"renderIcon('fa PlusCircle')\">添加条件</el-button>\r\n              </div>\r\n            </div>\r\n            <div class=\"binding-print-template-btn\">\r\n              <el-button link type=\"primary\" plain @click=\"bindingPrintTemplate\" :icon=\"renderIcon('fa PlusSquare')\">\r\n                添加打印模板\r\n              </el-button>\r\n            </div>\r\n          </el-form>\r\n        </div>\r\n      </template>\r\n      <template #footer>\r\n        <div style=\"flex: auto\">\r\n          <el-button type=\"primary\" @click=\"createOrUpdatePrintPlan\" :icon=\"renderIcon('fa Check')\">提交</el-button>\r\n          <el-button @click=\"closeCreateOrUpdateDrawer\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n        </div>\r\n      </template>\r\n    </el-drawer>\r\n    <!-- create or update print plan drawer end -->\r\n\r\n    <!-- preview template param drawer start -->\r\n    <el-drawer\r\n        v-model=\"previewTemplateParamDrawerOption.visible\"\r\n        direction=\"rtl\"\r\n        size=\"30%\">\r\n      <template #header>\r\n        <h4>{{ previewTemplateParamDrawerOption.title }}</h4>\r\n      </template>\r\n      <template #default>\r\n        <div style=\"height: 100%;\">\r\n          <div>\r\n            <div>\r\n              <label>模板ID:</label>\r\n              <span>{{ previewTemplateParamDrawerOption.template.template_id }}</span>\r\n            </div>\r\n            <div>\r\n              <label>模板编码:</label>\r\n              <span>{{ previewTemplateParamDrawerOption.template.template_code }}</span>\r\n            </div>\r\n            <div>\r\n              <label>模板名称</label>\r\n              <span>{{ previewTemplateParamDrawerOption.template.template_name }}</span>\r\n            </div>\r\n          </div>\r\n          <div>\r\n            <span>模板参数</span>\r\n            <el-tree class=\"unselect\"\r\n                     :data=\"previewTemplateParamTreeOption.data\"\r\n                     :props=\"previewTemplateParamTreeOption.defaultProps\"\r\n                     default-expand-all>\r\n              <template #default=\"{ node, data }\">\r\n                <div class=\"custom-tree-node\">\r\n                  <div style=\"display: inline\">{{ data.field_label }}</div>\r\n                </div>\r\n              </template>\r\n            </el-tree>\r\n          </div>\r\n        </div>\r\n      </template>\r\n      <template #footer>\r\n        <div style=\"flex: auto\">\r\n          <el-button @click=\"closePreviewTemplateParamDrawer\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n        </div>\r\n      </template>\r\n    </el-drawer>\r\n    <!-- preview template param drawer end -->\r\n\r\n    <!-- test print dialog start -->\r\n    <el-dialog\r\n        v-model=\"testPrintDialogOption.visible\"\r\n        :title=\"testPrintDialogOption.title\"\r\n        width=\"40%\"\r\n        draggable\r\n    >\r\n      <div class=\"test-print-dialog-content\">\r\n        <el-input\r\n            v-model=\"testPrintDialogOption.query\"\r\n            placeholder=\"请输入JSON格式的打印测试参数\"\r\n            type=\"textarea\"\r\n            show-word-limit\r\n            :rows=\"20\"\r\n        />\r\n      </div>\r\n      <template #footer>\r\n      <span class=\"dialog-footer\">\r\n        <el-button type=\"primary\" @click=\"submitTestPrint\" :icon=\"renderIcon('fa Check')\" :loading=\"testPrintDialogOption.loading\">提交</el-button>\r\n        <el-button @click=\"closeTestPrintDialog\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n      </span>\r\n      </template>\r\n    </el-dialog>\r\n    <!-- test print dialog end -->\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {renderIcon} from '../../utils'\r\n\r\nexport default {\r\n  data() {\r\n\r\n    return {\r\n      whList: [],\r\n      projectList: [],\r\n      printTemplateList: [],\r\n      printTerminalList: [],\r\n      query: {\r\n        print_plan_code: '',\r\n        print_plan_name: '',\r\n        project_id: null,\r\n        wh_id: null,\r\n        is_enable: null\r\n      },\r\n      printPlanTableOption: {\r\n        loading: false,\r\n        rowData: [],\r\n      },\r\n      createOrUpdateDrawerOption: {\r\n        visible: false,\r\n        title: '新增打印场景',\r\n        form: {\r\n          print_plan_id: null,\r\n          print_plan_code: '',\r\n          print_plan_name: '',\r\n          wh_id: null,\r\n          project_id: null,\r\n          is_enable: 1,\r\n          print_template_list: [\r\n            // {\r\n            //   print_template_id: null,\r\n            //   print_mode: null,\r\n            //   print_condition_list: [{\r\n            //     print_condition: '',\r\n            //     print_terminal_id: null,\r\n            //   }]\r\n            // },\r\n          ],\r\n        }\r\n      },\r\n      previewTemplateParamDrawerOption: {\r\n        visible: false,\r\n        title: '参数预览',\r\n        template: {\r\n          template_id: null,\r\n          template_code: '',\r\n          template_name: ''\r\n        },\r\n      },\r\n      previewTemplateParamTreeOption: {\r\n        defaultProps: {\r\n          label: 'field_label'\r\n        },\r\n        data: [],\r\n      },\r\n      testPrintDialogOption: {\r\n        visible: false,\r\n        loading: false,\r\n        title: '测试打印参数',\r\n        query: '',\r\n        rowData: {}\r\n      }\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    this.loadWhList()\r\n    this.loadProjectList()\r\n    this.loadPrintPlanList()\r\n  },\r\n\r\n  methods: {\r\n    renderIcon,\r\n    loadWhList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@findWhList\", {}).then((res) => {\r\n        this.whList = res.data\r\n      })\r\n    },\r\n    loadProjectList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@findProjectList\", {}).then((res) => {\r\n        this.projectList = res.data\r\n      })\r\n    },\r\n    loadPrintPlanList() {\r\n      this.printPlanTableOption.loading = true\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintPlanList\", this.query).then((res) => {\r\n        this.printPlanTableOption.rowData = res.data\r\n      }).finally(() => {\r\n        this.printPlanTableOption.loading = false\r\n      })\r\n    },\r\n    loadPrintTemplateList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintTemplateList\", {}).then((res) => {\r\n        this.printTemplateList = res.data\r\n      })\r\n    },\r\n    loadPrintTerminalList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintTerminalList\", {}).then((res) => {\r\n        this.printTerminalList = res.data\r\n      })\r\n    },\r\n    findTemplateParamByTempLateId(templateId) {\r\n      if (!templateId) {\r\n        return;\r\n      }\r\n      const params = {print_template_id: templateId}\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintTemplateParamManager@getPrintTemplateParam\", params).then((res) => {\r\n        if (!res.success) {\r\n          system.showErrorDialog(\"加载模板参数异常\");\r\n          return;\r\n        }\r\n        const templateParams = res.data;\r\n        const treeNodes = [];\r\n        for (let templateParam of templateParams) {\r\n          const treeNode = {\r\n            ds_id: templateParam.print_template_param_id,\r\n            field_label: templateParam.param_name,\r\n            ds_name: templateParam.param_key,\r\n            ds_title: templateParam.param_name,\r\n            ds_type: templateParam.param_type,\r\n            is_collection: templateParam.result_type === 2\r\n          }\r\n          if (templateParam.param_type === 'SQL') {\r\n            treeNode.ds_sql = templateParam.param_value;\r\n          } else if (templateParam.param_type === 'JSON') {\r\n            treeNode.ds_json = templateParam.param_value;\r\n          }\r\n          treeNode.children = JSON.parse(templateParam.param_detail ?? '{}')\r\n          treeNodes.push(treeNode);\r\n        }\r\n        this.previewTemplateParamTreeOption.data = treeNodes;\r\n      })\r\n    },\r\n    whOnChange(value) {\r\n      this.loadProjectList(value)\r\n    },\r\n    searchPrintPlan() {\r\n      this.loadPrintPlanList();\r\n    },\r\n    createPrintPlan() {\r\n      this.createOrUpdateDrawerOption.form = {\r\n        print_plan_id: null,\r\n        print_plan_code: '',\r\n        print_plan_name: '',\r\n        wh_id: null,\r\n        is_enable: 1,\r\n        print_template_list: []\r\n      }\r\n      this.loadPrintTemplateList()\r\n      this.loadPrintTerminalList()\r\n      this.showCreateOrUpdateDrawer();\r\n    },\r\n    printPlanTableOnRowClick(row) {\r\n\r\n    },\r\n    whNameFieldFormatter(row, column, cellValue, index) {\r\n      return this.whList.find((wh) => wh.wh_id === row.wh_id)?.wh_name\r\n    },\r\n    projectNameFieldFormatter(row, column, cellValue, index) {\r\n      return this.projectList.find(project => project.project_id === row.project_id)?.project_name\r\n    },\r\n    isEnableFieldFormatter(row, column, cellValue, index) {\r\n      return cellValue === 0 ? '禁用' : '启用'\r\n    },\r\n    updatePrintPlan(row) {\r\n      this.createOrUpdateDrawerOption.title = '编辑打印场景'\r\n      _.extend(this.createOrUpdateDrawerOption.form, row)\r\n      const params = {print_plan_id: row.print_plan_id}\r\n      this.loadPrintTemplateList()\r\n      this.loadPrintTerminalList()\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintConditionByPlanId\", params).then((res) => {\r\n        this.createOrUpdateDrawerOption.form.print_template_list = res.data\r\n        this.showCreateOrUpdateDrawer()\r\n      })\r\n    },\r\n    enableOrDisablePrintPlan(row, isEnable) {\r\n      const operationName = isEnable === 1 ? '禁用' : '启用'\r\n      system.confirm(`确定${operationName} ${row.print_plan_name} 的打印场景吗?`).then(() => {\r\n        const params = {print_plan_id: row.print_plan_id, is_enable: isEnable === 0}\r\n        system.invokeServer(\"/com/galaxis/wms/print/PrintManager@enableOrDisablePrintPlan\", params).then((res) => {\r\n          system.showInfoDialog(res.msg)\r\n          if (res.success) {\r\n            this.loadPrintPlanList()\r\n          }\r\n        })\r\n      })\r\n    },\r\n    showCreateOrUpdateDrawer() {\r\n      this.createOrUpdateDrawerOption.visible = true;\r\n    },\r\n    closeCreateOrUpdateDrawer() {\r\n      this.createOrUpdateDrawerOption.visible = false;\r\n    },\r\n    showPreviewTemplateParamDrawer() {\r\n      this.previewTemplateParamDrawerOption.visible = true;\r\n    },\r\n    closePreviewTemplateParamDrawer() {\r\n      this.previewTemplateParamDrawerOption.visible = false;\r\n    },\r\n    addPrintCondition(templateIdx) {\r\n      const printConditionList = this.createOrUpdateDrawerOption.form.print_template_list[templateIdx].print_condition_list\r\n      printConditionList.push({})\r\n      _.extend(this.createOrUpdateDrawerOption.form.print_template_list[templateIdx], {print_condition_list: printConditionList})\r\n    },\r\n    removePrintCondition(templateIdx, conditionIdx) {\r\n      const printConditionList = this.createOrUpdateDrawerOption.form.print_template_list[templateIdx].print_condition_list\r\n      printConditionList.splice(conditionIdx, 1)\r\n      _.extend(this.createOrUpdateDrawerOption.form.print_template_list[templateIdx], {print_condition_list: printConditionList})\r\n    },\r\n    bindingPrintTemplate() {\r\n      this.createOrUpdateDrawerOption.form.print_template_list.push({print_condition_list: [{}]})\r\n    },\r\n    unbindingPrintTemplate(idx) {\r\n      const printTemplateList = this.createOrUpdateDrawerOption.form.print_template_list\r\n      printTemplateList.splice(idx, 1)\r\n      this.createOrUpdateDrawerOption.form.print_template_list = printTemplateList\r\n    },\r\n    previewTemplateParam(templateIdx) {\r\n      const templateId = this.createOrUpdateDrawerOption?.form?.print_template_list[templateIdx]?.print_template_id\r\n      if (!templateId) {\r\n        system.showErrorDialog(\"请先选择打印模板\");\r\n        return;\r\n      }\r\n      this.findTemplateParamByTempLateId(templateId);\r\n\r\n      const printTemplate = this.printTemplateList?.find(template => template.print_template_id === templateId)\r\n      this.previewTemplateParamDrawerOption.template.template_id = templateId\r\n      if (printTemplate) {\r\n        _.extend(this.previewTemplateParamDrawerOption.template, {\r\n          template_code: printTemplate.print_template_code,\r\n          template_name: printTemplate.print_template_name\r\n        })\r\n      }\r\n      this.showPreviewTemplateParamDrawer();\r\n    },\r\n    createOrUpdatePrintPlan() {\r\n      const params = this.createOrUpdateDrawerOption.form\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@createOrUpdatePrintPlan\", params).then((res) => {\r\n        system.showInfoDialog(res.msg)\r\n        if (res.success) {\r\n          this.loadPrintPlanList()\r\n          this.closeCreateOrUpdateDrawer()\r\n          return\r\n        }\r\n      })\r\n    },\r\n    showTestPrintDialog() {\r\n      this.testPrintDialogOption.visible = true\r\n    },\r\n    closeTestPrintDialog() {\r\n      this.testPrintDialogOption.visible = false\r\n    },\r\n    testPrint(row) {\r\n      this.testPrintDialogOption.query = ''\r\n      this.testPrintDialogOption.rowData = row\r\n      this.showTestPrintDialog()\r\n    },\r\n    test(row){\r\n      window['printTools'].showTemplateDialog(row.print_plan_code);\r\n    },\r\n    submitTestPrint() {\r\n      this.testPrintDialogOption.loading = true\r\n      window['printTools'].invokePrint(this.testPrintDialogOption.rowData.print_plan_code, this.testPrintDialogOption.query).finally(() => {\r\n        this.testPrintDialogOption.loading = false\r\n      })\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.print-plan {\r\n  .toolbar {\r\n    border-bottom: 1px solid #ccc\r\n  }\r\n\r\n  .print-plan-content {\r\n    flex: 1;\r\n    background: #efefef;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n\r\n    .print-plan-content-search {\r\n      background: #fff;\r\n      padding-top: 10px;\r\n      border-bottom: 1px solid #dbdada\r\n    }\r\n\r\n    .print-plan-content-table {\r\n      flex: 1;\r\n      margin: 10px;\r\n      overflow: hidden;\r\n      border: 1px solid #dbdada;\r\n\r\n      .el-table {\r\n        width: 100%;\r\n        height: 100%;\r\n\r\n        th.el-table__cell {\r\n          background: #f0f0f0;\r\n        }\r\n\r\n        .cell {\r\n          font-size: 14px;\r\n          color: #333\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  .print-plan-drawer-content {\r\n    width: 95%;\r\n\r\n    .print-plan-drawer-content-template {\r\n      display: flex;\r\n      flex-direction: column;\r\n      border: 1px dashed var(--main-color);\r\n      padding: 18px 10px 0 10px;\r\n      margin: 0 0 5px 30px;\r\n      border-radius: 5px;\r\n      background-color: var(--sub-header-color);\r\n\r\n      .right {\r\n        display: flex;\r\n        justify-content: flex-end;\r\n      }\r\n\r\n      .add-print-condition-btn {\r\n        margin: -10px 160px 10px 0;\r\n      }\r\n\r\n      .unbinding-print-template-btn {\r\n        margin-top: -16px\r\n      }\r\n    }\r\n\r\n    .binding-print-template-btn {\r\n      float: right;\r\n    }\r\n  }\r\n\r\n  .test-print-dialog-content {\r\n    width: 100%;\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"print-plan design\">\r\n    <div class=\"toolbar\">\r\n      <el-button link class=\"toolbar-btn\" @click=\"searchPrintPlan\" :icon=\"renderIcon('fa Search')\">\r\n        查询\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"createPrintPlan\" :icon=\"renderIcon('fa PlusSquare')\">\r\n        新建\r\n      </el-button>\r\n      <!--<el-button link class=\"toolbar-btn\" @click=\"batchDeletePrintPlan\" :icon=\"renderIcon('fa Trash')\">-->\r\n      <!--  批量删除-->\r\n      <!--</el-button>-->\r\n    </div>\r\n    <div class=\"print-plan-content\">\r\n      <div class=\"print-plan-content-search\">\r\n        <el-form :inline=\"true\" :model=\"query\" class=\"\">\r\n          <el-form-item label=\"场景编码\">\r\n            <el-input v-model=\"query.print_plan_code\" placeholder=\"请输入打印场景编码\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"场景名称\">\r\n            <el-input v-model=\"query.print_plan_name\" placeholder=\"请输入打印场景名称\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"所属仓库\">\r\n            <el-select v-model=\"query.wh_id\" @change=\"whOnChange\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"item in whList\"\r\n                  :key=\"item.wh_id\"\r\n                  :label=\"item.wh_name\"\r\n                  :value=\"item.wh_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"所属项目\">\r\n            <el-select v-model=\"query.project_id\" placeholder=\"请选择所属项目\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"project in projectList\"\r\n                  :key=\"project.project_id\"\r\n                  :label=\"project.project_name\"\r\n                  :value=\"project.project_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"场景状态\">\r\n            <el-select v-model=\"query.is_enable\" placeholder=\"请选择场景状态\" filterable clearable>\r\n              <el-option :key=\"1\" label=\"启用\" :value=\"1\"/>\r\n              <el-option :key=\"0\" label=\"禁用\" :value=\"0\"/>\r\n            </el-select>\r\n          </el-form-item>\r\n        </el-form>\r\n      </div>\r\n      <div class=\"print-plan-content-table\">\r\n        <el-table\r\n            ref=\"printPlanTable\"\r\n            border\r\n            highlight-current-row\r\n            v-loading=\"printPlanTableOption.loading\"\r\n            :data=\"printPlanTableOption.rowData\"\r\n            @row-click=\"printPlanTableOnRowClick\">\r\n          <el-table-column fixed type=\"selection\" width=\"40\"/>\r\n          <el-table-column prop=\"print_plan_id\" label=\"ID\" width=\"60\"/>\r\n          <el-table-column prop=\"print_plan_code\" label=\"场景编码\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"print_plan_name\" label=\"场景名称\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"wh_id\" label=\"所属仓库ID\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"wh_name\" label=\"所属仓库名称\" :formatter=\"whNameFieldFormatter\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"project_name\" label=\"所属项目\" :formatter=\"projectNameFieldFormatter\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"is_enable\" label=\"状态\" :formatter=\"isEnableFieldFormatter\"/>\r\n          <el-table-column prop=\"create_at\" label=\"创建时间\"/>\r\n          <el-table-column prop=\"create_by\" label=\"创建者\"/>\r\n          <el-table-column prop=\"update_at\" label=\"最后修改时间\"/>\r\n          <el-table-column prop=\"update_by\" label=\"最后修改者\"/>\r\n          <el-table-column fixed=\"right\" label=\"操作\" width=\"120\" header-align=\"center\">\r\n            <template #default=\"scope\">\r\n              <el-button link type=\"primary\" @click.prevent=\"updatePrintPlan(scope.row)\">编辑</el-button>\r\n              <el-button link type=\"primary\" @click.prevent=\"enableOrDisablePrintPlan(scope.row, scope.row.is_enable)\"\r\n                         v-if=\"scope.row.is_enable === 1\">禁用\r\n              </el-button>\r\n              <el-button link type=\"primary\" @click.prevent=\"enableOrDisablePrintPlan(scope.row, scope.row.is_enable)\" v-else>启用</el-button>\r\n              <el-button link type=\"primary\" @click.prevent=\"testPrint(scope.row)\">打印测试</el-button>\r\n              <el-button link type=\"primary\" @click.prevent=\"test(scope.row)\">测试</el-button>\r\n            </template>\r\n          </el-table-column>\r\n        </el-table>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- create or update print plan drawer start -->\r\n    <el-drawer v-model=\"createOrUpdateDrawerOption.visible\"\r\n               direction=\"rtl\"\r\n               size=\"50%\">\r\n      <template #header>\r\n        <h4>{{ createOrUpdateDrawerOption.title }}</h4>\r\n      </template>\r\n      <template #default>\r\n        <div class=\"print-plan-drawer-content\">\r\n          <el-form :model=\"createOrUpdateDrawerOption.form\" label-width=\"120px\">\r\n            <el-form-item label=\"场景编码\">\r\n              <el-input v-model=\"createOrUpdateDrawerOption.form.print_plan_code\" placeholder=\"请输入打印场景编码\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"场景名称\">\r\n              <el-input v-model=\"createOrUpdateDrawerOption.form.print_plan_name\" placeholder=\"请输入打印场景名称\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"所属仓库\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.wh_id\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n                <el-option\r\n                    v-for=\"item in whList\"\r\n                    :key=\"item.wh_id\"\r\n                    :label=\"item.wh_name\"\r\n                    :value=\"item.wh_id\"\r\n                />\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"所属项目\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.project_id\" placeholder=\"请选择所属项目\" filterable clearable>\r\n                <el-option\r\n                    v-for=\"item in projectList\"\r\n                    :key=\"item.project_id\"\r\n                    :label=\"item.project_name\"\r\n                    :value=\"item.project_id\"\r\n                />\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"场景状态\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.is_enable\" placeholder=\"请选择场景状态\" filterable clearable>\r\n                <el-option :key=\"1\" label=\"启用\" :value=\"1\"/>\r\n                <el-option :key=\"0\" label=\"禁用\" :value=\"0\"/>\r\n              </el-select>\r\n            </el-form-item>\r\n            <div class=\"print-plan-drawer-content-template\"\r\n                 v-for=\"(printTemplate, templateIdx) in createOrUpdateDrawerOption.form.print_template_list\">\r\n              <div class=\"unbinding-print-template-btn right\">\r\n                <el-button link type=\"danger\" @click=\"unbindingPrintTemplate(templateIdx)\" :icon=\"renderIcon('fa Trash')\">删除</el-button>\r\n              </div>\r\n              <el-form-item label=\"打印模板\" label-width=\"100px\">\r\n                <el-col :span=\"20\">\r\n                  <el-select v-model=\"printTemplate.print_template_id\" placeholder=\"请选择打印模板\" filterable clearable style=\"width: 100%;\">\r\n                    <el-option v-for=\"template in printTemplateList\"\r\n                               :label=\"template.print_template_name\"\r\n                               :key=\"template.print_template_id\"\r\n                               :value=\"template.print_template_id\"/>\r\n                  </el-select>\r\n                </el-col>\r\n                <el-col :span=\"4\">\r\n                  <el-button link type=\"primary\" @click=\"previewTemplateParam(templateIdx)\">参数预览</el-button>\r\n                </el-col>\r\n              </el-form-item>\r\n              <el-form-item label=\"打印终端\" label-width=\"100px\">\r\n                <el-radio-group v-model=\"printTemplate.print_mode\">\r\n                  <el-radio-button label=\"1\">发送至请求者</el-radio-button>\r\n                  <el-radio-button label=\"2\">发送至其它</el-radio-button>\r\n                  <el-radio-button label=\"3\">发送至队列</el-radio-button>\r\n                </el-radio-group>\r\n              </el-form-item>\r\n              <el-form-item v-for=\"(printCondition, conditionIdx) in printTemplate.print_condition_list\" label-width=\"0px\">\r\n                <el-row :gutter=\"25\">\r\n                  <el-col :span=\"10\" :offset=\"2\">\r\n                    <el-form-item label=\"条件\" label-width=\"50px\">\r\n                      <el-input v-model=\"printCondition.print_condition\" placeholder=\"请输入打印条件\"/>\r\n                    </el-form-item>\r\n                  </el-col>\r\n                  <el-col :span=\"10\">\r\n                    <el-form-item label=\"终端\" label-width=\"50px\">\r\n                      <el-select v-model=\"printCondition.print_terminal_id\" placeholder=\"请选择打印终端\" filterable clearable>\r\n                        <el-option v-for=\"printTerminal in printTerminalList\"\r\n                                   :label=\"printTerminal.print_terminal_name\"\r\n                                   :key=\"printTerminal.print_terminal_id\"\r\n                                   :value=\"printTerminal.print_terminal_id\"/>\r\n                      </el-select>\r\n                    </el-form-item>\r\n                  </el-col>\r\n                  <el-col :span=\"1\">\r\n                    <el-button link @click=\"removePrintCondition(templateIdx, conditionIdx)\" :icon=\"renderIcon('fa MinusCircle')\">移除条件</el-button>\r\n                  </el-col>\r\n                </el-row>\r\n              </el-form-item>\r\n              <div class=\"add-print-condition-btn right\">\r\n                <el-button link type=\"primary\" @click=\"addPrintCondition(templateIdx)\" :icon=\"renderIcon('fa PlusCircle')\">添加条件</el-button>\r\n              </div>\r\n            </div>\r\n            <div class=\"binding-print-template-btn\">\r\n              <el-button link type=\"primary\" plain @click=\"bindingPrintTemplate\" :icon=\"renderIcon('fa PlusSquare')\">\r\n                添加打印模板\r\n              </el-button>\r\n            </div>\r\n          </el-form>\r\n        </div>\r\n      </template>\r\n      <template #footer>\r\n        <div style=\"flex: auto\">\r\n          <el-button type=\"primary\" @click=\"createOrUpdatePrintPlan\" :icon=\"renderIcon('fa Check')\">提交</el-button>\r\n          <el-button @click=\"closeCreateOrUpdateDrawer\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n        </div>\r\n      </template>\r\n    </el-drawer>\r\n    <!-- create or update print plan drawer end -->\r\n\r\n    <!-- preview template param drawer start -->\r\n    <el-drawer\r\n        v-model=\"previewTemplateParamDrawerOption.visible\"\r\n        direction=\"rtl\"\r\n        size=\"30%\">\r\n      <template #header>\r\n        <h4>{{ previewTemplateParamDrawerOption.title }}</h4>\r\n      </template>\r\n      <template #default>\r\n        <div style=\"height: 100%;\">\r\n          <div>\r\n            <div>\r\n              <label>模板ID:</label>\r\n              <span>{{ previewTemplateParamDrawerOption.template.template_id }}</span>\r\n            </div>\r\n            <div>\r\n              <label>模板编码:</label>\r\n              <span>{{ previewTemplateParamDrawerOption.template.template_code }}</span>\r\n            </div>\r\n            <div>\r\n              <label>模板名称</label>\r\n              <span>{{ previewTemplateParamDrawerOption.template.template_name }}</span>\r\n            </div>\r\n          </div>\r\n          <div>\r\n            <span>模板参数</span>\r\n            <el-tree class=\"unselect\"\r\n                     :data=\"previewTemplateParamTreeOption.data\"\r\n                     :props=\"previewTemplateParamTreeOption.defaultProps\"\r\n                     default-expand-all>\r\n              <template #default=\"{ node, data }\">\r\n                <div class=\"custom-tree-node\">\r\n                  <div style=\"display: inline\">{{ data.field_label }}</div>\r\n                </div>\r\n              </template>\r\n            </el-tree>\r\n          </div>\r\n        </div>\r\n      </template>\r\n      <template #footer>\r\n        <div style=\"flex: auto\">\r\n          <el-button @click=\"closePreviewTemplateParamDrawer\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n        </div>\r\n      </template>\r\n    </el-drawer>\r\n    <!-- preview template param drawer end -->\r\n\r\n    <!-- test print dialog start -->\r\n    <el-dialog\r\n        v-model=\"testPrintDialogOption.visible\"\r\n        :title=\"testPrintDialogOption.title\"\r\n        width=\"40%\"\r\n        draggable\r\n    >\r\n      <div class=\"test-print-dialog-content\">\r\n        <el-input\r\n            v-model=\"testPrintDialogOption.query\"\r\n            placeholder=\"请输入JSON格式的打印测试参数\"\r\n            type=\"textarea\"\r\n            show-word-limit\r\n            :rows=\"20\"\r\n        />\r\n      </div>\r\n      <template #footer>\r\n      <span class=\"dialog-footer\">\r\n        <el-button type=\"primary\" @click=\"submitTestPrint\" :icon=\"renderIcon('fa Check')\" :loading=\"testPrintDialogOption.loading\">提交</el-button>\r\n        <el-button @click=\"closeTestPrintDialog\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n      </span>\r\n      </template>\r\n    </el-dialog>\r\n    <!-- test print dialog end -->\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {renderIcon} from '../../utils'\r\n\r\nexport default {\r\n  data() {\r\n\r\n    return {\r\n      whList: [],\r\n      projectList: [],\r\n      printTemplateList: [],\r\n      printTerminalList: [],\r\n      query: {\r\n        print_plan_code: '',\r\n        print_plan_name: '',\r\n        project_id: null,\r\n        wh_id: null,\r\n        is_enable: null\r\n      },\r\n      printPlanTableOption: {\r\n        loading: false,\r\n        rowData: [],\r\n      },\r\n      createOrUpdateDrawerOption: {\r\n        visible: false,\r\n        title: '新增打印场景',\r\n        form: {\r\n          print_plan_id: null,\r\n          print_plan_code: '',\r\n          print_plan_name: '',\r\n          wh_id: null,\r\n          project_id: null,\r\n          is_enable: 1,\r\n          print_template_list: [\r\n            // {\r\n            //   print_template_id: null,\r\n            //   print_mode: null,\r\n            //   print_condition_list: [{\r\n            //     print_condition: '',\r\n            //     print_terminal_id: null,\r\n            //   }]\r\n            // },\r\n          ],\r\n        }\r\n      },\r\n      previewTemplateParamDrawerOption: {\r\n        visible: false,\r\n        title: '参数预览',\r\n        template: {\r\n          template_id: null,\r\n          template_code: '',\r\n          template_name: ''\r\n        },\r\n      },\r\n      previewTemplateParamTreeOption: {\r\n        defaultProps: {\r\n          label: 'field_label'\r\n        },\r\n        data: [],\r\n      },\r\n      testPrintDialogOption: {\r\n        visible: false,\r\n        loading: false,\r\n        title: '测试打印参数',\r\n        query: '',\r\n        rowData: {}\r\n      }\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    this.loadWhList()\r\n    this.loadProjectList()\r\n    this.loadPrintPlanList()\r\n  },\r\n\r\n  methods: {\r\n    renderIcon,\r\n    loadWhList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@findWhList\", {}).then((res) => {\r\n        this.whList = res.data\r\n      })\r\n    },\r\n    loadProjectList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@findProjectList\", {}).then((res) => {\r\n        this.projectList = res.data\r\n      })\r\n    },\r\n    loadPrintPlanList() {\r\n      this.printPlanTableOption.loading = true\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintPlanList\", this.query).then((res) => {\r\n        this.printPlanTableOption.rowData = res.data\r\n      }).finally(() => {\r\n        this.printPlanTableOption.loading = false\r\n      })\r\n    },\r\n    loadPrintTemplateList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintTemplateList\", {}).then((res) => {\r\n        this.printTemplateList = res.data\r\n      })\r\n    },\r\n    loadPrintTerminalList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintTerminalList\", {}).then((res) => {\r\n        this.printTerminalList = res.data\r\n      })\r\n    },\r\n    findTemplateParamByTempLateId(templateId) {\r\n      if (!templateId) {\r\n        return;\r\n      }\r\n      const params = {print_template_id: templateId}\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintTemplateParamManager@getPrintTemplateParam\", params).then((res) => {\r\n        if (!res.success) {\r\n          system.showErrorDialog(\"加载模板参数异常\");\r\n          return;\r\n        }\r\n        const templateParams = res.data;\r\n        const treeNodes = [];\r\n        for (let templateParam of templateParams) {\r\n          const treeNode = {\r\n            ds_id: templateParam.print_template_param_id,\r\n            field_label: templateParam.param_name,\r\n            ds_name: templateParam.param_key,\r\n            ds_title: templateParam.param_name,\r\n            ds_type: templateParam.param_type,\r\n            is_collection: templateParam.result_type === 2\r\n          }\r\n          if (templateParam.param_type === 'SQL') {\r\n            treeNode.ds_sql = templateParam.param_value;\r\n          } else if (templateParam.param_type === 'JSON') {\r\n            treeNode.ds_json = templateParam.param_value;\r\n          }\r\n          treeNode.children = JSON.parse(templateParam.param_detail ?? '{}')\r\n          treeNodes.push(treeNode);\r\n        }\r\n        this.previewTemplateParamTreeOption.data = treeNodes;\r\n      })\r\n    },\r\n    whOnChange(value) {\r\n      this.loadProjectList(value)\r\n    },\r\n    searchPrintPlan() {\r\n      this.loadPrintPlanList();\r\n    },\r\n    createPrintPlan() {\r\n      this.createOrUpdateDrawerOption.form = {\r\n        print_plan_id: null,\r\n        print_plan_code: '',\r\n        print_plan_name: '',\r\n        wh_id: null,\r\n        is_enable: 1,\r\n        print_template_list: []\r\n      }\r\n      this.loadPrintTemplateList()\r\n      this.loadPrintTerminalList()\r\n      this.showCreateOrUpdateDrawer();\r\n    },\r\n    printPlanTableOnRowClick(row) {\r\n\r\n    },\r\n    whNameFieldFormatter(row, column, cellValue, index) {\r\n      return this.whList.find((wh) => wh.wh_id === row.wh_id)?.wh_name\r\n    },\r\n    projectNameFieldFormatter(row, column, cellValue, index) {\r\n      return this.projectList.find(project => project.project_id === row.project_id)?.project_name\r\n    },\r\n    isEnableFieldFormatter(row, column, cellValue, index) {\r\n      return cellValue === 0 ? '禁用' : '启用'\r\n    },\r\n    updatePrintPlan(row) {\r\n      this.createOrUpdateDrawerOption.title = '编辑打印场景'\r\n      _.extend(this.createOrUpdateDrawerOption.form, row)\r\n      const params = {print_plan_id: row.print_plan_id}\r\n      this.loadPrintTemplateList()\r\n      this.loadPrintTerminalList()\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintConditionByPlanId\", params).then((res) => {\r\n        this.createOrUpdateDrawerOption.form.print_template_list = res.data\r\n        this.showCreateOrUpdateDrawer()\r\n      })\r\n    },\r\n    enableOrDisablePrintPlan(row, isEnable) {\r\n      const operationName = isEnable === 1 ? '禁用' : '启用'\r\n      system.confirm(`确定${operationName} ${row.print_plan_name} 的打印场景吗?`).then(() => {\r\n        const params = {print_plan_id: row.print_plan_id, is_enable: isEnable === 0}\r\n        system.invokeServer(\"/com/galaxis/wms/print/PrintManager@enableOrDisablePrintPlan\", params).then((res) => {\r\n          system.showInfoDialog(res.msg)\r\n          if (res.success) {\r\n            this.loadPrintPlanList()\r\n          }\r\n        })\r\n      })\r\n    },\r\n    showCreateOrUpdateDrawer() {\r\n      this.createOrUpdateDrawerOption.visible = true;\r\n    },\r\n    closeCreateOrUpdateDrawer() {\r\n      this.createOrUpdateDrawerOption.visible = false;\r\n    },\r\n    showPreviewTemplateParamDrawer() {\r\n      this.previewTemplateParamDrawerOption.visible = true;\r\n    },\r\n    closePreviewTemplateParamDrawer() {\r\n      this.previewTemplateParamDrawerOption.visible = false;\r\n    },\r\n    addPrintCondition(templateIdx) {\r\n      const printConditionList = this.createOrUpdateDrawerOption.form.print_template_list[templateIdx].print_condition_list\r\n      printConditionList.push({})\r\n      _.extend(this.createOrUpdateDrawerOption.form.print_template_list[templateIdx], {print_condition_list: printConditionList})\r\n    },\r\n    removePrintCondition(templateIdx, conditionIdx) {\r\n      const printConditionList = this.createOrUpdateDrawerOption.form.print_template_list[templateIdx].print_condition_list\r\n      printConditionList.splice(conditionIdx, 1)\r\n      _.extend(this.createOrUpdateDrawerOption.form.print_template_list[templateIdx], {print_condition_list: printConditionList})\r\n    },\r\n    bindingPrintTemplate() {\r\n      this.createOrUpdateDrawerOption.form.print_template_list.push({print_condition_list: [{}]})\r\n    },\r\n    unbindingPrintTemplate(idx) {\r\n      const printTemplateList = this.createOrUpdateDrawerOption.form.print_template_list\r\n      printTemplateList.splice(idx, 1)\r\n      this.createOrUpdateDrawerOption.form.print_template_list = printTemplateList\r\n    },\r\n    previewTemplateParam(templateIdx) {\r\n      const templateId = this.createOrUpdateDrawerOption?.form?.print_template_list[templateIdx]?.print_template_id\r\n      if (!templateId) {\r\n        system.showErrorDialog(\"请先选择打印模板\");\r\n        return;\r\n      }\r\n      this.findTemplateParamByTempLateId(templateId);\r\n\r\n      const printTemplate = this.printTemplateList?.find(template => template.print_template_id === templateId)\r\n      this.previewTemplateParamDrawerOption.template.template_id = templateId\r\n      if (printTemplate) {\r\n        _.extend(this.previewTemplateParamDrawerOption.template, {\r\n          template_code: printTemplate.print_template_code,\r\n          template_name: printTemplate.print_template_name\r\n        })\r\n      }\r\n      this.showPreviewTemplateParamDrawer();\r\n    },\r\n    createOrUpdatePrintPlan() {\r\n      const params = this.createOrUpdateDrawerOption.form\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@createOrUpdatePrintPlan\", params).then((res) => {\r\n        system.showInfoDialog(res.msg)\r\n        if (res.success) {\r\n          this.loadPrintPlanList()\r\n          this.closeCreateOrUpdateDrawer()\r\n          return\r\n        }\r\n      })\r\n    },\r\n    showTestPrintDialog() {\r\n      this.testPrintDialogOption.visible = true\r\n    },\r\n    closeTestPrintDialog() {\r\n      this.testPrintDialogOption.visible = false\r\n    },\r\n    testPrint(row) {\r\n      this.testPrintDialogOption.query = ''\r\n      this.testPrintDialogOption.rowData = row\r\n      this.showTestPrintDialog()\r\n    },\r\n    test(row){\r\n      window['printTools'].showTemplateDialog(row.print_plan_code);\r\n    },\r\n    submitTestPrint() {\r\n      this.testPrintDialogOption.loading = true\r\n      window['printTools'].invokePrint(this.testPrintDialogOption.rowData.print_plan_code, this.testPrintDialogOption.query).finally(() => {\r\n        this.testPrintDialogOption.loading = false\r\n      })\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.print-plan {\r\n  .toolbar {\r\n    border-bottom: 1px solid #ccc\r\n  }\r\n\r\n  .print-plan-content {\r\n    flex: 1;\r\n    background: #efefef;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n\r\n    .print-plan-content-search {\r\n      background: #fff;\r\n      padding-top: 10px;\r\n      border-bottom: 1px solid #dbdada\r\n    }\r\n\r\n    .print-plan-content-table {\r\n      flex: 1;\r\n      margin: 10px;\r\n      overflow: hidden;\r\n      border: 1px solid #dbdada;\r\n\r\n      .el-table {\r\n        width: 100%;\r\n        height: 100%;\r\n\r\n        th.el-table__cell {\r\n          background: #f0f0f0;\r\n        }\r\n\r\n        .cell {\r\n          font-size: 14px;\r\n          color: #333\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  .print-plan-drawer-content {\r\n    width: 95%;\r\n\r\n    .print-plan-drawer-content-template {\r\n      display: flex;\r\n      flex-direction: column;\r\n      border: 1px dashed var(--main-color);\r\n      padding: 18px 10px 0 10px;\r\n      margin: 0 0 5px 30px;\r\n      border-radius: 5px;\r\n      background-color: var(--sub-header-color);\r\n\r\n      .right {\r\n        display: flex;\r\n        justify-content: flex-end;\r\n      }\r\n\r\n      .add-print-condition-btn {\r\n        margin: -10px 160px 10px 0;\r\n      }\r\n\r\n      .unbinding-print-template-btn {\r\n        margin-top: -16px\r\n      }\r\n    }\r\n\r\n    .binding-print-template-btn {\r\n      float: right;\r\n    }\r\n  }\r\n\r\n  .test-print-dialog-content {\r\n    width: 100%;\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"print-template-paper design\">\r\n    <div class=\"toolbar\">\r\n      <el-button link class=\"toolbar-btn\" @click=\"searchPrintTemplatePaper\" :icon=\"renderIcon('fa Search')\">\r\n        查询\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"createPrintTemplatePaper\" :icon=\"renderIcon('fa PlusSquare')\">\r\n        新建\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"batchDeletePrintTemplatePaper\" :icon=\"renderIcon('fa Trash')\">\r\n        批量删除\r\n      </el-button>\r\n    </div>\r\n    <div class=\"print-template-paper-content\">\r\n      <div class=\"print-template-paper-content-search\">\r\n        <el-form :inline=\"true\" :model=\"query\" class=\"\">\r\n          <el-form-item label=\"纸张名称\">\r\n            <el-input v-model=\"query.template_paper_name\" placeholder=\"请输入纸张名称\" clearable />\r\n          </el-form-item>\r\n        </el-form>\r\n      </div>\r\n      <div class=\"print-template-paper-content-table\">\r\n        <el-table\r\n            ref=\"printTemplatePaperTable\"\r\n            border\r\n            highlight-current-row\r\n            v-loading=\"printTemplatePaperTableOption.loading\"\r\n            :data=\"printTemplatePaperTableOption.rowData\">\r\n          <el-table-column type=\"selection\" width=\"40\"/>\r\n          <el-table-column prop=\"template_paper_id\" label=\"ID\" width=\"60\"/>\r\n          <el-table-column prop=\"template_paper_name\" label=\"纸张名称\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"paper_type\" label=\"纸张类型\" :formatter=\"paperTypeFieldFormatter\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"paper_width\" label=\"纸张宽度(mm)\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"paper_height\" label=\"纸张高度(mm)\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"wh_id\" label=\"所属仓库ID\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"wh_name\" label=\"所属仓库名称\" :formatter=\"whNameFieldFormatter\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"create_at\" label=\"创建时间\"/>\r\n          <el-table-column prop=\"create_by\" label=\"创建者\"/>\r\n          <el-table-column prop=\"update_at\" label=\"最后修改时间\"/>\r\n          <el-table-column prop=\"update_by\" label=\"最后修改者\"/>\r\n          <el-table-column fixed=\"right\" label=\"操作\" width=\"120\" header-align=\"center\">\r\n            <template #default=\"scope\">\r\n              <el-button link type=\"primary\" @click.prevent=\"updatePrintTemplatePaper(scope.row)\">编辑</el-button>\r\n              <el-button link type=\"primary\" @click.prevent=\"deletePrintTemplatePaper(scope.row)\">删除</el-button>\r\n            </template>\r\n          </el-table-column>\r\n        </el-table>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- create or update print plan drawer start -->\r\n    <el-drawer v-model=\"createOrUpdateDrawerOption.visible\"\r\n               direction=\"rtl\"\r\n               size=\"50%\">\r\n      <template #header>\r\n        <h4>{{ createOrUpdateDrawerOption.title }}</h4>\r\n      </template>\r\n      <template #default>\r\n        <div class=\"print-plan-drawer-content\">\r\n          <el-form :model=\"createOrUpdateDrawerOption.form\" label-width=\"120px\">\r\n            <el-form-item label=\"纸张名称\">\r\n              <el-input v-model=\"createOrUpdateDrawerOption.form.template_paper_name\" placeholder=\"请输入纸张名称\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"纸张类型\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.paper_type\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n                <el-option\r\n                    v-for=\"paperType in templatePaperTypeList\"\r\n                    :key=\"paperType.code\"\r\n                    :label=\"paperType.name\"\r\n                    :value=\"paperType.code\"\r\n                />\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"仓库名称\" v-if=\"createOrUpdateDrawerOption.form.paper_type !== getDefaultTemplatePaperType().code\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.wh_id\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n                <el-option\r\n                    v-for=\"item in whList\"\r\n                    :key=\"item.wh_id\"\r\n                    :label=\"item.wh_name\"\r\n                    :value=\"item.wh_id\"\r\n                />\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"纸张宽度(mm)\">\r\n              <el-input-number v-model=\"createOrUpdateDrawerOption.form.paper_width\" :precision=\"2\" :step=\"1\" :min=\"0.00\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"纸张高度(mm)\">\r\n              <el-input-number v-model=\"createOrUpdateDrawerOption.form.paper_height\" :precision=\"2\" :step=\"1\" :min=\"0.00\"/>\r\n            </el-form-item>\r\n          </el-form>\r\n        </div>\r\n      </template>\r\n      <template #footer>\r\n        <div style=\"flex: auto\">\r\n          <el-button type=\"primary\" @click=\"createOrUpdatePrintTemplatePaper\" :icon=\"renderIcon('fa Check')\">提交</el-button>\r\n          <el-button @click=\"closeCreateOrUpdateDrawer\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n        </div>\r\n      </template>\r\n    </el-drawer>\r\n    <!-- create or update print plan drawer end -->\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {renderIcon} from '../../utils'\r\n\r\nexport default {\r\n  data() {\r\n\r\n    const templatePaperTypeList = [\r\n      {code: 1, name: '通用模板纸张', isDefault: true},\r\n      {code: 2, name: '自定义模板纸张', isDefault: false}\r\n    ]\r\n\r\n    return {\r\n      whList: [],\r\n      templatePaperTypeList,\r\n      query: {\r\n        template_paper_name: '',\r\n      },\r\n      printTemplatePaperTableOption: {\r\n        loading: false,\r\n        rowData: [],\r\n      },\r\n      createOrUpdateDrawerOption: {\r\n        visible: false,\r\n        title: '新增打印模板纸张',\r\n        form: {\r\n          template_paper_id: null,\r\n          template_paper_name: '',\r\n          wh_id: null,\r\n          paper_width: 0.00,\r\n          paper_height: 0.00,\r\n          paper_type: templatePaperTypeList[0].code\r\n        }\r\n      },\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    this.loadPrintTemplatePaperList()\r\n    this.loadWhList()\r\n  },\r\n\r\n  methods: {\r\n    renderIcon,\r\n    loadWhList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@findWhList\", {}).then((res) => {\r\n        this.whList = res.data\r\n      })\r\n    },\r\n    loadPrintTemplatePaperList() {\r\n      this.printTemplatePaperTableOption.loading = true\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@queryPrintTemplatePaper\", this.query).then((res) => {\r\n        this.printTemplatePaperTableOption.rowData = res.data\r\n      }).finally(() => {\r\n        this.printTemplatePaperTableOption.loading = false\r\n      })\r\n    },\r\n    getDefaultTemplatePaperType() {\r\n      return this.templatePaperTypeList.find(paperType => paperType.isDefault === true)\r\n    },\r\n    searchPrintTemplatePaper() {\r\n      this.loadPrintTemplatePaperList();\r\n    },\r\n    createPrintTemplatePaper() {\r\n      this.createOrUpdateDrawerOption.form = {\r\n        template_paper_name: '',\r\n        paper_type: this.getDefaultTemplatePaperType().code,\r\n        paper_width: 0.00,\r\n        paper_height: 0.00,\r\n      }\r\n      this.showCreateOrUpdateDrawer();\r\n    },\r\n    batchDeletePrintTemplatePaper() {\r\n      const printTemplatePaperList = this.$refs.printTemplatePaperTable.getSelectionRows();\r\n      if (printTemplatePaperList.length <= 0) {\r\n        system.showErrorDialog('请选择要删除的模板纸张')\r\n        return\r\n      }\r\n      this.doDeletePrintTemplatePaper(printTemplatePaperList.map(printTemplate => printTemplate.print_template_id))\r\n    },\r\n    whNameFieldFormatter(row, column, cellValue, index) {\r\n      const whList = this.whList\r\n      const distWhList = whList.filter((wh) => wh.wh_id === row.wh_id)\r\n      if (distWhList.length <= 0) {\r\n        return\r\n      }\r\n      return distWhList[0].wh_name\r\n    },\r\n    paperTypeFieldFormatter(row, column, cellValue, index) {\r\n      const templatePaperTypeList = this.templatePaperTypeList\r\n      const distPaperTypes = templatePaperTypeList.filter((paperType) => paperType.code === row.paper_type)\r\n      if (distPaperTypes.length <= 0) {\r\n        return\r\n      }\r\n      return distPaperTypes[0].name\r\n    },\r\n    updatePrintTemplatePaper(row) {\r\n      this.createOrUpdateDrawerOption.title = '编辑打印模板纸张'\r\n      _.extend(this.createOrUpdateDrawerOption.form, row)\r\n      this.showCreateOrUpdateDrawer()\r\n    },\r\n    deletePrintTemplatePaper(row) {\r\n      this.doDeletePrintTemplatePaper([row.template_paper_id])\r\n    },\r\n    doDeletePrintTemplatePaper(templatePaperIds) {\r\n      system.confirm(`确定删除该纸张吗?`).then(() => {\r\n        const params = {template_paper_ids: templatePaperIds}\r\n        system.invokeServer(\"/com/galaxis/wms/print/PrintManager@deletePrintTemplatePaper\", params).then((res) => {\r\n          system.showInfoDialog(res.msg)\r\n          if (res.success) {\r\n            this.loadPrintTemplatePaperList()\r\n          }\r\n        })\r\n      })\r\n    },\r\n    showCreateOrUpdateDrawer() {\r\n      this.createOrUpdateDrawerOption.visible = true;\r\n    },\r\n    closeCreateOrUpdateDrawer() {\r\n      this.createOrUpdateDrawerOption.visible = false;\r\n    },\r\n    createOrUpdatePrintTemplatePaper() {\r\n      const params = this.createOrUpdateDrawerOption.form\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@createOrUpdatePrintTemplatePaper\", params).then((res) => {\r\n        system.showInfoDialog(res.msg)\r\n        if (res.success) {\r\n          this.loadPrintTemplatePaperList()\r\n          this.closeCreateOrUpdateDrawer()\r\n          return\r\n        }\r\n      })\r\n    },\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.print-template-paper {\r\n  width: 100%;\r\n  height: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  .toolbar{\r\n    border-bottom:1px solid #ccc\r\n  }\r\n  .print-template-paper-content {\r\n    flex:1;\r\n    background: #efefef;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n    .print-template-paper-content-search {\r\n      padding-top: 10px;\r\n      background: #fff;\r\n      border-bottom:1px solid #dbdada\r\n    }\r\n    .print-template-paper-content-table {\r\n      width: 100%;\r\n      flex:1;\r\n      margin:10px;\r\n      border:1px solid #dbdada;\r\n      .el-table {\r\n        width: 100%;\r\n        height: 100%;\r\n        th.el-table__cell {\r\n          background: #f0f0f0;\r\n        }\r\n\r\n        .cell {\r\n          font-size: 14px;\r\n          color: #333\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  .print-template-paper-drawer-content {\r\n    width: 95%;\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"print-template-paper design\">\r\n    <div class=\"toolbar\">\r\n      <el-button link class=\"toolbar-btn\" @click=\"searchPrintTemplatePaper\" :icon=\"renderIcon('fa Search')\">\r\n        查询\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"createPrintTemplatePaper\" :icon=\"renderIcon('fa PlusSquare')\">\r\n        新建\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"batchDeletePrintTemplatePaper\" :icon=\"renderIcon('fa Trash')\">\r\n        批量删除\r\n      </el-button>\r\n    </div>\r\n    <div class=\"print-template-paper-content\">\r\n      <div class=\"print-template-paper-content-search\">\r\n        <el-form :inline=\"true\" :model=\"query\" class=\"\">\r\n          <el-form-item label=\"纸张名称\">\r\n            <el-input v-model=\"query.template_paper_name\" placeholder=\"请输入纸张名称\" clearable />\r\n          </el-form-item>\r\n        </el-form>\r\n      </div>\r\n      <div class=\"print-template-paper-content-table\">\r\n        <el-table\r\n            ref=\"printTemplatePaperTable\"\r\n            border\r\n            highlight-current-row\r\n            v-loading=\"printTemplatePaperTableOption.loading\"\r\n            :data=\"printTemplatePaperTableOption.rowData\">\r\n          <el-table-column type=\"selection\" width=\"40\"/>\r\n          <el-table-column prop=\"template_paper_id\" label=\"ID\" width=\"60\"/>\r\n          <el-table-column prop=\"template_paper_name\" label=\"纸张名称\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"paper_type\" label=\"纸张类型\" :formatter=\"paperTypeFieldFormatter\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"paper_width\" label=\"纸张宽度(mm)\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"paper_height\" label=\"纸张高度(mm)\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"wh_id\" label=\"所属仓库ID\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"wh_name\" label=\"所属仓库名称\" :formatter=\"whNameFieldFormatter\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"create_at\" label=\"创建时间\"/>\r\n          <el-table-column prop=\"create_by\" label=\"创建者\"/>\r\n          <el-table-column prop=\"update_at\" label=\"最后修改时间\"/>\r\n          <el-table-column prop=\"update_by\" label=\"最后修改者\"/>\r\n          <el-table-column fixed=\"right\" label=\"操作\" width=\"120\" header-align=\"center\">\r\n            <template #default=\"scope\">\r\n              <el-button link type=\"primary\" @click.prevent=\"updatePrintTemplatePaper(scope.row)\">编辑</el-button>\r\n              <el-button link type=\"primary\" @click.prevent=\"deletePrintTemplatePaper(scope.row)\">删除</el-button>\r\n            </template>\r\n          </el-table-column>\r\n        </el-table>\r\n      </div>\r\n    </div>\r\n\r\n    <!-- create or update print plan drawer start -->\r\n    <el-drawer v-model=\"createOrUpdateDrawerOption.visible\"\r\n               direction=\"rtl\"\r\n               size=\"50%\">\r\n      <template #header>\r\n        <h4>{{ createOrUpdateDrawerOption.title }}</h4>\r\n      </template>\r\n      <template #default>\r\n        <div class=\"print-plan-drawer-content\">\r\n          <el-form :model=\"createOrUpdateDrawerOption.form\" label-width=\"120px\">\r\n            <el-form-item label=\"纸张名称\">\r\n              <el-input v-model=\"createOrUpdateDrawerOption.form.template_paper_name\" placeholder=\"请输入纸张名称\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"纸张类型\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.paper_type\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n                <el-option\r\n                    v-for=\"paperType in templatePaperTypeList\"\r\n                    :key=\"paperType.code\"\r\n                    :label=\"paperType.name\"\r\n                    :value=\"paperType.code\"\r\n                />\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"仓库名称\" v-if=\"createOrUpdateDrawerOption.form.paper_type !== getDefaultTemplatePaperType().code\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.wh_id\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n                <el-option\r\n                    v-for=\"item in whList\"\r\n                    :key=\"item.wh_id\"\r\n                    :label=\"item.wh_name\"\r\n                    :value=\"item.wh_id\"\r\n                />\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"纸张宽度(mm)\">\r\n              <el-input-number v-model=\"createOrUpdateDrawerOption.form.paper_width\" :precision=\"2\" :step=\"1\" :min=\"0.00\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"纸张高度(mm)\">\r\n              <el-input-number v-model=\"createOrUpdateDrawerOption.form.paper_height\" :precision=\"2\" :step=\"1\" :min=\"0.00\"/>\r\n            </el-form-item>\r\n          </el-form>\r\n        </div>\r\n      </template>\r\n      <template #footer>\r\n        <div style=\"flex: auto\">\r\n          <el-button type=\"primary\" @click=\"createOrUpdatePrintTemplatePaper\" :icon=\"renderIcon('fa Check')\">提交</el-button>\r\n          <el-button @click=\"closeCreateOrUpdateDrawer\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n        </div>\r\n      </template>\r\n    </el-drawer>\r\n    <!-- create or update print plan drawer end -->\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {renderIcon} from '../../utils'\r\n\r\nexport default {\r\n  data() {\r\n\r\n    const templatePaperTypeList = [\r\n      {code: 1, name: '通用模板纸张', isDefault: true},\r\n      {code: 2, name: '自定义模板纸张', isDefault: false}\r\n    ]\r\n\r\n    return {\r\n      whList: [],\r\n      templatePaperTypeList,\r\n      query: {\r\n        template_paper_name: '',\r\n      },\r\n      printTemplatePaperTableOption: {\r\n        loading: false,\r\n        rowData: [],\r\n      },\r\n      createOrUpdateDrawerOption: {\r\n        visible: false,\r\n        title: '新增打印模板纸张',\r\n        form: {\r\n          template_paper_id: null,\r\n          template_paper_name: '',\r\n          wh_id: null,\r\n          paper_width: 0.00,\r\n          paper_height: 0.00,\r\n          paper_type: templatePaperTypeList[0].code\r\n        }\r\n      },\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    this.loadPrintTemplatePaperList()\r\n    this.loadWhList()\r\n  },\r\n\r\n  methods: {\r\n    renderIcon,\r\n    loadWhList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@findWhList\", {}).then((res) => {\r\n        this.whList = res.data\r\n      })\r\n    },\r\n    loadPrintTemplatePaperList() {\r\n      this.printTemplatePaperTableOption.loading = true\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@queryPrintTemplatePaper\", this.query).then((res) => {\r\n        this.printTemplatePaperTableOption.rowData = res.data\r\n      }).finally(() => {\r\n        this.printTemplatePaperTableOption.loading = false\r\n      })\r\n    },\r\n    getDefaultTemplatePaperType() {\r\n      return this.templatePaperTypeList.find(paperType => paperType.isDefault === true)\r\n    },\r\n    searchPrintTemplatePaper() {\r\n      this.loadPrintTemplatePaperList();\r\n    },\r\n    createPrintTemplatePaper() {\r\n      this.createOrUpdateDrawerOption.form = {\r\n        template_paper_name: '',\r\n        paper_type: this.getDefaultTemplatePaperType().code,\r\n        paper_width: 0.00,\r\n        paper_height: 0.00,\r\n      }\r\n      this.showCreateOrUpdateDrawer();\r\n    },\r\n    batchDeletePrintTemplatePaper() {\r\n      const printTemplatePaperList = this.$refs.printTemplatePaperTable.getSelectionRows();\r\n      if (printTemplatePaperList.length <= 0) {\r\n        system.showErrorDialog('请选择要删除的模板纸张')\r\n        return\r\n      }\r\n      this.doDeletePrintTemplatePaper(printTemplatePaperList.map(printTemplate => printTemplate.print_template_id))\r\n    },\r\n    whNameFieldFormatter(row, column, cellValue, index) {\r\n      const whList = this.whList\r\n      const distWhList = whList.filter((wh) => wh.wh_id === row.wh_id)\r\n      if (distWhList.length <= 0) {\r\n        return\r\n      }\r\n      return distWhList[0].wh_name\r\n    },\r\n    paperTypeFieldFormatter(row, column, cellValue, index) {\r\n      const templatePaperTypeList = this.templatePaperTypeList\r\n      const distPaperTypes = templatePaperTypeList.filter((paperType) => paperType.code === row.paper_type)\r\n      if (distPaperTypes.length <= 0) {\r\n        return\r\n      }\r\n      return distPaperTypes[0].name\r\n    },\r\n    updatePrintTemplatePaper(row) {\r\n      this.createOrUpdateDrawerOption.title = '编辑打印模板纸张'\r\n      _.extend(this.createOrUpdateDrawerOption.form, row)\r\n      this.showCreateOrUpdateDrawer()\r\n    },\r\n    deletePrintTemplatePaper(row) {\r\n      this.doDeletePrintTemplatePaper([row.template_paper_id])\r\n    },\r\n    doDeletePrintTemplatePaper(templatePaperIds) {\r\n      system.confirm(`确定删除该纸张吗?`).then(() => {\r\n        const params = {template_paper_ids: templatePaperIds}\r\n        system.invokeServer(\"/com/galaxis/wms/print/PrintManager@deletePrintTemplatePaper\", params).then((res) => {\r\n          system.showInfoDialog(res.msg)\r\n          if (res.success) {\r\n            this.loadPrintTemplatePaperList()\r\n          }\r\n        })\r\n      })\r\n    },\r\n    showCreateOrUpdateDrawer() {\r\n      this.createOrUpdateDrawerOption.visible = true;\r\n    },\r\n    closeCreateOrUpdateDrawer() {\r\n      this.createOrUpdateDrawerOption.visible = false;\r\n    },\r\n    createOrUpdatePrintTemplatePaper() {\r\n      const params = this.createOrUpdateDrawerOption.form\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@createOrUpdatePrintTemplatePaper\", params).then((res) => {\r\n        system.showInfoDialog(res.msg)\r\n        if (res.success) {\r\n          this.loadPrintTemplatePaperList()\r\n          this.closeCreateOrUpdateDrawer()\r\n          return\r\n        }\r\n      })\r\n    },\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.print-template-paper {\r\n  width: 100%;\r\n  height: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  .toolbar{\r\n    border-bottom:1px solid #ccc\r\n  }\r\n  .print-template-paper-content {\r\n    flex:1;\r\n    background: #efefef;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n    .print-template-paper-content-search {\r\n      padding-top: 10px;\r\n      background: #fff;\r\n      border-bottom:1px solid #dbdada\r\n    }\r\n    .print-template-paper-content-table {\r\n      width: 100%;\r\n      flex:1;\r\n      margin:10px;\r\n      border:1px solid #dbdada;\r\n      .el-table {\r\n        width: 100%;\r\n        height: 100%;\r\n        th.el-table__cell {\r\n          background: #f0f0f0;\r\n        }\r\n\r\n        .cell {\r\n          font-size: 14px;\r\n          color: #333\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  .print-template-paper-drawer-content {\r\n    width: 95%;\r\n  }\r\n}\r\n</style>","/* global document */\r\n/* global window */\r\nclass Element {\r\n  constructor(tag, className = '') {\r\n    if (typeof tag === 'string') {\r\n      this.el = document.createElement(tag);\r\n      this.el.className = className;\r\n    } else {\r\n      this.el = tag;\r\n    }\r\n    this.data = {};\r\n  }\r\n\r\n  data(key, value) {\r\n    if (value !== undefined) {\r\n      this.data[key] = value;\r\n      return this;\r\n    }\r\n    return this.data[key];\r\n  }\r\n\r\n  on(eventNames, handler) {\r\n    const [fen, ...oen] = eventNames.split('.');\r\n    let eventName = fen;\r\n    if (eventName === 'mousewheel' && /Firefox/i.test(window.navigator.userAgent)) {\r\n      eventName = 'DOMMouseScroll';\r\n    }\r\n    this.el.addEventListener(eventName, (evt) => {\r\n      handler(evt);\r\n      for (let i = 0; i < oen.length; i += 1) {\r\n        const k = oen[i];\r\n        if (k === 'left' && evt.button !== 0) {\r\n          return;\r\n        }\r\n        if (k === 'right' && evt.button !== 2) {\r\n          return;\r\n        }\r\n        if (k === 'stop') {\r\n          evt.stopPropagation();\r\n        }\r\n      }\r\n    });\r\n    return this;\r\n  }\r\n\r\n  offset(value) {\r\n    if (value !== undefined) {\r\n      Object.keys(value).forEach((k) => {\r\n        this.css(k, `${value[k]}px`);\r\n      });\r\n      return this;\r\n    }\r\n    const {\r\n      offsetTop, offsetLeft, offsetHeight, offsetWidth,\r\n    } = this.el;\r\n    return {\r\n      top: offsetTop,\r\n      left: offsetLeft,\r\n      height: offsetHeight,\r\n      width: offsetWidth,\r\n    };\r\n  }\r\n\r\n  scroll(v) {\r\n    const { el } = this;\r\n    if (v !== undefined) {\r\n      if (v.left !== undefined) {\r\n        el.scrollLeft = v.left;\r\n      }\r\n      if (v.top !== undefined) {\r\n        el.scrollTop = v.top;\r\n      }\r\n    }\r\n    return { left: el.scrollLeft, top: el.scrollTop };\r\n  }\r\n\r\n  box() {\r\n    return this.el.getBoundingClientRect();\r\n  }\r\n\r\n  parent() {\r\n    return new Element(this.el.parentNode);\r\n  }\r\n\r\n  children(...eles) {\r\n    if (arguments.length === 0) {\r\n      return this.el.childNodes;\r\n    }\r\n    eles.forEach(ele => this.child(ele));\r\n    return this;\r\n  }\r\n\r\n  removeChild(el) {\r\n    this.el.removeChild(el);\r\n  }\r\n\r\n  /*\r\n  first() {\r\n    return this.el.firstChild;\r\n  }\r\n\r\n  last() {\r\n    return this.el.lastChild;\r\n  }\r\n\r\n  remove(ele) {\r\n    return this.el.removeChild(ele);\r\n  }\r\n\r\n  prepend(ele) {\r\n    const { el } = this;\r\n    if (el.children.length > 0) {\r\n      el.insertBefore(ele, el.firstChild);\r\n    } else {\r\n      el.appendChild(ele);\r\n    }\r\n    return this;\r\n  }\r\n\r\n  prev() {\r\n    return this.el.previousSibling;\r\n  }\r\n\r\n  next() {\r\n    return this.el.nextSibling;\r\n  }\r\n  */\r\n\r\n  child(arg) {\r\n    let ele = arg;\r\n    if (typeof arg === 'string') {\r\n      ele = document.createTextNode(arg);\r\n    } else if (arg instanceof Element) {\r\n      ele = arg.el;\r\n    }\r\n    this.el.appendChild(ele);\r\n    return this;\r\n  }\r\n\r\n  contains(ele) {\r\n    return this.el.contains(ele);\r\n  }\r\n\r\n  className(v) {\r\n    if (v !== undefined) {\r\n      this.el.className = v;\r\n      return this;\r\n    }\r\n    return this.el.className;\r\n  }\r\n\r\n  addClass(name) {\r\n    this.el.classList.add(name);\r\n    return this;\r\n  }\r\n\r\n  hasClass(name) {\r\n    return this.el.classList.contains(name);\r\n  }\r\n\r\n  removeClass(name) {\r\n    this.el.classList.remove(name);\r\n    return this;\r\n  }\r\n\r\n  toggle(cls = 'active') {\r\n    return this.toggleClass(cls);\r\n  }\r\n\r\n  toggleClass(name) {\r\n    return this.el.classList.toggle(name);\r\n  }\r\n\r\n  active(flag = true, cls = 'active') {\r\n    if (flag) this.addClass(cls);\r\n    else this.removeClass(cls);\r\n    return this;\r\n  }\r\n\r\n  checked(flag = true) {\r\n    this.active(flag, 'checked');\r\n    return this;\r\n  }\r\n\r\n  disabled(flag = true) {\r\n    if (flag) this.addClass('disabled');\r\n    else this.removeClass('disabled');\r\n    return this;\r\n  }\r\n\r\n  // key, value\r\n  // key\r\n  // {k, v}...\r\n  attr(key, value) {\r\n    if (value !== undefined) {\r\n      this.el.setAttribute(key, value);\r\n    } else {\r\n      if (typeof key === 'string') {\r\n        return this.el.getAttribute(key);\r\n      }\r\n      Object.keys(key).forEach((k) => {\r\n        this.el.setAttribute(k, key[k]);\r\n      });\r\n    }\r\n    return this;\r\n  }\r\n\r\n  removeAttr(key) {\r\n    this.el.removeAttribute(key);\r\n    return this;\r\n  }\r\n\r\n  html(content) {\r\n    if (content !== undefined) {\r\n      this.el.innerHTML = content;\r\n      return this;\r\n    }\r\n    return this.el.innerHTML;\r\n  }\r\n\r\n  val(v) {\r\n    if (v !== undefined) {\r\n      this.el.value = v;\r\n      return this;\r\n    }\r\n    return this.el.value;\r\n  }\r\n\r\n  focus() {\r\n    this.el.focus();\r\n  }\r\n\r\n  cssRemoveKeys(...keys) {\r\n    keys.forEach(k => this.el.style.removeProperty(k));\r\n    return this;\r\n  }\r\n\r\n  // css( propertyName )\r\n  // css( propertyName, value )\r\n  // css( properties )\r\n  css(name, value) {\r\n    if (value === undefined && typeof name !== 'string') {\r\n      Object.keys(name).forEach((k) => {\r\n        this.el.style[k] = name[k];\r\n      });\r\n      return this;\r\n    }\r\n    if (value !== undefined) {\r\n      this.el.style[name] = value;\r\n      return this;\r\n    }\r\n    return this.el.style[name];\r\n  }\r\n\r\n  computedStyle() {\r\n    return window.getComputedStyle(this.el, null);\r\n  }\r\n\r\n  show() {\r\n    this.css('display', 'block');\r\n    return this;\r\n  }\r\n\r\n  hide() {\r\n    this.css('display', 'none');\r\n    return this;\r\n  }\r\n}\r\n\r\nconst h = (tag, className = '') => new Element(tag, className);\r\n\r\nexport {\r\n  Element,\r\n  h,\r\n};\r\n","import './_.prototypes';\r\n\r\nconst alphabets = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];\r\n\r\n/** index number 2 letters\r\n * @example stringAt(26) ==> 'AA'\r\n * @date 2019-10-10\r\n * @export\r\n * @param {number} index\r\n * @returns {string}\r\n */\r\nexport function stringAt(index) {\r\n  let str = '';\r\n  let cindex = index;\r\n  while (cindex >= alphabets.length) {\r\n    cindex /= alphabets.length;\r\n    cindex -= 1;\r\n    str += alphabets[parseInt(cindex, 10) % alphabets.length];\r\n  }\r\n  const last = index % alphabets.length;\r\n  str += alphabets[last];\r\n  return str;\r\n}\r\n\r\n/** translate letter in A1-tag to number\r\n * @date 2019-10-10\r\n * @export\r\n * @param {string} str \"AA\" in A1-tag \"AA1\"\r\n * @returns {number}\r\n */\r\nexport function indexAt(str) {\r\n  let ret = 0;\r\n  for(let i = 0; i !== str.length; ++i) ret = 26 * ret + str.charCodeAt(i) - 64;\r\n  return ret - 1;\r\n}\r\n\r\n\r\n// B10 => x,y\r\n/** translate A1-tag to XY-tag\r\n * @date 2019-10-10\r\n * @export\r\n * @param {tagA1} src\r\n * @returns {tagXY}\r\n */\r\nexport function expr2xy(src) {\r\n  let x = '';\r\n  let y = '';\r\n  for (let i = 0; i < src.length; i += 1) {\r\n    if (src.charAt(i) >= '0' && src.charAt(i) <= '9') {\r\n      y += src.charAt(i);\r\n    } else {\r\n      x += src.charAt(i);\r\n    }\r\n  }\r\n  return [indexAt(x), parseInt(y, 10) - 1];\r\n}\r\n\r\n/** translate XY-tag to A1-tag\r\n * @example x,y => B10\r\n * @date 2019-10-10\r\n * @export\r\n * @param {number} x\r\n * @param {number} y\r\n * @returns {tagA1}\r\n */\r\nexport function xy2expr(x, y) {\r\n  return `${stringAt(x)}${y + 1}`;\r\n}\r\n\r\n/** translate A1-tag src by (xn, yn)\r\n * @date 2019-10-10\r\n * @export\r\n * @param {tagA1} src\r\n * @param {number} xn\r\n * @param {number} yn\r\n * @returns {tagA1}\r\n */\r\nexport function expr2expr(src, xn, yn, condition = () => true) {\r\n  if (xn === 0 && yn === 0) return src;\r\n  const [x, y] = expr2xy(src);\r\n  if (!condition(x, y)) return src;\r\n  return xy2expr(x + xn, y + yn);\r\n}\r\n\r\nexport default {\r\n  stringAt,\r\n  indexAt,\r\n  expr2xy,\r\n  xy2expr,\r\n  expr2expr,\r\n};\r\n","import { xy2expr, expr2xy } from './alphabet';\r\n\r\nclass CellRange {\r\n  constructor(sri, sci, eri, eci, w = 0, h = 0) {\r\n    this.sri = sri;\r\n    this.sci = sci;\r\n    this.eri = eri;\r\n    this.eci = eci;\r\n    this.w = w;\r\n    this.h = h;\r\n  }\r\n\r\n  set(sri, sci, eri, eci) {\r\n    this.sri = sri;\r\n    this.sci = sci;\r\n    this.eri = eri;\r\n    this.eci = eci;\r\n  }\r\n\r\n  multiple() {\r\n    return this.eri - this.sri > 0 || this.eci - this.sci > 0;\r\n  }\r\n\r\n  // cell-index: ri, ci\r\n  // cell-ref: A10\r\n  includes(...args) {\r\n    let [ri, ci] = [0, 0];\r\n    if (args.length === 1) {\r\n      [ci, ri] = expr2xy(args[0]);\r\n    } else if (args.length === 2) {\r\n      [ri, ci] = args;\r\n    }\r\n    const {\r\n      sri, sci, eri, eci,\r\n    } = this;\r\n    return sri <= ri && ri <= eri && sci <= ci && ci <= eci;\r\n  }\r\n\r\n  each(cb, rowFilter = () => true) {\r\n    const {\r\n      sri, sci, eri, eci,\r\n    } = this;\r\n    for (let i = sri; i <= eri; i += 1) {\r\n      if (rowFilter(i)) {\r\n        for (let j = sci; j <= eci; j += 1) {\r\n          cb(i, j);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  contains(other) {\r\n    return this.sri <= other.sri\r\n      && this.sci <= other.sci\r\n      && this.eri >= other.eri\r\n      && this.eci >= other.eci;\r\n  }\r\n\r\n  // within\r\n  within(other) {\r\n    return this.sri >= other.sri\r\n      && this.sci >= other.sci\r\n      && this.eri <= other.eri\r\n      && this.eci <= other.eci;\r\n  }\r\n\r\n  // disjoint\r\n  disjoint(other) {\r\n    return this.sri > other.eri\r\n      || this.sci > other.eci\r\n      || other.sri > this.eri\r\n      || other.sci > this.eci;\r\n  }\r\n\r\n  // intersects\r\n  intersects(other) {\r\n    return this.sri <= other.eri\r\n      && this.sci <= other.eci\r\n      && other.sri <= this.eri\r\n      && other.sci <= this.eci;\r\n  }\r\n\r\n  // union\r\n  union(other) {\r\n    const {\r\n      sri, sci, eri, eci,\r\n    } = this;\r\n    return new CellRange(\r\n      other.sri < sri ? other.sri : sri,\r\n      other.sci < sci ? other.sci : sci,\r\n      other.eri > eri ? other.eri : eri,\r\n      other.eci > eci ? other.eci : eci,\r\n    );\r\n  }\r\n\r\n  // intersection\r\n  // intersection(other) {}\r\n\r\n  // Returns Array<CellRange> that represents that part of this that does not intersect with other\r\n  // difference\r\n  difference(other) {\r\n    const ret = [];\r\n    const addRet = (sri, sci, eri, eci) => {\r\n      ret.push(new CellRange(sri, sci, eri, eci));\r\n    };\r\n    const {\r\n      sri, sci, eri, eci,\r\n    } = this;\r\n    const dsr = other.sri - sri;\r\n    const dsc = other.sci - sci;\r\n    const der = eri - other.eri;\r\n    const dec = eci - other.eci;\r\n    if (dsr > 0) {\r\n      addRet(sri, sci, other.sri - 1, eci);\r\n      if (der > 0) {\r\n        addRet(other.eri + 1, sci, eri, eci);\r\n        if (dsc > 0) {\r\n          addRet(other.sri, sci, other.eri, other.sci - 1);\r\n        }\r\n        if (dec > 0) {\r\n          addRet(other.sri, other.eci + 1, other.eri, eci);\r\n        }\r\n      } else {\r\n        if (dsc > 0) {\r\n          addRet(other.sri, sci, eri, other.sci - 1);\r\n        }\r\n        if (dec > 0) {\r\n          addRet(other.sri, other.eci + 1, eri, eci);\r\n        }\r\n      }\r\n    } else if (der > 0) {\r\n      addRet(other.eri + 1, sci, eri, eci);\r\n      if (dsc > 0) {\r\n        addRet(sri, sci, other.eri, other.sci - 1);\r\n      }\r\n      if (dec > 0) {\r\n        addRet(sri, other.eci + 1, other.eri, eci);\r\n      }\r\n    }\r\n    if (dsc > 0) {\r\n      addRet(sri, sci, eri, other.sci - 1);\r\n      if (dec > 0) {\r\n        addRet(sri, other.eri + 1, eri, eci);\r\n        if (dsr > 0) {\r\n          addRet(sri, other.sci, other.sri - 1, other.eci);\r\n        }\r\n        if (der > 0) {\r\n          addRet(other.sri + 1, other.sci, eri, other.eci);\r\n        }\r\n      } else {\r\n        if (dsr > 0) {\r\n          addRet(sri, other.sci, other.sri - 1, eci);\r\n        }\r\n        if (der > 0) {\r\n          addRet(other.sri + 1, other.sci, eri, eci);\r\n        }\r\n      }\r\n    } else if (dec > 0) {\r\n      addRet(eri, other.eci + 1, eri, eci);\r\n      if (dsr > 0) {\r\n        addRet(sri, sci, other.sri - 1, other.eci);\r\n      }\r\n      if (der > 0) {\r\n        addRet(other.eri + 1, sci, eri, other.eci);\r\n      }\r\n    }\r\n    return ret;\r\n  }\r\n\r\n  size() {\r\n    return [\r\n      this.eri - this.sri + 1,\r\n      this.eci - this.sci + 1,\r\n    ];\r\n  }\r\n\r\n  toString() {\r\n    const {\r\n      sri, sci, eri, eci,\r\n    } = this;\r\n    let ref = xy2expr(sci, sri);\r\n    if (this.multiple()) {\r\n      ref = `${ref}:${xy2expr(eci, eri)}`;\r\n    }\r\n    return ref;\r\n  }\r\n\r\n  clone() {\r\n    const {\r\n      sri, sci, eri, eci, w, h,\r\n    } = this;\r\n    return new CellRange(sri, sci, eri, eci, w, h);\r\n  }\r\n\r\n  /*\r\n  toJSON() {\r\n    return this.toString();\r\n  }\r\n  */\r\n\r\n  equals(other) {\r\n    return this.eri === other.eri\r\n      && this.eci === other.eci\r\n      && this.sri === other.sri\r\n      && this.sci === other.sci;\r\n  }\r\n\r\n  static valueOf(ref) {\r\n    // B1:B8, B1 => 1 x 1 cell range\r\n    const refs = ref.split(':');\r\n    const [sci, sri] = expr2xy(refs[0]);\r\n    let [eri, eci] = [sri, sci];\r\n    if (refs.length > 1) {\r\n      [eci, eri] = expr2xy(refs[1]);\r\n    }\r\n    return new CellRange(sri, sci, eri, eci);\r\n  }\r\n}\r\n\r\nexport default CellRange;\r\n\r\nexport {\r\n  CellRange,\r\n};\r\n","import { CellRange } from './cell_range';\r\n\r\nexport default class Selector {\r\n  constructor() {\r\n    this.range = new CellRange(0, 0, 0, 0);\r\n    this.ri = 0;\r\n    this.ci = 0;\r\n  }\r\n\r\n  multiple() {\r\n    return this.range.multiple();\r\n  }\r\n\r\n  setIndexes(ri, ci) {\r\n    this.ri = ri;\r\n    this.ci = ci;\r\n  }\r\n\r\n  size() {\r\n    return this.range.size();\r\n  }\r\n}\r\n","export default class Scroll {\r\n  constructor() {\r\n    this.x = 0; // left\r\n    this.y = 0; // top\r\n    this.ri = 0; // cell row-index\r\n    this.ci = 0; // cell col-index\r\n  }\r\n}\r\n","// import helper from '../helper';\r\n\r\nexport default class History {\r\n  constructor() {\r\n    this.undoItems = [];\r\n    this.redoItems = [];\r\n  }\r\n\r\n  add(data) {\r\n    this.undoItems.push(JSON.stringify(data));\r\n    this.redoItems = [];\r\n  }\r\n\r\n  canUndo() {\r\n    return this.undoItems.length > 0;\r\n  }\r\n\r\n  canRedo() {\r\n    return this.redoItems.length > 0;\r\n  }\r\n\r\n  undo(currentd, cb) {\r\n    const { undoItems, redoItems } = this;\r\n    if (this.canUndo()) {\r\n      redoItems.push(JSON.stringify(currentd));\r\n      cb(JSON.parse(undoItems.pop()));\r\n    }\r\n  }\r\n\r\n  redo(currentd, cb) {\r\n    const { undoItems, redoItems } = this;\r\n    if (this.canRedo()) {\r\n      undoItems.push(JSON.stringify(currentd));\r\n      cb(JSON.parse(redoItems.pop()));\r\n    }\r\n  }\r\n}\r\n","export default class Clipboard {\r\n  constructor() {\r\n    this.range = null; // CellRange\r\n    this.state = 'clear';\r\n  }\r\n\r\n  copy(cellRange) {\r\n    this.range = cellRange;\r\n    this.state = 'copy';\r\n    return this;\r\n  }\r\n\r\n  cut(cellRange) {\r\n    this.range = cellRange;\r\n    this.state = 'cut';\r\n    return this;\r\n  }\r\n\r\n  isCopy() {\r\n    return this.state === 'copy';\r\n  }\r\n\r\n  isCut() {\r\n    return this.state === 'cut';\r\n  }\r\n\r\n  isClear() {\r\n    return this.state === 'clear';\r\n  }\r\n\r\n  clear() {\r\n    this.range = null;\r\n    this.state = 'clear';\r\n  }\r\n}\r\n","import { CellRange } from './cell_range';\r\n// operator: all|eq|neq|gt|gte|lt|lte|in|be\r\n// value:\r\n//   in => []\r\n//   be => [min, max]\r\nclass Filter {\r\n  constructor(ci, operator, value) {\r\n    this.ci = ci;\r\n    this.operator = operator;\r\n    this.value = value;\r\n  }\r\n\r\n  set(operator, value) {\r\n    this.operator = operator;\r\n    this.value = value;\r\n  }\r\n\r\n  includes(v) {\r\n    const { operator, value } = this;\r\n    if (operator === 'all') {\r\n      return true;\r\n    }\r\n    if (operator === 'in') {\r\n      return value.includes(v);\r\n    }\r\n    return false;\r\n  }\r\n\r\n  vlength() {\r\n    const { operator, value } = this;\r\n    if (operator === 'in') {\r\n      return value.length;\r\n    }\r\n    return 0;\r\n  }\r\n\r\n  getData() {\r\n    const { ci, operator, value } = this;\r\n    return { ci, operator, value };\r\n  }\r\n}\r\n\r\nclass Sort {\r\n  constructor(ci, order) {\r\n    this.ci = ci;\r\n    this.order = order;\r\n  }\r\n\r\n  asc() {\r\n    return this.order === 'asc';\r\n  }\r\n\r\n  desc() {\r\n    return this.order === 'desc';\r\n  }\r\n}\r\n\r\nexport default class AutoFilter {\r\n  constructor() {\r\n    this.ref = null;\r\n    this.filters = [];\r\n    this.sort = null;\r\n  }\r\n\r\n  setData({ ref, filters, sort }) {\r\n    if (ref != null) {\r\n      this.ref = ref;\r\n      this.filters = filters.map(it => new Filter(it.ci, it.operator, it.value));\r\n      if (sort) {\r\n        this.sort = new Sort(sort.ci, sort.order);\r\n      }\r\n    }\r\n  }\r\n\r\n  getData() {\r\n    if (this.active()) {\r\n      const { ref, filters, sort } = this;\r\n      return { ref, filters: filters.map(it => it.getData()), sort };\r\n    }\r\n    return {};\r\n  }\r\n\r\n  addFilter(ci, operator, value) {\r\n    const filter = this.getFilter(ci);\r\n    if (filter == null) {\r\n      this.filters.push(new Filter(ci, operator, value));\r\n    } else {\r\n      filter.set(operator, value);\r\n    }\r\n  }\r\n\r\n  setSort(ci, order) {\r\n    this.sort = order ? new Sort(ci, order) : null;\r\n  }\r\n\r\n  includes(ri, ci) {\r\n    if (this.active()) {\r\n      return this.hrange().includes(ri, ci);\r\n    }\r\n    return false;\r\n  }\r\n\r\n  getSort(ci) {\r\n    const { sort } = this;\r\n    if (sort && sort.ci === ci) {\r\n      return sort;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  getFilter(ci) {\r\n    const { filters } = this;\r\n    for (let i = 0; i < filters.length; i += 1) {\r\n      if (filters[i].ci === ci) {\r\n        return filters[i];\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  filteredRows(getCell) {\r\n    // const ary = [];\r\n    // let lastri = 0;\r\n    const rset = new Set();\r\n    const fset = new Set();\r\n    if (this.active()) {\r\n      const { sri, eri } = this.range();\r\n      const { filters } = this;\r\n      for (let ri = sri + 1; ri <= eri; ri += 1) {\r\n        for (let i = 0; i < filters.length; i += 1) {\r\n          const filter = filters[i];\r\n          const cell = getCell(ri, filter.ci);\r\n          const ctext = cell ? cell.text : '';\r\n          if (!filter.includes(ctext)) {\r\n            rset.add(ri);\r\n            break;\r\n          } else {\r\n            fset.add(ri);\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return { rset, fset };\r\n  }\r\n\r\n  items(ci, getCell) {\r\n    const m = {};\r\n    if (this.active()) {\r\n      const { sri, eri } = this.range();\r\n      for (let ri = sri + 1; ri <= eri; ri += 1) {\r\n        const cell = getCell(ri, ci);\r\n        if (cell !== null && !/^\\s*$/.test(cell.text)) {\r\n          const key = cell.text;\r\n          const cnt = (m[key] || 0) + 1;\r\n          m[key] = cnt;\r\n        } else {\r\n          m[''] = (m[''] || 0) + 1;\r\n        }\r\n      }\r\n    }\r\n    return m;\r\n  }\r\n\r\n  range() {\r\n    return CellRange.valueOf(this.ref);\r\n  }\r\n\r\n  hrange() {\r\n    const r = this.range();\r\n    r.eri = r.sri;\r\n    return r;\r\n  }\r\n\r\n  clear() {\r\n    this.ref = null;\r\n    this.filters = [];\r\n    this.sort = null;\r\n  }\r\n\r\n  active() {\r\n    return this.ref !== null;\r\n  }\r\n}\r\n","import { CellRange } from './cell_range';\r\n\r\nclass Merges {\r\n  constructor(d = []) {\r\n    this._ = d;\r\n  }\r\n\r\n  forEach(cb) {\r\n    this._.forEach(cb);\r\n  }\r\n\r\n  deleteWithin(cr) {\r\n    this._ = this._.filter(it => !it.within(cr));\r\n  }\r\n\r\n  getFirstIncludes(ri, ci) {\r\n    for (let i = 0; i < this._.length; i += 1) {\r\n      const it = this._[i];\r\n      if (it.includes(ri, ci)) {\r\n        return it;\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  filterIntersects(cellRange) {\r\n    return new Merges(this._.filter(it => it.intersects(cellRange)));\r\n  }\r\n\r\n  intersects(cellRange) {\r\n    for (let i = 0; i < this._.length; i += 1) {\r\n      const it = this._[i];\r\n      if (it.intersects(cellRange)) {\r\n        // console.log('intersects');\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  union(cellRange) {\r\n    let cr = cellRange;\r\n    this._.forEach((it) => {\r\n      if (it.intersects(cr)) {\r\n        cr = it.union(cr);\r\n      }\r\n    });\r\n    return cr;\r\n  }\r\n\r\n  add(cr) {\r\n    this.deleteWithin(cr);\r\n    this._.push(cr);\r\n  }\r\n\r\n  // type: row | column\r\n  shift(type, index, n, cbWithin) {\r\n    this._.forEach((cellRange) => {\r\n      const {\r\n        sri, sci, eri, eci,\r\n      } = cellRange;\r\n      const range = cellRange;\r\n      if (type === 'row') {\r\n        if (sri >= index) {\r\n          range.sri += n;\r\n          range.eri += n;\r\n        } else if (sri < index && index <= eri) {\r\n          range.eri += n;\r\n          cbWithin(sri, sci, n, 0);\r\n        }\r\n      } else if (type === 'column') {\r\n        if (sci >= index) {\r\n          range.sci += n;\r\n          range.eci += n;\r\n        } else if (sci < index && index <= eci) {\r\n          range.eci += n;\r\n          cbWithin(sri, sci, 0, n);\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  move(cellRange, rn, cn) {\r\n    this._.forEach((it1) => {\r\n      const it = it1;\r\n      if (it.within(cellRange)) {\r\n        it.eri += rn;\r\n        it.sri += rn;\r\n        it.sci += cn;\r\n        it.eci += cn;\r\n      }\r\n    });\r\n  }\r\n\r\n  setData(merges) {\r\n    this._ = merges.map(merge => CellRange.valueOf(merge));\r\n    return this;\r\n  }\r\n\r\n  getData() {\r\n    return this._.map(merge => merge.toString());\r\n  }\r\n}\r\n\r\nexport default {};\r\nexport {\r\n  Merges,\r\n};\r\n","/* eslint-disable no-param-reassign */\r\nfunction cloneDeep(obj) {\r\n  return JSON.parse(JSON.stringify(obj));\r\n}\r\n\r\nconst mergeDeep = (object = {}, ...sources) => {\r\n  sources.forEach((source) => {\r\n    Object.keys(source).forEach((key) => {\r\n      const v = source[key];\r\n      // console.log('k:', key, ', v:', source[key], typeof v, v instanceof Object);\r\n      if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {\r\n        object[key] = v;\r\n      } else if (typeof v !== 'function' && !Array.isArray(v) && v instanceof Object) {\r\n        object[key] = object[key] || {};\r\n        mergeDeep(object[key], v);\r\n      } else {\r\n        object[key] = v;\r\n      }\r\n    });\r\n  });\r\n  // console.log('::', object);\r\n  return object;\r\n};\r\n\r\nfunction equals(obj1, obj2) {\r\n  const keys = Object.keys(obj1);\r\n  if (keys.length !== Object.keys(obj2).length) return false;\r\n  for (let i = 0; i < keys.length; i += 1) {\r\n    const k = keys[i];\r\n    const v1 = obj1[k];\r\n    const v2 = obj2[k];\r\n    if (v2 === undefined) return false;\r\n    if (typeof v1 === 'string' || typeof v1 === 'number' || typeof v1 === 'boolean') {\r\n      if (v1 !== v2) return false;\r\n    } else if (Array.isArray(v1)) {\r\n      if (v1.length !== v2.length) return false;\r\n      for (let ai = 0; ai < v1.length; ai += 1) {\r\n        if (!equals(v1[ai], v2[ai])) return false;\r\n      }\r\n    } else if (typeof v1 !== 'function' && !Array.isArray(v1) && v1 instanceof Object) {\r\n      if (!equals(v1, v2)) return false;\r\n    }\r\n  }\r\n  return true;\r\n}\r\n\r\n/*\r\n  objOrAry: obejct or Array\r\n  cb: (value, index | key) => { return value }\r\n*/\r\nconst sum = (objOrAry, cb = value => value) => {\r\n  let total = 0;\r\n  let size = 0;\r\n  Object.keys(objOrAry).forEach((key) => {\r\n    total += cb(objOrAry[key], key);\r\n    size += 1;\r\n  });\r\n  return [total, size];\r\n};\r\n\r\nfunction deleteProperty(obj, property) {\r\n  const oldv = obj[`${property}`];\r\n  delete obj[`${property}`];\r\n  return oldv;\r\n}\r\n\r\nfunction rangeReduceIf(min, max, inits, initv, ifv, getv) {\r\n  let s = inits;\r\n  let v = initv;\r\n  let i = min;\r\n  for (; i < max; i += 1) {\r\n    if (s > ifv) break;\r\n    v = getv(i);\r\n    s += v;\r\n  }\r\n  return [i, s - v, v];\r\n}\r\n\r\nfunction rangeSum(min, max, getv) {\r\n  let s = 0;\r\n  for (let i = min; i < max; i += 1) {\r\n    s += getv(i);\r\n  }\r\n  return s;\r\n}\r\n\r\nfunction rangeEach(min, max, cb) {\r\n  for (let i = min; i < max; i += 1) {\r\n    cb(i);\r\n  }\r\n}\r\n\r\nfunction arrayEquals(a1, a2) {\r\n  if (a1.length === a2.length) {\r\n    for (let i = 0; i < a1.length; i += 1) {\r\n      if (a1[i] !== a2[i]) return false;\r\n    }\r\n  } else return false;\r\n  return true;\r\n}\r\n\r\nfunction digits(a) {\r\n  const v = `${a}`;\r\n  let ret = 0;\r\n  let flag = false;\r\n  for (let i = 0; i < v.length; i += 1) {\r\n    if (flag === true) ret += 1;\r\n    if (v.charAt(i) === '.') flag = true;\r\n  }\r\n  return ret;\r\n}\r\n\r\nexport function numberCalc(type, a1, a2) {\r\n  if (Number.isNaN(a1) || Number.isNaN(a2)) {\r\n    return a1 + type + a2;\r\n  }\r\n  const al1 = digits(a1);\r\n  const al2 = digits(a2);\r\n  const num1 = Number(a1);\r\n  const num2 = Number(a2);\r\n  let ret = 0;\r\n  if (type === '-') {\r\n    ret = num1 - num2;\r\n  } else if (type === '+') {\r\n    ret = num1 + num2;\r\n  } else if (type === '*') {\r\n    ret = num1 * num2;\r\n  } else if (type === '/') {\r\n    ret = num1 / num2;\r\n    if (digits(ret) > 5) return ret.toFixed(2);\r\n    return ret;\r\n  }\r\n  return ret.toFixed(Math.max(al1, al2));\r\n}\r\n\r\nexport default {\r\n  cloneDeep,\r\n  merge: (...sources) => mergeDeep({}, ...sources),\r\n  equals,\r\n  arrayEquals,\r\n  sum,\r\n  rangeEach,\r\n  rangeSum,\r\n  rangeReduceIf,\r\n  deleteProperty,\r\n  numberCalc,\r\n};\r\n","import helper from './helper';\r\nimport { expr2expr } from './alphabet';\r\n\r\nclass Rows {\r\n  constructor({ len, height }) {\r\n    this._ = {};\r\n    this.len = len;\r\n    // default row height\r\n    this.height = height;\r\n  }\r\n\r\n  getHeight(ri) {\r\n    if (this.isHide(ri)) return 0;\r\n    const row = this.get(ri);\r\n    if (row && row.height) {\r\n      return row.height;\r\n    }\r\n    return this.height;\r\n  }\r\n\r\n  setHeight(ri, v) {\r\n    const row = this.getOrNew(ri);\r\n    row.height = v;\r\n  }\r\n\r\n  unhide(idx) {\r\n    let index = idx;\r\n    while (index > 0) {\r\n      index -= 1;\r\n      if (this.isHide(index)) {\r\n        this.setHide(index, false);\r\n      } else break;\r\n    }\r\n  }\r\n\r\n  isHide(ri) {\r\n    const row = this.get(ri);\r\n    return row && row.hide;\r\n  }\r\n\r\n  setHide(ri, v) {\r\n    const row = this.getOrNew(ri);\r\n    if (v === true) row.hide = true;\r\n    else delete row.hide;\r\n  }\r\n\r\n  setStyle(ri, style) {\r\n    const row = this.getOrNew(ri);\r\n    row.style = style;\r\n  }\r\n\r\n  sumHeight(min, max, exceptSet) {\r\n    return helper.rangeSum(min, max, (i) => {\r\n      if (exceptSet && exceptSet.has(i)) return 0;\r\n      return this.getHeight(i);\r\n    });\r\n  }\r\n\r\n  totalHeight() {\r\n    return this.sumHeight(0, this.len);\r\n  }\r\n\r\n  get(ri) {\r\n    return this._[ri];\r\n  }\r\n\r\n  getOrNew(ri) {\r\n    this._[ri] = this._[ri] || { cells: {} };\r\n    return this._[ri];\r\n  }\r\n\r\n  getCell(ri, ci) {\r\n    const row = this.get(ri);\r\n    if (row !== undefined && row.cells !== undefined && row.cells[ci] !== undefined) {\r\n      return row.cells[ci];\r\n    }\r\n    return null;\r\n  }\r\n\r\n  getCellMerge(ri, ci) {\r\n    const cell = this.getCell(ri, ci);\r\n    if (cell && cell.merge) return cell.merge;\r\n    return [0, 0];\r\n  }\r\n\r\n  getCellOrNew(ri, ci) {\r\n    const row = this.getOrNew(ri);\r\n    row.cells[ci] = row.cells[ci] || {};\r\n    return row.cells[ci];\r\n  }\r\n\r\n  // what: all | text | format\r\n  setCell(ri, ci, cell, what = 'all') {\r\n    const row = this.getOrNew(ri);\r\n    if (what === 'all') {\r\n      row.cells[ci] = cell;\r\n    } else if (what === 'text') {\r\n      row.cells[ci] = row.cells[ci] || {};\r\n      row.cells[ci].text = cell.text;\r\n    } else if (what === 'format') {\r\n      row.cells[ci] = row.cells[ci] || {};\r\n      row.cells[ci].style = cell.style;\r\n      if (cell.merge) row.cells[ci].merge = cell.merge;\r\n    }\r\n  }\r\n\r\n  setCellText(ri, ci, text) {\r\n    const cell = this.getCellOrNew(ri, ci);\r\n    if (cell.editable !== false) cell.text = text;\r\n  }\r\n\r\n  // what: all | format | text\r\n  copyPaste(srcCellRange, dstCellRange, what, autofill = false, cb = () => {}) {\r\n    const {\r\n      sri, sci, eri, eci,\r\n    } = srcCellRange;\r\n    const dsri = dstCellRange.sri;\r\n    const dsci = dstCellRange.sci;\r\n    const deri = dstCellRange.eri;\r\n    const deci = dstCellRange.eci;\r\n    const [rn, cn] = srcCellRange.size();\r\n    const [drn, dcn] = dstCellRange.size();\r\n    // console.log(srcIndexes, dstIndexes);\r\n    let isAdd = true;\r\n    let dn = 0;\r\n    if (deri < sri || deci < sci) {\r\n      isAdd = false;\r\n      if (deri < sri) dn = drn;\r\n      else dn = dcn;\r\n    }\r\n    for (let i = sri; i <= eri; i += 1) {\r\n      if (this._[i]) {\r\n        for (let j = sci; j <= eci; j += 1) {\r\n          if (this._[i].cells && this._[i].cells[j]) {\r\n            for (let ii = dsri; ii <= deri; ii += rn) {\r\n              for (let jj = dsci; jj <= deci; jj += cn) {\r\n                const nri = ii + (i - sri);\r\n                const nci = jj + (j - sci);\r\n                const ncell = helper.cloneDeep(this._[i].cells[j]);\r\n                // ncell.text\r\n                if (autofill && ncell && ncell.text && ncell.text.length > 0) {\r\n                  const { text } = ncell;\r\n                  let n = (jj - dsci) + (ii - dsri) + 2;\r\n                  if (!isAdd) {\r\n                    n -= dn + 1;\r\n                  }\r\n                  if (text[0] === '=') {\r\n                    ncell.text = text.replace(/[a-zA-Z]{1,3}\\d+/g, (word) => {\r\n                      let [xn, yn] = [0, 0];\r\n                      if (sri === dsri) {\r\n                        xn = n - 1;\r\n                        // if (isAdd) xn -= 1;\r\n                      } else {\r\n                        yn = n - 1;\r\n                      }\r\n                      if (/^\\d+$/.test(word)) return word;\r\n                      return expr2expr(word, xn, yn);\r\n                    });\r\n                  } else if ((rn <= 1 && cn > 1 && (dsri > eri || deri < sri))\r\n                    || (cn <= 1 && rn > 1 && (dsci > eci || deci < sci))\r\n                    || (rn <= 1 && cn <= 1)) {\r\n                    const result = /[\\\\.\\d]+$/.exec(text);\r\n                    // console.log('result:', result);\r\n                    if (result !== null) {\r\n                      const index = Number(result[0]) + n - 1;\r\n                      ncell.text = text.substring(0, result.index) + index;\r\n                    }\r\n                  }\r\n                }\r\n                this.setCell(nri, nci, ncell, what);\r\n                cb(nri, nci, ncell);\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  cutPaste(srcCellRange, dstCellRange) {\r\n    const ncellmm = {};\r\n    this.each((ri) => {\r\n      this.eachCells(ri, (ci) => {\r\n        let nri = parseInt(ri, 10);\r\n        let nci = parseInt(ci, 10);\r\n        if (srcCellRange.includes(ri, ci)) {\r\n          nri = dstCellRange.sri + (nri - srcCellRange.sri);\r\n          nci = dstCellRange.sci + (nci - srcCellRange.sci);\r\n        }\r\n        ncellmm[nri] = ncellmm[nri] || { cells: {} };\r\n        ncellmm[nri].cells[nci] = this._[ri].cells[ci];\r\n      });\r\n    });\r\n    this._ = ncellmm;\r\n  }\r\n\r\n  // src: Array<Array<String>>\r\n  paste(src, dstCellRange) {\r\n    if (src.length <= 0) return;\r\n    const { sri, sci } = dstCellRange;\r\n    src.forEach((row, i) => {\r\n      const ri = sri + i;\r\n      row.forEach((cell, j) => {\r\n        const ci = sci + j;\r\n        this.setCellText(ri, ci, cell);\r\n      });\r\n    });\r\n  }\r\n\r\n  insert(sri, n = 1) {\r\n    const ndata = {};\r\n    this.each((ri, row) => {\r\n      let nri = parseInt(ri, 10);\r\n      if (nri >= sri) {\r\n        nri += n;\r\n        this.eachCells(ri, (ci, cell) => {\r\n          if (cell.text && cell.text[0] === '=') {\r\n            cell.text = cell.text.replace(/[a-zA-Z]{1,3}\\d+/g, word => expr2expr(word, 0, n, (x, y) => y >= sri));\r\n          }\r\n        });\r\n      }\r\n      ndata[nri] = row;\r\n    });\r\n    this._ = ndata;\r\n    this.len += n;\r\n  }\r\n\r\n  delete(sri, eri) {\r\n    const n = eri - sri + 1;\r\n    const ndata = {};\r\n    this.each((ri, row) => {\r\n      const nri = parseInt(ri, 10);\r\n      if (nri < sri) {\r\n        ndata[nri] = row;\r\n      } else if (ri > eri) {\r\n        ndata[nri - n] = row;\r\n        this.eachCells(ri, (ci, cell) => {\r\n          if (cell.text && cell.text[0] === '=') {\r\n            cell.text = cell.text.replace(/[a-zA-Z]{1,3}\\d+/g, word => expr2expr(word, 0, -n, (x, y) => y > eri));\r\n          }\r\n        });\r\n      }\r\n    });\r\n    this._ = ndata;\r\n    this.len -= n;\r\n  }\r\n\r\n  insertColumn(sci, n = 1) {\r\n    this.each((ri, row) => {\r\n      const rndata = {};\r\n      this.eachCells(ri, (ci, cell) => {\r\n        let nci = parseInt(ci, 10);\r\n        if (nci >= sci) {\r\n          nci += n;\r\n          if (cell.text && cell.text[0] === '=') {\r\n            cell.text = cell.text.replace(/[a-zA-Z]{1,3}\\d+/g, word => expr2expr(word, n, 0, x => x >= sci));\r\n          }\r\n        }\r\n        rndata[nci] = cell;\r\n      });\r\n      row.cells = rndata;\r\n    });\r\n  }\r\n\r\n  deleteColumn(sci, eci) {\r\n    const n = eci - sci + 1;\r\n    this.each((ri, row) => {\r\n      const rndata = {};\r\n      this.eachCells(ri, (ci, cell) => {\r\n        const nci = parseInt(ci, 10);\r\n        if (nci < sci) {\r\n          rndata[nci] = cell;\r\n        } else if (nci > eci) {\r\n          rndata[nci - n] = cell;\r\n          if (cell.text && cell.text[0] === '=') {\r\n            cell.text = cell.text.replace(/[a-zA-Z]{1,3}\\d+/g, word => expr2expr(word, -n, 0, x => x > eci));\r\n          }\r\n        }\r\n      });\r\n      row.cells = rndata;\r\n    });\r\n  }\r\n\r\n  // what: all | text | format | merge\r\n  deleteCells(cellRange, what = 'all') {\r\n    cellRange.each((i, j) => {\r\n      this.deleteCell(i, j, what);\r\n    });\r\n  }\r\n\r\n  // what: all | text | format | merge\r\n  deleteCell(ri, ci, what = 'all') {\r\n    const row = this.get(ri);\r\n    if (row !== null) {\r\n      const cell = this.getCell(ri, ci);\r\n      if (cell !== null && cell.editable !== false) {\r\n        if (what === 'all') {\r\n          delete row.cells[ci];\r\n        } else if (what === 'text') {\r\n          if (cell.text) delete cell.text;\r\n          if (cell.value) delete cell.value;\r\n        } else if (what === 'format') {\r\n          if (cell.style !== undefined) delete cell.style;\r\n          if (cell.merge) delete cell.merge;\r\n        } else if (what === 'merge') {\r\n          if (cell.merge) delete cell.merge;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  maxCell() {\r\n    const keys = Object.keys(this._);\r\n    const ri = keys[keys.length - 1];\r\n    const col = this._[ri];\r\n    if (col) {\r\n      const { cells } = col;\r\n      const ks = Object.keys(cells);\r\n      const ci = ks[ks.length - 1];\r\n      return [parseInt(ri, 10), parseInt(ci, 10)];\r\n    }\r\n    return [0, 0];\r\n  }\r\n\r\n  each(cb) {\r\n    Object.entries(this._).forEach(([ri, row]) => {\r\n      cb(ri, row);\r\n    });\r\n  }\r\n\r\n  eachCells(ri, cb) {\r\n    if (this._[ri] && this._[ri].cells) {\r\n      Object.entries(this._[ri].cells).forEach(([ci, cell]) => {\r\n        cb(ci, cell);\r\n      });\r\n    }\r\n  }\r\n\r\n  setData(d) {\r\n    if (d.len) {\r\n      this.len = d.len;\r\n      delete d.len;\r\n    }\r\n    this._ = d;\r\n  }\r\n\r\n  getData() {\r\n    const { len } = this;\r\n    return Object.assign({ len }, this._);\r\n  }\r\n}\r\n\r\nexport default {};\r\nexport {\r\n  Rows,\r\n};\r\n","import helper from './helper';\r\n\r\nclass Cols {\r\n  constructor({\r\n    len, width, indexWidth, minWidth,\r\n  }) {\r\n    this._ = {};\r\n    this.len = len;\r\n    this.width = width;\r\n    this.indexWidth = indexWidth;\r\n    this.minWidth = minWidth;\r\n  }\r\n\r\n  setData(d) {\r\n    if (d.len) {\r\n      this.len = d.len;\r\n      delete d.len;\r\n    }\r\n    this._ = d;\r\n  }\r\n\r\n  getData() {\r\n    const { len } = this;\r\n    return Object.assign({ len }, this._);\r\n  }\r\n\r\n  getWidth(i) {\r\n    if (this.isHide(i)) return 0;\r\n    const col = this._[i];\r\n    if (col && col.width) {\r\n      return col.width;\r\n    }\r\n    return this.width;\r\n  }\r\n\r\n  getOrNew(ci) {\r\n    this._[ci] = this._[ci] || {};\r\n    return this._[ci];\r\n  }\r\n\r\n  setWidth(ci, width) {\r\n    const col = this.getOrNew(ci);\r\n    col.width = width;\r\n  }\r\n\r\n  unhide(idx) {\r\n    let index = idx;\r\n    while (index > 0) {\r\n      index -= 1;\r\n      if (this.isHide(index)) {\r\n        this.setHide(index, false);\r\n      } else break;\r\n    }\r\n  }\r\n\r\n  isHide(ci) {\r\n    const col = this._[ci];\r\n    return col && col.hide;\r\n  }\r\n\r\n  setHide(ci, v) {\r\n    const col = this.getOrNew(ci);\r\n    if (v === true) col.hide = true;\r\n    else delete col.hide;\r\n  }\r\n\r\n  setStyle(ci, style) {\r\n    const col = this.getOrNew(ci);\r\n    col.style = style;\r\n  }\r\n\r\n  sumWidth(min, max) {\r\n    return helper.rangeSum(min, max, i => this.getWidth(i));\r\n  }\r\n\r\n  totalWidth() {\r\n    return this.sumWidth(0, this.len);\r\n  }\r\n}\r\n\r\nexport default {};\r\nexport {\r\n  Cols,\r\n};\r\n","export default {\r\n  toolbar: {\r\n    undo: 'Undo',\r\n    redo: 'Redo',\r\n    print: 'Print',\r\n    paintformat: 'Paint format',\r\n    clearformat: 'Clear format',\r\n    format: 'Format',\r\n    fontName: 'Font',\r\n    fontSize: 'Font size',\r\n    fontBold: 'Font bold',\r\n    fontItalic: 'Font italic',\r\n    underline: 'Underline',\r\n    strike: 'Strike',\r\n    color: 'Text color',\r\n    bgcolor: 'Fill color',\r\n    border: 'Borders',\r\n    merge: 'Merge cells',\r\n    align: 'Horizontal align',\r\n    valign: 'Vertical align',\r\n    textwrap: 'Text wrapping',\r\n    freeze: 'Freeze cell',\r\n    autofilter: 'Filter',\r\n    formula: 'Functions',\r\n    more: 'More',\r\n  },\r\n  contextmenu: {\r\n    vv: 'vv',\r\n    copy: 'Copy',\r\n    cut: 'Cut',\r\n    paste: 'Paste',\r\n    pasteValue: 'Paste values only',\r\n    pasteFormat: 'Paste format only',\r\n    hide: 'Hide',\r\n    insertRow: 'Insert row',\r\n    insertColumn: 'Insert column',\r\n    deleteSheet: 'Delete',\r\n    deleteRow: 'Delete row',\r\n    deleteColumn: 'Delete column',\r\n    deleteCell: 'Delete cell',\r\n    deleteCellText: 'Delete cell text',\r\n    validation: 'Data validations',\r\n    cellprintable: 'Enable export',\r\n    cellnonprintable: 'Disable export',\r\n    celleditable: 'Enable editing',\r\n    cellnoneditable: 'Disable editing',\r\n  },\r\n  print: {\r\n    size: 'Paper size',\r\n    orientation: 'Page orientation',\r\n    orientations: ['Landscape', 'Portrait'],\r\n  },\r\n  format: {\r\n    normal: 'Normal',\r\n    text: 'Plain Text',\r\n    number: 'Number',\r\n    percent: 'Percent',\r\n    rmb: 'RMB',\r\n    usd: 'USD',\r\n    eur: 'EUR',\r\n    date: 'Date',\r\n    time: 'Time',\r\n    datetime: 'Date time',\r\n    duration: 'Duration',\r\n    barcode: 'barcode', //yvan\r\n    qrcode: 'qrcode',\r\n    image: 'image',\r\n  },\r\n  formula: {\r\n    sum: 'Sum',\r\n    average: 'Average',\r\n    max: 'Max',\r\n    min: 'Min',\r\n    _if: 'IF',\r\n    and: 'AND',\r\n    or: 'OR',\r\n    concat: 'Concat',\r\n  },\r\n  validation: {\r\n    required: 'it must be required',\r\n    notMatch: 'it not match its validation rule',\r\n    between: 'it is between {} and {}',\r\n    notBetween: 'it is not between {} and {}',\r\n    notIn: 'it is not in list',\r\n    equal: 'it equal to {}',\r\n    notEqual: 'it not equal to {}',\r\n    lessThan: 'it less than {}',\r\n    lessThanEqual: 'it less than or equal to {}',\r\n    greaterThan: 'it greater than {}',\r\n    greaterThanEqual: 'it greater than or equal to {}',\r\n  },\r\n  error: {\r\n    pasteForMergedCell: 'Unable to do this for merged cells',\r\n  },\r\n  calendar: {\r\n    weeks: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\r\n    months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\r\n  },\r\n  button: {\r\n    next: 'Next',\r\n    cancel: 'Cancel',\r\n    remove: 'Remove',\r\n    save: 'Save',\r\n    ok: 'OK',\r\n  },\r\n  sort: {\r\n    desc: 'Sort Z -> A',\r\n    asc: 'Sort A -> Z',\r\n  },\r\n  filter: {\r\n    empty: 'empty',\r\n  },\r\n  dataValidation: {\r\n    mode: 'Mode',\r\n    range: 'Cell Range',\r\n    criteria: 'Criteria',\r\n    modeType: {\r\n      cell: 'Cell',\r\n      column: 'Colun',\r\n      row: 'Row',\r\n    },\r\n    type: {\r\n      list: 'List',\r\n      number: 'Number',\r\n      date: 'Date',\r\n      phone: 'Phone',\r\n      email: 'Email',\r\n    },\r\n    operator: {\r\n      be: 'between',\r\n      nbe: 'not betwwen',\r\n      lt: 'less than',\r\n      lte: 'less than or equal to',\r\n      gt: 'greater than',\r\n      gte: 'greater than or equal to',\r\n      eq: 'equal to',\r\n      neq: 'not equal to',\r\n    },\r\n  },\r\n};\r\n","/* global window */\r\nimport en from './en';\r\n\r\n// Defines the fallback language as English\r\nlet $languages = ['en'];\r\nconst $messages = {\r\n  en,\r\n};\r\n\r\nfunction translate(key, messages) {\r\n  if (messages) {\r\n    // Return the translation from the first language in the languages array\r\n    // that has a value for the provided key.\r\n    for (const lang of $languages) {\r\n      if (!messages[lang]) break;\r\n\r\n      let message = messages[lang];\r\n\r\n      // Splits the key at '.' except where escaped as '\\.'\r\n      const keys = key.match(/(?:\\\\.|[^.])+/g);\r\n\r\n      for (let i = 0; i < keys.length; i += 1) {\r\n        const property = keys[i];\r\n        const value = message[property];\r\n\r\n        // If value doesn't exist, try next language\r\n        if (!value) break;\r\n\r\n        if (i === keys.length - 1) return value;\r\n\r\n        // Move down to the next level of the messages object\r\n        message = value;\r\n      }\r\n    }\r\n  }\r\n\r\n  return undefined;\r\n}\r\n\r\nfunction t(key) {\r\n  let v = translate(key, $messages);\r\n  if (!v && window && window.x_spreadsheet && window.x_spreadsheet.$messages) {\r\n    v = translate(key, window.x_spreadsheet.$messages);\r\n  }\r\n  return v || '';\r\n}\r\n\r\nfunction tf(key) {\r\n  return () => t(key);\r\n}\r\n\r\n// If clearLangList is set to false, lang will be added to the front of the\r\n// languages array. The languages in the language array are searched in order\r\n// to find a translation. This allows the use of other languages as a fallback\r\n// if lang is missing some keys. The language array is preloaded with English.\r\n// To set the languages array to only include lang, set clearLangList to true.\r\nfunction locale(lang, message, clearLangList = false) {\r\n  if (clearLangList) {\r\n    $languages = [lang];\r\n  } else {\r\n    // Append to front of array.\r\n    // Translation method will use the first language in the list that has a\r\n    // matching key.\r\n    $languages.unshift(lang);\r\n  }\r\n\r\n  if (message) {\r\n    $messages[lang] = message;\r\n  }\r\n}\r\n\r\nexport default {\r\n  t,\r\n};\r\n\r\nexport {\r\n  locale,\r\n  t,\r\n  tf,\r\n};\r\n","import { t } from '../locale/locale';\r\nimport helper from './helper';\r\n\r\nconst rules = {\r\n  phone: /^[1-9]\\d{10}$/,\r\n  email: /w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/,\r\n};\r\n\r\nfunction returnMessage(flag, key, ...arg) {\r\n  let message = '';\r\n  if (!flag) {\r\n    message = t(`validation.${key}`, ...arg);\r\n  }\r\n  return [flag, message];\r\n}\r\n\r\nexport default class Validator {\r\n  // operator: b|nb|eq|neq|lt|lte|gt|gte\r\n  // type: date|number|list|phone|email\r\n  constructor(type, required, value, operator) {\r\n    this.required = required;\r\n    this.value = value;\r\n    this.type = type;\r\n    this.operator = operator;\r\n    this.message = '';\r\n  }\r\n\r\n  parseValue(v) {\r\n    const { type } = this;\r\n    if (type === 'date') {\r\n      return new Date(v);\r\n    }\r\n    if (type === 'number') {\r\n      return Number(v);\r\n    }\r\n    return v;\r\n  }\r\n\r\n  equals(other) {\r\n    let flag = this.type === other.type\r\n      && this.required === other.required\r\n      && this.operator === other.operator;\r\n    if (flag) {\r\n      if (Array.isArray(this.value)) {\r\n        flag = helper.arrayEquals(this.value, other.value);\r\n      } else {\r\n        flag = this.value === other.value;\r\n      }\r\n    }\r\n    return flag;\r\n  }\r\n\r\n  values() {\r\n    return this.value.split(',');\r\n  }\r\n\r\n  validate(v) {\r\n    const {\r\n      required, operator, value, type,\r\n    } = this;\r\n    if (required && /^\\s*$/.test(v)) {\r\n      return returnMessage(false, 'required');\r\n    }\r\n    if (/^\\s*$/.test(v)) return [true];\r\n    if (rules[type] && !rules[type].test(v)) {\r\n      return returnMessage(false, 'notMatch');\r\n    }\r\n    if (type === 'list') {\r\n      return returnMessage(this.values().includes(v), 'notIn');\r\n    }\r\n    if (operator) {\r\n      const v1 = this.parseValue(v);\r\n      if (operator === 'be') {\r\n        const [min, max] = value;\r\n        return returnMessage(\r\n          v1 >= this.parseValue(min) && v1 <= this.parseValue(max),\r\n          'between',\r\n          min,\r\n          max,\r\n        );\r\n      }\r\n      if (operator === 'nbe') {\r\n        const [min, max] = value;\r\n        return returnMessage(\r\n          v1 < this.parseValue(min) || v1 > this.parseValue(max),\r\n          'notBetween',\r\n          min,\r\n          max,\r\n        );\r\n      }\r\n      if (operator === 'eq') {\r\n        return returnMessage(\r\n          v1 === this.parseValue(value),\r\n          'equal',\r\n          value,\r\n        );\r\n      }\r\n      if (operator === 'neq') {\r\n        return returnMessage(\r\n          v1 !== this.parseValue(value),\r\n          'notEqual',\r\n          value,\r\n        );\r\n      }\r\n      if (operator === 'lt') {\r\n        return returnMessage(\r\n          v1 < this.parseValue(value),\r\n          'lessThan',\r\n          value,\r\n        );\r\n      }\r\n      if (operator === 'lte') {\r\n        return returnMessage(\r\n          v1 <= this.parseValue(value),\r\n          'lessThanEqual',\r\n          value,\r\n        );\r\n      }\r\n      if (operator === 'gt') {\r\n        return returnMessage(\r\n          v1 > this.parseValue(value),\r\n          'greaterThan',\r\n          value,\r\n        );\r\n      }\r\n      if (operator === 'gte') {\r\n        return returnMessage(\r\n          v1 >= this.parseValue(value),\r\n          'greaterThanEqual',\r\n          value,\r\n        );\r\n      }\r\n    }\r\n    return [true];\r\n  }\r\n}\r\n","import Validator from './validator';\r\nimport { CellRange } from './cell_range';\r\n\r\nclass Validation {\r\n  constructor(mode, refs, validator) {\r\n    this.refs = refs;\r\n    this.mode = mode; // cell\r\n    this.validator = validator;\r\n  }\r\n\r\n  includes(ri, ci) {\r\n    const { refs } = this;\r\n    for (let i = 0; i < refs.length; i += 1) {\r\n      const cr = CellRange.valueOf(refs[i]);\r\n      if (cr.includes(ri, ci)) return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  addRef(ref) {\r\n    this.remove(CellRange.valueOf(ref));\r\n    this.refs.push(ref);\r\n  }\r\n\r\n  remove(cellRange) {\r\n    const nrefs = [];\r\n    this.refs.forEach((it) => {\r\n      const cr = CellRange.valueOf(it);\r\n      if (cr.intersects(cellRange)) {\r\n        const crs = cr.difference(cellRange);\r\n        crs.forEach(it1 => nrefs.push(it1.toString()));\r\n      } else {\r\n        nrefs.push(it);\r\n      }\r\n    });\r\n    this.refs = nrefs;\r\n  }\r\n\r\n  getData() {\r\n    const { refs, mode, validator } = this;\r\n    const {\r\n      type, required, operator, value,\r\n    } = validator;\r\n    return {\r\n      refs, mode, type, required, operator, value,\r\n    };\r\n  }\r\n\r\n  static valueOf({\r\n    refs, mode, type, required, operator, value,\r\n  }) {\r\n    return new Validation(mode, refs, new Validator(type, required, value, operator));\r\n  }\r\n}\r\nclass Validations {\r\n  constructor() {\r\n    this._ = [];\r\n    // ri_ci: errMessage\r\n    this.errors = new Map();\r\n  }\r\n\r\n  getError(ri, ci) {\r\n    return this.errors.get(`${ri}_${ci}`);\r\n  }\r\n\r\n  validate(ri, ci, text) {\r\n    const v = this.get(ri, ci);\r\n    const key = `${ri}_${ci}`;\r\n    const { errors } = this;\r\n    if (v !== null) {\r\n      const [flag, message] = v.validator.validate(text);\r\n      if (!flag) {\r\n        errors.set(key, message);\r\n      } else {\r\n        errors.delete(key);\r\n      }\r\n    } else {\r\n      errors.delete(key);\r\n    }\r\n    return true;\r\n  }\r\n\r\n  // type: date|number|phone|email|list\r\n  // validator: { required, value, operator }\r\n  add(mode, ref, {\r\n    type, required, value, operator,\r\n  }) {\r\n    const validator = new Validator(\r\n      type, required, value, operator,\r\n    );\r\n    const v = this.getByValidator(validator);\r\n    if (v !== null) {\r\n      v.addRef(ref);\r\n    } else {\r\n      this._.push(new Validation(mode, [ref], validator));\r\n    }\r\n  }\r\n\r\n  getByValidator(validator) {\r\n    for (let i = 0; i < this._.length; i += 1) {\r\n      const v = this._[i];\r\n      if (v.validator.equals(validator)) {\r\n        return v;\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  get(ri, ci) {\r\n    for (let i = 0; i < this._.length; i += 1) {\r\n      const v = this._[i];\r\n      if (v.includes(ri, ci)) return v;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  remove(cellRange) {\r\n    this.each((it) => {\r\n      it.remove(cellRange);\r\n    });\r\n  }\r\n\r\n  each(cb) {\r\n    this._.forEach(it => cb(it));\r\n  }\r\n\r\n  getData() {\r\n    return this._.filter(it => it.refs.length > 0).map(it => it.getData());\r\n  }\r\n\r\n  setData(d) {\r\n    this._ = d.map(it => Validation.valueOf(it));\r\n  }\r\n}\r\n\r\nexport default {};\r\nexport {\r\n  Validations,\r\n};\r\n","/* global document */\r\n\r\nimport Selector from './selector';\r\nimport Scroll from './scroll';\r\nimport History from './history';\r\nimport Clipboard from './clipboard';\r\nimport AutoFilter from './auto_filter';\r\nimport {Merges} from './merge';\r\nimport helper from './helper';\r\nimport {Rows} from './row';\r\nimport {Cols} from './col';\r\nimport {Validations} from './validation';\r\nimport {CellRange} from './cell_range';\r\nimport {expr2xy, xy2expr} from './alphabet';\r\nimport {t} from '../locale/locale';\r\n\r\n// private methods\r\n/*\r\n * {\r\n *  name: ''\r\n *  freeze: [0, 0],\r\n *  formats: [],\r\n *  styles: [\r\n *    {\r\n *      bgcolor: '',\r\n *      align: '',\r\n *      valign: '',\r\n *      textwrap: false,\r\n *      strike: false,\r\n *      underline: false,\r\n *      color: '',\r\n *      format: 1,\r\n *      border: {\r\n *        left: [style, color],\r\n *        right: [style, color],\r\n *        top: [style, color],\r\n *        bottom: [style, color],\r\n *      },\r\n *      font: {\r\n *        name: 'Helvetica',\r\n *        size: 10,\r\n *        bold: false,\r\n *        italic: false,\r\n *      }\r\n *    }\r\n *  ],\r\n *  merges: [\r\n *    'A1:F11',\r\n *    ...\r\n *  ],\r\n *  rows: {\r\n *    1: {\r\n *      height: 50,\r\n *      style: 1,\r\n *      cells: {\r\n *        1: {\r\n *          style: 2,\r\n *          type: 'string',\r\n *          text: '',\r\n *          value: '', // cal result\r\n *        }\r\n *      }\r\n *    },\r\n *    ...\r\n *  },\r\n *  cols: {\r\n *    2: { width: 100, style: 1 }\r\n *  }\r\n * }\r\n */\r\nconst defaultSettings = {\r\n    mode: 'edit', // edit | read\r\n    view: {\r\n        height: () => document.documentElement.clientHeight,\r\n        width: () => document.documentElement.clientWidth,\r\n    },\r\n    showGrid: true,\r\n    showToolbar: true,\r\n    showContextmenu: true,\r\n    showBottomBar: true,\r\n    row: {\r\n        len: 100,\r\n        height: 25,\r\n    },\r\n    col: {\r\n        len: 26,\r\n        width: 100,\r\n        indexWidth: 60,\r\n        minWidth: 60,\r\n    },\r\n    style: {\r\n        bgcolor: '#ffffff',\r\n        align: 'left',\r\n        valign: 'middle',\r\n        textwrap: false,\r\n        strike: false,\r\n        underline: false,\r\n        color: '#0a0a0a',\r\n        font: {\r\n            name: 'Arial',\r\n            size: 10,\r\n            bold: false,\r\n            italic: false,\r\n        },\r\n        format: 'normal',\r\n    },\r\n};\r\n\r\nconst toolbarHeight = 41;\r\nconst bottombarHeight = 41;\r\n\r\n// src: cellRange\r\n// dst: cellRange\r\nfunction canPaste(src, dst, error = () => {\r\n}) {\r\n    const {merges} = this;\r\n    const cellRange = dst.clone();\r\n    const [srn, scn] = src.size();\r\n    const [drn, dcn] = dst.size();\r\n    if (srn > drn) {\r\n        cellRange.eri = dst.sri + srn - 1;\r\n    }\r\n    if (scn > dcn) {\r\n        cellRange.eci = dst.sci + scn - 1;\r\n    }\r\n    if (merges.intersects(cellRange)) {\r\n        error(t('error.pasteForMergedCell'));\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\n\r\nfunction copyPaste(srcCellRange, dstCellRange, what, autofill = false) {\r\n    const {rows, merges} = this;\r\n    // delete dest merge\r\n    if (what === 'all' || what === 'format') {\r\n        rows.deleteCells(dstCellRange, what);\r\n        merges.deleteWithin(dstCellRange);\r\n    }\r\n    rows.copyPaste(srcCellRange, dstCellRange, what, autofill, (ri, ci, cell) => {\r\n        if (cell && cell.merge) {\r\n            // console.log('cell:', ri, ci, cell);\r\n            const [rn, cn] = cell.merge;\r\n            if (rn <= 0 && cn <= 0) return;\r\n            merges.add(new CellRange(ri, ci, ri + rn, ci + cn));\r\n        }\r\n    });\r\n}\r\n\r\nfunction cutPaste(srcCellRange, dstCellRange) {\r\n    const {clipboard, rows, merges} = this;\r\n    rows.cutPaste(srcCellRange, dstCellRange);\r\n    merges.move(srcCellRange,\r\n        dstCellRange.sri - srcCellRange.sri,\r\n        dstCellRange.sci - srcCellRange.sci);\r\n    clipboard.clear();\r\n}\r\n\r\n// bss: { top, bottom, left, right }\r\nfunction setStyleBorder(ri, ci, bss) {\r\n    const {styles, rows} = this;\r\n    const cell = rows.getCellOrNew(ri, ci);\r\n    let cstyle = {};\r\n    if (cell.style !== undefined) {\r\n        cstyle = helper.cloneDeep(styles[cell.style]);\r\n    }\r\n    cstyle = helper.merge(cstyle, {border: bss});\r\n    cell.style = this.addStyle(cstyle);\r\n}\r\n\r\nfunction setStyleBorders({mode, style, color}) {\r\n    const {styles, selector, rows} = this;\r\n    const {\r\n        sri, sci, eri, eci,\r\n    } = selector.range;\r\n    const multiple = !this.isSingleSelected();\r\n    if (!multiple) {\r\n        if (mode === 'inside' || mode === 'horizontal' || mode === 'vertical') {\r\n            return;\r\n        }\r\n    }\r\n    if (mode === 'outside' && !multiple) {\r\n        setStyleBorder.call(this, sri, sci, {\r\n            top: [style, color], bottom: [style, color], left: [style, color], right: [style, color],\r\n        });\r\n    } else if (mode === 'none') {\r\n        selector.range.each((ri, ci) => {\r\n            const cell = rows.getCell(ri, ci);\r\n            if (cell && cell.style !== undefined) {\r\n                const ns = helper.cloneDeep(styles[cell.style]);\r\n                delete ns.border;\r\n                // ['bottom', 'top', 'left', 'right'].forEach((prop) => {\r\n                //   if (ns[prop]) delete ns[prop];\r\n                // });\r\n                cell.style = this.addStyle(ns);\r\n            }\r\n        });\r\n    } else if (mode === 'all' || mode === 'inside' || mode === 'outside'\r\n        || mode === 'horizontal' || mode === 'vertical') {\r\n        const merges = [];\r\n        for (let ri = sri; ri <= eri; ri += 1) {\r\n            for (let ci = sci; ci <= eci; ci += 1) {\r\n                // jump merges -- start\r\n                const mergeIndexes = [];\r\n                for (let ii = 0; ii < merges.length; ii += 1) {\r\n                    const [mri, mci, rn, cn] = merges[ii];\r\n                    if (ri === mri + rn + 1) mergeIndexes.push(ii);\r\n                    if (mri <= ri && ri <= mri + rn) {\r\n                        if (ci === mci) {\r\n                            ci += cn + 1;\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n                mergeIndexes.forEach(it => merges.splice(it, 1));\r\n                if (ci > eci) break;\r\n                // jump merges -- end\r\n                const cell = rows.getCell(ri, ci);\r\n                let [rn, cn] = [0, 0];\r\n                if (cell && cell.merge) {\r\n                    [rn, cn] = cell.merge;\r\n                    merges.push([ri, ci, rn, cn]);\r\n                }\r\n                const mrl = rn > 0 && ri + rn === eri;\r\n                const mcl = cn > 0 && ci + cn === eci;\r\n                let bss = {};\r\n                if (mode === 'all') {\r\n                    bss = {\r\n                        bottom: [style, color],\r\n                        top: [style, color],\r\n                        left: [style, color],\r\n                        right: [style, color],\r\n                    };\r\n                } else if (mode === 'inside') {\r\n                    if (!mcl && ci < eci) bss.right = [style, color];\r\n                    if (!mrl && ri < eri) bss.bottom = [style, color];\r\n                } else if (mode === 'horizontal') {\r\n                    if (!mrl && ri < eri) bss.bottom = [style, color];\r\n                } else if (mode === 'vertical') {\r\n                    if (!mcl && ci < eci) bss.right = [style, color];\r\n                } else if (mode === 'outside' && multiple) {\r\n                    if (sri === ri) bss.top = [style, color];\r\n                    if (mrl || eri === ri) bss.bottom = [style, color];\r\n                    if (sci === ci) bss.left = [style, color];\r\n                    if (mcl || eci === ci) bss.right = [style, color];\r\n                }\r\n                if (Object.keys(bss).length > 0) {\r\n                    setStyleBorder.call(this, ri, ci, bss);\r\n                }\r\n                ci += cn;\r\n            }\r\n        }\r\n    } else if (mode === 'top' || mode === 'bottom') {\r\n        for (let ci = sci; ci <= eci; ci += 1) {\r\n            if (mode === 'top') {\r\n                setStyleBorder.call(this, sri, ci, {top: [style, color]});\r\n                ci += rows.getCellMerge(sri, ci)[1];\r\n            }\r\n            if (mode === 'bottom') {\r\n                setStyleBorder.call(this, eri, ci, {bottom: [style, color]});\r\n                ci += rows.getCellMerge(eri, ci)[1];\r\n            }\r\n        }\r\n    } else if (mode === 'left' || mode === 'right') {\r\n        for (let ri = sri; ri <= eri; ri += 1) {\r\n            if (mode === 'left') {\r\n                setStyleBorder.call(this, ri, sci, {left: [style, color]});\r\n                ri += rows.getCellMerge(ri, sci)[0];\r\n            }\r\n            if (mode === 'right') {\r\n                setStyleBorder.call(this, ri, eci, {right: [style, color]});\r\n                ri += rows.getCellMerge(ri, eci)[0];\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nfunction getCellRowByY(y, scrollOffsety) {\r\n    const {rows} = this;\r\n    const fsh = this.freezeTotalHeight();\r\n    // console.log('y:', y, ', fsh:', fsh);\r\n    let inits = rows.height;\r\n    if (fsh + rows.height < y) inits -= scrollOffsety;\r\n\r\n    // handle ri in autofilter\r\n    const frset = this.exceptRowSet;\r\n\r\n    let ri = 0;\r\n    let top = inits;\r\n    let {height} = rows;\r\n    for (; ri < rows.len; ri += 1) {\r\n        if (top > y) break;\r\n        if (!frset.has(ri)) {\r\n            height = rows.getHeight(ri);\r\n            top += height;\r\n        }\r\n    }\r\n    top -= height;\r\n    // console.log('ri:', ri, ', top:', top, ', height:', height);\r\n\r\n    if (top <= 0) {\r\n        return {ri: -1, top: 0, height};\r\n    }\r\n\r\n    return {ri: ri - 1, top, height};\r\n}\r\n\r\nfunction getCellColByX(x, scrollOffsetx) {\r\n    const {cols} = this;\r\n    const fsw = this.freezeTotalWidth();\r\n    let inits = cols.indexWidth;\r\n    if (fsw + cols.indexWidth < x) inits -= scrollOffsetx;\r\n    const [ci, left, width] = helper.rangeReduceIf(\r\n        0,\r\n        cols.len,\r\n        inits,\r\n        cols.indexWidth,\r\n        x,\r\n        i => cols.getWidth(i),\r\n    );\r\n    if (left <= 0) {\r\n        return {ci: -1, left: 0, width: cols.indexWidth};\r\n    }\r\n    return {ci: ci - 1, left, width};\r\n}\r\n\r\n/**\r\n * 获取连续的固定表头集合，例如\r\n * [2,3,4,7,8,9,10,13]\r\n * ->\r\n * [[2,4], [7,10], [13,13]]\r\n */\r\nfunction mergeHeaders(rowRange) {\r\n    if (!rowRange) {\r\n        return []\r\n    }\r\n    const result = []\r\n    rowRange.sort((a, b) => a - b)\r\n    let crange = []\r\n    let start = -1\r\n    for (let idx = 0; idx < rowRange.length; idx++) {\r\n        const ri = rowRange[idx]\r\n        if (start < 0) {\r\n            // 一段新的开始\r\n            crange = [ri]\r\n            start = ri\r\n        } else if (ri === start + 1) {\r\n            // 延续了老的一段\r\n            start++\r\n        } else {\r\n            // 没有延续，进行结尾\r\n            crange.push(start)\r\n            result.push(crange)\r\n            start = ri\r\n            crange = [ri]\r\n        }\r\n    }\r\n    if (typeof crange[0] !== 'undefined') {\r\n        // 老的一段结束\r\n        crange.push(start)\r\n        result.push(crange)\r\n    }\r\n    return result\r\n}\r\n\r\nexport default class DataProxy {\r\n    constructor(name, settings) {\r\n        this.settings = helper.merge(defaultSettings, settings || {});\r\n        // save data begin\r\n        this.name = name || 'sheet';\r\n        this.freeze = [0, 0];\r\n        this.styles = []; // Array<Style>\r\n        this.merges = new Merges(); // [CellRange, ...]\r\n        this.rows = new Rows(this.settings.row);\r\n        this.cols = new Cols(this.settings.col);\r\n        this.validations = new Validations();\r\n        this.hyperlinks = {};\r\n        this.comments = {};\r\n        // save data end\r\n\r\n        // don't save object\r\n        this.selector = new Selector();\r\n        this.scroll = new Scroll();\r\n        this.history = new History();\r\n        this.clipboard = new Clipboard();\r\n        this.autoFilter = new AutoFilter();\r\n        this.change = () => {\r\n        };\r\n        this.exceptRowSet = new Set();\r\n        this.sortedRowMap = new Map();\r\n        this.unsortedRowMap = new Map();\r\n    }\r\n\r\n    addValidation(mode, ref, validator) {\r\n        // console.log('mode:', mode, ', ref:', ref, ', validator:', validator);\r\n        this.changeData(() => {\r\n            this.validations.add(mode, ref, validator);\r\n        });\r\n    }\r\n\r\n    removeValidation() {\r\n        const {range} = this.selector;\r\n        this.changeData(() => {\r\n            this.validations.remove(range);\r\n        });\r\n    }\r\n\r\n    getSelectedValidator() {\r\n        const {ri, ci} = this.selector;\r\n        const v = this.validations.get(ri, ci);\r\n        return v ? v.validator : null;\r\n    }\r\n\r\n    getSelectedValidation() {\r\n        const {ri, ci, range} = this.selector;\r\n        const v = this.validations.get(ri, ci);\r\n        const ret = {ref: range.toString()};\r\n        if (v !== null) {\r\n            ret.mode = v.mode;\r\n            ret.validator = v.validator;\r\n        }\r\n        return ret;\r\n    }\r\n\r\n    canUndo() {\r\n        return this.history.canUndo();\r\n    }\r\n\r\n    canRedo() {\r\n        return this.history.canRedo();\r\n    }\r\n\r\n    undo() {\r\n        this.history.undo(this.getData(), (d) => {\r\n            this.setData(d);\r\n        });\r\n    }\r\n\r\n    redo() {\r\n        this.history.redo(this.getData(), (d) => {\r\n            this.setData(d);\r\n        });\r\n    }\r\n\r\n    copy() {\r\n        this.clipboard.copy(this.selector.range);\r\n    }\r\n\r\n    copyToSystemClipboard(evt) {\r\n        let copyText = [];\r\n        const {\r\n            sri, eri, sci, eci,\r\n        } = this.selector.range;\r\n\r\n        for (let ri = sri; ri <= eri; ri += 1) {\r\n            const row = [];\r\n            for (let ci = sci; ci <= eci; ci += 1) {\r\n                const cell = this.getCell(ri, ci);\r\n                row.push((cell && cell.text) || '');\r\n            }\r\n            copyText.push(row);\r\n        }\r\n\r\n        // Adding \\n and why not adding \\r\\n is to support online office and client MS office and WPS\r\n        copyText = copyText.map(row => row.join('\\t')).join('\\n');\r\n\r\n        // why used this\r\n        // cuz http protocol will be blocked request clipboard by browser\r\n        if (evt) {\r\n            evt.clipboardData.clearData();\r\n            evt.clipboardData.setData('text/plain', copyText);\r\n            evt.preventDefault();\r\n        }\r\n\r\n        // this need https protocol\r\n        /* global navigator */\r\n        if (navigator.clipboard) {\r\n            navigator.clipboard.writeText(copyText).then(() => {\r\n            }, (err) => {\r\n                console.log('text copy to the system clipboard error  ', copyText, err);\r\n            });\r\n        }\r\n    }\r\n\r\n    cut() {\r\n        this.clipboard.cut(this.selector.range);\r\n    }\r\n\r\n    // what: all | text | format\r\n    paste(what = 'all', error = () => {\r\n    }) {\r\n        // console.log('sIndexes:', sIndexes);\r\n        const {clipboard, selector} = this;\r\n        if (clipboard.isClear()) return false;\r\n        if (!canPaste.call(this, clipboard.range, selector.range, error)) return false;\r\n\r\n        this.changeData(() => {\r\n            if (clipboard.isCopy()) {\r\n                copyPaste.call(this, clipboard.range, selector.range, what);\r\n            } else if (clipboard.isCut()) {\r\n                cutPaste.call(this, clipboard.range, selector.range);\r\n            }\r\n        });\r\n        return true;\r\n    }\r\n\r\n    pasteFromSystemClipboard(resetSheet, eventTrigger) {\r\n        const {selector} = this;\r\n        navigator.clipboard.readText().then((content) => {\r\n            const contentToPaste = this.parseClipboardContent(content);\r\n            let startRow = selector.ri;\r\n            contentToPaste.forEach((row) => {\r\n                let startColumn = selector.ci;\r\n                row.forEach((cellContent) => {\r\n                    this.setCellText(startRow, startColumn, cellContent, 'input');\r\n                    startColumn += 1;\r\n                });\r\n                startRow += 1;\r\n            });\r\n            resetSheet();\r\n            eventTrigger(this.rows.getData());\r\n        });\r\n    }\r\n\r\n    parseClipboardContent(clipboardContent) {\r\n        const parsedData = [];\r\n\r\n        // first we need to figure out how many rows we need to paste\r\n        const rows = clipboardContent.split('\\n');\r\n\r\n        // for each row parse cell data\r\n        let i = 0;\r\n        rows.forEach((row) => {\r\n            parsedData[i] = row.split('\\t');\r\n            i += 1;\r\n        });\r\n        return parsedData;\r\n    }\r\n\r\n    pasteFromText(txt) {\r\n        let lines = [];\r\n\r\n        if (/\\r\\n/.test(txt)) lines = txt.split('\\r\\n').map(it => it.replace(/\"/g, '').split('\\t'));\r\n        else lines = txt.split('\\n').map(it => it.replace(/\"/g, '').split('\\t'));\r\n\r\n        if (lines.length) {\r\n            const {rows, selector} = this;\r\n\r\n            this.changeData(() => {\r\n                rows.paste(lines, selector.range);\r\n            });\r\n        }\r\n    }\r\n\r\n    autofill(cellRange, what, error = () => {\r\n    }) {\r\n        const srcRange = this.selector.range;\r\n        if (!canPaste.call(this, srcRange, cellRange, error)) return false;\r\n        this.changeData(() => {\r\n            copyPaste.call(this, srcRange, cellRange, what, true);\r\n        });\r\n        return true;\r\n    }\r\n\r\n    clearClipboard() {\r\n        this.clipboard.clear();\r\n    }\r\n\r\n    calSelectedRangeByEnd(ri, ci) {\r\n        const {\r\n            selector, rows, cols, merges,\r\n        } = this;\r\n        let {\r\n            sri, sci, eri, eci,\r\n        } = selector.range;\r\n        const cri = selector.ri;\r\n        const cci = selector.ci;\r\n        let [nri, nci] = [ri, ci];\r\n        if (ri < 0) nri = rows.len - 1;\r\n        if (ci < 0) nci = cols.len - 1;\r\n        if (nri > cri) [sri, eri] = [cri, nri];\r\n        else [sri, eri] = [nri, cri];\r\n        if (nci > cci) [sci, eci] = [cci, nci];\r\n        else [sci, eci] = [nci, cci];\r\n        selector.range = merges.union(new CellRange(\r\n            sri, sci, eri, eci,\r\n        ));\r\n        selector.range = merges.union(selector.range);\r\n        // console.log('selector.range:', selector.range);\r\n        return selector.range;\r\n    }\r\n\r\n    calSelectedRangeByStart(ri, ci) {\r\n        const {\r\n            selector, rows, cols, merges,\r\n        } = this;\r\n        let cellRange = merges.getFirstIncludes(ri, ci);\r\n        // console.log('cellRange:', cellRange, ri, ci, merges);\r\n        if (cellRange === null) {\r\n            cellRange = new CellRange(ri, ci, ri, ci);\r\n            if (ri === -1) {\r\n                cellRange.sri = 0;\r\n                cellRange.eri = rows.len - 1;\r\n            }\r\n            if (ci === -1) {\r\n                cellRange.sci = 0;\r\n                cellRange.eci = cols.len - 1;\r\n            }\r\n        }\r\n        selector.range = cellRange;\r\n        return cellRange;\r\n    }\r\n\r\n    setSelectedCellAttr(property, value) {\r\n        this.changeData(() => {\r\n            const {selector, styles, rows} = this;\r\n            if (property === 'merge') {\r\n                if (value) this.merge();\r\n                else this.unmerge();\r\n            } else if (property === 'border') {\r\n                setStyleBorders.call(this, value);\r\n            } else if (property === 'formula') {\r\n                // console.log('>>>', selector.multiple());\r\n                const {ri, ci, range} = selector;\r\n                if (selector.multiple()) {\r\n                    const [rn, cn] = selector.size();\r\n                    const {\r\n                        sri, sci, eri, eci,\r\n                    } = range;\r\n                    if (rn > 1) {\r\n                        for (let i = sci; i <= eci; i += 1) {\r\n                            const cell = rows.getCellOrNew(eri + 1, i);\r\n                            cell.text = `=${value}(${xy2expr(i, sri)}:${xy2expr(i, eri)})`;\r\n                        }\r\n                    } else if (cn > 1) {\r\n                        const cell = rows.getCellOrNew(ri, eci + 1);\r\n                        cell.text = `=${value}(${xy2expr(sci, ri)}:${xy2expr(eci, ri)})`;\r\n                    }\r\n                } else {\r\n                    const cell = rows.getCellOrNew(ri, ci);\r\n                    cell.text = `=${value}()`;\r\n                }\r\n            } else {\r\n                selector.range.each((ri, ci) => {\r\n                    const cell = rows.getCellOrNew(ri, ci);\r\n                    let cstyle = {};\r\n                    if (cell.style !== undefined) {\r\n                        cstyle = helper.cloneDeep(styles[cell.style]);\r\n                    }\r\n                    if (property === 'format') {\r\n                        cstyle.format = value;\r\n                        cell.style = this.addStyle(cstyle);\r\n                    } else if (property === 'font-bold' || property === 'font-italic'\r\n                        || property === 'font-name' || property === 'font-size') {\r\n                        const nfont = {};\r\n                        nfont[property.split('-')[1]] = value;\r\n                        cstyle.font = Object.assign(cstyle.font || {}, nfont);\r\n                        cell.style = this.addStyle(cstyle);\r\n                    } else if (property === 'strike' || property === 'textwrap'\r\n                        || property === 'underline'\r\n                        || property === 'align' || property === 'valign'\r\n                        || property === 'color' || property === 'bgcolor') {\r\n                        cstyle[property] = value;\r\n                        cell.style = this.addStyle(cstyle);\r\n                    } else {\r\n                        cell[property] = value;\r\n                    }\r\n                });\r\n            }\r\n        });\r\n    }\r\n\r\n    // state: input | finished\r\n    setSelectedCellText(text, state = 'input') {\r\n        const {autoFilter, selector, rows} = this;\r\n        const {ri, ci} = selector;\r\n        let nri = ri;\r\n        if (this.unsortedRowMap.has(ri)) {\r\n            nri = this.unsortedRowMap.get(ri);\r\n        }\r\n        const oldCell = rows.getCell(nri, ci);\r\n        const oldText = oldCell ? oldCell.text : '';\r\n        this.setCellText(nri, ci, text, state);\r\n        // replace filter.value\r\n        if (autoFilter.active()) {\r\n            const filter = autoFilter.getFilter(ci);\r\n            if (filter) {\r\n                const vIndex = filter.value.findIndex(v => v === oldText);\r\n                if (vIndex >= 0) {\r\n                    filter.value.splice(vIndex, 1, text);\r\n                }\r\n                // console.log('filter:', filter, oldCell);\r\n            }\r\n        }\r\n        // this.resetAutoFilter();\r\n    }\r\n\r\n    getSelectedCell() {\r\n        const {ri, ci} = this.selector;\r\n        let nri = ri;\r\n        if (this.unsortedRowMap.has(ri)) {\r\n            nri = this.unsortedRowMap.get(ri);\r\n        }\r\n        return this.rows.getCell(nri, ci);\r\n    }\r\n\r\n    xyInSelectedRect(x, y) {\r\n        const {\r\n            left, top, width, height,\r\n        } = this.getSelectedRect();\r\n        const x1 = x - this.cols.indexWidth;\r\n        const y1 = y - this.rows.height;\r\n        // console.log('x:', x, ',y:', y, 'left:', left, 'top:', top);\r\n        return x1 > left && x1 < (left + width)\r\n            && y1 > top && y1 < (top + height);\r\n    }\r\n\r\n    getSelectedRect() {\r\n        return this.getRect(this.selector.range);\r\n    }\r\n\r\n    getClipboardRect() {\r\n        const {clipboard} = this;\r\n        if (!clipboard.isClear()) {\r\n            return this.getRect(clipboard.range);\r\n        }\r\n        return {left: -100, top: -100};\r\n    }\r\n\r\n    getRect(cellRange) {\r\n        const {\r\n            scroll, rows, cols, exceptRowSet,\r\n        } = this;\r\n        const {\r\n            sri, sci, eri, eci,\r\n        } = cellRange;\r\n        // console.log('sri:', sri, ',sci:', sci, ', eri:', eri, ', eci:', eci);\r\n        // no selector\r\n        if (sri < 0 && sci < 0) {\r\n            return {\r\n                left: 0, l: 0, top: 0, t: 0, scroll,\r\n            };\r\n        }\r\n        const left = cols.sumWidth(0, sci);\r\n        const top = rows.sumHeight(0, sri, exceptRowSet);\r\n        const height = rows.sumHeight(sri, eri + 1, exceptRowSet);\r\n        const width = cols.sumWidth(sci, eci + 1);\r\n        // console.log('sri:', sri, ', sci:', sci, ', eri:', eri, ', eci:', eci);\r\n        let left0 = left - scroll.x;\r\n        let top0 = top - scroll.y;\r\n        const fsh = this.freezeTotalHeight();\r\n        const fsw = this.freezeTotalWidth();\r\n        if (fsw > 0 && fsw > left) {\r\n            left0 = left;\r\n        }\r\n        if (fsh > 0 && fsh > top) {\r\n            top0 = top;\r\n        }\r\n        return {\r\n            l: left,\r\n            t: top,\r\n            left: left0,\r\n            top: top0,\r\n            height,\r\n            width,\r\n            scroll,\r\n        };\r\n    }\r\n\r\n    getCellRectByXY(x, y) {\r\n        const {\r\n            scroll, merges, rows, cols,\r\n        } = this;\r\n        let {ri, top, height} = getCellRowByY.call(this, y, scroll.y);\r\n        let {ci, left, width} = getCellColByX.call(this, x, scroll.x);\r\n        if (ci === -1) {\r\n            width = cols.totalWidth();\r\n        }\r\n        if (ri === -1) {\r\n            height = rows.totalHeight();\r\n        }\r\n        if (ri >= 0 || ci >= 0) {\r\n            const merge = merges.getFirstIncludes(ri, ci);\r\n            if (merge) {\r\n                ri = merge.sri;\r\n                ci = merge.sci;\r\n                ({\r\n                    left, top, width, height,\r\n                } = this.cellRect(ri, ci));\r\n            }\r\n        }\r\n        return {\r\n            ri, ci, left, top, width, height,\r\n        };\r\n    }\r\n\r\n    isSingleSelected() {\r\n        const {\r\n            sri, sci, eri, eci,\r\n        } = this.selector.range;\r\n        const cell = this.getCell(sri, sci);\r\n        if (cell && cell.merge) {\r\n            const [rn, cn] = cell.merge;\r\n            if (sri + rn === eri && sci + cn === eci) return true;\r\n        }\r\n        return !this.selector.multiple();\r\n    }\r\n\r\n    canUnmerge() {\r\n        const {\r\n            sri, sci, eri, eci,\r\n        } = this.selector.range;\r\n        const cell = this.getCell(sri, sci);\r\n        if (cell && cell.merge) {\r\n            const [rn, cn] = cell.merge;\r\n            if (sri + rn === eri && sci + cn === eci) return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    merge() {\r\n        const {selector, rows} = this;\r\n        if (this.isSingleSelected()) return;\r\n        const [rn, cn] = selector.size();\r\n        // console.log('merge:', rn, cn);\r\n        if (rn > 1 || cn > 1) {\r\n            const {sri, sci} = selector.range;\r\n            this.changeData(() => {\r\n                const cell = rows.getCellOrNew(sri, sci);\r\n                cell.merge = [rn - 1, cn - 1];\r\n                this.merges.add(selector.range);\r\n                // delete merge cells\r\n                this.rows.deleteCells(selector.range);\r\n                // console.log('cell:', cell, this.d);\r\n                this.rows.setCell(sri, sci, cell);\r\n            });\r\n        }\r\n    }\r\n\r\n    unmerge() {\r\n        const {selector} = this;\r\n        if (!this.isSingleSelected()) return;\r\n        const {sri, sci} = selector.range;\r\n        this.changeData(() => {\r\n            this.rows.deleteCell(sri, sci, 'merge');\r\n            this.merges.deleteWithin(selector.range);\r\n        });\r\n    }\r\n\r\n    canAutofilter() {\r\n        return !this.autoFilter.active();\r\n    }\r\n\r\n    autofilter() {\r\n        const {autoFilter, selector} = this;\r\n        this.changeData(() => {\r\n            if (autoFilter.active()) {\r\n                autoFilter.clear();\r\n                this.exceptRowSet = new Set();\r\n                this.sortedRowMap = new Map();\r\n                this.unsortedRowMap = new Map();\r\n            } else {\r\n                autoFilter.ref = selector.range.toString();\r\n            }\r\n        });\r\n    }\r\n\r\n    setAutoFilter(ci, order, operator, value) {\r\n        const {autoFilter} = this;\r\n        autoFilter.addFilter(ci, operator, value);\r\n        autoFilter.setSort(ci, order);\r\n        this.resetAutoFilter();\r\n    }\r\n\r\n    resetAutoFilter() {\r\n        const {autoFilter, rows} = this;\r\n        if (!autoFilter.active()) return;\r\n        const {sort} = autoFilter;\r\n        const {rset, fset} = autoFilter.filteredRows((r, c) => rows.getCell(r, c));\r\n        const fary = Array.from(fset);\r\n        const oldAry = Array.from(fset);\r\n        if (sort) {\r\n            fary.sort((a, b) => {\r\n                if (sort.order === 'asc') return a - b;\r\n                if (sort.order === 'desc') return b - a;\r\n                return 0;\r\n            });\r\n        }\r\n        this.exceptRowSet = rset;\r\n        this.sortedRowMap = new Map();\r\n        this.unsortedRowMap = new Map();\r\n        fary.forEach((it, index) => {\r\n            this.sortedRowMap.set(oldAry[index], it);\r\n            this.unsortedRowMap.set(it, oldAry[index]);\r\n        });\r\n    }\r\n\r\n    deleteCell(what = 'all') {\r\n        const {selector} = this;\r\n        this.changeData(() => {\r\n            this.rows.deleteCells(selector.range, what);\r\n            if (what === 'all' || what === 'format') {\r\n                this.merges.deleteWithin(selector.range);\r\n            }\r\n        });\r\n    }\r\n\r\n    // type: row | column\r\n    insert(type, n = 1) {\r\n\r\n        function insertHeaderFooter(header, sri, n) {\r\n            const newTableHeader = []\r\n            for (let i = 0; i < header.length; i++) {\r\n                if (header[i] >= sri) {\r\n                    newTableHeader.push(header[i] + n)\r\n\r\n                } else {\r\n                    newTableHeader.push(header[i])\r\n                }\r\n            }\r\n            return newTableHeader\r\n        }\r\n\r\n        this.changeData(() => {\r\n            const {sri, sci} = this.selector.range;\r\n            const {rows, merges, cols} = this;\r\n            let si = sri;\r\n            if (type === 'row') {\r\n                rows.insert(sri, n);\r\n                // yvan: 固定表头和表尾的行进行累加\r\n                const {tableHeader} = this\r\n                if (tableHeader) {\r\n                    this.tableHeader = insertHeaderFooter(tableHeader, sri, n)\r\n                }\r\n                const {tableFooter} = this\r\n                if (tableFooter) {\r\n                    this.tableFooter = insertHeaderFooter(tableFooter, sri, n)\r\n                }\r\n                const {pageHeader} = this\r\n                if (pageHeader) {\r\n                    this.pageHeader = insertHeaderFooter(pageHeader, sri, n)\r\n                }\r\n                const {pageFooter} = this\r\n                if (pageFooter) {\r\n                    this.pageFooter = insertHeaderFooter(pageFooter, sri, n)\r\n                }\r\n\r\n            } else if (type === 'column') {\r\n                rows.insertColumn(sci, n);\r\n                si = sci;\r\n                cols.len += 1;\r\n            }\r\n            merges.shift(type, si, n, (ri, ci, rn, cn) => {\r\n                const cell = rows.getCell(ri, ci);\r\n                cell.merge[0] += rn;\r\n                cell.merge[1] += cn;\r\n            });\r\n        });\r\n    }\r\n\r\n    // type: row | column\r\n    delete(type) {\r\n\r\n        function deleteHeaderFooter(header, sri, n) {\r\n            const newTableHeader = []\r\n            for (let i = 0; i < header.length; i++) {\r\n                if (header[i] === sri) {\r\n                    // 删除的就是当前行\r\n\r\n                } else if (header[i] > sri) {\r\n                    newTableHeader.push(header[i] - n)\r\n\r\n                } else {\r\n                    newTableHeader.push(header[i])\r\n                }\r\n            }\r\n            return newTableHeader\r\n        }\r\n\r\n        this.changeData(() => {\r\n            const {\r\n                rows, merges, selector, cols,\r\n            } = this;\r\n            const {range} = selector;\r\n            const {\r\n                sri, sci, eri, eci,\r\n            } = selector.range;\r\n            const [rsize, csize] = selector.range.size();\r\n            let si = sri;\r\n            let size = rsize;\r\n            if (type === 'row') {\r\n                rows.delete(sri, eri);\r\n                // yvan: 固定表头和表尾的行进行累加\r\n                const n = eri - sri + 1\r\n                const {tableHeader} = this\r\n                if (tableHeader) {\r\n                    this.tableHeader = deleteHeaderFooter(tableHeader, sri, n)\r\n                }\r\n                const {tableFooter} = this\r\n                if (tableFooter) {\r\n                    this.tableFooter = deleteHeaderFooter(tableFooter, sri, n)\r\n                }\r\n                const {pageHeader} = this\r\n                if (pageHeader) {\r\n                    this.pageHeader = deleteHeaderFooter(pageHeader, sri, n)\r\n                }\r\n                const {pageFooter} = this\r\n                if (pageFooter) {\r\n                    this.pageFooter = deleteHeaderFooter(pageFooter, sri, n)\r\n                }\r\n\r\n            } else if (type === 'column') {\r\n                rows.deleteColumn(sci, eci);\r\n                si = range.sci;\r\n                size = csize;\r\n                cols.len -= (eci - sci + 1);\r\n            }\r\n            // console.log('type:', type, ', si:', si, ', size:', size);\r\n            merges.shift(type, si, -size, (ri, ci, rn, cn) => {\r\n                // console.log('ri:', ri, ', ci:', ci, ', rn:', rn, ', cn:', cn);\r\n                const cell = rows.getCell(ri, ci);\r\n                cell.merge[0] += rn;\r\n                cell.merge[1] += cn;\r\n                if (cell.merge[0] === 0 && cell.merge[1] === 0) {\r\n                    delete cell.merge;\r\n                }\r\n            });\r\n        });\r\n    }\r\n\r\n    scrollx(x, cb) {\r\n        const {scroll, freeze, cols} = this;\r\n        const [, fci] = freeze;\r\n        const [\r\n            ci, left, width,\r\n        ] = helper.rangeReduceIf(fci, cols.len, 0, 0, x, i => cols.getWidth(i));\r\n        // console.log('fci:', fci, ', ci:', ci);\r\n        let x1 = left;\r\n        if (x > 0) x1 += width;\r\n        if (scroll.x !== x1) {\r\n            scroll.ci = x > 0 ? ci : 0;\r\n            scroll.x = x1;\r\n            cb();\r\n        }\r\n    }\r\n\r\n    scrolly(y, cb) {\r\n        const {scroll, freeze, rows} = this;\r\n        const [fri] = freeze;\r\n        const [\r\n            ri, top, height,\r\n        ] = helper.rangeReduceIf(fri, rows.len, 0, 0, y, i => rows.getHeight(i));\r\n        let y1 = top;\r\n        if (y > 0) y1 += height;\r\n        // console.log('ri:', ri, ' ,y:', y1);\r\n        if (scroll.y !== y1) {\r\n            scroll.ri = y > 0 ? ri : 0;\r\n            scroll.y = y1;\r\n            cb();\r\n        }\r\n    }\r\n\r\n    cellRect(ri, ci) {\r\n        const {rows, cols} = this;\r\n        const left = cols.sumWidth(0, ci);\r\n        const top = rows.sumHeight(0, ri);\r\n        const cell = rows.getCell(ri, ci);\r\n        let width = cols.getWidth(ci);\r\n        let height = rows.getHeight(ri);\r\n        if (cell !== null) {\r\n            if (cell.merge) {\r\n                const [rn, cn] = cell.merge;\r\n                // console.log('cell.merge:', cell.merge);\r\n                if (rn > 0) {\r\n                    for (let i = 1; i <= rn; i += 1) {\r\n                        height += rows.getHeight(ri + i);\r\n                    }\r\n                }\r\n                if (cn > 0) {\r\n                    for (let i = 1; i <= cn; i += 1) {\r\n                        width += cols.getWidth(ci + i);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        // console.log('data:', this.d);\r\n        return {\r\n            left, top, width, height, cell,\r\n        };\r\n    }\r\n\r\n    getCell(ri, ci) {\r\n        return this.rows.getCell(ri, ci);\r\n    }\r\n\r\n    getCellTextOrDefault(ri, ci) {\r\n        const cell = this.getCell(ri, ci);\r\n        return (cell && cell.text) ? cell.text : '';\r\n    }\r\n\r\n    getCellStyle(ri, ci) {\r\n        const cell = this.getCell(ri, ci);\r\n        if (cell && cell.style !== undefined) {\r\n            return this.styles[cell.style];\r\n        }\r\n        return null;\r\n    }\r\n\r\n    getCellStyleOrDefault(ri, ci) {\r\n        const {styles, rows} = this;\r\n        const cell = rows.getCell(ri, ci);\r\n        const cellStyle = (cell && cell.style !== undefined) ? styles[cell.style] : {};\r\n        return helper.merge(this.defaultStyle(), cellStyle);\r\n    }\r\n\r\n    getSelectedCellStyle() {\r\n        const {ri, ci} = this.selector;\r\n        return this.getCellStyleOrDefault(ri, ci);\r\n    }\r\n\r\n    // state: input | finished\r\n    setCellText(ri, ci, text, state) {\r\n        const {rows, history, validations} = this;\r\n        if (state === 'finished') {\r\n            rows.setCellText(ri, ci, '');\r\n            history.add(this.getData());\r\n            rows.setCellText(ri, ci, text);\r\n        } else {\r\n            rows.setCellText(ri, ci, text);\r\n            this.change(this.getData());\r\n        }\r\n        // validator\r\n        validations.validate(ri, ci, text);\r\n    }\r\n\r\n    freezeIsActive() {\r\n        const [ri, ci] = this.freeze;\r\n        return ri > 0 || ci > 0;\r\n    }\r\n\r\n    setFreeze(ri, ci) {\r\n        this.changeData(() => {\r\n            this.freeze = [ri, ci];\r\n        });\r\n    }\r\n\r\n    /**\r\n     * yvan 固定表头\r\n     * @param ri\r\n     */\r\n    setTableHeader(ri) {\r\n        this.changeData(() => {\r\n            if (this.tableFooter?.includes(ri)) {\r\n                system.msg('请先取消\"表尾\"设定')\r\n                return\r\n            }\r\n\r\n            if (!this.tableHeader) {\r\n                this.tableHeader = [ri]\r\n            } else if (!this.tableHeader.includes(ri)) {\r\n                this.tableHeader.push(ri);\r\n            } else {\r\n                this.tableHeader = _.remove(this.tableHeader, (r) => r !== ri)\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * yvan 固定表尾\r\n     * @param ri\r\n     */\r\n    setTableFooter(ri) {\r\n        this.changeData(() => {\r\n            if (this.tableHeader?.includes(ri)) {\r\n                system.msg('请先取消\"表头\"设定')\r\n                return\r\n            }\r\n\r\n            if (!this.tableFooter) {\r\n                this.tableFooter = [ri]\r\n            } else if (!this.tableFooter.includes(ri)) {\r\n                this.tableFooter.push(ri);\r\n            } else {\r\n                this.tableFooter = _.remove(this.tableFooter, (r) => r !== ri)\r\n            }\r\n        });\r\n    }\r\n\r\n    mergeTableHeaders() {\r\n        return mergeHeaders(this.tableHeader)\r\n    }\r\n\r\n    mergeTableFooters() {\r\n        return mergeHeaders(this.tableFooter)\r\n    }\r\n\r\n    mergePageHeaders() {\r\n        return mergeHeaders(this.pageHeader)\r\n    }\r\n\r\n    mergePageFooters() {\r\n        return mergeHeaders(this.pageFooter)\r\n    }\r\n\r\n    /**\r\n     * yvan 固定页头\r\n     * @param ri\r\n     */\r\n    setPageHeader(ri) {\r\n        this.changeData(() => {\r\n            if (!this.pageHeader) {\r\n                this.pageHeader = [ri]\r\n            } else if (!this.pageHeader.includes(ri)) {\r\n                this.pageHeader.push(ri);\r\n            } else {\r\n                this.pageHeader = _.remove(this.pageHeader, (r) => r !== ri)\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * yvan 固定页尾\r\n     * @param ri\r\n     */\r\n    setPageFooter(ri) {\r\n        this.changeData(() => {\r\n            if (!this.pageFooter) {\r\n                this.pageFooter = [ri]\r\n            } else if (!this.pageFooter.includes(ri)) {\r\n                this.pageFooter.push(ri);\r\n            } else {\r\n                this.pageFooter = _.remove(this.pageFooter, (r) => r !== ri)\r\n            }\r\n        });\r\n    }\r\n\r\n    freezeTotalWidth() {\r\n        return this.cols.sumWidth(0, this.freeze[1]);\r\n    }\r\n\r\n    freezeTotalHeight() {\r\n        return this.rows.sumHeight(0, this.freeze[0]);\r\n    }\r\n\r\n    setRowHeight(ri, height) {\r\n        this.changeData(() => {\r\n            this.rows.setHeight(ri, height);\r\n        });\r\n    }\r\n\r\n    setColWidth(ci, width) {\r\n        this.changeData(() => {\r\n            this.cols.setWidth(ci, width);\r\n        });\r\n    }\r\n\r\n    viewHeight() {\r\n        const {view, showToolbar, showBottomBar} = this.settings;\r\n        let h = view.height();\r\n        if (showBottomBar) {\r\n            h -= bottombarHeight;\r\n        }\r\n        if (showToolbar) {\r\n            h -= toolbarHeight;\r\n        }\r\n        return h;\r\n    }\r\n\r\n    viewWidth() {\r\n        return this.settings.view.width();\r\n    }\r\n\r\n    freezeViewRange() {\r\n        const [ri, ci] = this.freeze;\r\n        return new CellRange(0, 0, ri - 1, ci - 1, this.freezeTotalWidth(), this.freezeTotalHeight());\r\n    }\r\n\r\n    contentRange() {\r\n        const {rows, cols} = this;\r\n        const [ri, ci] = rows.maxCell();\r\n        const h = rows.sumHeight(0, ri + 1);\r\n        const w = cols.sumWidth(0, ci + 1);\r\n        return new CellRange(0, 0, ri, ci, w, h);\r\n    }\r\n\r\n    exceptRowTotalHeight(sri, eri) {\r\n        const {exceptRowSet, rows} = this;\r\n        const exceptRows = Array.from(exceptRowSet);\r\n        let exceptRowTH = 0;\r\n        exceptRows.forEach((ri) => {\r\n            if (ri < sri || ri > eri) {\r\n                const height = rows.getHeight(ri);\r\n                exceptRowTH += height;\r\n            }\r\n        });\r\n        return exceptRowTH;\r\n    }\r\n\r\n    viewRange() {\r\n        const {\r\n            scroll, rows, cols, freeze, exceptRowSet,\r\n        } = this;\r\n        // console.log('scroll:', scroll, ', freeze:', freeze)\r\n        let {ri, ci} = scroll;\r\n        if (ri <= 0) [ri] = freeze;\r\n        if (ci <= 0) [, ci] = freeze;\r\n\r\n        let [x, y] = [0, 0];\r\n        let [eri, eci] = [rows.len, cols.len];\r\n        for (let i = ri; i < rows.len; i += 1) {\r\n            if (!exceptRowSet.has(i)) {\r\n                y += rows.getHeight(i);\r\n                eri = i;\r\n            }\r\n            if (y > this.viewHeight()) break;\r\n        }\r\n        for (let j = ci; j < cols.len; j += 1) {\r\n            x += cols.getWidth(j);\r\n            eci = j;\r\n            if (x > this.viewWidth()) break;\r\n        }\r\n        // console.log(ri, ci, eri, eci, x, y);\r\n        return new CellRange(ri, ci, eri, eci, x, y);\r\n    }\r\n\r\n    eachMergesInView(viewRange, cb) {\r\n        this.merges.filterIntersects(viewRange)\r\n            .forEach(it => cb(it));\r\n    }\r\n\r\n    hideRowsOrCols() {\r\n        const {rows, cols, selector} = this;\r\n        const [rlen, clen] = selector.size();\r\n        const {\r\n            sri, sci, eri, eci,\r\n        } = selector.range;\r\n        if (rlen === rows.len) {\r\n            for (let ci = sci; ci <= eci; ci += 1) {\r\n                cols.setHide(ci, true);\r\n            }\r\n        } else if (clen === cols.len) {\r\n            for (let ri = sri; ri <= eri; ri += 1) {\r\n                rows.setHide(ri, true);\r\n            }\r\n        }\r\n    }\r\n\r\n    // type: row | col\r\n    // index row-index | col-index\r\n    unhideRowsOrCols(type, index) {\r\n        this[`${type}s`].unhide(index);\r\n    }\r\n\r\n    rowEach(min, max, cb) {\r\n        let y = 0;\r\n        const {rows} = this;\r\n        const frset = this.exceptRowSet;\r\n        const frary = [...frset];\r\n        let offset = 0;\r\n        for (let i = 0; i < frary.length; i += 1) {\r\n            if (frary[i] < min) {\r\n                offset += 1;\r\n            }\r\n        }\r\n        // console.log('min:', min, ', max:', max, ', scroll:', scroll);\r\n        for (let i = min + offset; i <= max + offset; i += 1) {\r\n            if (frset.has(i)) {\r\n                offset += 1;\r\n            } else {\r\n                const rowHeight = rows.getHeight(i);\r\n                if (rowHeight > 0) {\r\n                    cb(i, y, rowHeight);\r\n                    y += rowHeight;\r\n                    if (y > this.viewHeight()) break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    colEach(min, max, cb) {\r\n        let x = 0;\r\n        const {cols} = this;\r\n        for (let i = min; i <= max; i += 1) {\r\n            const colWidth = cols.getWidth(i);\r\n            if (colWidth > 0) {\r\n                cb(i, x, colWidth);\r\n                x += colWidth;\r\n                if (x > this.viewWidth()) break;\r\n            }\r\n        }\r\n    }\r\n\r\n    defaultStyle() {\r\n        return this.settings.style;\r\n    }\r\n\r\n    addStyle(nstyle) {\r\n        const {styles} = this;\r\n        // console.log('old.styles:', styles, nstyle);\r\n        for (let i = 0; i < styles.length; i += 1) {\r\n            const style = styles[i];\r\n            if (helper.equals(style, nstyle)) return i;\r\n        }\r\n        styles.push(nstyle);\r\n        return styles.length - 1;\r\n    }\r\n\r\n    changeData(cb) {\r\n        this.history.add(this.getData());\r\n        cb();\r\n        this.change(this.getData());\r\n    }\r\n\r\n    setData(d) {\r\n        Object.keys(d).forEach((property) => {\r\n            if (property === 'merges' || property === 'rows'\r\n                || property === 'cols' || property === 'validations') {\r\n                this[property].setData(d[property]);\r\n            } else if (property === 'freeze') {\r\n                const [x, y] = expr2xy(d[property]);\r\n                this.freeze = [y, x];\r\n            } else if (property === 'autofilter') {\r\n                this.autoFilter.setData(d[property]);\r\n            } else if (d[property] !== undefined) {\r\n                this[property] = d[property];\r\n            }\r\n        });\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * yvan: 获取文档的区域\r\n     * pageHeader\r\n     * docHeader\r\n     * docTable[]:\r\n     *      tableDocHeader\r\n     *      tableHeader\r\n     *      tableRow\r\n     *      tableFooter\r\n     * docFooter\r\n     * pageFooter\r\n     */\r\n    getDocStruct() {\r\n        const ranges = {}\r\n        const {rows, cols,} = this;\r\n        const pageHeaderList = this.mergePageHeaders()\r\n        const pageFooterList = this.mergePageFooters()\r\n\r\n        if (pageHeaderList.length > 1) {\r\n            system.showErrorDialog('页头不允许有多个, 请确认只有一个页头')\r\n            return\r\n        }\r\n        if (pageFooterList.length > 1) {\r\n            system.showErrorDialog('页尾不允许有多个, 请确认只有一个页尾')\r\n            return\r\n        }\r\n\r\n        let startRowIdx = 0\r\n        if (pageHeaderList.length === 1) {\r\n            // 存在页头\r\n            const pageHeader = pageHeaderList[0]\r\n            if (pageHeader[0] !== 0) {\r\n                system.showErrorDialog('页头必须在最开始(第1含)定义')\r\n                return\r\n            }\r\n\r\n            const exceptRowSet = []\r\n            // const height = rows.sumHeight(0, pageHeader[1] + 1, exceptRowSet);\r\n            // const width = cols.sumWidth(0, cols.len + 1);\r\n            ranges.pageHeader = {\r\n                sri: 0, eri: pageHeader[1],\r\n                // rect: {\r\n                //     x: 0, y: 0, width, height\r\n                // },\r\n            }\r\n            startRowIdx = pageHeader[1]\r\n        }\r\n\r\n        const headers = this.mergeTableHeaders()\r\n        const footers = this.mergeTableFooters()\r\n        const enumObj = {header: headers, footer: footers}\r\n\r\n        /**\r\n         * 合并 header/footer, 按行 sri 顺序，构建出 listAll 对象, 结构如:\r\n         * [\r\n         *   { prop: 'header', sri:3, eri:3 },\r\n         *   { prop: 'footer', sri:5, eri:5 },\r\n         *   { prop: 'header', sri:9, eri:9 },\r\n         *   { prop: 'footer', sri:11, eri:11 },\r\n         * ]\r\n         * @type {{prop:String, sri:Number, eri:Number}[]} listAll\r\n         */\r\n        const listAll = []\r\n        const keys = Object.keys(enumObj)\r\n        for (let k = 0; k < keys.length; k++) {\r\n            const prop = keys[k]\r\n            for (let i = 0; i < enumObj[prop].length; i++) {\r\n                const node = enumObj[prop][i]\r\n                listAll.push({prop, sri: node[0], eri: node[1]})\r\n            }\r\n        }\r\n        listAll.sort((a, b) => a.sri - b.sri)\r\n\r\n        const tables = []\r\n        while (true) {\r\n            /**\r\n             * 找到基于 startRowIdx 的下一个符合条件的 table 对象, table 对象结构如下:\r\n             * {\r\n             *      header: {sri:Number, eri:Number},\r\n             *      footer: {sri:Number, eri:Number},\r\n             * }\r\n             */\r\n            const table = {}\r\n            let hasFoundHeader = false\r\n            for (let f = 0; f < listAll.length; f++) {\r\n                const {prop, sri, eri} = listAll[f]\r\n                if (sri > startRowIdx && prop === 'header') {\r\n                    if (!hasFoundHeader) {\r\n                        table.header = {sri, eri}\r\n                        hasFoundHeader = true\r\n                    } else {\r\n                        // 这是另外一个表的表头了，不要跨越\r\n                        break\r\n                    }\r\n\r\n                } else if (sri > startRowIdx && prop === 'footer') {\r\n                    table.footer = {sri, eri}\r\n                    break\r\n                }\r\n            }\r\n\r\n            if (!table.header && !table.footer) {\r\n                // 没有找到任何 table 信息, 可以退出循环\r\n                break\r\n            }\r\n\r\n            /**\r\n             * 补起 table 对象对应的数据行结构:\r\n             * {\r\n             *     row: {sri:Number, eri:Number},\r\n             * }\r\n             */\r\n            if (table.header && table.footer) {\r\n                // 表格既有头、也有尾，就要校验头和尾巴中间是不是只差距一行\r\n                if (table.header.eri + 2 !== table.footer.sri) {\r\n                    system.showErrorDialog('第' + tables.length + 1 + '个表格有异常, 表头与表尾之间只允许1个数据行')\r\n                    return\r\n                }\r\n                table.row = {sri: table.header.eri + 1, eri: table.header.eri + 1}\r\n                table.sri = table.header.sri\r\n                table.eri = table.footer.eri\r\n                startRowIdx = table.footer.eri\r\n\r\n            } else if (table.header) {\r\n                // 只有表头\r\n                table.row = {sri: table.header.eri + 1, eri: table.header.eri + 1}\r\n                table.sri = table.header.sri\r\n                table.eri = table.row.eri\r\n                startRowIdx = table.header.eri + 1\r\n\r\n            } else if (table.footer) {\r\n                // 只有表尾\r\n                table.row = {sri: table.footer.sri - 1, eri: table.footer.sri + 1}\r\n                table.sri = table.row.sri\r\n                table.eri = table.footer.eri\r\n                startRowIdx = table.footer.eri\r\n            }\r\n\r\n            tables.push(table)\r\n        }\r\n\r\n        /**\r\n         * 从 tables 分析到 docTable 结构\r\n         * 填充 docHeader / tableDocHeader /\r\n         */\r\n        let lastFootRowIdx = 0\r\n        if (ranges.pageHeader) {\r\n            lastFootRowIdx = ranges.pageHeader.eri + 1\r\n        }\r\n        if (tables.length > 0) {\r\n            ranges.docTable = []\r\n            // 判断从 pageHeader 到第一个 table 顶部，是不是有一部分内容, 有内容就放置为 docHeader\r\n            const sri = (tables[0].header?.sri ?? tables[0].row.sri) - 1\r\n            if (lastFootRowIdx !== sri) {\r\n                ranges.docHeader = {sri: lastFootRowIdx, eri: sri}\r\n            }\r\n            lastFootRowIdx = (tables[0].footer?.eri ?? tables[0].row.eri) + 1\r\n\r\n            for (let i = 0; i < tables.length; i++) {\r\n                const table = tables[i]\r\n                const docTable = {\r\n                    tableRow: table.row,\r\n                    sri: table.sri,\r\n                    eri: table.eri,\r\n                }\r\n                if (i > 0) {\r\n                    // 从第二个表格开始，tableDocHeader 就是与前一个表格 footer 与当前表格 header 之间的内容\r\n                    const sri = (table.header?.sri ?? table.row.sri) - 1\r\n                    if (lastFootRowIdx !== sri) {\r\n                        docTable.tableDocHeader = {sri: lastFootRowIdx, eri: sri}\r\n                        docTable.sri = docTable.tableDocHeader.sri\r\n                    }\r\n                    lastFootRowIdx = (table.footer?.eri ?? table.row.eri) + 1\r\n                }\r\n                if (table.header) docTable.tableHeader = table.header\r\n                if (table.footer) docTable.tableFooter = table.footer\r\n                ranges.docTable.push(docTable)\r\n            }\r\n        }\r\n\r\n        if (pageFooterList.length === 1) {\r\n            // 存在页尾\r\n            if (pageFooterList[0][0] < startRowIdx) {\r\n                // 页尾必须定义在文档底部\r\n                system.showErrorDialog('页尾必须定义在文档底部')\r\n                return\r\n            }\r\n            ranges.pageFooter = {\r\n                sri: pageFooterList[0][0], eri: pageFooterList[0][1],\r\n            }\r\n        }\r\n\r\n        let lastRowIdx = rows.len\r\n        if (ranges.pageFooter) {\r\n            lastRowIdx = ranges.pageFooter.eri\r\n        }\r\n        if (lastFootRowIdx !== lastRowIdx - 1) {\r\n            ranges.docFooter = {\r\n                sri: lastFootRowIdx, eri: lastRowIdx - 1,\r\n            }\r\n        }\r\n\r\n        return ranges\r\n        // const r = {\r\n        //     pageHeader: {sri: 0, eri: 0},\r\n        //     docHeader: {\r\n        //         sri: 0, eri: 0\r\n        //     },\r\n        //     docTable: [\r\n        //         {\r\n        //             tableDocHeader: {sri: 0, eri: 0},\r\n        //             tableHeader: {sri: 0, eri: 0},\r\n        //             tableRow: {sri: 0, eri: 0},\r\n        //             tableFooter: {sri: 0, eri: 0},\r\n        //         },\r\n        //     ],\r\n        //     docFooter: {sri: 0, eri: 0},\r\n        //     pageFooter: {sri: 0, eri: 0},\r\n        // }\r\n    }\r\n\r\n    getData() {\r\n        const {\r\n            name, freeze, styles, merges, rows, cols, validations, autoFilter,\r\n            tableFooter, tableHeader, pageHeader, pageFooter //yvan 表尾设置\r\n        } = this;\r\n        return {\r\n            name,\r\n            freeze: xy2expr(freeze[1], freeze[0]),\r\n            styles,\r\n            merges: merges.getData(),\r\n            rows: rows.getData(),\r\n            cols: cols.getData(),\r\n            validations: validations.getData(),\r\n            autofilter: autoFilter.getData(),\r\n            tableFooter, tableHeader, pageHeader, pageFooter //yvan 表尾设置\r\n        };\r\n    }\r\n}\r\n","/* global window */\r\nexport function bind(target, name, fn) {\r\n  target.addEventListener(name, fn);\r\n}\r\nexport function unbind(target, name, fn) {\r\n  target.removeEventListener(name, fn);\r\n}\r\nexport function unbindClickoutside(el) {\r\n  if (el.xclickoutside) {\r\n    unbind(window.document.body, 'click', el.xclickoutside);\r\n    delete el.xclickoutside;\r\n  }\r\n}\r\n\r\n// the left mouse button: mousedown → mouseup → click\r\n// the right mouse button: mousedown → contenxtmenu → mouseup\r\n// the right mouse button in firefox(>65.0): mousedown → contenxtmenu → mouseup → click on window\r\nexport function bindClickoutside(el, cb) {\r\n  el.xclickoutside = (evt) => {\r\n    // ignore double click\r\n    // console.log('evt:', evt);\r\n    if (evt.detail === 2 || el.contains(evt.target)) return;\r\n    if (cb) cb(el);\r\n    else {\r\n      el.hide();\r\n      unbindClickoutside(el);\r\n    }\r\n  };\r\n  bind(window.document.body, 'click', el.xclickoutside);\r\n}\r\nexport function mouseMoveUp(target, movefunc, upfunc) {\r\n  bind(target, 'mousemove', movefunc);\r\n  const t = target;\r\n  t.xEvtUp = (evt) => {\r\n    // console.log('mouseup>>>');\r\n    unbind(target, 'mousemove', movefunc);\r\n    unbind(target, 'mouseup', target.xEvtUp);\r\n    upfunc(evt);\r\n  };\r\n  bind(target, 'mouseup', target.xEvtUp);\r\n}\r\n\r\nfunction calTouchDirection(spanx, spany, evt, cb) {\r\n  let direction = '';\r\n  // console.log('spanx:', spanx, ', spany:', spany);\r\n  if (Math.abs(spanx) > Math.abs(spany)) {\r\n    // horizontal\r\n    direction = spanx > 0 ? 'right' : 'left';\r\n    cb(direction, spanx, evt);\r\n  } else {\r\n    // vertical\r\n    direction = spany > 0 ? 'down' : 'up';\r\n    cb(direction, spany, evt);\r\n  }\r\n}\r\n// cb = (direction, distance) => {}\r\nexport function bindTouch(target, { move, end }) {\r\n  let startx = 0;\r\n  let starty = 0;\r\n  bind(target, 'touchstart', (evt) => {\r\n    const { pageX, pageY } = evt.touches[0];\r\n    startx = pageX;\r\n    starty = pageY;\r\n  });\r\n  bind(target, 'touchmove', (evt) => {\r\n    if (!move) return;\r\n    const { pageX, pageY } = evt.changedTouches[0];\r\n    const spanx = pageX - startx;\r\n    const spany = pageY - starty;\r\n    if (Math.abs(spanx) > 10 || Math.abs(spany) > 10) {\r\n      // console.log('spanx:', spanx, ', spany:', spany);\r\n      calTouchDirection(spanx, spany, evt, move);\r\n      startx = pageX;\r\n      starty = pageY;\r\n    }\r\n    evt.preventDefault();\r\n  });\r\n  bind(target, 'touchend', (evt) => {\r\n    if (!end) return;\r\n    const { pageX, pageY } = evt.changedTouches[0];\r\n    const spanx = pageX - startx;\r\n    const spany = pageY - starty;\r\n    calTouchDirection(spanx, spany, evt, end);\r\n  });\r\n}\r\n\r\n// eventemiter\r\nexport function createEventEmitter() {\r\n  const listeners = new Map();\r\n\r\n  function on(eventName, callback) {\r\n    const push = () => {\r\n      const currentListener = listeners.get(eventName);\r\n      return (Array.isArray(currentListener)\r\n          && currentListener.push(callback))\r\n          || false;\r\n    };\r\n\r\n    const create = () => listeners.set(eventName, [].concat(callback));\r\n\r\n    return (listeners.has(eventName)\r\n        && push())\r\n        || create();\r\n  }\r\n\r\n  function fire(eventName, args) {\r\n    const exec = () => {\r\n      const currentListener = listeners.get(eventName);\r\n      for (const callback of currentListener) callback.call(null, ...args);\r\n    };\r\n\r\n    return listeners.has(eventName)\r\n        && exec();\r\n  }\r\n\r\n  function removeListener(eventName, callback) {\r\n    const remove = () => {\r\n      const currentListener = listeners.get(eventName);\r\n      const idx = currentListener.indexOf(callback);\r\n      return (idx >= 0)\r\n          && currentListener.splice(idx, 1)\r\n          && listeners.get(eventName).length === 0\r\n          && listeners.delete(eventName);\r\n    };\r\n\r\n    return listeners.has(eventName)\r\n        && remove();\r\n  }\r\n\r\n  function once(eventName, callback) {\r\n    const execCalllback = (...args) => {\r\n      callback.call(null, ...args);\r\n      removeListener(eventName, execCalllback);\r\n    };\r\n\r\n    return on(eventName, execCalllback);\r\n  }\r\n\r\n  function removeAllListeners() {\r\n    listeners.clear();\r\n  }\r\n\r\n  return {\r\n    get current() {\r\n      return listeners;\r\n    },\r\n    on,\r\n    once,\r\n    fire,\r\n    removeListener,\r\n    removeAllListeners,\r\n  };\r\n}\r\n","/* global window */\r\nexport const cssPrefix = 'x-spreadsheet';\r\nexport const dpr = window.devicePixelRatio || 1;\r\nexport default {\r\n  cssPrefix,\r\n  dpr,\r\n};\r\n","/* global window */\r\nimport { h } from './element';\r\nimport { mouseMoveUp } from './event';\r\nimport { cssPrefix } from '../config';\r\n\r\nexport default class Resizer {\r\n  constructor(vertical = false, minDistance) {\r\n    this.moving = false;\r\n    this.vertical = vertical;\r\n    this.el = h('div', `${cssPrefix}-resizer ${vertical ? 'vertical' : 'horizontal'}`).children(\r\n      this.unhideHoverEl = h('div', `${cssPrefix}-resizer-hover`)\r\n        .on('dblclick.stop', evt => this.mousedblclickHandler(evt))\r\n        .css('position', 'absolute').hide(),\r\n      this.hoverEl = h('div', `${cssPrefix}-resizer-hover`)\r\n        .on('mousedown.stop', evt => this.mousedownHandler(evt)),\r\n      this.lineEl = h('div', `${cssPrefix}-resizer-line`).hide(),\r\n    ).hide();\r\n    // cell rect\r\n    this.cRect = null;\r\n    this.finishedFn = null;\r\n    this.minDistance = minDistance;\r\n    this.unhideFn = () => {};\r\n  }\r\n\r\n  showUnhide(index) {\r\n    this.unhideIndex = index;\r\n    this.unhideHoverEl.show();\r\n  }\r\n\r\n  hideUnhide() {\r\n    this.unhideHoverEl.hide();\r\n  }\r\n\r\n  // rect : {top, left, width, height}\r\n  // line : {width, height}\r\n  show(rect, line) {\r\n    const {\r\n      moving, vertical, hoverEl, lineEl, el,\r\n      unhideHoverEl,\r\n    } = this;\r\n    if (moving) return;\r\n    this.cRect = rect;\r\n    const {\r\n      left, top, width, height,\r\n    } = rect;\r\n    el.offset({\r\n      left: vertical ? left + width - 5 : left,\r\n      top: vertical ? top : top + height - 5,\r\n    }).show();\r\n    hoverEl.offset({\r\n      width: vertical ? 5 : width,\r\n      height: vertical ? height : 5,\r\n    });\r\n    lineEl.offset({\r\n      width: vertical ? 0 : line.width,\r\n      height: vertical ? line.height : 0,\r\n    });\r\n    unhideHoverEl.offset({\r\n      left: vertical ? 5 - width : left,\r\n      top: vertical ? top : 5 - height,\r\n      width: vertical ? 5 : width,\r\n      height: vertical ? height : 5,\r\n    });\r\n  }\r\n\r\n  hide() {\r\n    this.el.offset({\r\n      left: 0,\r\n      top: 0,\r\n    }).hide();\r\n    this.hideUnhide();\r\n  }\r\n\r\n  mousedblclickHandler() {\r\n    if (this.unhideIndex) this.unhideFn(this.unhideIndex);\r\n  }\r\n\r\n  mousedownHandler(evt) {\r\n    let startEvt = evt;\r\n    const {\r\n      el, lineEl, cRect, vertical, minDistance,\r\n    } = this;\r\n    let distance = vertical ? cRect.width : cRect.height;\r\n    // console.log('distance:', distance);\r\n    lineEl.show();\r\n    mouseMoveUp(window, (e) => {\r\n      this.moving = true;\r\n      if (startEvt !== null && e.buttons === 1) {\r\n        // console.log('top:', top, ', left:', top, ', cRect:', cRect);\r\n        if (vertical) {\r\n          distance += e.movementX;\r\n          if (distance > minDistance) {\r\n            el.css('left', `${cRect.left + distance}px`);\r\n          }\r\n        } else {\r\n          distance += e.movementY;\r\n          if (distance > minDistance) {\r\n            el.css('top', `${cRect.top + distance}px`);\r\n          }\r\n        }\r\n        startEvt = e;\r\n      }\r\n    }, () => {\r\n      startEvt = null;\r\n      lineEl.hide();\r\n      this.moving = false;\r\n      this.hide();\r\n      if (this.finishedFn) {\r\n        if (distance < minDistance) distance = minDistance;\r\n        this.finishedFn(cRect, distance);\r\n      }\r\n    });\r\n  }\r\n}\r\n","import { h } from './element';\r\nimport { cssPrefix } from '../config';\r\n\r\nexport default class Scrollbar {\r\n  constructor(vertical) {\r\n    this.vertical = vertical;\r\n    this.moveFn = null;\r\n    this.el = h('div', `${cssPrefix}-scrollbar ${vertical ? 'vertical' : 'horizontal'}`)\r\n      .child(this.contentEl = h('div', ''))\r\n      .on('mousemove.stop', () => {})\r\n      .on('scroll.stop', (evt) => {\r\n        const { scrollTop, scrollLeft } = evt.target;\r\n        // console.log('scrollTop:', scrollTop);\r\n        if (this.moveFn) {\r\n          this.moveFn(this.vertical ? scrollTop : scrollLeft, evt);\r\n        }\r\n        // console.log('evt:::', evt);\r\n      });\r\n  }\r\n\r\n  move(v) {\r\n    this.el.scroll(v);\r\n    return this;\r\n  }\r\n\r\n  scroll() {\r\n    return this.el.scroll();\r\n  }\r\n\r\n  set(distance, contentDistance) {\r\n    const d = distance - 1;\r\n    // console.log('distance:', distance, ', contentDistance:', contentDistance);\r\n    if (contentDistance > d) {\r\n      const cssKey = this.vertical ? 'height' : 'width';\r\n      // console.log('d:', d);\r\n      this.el.css(cssKey, `${d - 15}px`).show();\r\n      this.contentEl\r\n        .css(this.vertical ? 'width' : 'height', '1px')\r\n        .css(cssKey, `${contentDistance}px`);\r\n    } else {\r\n      this.el.hide();\r\n    }\r\n    return this;\r\n  }\r\n}\r\n","import { h } from './element';\r\nimport { cssPrefix } from '../config';\r\nimport { CellRange } from '../core/cell_range';\r\n\r\nconst selectorHeightBorderWidth = 2 * 2 - 1;\r\nlet startZIndex = 10;\r\n\r\nclass SelectorElement {\r\n  constructor(useHideInput = false, autoFocus = true) {\r\n    this.useHideInput = useHideInput;\r\n    this.autoFocus = autoFocus;\r\n    this.inputChange = () => {};\r\n    this.cornerEl = h('div', `${cssPrefix}-selector-corner`);\r\n    this.areaEl = h('div', `${cssPrefix}-selector-area`)\r\n      .child(this.cornerEl).hide();\r\n    this.clipboardEl = h('div', `${cssPrefix}-selector-clipboard`).hide();\r\n    this.autofillEl = h('div', `${cssPrefix}-selector-autofill`).hide();\r\n    this.el = h('div', `${cssPrefix}-selector`)\r\n      .css('z-index', `${startZIndex}`)\r\n      .children(this.areaEl, this.clipboardEl, this.autofillEl)\r\n      .hide();\r\n    if (useHideInput) {\r\n      this.hideInput = h('input', '')\r\n        .on('compositionend', (evt) => {\r\n          this.inputChange(evt.target.value);\r\n        });\r\n      this.el.child(this.hideInputDiv = h('div', 'hide-input').child(this.hideInput));\r\n      this.el.child(this.hideInputDiv = h('div', 'hide-input').child(this.hideInput));\r\n    }\r\n    startZIndex += 1;\r\n  }\r\n\r\n  setOffset(v) {\r\n    this.el.offset(v).show();\r\n    return this;\r\n  }\r\n\r\n  hide() {\r\n    this.el.hide();\r\n    return this;\r\n  }\r\n\r\n  setAreaOffset(v) {\r\n    const {\r\n      left, top, width, height,\r\n    } = v;\r\n    const of = {\r\n      width: width - selectorHeightBorderWidth + 0.8,\r\n      height: height - selectorHeightBorderWidth + 0.8,\r\n      left: left - 0.8,\r\n      top: top - 0.8,\r\n    };\r\n    this.areaEl.offset(of).show();\r\n    if (this.useHideInput) {\r\n      this.hideInputDiv.offset(of);\r\n      if (this.autoFocus) {\r\n        this.hideInput.val('').focus();\r\n      } else {\r\n        this.hideInput.val('');\r\n      }\r\n    }\r\n  }\r\n\r\n  setClipboardOffset(v) {\r\n    const {\r\n      left, top, width, height,\r\n    } = v;\r\n    this.clipboardEl.offset({\r\n      left,\r\n      top,\r\n      width: width - 5,\r\n      height: height - 5,\r\n    });\r\n  }\r\n\r\n  showAutofill(v) {\r\n    const {\r\n      left, top, width, height,\r\n    } = v;\r\n    this.autofillEl.offset({\r\n      width: width - selectorHeightBorderWidth,\r\n      height: height - selectorHeightBorderWidth,\r\n      left,\r\n      top,\r\n    }).show();\r\n  }\r\n\r\n  hideAutofill() {\r\n    this.autofillEl.hide();\r\n  }\r\n\r\n  showClipboard() {\r\n    this.clipboardEl.show();\r\n  }\r\n\r\n  hideClipboard() {\r\n    this.clipboardEl.hide();\r\n  }\r\n}\r\n\r\nfunction calBRAreaOffset(offset) {\r\n  const { data } = this;\r\n  const {\r\n    left, top, width, height, scroll, l, t,\r\n  } = offset;\r\n  const ftwidth = data.freezeTotalWidth();\r\n  const ftheight = data.freezeTotalHeight();\r\n  let left0 = left - ftwidth;\r\n  if (ftwidth > l) left0 -= scroll.x;\r\n  let top0 = top - ftheight;\r\n  if (ftheight > t) top0 -= scroll.y;\r\n  return {\r\n    left: left0,\r\n    top: top0,\r\n    width,\r\n    height,\r\n  };\r\n}\r\n\r\nfunction calTAreaOffset(offset) {\r\n  const { data } = this;\r\n  const {\r\n    left, width, height, l, t, scroll,\r\n  } = offset;\r\n  const ftwidth = data.freezeTotalWidth();\r\n  let left0 = left - ftwidth;\r\n  if (ftwidth > l) left0 -= scroll.x;\r\n  return {\r\n    left: left0, top: t, width, height,\r\n  };\r\n}\r\n\r\nfunction calLAreaOffset(offset) {\r\n  const { data } = this;\r\n  const {\r\n    top, width, height, l, t, scroll,\r\n  } = offset;\r\n  const ftheight = data.freezeTotalHeight();\r\n  let top0 = top - ftheight;\r\n  // console.log('ftheight:', ftheight, ', t:', t);\r\n  if (ftheight > t) top0 -= scroll.y;\r\n  return {\r\n    left: l, top: top0, width, height,\r\n  };\r\n}\r\n\r\nfunction setBRAreaOffset(offset) {\r\n  const { br } = this;\r\n  br.setAreaOffset(calBRAreaOffset.call(this, offset));\r\n}\r\n\r\nfunction setTLAreaOffset(offset) {\r\n  const { tl } = this;\r\n  tl.setAreaOffset(offset);\r\n}\r\n\r\nfunction setTAreaOffset(offset) {\r\n  const { t } = this;\r\n  t.setAreaOffset(calTAreaOffset.call(this, offset));\r\n}\r\n\r\nfunction setLAreaOffset(offset) {\r\n  const { l } = this;\r\n  l.setAreaOffset(calLAreaOffset.call(this, offset));\r\n}\r\n\r\nfunction setLClipboardOffset(offset) {\r\n  const { l } = this;\r\n  l.setClipboardOffset(calLAreaOffset.call(this, offset));\r\n}\r\n\r\nfunction setBRClipboardOffset(offset) {\r\n  const { br } = this;\r\n  br.setClipboardOffset(calBRAreaOffset.call(this, offset));\r\n}\r\n\r\nfunction setTLClipboardOffset(offset) {\r\n  const { tl } = this;\r\n  tl.setClipboardOffset(offset);\r\n}\r\n\r\nfunction setTClipboardOffset(offset) {\r\n  const { t } = this;\r\n  t.setClipboardOffset(calTAreaOffset.call(this, offset));\r\n}\r\n\r\nfunction setAllAreaOffset(offset) {\r\n  setBRAreaOffset.call(this, offset);\r\n  setTLAreaOffset.call(this, offset);\r\n  setTAreaOffset.call(this, offset);\r\n  setLAreaOffset.call(this, offset);\r\n}\r\n\r\nfunction setAllClipboardOffset(offset) {\r\n  setBRClipboardOffset.call(this, offset);\r\n  setTLClipboardOffset.call(this, offset);\r\n  setTClipboardOffset.call(this, offset);\r\n  setLClipboardOffset.call(this, offset);\r\n}\r\n\r\nexport default class Selector {\r\n  constructor(data) {\r\n    const { autoFocus } = data.settings;\r\n    this.inputChange = () => {};\r\n    this.data = data;\r\n    this.br = new SelectorElement(true, autoFocus);\r\n    this.t = new SelectorElement();\r\n    this.l = new SelectorElement();\r\n    this.tl = new SelectorElement();\r\n    this.br.inputChange = (v) => {\r\n      this.inputChange(v);\r\n    };\r\n    this.br.el.show();\r\n    this.offset = null;\r\n    this.areaOffset = null;\r\n    this.indexes = null;\r\n    this.range = null;\r\n    this.arange = null;\r\n    this.el = h('div', `${cssPrefix}-selectors`)\r\n      .children(\r\n        this.tl.el,\r\n        this.t.el,\r\n        this.l.el,\r\n        this.br.el,\r\n      ).hide();\r\n\r\n    // for performance\r\n    this.lastri = -1;\r\n    this.lastci = -1;\r\n\r\n    startZIndex += 1;\r\n  }\r\n\r\n  resetData(data) {\r\n    this.data = data;\r\n    this.range = data.selector.range;\r\n    this.resetAreaOffset();\r\n  }\r\n\r\n  hide() {\r\n    this.el.hide();\r\n  }\r\n\r\n  resetOffset() {\r\n    const {\r\n      data, tl, t, l, br,\r\n    } = this;\r\n    const freezeHeight = data.freezeTotalHeight();\r\n    const freezeWidth = data.freezeTotalWidth();\r\n    if (freezeHeight > 0 || freezeWidth > 0) {\r\n      tl.setOffset({ width: freezeWidth, height: freezeHeight });\r\n      t.setOffset({ left: freezeWidth, height: freezeHeight });\r\n      l.setOffset({ top: freezeHeight, width: freezeWidth });\r\n      br.setOffset({ left: freezeWidth, top: freezeHeight });\r\n    } else {\r\n      tl.hide();\r\n      t.hide();\r\n      l.hide();\r\n      br.setOffset({ left: 0, top: 0 });\r\n    }\r\n  }\r\n\r\n  resetAreaOffset() {\r\n    // console.log('offset:', offset);\r\n    const offset = this.data.getSelectedRect();\r\n    const coffset = this.data.getClipboardRect();\r\n    setAllAreaOffset.call(this, offset);\r\n    setAllClipboardOffset.call(this, coffset);\r\n    this.resetOffset();\r\n  }\r\n\r\n  resetBRTAreaOffset() {\r\n    const offset = this.data.getSelectedRect();\r\n    const coffset = this.data.getClipboardRect();\r\n    setBRAreaOffset.call(this, offset);\r\n    setTAreaOffset.call(this, offset);\r\n    setBRClipboardOffset.call(this, coffset);\r\n    setTClipboardOffset.call(this, coffset);\r\n    this.resetOffset();\r\n  }\r\n\r\n  resetBRLAreaOffset() {\r\n    const offset = this.data.getSelectedRect();\r\n    const coffset = this.data.getClipboardRect();\r\n    setBRAreaOffset.call(this, offset);\r\n    setLAreaOffset.call(this, offset);\r\n    setBRClipboardOffset.call(this, coffset);\r\n    setLClipboardOffset.call(this, coffset);\r\n    this.resetOffset();\r\n  }\r\n\r\n  set(ri, ci, indexesUpdated = true) {\r\n    const { data } = this;\r\n    const cellRange = data.calSelectedRangeByStart(ri, ci);\r\n    const { sri, sci } = cellRange;\r\n    if (indexesUpdated) {\r\n      let [cri, cci] = [ri, ci];\r\n      if (ri < 0) cri = 0;\r\n      if (ci < 0) cci = 0;\r\n      data.selector.setIndexes(cri, cci);\r\n      this.indexes = [cri, cci];\r\n    }\r\n\r\n    this.moveIndexes = [sri, sci];\r\n    // this.sIndexes = sIndexes;\r\n    // this.eIndexes = eIndexes;\r\n    this.range = cellRange;\r\n    this.resetAreaOffset();\r\n    this.el.show();\r\n  }\r\n\r\n  setEnd(ri, ci, moving = true) {\r\n    const { data, lastri, lastci } = this;\r\n    if (moving) {\r\n      if (ri === lastri && ci === lastci) return;\r\n      this.lastri = ri;\r\n      this.lastci = ci;\r\n    }\r\n    this.range = data.calSelectedRangeByEnd(ri, ci);\r\n    setAllAreaOffset.call(this, this.data.getSelectedRect());\r\n  }\r\n\r\n  reset() {\r\n    // console.log('::::', this.data);\r\n    const { eri, eci } = this.data.selector.range;\r\n    this.setEnd(eri, eci);\r\n  }\r\n\r\n  showAutofill(ri, ci) {\r\n    if (ri === -1 && ci === -1) return;\r\n    // console.log('ri:', ri, ', ci:', ci);\r\n    // const [sri, sci] = this.sIndexes;\r\n    // const [eri, eci] = this.eIndexes;\r\n    const {\r\n      sri, sci, eri, eci,\r\n    } = this.range;\r\n    const [nri, nci] = [ri, ci];\r\n    // const rn = eri - sri;\r\n    // const cn = eci - sci;\r\n    const srn = sri - ri;\r\n    const scn = sci - ci;\r\n    const ern = eri - ri;\r\n    const ecn = eci - ci;\r\n    if (scn > 0) {\r\n      // left\r\n      // console.log('left');\r\n      this.arange = new CellRange(sri, nci, eri, sci - 1);\r\n      // this.saIndexes = [sri, nci];\r\n      // this.eaIndexes = [eri, sci - 1];\r\n      // data.calRangeIndexes2(\r\n    } else if (srn > 0) {\r\n      // top\r\n      // console.log('top');\r\n      // nri = sri;\r\n      this.arange = new CellRange(nri, sci, sri - 1, eci);\r\n      // this.saIndexes = [nri, sci];\r\n      // this.eaIndexes = [sri - 1, eci];\r\n    } else if (ecn < 0) {\r\n      // right\r\n      // console.log('right');\r\n      // nci = eci;\r\n      this.arange = new CellRange(sri, eci + 1, eri, nci);\r\n      // this.saIndexes = [sri, eci + 1];\r\n      // this.eaIndexes = [eri, nci];\r\n    } else if (ern < 0) {\r\n      // bottom\r\n      // console.log('bottom');\r\n      // nri = eri;\r\n      this.arange = new CellRange(eri + 1, sci, nri, eci);\r\n      // this.saIndexes = [eri + 1, sci];\r\n      // this.eaIndexes = [nri, eci];\r\n    } else {\r\n      // console.log('else:');\r\n      this.arange = null;\r\n      // this.saIndexes = null;\r\n      // this.eaIndexes = null;\r\n      return;\r\n    }\r\n    if (this.arange !== null) {\r\n      // console.log(this.saIndexes, ':', this.eaIndexes);\r\n      const offset = this.data.getRect(this.arange);\r\n      offset.width += 2;\r\n      offset.height += 2;\r\n      const {\r\n        br, l, t, tl,\r\n      } = this;\r\n      br.showAutofill(calBRAreaOffset.call(this, offset));\r\n      l.showAutofill(calLAreaOffset.call(this, offset));\r\n      t.showAutofill(calTAreaOffset.call(this, offset));\r\n      tl.showAutofill(offset);\r\n    }\r\n  }\r\n\r\n  hideAutofill() {\r\n    ['br', 'l', 't', 'tl'].forEach((property) => {\r\n      this[property].hideAutofill();\r\n    });\r\n  }\r\n\r\n  showClipboard() {\r\n    const coffset = this.data.getClipboardRect();\r\n    setAllClipboardOffset.call(this, coffset);\r\n    ['br', 'l', 't', 'tl'].forEach((property) => {\r\n      this[property].showClipboard();\r\n    });\r\n  }\r\n\r\n  hideClipboard() {\r\n    ['br', 'l', 't', 'tl'].forEach((property) => {\r\n      this[property].hideClipboard();\r\n    });\r\n  }\r\n}\r\n","import { h } from './element';\r\nimport { bindClickoutside, unbindClickoutside } from './event';\r\nimport { cssPrefix } from '../config';\r\n\r\nfunction inputMovePrev(evt) {\r\n  evt.preventDefault();\r\n  evt.stopPropagation();\r\n  const { filterItems } = this;\r\n  if (filterItems.length <= 0) return;\r\n  if (this.itemIndex >= 0) filterItems[this.itemIndex].toggle();\r\n  this.itemIndex -= 1;\r\n  if (this.itemIndex < 0) {\r\n    this.itemIndex = filterItems.length - 1;\r\n  }\r\n  filterItems[this.itemIndex].toggle();\r\n}\r\n\r\nfunction inputMoveNext(evt) {\r\n  evt.stopPropagation();\r\n  const { filterItems } = this;\r\n  if (filterItems.length <= 0) return;\r\n  if (this.itemIndex >= 0) filterItems[this.itemIndex].toggle();\r\n  this.itemIndex += 1;\r\n  if (this.itemIndex > filterItems.length - 1) {\r\n    this.itemIndex = 0;\r\n  }\r\n  filterItems[this.itemIndex].toggle();\r\n}\r\n\r\nfunction inputEnter(evt) {\r\n  evt.preventDefault();\r\n  const { filterItems } = this;\r\n  if (filterItems.length <= 0) return;\r\n  evt.stopPropagation();\r\n  if (this.itemIndex < 0) this.itemIndex = 0;\r\n  filterItems[this.itemIndex].el.click();\r\n  this.hide();\r\n}\r\n\r\nfunction inputKeydownHandler(evt) {\r\n  const { keyCode } = evt;\r\n  if (evt.ctrlKey) {\r\n    evt.stopPropagation();\r\n  }\r\n  switch (keyCode) {\r\n    case 37: // left\r\n      evt.stopPropagation();\r\n      break;\r\n    case 38: // up\r\n      inputMovePrev.call(this, evt);\r\n      break;\r\n    case 39: // right\r\n      evt.stopPropagation();\r\n      break;\r\n    case 40: // down\r\n      inputMoveNext.call(this, evt);\r\n      break;\r\n    case 13: // enter\r\n      inputEnter.call(this, evt);\r\n      break;\r\n    case 9:\r\n      inputEnter.call(this, evt);\r\n      break;\r\n    default:\r\n      evt.stopPropagation();\r\n      break;\r\n  }\r\n}\r\n\r\nexport default class Suggest {\r\n  constructor(items, itemClick, width = '200px') {\r\n    this.filterItems = [];\r\n    this.items = items;\r\n    this.el = h('div', `${cssPrefix}-suggest`).css('width', width).hide();\r\n    this.itemClick = itemClick;\r\n    this.itemIndex = -1;\r\n  }\r\n\r\n  setOffset(v) {\r\n    this.el.cssRemoveKeys('top', 'bottom')\r\n      .offset(v);\r\n  }\r\n\r\n  hide() {\r\n    const { el } = this;\r\n    this.filterItems = [];\r\n    this.itemIndex = -1;\r\n    el.hide();\r\n    unbindClickoutside(this.el.parent());\r\n  }\r\n\r\n  setItems(items) {\r\n    this.items = items;\r\n    // this.search('');\r\n  }\r\n\r\n  search(word) {\r\n    let { items } = this;\r\n    if (!/^\\s*$/.test(word)) {\r\n      items = items.filter(it => (it.key || it).startsWith(word.toUpperCase()));\r\n    }\r\n    items = items.map((it) => {\r\n      let { title } = it;\r\n      if (title) {\r\n        if (typeof title === 'function') {\r\n          title = title();\r\n        }\r\n      } else {\r\n        title = it;\r\n      }\r\n      const item = h('div', `${cssPrefix}-item`)\r\n        .child(title)\r\n        .on('click.stop', () => {\r\n          this.itemClick(it);\r\n          this.hide();\r\n        });\r\n      if (it.label) {\r\n        item.child(h('div', 'label').html(it.label));\r\n      }\r\n      return item;\r\n    });\r\n    this.filterItems = items;\r\n    if (items.length <= 0) {\r\n      return;\r\n    }\r\n    const { el } = this;\r\n    // items[0].toggle();\r\n    el.html('').children(...items).show();\r\n    bindClickoutside(el.parent(), () => { this.hide(); });\r\n  }\r\n\r\n  bindInputEvents(input) {\r\n    input.on('keydown', evt => inputKeydownHandler.call(this, evt));\r\n  }\r\n}\r\n","import { Element, h } from './element';\r\nimport { cssPrefix } from '../config';\r\n\r\nexport default class Icon extends Element {\r\n  constructor(name) {\r\n    super('div', `${cssPrefix}-icon`);\r\n    this.iconNameEl = h('div', `${cssPrefix}-icon-img ${name}`);\r\n    this.child(this.iconNameEl);\r\n  }\r\n\r\n  setName(name) {\r\n    this.iconNameEl.className(`${cssPrefix}-icon-img ${name}`);\r\n  }\r\n}\r\n","import { h } from './element';\r\nimport Icon from './icon';\r\nimport { t } from '../locale/locale';\r\n\r\nfunction addMonth(date, step) {\r\n  date.setMonth(date.getMonth() + step);\r\n}\r\n\r\nfunction weekday(date, index) {\r\n  const d = new Date(date);\r\n  d.setDate(index - date.getDay() + 1);\r\n  return d;\r\n}\r\n\r\nfunction monthDays(year, month, cdate) {\r\n  // the first day of month\r\n  const startDate = new Date(year, month, 1, 23, 59, 59);\r\n  const datess = [[], [], [], [], [], []];\r\n  for (let i = 0; i < 6; i += 1) {\r\n    for (let j = 0; j < 7; j += 1) {\r\n      const index = i * 7 + j;\r\n      const d = weekday(startDate, index);\r\n      const disabled = d.getMonth() !== month;\r\n      // console.log('d:', d, ', cdate:', cdate);\r\n      const active = d.getMonth() === cdate.getMonth() && d.getDate() === cdate.getDate();\r\n      datess[i][j] = { d, disabled, active };\r\n    }\r\n  }\r\n  return datess;\r\n}\r\n\r\nexport default class Calendar {\r\n  constructor(value) {\r\n    this.value = value;\r\n    this.cvalue = new Date(value);\r\n\r\n    this.headerLeftEl = h('div', 'calendar-header-left');\r\n    this.bodyEl = h('tbody', '');\r\n    this.buildAll();\r\n    this.el = h('div', 'x-spreadsheet-calendar')\r\n      .children(\r\n        h('div', 'calendar-header').children(\r\n          this.headerLeftEl,\r\n          h('div', 'calendar-header-right').children(\r\n            h('a', 'calendar-prev')\r\n              .on('click.stop', () => this.prev())\r\n              .child(new Icon('chevron-left')),\r\n            h('a', 'calendar-next')\r\n              .on('click.stop', () => this.next())\r\n              .child(new Icon('chevron-right')),\r\n          ),\r\n        ),\r\n        h('table', 'calendar-body').children(\r\n          h('thead', '').child(\r\n            h('tr', '').children(\r\n              ...t('calendar.weeks').map(week => h('th', 'cell').child(week)),\r\n            ),\r\n          ),\r\n          this.bodyEl,\r\n        ),\r\n      );\r\n    this.selectChange = () => {};\r\n  }\r\n\r\n  setValue(value) {\r\n    this.value = value;\r\n    this.cvalue = new Date(value);\r\n    this.buildAll();\r\n  }\r\n\r\n  prev() {\r\n    const { value } = this;\r\n    addMonth(value, -1);\r\n    this.buildAll();\r\n  }\r\n\r\n  next() {\r\n    const { value } = this;\r\n    addMonth(value, 1);\r\n    this.buildAll();\r\n  }\r\n\r\n  buildAll() {\r\n    this.buildHeaderLeft();\r\n    this.buildBody();\r\n  }\r\n\r\n  buildHeaderLeft() {\r\n    const { value } = this;\r\n    this.headerLeftEl.html(`${t('calendar.months')[value.getMonth()]} ${value.getFullYear()}`);\r\n  }\r\n\r\n  buildBody() {\r\n    const { value, cvalue, bodyEl } = this;\r\n    const mDays = monthDays(value.getFullYear(), value.getMonth(), cvalue);\r\n    const trs = mDays.map((it) => {\r\n      const tds = it.map((it1) => {\r\n        let cls = 'cell';\r\n        if (it1.disabled) cls += ' disabled';\r\n        if (it1.active) cls += ' active';\r\n        return h('td', '').child(\r\n          h('div', cls)\r\n            .on('click.stop', () => {\r\n              this.selectChange(it1.d);\r\n            })\r\n            .child(it1.d.getDate().toString()),\r\n        );\r\n      });\r\n      return h('tr', '').children(...tds);\r\n    });\r\n    bodyEl.html('').children(...trs);\r\n  }\r\n}\r\n","import Calendar from './calendar';\r\nimport { h } from './element';\r\nimport { cssPrefix } from '../config';\r\n\r\nexport default class Datepicker {\r\n  constructor() {\r\n    this.calendar = new Calendar(new Date());\r\n    this.el = h('div', `${cssPrefix}-datepicker`).child(\r\n      this.calendar.el,\r\n    ).hide();\r\n  }\r\n\r\n  setValue(date) {\r\n    // console.log(':::::::', date, typeof date, date instanceof string);\r\n    const { calendar } = this;\r\n    if (typeof date === 'string') {\r\n      // console.log(/^\\d{4}-\\d{1,2}-\\d{1,2}$/.test(date));\r\n      if (/^\\d{4}-\\d{1,2}-\\d{1,2}$/.test(date)) {\r\n        calendar.setValue(new Date(date.replace(new RegExp('-', 'g'), '/')));\r\n      }\r\n    } else if (date instanceof Date) {\r\n      calendar.setValue(date);\r\n    }\r\n    return this;\r\n  }\r\n\r\n  change(cb) {\r\n    this.calendar.selectChange = (d) => {\r\n      cb(d);\r\n      this.hide();\r\n    };\r\n  }\r\n\r\n  show() {\r\n    this.el.show();\r\n  }\r\n\r\n  hide() {\r\n    this.el.hide();\r\n  }\r\n}\r\n","//* global window */\r\nimport { h } from './element';\r\nimport Suggest from './suggest';\r\nimport Datepicker from './datepicker';\r\nimport { cssPrefix } from '../config';\r\n// import { mouseMoveUp } from '../event';\r\n\r\nfunction resetTextareaSize() {\r\n  const { inputText } = this;\r\n  if (!/^\\s*$/.test(inputText)) {\r\n    const {\r\n      textlineEl, textEl, areaOffset,\r\n    } = this;\r\n    const txts = inputText.split('\\n');\r\n    const maxTxtSize = Math.max(...txts.map(it => it.length));\r\n    const tlOffset = textlineEl.offset();\r\n    const fontWidth = tlOffset.width / inputText.length;\r\n    const tlineWidth = (maxTxtSize + 1) * fontWidth + 5;\r\n    const maxWidth = this.viewFn().width - areaOffset.left - fontWidth;\r\n    let h1 = txts.length;\r\n    if (tlineWidth > areaOffset.width) {\r\n      let twidth = tlineWidth;\r\n      if (tlineWidth > maxWidth) {\r\n        twidth = maxWidth;\r\n        h1 += parseInt(tlineWidth / maxWidth, 10);\r\n        h1 += (tlineWidth % maxWidth) > 0 ? 1 : 0;\r\n      }\r\n      textEl.css('width', `${twidth}px`);\r\n    }\r\n    h1 *= this.rowHeight;\r\n    if (h1 > areaOffset.height) {\r\n      textEl.css('height', `${h1}px`);\r\n    }\r\n  }\r\n}\r\n\r\nfunction insertText({ target }, itxt) {\r\n  const { value, selectionEnd } = target;\r\n  const ntxt = `${value.slice(0, selectionEnd)}${itxt}${value.slice(selectionEnd)}`;\r\n  target.value = ntxt;\r\n  target.setSelectionRange(selectionEnd + 1, selectionEnd + 1);\r\n\r\n  this.inputText = ntxt;\r\n  this.textlineEl.html(ntxt);\r\n  resetTextareaSize.call(this);\r\n}\r\n\r\nfunction keydownEventHandler(evt) {\r\n  const { keyCode, altKey } = evt;\r\n  if (keyCode !== 13 && keyCode !== 9) evt.stopPropagation();\r\n  if (keyCode === 13 && altKey) {\r\n    insertText.call(this, evt, '\\n');\r\n    evt.stopPropagation();\r\n  }\r\n  if (keyCode === 13 && !altKey) evt.preventDefault();\r\n}\r\n\r\nfunction inputEventHandler(evt) {\r\n  const v = evt.target.value;\r\n  // console.log(evt, 'v:', v);\r\n  const { suggest, textlineEl, validator } = this;\r\n  const { cell } = this;\r\n  if (cell !== null) {\r\n    if (('editable' in cell && cell.editable === true) || (cell.editable === undefined)) {\r\n      this.inputText = v;\r\n      if (validator) {\r\n        if (validator.type === 'list') {\r\n          suggest.search(v);\r\n        } else {\r\n          suggest.hide();\r\n        }\r\n      } else {\r\n        const start = v.lastIndexOf('=');\r\n        if (start !== -1) {\r\n          suggest.search(v.substring(start + 1));\r\n        } else {\r\n          suggest.hide();\r\n        }\r\n      }\r\n      textlineEl.html(v);\r\n      resetTextareaSize.call(this);\r\n      this.change('input', v);\r\n    } else {\r\n      evt.target.value = cell.text || '';\r\n    }\r\n  } else {\r\n    this.inputText = v;\r\n    if (validator) {\r\n      if (validator.type === 'list') {\r\n        suggest.search(v);\r\n      } else {\r\n        suggest.hide();\r\n      }\r\n    } else {\r\n      const start = v.lastIndexOf('=');\r\n      if (start !== -1) {\r\n        suggest.search(v.substring(start + 1));\r\n      } else {\r\n        suggest.hide();\r\n      }\r\n    }\r\n    textlineEl.html(v);\r\n    resetTextareaSize.call(this);\r\n    this.change('input', v);\r\n  }\r\n}\r\n\r\nfunction setTextareaRange(position) {\r\n  const { el } = this.textEl;\r\n  setTimeout(() => {\r\n    el.focus();\r\n    el.setSelectionRange(position, position);\r\n  }, 0);\r\n}\r\n\r\nfunction setText(text, position) {\r\n  const { textEl, textlineEl } = this;\r\n  // firefox bug\r\n  textEl.el.blur();\r\n\r\n  textEl.val(text);\r\n  textlineEl.html(text);\r\n  setTextareaRange.call(this, position);\r\n}\r\n\r\nfunction suggestItemClick(it) {\r\n  const { inputText, validator } = this;\r\n  let position = 0;\r\n  if (validator && validator.type === 'list') {\r\n    this.inputText = it;\r\n    position = this.inputText.length;\r\n  } else {\r\n    const start = inputText.lastIndexOf('=');\r\n    const sit = inputText.substring(0, start + 1);\r\n    let eit = inputText.substring(start + 1);\r\n    if (eit.indexOf(')') !== -1) {\r\n      eit = eit.substring(eit.indexOf(')'));\r\n    } else {\r\n      eit = '';\r\n    }\r\n    this.inputText = `${sit + it.key}(`;\r\n    // console.log('inputText:', this.inputText);\r\n    position = this.inputText.length;\r\n    this.inputText += `)${eit}`;\r\n  }\r\n  setText.call(this, this.inputText, position);\r\n}\r\n\r\nfunction resetSuggestItems() {\r\n  this.suggest.setItems(this.formulas);\r\n}\r\n\r\nfunction dateFormat(d) {\r\n  let month = d.getMonth() + 1;\r\n  let date = d.getDate();\r\n  if (month < 10) month = `0${month}`;\r\n  if (date < 10) date = `0${date}`;\r\n  return `${d.getFullYear()}-${month}-${date}`;\r\n}\r\n\r\nexport default class Editor {\r\n  constructor(formulas, viewFn, rowHeight) {\r\n    this.viewFn = viewFn;\r\n    this.rowHeight = rowHeight;\r\n    this.formulas = formulas;\r\n    this.suggest = new Suggest(formulas, (it) => {\r\n      suggestItemClick.call(this, it);\r\n    });\r\n    this.datepicker = new Datepicker();\r\n    this.datepicker.change((d) => {\r\n      // console.log('d:', d);\r\n      this.setText(dateFormat(d));\r\n      this.clear();\r\n    });\r\n    this.areaEl = h('div', `${cssPrefix}-editor-area`)\r\n      .children(\r\n        this.textEl = h('textarea', '')\r\n          .on('input', evt => inputEventHandler.call(this, evt))\r\n          .on('paste.stop', () => {})\r\n          .on('keydown', evt => keydownEventHandler.call(this, evt)),\r\n        this.textlineEl = h('div', 'textline'),\r\n        this.suggest.el,\r\n        this.datepicker.el,\r\n      )\r\n      .on('mousemove.stop', () => {})\r\n      .on('mousedown.stop', () => {});\r\n    this.el = h('div', `${cssPrefix}-editor`)\r\n      .child(this.areaEl).hide();\r\n    this.suggest.bindInputEvents(this.textEl);\r\n\r\n    this.areaOffset = null;\r\n    this.freeze = { w: 0, h: 0 };\r\n    this.cell = null;\r\n    this.inputText = '';\r\n    this.change = () => {};\r\n  }\r\n\r\n  setFreezeLengths(width, height) {\r\n    this.freeze.w = width;\r\n    this.freeze.h = height;\r\n  }\r\n\r\n  clear() {\r\n    // const { cell } = this;\r\n    // const cellText = (cell && cell.text) || '';\r\n    if (this.inputText !== '') {\r\n      this.change('finished', this.inputText);\r\n    }\r\n    this.cell = null;\r\n    this.areaOffset = null;\r\n    this.inputText = '';\r\n    this.el.hide();\r\n    this.textEl.val('');\r\n    this.textlineEl.html('');\r\n    resetSuggestItems.call(this);\r\n    this.datepicker.hide();\r\n  }\r\n\r\n  setOffset(offset, suggestPosition = 'top') {\r\n    const {\r\n      textEl, areaEl, suggest, freeze, el,\r\n    } = this;\r\n    if (offset) {\r\n      this.areaOffset = offset;\r\n      const {\r\n        left, top, width, height, l, t,\r\n      } = offset;\r\n      // console.log('left:', left, ',top:', top, ', freeze:', freeze);\r\n      const elOffset = { left: 0, top: 0 };\r\n      // top left\r\n      if (freeze.w > l && freeze.h > t) {\r\n        //\r\n      } else if (freeze.w < l && freeze.h < t) {\r\n        elOffset.left = freeze.w;\r\n        elOffset.top = freeze.h;\r\n      } else if (freeze.w > l) {\r\n        elOffset.top = freeze.h;\r\n      } else if (freeze.h > t) {\r\n        elOffset.left = freeze.w;\r\n      }\r\n      el.offset(elOffset);\r\n      areaEl.offset({ left: left - elOffset.left - 0.8, top: top - elOffset.top - 0.8 });\r\n      textEl.offset({ width: width - 9 + 0.8, height: height - 3 + 0.8 });\r\n      const sOffset = { left: 0 };\r\n      sOffset[suggestPosition] = height;\r\n      suggest.setOffset(sOffset);\r\n      suggest.hide();\r\n    }\r\n  }\r\n\r\n  setCell(cell, validator) {\r\n    if (cell && cell.editable === false) return;\r\n\r\n    // console.log('::', validator);\r\n    const { el, datepicker, suggest } = this;\r\n    el.show();\r\n    this.cell = cell;\r\n    const text = (cell && cell.text) || '';\r\n    this.setText(text);\r\n\r\n    this.validator = validator;\r\n    if (validator) {\r\n      const { type } = validator;\r\n      if (type === 'date') {\r\n        datepicker.show();\r\n        if (!/^\\s*$/.test(text)) {\r\n          datepicker.setValue(text);\r\n        }\r\n      }\r\n      if (type === 'list') {\r\n        suggest.setItems(validator.values());\r\n        suggest.search('');\r\n      }\r\n    }\r\n  }\r\n\r\n  setText(text) {\r\n    this.inputText = text;\r\n    // console.log('text>>:', text);\r\n    setText.call(this, text, text.length);\r\n    resetTextareaSize.call(this);\r\n  }\r\n}\r\n","import {h} from './element';\r\nimport {bindClickoutside, unbindClickoutside} from './event';\r\nimport {cssPrefix} from '../config';\r\nimport {tf} from '../locale/locale';\r\n\r\nconst menuItems = [\r\n    {key: 'copy', title: tf('contextmenu.copy'), label: 'Ctrl+C'},\r\n    {key: 'cut', title: tf('contextmenu.cut'), label: 'Ctrl+X'},\r\n    {key: 'paste', title: tf('contextmenu.paste'), label: 'Ctrl+V'},\r\n    {key: 'paste-value', title: tf('contextmenu.pasteValue'), label: 'Ctrl+Shift+V'},\r\n    {key: 'paste-format', title: tf('contextmenu.pasteFormat'), label: 'Ctrl+Alt+V'},\r\n    {key: 'divider'},\r\n    {key: 'insert-row', title: tf('contextmenu.insertRow')},\r\n    {key: 'insert-column', title: tf('contextmenu.insertColumn')},\r\n    {key: 'divider'},\r\n    {key: 'delete-row', title: tf('contextmenu.deleteRow')},\r\n    {key: 'delete-column', title: tf('contextmenu.deleteColumn')},\r\n    {key: 'delete-cell-text', title: tf('contextmenu.deleteCellText')},\r\n    /*\r\n    {key: 'hide', title: tf('contextmenu.hide')},\r\n    {key: 'divider'},\r\n    {key: 'validation', title: tf('contextmenu.validation')},\r\n    {key: 'divider'},\r\n    {key: 'cell-printable', title: tf('contextmenu.cellprintable')},\r\n    {key: 'cell-non-printable', title: tf('contextmenu.cellnonprintable')},\r\n    {key: 'divider'},\r\n    {key: 'cell-editable', title: tf('contextmenu.celleditable')},\r\n    {key: 'cell-non-editable', title: tf('contextmenu.cellnoneditable')},\r\n     */\r\n];\r\n\r\nfunction buildMenuItem(item) {\r\n    if (item.key === 'divider') {\r\n        return h('div', `${cssPrefix}-item divider`);\r\n    }\r\n    const r = h('div', `${cssPrefix}-item`)\r\n        .on('click', () => {\r\n            this.itemClick(item.key, item);\r\n            this.hide();\r\n        })\r\n        .children(\r\n            item.title(),\r\n            h('div', 'label').child(item.label || ''),\r\n        );\r\n    r.data.onShow = item.onShow\r\n    return r\r\n}\r\n\r\nfunction buildMenu(sheet) {\r\n    // return menuItems.map(it => buildMenuItem.call(this, it));\r\n    const menus = []\r\n    if (sheet?.options?.extendContextMenu?.top) {\r\n        const top = sheet.options.extendContextMenu.top\r\n        for (let i = 0; i < top.length; i++) {\r\n            menus.push(buildMenuItem.call(this, top[i]))\r\n        }\r\n    }\r\n    for (let i = 0; i < menuItems.length; i++) {\r\n        menus.push(buildMenuItem.call(this, menuItems[i]))\r\n    }\r\n    if (sheet?.options?.extendContextMenu?.bottom) {\r\n        const bottom = sheet.options.extendContextMenu.bottom\r\n        for (let i = 0; i < bottom.length; i++) {\r\n            menus.push(buildMenuItem.call(this, bottom[i]))\r\n        }\r\n    }\r\n    return menus\r\n}\r\n\r\nexport default class ContextMenu {\r\n    constructor(viewFn, isHide = false, sheet) {\r\n        this.menuItems = buildMenu.call(this, sheet);\r\n        this.el = h('div', `${cssPrefix}-contextmenu`)\r\n            .children(...this.menuItems)\r\n            .hide();\r\n        this.viewFn = viewFn;\r\n        this.itemClick = () => {\r\n        };\r\n        this.isHide = isHide;\r\n        this.setMode('range');\r\n    }\r\n\r\n    // row-col: the whole rows or the whole cols\r\n    // range: select range\r\n    setMode(mode, opt) {\r\n        const hideEl = this.menuItems[12];\r\n        if (mode === 'row-col') {\r\n            hideEl?.show();\r\n        } else {\r\n            hideEl?.hide();\r\n        }\r\n\r\n        if (opt) {\r\n            const {mode: mode2, ri, ci} = opt\r\n            for (let i = 0; i < this.menuItems.length; i++) {\r\n                if (typeof this.menuItems[i].data.onShow === 'function') {\r\n                    this.menuItems[i].data.onShow.call(this.menuItems[i], ri, ci)\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    hide() {\r\n        const {el} = this;\r\n        el.hide();\r\n        unbindClickoutside(el);\r\n    }\r\n\r\n    setPosition(x, y) {\r\n        if (this.isHide) return;\r\n        const {el} = this;\r\n        const {width} = el.show().offset();\r\n        const view = this.viewFn();\r\n        const vhf = view.height / 2;\r\n        let left = x;\r\n        if (view.width - x <= width) {\r\n            left -= width;\r\n        }\r\n        el.css('left', `${left}px`);\r\n        if (y > vhf) {\r\n            el.css('bottom', `${view.height - y}px`)\r\n                .css('max-height', `${y}px`)\r\n                .css('top', 'auto');\r\n        } else {\r\n            el.css('top', `${y}px`)\r\n                .css('max-height', `${view.height - y}px`)\r\n                .css('bottom', 'auto');\r\n        }\r\n        bindClickoutside(el);\r\n    }\r\n}\r\n","// docs\r\nimport './_.prototypes';\r\n\r\n/** default font list\r\n * @type {BaseFont[]}\r\n */\r\nconst baseFonts = [\r\n    {key: 'Arial', title: 'Arial'},\r\n    {key: 'divider'},\r\n    {key: \"宋体\", title: \"宋体\"},\r\n    {key: \"黑体\", title: \"黑体\"},\r\n    {key: \"仿宋\", title: \"仿宋\"},\r\n    {key: \"楷体\", title: \"楷体\"},\r\n    {key: 'Courier New', title: 'Courier New'},\r\n];\r\n\r\n/** default fontSize list\r\n * @type {FontSize[]}\r\n */\r\nconst fontSizes = [\r\n    {pt: 7.5, px: 10},\r\n    {pt: 8, px: 11},\r\n    {pt: 9, px: 12},\r\n    {pt: 10, px: 13},\r\n    {pt: 10.5, px: 14},\r\n    {pt: 11, px: 15},\r\n    {pt: 12, px: 16},\r\n    {pt: 14, px: 18.7},\r\n    {pt: 15, px: 20},\r\n    {pt: 16, px: 21.3},\r\n    {pt: 18, px: 24},\r\n    {pt: 22, px: 29.3},\r\n    {pt: 24, px: 32},\r\n    {pt: 26, px: 34.7},\r\n    {pt: 36, px: 48},\r\n    {pt: 42, px: 56},\r\n    // { pt: 54, px: 71.7 },\r\n    // { pt: 63, px: 83.7 },\r\n    // { pt: 72, px: 95.6 },\r\n];\r\n\r\n/** map pt to px\r\n * @date 2019-10-10\r\n * @param {fontsizePT} pt\r\n * @returns {fontsizePX}\r\n */\r\nfunction getFontSizePxByPt(pt) {\r\n    for (let i = 0; i < fontSizes.length; i += 1) {\r\n        const fontSize = fontSizes[i];\r\n        if (fontSize.pt === pt) {\r\n            return fontSize.px;\r\n        }\r\n    }\r\n    return pt;\r\n}\r\n\r\n/** transform baseFonts to map\r\n * @date 2019-10-10\r\n * @param {BaseFont[]} [ary=[]]\r\n * @returns {object}\r\n */\r\nfunction fonts(ary = []) {\r\n    const map = {};\r\n    baseFonts.concat(ary).forEach((f) => {\r\n        map[f.key] = f;\r\n    });\r\n    return map;\r\n}\r\n\r\nexport default {};\r\nexport {\r\n    fontSizes,\r\n    fonts,\r\n    baseFonts,\r\n    getFontSizePxByPt,\r\n};\r\n","import { expr2xy, xy2expr } from './alphabet';\r\nimport { numberCalc } from './helper';\r\n\r\n// Converting infix expression to a suffix expression\r\n// src: AVERAGE(SUM(A1,A2), B1) + 50 + B20\r\n// return: [A1, A2], SUM[, B1],AVERAGE,50,+,B20,+\r\nconst infixExprToSuffixExpr = (src) => {\r\n  const operatorStack = [];\r\n  const stack = [];\r\n  let subStrs = []; // SUM, A1, B2, 50 ...\r\n  let fnArgType = 0; // 1 => , 2 => :\r\n  let fnArgOperator = '';\r\n  let fnArgsLen = 1; // A1,A2,A3...\r\n  let oldc = '';\r\n  for (let i = 0; i < src.length; i += 1) {\r\n    const c = src.charAt(i);\r\n    if (c !== ' ') {\r\n      if (c >= 'a' && c <= 'z') {\r\n        subStrs.push(c.toUpperCase());\r\n      } else if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || c === '.') {\r\n        subStrs.push(c);\r\n      } else if (c === '\"') {\r\n        i += 1;\r\n        while (src.charAt(i) !== '\"') {\r\n          subStrs.push(src.charAt(i));\r\n          i += 1;\r\n        }\r\n        stack.push(`\"${subStrs.join('')}`);\r\n        subStrs = [];\r\n      } else if (c === '-' && /[+\\-*/,(]/.test(oldc)) {\r\n        subStrs.push(c);\r\n      } else {\r\n        // console.log('subStrs:', subStrs.join(''), stack);\r\n        if (c !== '(' && subStrs.length > 0) {\r\n          stack.push(subStrs.join(''));\r\n        }\r\n        if (c === ')') {\r\n          let c1 = operatorStack.pop();\r\n          if (fnArgType === 2) {\r\n            // fn argument range => A1:B5\r\n            try {\r\n              const [ex, ey] = expr2xy(stack.pop());\r\n              const [sx, sy] = expr2xy(stack.pop());\r\n              // console.log('::', sx, sy, ex, ey);\r\n              let rangelen = 0;\r\n              for (let x = sx; x <= ex; x += 1) {\r\n                for (let y = sy; y <= ey; y += 1) {\r\n                  stack.push(xy2expr(x, y));\r\n                  rangelen += 1;\r\n                }\r\n              }\r\n              stack.push([c1, rangelen]);\r\n            } catch (e) {\r\n              // console.log(e);\r\n            }\r\n          } else if (fnArgType === 1 || fnArgType === 3) {\r\n            if (fnArgType === 3) stack.push(fnArgOperator);\r\n            // fn argument => A1,A2,B5\r\n            stack.push([c1, fnArgsLen]);\r\n            fnArgsLen = 1;\r\n          } else {\r\n            // console.log('c1:', c1, fnArgType, stack, operatorStack);\r\n            while (c1 !== '(') {\r\n              stack.push(c1);\r\n              if (operatorStack.length <= 0) break;\r\n              c1 = operatorStack.pop();\r\n            }\r\n          }\r\n          fnArgType = 0;\r\n        } else if (c === '=' || c === '>' || c === '<') {\r\n          const nc = src.charAt(i + 1);\r\n          fnArgOperator = c;\r\n          if (nc === '=' || nc === '-') {\r\n            fnArgOperator += nc;\r\n            i += 1;\r\n          }\r\n          fnArgType = 3;\r\n        } else if (c === ':') {\r\n          fnArgType = 2;\r\n        } else if (c === ',') {\r\n          if (fnArgType === 3) {\r\n            stack.push(fnArgOperator);\r\n          }\r\n          fnArgType = 1;\r\n          fnArgsLen += 1;\r\n        } else if (c === '(' && subStrs.length > 0) {\r\n          // function\r\n          operatorStack.push(subStrs.join(''));\r\n        } else {\r\n          // priority: */ > +-\r\n          // console.log('xxxx:', operatorStack, c, stack);\r\n          if (operatorStack.length > 0 && (c === '+' || c === '-')) {\r\n            let top = operatorStack[operatorStack.length - 1];\r\n            if (top !== '(') stack.push(operatorStack.pop());\r\n            if (top === '*' || top === '/') {\r\n              while (operatorStack.length > 0) {\r\n                top = operatorStack[operatorStack.length - 1];\r\n                if (top !== '(') stack.push(operatorStack.pop());\r\n                else break;\r\n              }\r\n            }\r\n          } else if (operatorStack.length > 0) {\r\n            const top = operatorStack[operatorStack.length - 1];\r\n            if (top === '*' || top === '/') stack.push(operatorStack.pop());\r\n          }\r\n          operatorStack.push(c);\r\n        }\r\n        subStrs = [];\r\n      }\r\n      oldc = c;\r\n    }\r\n  }\r\n  if (subStrs.length > 0) {\r\n    stack.push(subStrs.join(''));\r\n  }\r\n  while (operatorStack.length > 0) {\r\n    stack.push(operatorStack.pop());\r\n  }\r\n  return stack;\r\n};\r\n\r\nconst evalSubExpr = (subExpr, cellRender) => {\r\n  const [fl] = subExpr;\r\n  let expr = subExpr;\r\n  if (fl === '\"') {\r\n    return subExpr.substring(1);\r\n  }\r\n  let ret = 1;\r\n  if (fl === '-') {\r\n    expr = subExpr.substring(1);\r\n    ret = -1;\r\n  }\r\n  if (expr[0] >= '0' && expr[0] <= '9') {\r\n    return ret * Number(expr);\r\n  }\r\n  const [x, y] = expr2xy(expr);\r\n  return ret * cellRender(x, y);\r\n};\r\n\r\n// evaluate the suffix expression\r\n// srcStack: <= infixExprToSufixExpr\r\n// formulaMap: {'SUM': {}, ...}\r\n// cellRender: (x, y) => {}\r\nconst evalSuffixExpr = (srcStack, formulaMap, cellRender, cellList) => {\r\n  const stack = [];\r\n  // console.log(':::::formulaMap:', formulaMap);\r\n  for (let i = 0; i < srcStack.length; i += 1) {\r\n    // console.log(':::>>>', srcStack[i]);\r\n    const expr = srcStack[i];\r\n    const fc = expr[0];\r\n    if (expr === '+') {\r\n      const top = stack.pop();\r\n      stack.push(numberCalc('+', stack.pop(), top));\r\n    } else if (expr === '-') {\r\n      if (stack.length === 1) {\r\n        const top = stack.pop();\r\n        stack.push(numberCalc('*', top, -1));\r\n      } else {\r\n        const top = stack.pop();\r\n        stack.push(numberCalc('-', stack.pop(), top));\r\n      }\r\n    } else if (expr === '*') {\r\n      stack.push(numberCalc('*', stack.pop(), stack.pop()));\r\n    } else if (expr === '/') {\r\n      const top = stack.pop();\r\n      stack.push(numberCalc('/', stack.pop(), top));\r\n    } else if (fc === '=' || fc === '>' || fc === '<') {\r\n      let top = stack.pop();\r\n      if (!Number.isNaN(top)) top = Number(top);\r\n      let left = stack.pop();\r\n      if (!Number.isNaN(left)) left = Number(left);\r\n      let ret = false;\r\n      if (fc === '=') {\r\n        ret = (left === top);\r\n      } else if (expr === '>') {\r\n        ret = (left > top);\r\n      } else if (expr === '>=') {\r\n        ret = (left >= top);\r\n      } else if (expr === '<') {\r\n        ret = (left < top);\r\n      } else if (expr === '<=') {\r\n        ret = (left <= top);\r\n      }\r\n      stack.push(ret);\r\n    } else if (Array.isArray(expr)) {\r\n      const [formula, len] = expr;\r\n      const params = [];\r\n      for (let j = 0; j < len; j += 1) {\r\n        params.push(stack.pop());\r\n      }\r\n      stack.push(formulaMap[formula].render(params.reverse()));\r\n    } else {\r\n      if (cellList.includes(expr)) {\r\n        return 0;\r\n      }\r\n      if ((fc >= 'a' && fc <= 'z') || (fc >= 'A' && fc <= 'Z')) {\r\n        cellList.push(expr);\r\n      }\r\n      stack.push(evalSubExpr(expr, cellRender));\r\n      cellList.pop();\r\n    }\r\n    // console.log('stack:', stack);\r\n  }\r\n  return stack[0];\r\n};\r\n\r\nconst cellRender = (src, formulaMap, getCellText, cellList = []) => {\r\n  if (src[0] === '=') {\r\n    const stack = infixExprToSuffixExpr(src.substring(1));\r\n    if (stack.length <= 0) return src;\r\n    return evalSuffixExpr(\r\n      stack,\r\n      formulaMap,\r\n      (x, y) => cellRender(getCellText(x, y), formulaMap, getCellText, cellList),\r\n      cellList,\r\n    );\r\n  }\r\n  return src;\r\n};\r\n\r\nexport default {\r\n  render: cellRender,\r\n};\r\nexport {\r\n  infixExprToSuffixExpr,\r\n};\r\n","/**\r\n  formula:\r\n    key\r\n    title\r\n    render\r\n*/\r\n/**\r\n * @typedef {object} Formula\r\n * @property {string} key\r\n * @property {function} title\r\n * @property {function} render\r\n */\r\nimport { tf } from '../locale/locale';\r\nimport { numberCalc } from './helper';\r\n\r\n/** @type {Formula[]} */\r\nconst baseFormulas = [\r\n  {\r\n    key: 'SUM',\r\n    title: tf('formula.sum'),\r\n    render: ary => ary.reduce((a, b) => numberCalc('+', a, b), 0),\r\n  },\r\n  {\r\n    key: 'AVERAGE',\r\n    title: tf('formula.average'),\r\n    render: ary => ary.reduce((a, b) => Number(a) + Number(b), 0) / ary.length,\r\n  },\r\n  {\r\n    key: 'MAX',\r\n    title: tf('formula.max'),\r\n    render: ary => Math.max(...ary.map(v => Number(v))),\r\n  },\r\n  {\r\n    key: 'MIN',\r\n    title: tf('formula.min'),\r\n    render: ary => Math.min(...ary.map(v => Number(v))),\r\n  },\r\n  {\r\n    key: 'IF',\r\n    title: tf('formula._if'),\r\n    render: ([b, t, f]) => (b ? t : f),\r\n  },\r\n  {\r\n    key: 'AND',\r\n    title: tf('formula.and'),\r\n    render: ary => ary.every(it => it),\r\n  },\r\n  {\r\n    key: 'OR',\r\n    title: tf('formula.or'),\r\n    render: ary => ary.some(it => it),\r\n  },\r\n  {\r\n    key: 'CONCAT',\r\n    title: tf('formula.concat'),\r\n    render: ary => ary.join(''),\r\n  },\r\n  /* support:  1 + A1 + B2 * 3\r\n  {\r\n    key: 'DIVIDE',\r\n    title: tf('formula.divide'),\r\n    render: ary => ary.reduce((a, b) => Number(a) / Number(b)),\r\n  },\r\n  {\r\n    key: 'PRODUCT',\r\n    title: tf('formula.product'),\r\n    render: ary => ary.reduce((a, b) => Number(a) * Number(b),1),\r\n  },\r\n  {\r\n    key: 'SUBTRACT',\r\n    title: tf('formula.subtract'),\r\n    render: ary => ary.reduce((a, b) => Number(a) - Number(b)),\r\n  },\r\n  */\r\n];\r\n\r\nconst formulas = baseFormulas;\r\n\r\n// const formulas = (formulaAry = []) => {\r\n//   const formulaMap = {};\r\n//   baseFormulas.concat(formulaAry).forEach((f) => {\r\n//     formulaMap[f.key] = f;\r\n//   });\r\n//   return formulaMap;\r\n// };\r\nconst formulam = {};\r\nbaseFormulas.forEach((f) => {\r\n  formulam[f.key] = f;\r\n});\r\n\r\nexport default {\r\n};\r\n\r\nexport {\r\n  formulam,\r\n  formulas,\r\n  baseFormulas,\r\n};\r\n","import {tf} from '../locale/locale';\r\n\r\nconst formatStringRender = v => v;\r\n\r\nconst formatNumberRender = (v) => {\r\n    // match \"-12.1\" or \"12\" or \"12.1\"\r\n    if (/^(-?\\d*.?\\d*)$/.test(v)) {\r\n        const v1 = Number(v).toFixed(2).toString();\r\n        const [first, ...parts] = v1.split('\\\\.');\r\n        return [first.replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,'), ...parts];\r\n    }\r\n    return v;\r\n};\r\n\r\nconst baseFormats = [\r\n    {\r\n        key: 'normal',\r\n        title: tf('format.normal'),\r\n        type: 'string',\r\n        render: formatStringRender,\r\n    },\r\n    { key: 'divider' },\r\n    // {\r\n    //     key: 'text',\r\n    //     title: tf('format.text'),\r\n    //     type: 'string',\r\n    //     render: formatStringRender,\r\n    // },\r\n    // {\r\n    //     key: 'number',\r\n    //     title: tf('format.number'),\r\n    //     type: 'number',\r\n    //     label: '1,000.12',\r\n    //     render: formatNumberRender,\r\n    // },\r\n    // {\r\n    //     key: 'percent',\r\n    //     title: tf('format.percent'),\r\n    //     type: 'number',\r\n    //     label: '10.12%',\r\n    //     render: v => `${v}%`,\r\n    // },\r\n    // {\r\n    //     key: 'rmb',\r\n    //     title: tf('format.rmb'),\r\n    //     type: 'number',\r\n    //     label: '￥10.00',\r\n    //     render: v => `￥${formatNumberRender(v)}`,\r\n    // },\r\n    // {\r\n    //     key: 'usd',\r\n    //     title: tf('format.usd'),\r\n    //     type: 'number',\r\n    //     label: '$10.00',\r\n    //     render: v => `$${formatNumberRender(v)}`,\r\n    // },\r\n    // {\r\n    //     key: 'eur',\r\n    //     title: tf('format.eur'),\r\n    //     type: 'number',\r\n    //     label: '€10.00',\r\n    //     render: v => `€${formatNumberRender(v)}`,\r\n    // },\r\n    // {\r\n    //     key: 'date',\r\n    //     title: tf('format.date'),\r\n    //     type: 'date',\r\n    //     label: '26/09/2008',\r\n    //     render: formatStringRender,\r\n    // },\r\n    // {\r\n    //     key: 'time',\r\n    //     title: tf('format.time'),\r\n    //     type: 'date',\r\n    //     label: '15:59:00',\r\n    //     render: formatStringRender,\r\n    // },\r\n    // {\r\n    //     key: 'datetime',\r\n    //     title: tf('format.datetime'),\r\n    //     type: 'date',\r\n    //     label: '26/09/2008 15:59:00',\r\n    //     render: formatStringRender,\r\n    // },\r\n    // {\r\n    //     key: 'duration',\r\n    //     title: tf('format.duration'),\r\n    //     type: 'date',\r\n    //     label: '24:01:00',\r\n    //     render: formatStringRender,\r\n    // },\r\n    // yvan: 69码-二维码-图片\r\n    {\r\n        key: 'barcode',\r\n        title: tf('format.barcode'),\r\n        type: 'barcode',\r\n        label: 'barcode',\r\n        render: formatStringRender,\r\n    },\r\n    {\r\n        key: 'qrcode',\r\n        title: tf('format.qrcode'),\r\n        type: 'qrcode',\r\n        label: 'qrcode',\r\n        render: formatStringRender,\r\n    },\r\n    {\r\n        key: 'image',\r\n        title: tf('format.image'),\r\n        type: 'image',\r\n        label: 'image',\r\n        render: formatStringRender,\r\n    },\r\n];\r\n\r\n// const formats = (ary = []) => {\r\n//   const map = {};\r\n//   baseFormats.concat(ary).forEach((f) => {\r\n//     map[f.key] = f;\r\n//   });\r\n//   return map;\r\n// };\r\nconst formatm = {};\r\nbaseFormats.forEach((f) => {\r\n    formatm[f.key] = f;\r\n});\r\n\r\nexport default {};\r\nexport {\r\n    formatm,\r\n    baseFormats,\r\n};\r\n","/* global window */\r\nfunction dpr() {\r\n    return window.devicePixelRatio || 1;\r\n}\r\n\r\nfunction thinLineWidth() {\r\n    return dpr() - 0.5;\r\n}\r\n\r\nfunction npx(px) {\r\n    return parseInt(px * dpr(), 10);\r\n}\r\n\r\nfunction npxLine(px) {\r\n    const n = npx(px);\r\n    return n > 0 ? n - 0.5 : 0.5;\r\n}\r\n\r\nclass DrawBox {\r\n    constructor(x, y, w, h, padding = 0) {\r\n        this.x = x;\r\n        this.y = y;\r\n        this.width = w;\r\n        this.height = h;\r\n        this.padding = padding;\r\n        this.bgcolor = '#ffffff';\r\n        // border: [width, style, color]\r\n        this.borderTop = null;\r\n        this.borderRight = null;\r\n        this.borderBottom = null;\r\n        this.borderLeft = null;\r\n    }\r\n\r\n    setBorders({\r\n                   top, bottom, left, right,\r\n               }) {\r\n        if (top) this.borderTop = top;\r\n        if (right) this.borderRight = right;\r\n        if (bottom) this.borderBottom = bottom;\r\n        if (left) this.borderLeft = left;\r\n    }\r\n\r\n    innerWidth() {\r\n        return this.width - (this.padding * 2) - 2;\r\n    }\r\n\r\n    innerHeight() {\r\n        return this.height - (this.padding * 2) - 2;\r\n    }\r\n\r\n    textx(align) {\r\n        const {width, padding} = this;\r\n        let {x} = this;\r\n        if (align === 'left') {\r\n            x += padding;\r\n        } else if (align === 'center') {\r\n            x += width / 2;\r\n        } else if (align === 'right') {\r\n            x += width - padding;\r\n        }\r\n        return x;\r\n    }\r\n\r\n    texty(align, h) {\r\n        const {height, padding} = this;\r\n        let {y} = this;\r\n        if (align === 'top') {\r\n            y += padding;\r\n        } else if (align === 'middle') {\r\n            y += height / 2 - h / 2;\r\n        } else if (align === 'bottom') {\r\n            y += height - padding - h;\r\n        }\r\n        return y;\r\n    }\r\n\r\n    topxys() {\r\n        const {x, y, width} = this;\r\n        return [[x, y], [x + width, y]];\r\n    }\r\n\r\n    rightxys() {\r\n        const {\r\n            x, y, width, height,\r\n        } = this;\r\n        return [[x + width, y], [x + width, y + height]];\r\n    }\r\n\r\n    bottomxys() {\r\n        const {\r\n            x, y, width, height,\r\n        } = this;\r\n        return [[x, y + height], [x + width, y + height]];\r\n    }\r\n\r\n    leftxys() {\r\n        const {\r\n            x, y, height,\r\n        } = this;\r\n        return [[x, y], [x, y + height]];\r\n    }\r\n}\r\n\r\nfunction drawFontLine(type, tx, ty, align, valign, blheight, blwidth) {\r\n    const floffset = {x: 0, y: 0};\r\n    if (type === 'underline') {\r\n        if (valign === 'bottom') {\r\n            floffset.y = 0;\r\n        } else if (valign === 'top') {\r\n            floffset.y = -(blheight + 2);\r\n        } else {\r\n            floffset.y = -blheight / 2;\r\n        }\r\n    } else if (type === 'strike') {\r\n        if (valign === 'bottom') {\r\n            floffset.y = blheight / 2;\r\n        } else if (valign === 'top') {\r\n            floffset.y = -((blheight / 2) + 2);\r\n        }\r\n    }\r\n\r\n    if (align === 'center') {\r\n        floffset.x = blwidth / 2;\r\n    } else if (align === 'right') {\r\n        floffset.x = blwidth;\r\n    }\r\n    this.line(\r\n        [tx - floffset.x, ty - floffset.y],\r\n        [tx - floffset.x + blwidth, ty - floffset.y],\r\n    );\r\n}\r\n\r\nclass Draw {\r\n    constructor(el, width, height) {\r\n        this.el = el;\r\n        this.ctx = el.getContext('2d');\r\n        this.resize(width, height);\r\n        this.ctx.scale(dpr(), dpr());\r\n    }\r\n\r\n    resize(width, height) {\r\n        // console.log('dpr:', dpr);\r\n        this.el.style.width = `${width}px`;\r\n        this.el.style.height = `${height}px`;\r\n        this.el.width = npx(width);\r\n        this.el.height = npx(height);\r\n    }\r\n\r\n    clear() {\r\n        const {width, height} = this.el;\r\n        this.ctx.clearRect(0, 0, width, height);\r\n        return this;\r\n    }\r\n\r\n    attr(options) {\r\n        Object.assign(this.ctx, options);\r\n        return this;\r\n    }\r\n\r\n    save() {\r\n        this.ctx.save();\r\n        this.ctx.beginPath();\r\n        return this;\r\n    }\r\n\r\n    restore() {\r\n        this.ctx.restore();\r\n        return this;\r\n    }\r\n\r\n    beginPath() {\r\n        this.ctx.beginPath();\r\n        return this;\r\n    }\r\n\r\n    translate(x, y) {\r\n        this.ctx.translate(npx(x), npx(y));\r\n        return this;\r\n    }\r\n\r\n    scale(x, y) {\r\n        this.ctx.scale(x, y);\r\n        return this;\r\n    }\r\n\r\n    clearRect(x, y, w, h) {\r\n        this.ctx.clearRect(x, y, w, h);\r\n        return this;\r\n    }\r\n\r\n    fillRect(x, y, w, h) {\r\n        this.ctx.fillRect(npx(x) - 0.5, npx(y) - 0.5, npx(w), npx(h));\r\n        return this;\r\n    }\r\n\r\n    fillText(text, x, y) {\r\n        this.ctx.fillText(text, npx(x), npx(y));\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * yvan:绘制图形。\r\n     * 在这里本方法参考text方法的逻辑，当单元格为 radio, checkbox, date 时，在文字前添加相应的图形。\r\n     * @param {Object} cell - 单元格\r\n     * @param {Object} box - DrawBox\r\n     * @param {Number} fw - 行坐标宽度\r\n     * @param {Number} fh - 列坐标高度\r\n     * @param {Object} style - 样式\r\n     * @returns {Draw} CanvasRenderingContext2D 实例\r\n     */\r\n    geometry(cell, box, fw, fh, style, tx, ty) {\r\n        this.fillImage(cell, box, style, fw, fh, tx, ty);\r\n    }\r\n\r\n    /**\r\n     * yvan: 画图片。\r\n     * @param {*} box - 一个 DrawBox 对象\r\n     * @param cell - 单元格\r\n     * @param style - 样式\r\n     * @param {Number} fw - 行坐标宽度\r\n     * @param {Number} fh - 列坐标高度\r\n     */\r\n    fillImage(cell, box, style, fw, fh, tx, ty) {\r\n        const img = new Image();\r\n        if (style.format === 'image') {\r\n            img.src = cell.text;\r\n        } else if (style.format === 'qrcode') {\r\n            img.src = '/src/assets/qrcode.png'\r\n            // 'blob:http://minio.galaxis.yvanui.com/b998ff32-2110-4d79-a459-d65252c367c5'\r\n        } else if (style.format === 'barcode') {\r\n            img.src = '/src/assets/barcode.png'\r\n            // 'blob:http://minio.galaxis.yvanui.com/e636d38c-d0fa-4416-942a-0cd0a9c7f5f1'\r\n        }\r\n        img.onload = () => {\r\n            this.ctx.save();\r\n            const {x, y, width, height} = box;\r\n            // 计算左上角位置，为什么translate没有生效呢？因为异步……\r\n            const sx = x + fw + tx;\r\n            const sy = y + fh;\r\n            console.log('image', sx, sy, width, height)\r\n            this.ctx.drawImage(img, npx(sx), npx(sy), npx(width), npx(height));\r\n            this.ctx.restore();\r\n        };\r\n\r\n        return this;\r\n    }\r\n\r\n    /*\r\n      txt: render text\r\n      box: DrawBox\r\n      attr: {\r\n        align: left | center | right\r\n        valign: top | middle | bottom\r\n        color: '#333333',\r\n        strike: false,\r\n        font: {\r\n          name: 'Arial',\r\n          size: 14,\r\n          bold: false,\r\n          italic: false,\r\n        }\r\n      }\r\n      textWrap: text wrapping\r\n    */\r\n    text(mtxt, box, attr = {}, textWrap = true) {\r\n        const {ctx} = this;\r\n        const {\r\n            align, valign, font, color, strike, underline,\r\n        } = attr;\r\n        const tx = box.textx(align);\r\n        ctx.save();\r\n        ctx.beginPath();\r\n        this.attr({\r\n            textAlign: align,\r\n            textBaseline: valign,\r\n            font: `${font.italic ? 'italic' : ''} ${font.bold ? 'bold' : ''} ${npx(font.size)}px ${font.name}`,\r\n            fillStyle: color,\r\n            strokeStyle: color,\r\n        });\r\n        const txts = `${mtxt}`.split('\\n');\r\n        const biw = box.innerWidth();\r\n        const ntxts = [];\r\n        txts.forEach((it) => {\r\n            const txtWidth = ctx.measureText(it).width;\r\n            if (textWrap && txtWidth > npx(biw)) {\r\n                let textLine = {w: 0, len: 0, start: 0};\r\n                for (let i = 0; i < it.length; i += 1) {\r\n                    if (textLine.w >= npx(biw)) {\r\n                        ntxts.push(it.substr(textLine.start, textLine.len));\r\n                        textLine = {w: 0, len: 0, start: i};\r\n                    }\r\n                    textLine.len += 1;\r\n                    textLine.w += ctx.measureText(it[i]).width + 1;\r\n                }\r\n                if (textLine.len > 0) {\r\n                    ntxts.push(it.substr(textLine.start, textLine.len));\r\n                }\r\n            } else {\r\n                ntxts.push(it);\r\n            }\r\n        });\r\n        const txtHeight = (ntxts.length - 1) * (font.size + 2);\r\n        let ty = box.texty(valign, txtHeight);\r\n        ntxts.forEach((txt) => {\r\n            const txtWidth = ctx.measureText(txt).width;\r\n            this.fillText(txt, tx, ty);\r\n            if (strike) {\r\n                drawFontLine.call(this, 'strike', tx, ty, align, valign, font.size, txtWidth);\r\n            }\r\n            if (underline) {\r\n                drawFontLine.call(this, 'underline', tx, ty, align, valign, font.size, txtWidth);\r\n            }\r\n            ty += font.size + 2;\r\n        });\r\n        ctx.restore();\r\n        return this;\r\n    }\r\n\r\n    border(style, color) {\r\n        const {ctx} = this;\r\n        ctx.lineWidth = thinLineWidth;\r\n        ctx.strokeStyle = color;\r\n        // console.log('style:', style);\r\n        if (style === 'medium') {\r\n            ctx.lineWidth = npx(2) - 0.5;\r\n        } else if (style === 'thick') {\r\n            ctx.lineWidth = npx(3);\r\n        } else if (style === 'dashed') {\r\n            ctx.setLineDash([npx(3), npx(2)]);\r\n        } else if (style === 'dotted') {\r\n            ctx.setLineDash([npx(1), npx(1)]);\r\n        } else if (style === 'double') {\r\n            ctx.setLineDash([npx(2), 0]);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    line(...xys) {\r\n        const {ctx} = this;\r\n        if (xys.length > 1) {\r\n            ctx.beginPath();\r\n            const [x, y] = xys[0];\r\n            ctx.moveTo(npxLine(x), npxLine(y));\r\n            for (let i = 1; i < xys.length; i += 1) {\r\n                const [x1, y1] = xys[i];\r\n                ctx.lineTo(npxLine(x1), npxLine(y1));\r\n            }\r\n            ctx.stroke();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    strokeBorders(box) {\r\n        const {ctx} = this;\r\n        ctx.save();\r\n        // border\r\n        const {\r\n            borderTop, borderRight, borderBottom, borderLeft,\r\n        } = box;\r\n        if (borderTop) {\r\n            this.border(...borderTop);\r\n            // console.log('box.topxys:', box.topxys());\r\n            this.line(...box.topxys());\r\n        }\r\n        if (borderRight) {\r\n            this.border(...borderRight);\r\n            this.line(...box.rightxys());\r\n        }\r\n        if (borderBottom) {\r\n            this.border(...borderBottom);\r\n            this.line(...box.bottomxys());\r\n        }\r\n        if (borderLeft) {\r\n            this.border(...borderLeft);\r\n            this.line(...box.leftxys());\r\n        }\r\n        ctx.restore();\r\n    }\r\n\r\n    dropdown(box) {\r\n        const {ctx} = this;\r\n        const {\r\n            x, y, width, height,\r\n        } = box;\r\n        const sx = x + width - 15;\r\n        const sy = y + height - 15;\r\n        ctx.save();\r\n        ctx.beginPath();\r\n        ctx.moveTo(npx(sx), npx(sy));\r\n        ctx.lineTo(npx(sx + 8), npx(sy));\r\n        ctx.lineTo(npx(sx + 4), npx(sy + 6));\r\n        ctx.closePath();\r\n        ctx.fillStyle = 'rgba(0, 0, 0, .45)';\r\n        ctx.fill();\r\n        ctx.restore();\r\n    }\r\n\r\n    error(box) {\r\n        const {ctx} = this;\r\n        const {x, y, width} = box;\r\n        const sx = x + width - 1;\r\n        ctx.save();\r\n        ctx.beginPath();\r\n        ctx.moveTo(npx(sx - 8), npx(y - 1));\r\n        ctx.lineTo(npx(sx), npx(y - 1));\r\n        ctx.lineTo(npx(sx), npx(y + 8));\r\n        ctx.closePath();\r\n        ctx.fillStyle = 'rgba(255, 0, 0, .65)';\r\n        ctx.fill();\r\n        ctx.restore();\r\n    }\r\n\r\n    frozen(box) {\r\n        const {ctx} = this;\r\n        const {x, y, width} = box;\r\n        const sx = x + width - 1;\r\n        ctx.save();\r\n        ctx.beginPath();\r\n        ctx.moveTo(npx(sx - 8), npx(y - 1));\r\n        ctx.lineTo(npx(sx), npx(y - 1));\r\n        ctx.lineTo(npx(sx), npx(y + 8));\r\n        ctx.closePath();\r\n        ctx.fillStyle = 'rgba(0, 255, 0, .85)';\r\n        ctx.fill();\r\n        ctx.restore();\r\n    }\r\n\r\n    rect(box, dtextcb) {\r\n        const {ctx} = this;\r\n        const {\r\n            x, y, width, height, bgcolor,\r\n        } = box;\r\n        ctx.save();\r\n        ctx.beginPath();\r\n        ctx.fillStyle = bgcolor || '#fff';\r\n        ctx.rect(npxLine(x + 1), npxLine(y + 1), npx(width - 2), npx(height - 2));\r\n        ctx.clip();\r\n        ctx.fill();\r\n        dtextcb();\r\n        ctx.restore();\r\n    }\r\n}\r\n\r\nexport default {};\r\nexport {\r\n    Draw,\r\n    DrawBox,\r\n    thinLineWidth,\r\n    npx,\r\n};\r\n","import {stringAt} from '../core/alphabet';\r\nimport {getFontSizePxByPt} from '../core/font';\r\nimport _cell from '../core/cell';\r\nimport {formulam} from '../core/formula';\r\nimport {formatm} from '../core/format';\r\n\r\nimport {\r\n    Draw, DrawBox, thinLineWidth, npx,\r\n} from '../canvas/draw';\r\n// gobal var\r\nconst cellPaddingWidth = 0; // yvan:单元格内边距\r\nconst tableFixedHeaderCleanStyle = {fillStyle: '#f4f5f8'};\r\nconst tableGridStyle = {\r\n    fillStyle: '#fff',\r\n    lineWidth: thinLineWidth,\r\n    strokeStyle: '#e6e6e6',\r\n};\r\n\r\nfunction tableFixedHeaderStyle() {\r\n    return {\r\n        textAlign: 'center',\r\n        textBaseline: 'middle',\r\n        font: `500 ${npx(12)}px Source Sans Pro`,\r\n        fillStyle: '#585757',\r\n        lineWidth: thinLineWidth(),\r\n        strokeStyle: '#e6e6e6',\r\n    };\r\n}\r\n\r\nfunction getDrawBox(data, rindex, cindex, yoffset = 0) {\r\n    const {\r\n        left, top, width, height,\r\n    } = data.cellRect(rindex, cindex);\r\n    return new DrawBox(left, top + yoffset, width, height, cellPaddingWidth);\r\n}\r\n\r\n/*\r\nfunction renderCellBorders(bboxes, translateFunc) {\r\n  const { draw } = this;\r\n  if (bboxes) {\r\n    const rset = new Set();\r\n    // console.log('bboxes:', bboxes);\r\n    bboxes.forEach(({ ri, ci, box }) => {\r\n      if (!rset.has(ri)) {\r\n        rset.add(ri);\r\n        translateFunc(ri);\r\n      }\r\n      draw.strokeBorders(box);\r\n    });\r\n  }\r\n}\r\n*/\r\n\r\nexport function renderCell(draw, data, rindex, cindex, xoffset = 0, yoffset = 0) {\r\n    const {sortedRowMap, rows, cols} = data;\r\n    if (rows.isHide(rindex) || cols.isHide(cindex)) return;\r\n    let nrindex = rindex;\r\n    if (sortedRowMap.has(rindex)) {\r\n        nrindex = sortedRowMap.get(rindex);\r\n    }\r\n\r\n    const cell = data.getCell(nrindex, cindex);\r\n    if (cell === null) return;\r\n    let frozen = false;\r\n    if ('editable' in cell && cell.editable === false) {\r\n        frozen = true;\r\n    }\r\n\r\n    const style = data.getCellStyleOrDefault(nrindex, cindex);\r\n    const dbox = getDrawBox(data, rindex, cindex, yoffset);\r\n    dbox.bgcolor = style.bgcolor;\r\n    if (style.border !== undefined) {\r\n        dbox.setBorders(style.border);\r\n        // bboxes.push({ ri: rindex, ci: cindex, box: dbox });\r\n        draw.strokeBorders(dbox);\r\n    }\r\n    draw.rect(dbox, () => {\r\n        // render text\r\n        let cellText = '';\r\n        if (!data.settings.evalPaused) {\r\n            cellText = _cell.render(cell.text || '', formulam, (y, x) => (data.getCellTextOrDefault(x, y)));\r\n        } else {\r\n            cellText = cell.text || '';\r\n        }\r\n        if (style.format) {\r\n            // console.log(data.formatm, '>>', cell.format);\r\n            cellText = formatm[style.format].render(cellText);\r\n        }\r\n        const font = Object.assign({}, style.font);\r\n        font.size = getFontSizePxByPt(font.size);\r\n        // console.log('style:', style);\r\n        // yvan:画图\r\n        if (style.format === 'barcode' || style.format === 'qrcode' || style.format === 'image') {\r\n            let fw = cols.indexWidth;\r\n            let fh = rows.height;\r\n            draw.geometry(cell, dbox, fw, fh, style, xoffset, yoffset)\r\n        } else {\r\n            draw.text(cellText, dbox, {\r\n                align: style.align,\r\n                valign: style.valign,\r\n                font,\r\n                color: style.color,\r\n                strike: style.strike,\r\n                underline: style.underline,\r\n            }, style.textwrap);\r\n        }\r\n        // error\r\n        const error = data.validations.getError(rindex, cindex);\r\n        if (error) {\r\n            // console.log('error:', rindex, cindex, error);\r\n            draw.error(dbox);\r\n        }\r\n        if (frozen) {\r\n            draw.frozen(dbox);\r\n        }\r\n\r\n\r\n    });\r\n}\r\n\r\nfunction renderAutofilter(viewRange) {\r\n    const {data, draw} = this;\r\n    if (viewRange) {\r\n        const {autoFilter} = data;\r\n        if (!autoFilter.active()) return;\r\n        const afRange = autoFilter.hrange();\r\n        if (viewRange.intersects(afRange)) {\r\n            afRange.each((ri, ci) => {\r\n                const dbox = getDrawBox(data, ri, ci);\r\n                draw.dropdown(dbox);\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nfunction renderContent(viewRange, fw, fh, tx, ty) {\r\n    const {draw, data} = this;\r\n    draw.save();\r\n    draw.translate(fw, fh)\r\n        .translate(tx, ty);\r\n\r\n    const {exceptRowSet} = data;\r\n    // const exceptRows = Array.from(exceptRowSet);\r\n    const filteredTranslateFunc = (ri) => {\r\n        const ret = exceptRowSet.has(ri);\r\n        if (ret) {\r\n            const height = data.rows.getHeight(ri);\r\n            draw.translate(0, -height);\r\n        }\r\n        return !ret;\r\n    };\r\n\r\n    const exceptRowTotalHeight = data.exceptRowTotalHeight(viewRange.sri, viewRange.eri);\r\n    // 1 render cell\r\n    draw.save();\r\n    draw.translate(0, -exceptRowTotalHeight);\r\n    viewRange.each((ri, ci) => {\r\n        renderCell(draw, data, ri, ci, tx, ty);\r\n    }, ri => filteredTranslateFunc(ri));\r\n    draw.restore();\r\n\r\n\r\n    // 2 render mergeCell\r\n    const rset = new Set();\r\n    draw.save();\r\n    draw.translate(0, -exceptRowTotalHeight);\r\n    data.eachMergesInView(viewRange, ({sri, sci, eri}) => {\r\n        if (!exceptRowSet.has(sri)) {\r\n            renderCell(draw, data, sri, sci, tx, ty);\r\n        } else if (!rset.has(sri)) {\r\n            rset.add(sri);\r\n            const height = data.rows.sumHeight(sri, eri + 1);\r\n            draw.translate(0, -height);\r\n        }\r\n    });\r\n    draw.restore();\r\n\r\n    // 3 render autofilter\r\n    renderAutofilter.call(this, viewRange);\r\n\r\n    draw.restore();\r\n}\r\n\r\nfunction renderSelectedHeaderCell(x, y, w, h) {\r\n    const {draw} = this;\r\n    draw.save();\r\n    draw.attr({fillStyle: 'rgba(75, 137, 255, 0.08)'})\r\n        .fillRect(x, y, w, h);\r\n    draw.restore();\r\n}\r\n\r\n// viewRange\r\n// type: all | left | top\r\n// w: the fixed width of header\r\n// h: the fixed height of header\r\n// tx: moving distance on x-axis\r\n// ty: moving distance on y-axis\r\nfunction renderFixedHeaders(type, viewRange, w, h, tx, ty) {\r\n    const {draw, data} = this;\r\n    const sumHeight = viewRange.h; // rows.sumHeight(viewRange.sri, viewRange.eri + 1);\r\n    const sumWidth = viewRange.w; // cols.sumWidth(viewRange.sci, viewRange.eci + 1);\r\n    const nty = ty + h;\r\n    const ntx = tx + w;\r\n\r\n    draw.save();\r\n    // draw rect background\r\n    draw.attr(tableFixedHeaderCleanStyle);\r\n    if (type === 'all' || type === 'left') draw.fillRect(0, nty, w, sumHeight);\r\n    if (type === 'all' || type === 'top') draw.fillRect(ntx, 0, sumWidth, h);\r\n\r\n    const {\r\n        sri, sci, eri, eci,\r\n    } = data.selector.range;\r\n    // console.log(data.selectIndexes);\r\n    // draw text\r\n    // text font, align...\r\n    draw.attr(tableFixedHeaderStyle());\r\n    // y-header-text\r\n    if (type === 'all' || type === 'left') {\r\n        data.rowEach(viewRange.sri, viewRange.eri, (i, y1, rowHeight) => {\r\n            const y = nty + y1;\r\n            const ii = i;\r\n            draw.line([0, y], [w, y]);\r\n            if (sri <= ii && ii < eri + 1) {\r\n                renderSelectedHeaderCell.call(this, 0, y, w, rowHeight);\r\n            }\r\n            draw.fillText(ii + 1, w / 2, y + (rowHeight / 2));\r\n            if (i > 0 && data.rows.isHide(i - 1)) {\r\n                draw.save();\r\n                draw.attr({strokeStyle: '#c6c6c6'});\r\n                draw.line([5, y + 5], [w - 5, y + 5]);\r\n                draw.restore();\r\n            }\r\n        });\r\n        draw.line([0, sumHeight + nty], [w, sumHeight + nty]);\r\n        draw.line([w, nty], [w, sumHeight + nty]);\r\n    }\r\n    // x-header-text\r\n    if (type === 'all' || type === 'top') {\r\n        data.colEach(viewRange.sci, viewRange.eci, (i, x1, colWidth) => {\r\n            const x = ntx + x1;\r\n            const ii = i;\r\n            draw.line([x, 0], [x, h]);\r\n            if (sci <= ii && ii < eci + 1) {\r\n                renderSelectedHeaderCell.call(this, x, 0, colWidth, h);\r\n            }\r\n            draw.fillText(stringAt(ii), x + (colWidth / 2), h / 2);\r\n            if (i > 0 && data.cols.isHide(i - 1)) {\r\n                draw.save();\r\n                draw.attr({strokeStyle: '#c6c6c6'});\r\n                draw.line([x + 5, 5], [x + 5, h - 5]);\r\n                draw.restore();\r\n            }\r\n        });\r\n        draw.line([sumWidth + ntx, 0], [sumWidth + ntx, h]);\r\n        draw.line([0, h], [sumWidth + ntx, h]);\r\n    }\r\n    draw.restore();\r\n}\r\n\r\nfunction renderFixedLeftTopCell(fw, fh) {\r\n    const {draw} = this;\r\n    draw.save();\r\n    // left-top-cell\r\n    draw.attr({fillStyle: '#f4f5f8'})\r\n        .fillRect(0, 0, fw, fh);\r\n    draw.restore();\r\n}\r\n\r\nfunction renderContentGrid({\r\n                               sri, sci, eri, eci, w, h,\r\n                           }, fw, fh, tx, ty) {\r\n    const {draw, data} = this;\r\n    const {settings} = data;\r\n\r\n    draw.save();\r\n    draw.attr(tableGridStyle)\r\n        .translate(fw + tx, fh + ty);\r\n    // const sumWidth = cols.sumWidth(sci, eci + 1);\r\n    // const sumHeight = rows.sumHeight(sri, eri + 1);\r\n    // console.log('sumWidth:', sumWidth);\r\n    // draw.clearRect(0, 0, w, h);\r\n    if (!settings.showGrid) {\r\n        draw.restore();\r\n        return;\r\n    }\r\n    // console.log('rowStart:', rowStart, ', rowLen:', rowLen);\r\n    data.rowEach(sri, eri, (i, y, ch) => {\r\n        // console.log('y:', y);\r\n        if (i !== sri) draw.line([0, y], [w, y]);\r\n        if (i === eri) draw.line([0, y + ch], [w, y + ch]);\r\n    });\r\n    data.colEach(sci, eci, (i, x, cw) => {\r\n        if (i !== sci) draw.line([x, 0], [x, h]);\r\n        if (i === eci) draw.line([x + cw, 0], [x + cw, h]);\r\n    });\r\n    draw.restore();\r\n}\r\n\r\nfunction renderFreezeHighlightLine(fw, fh, ftw, fth) {\r\n    const {draw, data} = this;\r\n    const twidth = data.viewWidth() - fw;\r\n    const theight = data.viewHeight() - fh;\r\n    draw.save()\r\n        .translate(fw, fh)\r\n        .attr({strokeStyle: 'rgba(75, 137, 255, .6)'});\r\n    draw.line([0, fth], [twidth, fth]);\r\n    draw.line([ftw, 0], [ftw, theight]);\r\n    draw.restore();\r\n}\r\n\r\nfunction drawFixRange({ranges, data, draw, y, fw, fh, twidth, theight, bgColor, fixText, fixTextColor}) {\r\n    if (ranges.length > 0) {\r\n        draw.save()\r\n            .attr({strokeStyle: 'rgba(75, 137, 255, .6)'});\r\n    }\r\n    for (let i = 0; i < ranges.length; i++) {\r\n        const [startY, endY] = ranges[i]\r\n        const startH = data.rows.sumHeight(0, startY)\r\n        const endH = data.rows.sumHeight(0, endY + 1)\r\n\r\n        let recStartY = startH - y\r\n        let recHeight = endH - startH\r\n        if (recStartY < 0) {\r\n            recHeight -= (0 - recStartY)\r\n            recStartY = 0\r\n        }\r\n        if (recHeight < 0) {\r\n            recHeight = 0\r\n        }\r\n        recStartY += fh\r\n        const dbox = new DrawBox(0, recStartY, twidth, recHeight, 0);\r\n        dbox.bgcolor = bgColor;\r\n        draw.rect(dbox, () => {\r\n            draw.text(fixText, dbox, {\r\n                align: 'left',\r\n                valign: 'top',\r\n                font: {size: 12},\r\n                color: fixTextColor,\r\n                strike: false,\r\n                underline: false,\r\n            })\r\n        }, false)\r\n    }\r\n    if (ranges.length > 0) {\r\n        draw.restore();\r\n    }\r\n}\r\n\r\n/** end */\r\nclass Table {\r\n    constructor(el, data) {\r\n        this.el = el;\r\n        this.draw = new Draw(el, data.viewWidth(), data.viewHeight());\r\n        this.data = data;\r\n    }\r\n\r\n    resetData(data) {\r\n        this.data = data;\r\n        this.render();\r\n    }\r\n\r\n    render() {\r\n        // resize canvas\r\n        const {data} = this;\r\n        const {rows, cols} = data;\r\n        // fixed width of header\r\n        const fw = cols.indexWidth;\r\n        // fixed height of header\r\n        const fh = rows.height;\r\n\r\n        this.draw.resize(data.viewWidth(), data.viewHeight());\r\n        this.clear();\r\n\r\n        const viewRange = data.viewRange();\r\n        // renderAll.call(this, viewRange, data.scroll);\r\n        const tx = data.freezeTotalWidth();\r\n        const ty = data.freezeTotalHeight();\r\n        const {x, y} = data.scroll;\r\n        // 1\r\n        renderContentGrid.call(this, viewRange, fw, fh, tx, ty);\r\n        renderContent.call(this, viewRange, fw, fh, -x, -y);\r\n        renderFixedHeaders.call(this, 'all', viewRange, fw, fh, tx, ty);\r\n        renderFixedLeftTopCell.call(this, fw, fh);\r\n        const [fri, fci] = data.freeze;\r\n        if (fri > 0 || fci > 0) {\r\n            // 2\r\n            if (fri > 0) {\r\n                const vr = viewRange.clone();\r\n                vr.sri = 0;\r\n                vr.eri = fri - 1;\r\n                vr.h = ty;\r\n                renderContentGrid.call(this, vr, fw, fh, tx, 0);\r\n                renderContent.call(this, vr, fw, fh, -x, 0);\r\n                renderFixedHeaders.call(this, 'top', vr, fw, fh, tx, 0);\r\n            }\r\n            // 3\r\n            if (fci > 0) {\r\n                const vr = viewRange.clone();\r\n                vr.sci = 0;\r\n                vr.eci = fci - 1;\r\n                vr.w = tx;\r\n                renderContentGrid.call(this, vr, fw, fh, 0, ty);\r\n                renderFixedHeaders.call(this, 'left', vr, fw, fh, 0, ty);\r\n                renderContent.call(this, vr, fw, fh, 0, -y);\r\n            }\r\n            // 4\r\n            const freezeViewRange = data.freezeViewRange();\r\n            renderContentGrid.call(this, freezeViewRange, fw, fh, 0, 0);\r\n            renderFixedHeaders.call(this, 'all', freezeViewRange, fw, fh, 0, 0);\r\n            renderContent.call(this, freezeViewRange, fw, fh, 0, 0);\r\n            // 5\r\n            renderFreezeHighlightLine.call(this, fw, fh, tx, ty);\r\n        }\r\n\r\n        // yvan: 准备画线\r\n        const n = this.draw\r\n        const i = n.ctx;\r\n        const ne = Jt()\r\n        const oneMmsPx = window['oneMMOfPx']\r\n\r\n        // yvan:固定表头表尾的线段\r\n        const {draw} = this;\r\n        const twidth = data.viewWidth() - fw;\r\n        const theight = data.viewHeight() - fh;\r\n\r\n        const tableHeaderRanges = data.mergeTableHeaders()\r\n        drawFixRange({\r\n            draw, fw, fh, twidth, theight, data, y,\r\n            ranges: tableHeaderRanges,\r\n            bgColor: 'rgba(75, 137, 255, .2)',\r\n            fixText: '固定表头',\r\n            fixTextColor: 'red'\r\n        })\r\n\r\n        const tableFooterRanges = data.mergeTableFooters()\r\n        drawFixRange({\r\n            draw, fw, fh, twidth, theight, data, y,\r\n            ranges: tableFooterRanges,\r\n            bgColor: 'rgba(75, 137, 255, .2)',\r\n            fixText: '固定表尾',\r\n            fixTextColor: 'black'\r\n        })\r\n        const pageHeaderRanges = data.mergePageHeaders()\r\n        drawFixRange({\r\n            draw, fw, fh, twidth, theight, data, y,\r\n            ranges: pageHeaderRanges,\r\n            bgColor: 'rgba(175, 37, 55, .2)',\r\n            fixText: '页头',\r\n            fixTextColor: 'red'\r\n        })\r\n\r\n        const pageFooterRanges = data.mergePageFooters()\r\n        drawFixRange({\r\n            draw, fw, fh, twidth, theight, data, y,\r\n            ranges: pageFooterRanges,\r\n            bgColor: 'rgba(175, 37, 55, .2)',\r\n            fixText: '页尾',\r\n            fixTextColor: 'black'\r\n        })\r\n\r\n        // yvan:DrawPrintLine 画竖线, 换算厘米单位\r\n        let widthOfPx = (this.data.settings.pageOption.widthOfMM || 210) * oneMmsPx // vr.sci\r\n        let scrollOffset = this.data.scroll.x\r\n        n.save()\r\n        i.strokeStyle = \"green\"\r\n        i.lineWidth = 2\r\n        // let o = (t - scrollOffset) * ne + $t(r);\r\n        let o = (widthOfPx - scrollOffset - this.data.settings.pageOption.paddingLeft - this.data.settings.pageOption.paddingRight) * ne + $t(fw);\r\n        i.moveTo(o, 0)\r\n        i.lineTo(o, i.canvas.height)\r\n        i.setLineDash([2.5, 2.5])\r\n        i.stroke()\r\n        n.restore()\r\n\r\n        // yvan:drawPrintLineX 画横线, 换算厘米单位\r\n        n.save()\r\n        i.strokeStyle = \"green\"\r\n        i.lineWidth = 2;\r\n        // r = this.data.settings.row.height\r\n        const heightOfPx = (this.data.settings.pageOption.heightOfMM || 297) * oneMmsPx\r\n        const scrollYOffset = this.data.scroll.y\r\n        o = (heightOfPx - scrollYOffset - this.data.settings.pageOption.paddingTop - this.data.settings.pageOption.paddingBottom) * ne + $t(fh);\r\n        i.moveTo(0, o)\r\n        i.lineTo(i.canvas.width, o)\r\n        i.setLineDash([2.5, 2.5])\r\n        i.stroke()\r\n        n.restore()\r\n    }\r\n\r\n    clear() {\r\n        this.draw.clear();\r\n    }\r\n}\r\n\r\nfunction Jt() {\r\n    return window.devicePixelRatio || 1\r\n}\r\n\r\nfunction Kt() {\r\n    return Jt() - .5\r\n}\r\n\r\nfunction Qt(t) {\r\n    return parseInt(t * Jt(), 10)\r\n}\r\n\r\nfunction $t(t) {\r\n    const e = Qt(t);\r\n    return e > 0 ? e - .5 : .5\r\n}\r\n\r\nexport default Table;\r\n","/* global document */\r\nimport { h } from './element';\r\nimport { bind } from './event';\r\nimport { cssPrefix } from '../config';\r\n\r\nexport default function tooltip(html, target) {\r\n  if (target.classList.contains('active')) {\r\n    return;\r\n  }\r\n  const {\r\n    left, top, width, height,\r\n  } = target.getBoundingClientRect();\r\n  const el = h('div', `${cssPrefix}-tooltip`).html(html).show();\r\n  document.body.appendChild(el.el);\r\n  const elBox = el.box();\r\n  // console.log('elBox:', elBox);\r\n  el.css('left', `${left + (width / 2) - (elBox.width / 2)}px`)\r\n    .css('top', `${top + height + 2}px`);\r\n\r\n  bind(target, 'mouseleave', () => {\r\n    if (document.body.contains(el.el)) {\r\n      document.body.removeChild(el.el);\r\n    }\r\n  });\r\n\r\n  bind(target, 'click', () => {\r\n    if (document.body.contains(el.el)) {\r\n      document.body.removeChild(el.el);\r\n    }\r\n  });\r\n}\r\n","import { cssPrefix } from '../../config';\r\nimport tooltip from '../tooltip';\r\nimport { h } from '../element';\r\nimport { t } from '../../locale/locale';\r\n\r\nexport default class Item {\r\n  // tooltip\r\n  // tag: the subclass type\r\n  // shortcut: shortcut key\r\n  constructor(tag, shortcut, value) {\r\n    this.tip = '';\r\n    if (tag) this.tip = t(`toolbar.${tag.replace(/-[a-z]/g, c => c[1].toUpperCase())}`);\r\n    if (shortcut) this.tip += ` (${shortcut})`;\r\n    this.tag = tag;\r\n    this.shortcut = shortcut;\r\n    this.value = value;\r\n    this.el = this.element();\r\n    this.change = () => {};\r\n  }\r\n\r\n  element() {\r\n    const { tip } = this;\r\n    return h('div', `${cssPrefix}-toolbar-btn`)\r\n      .on('mouseenter', (evt) => {\r\n        if (this.tip) tooltip(this.tip, evt.target);\r\n      })\r\n      .attr('data-tooltip', tip);\r\n  }\r\n\r\n  setState() {}\r\n}\r\n","import Item from './item';\r\n\r\nexport default class DropdownItem extends Item {\r\n  dropdown() {}\r\n\r\n  getValue(v) {\r\n    return v;\r\n  }\r\n\r\n  element() {\r\n    const { tag } = this;\r\n    this.dd = this.dropdown();\r\n    this.dd.change = it => this.change(tag, this.getValue(it));\r\n    return super.element().child(\r\n      this.dd,\r\n    );\r\n  }\r\n\r\n  setState(v) {\r\n    if (v) {\r\n      this.value = v;\r\n      this.dd.setTitle(v);\r\n    }\r\n  }\r\n}\r\n","import { Element, h } from './element';\r\nimport { bindClickoutside, unbindClickoutside } from './event';\r\nimport { cssPrefix } from '../config';\r\n\r\nexport default class Dropdown extends Element {\r\n  constructor(title, width, showArrow, placement, ...children) {\r\n    super('div', `${cssPrefix}-dropdown ${placement}`);\r\n    this.title = title;\r\n    this.change = () => {};\r\n    this.headerClick = () => {};\r\n    if (typeof title === 'string') {\r\n      this.title = h('div', `${cssPrefix}-dropdown-title`).child(title);\r\n    } else if (showArrow) {\r\n      this.title.addClass('arrow-left');\r\n    }\r\n    this.contentEl = h('div', `${cssPrefix}-dropdown-content`)\r\n      .css('width', width)\r\n      .hide();\r\n\r\n    this.setContentChildren(...children);\r\n\r\n    this.headerEl = h('div', `${cssPrefix}-dropdown-header`);\r\n    this.headerEl.on('click', () => {\r\n      if (this.contentEl.css('display') !== 'block') {\r\n        this.show();\r\n      } else {\r\n        this.hide();\r\n      }\r\n    }).children(\r\n      this.title,\r\n      showArrow ? h('div', `${cssPrefix}-icon arrow-right`).child(\r\n        h('div', `${cssPrefix}-icon-img arrow-down`),\r\n      ) : '',\r\n    );\r\n    this.children(this.headerEl, this.contentEl);\r\n  }\r\n\r\n  setContentChildren(...children) {\r\n    this.contentEl.html('');\r\n    if (children.length > 0) {\r\n      this.contentEl.children(...children);\r\n    }\r\n  }\r\n\r\n  setTitle(title) {\r\n    this.title.html(title);\r\n    this.hide();\r\n  }\r\n\r\n  show() {\r\n    const { contentEl } = this;\r\n    contentEl.show();\r\n    this.parent().active();\r\n    bindClickoutside(this.parent(), () => {\r\n      this.hide();\r\n    });\r\n  }\r\n\r\n  hide() {\r\n    this.parent().active(false);\r\n    this.contentEl.hide();\r\n    unbindClickoutside(this.parent());\r\n  }\r\n}\r\n","import Dropdown from './dropdown';\r\nimport { h } from './element';\r\nimport Icon from './icon';\r\nimport { cssPrefix } from '../config';\r\n\r\nfunction buildItemWithIcon(iconName) {\r\n  return h('div', `${cssPrefix}-item`).child(new Icon(iconName));\r\n}\r\n\r\nexport default class DropdownAlign extends Dropdown {\r\n  constructor(aligns, align) {\r\n    const icon = new Icon(`align-${align}`);\r\n    const naligns = aligns.map(it => buildItemWithIcon(`align-${it}`)\r\n      .on('click', () => {\r\n        this.setTitle(it);\r\n        this.change(it);\r\n      }));\r\n    super(icon, 'auto', true, 'bottom-left', ...naligns);\r\n  }\r\n\r\n  setTitle(align) {\r\n    this.title.setName(`align-${align}`);\r\n    this.hide();\r\n  }\r\n}\r\n","import DropdownItem from './dropdown_item';\r\nimport DropdownAlign from '../dropdown_align';\r\n\r\nexport default class Align extends DropdownItem {\r\n  constructor(value) {\r\n    super('align', '', value);\r\n  }\r\n\r\n  dropdown() {\r\n    const { value } = this;\r\n    return new DropdownAlign(['left', 'center', 'right'], value);\r\n  }\r\n}\r\n","import DropdownItem from './dropdown_item';\r\nimport DropdownAlign from '../dropdown_align';\r\n\r\nexport default class Valign extends DropdownItem {\r\n  constructor(value) {\r\n    super('valign', '', value);\r\n  }\r\n\r\n  dropdown() {\r\n    const { value } = this;\r\n    return new DropdownAlign(['top', 'middle', 'bottom'], value);\r\n  }\r\n}\r\n","import Item from './item';\r\nimport Icon from '../icon';\r\n\r\nexport default class ToggleItem extends Item {\r\n  element() {\r\n    const { tag } = this;\r\n    return super.element()\r\n      .child(new Icon(tag))\r\n      .on('click', () => this.click());\r\n  }\r\n\r\n  click() {\r\n    this.change(this.tag, this.toggle());\r\n  }\r\n\r\n  setState(active) {\r\n    this.el.active(active);\r\n  }\r\n\r\n  toggle() {\r\n    return this.el.toggle();\r\n  }\r\n\r\n  active() {\r\n    return this.el.hasClass('active');\r\n  }\r\n}\r\n","import ToggleItem from './toggle_item';\r\n\r\nexport default class Bold extends ToggleItem {\r\n  constructor() {\r\n    super('font-bold', 'Ctrl+B');\r\n  }\r\n}\r\n","import ToggleItem from './toggle_item';\r\n\r\nexport default class Italic extends ToggleItem {\r\n  constructor() {\r\n    super('font-italic', 'Ctrl+I');\r\n  }\r\n}\r\n","import ToggleItem from './toggle_item';\r\n\r\nexport default class Strike extends ToggleItem {\r\n  constructor() {\r\n    super('strike', 'Ctrl+U');\r\n  }\r\n}\r\n","import ToggleItem from './toggle_item';\r\n\r\nexport default class Underline extends ToggleItem {\r\n  constructor() {\r\n    super('underline', 'Ctrl+U');\r\n  }\r\n}\r\n","import { h } from './element';\r\nimport { cssPrefix } from '../config';\r\n\r\nconst themeColorPlaceHolders = ['#ffffff', '#000100', '#e7e5e6', '#445569', '#5b9cd6', '#ed7d31', '#a5a5a5', '#ffc001', '#4371c6', '#71ae47'];\r\n\r\nconst themeColors = [\r\n  ['#f2f2f2', '#7f7f7f', '#d0cecf', '#d5dce4', '#deeaf6', '#fce5d5', '#ededed', '#fff2cd', '#d9e2f3', '#e3efd9'],\r\n  ['#d8d8d8', '#595959', '#afabac', '#adb8ca', '#bdd7ee', '#f7ccac', '#dbdbdb', '#ffe59a', '#b3c6e7', '#c5e0b3'],\r\n  ['#bfbfbf', '#3f3f3f', '#756f6f', '#8596b0', '#9cc2e6', '#f4b184', '#c9c9c9', '#fed964', '#8eaada', '#a7d08c'],\r\n  ['#a5a5a5', '#262626', '#3a3839', '#333f4f', '#2e75b5', '#c45a10', '#7b7b7b', '#bf8e01', '#2f5596', '#538136'],\r\n  ['#7f7f7f', '#0c0c0c', '#171516', '#222a35', '#1f4e7a', '#843c0a', '#525252', '#7e6000', '#203864', '#365624'],\r\n];\r\n\r\nconst standardColors = ['#c00000', '#fe0000', '#fdc101', '#ffff01', '#93d051', '#00b04e', '#01b0f1', '#0170c1', '#012060', '#7030a0'];\r\n\r\nfunction buildTd(bgcolor) {\r\n  return h('td', '').child(\r\n    h('div', `${cssPrefix}-color-palette-cell`)\r\n      .on('click.stop', () => this.change(bgcolor))\r\n      .css('background-color', bgcolor),\r\n  );\r\n}\r\n\r\nexport default class ColorPalette {\r\n  constructor() {\r\n    this.el = h('div', `${cssPrefix}-color-palette`);\r\n    this.change = () => {};\r\n    const table = h('table', '').children(\r\n      h('tbody', '').children(\r\n        h('tr', `${cssPrefix}-theme-color-placeholders`).children(\r\n          ...themeColorPlaceHolders.map(color => buildTd.call(this, color)),\r\n        ),\r\n        ...themeColors.map(it => h('tr', `${cssPrefix}-theme-colors`).children(\r\n          ...it.map(color => buildTd.call(this, color)),\r\n        )),\r\n        h('tr', `${cssPrefix}-standard-colors`).children(\r\n          ...standardColors.map(color => buildTd.call(this, color)),\r\n        ),\r\n      ),\r\n    );\r\n    this.el.child(table);\r\n  }\r\n}\r\n","import Dropdown from './dropdown';\r\nimport Icon from './icon';\r\nimport ColorPalette from './color_palette';\r\n\r\nexport default class DropdownColor extends Dropdown {\r\n  constructor(iconName, color) {\r\n    const icon = new Icon(iconName)\r\n      .css('height', '16px')\r\n      .css('border-bottom', `3px solid ${color}`);\r\n    const colorPalette = new ColorPalette();\r\n    colorPalette.change = (v) => {\r\n      this.setTitle(v);\r\n      this.change(v);\r\n    };\r\n    super(icon, 'auto', false, 'bottom-left', colorPalette.el);\r\n  }\r\n\r\n  setTitle(color) {\r\n    this.title.css('border-color', color);\r\n    this.hide();\r\n  }\r\n}\r\n","import Dropdown from './dropdown';\r\nimport { h } from './element';\r\nimport Icon from './icon';\r\nimport { cssPrefix } from '../config';\r\n\r\nconst lineTypes = [\r\n  ['thin', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"1\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\r\n  ['medium', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"2\" style=\"user-select: none;\"><line x1=\"0\" y1=\"1.0\" x2=\"50\" y2=\"1.0\" stroke-width=\"2\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\r\n  ['thick', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"3\" style=\"user-select: none;\"><line x1=\"0\" y1=\"1.5\" x2=\"50\" y2=\"1.5\" stroke-width=\"3\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\r\n  ['dashed', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"1\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" stroke-dasharray=\"2\" style=\"user-select: none;\"></line></svg>'],\r\n  ['dotted', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"1\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" stroke-dasharray=\"1\" style=\"user-select: none;\"></line></svg>'],\r\n  // ['double', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"3\" style=\"user-select: none;\"><line x1=\"0\" y1=\"0.5\" x2=\"50\" y2=\"0.5\" stroke-width=\"1\" stroke=\"black\" style=\"user-select: none;\"></line><line x1=\"0\" y1=\"2.5\" x2=\"50\" y2=\"2.5\" stroke-width=\"1\" stroke=\"black\" style=\"user-select: none;\"></line></svg>'],\r\n];\r\n\r\nexport default class DropdownLineType extends Dropdown {\r\n  constructor(type) {\r\n    const icon = new Icon('line-type');\r\n    let beforei = 0;\r\n    const lineTypeEls = lineTypes.map((it, iti) => h('div', `${cssPrefix}-item state ${type === it[0] ? 'checked' : ''}`)\r\n      .on('click', () => {\r\n        lineTypeEls[beforei].toggle('checked');\r\n        lineTypeEls[iti].toggle('checked');\r\n        beforei = iti;\r\n        this.hide();\r\n        this.change(it);\r\n      })\r\n      .child(\r\n        h('div', `${cssPrefix}-line-type`).html(it[1]),\r\n      ));\r\n\r\n    super(icon, 'auto', false, 'bottom-left', ...lineTypeEls);\r\n  }\r\n}\r\n","import { h } from './element';\r\nimport Icon from './icon';\r\nimport DropdownColor from './dropdown_color';\r\nimport DropdownLineType from './dropdown_linetype';\r\nimport { cssPrefix } from '../config';\r\n\r\nfunction buildTable(...trs) {\r\n  return h('table', '').child(\r\n    h('tbody', '').children(...trs),\r\n  );\r\n}\r\n\r\nfunction buildTd(iconName) {\r\n  return h('td', '').child(\r\n    h('div', `${cssPrefix}-border-palette-cell`).child(\r\n      new Icon(`border-${iconName}`),\r\n    ).on('click', () => {\r\n      this.mode = iconName;\r\n      const { mode, style, color } = this;\r\n      this.change({ mode, style, color });\r\n    }),\r\n  );\r\n}\r\n\r\nexport default class BorderPalette {\r\n  constructor() {\r\n    this.color = '#000';\r\n    this.style = 'thin';\r\n    this.mode = 'all';\r\n    this.change = () => {};\r\n    this.ddColor = new DropdownColor('line-color', this.color);\r\n    this.ddColor.change = (color) => {\r\n      this.color = color;\r\n    };\r\n    this.ddType = new DropdownLineType(this.style);\r\n    this.ddType.change = ([s]) => {\r\n      this.style = s;\r\n    };\r\n    this.el = h('div', `${cssPrefix}-border-palette`);\r\n    const table = buildTable(\r\n      h('tr', '').children(\r\n        h('td', `${cssPrefix}-border-palette-left`).child(\r\n          buildTable(\r\n            h('tr', '').children(\r\n              ...['all', 'inside', 'horizontal', 'vertical', 'outside'].map(it => buildTd.call(this, it)),\r\n            ),\r\n            h('tr', '').children(\r\n              ...['left', 'top', 'right', 'bottom', 'none'].map(it => buildTd.call(this, it)),\r\n            ),\r\n          ),\r\n        ),\r\n        h('td', `${cssPrefix}-border-palette-right`).children(\r\n          h('div', `${cssPrefix}-toolbar-btn`).child(this.ddColor.el),\r\n          h('div', `${cssPrefix}-toolbar-btn`).child(this.ddType.el),\r\n        ),\r\n      ),\r\n    );\r\n    this.el.child(table);\r\n  }\r\n}\r\n","import Dropdown from './dropdown';\r\nimport Icon from './icon';\r\nimport BorderPalette from './border_palette';\r\n\r\nexport default class DropdownBorder extends Dropdown {\r\n  constructor() {\r\n    const icon = new Icon('border-all');\r\n    const borderPalette = new BorderPalette();\r\n    borderPalette.change = (v) => {\r\n      this.change(v);\r\n      this.hide();\r\n    };\r\n    super(icon, 'auto', false, 'bottom-left', borderPalette.el);\r\n  }\r\n}\r\n","import DropdownItem from './dropdown_item';\r\nimport DropdownBorder from '../dropdown_border';\r\n\r\nexport default class Border extends DropdownItem {\r\n  constructor() {\r\n    super('border');\r\n  }\r\n\r\n  dropdown() {\r\n    return new DropdownBorder();\r\n  }\r\n}\r\n","import Item from './item';\r\nimport Icon from '../icon';\r\n\r\nexport default class IconItem extends Item {\r\n  element() {\r\n    return super.element()\r\n      .child(new Icon(this.tag))\r\n      .on('click', () => this.change(this.tag));\r\n  }\r\n\r\n  setState(disabled) {\r\n    this.el.disabled(disabled);\r\n  }\r\n}\r\n","import IconItem from './icon_item';\r\n\r\nexport default class Clearformat extends IconItem {\r\n  constructor() {\r\n    super('clearformat');\r\n  }\r\n}\r\n","import ToggleItem from './toggle_item';\r\n\r\nexport default class Paintformat extends ToggleItem {\r\n  constructor() {\r\n    super('paintformat');\r\n  }\r\n\r\n  setState() {}\r\n}\r\n","import DropdownItem from './dropdown_item';\r\nimport DropdownColor from '../dropdown_color';\r\n\r\nexport default class TextColor extends DropdownItem {\r\n  constructor(color) {\r\n    super('color', undefined, color);\r\n  }\r\n\r\n  dropdown() {\r\n    const { tag, value } = this;\r\n    return new DropdownColor(tag, value);\r\n  }\r\n}\r\n","import DropdownItem from './dropdown_item';\r\nimport DropdownColor from '../dropdown_color';\r\n\r\nexport default class FillColor extends DropdownItem {\r\n  constructor(color) {\r\n    super('bgcolor', undefined, color);\r\n  }\r\n\r\n  dropdown() {\r\n    const { tag, value } = this;\r\n    return new DropdownColor(tag, value);\r\n  }\r\n}\r\n","import Dropdown from './dropdown';\r\nimport { h } from './element';\r\nimport { fontSizes } from '../core/font';\r\nimport { cssPrefix } from '../config';\r\n\r\nexport default class DropdownFontSize extends Dropdown {\r\n  constructor() {\r\n    const nfontSizes = fontSizes.map(it => h('div', `${cssPrefix}-item`)\r\n      .on('click', () => {\r\n        this.setTitle(`${it.pt}`);\r\n        this.change(it);\r\n      })\r\n      .child(`${it.pt}`));\r\n    super('10', '60px', true, 'bottom-left', ...nfontSizes);\r\n  }\r\n}\r\n","import DropdownItem from './dropdown_item';\r\nimport DropdownFontsize from '../dropdown_fontsize';\r\n\r\nexport default class Format extends DropdownItem {\r\n  constructor() {\r\n    super('font-size');\r\n  }\r\n\r\n  getValue(it) {\r\n    return it.pt;\r\n  }\r\n\r\n  dropdown() {\r\n    return new DropdownFontsize();\r\n  }\r\n}\r\n","import Dropdown from './dropdown';\r\nimport {h} from './element';\r\nimport {baseFonts} from '../core/font';\r\nimport {cssPrefix} from '../config';\r\n\r\nexport default class DropdownFont extends Dropdown {\r\n    constructor() {\r\n        // yvan\r\n        // const nfonts = baseFonts.map(it => h('div', `${cssPrefix}-item`)\r\n        //   .on('click', () => {\r\n        //     this.setTitle(it.title);\r\n        //     this.change(it);\r\n        //   })\r\n        //   .child(it.title));\r\n        // super(baseFonts[0].title, '160px', true, 'bottom-left', ...nfonts);\r\n        const nfonts = baseFonts.map(it => {\r\n            const item = h('div', `${cssPrefix}-item`)\r\n            if (it.key === 'divider') {\r\n                item.addClass('divider');\r\n            } else {\r\n                item.child(it.title)\r\n            }\r\n            item.on('click', () => {\r\n                this.setTitle(it.title);\r\n                this.change(it);\r\n            })\r\n            return item\r\n        });\r\n        super(baseFonts[0].title, '160px', true, 'bottom-left', ...nfonts);\r\n    }\r\n}\r\n","import DropdownItem from './dropdown_item';\r\nimport DropdownFont from '../dropdown_font';\r\n\r\nexport default class Font extends DropdownItem {\r\n  constructor() {\r\n    super('font-name');\r\n  }\r\n\r\n  getValue(it) {\r\n    return it.key;\r\n  }\r\n\r\n  dropdown() {\r\n    return new DropdownFont();\r\n  }\r\n}\r\n","import Dropdown from './dropdown';\r\nimport { h } from './element';\r\nimport { baseFormats } from '../core/format';\r\nimport { cssPrefix } from '../config';\r\n\r\nexport default class DropdownFormat extends Dropdown {\r\n  constructor() {\r\n    let nformats = baseFormats.slice(0);\r\n    // nformats.splice(2, 0, { key: 'divider' });\r\n    // nformats.splice(8, 0, { key: 'divider' });\r\n    // nformats.splice(13, 0, { key: 'divider' }); //yvan\r\n    nformats = nformats.map((it) => {\r\n      const item = h('div', `${cssPrefix}-item`);\r\n      if (it.key === 'divider') {\r\n        item.addClass('divider');\r\n      } else {\r\n        item.child(it.title())\r\n          .on('click', () => {\r\n            this.setTitle(it.title());\r\n            this.change(it);\r\n          });\r\n        if (it.label) item.child(h('div', 'label').html(it.label));\r\n      }\r\n      return item;\r\n    });\r\n    super('Normal', '220px', true, 'bottom-left', ...nformats);\r\n  }\r\n\r\n  setTitle(key) {\r\n    for (let i = 0; i < baseFormats.length; i += 1) {\r\n      if (baseFormats[i].key === key) {\r\n        this.title.html(baseFormats[i].title());\r\n      }\r\n    }\r\n    this.hide();\r\n  }\r\n}\r\n","import DropdownItem from './dropdown_item';\r\nimport DropdownFormat from '../dropdown_format';\r\n\r\nexport default class Format extends DropdownItem {\r\n  constructor() {\r\n    super('format');\r\n  }\r\n\r\n  getValue(it) {\r\n    return it.key;\r\n  }\r\n\r\n  dropdown() {\r\n    return new DropdownFormat();\r\n  }\r\n}\r\n","import ToggleItem from './toggle_item';\r\n\r\nexport default class Merge extends ToggleItem {\r\n  constructor() {\r\n    super('merge');\r\n  }\r\n\r\n  setState(active, disabled) {\r\n    this.el.active(active).disabled(disabled);\r\n  }\r\n}\r\n","import IconItem from './icon_item';\r\n\r\nexport default class Redo extends IconItem {\r\n  constructor() {\r\n    super('redo', 'Ctrl+Y');\r\n  }\r\n}\r\n","import IconItem from './icon_item';\r\n\r\nexport default class Undo extends IconItem {\r\n  constructor() {\r\n    super('undo', 'Ctrl+Z');\r\n  }\r\n}\r\n","import ToggleItem from './toggle_item';\r\n\r\nexport default class Textwrap extends ToggleItem {\r\n  constructor() {\r\n    super('textwrap');\r\n  }\r\n}\r\n","import Dropdown from '../dropdown';\r\nimport DropdownItem from './dropdown_item';\r\n\r\nimport { cssPrefix } from '../../config';\r\nimport { h } from '../element';\r\nimport Icon from '../icon';\r\n\r\nclass DropdownMore extends Dropdown {\r\n  constructor() {\r\n    const icon = new Icon('ellipsis');\r\n    const moreBtns = h('div', `${cssPrefix}-toolbar-more`);\r\n    super(icon, 'auto', false, 'bottom-right', moreBtns);\r\n    this.moreBtns = moreBtns;\r\n    this.contentEl.css('max-width', '420px');\r\n  }\r\n}\r\n\r\nexport default class More extends DropdownItem {\r\n  constructor() {\r\n    super('more');\r\n    this.el.hide();\r\n  }\r\n\r\n  dropdown() {\r\n    return new DropdownMore();\r\n  }\r\n\r\n  show() {\r\n    this.el.show();\r\n  }\r\n\r\n  hide() {\r\n    this.el.hide();\r\n  }\r\n}\r\n","/* global window */\r\n\r\nimport Align from './align';\r\nimport Valign from './valign';\r\nimport Autofilter from './autofilter';\r\nimport Bold from './bold';\r\nimport Italic from './italic';\r\nimport Strike from './strike';\r\nimport Underline from './underline';\r\nimport Border from './border';\r\nimport Clearformat from './clearformat';\r\nimport Paintformat from './paintformat';\r\nimport TextColor from './text_color';\r\nimport FillColor from './fill_color';\r\nimport FontSize from './font_size';\r\nimport Font from './font';\r\nimport Format from './format';\r\nimport Formula from './formula';\r\nimport Freeze from './freeze';\r\nimport Merge from './merge';\r\nimport Redo from './redo';\r\nimport Undo from './undo';\r\n// import Print from './print'; //yvan\r\nimport Textwrap from './textwrap';\r\nimport More from './more';\r\nimport Item from './item';\r\n\r\nimport { h } from '../element';\r\nimport { cssPrefix } from '../../config';\r\nimport { bind } from '../event';\r\n\r\nfunction buildDivider() {\r\n  return h('div', `${cssPrefix}-toolbar-divider`);\r\n}\r\n\r\nfunction initBtns2() {\r\n  this.btns2 = [];\r\n  this.items.forEach((it) => {\r\n    if (Array.isArray(it)) {\r\n      it.forEach(({ el }) => {\r\n        const rect = el.box();\r\n        const { marginLeft, marginRight } = el.computedStyle();\r\n        this.btns2.push([el, rect.width + parseInt(marginLeft, 10) + parseInt(marginRight, 10)]);\r\n      });\r\n    } else {\r\n      const rect = it.box();\r\n      const { marginLeft, marginRight } = it.computedStyle();\r\n      this.btns2.push([it, rect.width + parseInt(marginLeft, 10) + parseInt(marginRight, 10)]);\r\n    }\r\n  });\r\n}\r\n\r\nfunction moreResize() {\r\n  const {\r\n    el, btns, moreEl, btns2,\r\n  } = this;\r\n  const { moreBtns, contentEl } = moreEl.dd;\r\n  el.css('width', `${this.widthFn()}px`);\r\n  const elBox = el.box();\r\n\r\n  let sumWidth = 160;\r\n  let sumWidth2 = 12;\r\n  const list1 = [];\r\n  const list2 = [];\r\n  btns2.forEach(([it, w], index) => {\r\n    sumWidth += w;\r\n    if (index === btns2.length - 1 || sumWidth < elBox.width) {\r\n      list1.push(it);\r\n    } else {\r\n      sumWidth2 += w;\r\n      list2.push(it);\r\n    }\r\n  });\r\n  btns.html('').children(...list1);\r\n  moreBtns.html('').children(...list2);\r\n  contentEl.css('width', `${sumWidth2}px`);\r\n  if (list2.length > 0) {\r\n    moreEl.show();\r\n  } else {\r\n    moreEl.hide();\r\n  }\r\n}\r\n\r\nfunction genBtn(it) {\r\n  const btn = new Item();\r\n  btn.el.on('click', () => {\r\n    if (it.onClick) it.onClick(this.data.getData(), this.data);\r\n  });\r\n  btn.tip = it.tip || '';\r\n\r\n  let { el } = it;\r\n\r\n  if (it.icon) {\r\n    el = h('img').attr('src', it.icon);\r\n  }\r\n\r\n  if (el) {\r\n    const icon = h('div', `${cssPrefix}-icon`);\r\n    icon.child(el);\r\n    btn.el.child(icon);\r\n  }\r\n\r\n  return btn;\r\n}\r\n\r\nexport default class Toolbar {\r\n  constructor(data, widthFn, isHide = false) {\r\n    this.data = data;\r\n    this.change = () => {};\r\n    this.widthFn = widthFn;\r\n    this.isHide = isHide;\r\n    const style = data.defaultStyle();\r\n    this.items = [\r\n      [\r\n        this.undoEl = new Undo(),\r\n        this.redoEl = new Redo(),\r\n        // new Print(), //yvan\r\n        this.paintformatEl = new Paintformat(),\r\n        this.clearformatEl = new Clearformat(),\r\n      ],\r\n      buildDivider(),\r\n      [\r\n        this.formatEl = new Format(),\r\n      ],\r\n      buildDivider(),\r\n      [\r\n        this.fontEl = new Font(),\r\n        this.fontSizeEl = new FontSize(),\r\n      ],\r\n      buildDivider(),\r\n      [\r\n        this.boldEl = new Bold(),\r\n        this.italicEl = new Italic(),\r\n        this.underlineEl = new Underline(),\r\n        this.strikeEl = new Strike(),\r\n        this.textColorEl = new TextColor(style.color),\r\n      ],\r\n      buildDivider(),\r\n      [\r\n        this.fillColorEl = new FillColor(style.bgcolor),\r\n        this.borderEl = new Border(),\r\n        this.mergeEl = new Merge(),\r\n      ],\r\n      buildDivider(),\r\n      [\r\n        this.alignEl = new Align(style.align),\r\n        this.valignEl = new Valign(style.valign),\r\n        this.textwrapEl = new Textwrap(),\r\n      ],\r\n      buildDivider(),\r\n      // [\r\n      //   this.freezeEl = new Freeze(),\r\n      //   this.autofilterEl = new Autofilter(),\r\n      //   this.formulaEl = new Formula(),\r\n      // ],\r\n    ];\r\n\r\n    const { extendToolbar = {} } = data.settings;\r\n\r\n    if (extendToolbar.left && extendToolbar.left.length > 0) {\r\n      this.items.unshift(buildDivider());\r\n      const btns = extendToolbar.left.map(genBtn.bind(this));\r\n\r\n      this.items.unshift(btns);\r\n    }\r\n    if (extendToolbar.right && extendToolbar.right.length > 0) {\r\n      this.items.push(buildDivider());\r\n      const btns = extendToolbar.right.map(genBtn.bind(this));\r\n      this.items.push(btns);\r\n    }\r\n\r\n    this.items.push([this.moreEl = new More()]);\r\n\r\n    this.el = h('div', `${cssPrefix}-toolbar`);\r\n    this.btns = h('div', `${cssPrefix}-toolbar-btns`);\r\n\r\n    this.items.forEach((it) => {\r\n      if (Array.isArray(it)) {\r\n        it.forEach((i) => {\r\n          this.btns.child(i.el);\r\n          i.change = (...args) => {\r\n            this.change(...args);\r\n          };\r\n        });\r\n      } else {\r\n        this.btns.child(it.el);\r\n      }\r\n    });\r\n\r\n    this.el.child(this.btns);\r\n    if (isHide) {\r\n      this.el.hide();\r\n    } else {\r\n      this.reset();\r\n      setTimeout(() => {\r\n        initBtns2.call(this);\r\n        moreResize.call(this);\r\n      }, 0);\r\n      bind(window, 'resize', () => {\r\n        moreResize.call(this);\r\n      });\r\n    }\r\n  }\r\n\r\n  paintformatActive() {\r\n    return this.paintformatEl.active();\r\n  }\r\n\r\n  paintformatToggle() {\r\n    this.paintformatEl.toggle();\r\n  }\r\n\r\n  trigger(type) {\r\n    this[`${type}El`].click();\r\n  }\r\n\r\n  resetData(data) {\r\n    this.data = data;\r\n    this.reset();\r\n  }\r\n\r\n  reset() {\r\n    if (this.isHide) return;\r\n    const { data } = this;\r\n    const style = data.getSelectedCellStyle();\r\n    // console.log('canUndo:', data.canUndo());\r\n    this.undoEl.setState(!data.canUndo());\r\n    this.redoEl.setState(!data.canRedo());\r\n    this.mergeEl.setState(data.canUnmerge(), !data.selector.multiple());\r\n    // this.autofilterEl.setState(!data.canAutofilter());\r\n    // this.mergeEl.disabled();\r\n    // console.log('selectedCell:', style, cell);\r\n    const { font, format } = style;\r\n    this.formatEl.setState(format);\r\n    this.fontEl.setState(font.name);\r\n    this.fontSizeEl.setState(font.size);\r\n    this.boldEl.setState(font.bold);\r\n    this.italicEl.setState(font.italic);\r\n    this.underlineEl.setState(style.underline);\r\n    this.strikeEl.setState(style.strike);\r\n    this.textColorEl.setState(style.color);\r\n    this.fillColorEl.setState(style.bgcolor);\r\n    this.alignEl.setState(style.align);\r\n    this.valignEl.setState(style.valign);\r\n    this.textwrapEl.setState(style.textwrap);\r\n    // console.log('freeze is Active:', data.freezeIsActive());\r\n    // this.freezeEl.setState(data.freezeIsActive());\r\n  }\r\n}\r\n","/* global document */\r\n/* global window */\r\nimport { h } from './element';\r\nimport Icon from './icon';\r\nimport { cssPrefix } from '../config';\r\nimport { bind, unbind } from './event';\r\n\r\nexport default class Modal {\r\n  constructor(title, content, width = '600px') {\r\n    this.title = title;\r\n    this.el = h('div', `${cssPrefix}-modal`).css('width', width).children(\r\n      h('div', `${cssPrefix}-modal-header`).children(\r\n        new Icon('close').on('click.stop', () => this.hide()),\r\n        this.title,\r\n      ),\r\n      h('div', `${cssPrefix}-modal-content`).children(...content),\r\n    ).hide();\r\n  }\r\n\r\n  show() {\r\n    // dimmer\r\n    this.dimmer = h('div', `${cssPrefix}-dimmer active`);\r\n    document.body.appendChild(this.dimmer.el);\r\n    const { width, height } = this.el.show().box();\r\n    const { clientHeight, clientWidth } = document.documentElement;\r\n    this.el.offset({\r\n      left: (clientWidth - width) / 2,\r\n      top: (clientHeight - height) / 3,\r\n    });\r\n    window.xkeydownEsc = (evt) => {\r\n      if (evt.keyCode === 27) {\r\n        this.hide();\r\n      }\r\n    };\r\n    bind(window, 'keydown', window.xkeydownEsc);\r\n  }\r\n\r\n  hide() {\r\n    this.el.hide();\r\n    document.body.removeChild(this.dimmer.el);\r\n    unbind(window, 'keydown', window.xkeydownEsc);\r\n    delete window.xkeydownEsc;\r\n  }\r\n}\r\n","import { h } from './element';\r\nimport { cssPrefix } from '../config';\r\n\r\nexport default class FormInput {\r\n  constructor(width, hint) {\r\n    this.vchange = () => {};\r\n    this.el = h('div', `${cssPrefix}-form-input`);\r\n    this.input = h('input', '').css('width', width)\r\n      .on('input', evt => this.vchange(evt))\r\n      .attr('placeholder', hint);\r\n    this.el.child(this.input);\r\n  }\r\n\r\n  focus() {\r\n    setTimeout(() => {\r\n      this.input.el.focus();\r\n    }, 10);\r\n  }\r\n\r\n  hint(v) {\r\n    this.input.attr('placeholder', v);\r\n  }\r\n\r\n  val(v) {\r\n    return this.input.val(v);\r\n  }\r\n}\r\n","import { h } from './element';\r\nimport Suggest from './suggest';\r\nimport { cssPrefix } from '../config';\r\n\r\nexport default class FormSelect {\r\n  constructor(key, items, width, getTitle = it => it, change = () => {}) {\r\n    this.key = key;\r\n    this.getTitle = getTitle;\r\n    this.vchange = () => {};\r\n    this.el = h('div', `${cssPrefix}-form-select`);\r\n    this.suggest = new Suggest(items.map(it => ({ key: it, title: this.getTitle(it) })), (it) => {\r\n      this.itemClick(it.key);\r\n      change(it.key);\r\n      this.vchange(it.key);\r\n    }, width, this.el);\r\n    this.el.children(\r\n      this.itemEl = h('div', 'input-text').html(this.getTitle(key)),\r\n      this.suggest.el,\r\n    ).on('click', () => this.show());\r\n  }\r\n\r\n  show() {\r\n    this.suggest.search('');\r\n  }\r\n\r\n  itemClick(it) {\r\n    this.key = it;\r\n    this.itemEl.html(this.getTitle(it));\r\n  }\r\n\r\n  val(v) {\r\n    if (v !== undefined) {\r\n      this.key = v;\r\n      this.itemEl.html(this.getTitle(v));\r\n      return this;\r\n    }\r\n    return this.key;\r\n  }\r\n}\r\n","import { h } from './element';\r\nimport { cssPrefix } from '../config';\r\nimport { t } from '../locale/locale';\r\n\r\nconst patterns = {\r\n  number: /(^\\d+$)|(^\\d+(\\.\\d{0,4})?$)/,\r\n  date: /^\\d{4}-\\d{1,2}-\\d{1,2}$/,\r\n};\r\n\r\n// rule: { required: false, type, pattern: // }\r\nexport default class FormField {\r\n  constructor(input, rule, label, labelWidth) {\r\n    this.label = '';\r\n    this.rule = rule;\r\n    if (label) {\r\n      this.label = h('label', 'label').css('width', `${labelWidth}px`).html(label);\r\n    }\r\n    this.tip = h('div', 'tip').child('tip').hide();\r\n    this.input = input;\r\n    this.input.vchange = () => this.validate();\r\n    this.el = h('div', `${cssPrefix}-form-field`)\r\n      .children(this.label, input.el, this.tip);\r\n  }\r\n\r\n  isShow() {\r\n    return this.el.css('display') !== 'none';\r\n  }\r\n\r\n  show() {\r\n    this.el.show();\r\n  }\r\n\r\n  hide() {\r\n    this.el.hide();\r\n    return this;\r\n  }\r\n\r\n  val(v) {\r\n    return this.input.val(v);\r\n  }\r\n\r\n  hint(hint) {\r\n    this.input.hint(hint);\r\n  }\r\n\r\n  validate() {\r\n    const {\r\n      input, rule, tip, el,\r\n    } = this;\r\n    const v = input.val();\r\n    if (rule.required) {\r\n      if (/^\\s*$/.test(v)) {\r\n        tip.html(t('validation.required'));\r\n        el.addClass('error');\r\n        return false;\r\n      }\r\n    }\r\n    if (rule.type || rule.pattern) {\r\n      const pattern = rule.pattern || patterns[rule.type];\r\n      if (!pattern.test(v)) {\r\n        tip.html(t('validation.notMatch'));\r\n        el.addClass('error');\r\n        return false;\r\n      }\r\n    }\r\n    el.removeClass('error');\r\n    return true;\r\n  }\r\n}\r\n","import { Element } from './element';\r\nimport { cssPrefix } from '../config';\r\nimport { t } from '../locale/locale';\r\n\r\nexport default class Button extends Element {\r\n  // type: primary\r\n  constructor(title, type = '') {\r\n    super('div', `${cssPrefix}-button ${type}`);\r\n    this.child(t(`button.${title}`));\r\n  }\r\n}\r\n","import Modal from './modal';\r\nimport FormInput from './form_input';\r\nimport FormSelect from './form_select';\r\nimport FormField from './form_field';\r\nimport Button from './button';\r\nimport { t } from '../locale/locale';\r\nimport { h } from './element';\r\nimport { cssPrefix } from '../config';\r\n\r\nconst fieldLabelWidth = 100;\r\n\r\nexport default class ModalValidation extends Modal {\r\n  constructor() {\r\n    const mf = new FormField(\r\n      new FormSelect('cell',\r\n        ['cell'], // cell|row|column\r\n        '100%',\r\n        it => t(`dataValidation.modeType.${it}`)),\r\n      { required: true },\r\n      `${t('dataValidation.range')}:`,\r\n      fieldLabelWidth,\r\n    );\r\n    const rf = new FormField(\r\n      new FormInput('120px', 'E3 or E3:F12'),\r\n      { required: true, pattern: /^([A-Z]{1,2}[1-9]\\d*)(:[A-Z]{1,2}[1-9]\\d*)?$/ },\r\n    );\r\n    const cf = new FormField(\r\n      new FormSelect('list',\r\n        ['list', 'number', 'date', 'phone', 'email'],\r\n        '100%',\r\n        it => t(`dataValidation.type.${it}`),\r\n        it => this.criteriaSelected(it)),\r\n      { required: true },\r\n      `${t('dataValidation.criteria')}:`,\r\n      fieldLabelWidth,\r\n    );\r\n\r\n    // operator\r\n    const of = new FormField(\r\n      new FormSelect('be',\r\n        ['be', 'nbe', 'eq', 'neq', 'lt', 'lte', 'gt', 'gte'],\r\n        '160px',\r\n        it => t(`dataValidation.operator.${it}`),\r\n        it => this.criteriaOperatorSelected(it)),\r\n      { required: true },\r\n    ).hide();\r\n    // min, max\r\n    const minvf = new FormField(\r\n      new FormInput('70px', '10'),\r\n      { required: true },\r\n    ).hide();\r\n    const maxvf = new FormField(\r\n      new FormInput('70px', '100'),\r\n      { required: true, type: 'number' },\r\n    ).hide();\r\n    // value\r\n    const svf = new FormField(\r\n      new FormInput('120px', 'a,b,c'),\r\n      { required: true },\r\n    );\r\n    const vf = new FormField(\r\n      new FormInput('70px', '10'),\r\n      { required: true, type: 'number' },\r\n    ).hide();\r\n\r\n    super(t('contextmenu.validation'), [\r\n      h('div', `${cssPrefix}-form-fields`).children(\r\n        mf.el,\r\n        rf.el,\r\n      ),\r\n      h('div', `${cssPrefix}-form-fields`).children(\r\n        cf.el,\r\n        of.el,\r\n        minvf.el,\r\n        maxvf.el,\r\n        vf.el,\r\n        svf.el,\r\n      ),\r\n      h('div', `${cssPrefix}-buttons`).children(\r\n        new Button('cancel').on('click', () => this.btnClick('cancel')),\r\n        new Button('remove').on('click', () => this.btnClick('remove')),\r\n        new Button('save', 'primary').on('click', () => this.btnClick('save')),\r\n      ),\r\n    ]);\r\n    this.mf = mf;\r\n    this.rf = rf;\r\n    this.cf = cf;\r\n    this.of = of;\r\n    this.minvf = minvf;\r\n    this.maxvf = maxvf;\r\n    this.vf = vf;\r\n    this.svf = svf;\r\n    this.change = () => {};\r\n  }\r\n\r\n  showVf(it) {\r\n    const hint = it === 'date' ? '2018-11-12' : '10';\r\n    const { vf } = this;\r\n    vf.input.hint(hint);\r\n    vf.show();\r\n  }\r\n\r\n  criteriaSelected(it) {\r\n    const {\r\n      of, minvf, maxvf, vf, svf,\r\n    } = this;\r\n    if (it === 'date' || it === 'number') {\r\n      of.show();\r\n      minvf.rule.type = it;\r\n      maxvf.rule.type = it;\r\n      if (it === 'date') {\r\n        minvf.hint('2018-11-12');\r\n        maxvf.hint('2019-11-12');\r\n      } else {\r\n        minvf.hint('10');\r\n        maxvf.hint('100');\r\n      }\r\n      minvf.show();\r\n      maxvf.show();\r\n      vf.hide();\r\n      svf.hide();\r\n    } else {\r\n      if (it === 'list') {\r\n        svf.show();\r\n      } else {\r\n        svf.hide();\r\n      }\r\n      vf.hide();\r\n      of.hide();\r\n      minvf.hide();\r\n      maxvf.hide();\r\n    }\r\n  }\r\n\r\n  criteriaOperatorSelected(it) {\r\n    if (!it) return;\r\n    const {\r\n      minvf, maxvf, vf,\r\n    } = this;\r\n    if (it === 'be' || it === 'nbe') {\r\n      minvf.show();\r\n      maxvf.show();\r\n      vf.hide();\r\n    } else {\r\n      const type = this.cf.val();\r\n      vf.rule.type = type;\r\n      if (type === 'date') {\r\n        vf.hint('2018-11-12');\r\n      } else {\r\n        vf.hint('10');\r\n      }\r\n      vf.show();\r\n      minvf.hide();\r\n      maxvf.hide();\r\n    }\r\n  }\r\n\r\n  btnClick(action) {\r\n    if (action === 'cancel') {\r\n      this.hide();\r\n    } else if (action === 'remove') {\r\n      this.change('remove');\r\n      this.hide();\r\n    } else if (action === 'save') {\r\n      // validate\r\n      const attrs = ['mf', 'rf', 'cf', 'of', 'svf', 'vf', 'minvf', 'maxvf'];\r\n      for (let i = 0; i < attrs.length; i += 1) {\r\n        const field = this[attrs[i]];\r\n        // console.log('field:', field);\r\n        if (field.isShow()) {\r\n          // console.log('it:', it);\r\n          if (!field.validate()) return;\r\n        }\r\n      }\r\n\r\n      const mode = this.mf.val();\r\n      const ref = this.rf.val();\r\n      const type = this.cf.val();\r\n      const operator = this.of.val();\r\n      let value = this.svf.val();\r\n      if (type === 'number' || type === 'date') {\r\n        if (operator === 'be' || operator === 'nbe') {\r\n          value = [this.minvf.val(), this.maxvf.val()];\r\n        } else {\r\n          value = this.vf.val();\r\n        }\r\n      }\r\n      // console.log(mode, ref, type, operator, value);\r\n      this.change('save',\r\n        mode,\r\n        ref,\r\n        {\r\n          type, operator, required: false, value,\r\n        });\r\n      this.hide();\r\n    }\r\n  }\r\n\r\n  // validation: { mode, ref, validator }\r\n  setValue(v) {\r\n    if (v) {\r\n      const {\r\n        mf, rf, cf, of, svf, vf, minvf, maxvf,\r\n      } = this;\r\n      const {\r\n        mode, ref, validator,\r\n      } = v;\r\n      const {\r\n        type, operator, value,\r\n      } = validator || { type: 'list' };\r\n      mf.val(mode || 'cell');\r\n      rf.val(ref);\r\n      cf.val(type);\r\n      of.val(operator);\r\n      if (Array.isArray(value)) {\r\n        minvf.val(value[0]);\r\n        maxvf.val(value[1]);\r\n      } else {\r\n        svf.val(value || '');\r\n        vf.val(value || '');\r\n      }\r\n      this.criteriaSelected(type);\r\n      this.criteriaOperatorSelected(operator);\r\n    }\r\n    this.show();\r\n  }\r\n}\r\n","import { h } from './element';\r\nimport Button from './button';\r\nimport { bindClickoutside, unbindClickoutside } from './event';\r\nimport { cssPrefix } from '../config';\r\nimport { t } from '../locale/locale';\r\n\r\nfunction buildMenu(clsName) {\r\n  return h('div', `${cssPrefix}-item ${clsName}`);\r\n}\r\n\r\nfunction buildSortItem(it) {\r\n  return buildMenu('state').child(t(`sort.${it}`))\r\n    .on('click.stop', () => this.itemClick(it));\r\n}\r\n\r\nfunction buildFilterBody(items) {\r\n  const { filterbEl, filterValues } = this;\r\n  filterbEl.html('');\r\n  const itemKeys = Object.keys(items);\r\n  itemKeys.forEach((it, index) => {\r\n    const cnt = items[it];\r\n    const active = filterValues.includes(it) ? 'checked' : '';\r\n    filterbEl.child(h('div', `${cssPrefix}-item state ${active}`)\r\n      .on('click.stop', () => this.filterClick(index, it))\r\n      .children(it === '' ? t('filter.empty') : it, h('div', 'label').html(`(${cnt})`)));\r\n  });\r\n}\r\n\r\nfunction resetFilterHeader() {\r\n  const { filterhEl, filterValues, values } = this;\r\n  filterhEl.html(`${filterValues.length} / ${values.length}`);\r\n  filterhEl.checked(filterValues.length === values.length);\r\n}\r\n\r\nexport default class SortFilter {\r\n  constructor() {\r\n    this.filterbEl = h('div', `${cssPrefix}-body`);\r\n    this.filterhEl = h('div', `${cssPrefix}-header state`).on('click.stop', () => this.filterClick(0, 'all'));\r\n    this.el = h('div', `${cssPrefix}-sort-filter`).children(\r\n      this.sortAscEl = buildSortItem.call(this, 'asc'),\r\n      this.sortDescEl = buildSortItem.call(this, 'desc'),\r\n      buildMenu('divider'),\r\n      h('div', `${cssPrefix}-filter`).children(\r\n        this.filterhEl,\r\n        this.filterbEl,\r\n      ),\r\n      h('div', `${cssPrefix}-buttons`).children(\r\n        new Button('cancel').on('click', () => this.btnClick('cancel')),\r\n        new Button('ok', 'primary').on('click', () => this.btnClick('ok')),\r\n      ),\r\n    ).hide();\r\n    // this.setFilters(['test1', 'test2', 'text3']);\r\n    this.ci = null;\r\n    this.sortDesc = null;\r\n    this.values = null;\r\n    this.filterValues = [];\r\n  }\r\n\r\n  btnClick(it) {\r\n    if (it === 'ok') {\r\n      const { ci, sort, filterValues } = this;\r\n      if (this.ok) {\r\n        this.ok(ci, sort, 'in', filterValues);\r\n      }\r\n    }\r\n    this.hide();\r\n  }\r\n\r\n  itemClick(it) {\r\n    // console.log('it:', it);\r\n    this.sort = it;\r\n    const { sortAscEl, sortDescEl } = this;\r\n    sortAscEl.checked(it === 'asc');\r\n    sortDescEl.checked(it === 'desc');\r\n  }\r\n\r\n  filterClick(index, it) {\r\n    // console.log('index:', index, it);\r\n    const { filterbEl, filterValues, values } = this;\r\n    const children = filterbEl.children();\r\n    if (it === 'all') {\r\n      if (children.length === filterValues.length) {\r\n        this.filterValues = [];\r\n        children.forEach(i => h(i).checked(false));\r\n      } else {\r\n        this.filterValues = Array.from(values);\r\n        children.forEach(i => h(i).checked(true));\r\n      }\r\n    } else {\r\n      const checked = h(children[index]).toggle('checked');\r\n      if (checked) {\r\n        filterValues.push(it);\r\n      } else {\r\n        filterValues.splice(filterValues.findIndex(i => i === it), 1);\r\n      }\r\n    }\r\n    resetFilterHeader.call(this);\r\n  }\r\n\r\n  // v: autoFilter\r\n  // items: {value: cnt}\r\n  // sort { ci, order }\r\n  set(ci, items, filter, sort) {\r\n    this.ci = ci;\r\n    const { sortAscEl, sortDescEl } = this;\r\n    if (sort !== null) {\r\n      this.sort = sort.order;\r\n      sortAscEl.checked(sort.asc());\r\n      sortDescEl.checked(sort.desc());\r\n    } else {\r\n      this.sortDesc = null;\r\n      sortAscEl.checked(false);\r\n      sortDescEl.checked(false);\r\n    }\r\n    // this.setFilters(items, filter);\r\n    this.values = Object.keys(items);\r\n    this.filterValues = filter ? Array.from(filter.value) : Object.keys(items);\r\n    buildFilterBody.call(this, items, filter);\r\n    resetFilterHeader.call(this);\r\n  }\r\n\r\n  setOffset(v) {\r\n    this.el.offset(v).show();\r\n    let tindex = 1;\r\n    bindClickoutside(this.el, () => {\r\n      if (tindex <= 0) {\r\n        this.hide();\r\n      }\r\n      tindex -= 1;\r\n    });\r\n  }\r\n\r\n  show() {\r\n    this.el.show();\r\n  }\r\n\r\n  hide() {\r\n    this.el.hide();\r\n    unbindClickoutside(this.el);\r\n  }\r\n}\r\n","/* global document */\r\nimport { h } from './element';\r\nimport Icon from './icon';\r\nimport { cssPrefix } from '../config';\r\n\r\nexport function xtoast(title, content) {\r\n  const el = h('div', `${cssPrefix}-toast`);\r\n  const dimmer = h('div', `${cssPrefix}-dimmer active`);\r\n  const remove = () => {\r\n    document.body.removeChild(el.el);\r\n    document.body.removeChild(dimmer.el);\r\n  };\r\n\r\n  el.children(\r\n    h('div', `${cssPrefix}-toast-header`).children(\r\n      new Icon('close').on('click.stop', () => remove()),\r\n      title,\r\n    ),\r\n    h('div', `${cssPrefix}-toast-content`).html(content),\r\n  );\r\n  document.body.appendChild(el.el);\r\n  document.body.appendChild(dimmer.el);\r\n  // set offset\r\n  const { width, height } = el.box();\r\n  const { clientHeight, clientWidth } = document.documentElement;\r\n  el.offset({\r\n    left: (clientWidth - width) / 2,\r\n    top: (clientHeight - height) / 3,\r\n  });\r\n}\r\n\r\nexport default {};\r\n","/* global window */\r\nimport {h} from './element';\r\nimport {\r\n    bind,\r\n    mouseMoveUp,\r\n    bindTouch,\r\n    createEventEmitter,\r\n} from './event';\r\nimport Resizer from './resizer';\r\nimport Scrollbar from './scrollbar';\r\nimport Selector from './selector';\r\nimport Editor from './editor';\r\n// import Print from './print';\r\nimport ContextMenu from './contextmenu';\r\nimport Table from './table';\r\nimport Toolbar from './toolbar/index';\r\nimport ModalValidation from './modal_validation';\r\nimport SortFilter from './sort_filter';\r\nimport {xtoast} from './message';\r\nimport {cssPrefix} from '../config';\r\nimport {formulas} from '../core/formula';\r\n\r\n/**\r\n * @desc throttle fn\r\n * @param func function\r\n * @param wait Delay in milliseconds\r\n */\r\nfunction throttle(func, wait) {\r\n    let timeout;\r\n    return (...arg) => {\r\n        const that = this;\r\n        const args = arg;\r\n        if (!timeout) {\r\n            timeout = setTimeout(() => {\r\n                timeout = null;\r\n                func.apply(that, args);\r\n            }, wait);\r\n        }\r\n    };\r\n}\r\n\r\nfunction scrollbarMove() {\r\n    const {\r\n        data, verticalScrollbar, horizontalScrollbar,\r\n    } = this;\r\n    const {\r\n        l, t, left, top, width, height,\r\n    } = data.getSelectedRect();\r\n    const tableOffset = this.getTableOffset();\r\n    // console.log(',l:', l, ', left:', left, ', tOffset.left:', tableOffset.width);\r\n    if (Math.abs(left) + width > tableOffset.width) {\r\n        horizontalScrollbar.move({left: l + width - tableOffset.width});\r\n    } else {\r\n        const fsw = data.freezeTotalWidth();\r\n        if (left < fsw) {\r\n            horizontalScrollbar.move({left: l - 1 - fsw});\r\n        }\r\n    }\r\n    // console.log('top:', top, ', height:', height, ', tof.height:', tableOffset.height);\r\n    if (Math.abs(top) + height > tableOffset.height) {\r\n        verticalScrollbar.move({top: t + height - tableOffset.height - 1});\r\n    } else {\r\n        const fsh = data.freezeTotalHeight();\r\n        if (top < fsh) {\r\n            verticalScrollbar.move({top: t - 1 - fsh});\r\n        }\r\n    }\r\n}\r\n\r\nfunction selectorSet(multiple, ri, ci, indexesUpdated = true, moving = false) {\r\n    if (ri === -1 && ci === -1) return;\r\n    const {\r\n        table, selector, toolbar, data,\r\n        contextMenu,\r\n    } = this;\r\n    const cell = data.getCell(ri, ci);\r\n    if (multiple) {\r\n        selector.setEnd(ri, ci, moving);\r\n        this.trigger('cells-selected', cell, selector.range);\r\n    } else {\r\n        // trigger click event\r\n        selector.set(ri, ci, indexesUpdated);\r\n        this.trigger('cell-selected', cell, ri, ci);\r\n    }\r\n    // contextMenu.setMode((ri === -1 || ci === -1) ? 'row-col' : 'range');\r\n    let mode = 'range' //yvan 选择模式2\r\n    if (ri === -1) {\r\n        mode = 'col'\r\n    } else if (ci === -1) {\r\n        mode = 'row'\r\n    }\r\n    contextMenu.setMode((ri === -1 || ci === -1) ? 'row-col' : 'range', {mode, ri, ci});\r\n    toolbar.reset();\r\n    table.render();\r\n}\r\n\r\n// multiple: boolean\r\n// direction: left | right | up | down | row-first | row-last | col-first | col-last\r\nfunction selectorMove(multiple, direction) {\r\n    const {\r\n        selector, data,\r\n    } = this;\r\n    const {rows, cols} = data;\r\n    let [ri, ci] = selector.indexes;\r\n    const {eri, eci} = selector.range;\r\n    if (multiple) {\r\n        [ri, ci] = selector.moveIndexes;\r\n    }\r\n    // console.log('selector.move:', ri, ci);\r\n    if (direction === 'left') {\r\n        if (ci > 0) ci -= 1;\r\n    } else if (direction === 'right') {\r\n        if (eci !== ci) ci = eci;\r\n        if (ci < cols.len - 1) ci += 1;\r\n    } else if (direction === 'up') {\r\n        if (ri > 0) ri -= 1;\r\n    } else if (direction === 'down') {\r\n        if (eri !== ri) ri = eri;\r\n        if (ri < rows.len - 1) ri += 1;\r\n    } else if (direction === 'row-first') {\r\n        ci = 0;\r\n    } else if (direction === 'row-last') {\r\n        ci = cols.len - 1;\r\n    } else if (direction === 'col-first') {\r\n        ri = 0;\r\n    } else if (direction === 'col-last') {\r\n        ri = rows.len - 1;\r\n    }\r\n    if (multiple) {\r\n        selector.moveIndexes = [ri, ci];\r\n    }\r\n    selectorSet.call(this, multiple, ri, ci);\r\n    scrollbarMove.call(this);\r\n}\r\n\r\n// private methods\r\nfunction overlayerMousemove(evt) {\r\n    // console.log('x:', evt.offsetX, ', y:', evt.offsetY);\r\n    if (evt.buttons !== 0) return;\r\n    if (evt.target.className === `${cssPrefix}-resizer-hover`) return;\r\n    const {offsetX, offsetY} = evt;\r\n    const {\r\n        rowResizer, colResizer, tableEl, data,\r\n    } = this;\r\n    const {rows, cols} = data;\r\n    if (offsetX > cols.indexWidth && offsetY > rows.height) {\r\n        rowResizer.hide();\r\n        colResizer.hide();\r\n        return;\r\n    }\r\n    const tRect = tableEl.box();\r\n    const cRect = data.getCellRectByXY(evt.offsetX, evt.offsetY);\r\n    if (cRect.ri >= 0 && cRect.ci === -1) {\r\n        cRect.width = cols.indexWidth;\r\n        rowResizer.show(cRect, {\r\n            width: tRect.width,\r\n        });\r\n        if (rows.isHide(cRect.ri - 1)) {\r\n            rowResizer.showUnhide(cRect.ri);\r\n        } else {\r\n            rowResizer.hideUnhide();\r\n        }\r\n    } else {\r\n        rowResizer.hide();\r\n    }\r\n    if (cRect.ri === -1 && cRect.ci >= 0) {\r\n        cRect.height = rows.height;\r\n        colResizer.show(cRect, {\r\n            height: tRect.height,\r\n        });\r\n        if (cols.isHide(cRect.ci - 1)) {\r\n            colResizer.showUnhide(cRect.ci);\r\n        } else {\r\n            colResizer.hideUnhide();\r\n        }\r\n    } else {\r\n        colResizer.hide();\r\n    }\r\n}\r\n\r\n// let scrollThreshold = 15;\r\nfunction overlayerMousescroll(evt) {\r\n    // scrollThreshold -= 1;\r\n    // if (scrollThreshold > 0) return;\r\n    // scrollThreshold = 15;\r\n\r\n    const {verticalScrollbar, horizontalScrollbar, data} = this;\r\n    const {top} = verticalScrollbar.scroll();\r\n    const {left} = horizontalScrollbar.scroll();\r\n    // console.log('evt:::', evt.wheelDelta, evt.detail * 40);\r\n\r\n    const {rows, cols} = data;\r\n\r\n    // deltaY for vertical delta\r\n    const {deltaY, deltaX} = evt;\r\n    const loopValue = (ii, vFunc) => {\r\n        let i = ii;\r\n        let v = 0;\r\n        do {\r\n            v = vFunc(i);\r\n            i += 1;\r\n        } while (v <= 0);\r\n        return v;\r\n    };\r\n    // console.log('deltaX', deltaX, 'evt.detail', evt.detail);\r\n    // if (evt.detail) deltaY = evt.detail * 40;\r\n    const moveY = (vertical) => {\r\n        if (vertical > 0) {\r\n            // up\r\n            const ri = data.scroll.ri + 1;\r\n            if (ri < rows.len) {\r\n                const rh = loopValue(ri, i => rows.getHeight(i));\r\n                verticalScrollbar.move({top: top + rh - 1});\r\n            }\r\n        } else {\r\n            // down\r\n            const ri = data.scroll.ri - 1;\r\n            if (ri >= 0) {\r\n                const rh = loopValue(ri, i => rows.getHeight(i));\r\n                verticalScrollbar.move({top: ri === 0 ? 0 : top - rh});\r\n            }\r\n        }\r\n    };\r\n\r\n    // deltaX for Mac horizontal scroll\r\n    const moveX = (horizontal) => {\r\n        if (horizontal > 0) {\r\n            // left\r\n            const ci = data.scroll.ci + 1;\r\n            if (ci < cols.len) {\r\n                const cw = loopValue(ci, i => cols.getWidth(i));\r\n                horizontalScrollbar.move({left: left + cw - 1});\r\n            }\r\n        } else {\r\n            // right\r\n            const ci = data.scroll.ci - 1;\r\n            if (ci >= 0) {\r\n                const cw = loopValue(ci, i => cols.getWidth(i));\r\n                horizontalScrollbar.move({left: ci === 0 ? 0 : left - cw});\r\n            }\r\n        }\r\n    };\r\n    const tempY = Math.abs(deltaY);\r\n    const tempX = Math.abs(deltaX);\r\n    const temp = Math.max(tempY, tempX);\r\n    // console.log('event:', evt);\r\n    // detail for windows/mac firefox vertical scroll\r\n    if (/Firefox/i.test(window.navigator.userAgent)) throttle(moveY(evt.detail), 50);\r\n    if (temp === tempX) throttle(moveX(deltaX), 50);\r\n    if (temp === tempY) throttle(moveY(deltaY), 50);\r\n}\r\n\r\nfunction overlayerTouch(direction, distance) {\r\n    const {verticalScrollbar, horizontalScrollbar} = this;\r\n    const {top} = verticalScrollbar.scroll();\r\n    const {left} = horizontalScrollbar.scroll();\r\n\r\n    if (direction === 'left' || direction === 'right') {\r\n        horizontalScrollbar.move({left: left - distance});\r\n    } else if (direction === 'up' || direction === 'down') {\r\n        verticalScrollbar.move({top: top - distance});\r\n    }\r\n}\r\n\r\nfunction verticalScrollbarSet() {\r\n    const {data, verticalScrollbar} = this;\r\n    const {height} = this.getTableOffset();\r\n    const erth = data.exceptRowTotalHeight(0, -1);\r\n    // console.log('erth:', erth);\r\n    verticalScrollbar.set(height, data.rows.totalHeight() - erth);\r\n}\r\n\r\nfunction horizontalScrollbarSet() {\r\n    const {data, horizontalScrollbar} = this;\r\n    const {width} = this.getTableOffset();\r\n    if (data) {\r\n        horizontalScrollbar.set(width, data.cols.totalWidth());\r\n    }\r\n}\r\n\r\nfunction sheetFreeze() {\r\n    const {\r\n        selector, data, editor,\r\n    } = this;\r\n    const [ri, ci] = data.freeze;\r\n    if (ri > 0 || ci > 0) {\r\n        const fwidth = data.freezeTotalWidth();\r\n        const fheight = data.freezeTotalHeight();\r\n        editor.setFreezeLengths(fwidth, fheight);\r\n    }\r\n    selector.resetAreaOffset();\r\n}\r\n\r\nfunction sheetReset() {\r\n    const {\r\n        tableEl,\r\n        overlayerEl,\r\n        overlayerCEl,\r\n        table,\r\n        toolbar,\r\n        selector,\r\n        el,\r\n    } = this;\r\n    const tOffset = this.getTableOffset();\r\n    const vRect = this.getRect();\r\n    tableEl.attr(vRect);\r\n    overlayerEl.offset(vRect);\r\n    overlayerCEl.offset(tOffset);\r\n    el.css('width', `${vRect.width}px`);\r\n    verticalScrollbarSet.call(this);\r\n    horizontalScrollbarSet.call(this);\r\n    sheetFreeze.call(this);\r\n    table.render();\r\n    toolbar.reset();\r\n    selector.reset();\r\n}\r\n\r\nfunction clearClipboard() {\r\n    const {data, selector} = this;\r\n    data.clearClipboard();\r\n    selector.hideClipboard();\r\n}\r\n\r\nfunction copy(evt) {\r\n    const {data, selector} = this;\r\n    if (data.settings.mode === 'read') return;\r\n    data.copy();\r\n    data.copyToSystemClipboard(evt);\r\n    selector.showClipboard();\r\n}\r\n\r\nfunction vv(evt) {\r\n    const {data} = this\r\n    console.log('vv', this)\r\n    debugger\r\n}\r\n\r\nfunction cut() {\r\n    const {data, selector} = this;\r\n    if (data.settings.mode === 'read') return;\r\n    data.cut();\r\n    selector.showClipboard();\r\n}\r\n\r\nfunction paste(what, evt) {\r\n    const {data} = this;\r\n    if (data.settings.mode === 'read') return;\r\n    if (data.clipboard.isClear()) {\r\n        const resetSheet = () => sheetReset.call(this);\r\n        const eventTrigger = (rows) => {\r\n            this.trigger('pasted-clipboard', rows);\r\n        };\r\n        // pastFromSystemClipboard is async operation, need to tell it how to reset sheet and trigger event after it finishes\r\n        // pasting content from system clipboard\r\n        data.pasteFromSystemClipboard(resetSheet, eventTrigger);\r\n    } else if (data.paste(what, msg => xtoast('Tip', msg))) {\r\n        sheetReset.call(this);\r\n    } else if (evt) {\r\n        const cdata = evt.clipboardData.getData('text/plain');\r\n        this.data.pasteFromText(cdata);\r\n        sheetReset.call(this);\r\n    }\r\n}\r\n\r\nfunction hideRowsOrCols() {\r\n    this.data.hideRowsOrCols();\r\n    sheetReset.call(this);\r\n}\r\n\r\nfunction unhideRowsOrCols(type, index) {\r\n    this.data.unhideRowsOrCols(type, index);\r\n    sheetReset.call(this);\r\n}\r\n\r\nfunction autofilter() {\r\n    const {data} = this;\r\n    data.autofilter();\r\n    sheetReset.call(this);\r\n}\r\n\r\nfunction toolbarChangePaintformatPaste() {\r\n    const {toolbar} = this;\r\n    if (toolbar.paintformatActive()) {\r\n        paste.call(this, 'format');\r\n        clearClipboard.call(this);\r\n        toolbar.paintformatToggle();\r\n    }\r\n}\r\n\r\nfunction overlayerMousedown(evt) {\r\n    // console.log(':::::overlayer.mousedown:', evt.detail, evt.button, evt.buttons, evt.shiftKey);\r\n    // console.log('evt.target.className:', evt.target.className);\r\n    const {\r\n        selector, data, table, sortFilter,\r\n    } = this;\r\n    const {offsetX, offsetY} = evt;\r\n    const isAutofillEl = evt.target.className === `${cssPrefix}-selector-corner`;\r\n    const cellRect = data.getCellRectByXY(offsetX, offsetY);\r\n    const {\r\n        left, top, width, height,\r\n    } = cellRect;\r\n    let {ri, ci} = cellRect;\r\n    // sort or filter\r\n    const {autoFilter} = data;\r\n    if (autoFilter.includes(ri, ci)) {\r\n        if (left + width - 20 < offsetX && top + height - 20 < offsetY) {\r\n            const items = autoFilter.items(ci, (r, c) => data.rows.getCell(r, c));\r\n            sortFilter.hide();\r\n            sortFilter.set(ci, items, autoFilter.getFilter(ci), autoFilter.getSort(ci));\r\n            sortFilter.setOffset({left, top: top + height + 2});\r\n            return;\r\n        }\r\n    }\r\n\r\n    // console.log('ri:', ri, ', ci:', ci);\r\n    if (!evt.shiftKey) {\r\n        // console.log('selectorSetStart:::');\r\n        if (isAutofillEl) {\r\n            selector.showAutofill(ri, ci);\r\n        } else {\r\n            selectorSet.call(this, false, ri, ci);\r\n        }\r\n\r\n        // mouse move up\r\n        mouseMoveUp(window, (e) => {\r\n            // console.log('mouseMoveUp::::');\r\n            ({ri, ci} = data.getCellRectByXY(e.offsetX, e.offsetY));\r\n            if (isAutofillEl) {\r\n                selector.showAutofill(ri, ci);\r\n            } else if (e.buttons === 1 && !e.shiftKey) {\r\n                selectorSet.call(this, true, ri, ci, true, true);\r\n            }\r\n        }, () => {\r\n            if (isAutofillEl && selector.arange && data.settings.mode !== 'read') {\r\n                if (data.autofill(selector.arange, 'all', msg => xtoast('Tip', msg))) {\r\n                    table.render();\r\n                }\r\n            }\r\n            selector.hideAutofill();\r\n            toolbarChangePaintformatPaste.call(this);\r\n        });\r\n    }\r\n\r\n    if (!isAutofillEl && evt.buttons === 1) {\r\n        if (evt.shiftKey) {\r\n            // console.log('shiftKey::::');\r\n            selectorSet.call(this, true, ri, ci);\r\n        }\r\n    }\r\n}\r\n\r\nfunction editorSetOffset() {\r\n    const {editor, data} = this;\r\n    const sOffset = data.getSelectedRect();\r\n    const tOffset = this.getTableOffset();\r\n    let sPosition = 'top';\r\n    // console.log('sOffset:', sOffset, ':', tOffset);\r\n    if (sOffset.top > tOffset.height / 2) {\r\n        sPosition = 'bottom';\r\n    }\r\n    editor.setOffset(sOffset, sPosition);\r\n}\r\n\r\nfunction editorSet() {\r\n    const {editor, data} = this;\r\n    if (data.settings.mode === 'read') return;\r\n    editorSetOffset.call(this);\r\n    editor.setCell(data.getSelectedCell(), data.getSelectedValidator());\r\n    clearClipboard.call(this);\r\n}\r\n\r\nfunction verticalScrollbarMove(distance) {\r\n    const {data, table, selector} = this;\r\n    data.scrolly(distance, () => {\r\n        selector.resetBRLAreaOffset();\r\n        editorSetOffset.call(this);\r\n        table.render();\r\n    });\r\n}\r\n\r\nfunction horizontalScrollbarMove(distance) {\r\n    const {data, table, selector} = this;\r\n    data.scrollx(distance, () => {\r\n        selector.resetBRTAreaOffset();\r\n        editorSetOffset.call(this);\r\n        table.render();\r\n    });\r\n}\r\n\r\nfunction rowResizerFinished(cRect, distance) {\r\n    const {ri} = cRect;\r\n    const {table, selector, data} = this;\r\n    const {sri, eri} = selector.range;\r\n    if (ri >= sri && ri <= eri) {\r\n        for (let row = sri; row <= eri; row += 1) {\r\n            data.rows.setHeight(row, distance);\r\n        }\r\n    } else {\r\n        data.rows.setHeight(ri, distance);\r\n    }\r\n\r\n    table.render();\r\n    selector.resetAreaOffset();\r\n    verticalScrollbarSet.call(this);\r\n    editorSetOffset.call(this);\r\n}\r\n\r\nfunction colResizerFinished(cRect, distance) {\r\n    const {ci} = cRect;\r\n    const {table, selector, data} = this;\r\n    const {sci, eci} = selector.range;\r\n    if (ci >= sci && ci <= eci) {\r\n        for (let col = sci; col <= eci; col += 1) {\r\n            data.cols.setWidth(col, distance);\r\n        }\r\n    } else {\r\n        data.cols.setWidth(ci, distance);\r\n    }\r\n\r\n    table.render();\r\n    selector.resetAreaOffset();\r\n    horizontalScrollbarSet.call(this);\r\n    editorSetOffset.call(this);\r\n}\r\n\r\nfunction dataSetCellText(text, state = 'finished') {\r\n    const {data, table} = this;\r\n    // const [ri, ci] = selector.indexes;\r\n    if (data.settings.mode === 'read') return;\r\n    data.setSelectedCellText(text, state);\r\n    const {ri, ci} = data.selector;\r\n    if (state === 'finished') {\r\n        table.render();\r\n    } else {\r\n        this.trigger('cell-edited', text, ri, ci);\r\n    }\r\n}\r\n\r\nfunction insertDeleteRowColumn(type) {\r\n    const {data} = this;\r\n    if (data.settings.mode === 'read') return;\r\n    if (type === 'insert-row') {\r\n        data.insert('row');\r\n    } else if (type === 'delete-row') {\r\n        data.delete('row');\r\n    } else if (type === 'insert-column') {\r\n        data.insert('column');\r\n    } else if (type === 'delete-column') {\r\n        data.delete('column');\r\n    } else if (type === 'delete-cell') {\r\n        data.deleteCell();\r\n    } else if (type === 'delete-cell-format') {\r\n        data.deleteCell('format');\r\n    } else if (type === 'delete-cell-text') {\r\n        data.deleteCell('text');\r\n    } else if (type === 'cell-printable') {\r\n        data.setSelectedCellAttr('printable', true);\r\n    } else if (type === 'cell-non-printable') {\r\n        data.setSelectedCellAttr('printable', false);\r\n    } else if (type === 'cell-editable') {\r\n        data.setSelectedCellAttr('editable', true);\r\n    } else if (type === 'cell-non-editable') {\r\n        data.setSelectedCellAttr('editable', false);\r\n    }\r\n    clearClipboard.call(this);\r\n    sheetReset.call(this);\r\n}\r\n\r\nfunction toolbarChange(type, value) {\r\n    const {data} = this;\r\n    if (type === 'undo') {\r\n        this.undo();\r\n    } else if (type === 'redo') {\r\n        this.redo();\r\n    } else if (type === 'print') {\r\n        this.print.preview();\r\n    } else if (type === 'paintformat') {\r\n        if (value === true) copy.call(this);\r\n        else clearClipboard.call(this);\r\n    } else if (type === 'clearformat') {\r\n        insertDeleteRowColumn.call(this, 'delete-cell-format');\r\n    } else if (type === 'link') {\r\n        // link\r\n    } else if (type === 'chart') {\r\n        // chart\r\n    } else if (type === 'autofilter') {\r\n        // filter\r\n        autofilter.call(this);\r\n    } else if (type === 'freeze') {\r\n        if (value) {\r\n            const {ri, ci} = data.selector;\r\n            this.freeze(ri, ci);\r\n        } else {\r\n            this.freeze(0, 0);\r\n        }\r\n    } else {\r\n        data.setSelectedCellAttr(type, value);\r\n        if (type === 'formula' && !data.selector.multiple()) {\r\n            editorSet.call(this);\r\n        }\r\n        sheetReset.call(this);\r\n    }\r\n}\r\n\r\nfunction sortFilterChange(ci, order, operator, value) {\r\n    // console.log('sort:', sortDesc, operator, value);\r\n    this.data.setAutoFilter(ci, order, operator, value);\r\n    sheetReset.call(this);\r\n}\r\n\r\nfunction sheetInitEvents() {\r\n    const {\r\n        selector,\r\n        overlayerEl,\r\n        rowResizer,\r\n        colResizer,\r\n        verticalScrollbar,\r\n        horizontalScrollbar,\r\n        editor,\r\n        contextMenu,\r\n        toolbar,\r\n        modalValidation,\r\n        sortFilter,\r\n    } = this;\r\n    // overlayer\r\n    overlayerEl\r\n        .on('mousemove', (evt) => {\r\n            overlayerMousemove.call(this, evt);\r\n        })\r\n        .on('mousedown', (evt) => {\r\n            editor.clear();\r\n            contextMenu.hide();\r\n            // the left mouse button: mousedown → mouseup → click\r\n            // the right mouse button: mousedown → contenxtmenu → mouseup\r\n            if (evt.buttons === 2) {\r\n                if (this.data.xyInSelectedRect(evt.offsetX, evt.offsetY)) {\r\n                    contextMenu.setPosition(evt.offsetX, evt.offsetY);\r\n                } else {\r\n                    overlayerMousedown.call(this, evt);\r\n                    contextMenu.setPosition(evt.offsetX, evt.offsetY);\r\n                }\r\n                evt.stopPropagation();\r\n            } else if (evt.detail === 2) {\r\n                editorSet.call(this);\r\n            } else {\r\n                // yvan 挂载\r\n                overlayerMousedown.call(this, evt);\r\n            }\r\n        })\r\n        .on('mousewheel.stop', (evt) => {\r\n            overlayerMousescroll.call(this, evt);\r\n        })\r\n        .on('mouseout', (evt) => {\r\n            const {offsetX, offsetY} = evt;\r\n            if (offsetY <= 0) colResizer.hide();\r\n            if (offsetX <= 0) rowResizer.hide();\r\n        });\r\n\r\n    selector.inputChange = (v) => {\r\n        dataSetCellText.call(this, v, 'input');\r\n        editorSet.call(this);\r\n    };\r\n\r\n    // slide on mobile\r\n    bindTouch(overlayerEl.el, {\r\n        move: (direction, d) => {\r\n            overlayerTouch.call(this, direction, d);\r\n        },\r\n    });\r\n\r\n    // toolbar change\r\n    toolbar.change = (type, value) => toolbarChange.call(this, type, value);\r\n\r\n    // sort filter ok\r\n    sortFilter.ok = (ci, order, o, v) => sortFilterChange.call(this, ci, order, o, v);\r\n\r\n    // resizer finished callback\r\n    rowResizer.finishedFn = (cRect, distance) => {\r\n        rowResizerFinished.call(this, cRect, distance);\r\n    };\r\n    colResizer.finishedFn = (cRect, distance) => {\r\n        colResizerFinished.call(this, cRect, distance);\r\n    };\r\n    // resizer unhide callback\r\n    rowResizer.unhideFn = (index) => {\r\n        unhideRowsOrCols.call(this, 'row', index);\r\n    };\r\n    colResizer.unhideFn = (index) => {\r\n        unhideRowsOrCols.call(this, 'col', index);\r\n    };\r\n    // scrollbar move callback\r\n    verticalScrollbar.moveFn = (distance, evt) => {\r\n        verticalScrollbarMove.call(this, distance, evt);\r\n    };\r\n    horizontalScrollbar.moveFn = (distance, evt) => {\r\n        horizontalScrollbarMove.call(this, distance, evt);\r\n    };\r\n    // editor\r\n    editor.change = (state, itext) => {\r\n        dataSetCellText.call(this, itext, state);\r\n    };\r\n    // modal validation\r\n    modalValidation.change = (action, ...args) => {\r\n        if (action === 'save') {\r\n            this.data.addValidation(...args);\r\n        } else {\r\n            this.data.removeValidation();\r\n        }\r\n    };\r\n    // contextmenu\r\n    contextMenu.itemClick = (type, item) => {\r\n        // console.log('type:', type);\r\n        // yvan: itemClick here\r\n        if (typeof item.onClick === 'function') {\r\n            item.onClick.call(this, this.data, item, this)\r\n        } else if (type === 'validation') {\r\n            modalValidation.setValue(this.data.getSelectedValidation());\r\n        } else if (type === 'copy') {\r\n            copy.call(this);\r\n        } else if (type === 'cut') {\r\n            cut.call(this);\r\n        } else if (type === 'paste') {\r\n            paste.call(this, 'all');\r\n        } else if (type === 'paste-value') {\r\n            paste.call(this, 'text');\r\n        } else if (type === 'paste-format') {\r\n            paste.call(this, 'format');\r\n        } else if (type === 'hide') {\r\n            hideRowsOrCols.call(this);\r\n        } else {\r\n            insertDeleteRowColumn.call(this, type);\r\n        }\r\n    };\r\n\r\n    bind(window, 'resize', () => {\r\n        this.reload();\r\n    });\r\n\r\n    // yvan: click 事件换为 mousedown 事件，click事件在 el-dialog 情况下会无法触发\r\n    // bind(window, 'click', (evt) => {\r\n    //     this.focusing = overlayerEl.contains(evt.target);\r\n    // });\r\n    bind(window, 'mousedown', (evt) => {\r\n        this.focusing = overlayerEl.contains(evt.target);\r\n    });\r\n\r\n    bind(window, 'paste', (evt) => {\r\n        if (!this.focusing) return;\r\n        paste.call(this, 'all', evt);\r\n        evt.preventDefault();\r\n    });\r\n\r\n    bind(window, 'copy', (evt) => {\r\n        if (!this.focusing) return;\r\n        copy.call(this, evt);\r\n        evt.preventDefault();\r\n    });\r\n\r\n    // for selector\r\n    bind(window, 'keydown', (evt) => {\r\n        if (!this.focusing) return;\r\n        const keyCode = evt.keyCode || evt.which;\r\n        const {\r\n            key, ctrlKey, shiftKey, metaKey,\r\n        } = evt;\r\n        // console.log('keydown.evt: ', keyCode);\r\n        if (ctrlKey || metaKey) {\r\n            // const { sIndexes, eIndexes } = selector;\r\n            // let what = 'all';\r\n            // if (shiftKey) what = 'text';\r\n            // if (altKey) what = 'format';\r\n            switch (keyCode) {\r\n                case 90:\r\n                    // undo: ctrl + z\r\n                    this.undo();\r\n                    evt.preventDefault();\r\n                    break;\r\n                case 89:\r\n                    // redo: ctrl + y\r\n                    this.redo();\r\n                    evt.preventDefault();\r\n                    break;\r\n                case 67:\r\n                    // ctrl + c\r\n                    // => copy\r\n                    // copy.call(this);\r\n                    // evt.preventDefault();\r\n                    break;\r\n                case 88:\r\n                    // ctrl + x\r\n                    cut.call(this);\r\n                    evt.preventDefault();\r\n                    break;\r\n                case 85:\r\n                    // ctrl + u\r\n                    toolbar.trigger('underline');\r\n                    evt.preventDefault();\r\n                    break;\r\n                case 86:\r\n                    // ctrl + v\r\n                    // => paste\r\n                    // evt.preventDefault();\r\n                    break;\r\n                case 37:\r\n                    // ctrl + left\r\n                    selectorMove.call(this, shiftKey, 'row-first');\r\n                    evt.preventDefault();\r\n                    break;\r\n                case 38:\r\n                    // ctrl + up\r\n                    selectorMove.call(this, shiftKey, 'col-first');\r\n                    evt.preventDefault();\r\n                    break;\r\n                case 39:\r\n                    // ctrl + right\r\n                    selectorMove.call(this, shiftKey, 'row-last');\r\n                    evt.preventDefault();\r\n                    break;\r\n                case 40:\r\n                    // ctrl + down\r\n                    selectorMove.call(this, shiftKey, 'col-last');\r\n                    evt.preventDefault();\r\n                    break;\r\n                case 32:\r\n                    // ctrl + space, all cells in col\r\n                    selectorSet.call(this, false, -1, this.data.selector.ci, false);\r\n                    evt.preventDefault();\r\n                    break;\r\n                case 66:\r\n                    // ctrl + B\r\n                    toolbar.trigger('bold');\r\n                    break;\r\n                case 73:\r\n                    // ctrl + I\r\n                    toolbar.trigger('italic');\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n        } else {\r\n            // console.log('evt.keyCode:', evt.keyCode);\r\n            switch (keyCode) {\r\n                case 32:\r\n                    if (shiftKey) {\r\n                        // shift + space, all cells in row\r\n                        selectorSet.call(this, false, this.data.selector.ri, -1, false);\r\n                    }\r\n                    break;\r\n                case 27: // esc\r\n                    contextMenu.hide();\r\n                    clearClipboard.call(this);\r\n                    break;\r\n                case 37: // left\r\n                    selectorMove.call(this, shiftKey, 'left');\r\n                    evt.preventDefault();\r\n                    break;\r\n                case 38: // up\r\n                    selectorMove.call(this, shiftKey, 'up');\r\n                    evt.preventDefault();\r\n                    break;\r\n                case 39: // right\r\n                    selectorMove.call(this, shiftKey, 'right');\r\n                    evt.preventDefault();\r\n                    break;\r\n                case 40: // down\r\n                    selectorMove.call(this, shiftKey, 'down');\r\n                    evt.preventDefault();\r\n                    break;\r\n                case 9: // tab\r\n                    editor.clear();\r\n                    // shift + tab => move left\r\n                    // tab => move right\r\n                    selectorMove.call(this, false, shiftKey ? 'left' : 'right');\r\n                    evt.preventDefault();\r\n                    break;\r\n                case 13: // enter\r\n                    editor.clear();\r\n                    // shift + enter => move up\r\n                    // enter => move down\r\n                    selectorMove.call(this, false, shiftKey ? 'up' : 'down');\r\n                    evt.preventDefault();\r\n                    break;\r\n                case 8: // backspace\r\n                    insertDeleteRowColumn.call(this, 'delete-cell-text');\r\n                    evt.preventDefault();\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n\r\n            if (key === 'Delete') {\r\n                insertDeleteRowColumn.call(this, 'delete-cell-text');\r\n                evt.preventDefault();\r\n            } else if ((keyCode >= 65 && keyCode <= 90)\r\n                || (keyCode >= 48 && keyCode <= 57)\r\n                || (keyCode >= 96 && keyCode <= 105)\r\n                || evt.key === '='\r\n            ) {\r\n                dataSetCellText.call(this, evt.key, 'input');\r\n                editorSet.call(this);\r\n            } else if (keyCode === 113) {\r\n                // F2\r\n                editorSet.call(this);\r\n            }\r\n        }\r\n    });\r\n}\r\n\r\nexport default class Sheet {\r\n    constructor(targetEl, data, options) {\r\n        this.options = options\r\n        this.eventMap = createEventEmitter();\r\n        const {view, showToolbar, showContextmenu} = data.settings;\r\n        this.el = h('div', `${cssPrefix}-sheet`);\r\n        this.toolbar = new Toolbar(data, view.width, !showToolbar);\r\n        // this.print = new Print(data); //yvan 不要打印\r\n        targetEl.children(this.toolbar.el, this.el /* , this.print.el */);\r\n        this.data = data;\r\n        // table\r\n        this.tableEl = h('canvas', `${cssPrefix}-table`);\r\n        // resizer\r\n        this.rowResizer = new Resizer(false, data.rows.height);\r\n        this.colResizer = new Resizer(true, data.cols.minWidth);\r\n        // scrollbar\r\n        this.verticalScrollbar = new Scrollbar(true);\r\n        this.horizontalScrollbar = new Scrollbar(false);\r\n        // editor\r\n        this.editor = new Editor(\r\n            formulas,\r\n            () => this.getTableOffset(),\r\n            data.rows.height,\r\n        );\r\n        // data validation\r\n        this.modalValidation = new ModalValidation();\r\n        // contextMenu\r\n        this.contextMenu = new ContextMenu(() => this.getRect(), !showContextmenu, this);\r\n        // selector\r\n        this.selector = new Selector(data);\r\n        this.overlayerCEl = h('div', `${cssPrefix}-overlayer-content`)\r\n            .children(\r\n                this.editor.el,\r\n                this.selector.el,\r\n            );\r\n        this.overlayerEl = h('div', `${cssPrefix}-overlayer`)\r\n            .child(this.overlayerCEl);\r\n        // sortFilter\r\n        this.sortFilter = new SortFilter();\r\n        // root element\r\n        this.el.children(\r\n            this.tableEl,\r\n            this.overlayerEl.el,\r\n            this.rowResizer.el,\r\n            this.colResizer.el,\r\n            this.verticalScrollbar.el,\r\n            this.horizontalScrollbar.el,\r\n            this.contextMenu.el,\r\n            this.modalValidation.el,\r\n            this.sortFilter.el,\r\n        );\r\n        // table\r\n        this.table = new Table(this.tableEl.el, data);\r\n        sheetInitEvents.call(this);\r\n        sheetReset.call(this);\r\n        // init selector [0, 0]\r\n        selectorSet.call(this, false, 0, 0);\r\n\r\n        // yvan: selectorSet 可以对外\r\n        this.selectorSet = selectorSet.bind(this)\r\n    }\r\n\r\n    on(eventName, func) {\r\n        this.eventMap.on(eventName, func);\r\n        return this;\r\n    }\r\n\r\n    trigger(eventName, ...args) {\r\n        const {eventMap} = this;\r\n        eventMap.fire(eventName, args);\r\n    }\r\n\r\n    resetData(data) {\r\n        // before\r\n        this.editor.clear();\r\n        // after\r\n        this.data = data;\r\n        verticalScrollbarSet.call(this);\r\n        horizontalScrollbarSet.call(this);\r\n        this.toolbar.resetData(data);\r\n        // this.print.resetData(data);\r\n        this.selector.resetData(data);\r\n        this.table.resetData(data);\r\n    }\r\n\r\n    loadData(data) {\r\n        this.data.setData(data);\r\n        sheetReset.call(this);\r\n        return this;\r\n    }\r\n\r\n    // freeze rows or cols\r\n    freeze(ri, ci) {\r\n        const {data} = this;\r\n        data.setFreeze(ri, ci);\r\n        sheetReset.call(this);\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * yvan 固定表头\r\n     * @param ri\r\n     */\r\n    setTableHeader(ri) {\r\n        const {data} = this;\r\n        data.setTableHeader(ri);\r\n        sheetReset.call(this);\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * yvan 固定表尾\r\n     * @param ri\r\n     */\r\n    setTableFooter(ri) {\r\n        const {data} = this;\r\n        data.setTableFooter(ri);\r\n        sheetReset.call(this);\r\n        return this;\r\n    }\r\n    /**\r\n     * yvan 固定页头\r\n     * @param ri\r\n     */\r\n    setPageHeader(ri) {\r\n        const {data} = this;\r\n        data.setPageHeader(ri);\r\n        sheetReset.call(this);\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * yvan 固定页尾\r\n     * @param ri\r\n     */\r\n    setPageFooter(ri) {\r\n        const {data} = this;\r\n        data.setPageFooter(ri);\r\n        sheetReset.call(this);\r\n        return this;\r\n    }\r\n\r\n    undo() {\r\n        this.data.undo();\r\n        sheetReset.call(this);\r\n    }\r\n\r\n    redo() {\r\n        this.data.redo();\r\n        sheetReset.call(this);\r\n    }\r\n\r\n    reload() {\r\n        sheetReset.call(this);\r\n        return this;\r\n    }\r\n\r\n    getRect() {\r\n        const {data} = this;\r\n        return {width: data.viewWidth(), height: data.viewHeight()};\r\n    }\r\n\r\n    getTableOffset() {\r\n        const {rows, cols} = this.data;\r\n        const {width, height} = this.getRect();\r\n        return {\r\n            width: width - cols.indexWidth,\r\n            height: height - rows.height,\r\n            left: cols.indexWidth,\r\n            top: rows.height,\r\n        };\r\n    }\r\n}\r\n","import { h } from './element';\r\nimport { bindClickoutside, unbindClickoutside } from './event';\r\nimport { cssPrefix } from '../config';\r\nimport Icon from './icon';\r\nimport FormInput from './form_input';\r\nimport Dropdown from './dropdown';\r\n// Record: temp not used\r\n// import { xtoast } from './message';\r\nimport { tf } from '../locale/locale';\r\n\r\nclass DropdownMore extends Dropdown {\r\n  constructor(click) {\r\n    const icon = new Icon('ellipsis');\r\n    super(icon, 'auto', false, 'top-left');\r\n    this.contentClick = click;\r\n  }\r\n\r\n  reset(items) {\r\n    const eles = items.map((it, i) => h('div', `${cssPrefix}-item`)\r\n      .css('width', '150px')\r\n      .css('font-weight', 'normal')\r\n      .on('click', () => {\r\n        this.contentClick(i);\r\n        this.hide();\r\n      })\r\n      .child(it));\r\n    this.setContentChildren(...eles);\r\n  }\r\n\r\n  setTitle() {}\r\n}\r\n\r\nconst menuItems = [\r\n  { key: 'delete', title: tf('contextmenu.deleteSheet') },\r\n];\r\n\r\nfunction buildMenuItem(item) {\r\n  return h('div', `${cssPrefix}-item`)\r\n    .child(item.title())\r\n    .on('click', () => {\r\n      this.itemClick(item.key);\r\n      this.hide();\r\n    });\r\n}\r\n\r\nfunction buildMenu() {\r\n  return menuItems.map(it => buildMenuItem.call(this, it));\r\n}\r\n\r\nclass ContextMenu {\r\n  constructor() {\r\n    this.el = h('div', `${cssPrefix}-contextmenu`)\r\n      .css('width', '160px')\r\n      .children(...buildMenu.call(this))\r\n      .hide();\r\n    this.itemClick = () => {};\r\n  }\r\n\r\n  hide() {\r\n    const { el } = this;\r\n    el.hide();\r\n    unbindClickoutside(el);\r\n  }\r\n\r\n  setOffset(offset) {\r\n    const { el } = this;\r\n    el.offset(offset);\r\n    el.show();\r\n    bindClickoutside(el);\r\n  }\r\n}\r\n\r\nexport default class Bottombar {\r\n  constructor(addFunc = () => {},\r\n    swapFunc = () => {},\r\n    deleteFunc = () => {},\r\n    updateFunc = () => {}) {\r\n    this.swapFunc = swapFunc;\r\n    this.updateFunc = updateFunc;\r\n    this.dataNames = [];\r\n    this.activeEl = null;\r\n    this.deleteEl = null;\r\n    this.items = [];\r\n    this.moreEl = new DropdownMore((i) => {\r\n      this.clickSwap2(this.items[i]);\r\n    });\r\n    this.contextMenu = new ContextMenu();\r\n    this.contextMenu.itemClick = deleteFunc;\r\n    this.el = h('div', `${cssPrefix}-bottombar`).children(\r\n      this.contextMenu.el,\r\n      this.menuEl = h('ul', `${cssPrefix}-menu`).child(\r\n        h('li', '').children(\r\n          new Icon('add').on('click', () => {\r\n            addFunc();\r\n          }),\r\n          h('span', '').child(this.moreEl),\r\n        ),\r\n      ),\r\n    );\r\n  }\r\n\r\n  addItem(name, active, options) {\r\n    this.dataNames.push(name);\r\n    const item = h('li', active ? 'active' : '').child(name);\r\n    item.on('click', () => {\r\n      this.clickSwap2(item);\r\n    }).on('contextmenu', (evt) => {\r\n      if (options.mode === 'read') return;\r\n      const { offsetLeft, offsetHeight } = evt.target;\r\n      this.contextMenu.setOffset({ left: offsetLeft, bottom: offsetHeight + 1 });\r\n      this.deleteEl = item;\r\n    }).on('dblclick', () => {\r\n      if (options.mode === 'read') return;\r\n      const v = item.html();\r\n      const input = new FormInput('auto', '');\r\n      input.val(v);\r\n      input.input.on('blur', ({ target }) => {\r\n        const { value } = target;\r\n        const nindex = this.dataNames.findIndex(it => it === v);\r\n        this.renameItem(nindex, value);\r\n        /*\r\n        this.dataNames.splice(nindex, 1, value);\r\n        this.moreEl.reset(this.dataNames);\r\n        item.html('').child(value);\r\n        this.updateFunc(nindex, value);\r\n        */\r\n      });\r\n      item.html('').child(input.el);\r\n      input.focus();\r\n    });\r\n    if (active) {\r\n      this.clickSwap(item);\r\n    }\r\n    this.items.push(item);\r\n    this.menuEl.child(item);\r\n    this.moreEl.reset(this.dataNames);\r\n  }\r\n\r\n  renameItem(index, value) {\r\n    this.dataNames.splice(index, 1, value);\r\n    this.moreEl.reset(this.dataNames);\r\n    this.items[index].html('').child(value);\r\n    this.updateFunc(index, value);\r\n  }\r\n\r\n  clear() {\r\n    this.items.forEach((it) => {\r\n      this.menuEl.removeChild(it.el);\r\n    });\r\n    this.items = [];\r\n    this.dataNames = [];\r\n    this.moreEl.reset(this.dataNames);\r\n  }\r\n\r\n  deleteItem() {\r\n    const { activeEl, deleteEl } = this;\r\n    if (this.items.length > 1) {\r\n      const index = this.items.findIndex(it => it === deleteEl);\r\n      this.items.splice(index, 1);\r\n      this.dataNames.splice(index, 1);\r\n      this.menuEl.removeChild(deleteEl.el);\r\n      this.moreEl.reset(this.dataNames);\r\n      if (activeEl === deleteEl) {\r\n        const [f] = this.items;\r\n        this.activeEl = f;\r\n        this.activeEl.toggle();\r\n        return [index, 0];\r\n      }\r\n      return [index, -1];\r\n    }\r\n    return [-1];\r\n  }\r\n\r\n  clickSwap2(item) {\r\n    const index = this.items.findIndex(it => it === item);\r\n    this.clickSwap(item);\r\n    this.activeEl.toggle();\r\n    this.swapFunc(index);\r\n  }\r\n\r\n  clickSwap(item) {\r\n    if (this.activeEl !== null) {\r\n      this.activeEl.toggle();\r\n    }\r\n    this.activeEl = item;\r\n  }\r\n}\r\n","/* global window, document */\r\nimport { h } from './component/element';\r\nimport DataProxy from './core/data_proxy';\r\nimport Sheet from './component/sheet';\r\nimport Bottombar from './component/bottombar';\r\nimport { cssPrefix } from './config';\r\nimport { locale } from './locale/locale';\r\nimport './index.less';\r\n\r\n\r\nclass Spreadsheet {\r\n  constructor(selectors, options = {}) {\r\n    let targetEl = selectors;\r\n    this.options = { showBottomBar: true, ...options };\r\n    this.sheetIndex = 1;\r\n    this.datas = [];\r\n    if (typeof selectors === 'string') {\r\n      targetEl = document.querySelector(selectors);\r\n    }\r\n    this.bottombar = this.options.showBottomBar ? new Bottombar(() => {\r\n      if (this.options.mode === 'read') return;\r\n      const d = this.addSheet();\r\n      this.sheet.resetData(d);\r\n    }, (index) => {\r\n      const d = this.datas[index];\r\n      this.sheet.resetData(d);\r\n    }, () => {\r\n      this.deleteSheet();\r\n    }, (index, value) => {\r\n      this.datas[index].name = value;\r\n      this.sheet.trigger('change');\r\n    }) : null;\r\n    this.data = this.addSheet();\r\n    const rootEl = h('div', `${cssPrefix}`)\r\n      .on('contextmenu', evt => evt.preventDefault());\r\n    // create canvas element\r\n    targetEl.appendChild(rootEl.el);\r\n    this.sheet = new Sheet(rootEl, this.data, options);\r\n    if (this.bottombar !== null) {\r\n      rootEl.child(this.bottombar.el);\r\n    }\r\n  }\r\n\r\n  addSheet(name, active = true) {\r\n    const n = name || `sheet${this.sheetIndex}`;\r\n    const d = new DataProxy(n, this.options);\r\n    d.change = (...args) => {\r\n      this.sheet.trigger('change', ...args);\r\n    };\r\n    this.datas.push(d);\r\n    // console.log('d:', n, d, this.datas);\r\n    if (this.bottombar !== null) {\r\n      this.bottombar.addItem(n, active, this.options);\r\n    }\r\n    this.sheetIndex += 1;\r\n    return d;\r\n  }\r\n\r\n  deleteSheet() {\r\n    if (this.bottombar === null) return;\r\n\r\n    const [oldIndex, nindex] = this.bottombar.deleteItem();\r\n    if (oldIndex >= 0) {\r\n      this.datas.splice(oldIndex, 1);\r\n      if (nindex >= 0) this.sheet.resetData(this.datas[nindex]);\r\n      this.sheet.trigger('change');\r\n    }\r\n  }\r\n\r\n  loadData(data) {\r\n    const ds = Array.isArray(data) ? data : [data];\r\n    if (this.bottombar !== null) {\r\n      this.bottombar.clear();\r\n    }\r\n    this.datas = [];\r\n    if (ds.length > 0) {\r\n      for (let i = 0; i < ds.length; i += 1) {\r\n        const it = ds[i];\r\n        const nd = this.addSheet(it.name, i === 0);\r\n        nd.setData(it);\r\n        if (i === 0) {\r\n          this.sheet.resetData(nd);\r\n        }\r\n      }\r\n    }\r\n    return this;\r\n  }\r\n\r\n  getData() {\r\n    return this.datas.map(it => it.getData());\r\n  }\r\n\r\n  cellText(ri, ci, text, sheetIndex = 0) {\r\n    this.datas[sheetIndex].setCellText(ri, ci, text, 'finished');\r\n    return this;\r\n  }\r\n\r\n  cell(ri, ci, sheetIndex = 0) {\r\n    return this.datas[sheetIndex].getCell(ri, ci);\r\n  }\r\n\r\n  cellStyle(ri, ci, sheetIndex = 0) {\r\n    return this.datas[sheetIndex].getCellStyle(ri, ci);\r\n  }\r\n\r\n  reRender() {\r\n    this.sheet.table.render();\r\n    return this;\r\n  }\r\n\r\n  on(eventName, func) {\r\n    this.sheet.on(eventName, func);\r\n    return this;\r\n  }\r\n\r\n  validate() {\r\n    const { validations } = this.data;\r\n    return validations.errors.size <= 0;\r\n  }\r\n\r\n  change(cb) {\r\n    this.sheet.on('change', cb);\r\n    return this;\r\n  }\r\n\r\n  static locale(lang, message) {\r\n    locale(lang, message);\r\n  }\r\n}\r\n\r\nconst spreadsheet = (el, options = {}) => new Spreadsheet(el, options);\r\n\r\nif (window) {\r\n  window.x_spreadsheet = spreadsheet;\r\n  window.x_spreadsheet.locale = (lang, message) => locale(lang, message);\r\n}\r\n\r\nexport default Spreadsheet;\r\nexport {\r\n  spreadsheet,\r\n};\r\n","export default {\r\n  toolbar: {\r\n    undo: '撤销',\r\n    redo: '恢复',\r\n    print: '打印',\r\n    paintformat: '格式刷',\r\n    clearformat: '清除格式',\r\n    format: '数据格式',\r\n    fontName: '字体',\r\n    fontSize: '字号',\r\n    fontBold: '加粗',\r\n    fontItalic: '倾斜',\r\n    underline: '下划线',\r\n    strike: '删除线',\r\n    color: '字体颜色',\r\n    bgcolor: '填充颜色',\r\n    border: '边框',\r\n    merge: '合并单元格',\r\n    align: '水平对齐',\r\n    valign: '垂直对齐',\r\n    textwrap: '自动换行',\r\n    freeze: '冻结',\r\n    autofilter: '自动筛选',\r\n    formula: '函数',\r\n    more: '更多',\r\n  },\r\n  contextmenu: {\r\n    vv: '测试',\r\n    copy: '复制',\r\n    cut: '剪切',\r\n    paste: '粘贴',\r\n    pasteValue: '粘贴数据',\r\n    pasteFormat: '粘贴格式',\r\n    hide: '隐藏',\r\n    insertRow: '插入行',\r\n    insertColumn: '插入列',\r\n    deleteSheet: '删除',\r\n    deleteRow: '删除行',\r\n    deleteColumn: '删除列',\r\n    deleteCell: '删除',\r\n    deleteCellText: '删除数据',\r\n    validation: '数据验证',\r\n    cellprintable: '可打印',\r\n    cellnonprintable: '不可打印',\r\n    celleditable: '可编辑',\r\n    cellnoneditable: '不可编辑',\r\n  },\r\n  print: {\r\n    size: '纸张大小',\r\n    orientation: '方向',\r\n    orientations: ['横向', '纵向'],\r\n  },\r\n  format: {\r\n    normal: '正常',\r\n    text: '文本',\r\n    number: '数值',\r\n    percent: '百分比',\r\n    rmb: '人民币',\r\n    usd: '美元',\r\n    eur: '欧元',\r\n    date: '短日期',\r\n    time: '时间',\r\n    datetime: '长日期',\r\n    duration: '持续时间',\r\n    barcode: '条码', //yvan\r\n    qrcode: '二维码',\r\n    image: '图片',\r\n  },\r\n  formula: {\r\n    sum: '求和',\r\n    average: '求平均值',\r\n    max: '求最大值',\r\n    min: '求最小值',\r\n    concat: '字符拼接',\r\n    _if: '条件判断',\r\n    and: '和',\r\n    or: '或',\r\n  },\r\n  validation: {\r\n    required: '此值必填',\r\n    notMatch: '此值不匹配验证规则',\r\n    between: '此值应在 {} 和 {} 之间',\r\n    notBetween: '此值不应在 {} 和 {} 之间',\r\n    notIn: '此值不在列表中',\r\n    equal: '此值应该等于 {}',\r\n    notEqual: '此值不应该等于 {}',\r\n    lessThan: '此值应该小于 {}',\r\n    lessThanEqual: '此值应该小于等于 {}',\r\n    greaterThan: '此值应该大于 {}',\r\n    greaterThanEqual: '此值应该大于等于 {}',\r\n  },\r\n  error: {\r\n    pasteForMergedCell: '无法对合并的单元格执行此操作',\r\n  },\r\n  calendar: {\r\n    weeks: ['日', '一', '二', '三', '四', '五', '六'],\r\n    months: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\r\n  },\r\n  button: {\r\n    next: '下一步',\r\n    cancel: '取消',\r\n    remove: '删除',\r\n    save: '保存',\r\n    ok: '确认',\r\n  },\r\n  sort: {\r\n    desc: '降序',\r\n    asc: '升序',\r\n  },\r\n  filter: {\r\n    empty: '空白',\r\n  },\r\n  dataValidation: {\r\n    mode: '模式',\r\n    range: '单元区间',\r\n    criteria: '条件',\r\n    modeType: {\r\n      cell: '单元格',\r\n      column: '列模式',\r\n      row: '行模式',\r\n    },\r\n    type: {\r\n      list: '列表',\r\n      number: '数字',\r\n      date: '日期',\r\n      phone: '手机号',\r\n      email: '电子邮件',\r\n    },\r\n    operator: {\r\n      be: '在区间',\r\n      nbe: '不在区间',\r\n      lt: '小于',\r\n      lte: '小于等于',\r\n      gt: '大于',\r\n      gte: '大于等于',\r\n      eq: '等于',\r\n      neq: '不等于',\r\n    },\r\n  },\r\n};\r\n","<template>\r\n  <div class=\"json-data-result-content\">\r\n    <div>\r\n      <el-form :model=\"form\" label-width=\"100px\">\r\n        <el-form-item label=\"编码\">\r\n          <el-input v-model=\"form.ds_name\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"名称\">\r\n          <el-input v-model=\"form.ds_title\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"是否集合\">\r\n          <el-switch v-model=\"form.is_collection\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"JSON数据\">\r\n          <el-input v-model=\"form.ds_json\" type=\"textarea\" placeholder=\"请输入JSON数据\" :rows=\"3\"/>\r\n        </el-form-item>\r\n        <el-form-item>\r\n          <el-button type=\"primary\" @click=\"handleJsonAnalyze\">JSON解析</el-button>\r\n        </el-form-item>\r\n      </el-form>\r\n    </div>\r\n    <div>\r\n      <el-tabs v-model=\"activeTab\" class=\"demo-tabs\">\r\n        <el-tab-pane label=\"报表字段明细\" name=\"reportFieldDetail\">\r\n          <ag-grid-vue\r\n              style=\"width: 100%; height: 500px\"\r\n              class=\"ag-theme-alpine\"\r\n              v-bind=\"reportFieldDetailGridOption\"\r\n              @grid-ready=\"onGridReady\"\r\n          >\r\n          </ag-grid-vue>\r\n        </el-tab-pane>\r\n      </el-tabs>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport _ from \"lodash\";\r\nimport {dict} from \"../../../store\"\r\nimport {ElMessage} from \"element-plus\";\r\nimport YvDesignerAgGridCombo from \"./yv-designer-aggrid-combo.vue\"\r\nimport {toRaw} from \"vue\";\r\n\r\nexport default {\r\n  name: \"yv-designer-json-datasource\",\r\n  props: {\r\n    result: {\r\n      ds_name: String,\r\n      ds_title: String,\r\n      ds_type: String,\r\n      is_collection: Boolean,\r\n      ds_json: String,\r\n      children: Object\r\n    }\r\n  },\r\n  components: {\r\n    YvDesignerAgGridCombo\r\n  },\r\n  data() {\r\n\r\n    const fieldTypeList = [\r\n      {code: 'number', desc: '数值类型'},\r\n      {code: 'string', desc: '字符类型'},\r\n      {code: 'date', desc: '日期类型'},\r\n      {code: 'datetime', desc: '日期时间类型'},\r\n    ]\r\n\r\n    const datetimeFormatterList = [\r\n      {code: 'yyyy-MM-dd HH:mm:ss', desc: 'yyyy-MM-dd HH:mm:ss'},\r\n      {code: 'yyyy-MM-dd', desc: 'yyyy-MM-dd'},\r\n    ]\r\n\r\n\r\n    const columnDefs = [\r\n      {\r\n        headerName: '#',\r\n        editable: false,\r\n        valueGetter: (params) => {\r\n          return params.node?.rowIndex + 1\r\n        }\r\n      },\r\n      {headerName: \"字段名\", field: \"field\", editable: false},\r\n      {headerName: \"字段文本\", field: \"field_label\"},\r\n      {headerName: \"排序\", field: \"field_sort\"},\r\n      {\r\n        headerName: \"类型\",\r\n        field: \"field_type\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: fieldTypeList},\r\n        cellRenderer: (params) => {\r\n          return fieldTypeList.find(fieldType => fieldType.code === params.value)?.desc\r\n        }\r\n      },\r\n      {\r\n        headerName: \"字典编码\",\r\n        field: \"field_dict\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: toRaw(dict.value)},\r\n        cellRenderer: (params) => {\r\n          return toRaw(dict.value)[params.value]?.desc\r\n        }\r\n      },\r\n      {\r\n        headerName: \"显示格式\",\r\n        field: \"formatter\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: datetimeFormatterList},\r\n      },\r\n      {\r\n        headerName: \"操作\",\r\n        editable: false,\r\n        pinned: 'right',\r\n        cellRenderer: (params) => {\r\n          const input = document.createElement(\"input\")\r\n          input.type = \"button\";\r\n          input.value = \"删除\";\r\n          input.checked = params.data.is_primary_key\r\n          input.addEventListener('click', function () {\r\n            params.api.applyTransaction({remove: [params.data]});\r\n          })\r\n          return input\r\n        }\r\n      },\r\n    ]\r\n\r\n    return {\r\n      form: {\r\n        ds_name: '',\r\n        ds_title: '',\r\n        ds_type: 'JSON',\r\n        is_collection: true,\r\n        ds_json: ''\r\n      },\r\n      activeTab: 'reportFieldDetail',\r\n      reportFieldDetailGridApi: null,\r\n      reportFieldDetailGridOption: {\r\n        columnDefs,\r\n        rowData: [],\r\n        defaultColDef: {\r\n          editable: true,\r\n        }\r\n      }\r\n    }\r\n  },\r\n  mounted() {\r\n    _.extend(this.form, this.result)\r\n  },\r\n  methods: {\r\n    onGridReady(params) {\r\n      this.reportFieldDetailGridApi = params.api;\r\n      if (this.result?.children) {\r\n        this.reportFieldDetailGridApi.setRowData(this.result?.children)\r\n      }\r\n    },\r\n    handleJsonAnalyze() {\r\n      let ds_json = this.form.ds_json\r\n      if (!ds_json) {\r\n        ElMessage.error('请输入正确的JSON数据')\r\n        return;\r\n      }\r\n      const jsonObj = this.parseJson(ds_json)\r\n      if (!jsonObj) {\r\n        return;\r\n      }\r\n      if (!jsonObj.hasOwnProperty('data')) {\r\n        ElMessage.error('JSON格式：用data包裹起来，暂不支持嵌套')\r\n        return;\r\n      }\r\n      let jsonData = jsonObj.data\r\n      if (this.form.is_collection) {\r\n        jsonData = jsonObj.data[0]\r\n      }\r\n      const fields = []\r\n      let sortNo = 0\r\n      const existFields = this.result?.children ?? []\r\n      const fieldMap = new Map()\r\n      for(let field of existFields){\r\n        fieldMap.set(field.field, field)\r\n      }\r\n      for (let key in jsonData) {\r\n        sortNo++\r\n        const existField = fieldMap.get(key) ?? {}\r\n        fields.push({field: key, field_label: key, field_sort: sortNo, field_type: existField.field_type, field_dict: existField.field_dict, formatter: existField.formatter})\r\n      }\r\n      this.reportFieldDetailGridApi.setRowData(fields)\r\n    },\r\n\r\n    parseJson(json: string) {\r\n      try {\r\n        return JSON.parse(json);\r\n      } catch (e) {\r\n        console.log(e)\r\n        ElMessage.error('请输入正确的JSON数据');\r\n        return \"\";\r\n      }\r\n    },\r\n    getResult() {\r\n      const children = []\r\n      this.reportFieldDetailGridApi.forEachNode((node) => {\r\n        children.push(node.data)\r\n      })\r\n      const result = _.cloneDeep(this.form)\r\n      result.field_label = result.ds_title\r\n      result.children = children;\r\n      return result;\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>","<template>\r\n  <div class=\"json-data-result-content\">\r\n    <div>\r\n      <el-form :model=\"form\" label-width=\"100px\">\r\n        <el-form-item label=\"编码\">\r\n          <el-input v-model=\"form.ds_name\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"名称\">\r\n          <el-input v-model=\"form.ds_title\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"是否集合\">\r\n          <el-switch v-model=\"form.is_collection\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"JSON数据\">\r\n          <el-input v-model=\"form.ds_json\" type=\"textarea\" placeholder=\"请输入JSON数据\" :rows=\"3\"/>\r\n        </el-form-item>\r\n        <el-form-item>\r\n          <el-button type=\"primary\" @click=\"handleJsonAnalyze\">JSON解析</el-button>\r\n        </el-form-item>\r\n      </el-form>\r\n    </div>\r\n    <div>\r\n      <el-tabs v-model=\"activeTab\" class=\"demo-tabs\">\r\n        <el-tab-pane label=\"报表字段明细\" name=\"reportFieldDetail\">\r\n          <ag-grid-vue\r\n              style=\"width: 100%; height: 500px\"\r\n              class=\"ag-theme-alpine\"\r\n              v-bind=\"reportFieldDetailGridOption\"\r\n              @grid-ready=\"onGridReady\"\r\n          >\r\n          </ag-grid-vue>\r\n        </el-tab-pane>\r\n      </el-tabs>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport _ from \"lodash\";\r\nimport {dict} from \"../../../store\"\r\nimport {ElMessage} from \"element-plus\";\r\nimport YvDesignerAgGridCombo from \"./yv-designer-aggrid-combo.vue\"\r\nimport {toRaw} from \"vue\";\r\n\r\nexport default {\r\n  name: \"yv-designer-json-datasource\",\r\n  props: {\r\n    result: {\r\n      ds_name: String,\r\n      ds_title: String,\r\n      ds_type: String,\r\n      is_collection: Boolean,\r\n      ds_json: String,\r\n      children: Object\r\n    }\r\n  },\r\n  components: {\r\n    YvDesignerAgGridCombo\r\n  },\r\n  data() {\r\n\r\n    const fieldTypeList = [\r\n      {code: 'number', desc: '数值类型'},\r\n      {code: 'string', desc: '字符类型'},\r\n      {code: 'date', desc: '日期类型'},\r\n      {code: 'datetime', desc: '日期时间类型'},\r\n    ]\r\n\r\n    const datetimeFormatterList = [\r\n      {code: 'yyyy-MM-dd HH:mm:ss', desc: 'yyyy-MM-dd HH:mm:ss'},\r\n      {code: 'yyyy-MM-dd', desc: 'yyyy-MM-dd'},\r\n    ]\r\n\r\n\r\n    const columnDefs = [\r\n      {\r\n        headerName: '#',\r\n        editable: false,\r\n        valueGetter: (params) => {\r\n          return params.node?.rowIndex + 1\r\n        }\r\n      },\r\n      {headerName: \"字段名\", field: \"field\", editable: false},\r\n      {headerName: \"字段文本\", field: \"field_label\"},\r\n      {headerName: \"排序\", field: \"field_sort\"},\r\n      {\r\n        headerName: \"类型\",\r\n        field: \"field_type\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: fieldTypeList},\r\n        cellRenderer: (params) => {\r\n          return fieldTypeList.find(fieldType => fieldType.code === params.value)?.desc\r\n        }\r\n      },\r\n      {\r\n        headerName: \"字典编码\",\r\n        field: \"field_dict\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: toRaw(dict.value)},\r\n        cellRenderer: (params) => {\r\n          return toRaw(dict.value)[params.value]?.desc\r\n        }\r\n      },\r\n      {\r\n        headerName: \"显示格式\",\r\n        field: \"formatter\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: datetimeFormatterList},\r\n      },\r\n      {\r\n        headerName: \"操作\",\r\n        editable: false,\r\n        pinned: 'right',\r\n        cellRenderer: (params) => {\r\n          const input = document.createElement(\"input\")\r\n          input.type = \"button\";\r\n          input.value = \"删除\";\r\n          input.checked = params.data.is_primary_key\r\n          input.addEventListener('click', function () {\r\n            params.api.applyTransaction({remove: [params.data]});\r\n          })\r\n          return input\r\n        }\r\n      },\r\n    ]\r\n\r\n    return {\r\n      form: {\r\n        ds_name: '',\r\n        ds_title: '',\r\n        ds_type: 'JSON',\r\n        is_collection: true,\r\n        ds_json: ''\r\n      },\r\n      activeTab: 'reportFieldDetail',\r\n      reportFieldDetailGridApi: null,\r\n      reportFieldDetailGridOption: {\r\n        columnDefs,\r\n        rowData: [],\r\n        defaultColDef: {\r\n          editable: true,\r\n        }\r\n      }\r\n    }\r\n  },\r\n  mounted() {\r\n    _.extend(this.form, this.result)\r\n  },\r\n  methods: {\r\n    onGridReady(params) {\r\n      this.reportFieldDetailGridApi = params.api;\r\n      if (this.result?.children) {\r\n        this.reportFieldDetailGridApi.setRowData(this.result?.children)\r\n      }\r\n    },\r\n    handleJsonAnalyze() {\r\n      let ds_json = this.form.ds_json\r\n      if (!ds_json) {\r\n        ElMessage.error('请输入正确的JSON数据')\r\n        return;\r\n      }\r\n      const jsonObj = this.parseJson(ds_json)\r\n      if (!jsonObj) {\r\n        return;\r\n      }\r\n      if (!jsonObj.hasOwnProperty('data')) {\r\n        ElMessage.error('JSON格式：用data包裹起来，暂不支持嵌套')\r\n        return;\r\n      }\r\n      let jsonData = jsonObj.data\r\n      if (this.form.is_collection) {\r\n        jsonData = jsonObj.data[0]\r\n      }\r\n      const fields = []\r\n      let sortNo = 0\r\n      const existFields = this.result?.children ?? []\r\n      const fieldMap = new Map()\r\n      for(let field of existFields){\r\n        fieldMap.set(field.field, field)\r\n      }\r\n      for (let key in jsonData) {\r\n        sortNo++\r\n        const existField = fieldMap.get(key) ?? {}\r\n        fields.push({field: key, field_label: key, field_sort: sortNo, field_type: existField.field_type, field_dict: existField.field_dict, formatter: existField.formatter})\r\n      }\r\n      this.reportFieldDetailGridApi.setRowData(fields)\r\n    },\r\n\r\n    parseJson(json: string) {\r\n      try {\r\n        return JSON.parse(json);\r\n      } catch (e) {\r\n        console.log(e)\r\n        ElMessage.error('请输入正确的JSON数据');\r\n        return \"\";\r\n      }\r\n    },\r\n    getResult() {\r\n      const children = []\r\n      this.reportFieldDetailGridApi.forEachNode((node) => {\r\n        children.push(node.data)\r\n      })\r\n      const result = _.cloneDeep(this.form)\r\n      result.field_label = result.ds_title\r\n      result.children = children;\r\n      return result;\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>","<template>\r\n  <div class=\"json-data-result-content\">\r\n    <div>\r\n      <el-form :model=\"form\" label-width=\"120px\">\r\n        <el-form-item label=\"编码\">\r\n          <el-input v-model=\"form.ds_name\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"名称\">\r\n          <el-input v-model=\"form.ds_title\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"是否集合\">\r\n          <el-switch v-model=\"form.is_collection\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"SQL数据\">\r\n          <el-input v-model=\"form.ds_sql\" type=\"textarea\" placeholder=\"请输入查询SQL\" :rows=\"3\"/>\r\n        </el-form-item>\r\n        <el-form-item>\r\n          <el-button type=\"primary\" :loading=\"sqlAnalyzeOption.loading\" @click=\"handleSQLAnalyze\">SQL解析</el-button>\r\n        </el-form-item>\r\n      </el-form>\r\n    </div>\r\n    <div>\r\n      <el-tabs v-model=\"activeTab\" class=\"demo-tabs\">\r\n        <el-tab-pane label=\"报表字段明细\" name=\"reportFieldDetailTab\">\r\n          <ag-grid-vue\r\n              style=\"width: 100%; height: 200px\"\r\n              class=\"ag-theme-alpine\"\r\n              v-bind=\"reportFieldDetailGridOption\"\r\n              @grid-ready=\"reportFieldDetailOnGridReady\"\r\n          >\r\n          </ag-grid-vue>\r\n        </el-tab-pane>\r\n        <!--<el-tab-pane label=\"数据预览\" name=\"dataPreviewTab\">-->\r\n        <!--  <ag-grid-vue-->\r\n        <!--      style=\"width: 100%; height: 200px\"-->\r\n        <!--      class=\"ag-theme-alpine\"-->\r\n        <!--      v-bind=\"dataPreviewGridOption\"-->\r\n        <!--      @grid-ready=\"dataPreviewOnGridReady\"-->\r\n        <!--  >-->\r\n        <!--  </ag-grid-vue>-->\r\n        <!--</el-tab-pane>-->\r\n      </el-tabs>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport _ from \"lodash\";\r\nimport {ElMessage} from \"element-plus\";\r\nimport YvDesignerAgGridCombo from \"./yv-designer-aggrid-combo.vue\"\r\nimport {toRaw} from \"vue\";\r\nimport {dict} from \"../../../store\";\r\n\r\nexport default {\r\n  name: \"yv-designer-json-datasource\",\r\n  props: {\r\n    result: {\r\n      ds_name: String,\r\n      ds_title: String,\r\n      ds_type: String,\r\n      is_collection: Boolean,\r\n      ds_json: String,\r\n      children: Object\r\n    }\r\n  },\r\n  components: {\r\n    YvDesignerAgGridCombo\r\n  },\r\n  data() {\r\n    const fieldTypeList = [\r\n      {code: 'number', desc: '数值类型'},\r\n      {code: 'string', desc: '字符类型'},\r\n      {code: 'date', desc: '日期类型'},\r\n      {code: 'datetime', desc: '日期时间类型'},\r\n    ]\r\n    const datetimeFormatterList = [\r\n      {code: 'yyyy-MM-dd HH:mm:ss', desc: 'yyyy-MM-dd HH:mm:ss'},\r\n      {code: 'yyyy-MM-dd', desc: 'yyyy-MM-dd'},\r\n    ]\r\n    const columnDefs = [\r\n      {\r\n        headerName: '#',\r\n        editable: false,\r\n        valueGetter: (params) => {\r\n          return params.node?.rowIndex + 1\r\n        }\r\n      },\r\n      {headerName: \"字段名\", field: \"field\", editable: false},\r\n      {headerName: \"字段文本\", field: \"field_label\"},\r\n      {headerName: \"排序\", field: \"field_sort\"},\r\n      {\r\n        headerName: \"类型\",\r\n        field: \"field_type\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: fieldTypeList},\r\n        cellRenderer: (params) => {\r\n          return fieldTypeList.find(fieldType => fieldType.code === params.value)?.desc\r\n        }\r\n      },\r\n      {\r\n        headerName: \"字典编码\",\r\n        field: \"field_dict\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: toRaw(dict.value)},\r\n        cellRenderer: (params) => {\r\n          return toRaw(dict.value)[params.value]?.desc\r\n        }\r\n      },\r\n      {\r\n        headerName: \"显示格式\",\r\n        field: \"formatter\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: datetimeFormatterList},\r\n      },\r\n      {\r\n        headerName: \"操作\",\r\n        editable: false,\r\n        pinned: 'right',\r\n        cellRenderer: (params) => {\r\n          const input = document.createElement(\"input\")\r\n          input.type = \"button\";\r\n          input.value = \"删除\";\r\n          input.checked = params.data.is_primary_key\r\n          input.addEventListener('click', function () {\r\n            params.api.applyTransaction({remove: [params.data]});\r\n          })\r\n          return input\r\n        }\r\n      },\r\n    ]\r\n    return {\r\n      form: {\r\n        ds_id: null,\r\n        ds_name: '',\r\n        ds_title: '',\r\n        ds_type: 'SQL',\r\n        is_collection: true,\r\n        ds_sql: ''\r\n      },\r\n      activeTab: 'reportFieldDetailTab',\r\n      sqlAnalyzeOption: {\r\n        loading: false\r\n      },\r\n      reportFieldDetailGridApi: null,\r\n      reportFieldDetailGridOption: {\r\n        columnDefs,\r\n        rowData: [],\r\n        defaultColDef: {\r\n          editable: true,\r\n        }\r\n      },\r\n      dataPreviewGridGridApi: null,\r\n      dataPreviewGridOption: {\r\n        columnDefs,\r\n        rowData: [],\r\n        defaultColDef: {\r\n          editable: true,\r\n        }\r\n      }\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    _.extend(this.form, this.result)\r\n  },\r\n\r\n  methods: {\r\n    reportFieldDetailOnGridReady(params) {\r\n      this.reportFieldDetailGridApi = params.api;\r\n      if (this.result?.children) {\r\n        this.reportFieldDetailGridApi.setRowData(this.result?.children)\r\n      }\r\n    },\r\n    dataPreviewOnGridReady(params) {\r\n      this.dataPreviewGridGridApi = params.api;\r\n    },\r\n    handleSQLAnalyze() {\r\n      let ds_sql = this.form.ds_sql\r\n      if (!ds_sql) {\r\n        ElMessage.error('请输入正确的SQL数据')\r\n        return;\r\n      }\r\n      const params = {\r\n        sql: this.form.ds_sql,\r\n        is_collection: this.form.is_collection,\r\n        query: {}\r\n      }\r\n      this.sqlAnalyzeOption.loading = true\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@getResultSet\", params).then((res) => {\r\n        if (res.success) {\r\n          const fields = []\r\n          let sortNo = 0\r\n          let result = res.data\r\n          if (this.form.is_collection) {\r\n            result = res.data[0]\r\n          }\r\n          const existFields = this.result?.children ?? []\r\n          const fieldMap = new Map()\r\n          for(let field of existFields){\r\n            fieldMap.set(field.field, field)\r\n          }\r\n          for (let key in result) {\r\n            sortNo++\r\n            const existField = fieldMap.get(key) ?? {}\r\n            fields.push({field: key, field_label: key, field_sort: sortNo, field_type: existField.field_type, field_dict: existField.field_dict, formatter: existField.formatter})\r\n          }\r\n          this.reportFieldDetailGridApi.setRowData(fields)\r\n          return\r\n        }\r\n        system.showErrorDialog(res.msg)\r\n      }).finally(() => {\r\n        this.sqlAnalyzeOption.loading = false\r\n      })\r\n    },\r\n    getResult() {\r\n      const children = []\r\n      this.reportFieldDetailGridApi.forEachNode((node) => {\r\n        children.push(node.data)\r\n      })\r\n      const result = _.cloneDeep(this.form)\r\n      result.field_label = result.ds_title\r\n      result.children = children;\r\n      return result;\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>","<template>\r\n  <div class=\"json-data-result-content\">\r\n    <div>\r\n      <el-form :model=\"form\" label-width=\"120px\">\r\n        <el-form-item label=\"编码\">\r\n          <el-input v-model=\"form.ds_name\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"名称\">\r\n          <el-input v-model=\"form.ds_title\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"是否集合\">\r\n          <el-switch v-model=\"form.is_collection\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"SQL数据\">\r\n          <el-input v-model=\"form.ds_sql\" type=\"textarea\" placeholder=\"请输入查询SQL\" :rows=\"3\"/>\r\n        </el-form-item>\r\n        <el-form-item>\r\n          <el-button type=\"primary\" :loading=\"sqlAnalyzeOption.loading\" @click=\"handleSQLAnalyze\">SQL解析</el-button>\r\n        </el-form-item>\r\n      </el-form>\r\n    </div>\r\n    <div>\r\n      <el-tabs v-model=\"activeTab\" class=\"demo-tabs\">\r\n        <el-tab-pane label=\"报表字段明细\" name=\"reportFieldDetailTab\">\r\n          <ag-grid-vue\r\n              style=\"width: 100%; height: 200px\"\r\n              class=\"ag-theme-alpine\"\r\n              v-bind=\"reportFieldDetailGridOption\"\r\n              @grid-ready=\"reportFieldDetailOnGridReady\"\r\n          >\r\n          </ag-grid-vue>\r\n        </el-tab-pane>\r\n        <!--<el-tab-pane label=\"数据预览\" name=\"dataPreviewTab\">-->\r\n        <!--  <ag-grid-vue-->\r\n        <!--      style=\"width: 100%; height: 200px\"-->\r\n        <!--      class=\"ag-theme-alpine\"-->\r\n        <!--      v-bind=\"dataPreviewGridOption\"-->\r\n        <!--      @grid-ready=\"dataPreviewOnGridReady\"-->\r\n        <!--  >-->\r\n        <!--  </ag-grid-vue>-->\r\n        <!--</el-tab-pane>-->\r\n      </el-tabs>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport _ from \"lodash\";\r\nimport {ElMessage} from \"element-plus\";\r\nimport YvDesignerAgGridCombo from \"./yv-designer-aggrid-combo.vue\"\r\nimport {toRaw} from \"vue\";\r\nimport {dict} from \"../../../store\";\r\n\r\nexport default {\r\n  name: \"yv-designer-json-datasource\",\r\n  props: {\r\n    result: {\r\n      ds_name: String,\r\n      ds_title: String,\r\n      ds_type: String,\r\n      is_collection: Boolean,\r\n      ds_json: String,\r\n      children: Object\r\n    }\r\n  },\r\n  components: {\r\n    YvDesignerAgGridCombo\r\n  },\r\n  data() {\r\n    const fieldTypeList = [\r\n      {code: 'number', desc: '数值类型'},\r\n      {code: 'string', desc: '字符类型'},\r\n      {code: 'date', desc: '日期类型'},\r\n      {code: 'datetime', desc: '日期时间类型'},\r\n    ]\r\n    const datetimeFormatterList = [\r\n      {code: 'yyyy-MM-dd HH:mm:ss', desc: 'yyyy-MM-dd HH:mm:ss'},\r\n      {code: 'yyyy-MM-dd', desc: 'yyyy-MM-dd'},\r\n    ]\r\n    const columnDefs = [\r\n      {\r\n        headerName: '#',\r\n        editable: false,\r\n        valueGetter: (params) => {\r\n          return params.node?.rowIndex + 1\r\n        }\r\n      },\r\n      {headerName: \"字段名\", field: \"field\", editable: false},\r\n      {headerName: \"字段文本\", field: \"field_label\"},\r\n      {headerName: \"排序\", field: \"field_sort\"},\r\n      {\r\n        headerName: \"类型\",\r\n        field: \"field_type\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: fieldTypeList},\r\n        cellRenderer: (params) => {\r\n          return fieldTypeList.find(fieldType => fieldType.code === params.value)?.desc\r\n        }\r\n      },\r\n      {\r\n        headerName: \"字典编码\",\r\n        field: \"field_dict\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: toRaw(dict.value)},\r\n        cellRenderer: (params) => {\r\n          return toRaw(dict.value)[params.value]?.desc\r\n        }\r\n      },\r\n      {\r\n        headerName: \"显示格式\",\r\n        field: \"formatter\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: datetimeFormatterList},\r\n      },\r\n      {\r\n        headerName: \"操作\",\r\n        editable: false,\r\n        pinned: 'right',\r\n        cellRenderer: (params) => {\r\n          const input = document.createElement(\"input\")\r\n          input.type = \"button\";\r\n          input.value = \"删除\";\r\n          input.checked = params.data.is_primary_key\r\n          input.addEventListener('click', function () {\r\n            params.api.applyTransaction({remove: [params.data]});\r\n          })\r\n          return input\r\n        }\r\n      },\r\n    ]\r\n    return {\r\n      form: {\r\n        ds_id: null,\r\n        ds_name: '',\r\n        ds_title: '',\r\n        ds_type: 'SQL',\r\n        is_collection: true,\r\n        ds_sql: ''\r\n      },\r\n      activeTab: 'reportFieldDetailTab',\r\n      sqlAnalyzeOption: {\r\n        loading: false\r\n      },\r\n      reportFieldDetailGridApi: null,\r\n      reportFieldDetailGridOption: {\r\n        columnDefs,\r\n        rowData: [],\r\n        defaultColDef: {\r\n          editable: true,\r\n        }\r\n      },\r\n      dataPreviewGridGridApi: null,\r\n      dataPreviewGridOption: {\r\n        columnDefs,\r\n        rowData: [],\r\n        defaultColDef: {\r\n          editable: true,\r\n        }\r\n      }\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    _.extend(this.form, this.result)\r\n  },\r\n\r\n  methods: {\r\n    reportFieldDetailOnGridReady(params) {\r\n      this.reportFieldDetailGridApi = params.api;\r\n      if (this.result?.children) {\r\n        this.reportFieldDetailGridApi.setRowData(this.result?.children)\r\n      }\r\n    },\r\n    dataPreviewOnGridReady(params) {\r\n      this.dataPreviewGridGridApi = params.api;\r\n    },\r\n    handleSQLAnalyze() {\r\n      let ds_sql = this.form.ds_sql\r\n      if (!ds_sql) {\r\n        ElMessage.error('请输入正确的SQL数据')\r\n        return;\r\n      }\r\n      const params = {\r\n        sql: this.form.ds_sql,\r\n        is_collection: this.form.is_collection,\r\n        query: {}\r\n      }\r\n      this.sqlAnalyzeOption.loading = true\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@getResultSet\", params).then((res) => {\r\n        if (res.success) {\r\n          const fields = []\r\n          let sortNo = 0\r\n          let result = res.data\r\n          if (this.form.is_collection) {\r\n            result = res.data[0]\r\n          }\r\n          const existFields = this.result?.children ?? []\r\n          const fieldMap = new Map()\r\n          for(let field of existFields){\r\n            fieldMap.set(field.field, field)\r\n          }\r\n          for (let key in result) {\r\n            sortNo++\r\n            const existField = fieldMap.get(key) ?? {}\r\n            fields.push({field: key, field_label: key, field_sort: sortNo, field_type: existField.field_type, field_dict: existField.field_dict, formatter: existField.formatter})\r\n          }\r\n          this.reportFieldDetailGridApi.setRowData(fields)\r\n          return\r\n        }\r\n        system.showErrorDialog(res.msg)\r\n      }).finally(() => {\r\n        this.sqlAnalyzeOption.loading = false\r\n      })\r\n    },\r\n    getResult() {\r\n      const children = []\r\n      this.reportFieldDetailGridApi.forEachNode((node) => {\r\n        children.push(node.data)\r\n      })\r\n      const result = _.cloneDeep(this.form)\r\n      result.field_label = result.ds_title\r\n      result.children = children;\r\n      return result;\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>","<template>\r\n  <div>\r\n    <el-form :model=\"form\" label-width=\"100px\">\r\n      <el-form-item label=\"数据类型\">\r\n        <el-input v-model=\"form.dataType\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"绑定数据集\">\r\n        <el-input v-model=\"form.width\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"分类属性\">\r\n        <el-input-number v-model=\"form.height\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"值属性\">\r\n        <el-input v-model=\"form.propValue\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"定时刷新\">\r\n        <el-input v-model=\"form.refresh\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"刷新间隔\">\r\n        <el-input v-model=\"form.interval\"/>\r\n      </el-form-item>\r\n      <el-form-item>\r\n        <el-button type=\"primary\">运行</el-button>\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport default {\r\n  name: \"yv-designer-base-props\",\r\n  data() {\r\n    return {\r\n      activeName: 'baseProps',\r\n      form: {}\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>","<template>\r\n  <div>\r\n    <el-form :model=\"form\" label-width=\"100px\">\r\n      <el-form-item label=\"数据类型\">\r\n        <el-input v-model=\"form.dataType\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"绑定数据集\">\r\n        <el-input v-model=\"form.width\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"分类属性\">\r\n        <el-input-number v-model=\"form.height\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"值属性\">\r\n        <el-input v-model=\"form.propValue\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"定时刷新\">\r\n        <el-input v-model=\"form.refresh\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"刷新间隔\">\r\n        <el-input v-model=\"form.interval\"/>\r\n      </el-form-item>\r\n      <el-form-item>\r\n        <el-button type=\"primary\">运行</el-button>\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport default {\r\n  name: \"yv-designer-base-props\",\r\n  data() {\r\n    return {\r\n      activeName: 'baseProps',\r\n      form: {}\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>","<template>\r\n  <div>\r\n    <el-form label-width=\"60px\">\r\n      <el-form-item label=\"坐标\">\r\n        <el-input v-model=\"rect\" disabled/>\r\n      </el-form-item>\r\n      <el-form-item label=\"类型\">\r\n        <el-select v-model=\"params.type\" placeholder=\"请选择\">\r\n          <el-option v-for=\"type in types\"\r\n                     :label=\"type.name\"\r\n                     :value=\"type.value\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <el-form-item label=\"值\">\r\n        <el-input v-model=\"params.text\" @change=\"textChange\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"宽度\">\r\n        <el-input-number\r\n            v-model=\"style.width\"\r\n            :min=\"0\"\r\n            @change=\"colWidthChange\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"高度\">\r\n        <el-input-number\r\n            v-model=\"style.height\"\r\n            :min=\"0\"\r\n            @change=\"rowHeightChange\"/>\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport Spreadsheet from \"yvan-spreadsheet\";\r\n\r\nexport default {\r\n  name: \"yv-designer-base-props\",\r\n  props: {\r\n    spreadsheet: Spreadsheet,\r\n    params: {\r\n      rect: Object,\r\n      text: String,\r\n      style: Object\r\n    }\r\n  },\r\n  data() {\r\n    const types = [\r\n      {value: 1, name: '文本'},\r\n      {value: 2, name: '数值'},\r\n      {value: 3, name: '图片'},\r\n      {value: 4, name: '条形码'},\r\n      {value: 5, name: '二维码'},\r\n    ]\r\n    return {\r\n      types,\r\n      activeName: 'baseProps',\r\n    }\r\n  },\r\n  mounted() {\r\n\r\n  },\r\n  computed: {\r\n    rect() {\r\n      if (this.params?.rect) {\r\n        return this.params?.rect?.x + ',' + this.params?.rect?.y\r\n      }\r\n      return \"0,0\"\r\n    },\r\n    style() {\r\n      return this.params.style ?? {}\r\n    }\r\n  },\r\n  methods: {\r\n    textChange(value) {\r\n      this.spreadsheet.cellText(this.params.rect.x, this.params.rect.y, value)\r\n      this.spreadsheet.sheet.reload()\r\n    },\r\n    colWidthChange(value) {\r\n      if (!value) {\r\n        return;\r\n      }\r\n      this.spreadsheet.sheet.data.setColWidth(this.params.rect.y, value)\r\n      this.spreadsheet.sheet.reload()\r\n    },\r\n    rowHeightChange(value) {\r\n      if (!value) {\r\n        return;\r\n      }\r\n      this.spreadsheet.sheet.data.rows.setHeight(this.params.rect.x, value)\r\n      this.spreadsheet.sheet.reload()\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>\r\n","<template>\r\n  <div>\r\n    <el-form label-width=\"60px\">\r\n      <el-form-item label=\"坐标\">\r\n        <el-input v-model=\"rect\" disabled/>\r\n      </el-form-item>\r\n      <el-form-item label=\"类型\">\r\n        <el-select v-model=\"params.type\" placeholder=\"请选择\">\r\n          <el-option v-for=\"type in types\"\r\n                     :label=\"type.name\"\r\n                     :value=\"type.value\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n      <el-form-item label=\"值\">\r\n        <el-input v-model=\"params.text\" @change=\"textChange\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"宽度\">\r\n        <el-input-number\r\n            v-model=\"style.width\"\r\n            :min=\"0\"\r\n            @change=\"colWidthChange\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"高度\">\r\n        <el-input-number\r\n            v-model=\"style.height\"\r\n            :min=\"0\"\r\n            @change=\"rowHeightChange\"/>\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport Spreadsheet from \"yvan-spreadsheet\";\r\n\r\nexport default {\r\n  name: \"yv-designer-base-props\",\r\n  props: {\r\n    spreadsheet: Spreadsheet,\r\n    params: {\r\n      rect: Object,\r\n      text: String,\r\n      style: Object\r\n    }\r\n  },\r\n  data() {\r\n    const types = [\r\n      {value: 1, name: '文本'},\r\n      {value: 2, name: '数值'},\r\n      {value: 3, name: '图片'},\r\n      {value: 4, name: '条形码'},\r\n      {value: 5, name: '二维码'},\r\n    ]\r\n    return {\r\n      types,\r\n      activeName: 'baseProps',\r\n    }\r\n  },\r\n  mounted() {\r\n\r\n  },\r\n  computed: {\r\n    rect() {\r\n      if (this.params?.rect) {\r\n        return this.params?.rect?.x + ',' + this.params?.rect?.y\r\n      }\r\n      return \"0,0\"\r\n    },\r\n    style() {\r\n      return this.params.style ?? {}\r\n    }\r\n  },\r\n  methods: {\r\n    textChange(value) {\r\n      this.spreadsheet.cellText(this.params.rect.x, this.params.rect.y, value)\r\n      this.spreadsheet.sheet.reload()\r\n    },\r\n    colWidthChange(value) {\r\n      if (!value) {\r\n        return;\r\n      }\r\n      this.spreadsheet.sheet.data.setColWidth(this.params.rect.y, value)\r\n      this.spreadsheet.sheet.reload()\r\n    },\r\n    rowHeightChange(value) {\r\n      if (!value) {\r\n        return;\r\n      }\r\n      this.spreadsheet.sheet.data.rows.setHeight(this.params.rect.x, value)\r\n      this.spreadsheet.sheet.reload()\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>\r\n","<template>\r\n  <div>\r\n    <el-form :model=\"form\" label-width=\"80px\">\r\n      <el-form-item label=\"值\">\r\n        <el-input v-model=\"form.value\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"宽度\">\r\n        <el-input v-model=\"form.width\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"高度\">\r\n        <el-input-number v-model=\"form.height\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"前景色\">\r\n        <el-color-picker v-model=\"form.foregroundColor\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"背景色\">\r\n        <el-color-picker v-model=\"form.backgroundColor\" />\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport default {\r\n  name: \"yv-designer-base-props\",\r\n  data() {\r\n    return {\r\n      activeName: 'baseProps',\r\n      form: {}\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>","<template>\r\n  <div>\r\n    <el-form :model=\"form\" label-width=\"80px\">\r\n      <el-form-item label=\"值\">\r\n        <el-input v-model=\"form.value\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"宽度\">\r\n        <el-input v-model=\"form.width\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"高度\">\r\n        <el-input-number v-model=\"form.height\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"前景色\">\r\n        <el-color-picker v-model=\"form.foregroundColor\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"背景色\">\r\n        <el-color-picker v-model=\"form.backgroundColor\" />\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport default {\r\n  name: \"yv-designer-base-props\",\r\n  data() {\r\n    return {\r\n      activeName: 'baseProps',\r\n      form: {}\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>","<template>\r\n  <div>\r\n    <el-form :model=\"form\" label-width=\"80px\">\r\n      <el-form-item label=\"值\">\r\n        <el-input v-model=\"form.value\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"宽度\">\r\n        <el-input v-model=\"form.width\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"高度\">\r\n        <el-input-number v-model=\"form.height\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"前景色\">\r\n        <el-input-number v-model=\"form.foregroundColor\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"背景色\">\r\n        <el-input-number v-model=\"form.backgroundColor\"/>\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport default {\r\n  name: \"yv-designer-base-props\",\r\n  data() {\r\n    return {\r\n      activeName: 'baseProps',\r\n      form: {}\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>","<template>\r\n  <div>\r\n    <el-form :model=\"form\" label-width=\"80px\">\r\n      <el-form-item label=\"值\">\r\n        <el-input v-model=\"form.value\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"宽度\">\r\n        <el-input v-model=\"form.width\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"高度\">\r\n        <el-input-number v-model=\"form.height\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"前景色\">\r\n        <el-input-number v-model=\"form.foregroundColor\"/>\r\n      </el-form-item>\r\n      <el-form-item label=\"背景色\">\r\n        <el-input-number v-model=\"form.backgroundColor\"/>\r\n      </el-form-item>\r\n    </el-form>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport default {\r\n  name: \"yv-designer-base-props\",\r\n  data() {\r\n    return {\r\n      activeName: 'baseProps',\r\n      form: {}\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>","<template>\r\n  <div>\r\n    <el-tabs v-model=\"activeName\" class=\"demo-tabs\">\r\n      <el-tab-pane label=\"基础\" name=\"baseProps\">\r\n        <YvDesignerBaseProps :spreadsheet=\"spreadsheet\" :params=\"params.baseProps\"/>\r\n      </el-tab-pane>\r\n      <!--<el-tab-pane label=\"二维码设置\" name=\"qrcodeProps\">-->\r\n      <!--  <YvDesignerQrcodeProps :spreadsheet=\"spreadsheet\"/>-->\r\n      <!--</el-tab-pane>-->\r\n      <!--<el-tab-pane label=\"样式\" name=\"styleProps\">-->\r\n      <!--  <YvDesignerStyleProps :spreadsheet=\"spreadsheet\"/>-->\r\n      <!--</el-tab-pane>-->\r\n      <!--<el-tab-pane label=\"数据\" name=\"dataProps\">-->\r\n      <!--  <YvDesignerDataProps :spreadsheet=\"spreadsheet\"/>-->\r\n      <!--</el-tab-pane>-->\r\n    </el-tabs>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport YvDesignerDataProps from \"./yv-designer-data-props.vue\"\r\nimport YvDesignerBaseProps from \"./yv-designer-base-props.vue\"\r\nimport YvDesignerQrcodeProps from \"./yv-designer-qrcode-props.vue\"\r\nimport YvDesignerStyleProps from \"./yv-designer-style-props.vue\"\r\nimport Spreadsheet from \"yvan-spreadsheet\";\r\n\r\nexport default {\r\n  name: \"yv-designer-props\",\r\n  components: {\r\n    YvDesignerBaseProps,\r\n    YvDesignerDataProps,\r\n    YvDesignerQrcodeProps,\r\n    YvDesignerStyleProps,\r\n  },\r\n  props: {\r\n    spreadsheet: Spreadsheet,\r\n    params: {\r\n      baseProps: Object\r\n    }\r\n  },\r\n  data() {\r\n    return {\r\n      activeName: 'baseProps'\r\n    }\r\n  },\r\n  mounted() {\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>","<template>\r\n  <div>\r\n    <el-tabs v-model=\"activeName\" class=\"demo-tabs\">\r\n      <el-tab-pane label=\"基础\" name=\"baseProps\">\r\n        <YvDesignerBaseProps :spreadsheet=\"spreadsheet\" :params=\"params.baseProps\"/>\r\n      </el-tab-pane>\r\n      <!--<el-tab-pane label=\"二维码设置\" name=\"qrcodeProps\">-->\r\n      <!--  <YvDesignerQrcodeProps :spreadsheet=\"spreadsheet\"/>-->\r\n      <!--</el-tab-pane>-->\r\n      <!--<el-tab-pane label=\"样式\" name=\"styleProps\">-->\r\n      <!--  <YvDesignerStyleProps :spreadsheet=\"spreadsheet\"/>-->\r\n      <!--</el-tab-pane>-->\r\n      <!--<el-tab-pane label=\"数据\" name=\"dataProps\">-->\r\n      <!--  <YvDesignerDataProps :spreadsheet=\"spreadsheet\"/>-->\r\n      <!--</el-tab-pane>-->\r\n    </el-tabs>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport YvDesignerDataProps from \"./yv-designer-data-props.vue\"\r\nimport YvDesignerBaseProps from \"./yv-designer-base-props.vue\"\r\nimport YvDesignerQrcodeProps from \"./yv-designer-qrcode-props.vue\"\r\nimport YvDesignerStyleProps from \"./yv-designer-style-props.vue\"\r\nimport Spreadsheet from \"yvan-spreadsheet\";\r\n\r\nexport default {\r\n  name: \"yv-designer-props\",\r\n  components: {\r\n    YvDesignerBaseProps,\r\n    YvDesignerDataProps,\r\n    YvDesignerQrcodeProps,\r\n    YvDesignerStyleProps,\r\n  },\r\n  props: {\r\n    spreadsheet: Spreadsheet,\r\n    params: {\r\n      baseProps: Object\r\n    }\r\n  },\r\n  data() {\r\n    return {\r\n      activeName: 'baseProps'\r\n    }\r\n  },\r\n  mounted() {\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>","<template>\r\n  <split class=\"default-theme split-wrap template-designer\" @onDragEnd=\"relayout\">\r\n    <split-area :size=\"20\" class=\"left\">\r\n      <el-collapse v-model=\"activeNames\">\r\n        <el-collapse-item name=\"1\">\r\n          <template #title>\r\n            <span>数据集管理</span>\r\n            <el-dropdown @command=\"createDatasource\">\r\n              <span class=\"el-dropdown-link\">\r\n                <i class=\"x-fa fa-plus\" aria-hidden=\"true\"/>\r\n              </span>\r\n              <template #dropdown>\r\n                <el-dropdown-menu>\r\n                  <el-dropdown-item command=\"SQL\">SQL数据集</el-dropdown-item>\r\n                  <el-dropdown-item command=\"JSON\">JSON数据集</el-dropdown-item>\r\n                  <el-dropdown-item disabled>API数据集</el-dropdown-item>\r\n                  <el-dropdown-item disabled>JavaBean数据集</el-dropdown-item>\r\n                </el-dropdown-menu>\r\n              </template>\r\n            </el-dropdown>\r\n          </template>\r\n          <el-tree class=\"unselect\" :data=\"datasourceTreeOption.data\"\r\n                   :props=\"datasourceTreeOption.defaultProps\"\r\n                   :expand-on-click-node=\"false\"\r\n                   :allow-drag=\"()=>true\"\r\n                   :allow-drop=\"()=>false\"\r\n                   :draggable=\"true\"\r\n                   @node-drag-start=\"onTreeStartDrag\">\r\n            <template #default=\"{ node, data }\">\r\n              <div class=\"custom-tree-node\">\r\n                <div style=\"display: inline\">{{ data.field_label }}</div>\r\n                <div class=\"tree-toolbar\" style=\"display: inline\" v-if=\"node.level === 1\">\r\n                  <el-button link class=\"toolbar-btn\" @click=\"updateDatasource(node, data)\"\r\n                             :icon=\"renderIcon('fa Pencil')\"/>\r\n                  <el-button link class=\"toolbar-btn\" @click=\"removeDatasource(node, data)\"\r\n                             :icon=\"renderIcon('fa Times')\"/>\r\n                </div>\r\n              </div>\r\n            </template>\r\n          </el-tree>\r\n        </el-collapse-item>\r\n        <el-collapse-item title=\"报表信息\" name=\"2\">\r\n          <div style=\"width: 90%;\">\r\n            <el-form-item label=\"打印模板ID\" label-width=\"100px\">\r\n              <el-input v-model=\"template.print_template_id\" readonly/>\r\n            </el-form-item>\r\n            <el-form-item label=\"打印模板编码\" label-width=\"100px\">\r\n              <el-input v-model=\"template.print_template_code\" readonly/>\r\n            </el-form-item>\r\n            <el-form-item label=\"打印模板名称\" label-width=\"100px\">\r\n              <el-input v-model=\"template.print_template_name\" readonly/>\r\n            </el-form-item>\r\n          </div>\r\n        </el-collapse-item>\r\n        <!--<el-collapse-item title=\"数据字典\" name=\"3\">-->\r\n        <!--  <div>-->\r\n        <!--    Simplify the process: keep operating process simple and intuitive;-->\r\n        <!--  </div>-->\r\n        <!--</el-collapse-item>-->\r\n      </el-collapse>\r\n    </split-area>\r\n    <split-area :size=\"60\" class=\"center\">\r\n      <div ref=\"_inner\" style=\"height: 100%;\" @drop=\"spreadDrop\" @dragover=\"spreadDragOver\"></div>\r\n    </split-area>\r\n    <split-area :size=\"20\" class=\"right\">\r\n      <YvDesignerProps :spreadsheet=\"spread\" :params=\"designerProps\"/>\r\n    </split-area>\r\n  </split>\r\n\r\n  <!-- SQL data result dialog start -->\r\n  <el-dialog\r\n      :title=\"sqlDatasourceDialogOption.title\"\r\n      v-model=\"sqlDatasourceDialogOption.visible\"\r\n      fullscreen\r\n      destroy-on-close\r\n      append-to-body>\r\n    <div class=\"sql-data-result-dialog-content\">\r\n      <YvDesignerSQLDatasource ref=\"sqlDatasourceRef\" :result=\"sqlDatasourceDialogOption.result\"/>\r\n    </div>\r\n    <template #footer>\r\n      <span class=\"dialog-footer\">\r\n          <el-button type=\"primary\"\r\n                     :loading=\"sqlDatasourceDialogOption.submit_btn_loading\"\r\n                     @click=\"submitSQLDatasource\"\r\n                     :icon=\"renderIcon('fa Check')\">\r\n            提交\r\n          </el-button>\r\n          <el-button @click=\"closeSQLDatasourceDialog\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n      </span>\r\n    </template>\r\n  </el-dialog>\r\n  <!-- SQL data result dialog end -->\r\n\r\n  <!-- json data result dialog start -->\r\n  <el-dialog\r\n      :title=\"jsonDatasourceDialogOption.title\"\r\n      v-model=\"jsonDatasourceDialogOption.visible\"\r\n      fullscreen\r\n      destroy-on-close\r\n      append-to-body>\r\n    <div class=\"json-data-result-dialog-content\">\r\n      <YvDesignerJsonDatasource ref=\"jsonDatasourceRef\" :result=\"this.jsonDatasourceDialogOption.result\"/>\r\n    </div>\r\n    <template #footer>\r\n      <span class=\"dialog-footer\">\r\n          <el-button type=\"primary\"\r\n                     :loading=\"jsonDatasourceDialogOption.submit_btn_loading\"\r\n                     @click=\"submitJsonDatasource\"\r\n                     :icon=\"renderIcon('fa Check')\">\r\n            提交\r\n          </el-button>\r\n          <el-button @click=\"closeJSONDatasourceDialog\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n      </span>\r\n    </template>\r\n  </el-dialog>\r\n  <!-- SQL data result dialog end -->\r\n\r\n  <!-- print setting dialog start -->\r\n  <el-dialog\r\n      v-model=\"printSettingOption.visible\"\r\n      :title=\"printSettingOption.title\"\r\n      destroy-on-close\r\n      width=\"30%\"\r\n  >\r\n    <div>\r\n      <el-form label-width=\"110px\">\r\n        <el-form-item label=\"打印纸张\">\r\n          <el-select placeholder=\"please select your zone\">\r\n            <el-option label=\"Zone one\" value=\"shanghai\"/>\r\n            <el-option label=\"Zone two\" value=\"beijing\"/>\r\n          </el-select>\r\n        </el-form-item>\r\n        <el-form-item label=\"打印布局\">\r\n          <el-radio-group>\r\n            <el-radio label=\"1\" border>纵向</el-radio>\r\n            <el-radio label=\"2\" border>横向</el-radio>\r\n          </el-radio-group>\r\n        </el-form-item>\r\n        <el-form-item label=\"打印边距(mm)\">\r\n          <el-col :span=\"5\">\r\n            <el-input placeholder=\"上\"/>\r\n          </el-col>\r\n          <el-col :span=\"1\" class=\"text-center\"/>\r\n          <el-col :span=\"5\">\r\n            <el-input placeholder=\"右\"/>\r\n          </el-col>\r\n          <el-col :span=\"1\" class=\"text-center\"/>\r\n          <el-col :span=\"5\">\r\n            <el-input placeholder=\"下\"/>\r\n          </el-col>\r\n          <el-col :span=\"1\" class=\"text-center\"/>\r\n          <el-col :span=\"5\">\r\n            <el-input placeholder=\"左\"/>\r\n          </el-col>\r\n        </el-form-item>\r\n        <el-form-item label=\"像素宽高(px)\">\r\n          <el-col :span=\"11\">\r\n            <el-input readonly/>\r\n          </el-col>\r\n          <el-col :span=\"2\" class=\"text-center\" style=\"padding-left: 12px;\">\r\n            <span class=\"text-gray-500\">-</span>\r\n          </el-col>\r\n          <el-col :span=\"11\">\r\n            <el-input readonly/>\r\n          </el-col>\r\n        </el-form-item>\r\n      </el-form>\r\n    </div>\r\n    <template #footer>\r\n      <span class=\"dialog-footer\">\r\n                  <el-button type=\"primary\"\r\n                             @click=\"submitJsonDatasource\"\r\n                             :icon=\"renderIcon('fa Check')\">\r\n            提交\r\n          </el-button>\r\n          <el-button @click=\"closePrintSettingDialog\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n      </span>\r\n    </template>\r\n  </el-dialog>\r\n  <!-- print setting dialog end -->\r\n\r\n</template>\r\n\r\n<script>\r\nimport _ from 'lodash'\r\nimport {renderIcon} from '../../../utils'\r\nimport Spreadsheet from \"yvan-spreadsheet\";\r\nimport zhCn from \"yvan-spreadsheet/src/locale/zh-cn\";\r\nimport YvDesignerJsonDatasource from \"./yv-designer-json-datasource.vue\";\r\nimport YvDesignerSQLDatasource from \"./yv-designer-sql-datasource.vue\";\r\nimport YvDesignerProps from \"./yv-designer-props.vue\";\r\nimport {toRaw} from \"vue\";\r\nimport localforage from 'localforage'\r\n\r\nconst saveIcon = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTc3MTc3MDkyOTg4IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI2NzgiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTIxMy4zMzMzMzMgMTI4aDU5Ny4zMzMzMzRhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMSA4NS4zMzMzMzMgODUuMzMzMzMzdjU5Ny4zMzMzMzRhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMS04NS4zMzMzMzMgODUuMzMzMzMzSDIxMy4zMzMzMzNhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMS04NS4zMzMzMzMtODUuMzMzMzMzVjIxMy4zMzMzMzNhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMSA4NS4zMzMzMzMtODUuMzMzMzMzeiBtMzY2LjkzMzMzNCAxMjhoMzQuMTMzMzMzYTI1LjYgMjUuNiAwIDAgMSAyNS42IDI1LjZ2MTE5LjQ2NjY2N2EyNS42IDI1LjYgMCAwIDEtMjUuNiAyNS42aC0zNC4xMzMzMzNhMjUuNiAyNS42IDAgMCAxLTI1LjYtMjUuNlYyODEuNmEyNS42IDI1LjYgMCAwIDEgMjUuNi0yNS42ek0yMTMuMzMzMzMzIDIxMy4zMzMzMzN2NTk3LjMzMzMzNGg1OTcuMzMzMzM0VjIxMy4zMzMzMzNIMjEzLjMzMzMzM3ogbTEyOCAwdjI1NmgzNDEuMzMzMzM0VjIxMy4zMzMzMzNoODUuMzMzMzMzdjI5OC42NjY2NjdhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMS00Mi42NjY2NjcgNDIuNjY2NjY3SDI5OC42NjY2NjdhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMS00Mi42NjY2NjctNDIuNjY2NjY3VjIxMy4zMzMzMzNoODUuMzMzMzMzek0yNTYgMjEzLjMzMzMzM2g4NS4zMzMzMzMtODUuMzMzMzMzeiBtNDI2LjY2NjY2NyAwaDg1LjMzMzMzMy04NS4zMzMzMzN6IG0wIDU5Ny4zMzMzMzR2LTEyOEgzNDEuMzMzMzMzdjEyOEgyNTZ2LTE3MC42NjY2NjdhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMSA0Mi42NjY2NjctNDIuNjY2NjY3aDQyNi42NjY2NjZhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMSA0Mi42NjY2NjcgNDIuNjY2NjY3djE3MC42NjY2NjdoLTg1LjMzMzMzM3ogbTg1LjMzMzMzMyAwaC04NS4zMzMzMzMgODUuMzMzMzMzek0zNDEuMzMzMzMzIDgxMC42NjY2NjdIMjU2aDg1LjMzMzMzM3oiIHAtaWQ9IjI2NzkiIGZpbGw9IiMyYzJjMmMiPjwvcGF0aD48L3N2Zz4='\r\nconst settingIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAAAXNSR0IArs4c6QAAAE5QTFRFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxKKmWQAAABp0Uk5TANNxsP435UDBgcdF2QIk74gwDqKZt15USEw9OshxAAAAhElEQVQY022Q6w6DIAxGsQiWm1zd3Pu/6AZUIYvnD82hTb+UsWfCSrxvhWVrZD7Up78vUoDoF2xYjwg/JWGbCEtV+9izg/hXTlwKFAGOlPChm7DGrnjW16AtR61PlXXyNbt0tijR/szoElQYnY6alLtJMVFjxqlLmh799JFU4khw93y9L90NBh+HB6YKAAAAAElFTkSuQmCC'\r\nconst previewIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA7UlEQVQ4T7XTPUpDQRTF8V82ISJok8a0KVLaWAlWEV2AmKRzB6K4BKv4VdooWtqlsbKzNIVWFiouQrkwI8MzQcIjA9PMPe8/59z7pqHmatT83lwA69hHE8vJ4RtecYJR6brq4Bx7/8S6QC9rSsAzVlNhgDP0cToBOEYrzjPgJVnewXVxHprvCiBrvrAQgAMcIwo3+MAQR2kfFoBPLGI7XXQ1CXCL7pQ+3GGrCghtGeEB92hXIE/YwFq6/TdC1uUmRpxo4C42UzGAl2lCEelPEzMkj/Edj4j5x1pBB0uYOsYMqfUjzfw05vIWZnLxA7P9MVmq+mQaAAAAAElFTkSuQmCC'\r\nSpreadsheet.locale('zh-cn', zhCn)\r\n\r\nexport default {\r\n  components: {\r\n    YvDesignerJsonDatasource,\r\n    YvDesignerSQLDatasource,\r\n    YvDesignerProps\r\n  },\r\n  props: {\r\n    type: String,\r\n    printTemplate: {\r\n      print_template_id: Number,\r\n      print_template_code: String,\r\n      print_template_name: String,\r\n      template_content: String,\r\n      template_width: Number,\r\n      template_height: Number\r\n    }\r\n  },\r\n  data() {\r\n    return {\r\n      spread: null,\r\n      activeNames: [\"1\", \"2\"],\r\n      datasourceTreeOption: {\r\n        defaultProps: {\r\n          label: 'field_label'\r\n        },\r\n        data: []\r\n      },\r\n      designerProps: {\r\n        baseProps: {}\r\n      },\r\n      sqlDatasourceDialogOption: {\r\n        visible: false,\r\n        title: \"SQL数据集\",\r\n        submit_btn_loading: false,\r\n        result: {}\r\n      },\r\n      jsonDatasourceDialogOption: {\r\n        visible: false,\r\n        title: \"JSON数据集\",\r\n        submit_btn_loading: false,\r\n        result: {}\r\n      },\r\n      printSettingOption: {\r\n        visible: false,\r\n        title: \"打印设置\",\r\n      }\r\n    }\r\n  },\r\n  mounted() {\r\n    this.loadTemplateParam();\r\n    this.$nextTick(() => {\r\n      this.initCtl().finally()\r\n    })\r\n  },\r\n  unmounted() {\r\n    this.spread = null\r\n  },\r\n  computed: {\r\n    template() {\r\n      return this.printTemplate ?? {}\r\n    }\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    spreadCtlChange(serialData) {\r\n      if (this.type === 'demo') {\r\n        console.log('changed', JSON.stringify(serialData, null, '    '))\r\n        localforage.setItem('spread_ctl_data', serialData)\r\n            .finally(() => {\r\n            })\r\n      }\r\n    },\r\n    async initCtl() {\r\n      //const serialData = await localforage.getItem('spread_ctl_data')\r\n      const defaultOptions = this.printTemplate?.template_content?.spread_options ?? {\r\n        row: {\r\n          len: 50,\r\n          height: 25,\r\n        },\r\n        col: {\r\n          len: 13,\r\n          width: 60,\r\n          indexWidth: 30,\r\n          minWidth: 0,\r\n        },\r\n        style: {\r\n          bgcolor: '#ffffff',\r\n          align: 'left',\r\n          valign: 'middle',\r\n          textwrap: false,\r\n          strike: false,\r\n          underline: false,\r\n          color: '#0a0a0a',\r\n          font: {\r\n            name: 'Arial',\r\n            size: 10,\r\n            bold: false,\r\n            italic: false,\r\n          },\r\n        },\r\n        pageOption: {\r\n          widthOfMM: 210,\r\n          heightOfMM: 297,\r\n          paddingTop: 5,\r\n          paddingLeft: 5,\r\n          paddingBottom: 5,\r\n          paddingRight: 5,\r\n          oneMMOfPx: window['oneMMOfPx']\r\n        },\r\n      }\r\n\r\n      const me = this\r\n      const options = {\r\n        ...defaultOptions,\r\n        mode: 'edit',\r\n        showToolbar: true,\r\n        showGrid: true,\r\n        showBottomBar: false,\r\n        showContextmenu: true,\r\n        extendContextMenu: {\r\n          top: [\r\n            // {\r\n            //   key: 'vv', title: () => 'VV',\r\n            //   onClick: (data, sheet) => {\r\n            //     console.log('vv It', data, sheet)\r\n            //   }\r\n            // },\r\n            // {\r\n            //   tip: 'vv2', title: () => 'VV2',\r\n            //   onClick: (data, sheet) => {\r\n            //     console.log('vv2 It', data, sheet)\r\n            //   }\r\n            // },\r\n            // {key: 'divider'},\r\n          ],\r\n          bottom: [\r\n            {key: 'divider'},\r\n            {\r\n              tip: 'fixTableHeader', title: () => '固定表头(取消)',\r\n              onClick: this.fixTableHeader.bind(this),\r\n              onShow(ri, ci) {\r\n                if (ci !== -1 ||\r\n                    me.spread.sheet.data.tableFooter?.includes(ri) ||\r\n                    me.spread.sheet.data.pageHeader?.includes(ri) ||\r\n                    me.spread.sheet.data.pageFooter?.includes(ri)) {\r\n                  this.hide()\r\n                  return\r\n                }\r\n                this.show()\r\n                if (me.spread.sheet.data.tableHeader?.includes(ri)) {\r\n                  this.el.innerText = '取消表格头'\r\n                } else {\r\n                  this.el.innerText = '固定表格头'\r\n                }\r\n              }\r\n            },\r\n            {\r\n              tip: 'fixTableFooter', title: () => '固定表尾(取消)',\r\n              onClick: this.fixTableFooter.bind(this),\r\n              onShow(ri, ci) {\r\n                if (ci !== -1 ||\r\n                    me.spread.sheet.data.tableHeader?.includes(ri) ||\r\n                    me.spread.sheet.data.pageHeader?.includes(ri) ||\r\n                    me.spread.sheet.data.pageFooter?.includes(ri)) {\r\n                  this.hide()\r\n                  return\r\n                }\r\n                this.show()\r\n                if (me.spread.sheet.data.tableFooter?.includes(ri)) {\r\n                  this.el.innerText = '取消表格尾'\r\n                } else {\r\n                  this.el.innerText = '固定表格尾'\r\n                }\r\n              }\r\n            },\r\n            {\r\n              tip: 'fixPageHeader', title: () => '固定表头(取消)',\r\n              onClick: this.fixPageHeader.bind(this),\r\n              onShow(ri, ci) {\r\n                if (ci !== -1 ||\r\n                    me.spread.sheet.data.tableHeader?.includes(ri) ||\r\n                    me.spread.sheet.data.tableFooter?.includes(ri) ||\r\n                    me.spread.sheet.data.pageFooter?.includes(ri)) {\r\n                  this.hide()\r\n                  return\r\n                }\r\n                this.show()\r\n                if (me.spread.sheet.data.pageHeader?.includes(ri)) {\r\n                  this.el.innerText = '取消页头'\r\n                } else {\r\n                  this.el.innerText = '设定为页头'\r\n                }\r\n              }\r\n            },\r\n            {\r\n              tip: 'fixPageFooter', title: () => '固定表尾(取消)',\r\n              onClick: this.fixPageFooter.bind(this),\r\n              onShow(ri, ci) {\r\n                if (ci !== -1 ||\r\n                    me.spread.sheet.data.tableHeader?.includes(ri) ||\r\n                    me.spread.sheet.data.tableFooter?.includes(ri) ||\r\n                    me.spread.sheet.data.pageHeader?.includes(ri)) {\r\n                  this.hide()\r\n                  return\r\n                }\r\n                this.show()\r\n                if (me.spread.sheet.data.pageFooter?.includes(ri)) {\r\n                  this.el.innerText = '取消页尾'\r\n                } else {\r\n                  this.el.innerText = '设定为页尾'\r\n                }\r\n              }\r\n            }\r\n          ]\r\n        },\r\n        extendToolbar: {\r\n          left: [\r\n            {\r\n              tip: 'Preview',\r\n              icon: previewIcon,\r\n              onClick: this.preview.bind(this)\r\n            },\r\n            {\r\n              tip: 'Save',\r\n              icon: saveIcon,\r\n              onClick: this.save.bind(this)\r\n            },\r\n            {\r\n              tip: 'Setting',\r\n              icon: settingIcon,\r\n              onClick: this.save.bind(this)\r\n            }\r\n          ],\r\n          right: [],\r\n        },\r\n        view: {\r\n          height: this.calcHeight.bind(this),\r\n          width: this.calcWidth.bind(this),\r\n        },\r\n      };\r\n      options.pageOption.oneMMOfPx = window['oneMMOfPx']\r\n\r\n      let loadData = {}\r\n      if (this.type === 'demo') {\r\n        loadData = await localforage.getItem('spread_ctl_data') ?? {}\r\n      } else {\r\n        loadData = this.printTemplate?.template_content?.spread ?? {}\r\n      }\r\n\r\n      const _this = this;\r\n      this.spread = new Spreadsheet(this.$refs._inner, options)\r\n          .loadData(loadData) // load data\r\n          .change(this.spreadCtlChange.bind(this));\r\n      this.spread.on('cell-selected', function (cell, rowIdx, cellIdx) {\r\n        const data = _this.spread.getData()[0]\r\n        _this.designerProps.baseProps = {\r\n          ...cell,\r\n          rect: {\r\n            x: rowIdx,\r\n            y: cellIdx\r\n          },\r\n          style: {\r\n            width: data.cols[cellIdx] ? data.cols[cellIdx]?.width : options.col.width,\r\n            height: data.rows[rowIdx] ? data.rows[rowIdx]?.height : options.row.height,\r\n          }\r\n        }\r\n      })\r\n      this.designerProps.baseProps = {\r\n        rect: {x: 0, y: 0},\r\n        style: {width: options.col.width, height: options.row.height}\r\n      }\r\n      window['sp'] = this.spread\r\n    },\r\n    calcHeight() {\r\n      return this.$refs._inner.clientHeight\r\n    },\r\n    calcWidth() {\r\n      return this.$refs._inner.clientWidth\r\n    },\r\n    save(data, sheet) {\r\n      this.showPrintSettingDialog()\r\n\r\n      console.log(this.spread?.data)\r\n      this.spread.sheet.data.settings.pageOption.widthOfMM = 60\r\n      this.spread.sheet.data.settings.pageOption.heightOfMM = 40\r\n      this.spread.sheet.reload()\r\n    },\r\n    printSetup() {\r\n      system.msg('没做')\r\n    },\r\n    preview() {\r\n      const spread = this.spread.sheet.data.getData()\r\n      spread.docStruct = this.spread.sheet.data.getDocStruct()\r\n      const params = {\r\n        templateParams: {},\r\n        template_type: 1,\r\n        template_id: this.printTemplate.print_template_id,\r\n        spread: JSON.stringify(spread),\r\n        spread_options: JSON.stringify({\r\n          ...this.spread.sheet.data.settings,\r\n          extendContextMenu: undefined,\r\n          extendToolbar: undefined,\r\n          mode: undefined,\r\n          showToolbar: undefined,\r\n          showGrid: undefined,\r\n          showBottomBar: undefined,\r\n          showContextmenu: undefined,\r\n          style: undefined,\r\n        }),\r\n      };\r\n      system.showLoading()\r\n      // if (this.type === 'demo') {\r\n      //   params.templateData = {\r\n      //     name: 'Demo报表',\r\n      //     table1: [`\r\n      //       select t.customer_id,\r\n      //              t.customer_name,\r\n      //              t.customer_code,\r\n      //              t.remark\r\n      //       from bas_customer t limit 150\r\n      //     `],\r\n      //     table2: [`\r\n      //       select t.id_name,\r\n      //              t.id_desc,\r\n      //              t.id_type,\r\n      //              t.id_express\r\n      //       from id_rule t\r\n      //     `]\r\n      //   }\r\n      // }\r\n      system.invoke('/com/galaxis/wms/print/PrintPreviewManager@preview', params, {\r\n        headers: {\r\n          'Accept': 'application/json, */*',\r\n          'Content-Type': 'application/json',\r\n          'cache': 'default',\r\n          'x-ajax': 'true'\r\n        },\r\n        'responseType': 'blob',\r\n        afterResponse: (response) => {\r\n          if (response.status === 200) {\r\n            let URL = window.URL || window.webkitURL;\r\n            const url = URL.createObjectURL(response.data)\r\n            const newWindow = window.open(url, _.uniqueId('w'), 'status=yes,toolbar=no,scrollbars=1,titlebar=no,width=800,height=600,top=200,left=200');\r\n            if (newWindow.focus) {\r\n              newWindow.focus()\r\n            }\r\n            return;\r\n          }\r\n          system.showErrorDialog(\"打印模板预览失败\")\r\n        }\r\n      }).finally(() => {\r\n        system.clearLoading()\r\n      })\r\n    },\r\n    fixTableHeader(data, menu, sheet) {\r\n      // console.log('fixPagePrefix', data, menu, sheet)\r\n      const {ri} = this.spread.sheet.data.selector\r\n      if (ri >= 0) {\r\n        this.spread.sheet.setTableHeader(ri)\r\n      }\r\n    },\r\n    fixTableFooter(data, menu, sheet) {\r\n      // console.log('fixPageSuffix', data, menu, sheet)\r\n      const {ri} = this.spread.sheet.data.selector\r\n      if (ri >= 0) {\r\n        this.spread.sheet.setTableFooter(ri)\r\n      }\r\n    },\r\n    fixPageHeader(data, menu, sheet) {\r\n      // console.log('fixPageSuffix', data, menu, sheet)\r\n      const {ri} = this.spread.sheet.data.selector\r\n      if (ri >= 0) {\r\n        this.spread.sheet.setPageHeader(ri)\r\n      }\r\n    },\r\n    fixPageFooter(data, menu, sheet) {\r\n      // console.log('fixPageSuffix', data, menu, sheet)\r\n      const {ri} = this.spread.sheet.data.selector\r\n      if (ri >= 0) {\r\n        this.spread.sheet.setPageFooter(ri)\r\n      }\r\n    },\r\n    relayout() {\r\n      window.dispatchEvent(new Event('resize'))\r\n    },\r\n    spreadDragOver(ev) {\r\n      // const cellRect = this.spread.sheet.data.getCellRectByXY(ev.offsetX, ev.offsetY);\r\n      // if (cellRect) {\r\n      //   const {ci, ri} = cellRect\r\n      //   if (ci >= 0 && ri >= 0) {\r\n      //     this.spread.sheet.selectorSet(false, ri, ci)\r\n      //     ev.preventDefault();\r\n      //   }\r\n      // }\r\n      // this.spreadDragOverInner.call(this, this, ev)\r\n      ev.preventDefault();\r\n    },\r\n    spreadDragOverInner: _.debounce((me, ev) => {\r\n      const cellRect = me.spread.sheet.data.getCellRectByXY(ev.offsetX, ev.offsetY);\r\n      if (cellRect) {\r\n        const {ci, ri} = cellRect\r\n        if (ci >= 0 && ri >= 0) {\r\n          me.spread.sheet.selectorSet(false, ri, ci)\r\n          ev.preventDefault();\r\n        }\r\n      }\r\n    }, 200),\r\n    spreadDrop(ev) {\r\n      const node = this.treeDragNode\r\n      const cellRect = this.spread.sheet.data.getCellRectByXY(ev.offsetX, ev.offsetY);\r\n      if (cellRect) {\r\n        // console.log('spreadDrop', node, ev, cellRect)\r\n        const {ci, ri} = cellRect\r\n        if (ci >= 0 && ri >= 0) {\r\n          this.spread.sheet.data.setCellText(ri, ci, this.getExpression(node), 'finished')\r\n          this.spread.sheet.selectorSet(false, ri, ci)\r\n          ev.preventDefault();\r\n        }\r\n      }\r\n    },\r\n    getExpression(node) {\r\n      if (!node?.data?.field_label) {\r\n        return \"\";\r\n      }\r\n      const expression = node.parent.data.ds_name + \".\" + node.data.field\r\n      return \"${\" + expression + \"}\"\r\n    },\r\n    onTreeStartDrag(node, evt) {\r\n      this.treeDragNode = node\r\n      this.treeDragEvt = evt\r\n    },\r\n    loadTemplateParam() {\r\n      if (!this.printTemplate) {\r\n        return;\r\n      }\r\n      const params = {print_template_id: this.printTemplate?.print_template_id}\r\n      system.showLoading()\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintTemplateParamManager@getPrintTemplateParam\", params).then((res) => {\r\n        if (!res.success) {\r\n          system.showErrorDialog(\"加载模板参数异常\");\r\n          return;\r\n        }\r\n        const templateParams = res.data;\r\n        if (!templateParams) {\r\n          return;\r\n        }\r\n        const treeNodes = [];\r\n        for (let templateParam of templateParams) {\r\n          const treeNode = {\r\n            ds_id: templateParam.print_template_param_id,\r\n            field_label: templateParam.param_name,\r\n            ds_name: templateParam.param_key,\r\n            ds_title: templateParam.param_name,\r\n            ds_type: templateParam.param_type,\r\n            is_collection: templateParam.result_type === 2\r\n          }\r\n          if (templateParam.param_type === 'SQL') {\r\n            treeNode.ds_sql = templateParam.param_value;\r\n          } else if (templateParam.param_type === 'JSON') {\r\n            treeNode.ds_json = templateParam.param_value;\r\n          }\r\n          const paramDetail = templateParam.param_detail\r\n          treeNode.children = JSON.parse(!!paramDetail && paramDetail !== '' ? paramDetail : '[]')\r\n          treeNodes.push(treeNode);\r\n        }\r\n        this.datasourceTreeOption.data = treeNodes;\r\n      }).finally(() => {\r\n        system.clearLoading()\r\n      })\r\n    },\r\n    createDatasource(command) {\r\n      if (command === \"SQL\") {\r\n        this.showSQLDatasourceDialog()\r\n      } else if (command === \"JSON\") {\r\n        this.showJSONDatasourceDialog()\r\n      } else {\r\n        system.msg('暂不支持')\r\n      }\r\n    },\r\n    updateDatasource(node, data) {\r\n      if (data.ds_type === \"SQL\") {\r\n        this.sqlDatasourceDialogOption.result = _.cloneDeep(data)\r\n        this.showSQLDatasourceDialog()\r\n      } else if (data.ds_type === \"JSON\") {\r\n        this.jsonDatasourceDialogOption.result = _.cloneDeep(data)\r\n        this.showJSONDatasourceDialog()\r\n      } else {\r\n        system.msg('暂不支持')\r\n      }\r\n    },\r\n    removeDatasource(node, data) {\r\n      system.confirm(\"是否确认删除?\").then(() => {\r\n        const params = {template_param_id: data.ds_id}\r\n        system.invokeServer(\"/com/galaxis/wms/print/PrintTemplateParamManager@deleteTemplateParam\", params).then((res) => {\r\n          if (!res.success) {\r\n            system.showErrorDialog(\"删除模板参数异常\");\r\n            return;\r\n          }\r\n          system.msg(res.msg);\r\n          this.loadTemplateParam();\r\n        })\r\n      }).catch(() => {\r\n      })\r\n    },\r\n    submitJsonDatasource() {\r\n      const jsonDatasource = toRaw(this.$refs.jsonDatasourceRef.getResult())\r\n      if (!jsonDatasource) {\r\n        system.msg('未获取到JSON结果集数据')\r\n        return\r\n      }\r\n      this.jsonDatasourceDialogOption.submit_btn_loading = true\r\n      this.doCreateOrUpdateTemplateParam(\r\n          jsonDatasource,\r\n          (res) => {\r\n            system.msg(res.msg);\r\n            this.loadTemplateParam();\r\n          },\r\n          () => {\r\n            this.closeJSONDatasourceDialog();\r\n            this.jsonDatasourceDialogOption.submit_btn_loading = false\r\n          }\r\n      )\r\n    },\r\n    submitSQLDatasource() {\r\n      const sqlDatasource = toRaw(this.$refs.sqlDatasourceRef.getResult())\r\n      if (!sqlDatasource) {\r\n        system.msg('未获取到SQL结果集数据')\r\n        return\r\n      }\r\n      this.sqlDatasourceDialogOption.submit_btn_loading = true\r\n      this.doCreateOrUpdateTemplateParam(\r\n          sqlDatasource,\r\n          (res) => {\r\n            system.msg(res.msg);\r\n            this.loadTemplateParam();\r\n          },\r\n          () => {\r\n            this.closeSQLDatasourceDialog();\r\n            this.sqlDatasourceDialogOption.submit_btn_loading = false\r\n          }\r\n      )\r\n    },\r\n    doCreateOrUpdateTemplateParam(datasource, successCallback, finallyCallback) {\r\n      const params = {\r\n        print_template_param_id: datasource.ds_id,\r\n        print_template_id: this.printTemplate.print_template_id,\r\n        param_name: datasource.ds_title,\r\n        param_key: datasource.ds_name,\r\n        param_value: datasource.ds_type === 'SQL' ? datasource.ds_sql : datasource.ds_json,\r\n        result_type: datasource.is_collection ? 2 : 1,\r\n        param_type: datasource.ds_type,\r\n        paramDetail: JSON.stringify(datasource.children)\r\n      };\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintTemplateParamManager@createOrUpdatePrintTemplateParam\", params).then((res) => {\r\n        if (!res.success) {\r\n          system.showErrorDialog(\"加载模板参数异常\");\r\n          return;\r\n        }\r\n        successCallback(res)\r\n      }).finally(() => {\r\n        finallyCallback()\r\n      })\r\n    },\r\n    getTemplateContent() {\r\n      return {\r\n        template_id: this.printTemplate.print_template_id,\r\n        template_content: {\r\n          spread: this.spread.sheet.data.getData(),\r\n          spread_options: this.spread.sheet.data.settings,\r\n        }\r\n      };\r\n    },\r\n    showSQLDatasourceDialog() {\r\n      this.sqlDatasourceDialogOption.visible = true\r\n    },\r\n    closeSQLDatasourceDialog() {\r\n      _.extend(this.sqlDatasourceDialogOption, {visible: false, result: {}})\r\n    },\r\n    showJSONDatasourceDialog() {\r\n      this.jsonDatasourceDialogOption.visible = true\r\n    },\r\n    closeJSONDatasourceDialog() {\r\n      _.extend(this.jsonDatasourceDialogOption, {visible: false, result: {}})\r\n    },\r\n    showPrintSettingDialog() {\r\n      this.printSettingOption.visible = true\r\n    },\r\n    closePrintSettingDialog() {\r\n      this.printSettingOption.visible = false\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n</style>","<template>\r\n  <div class=\"json-data-result-content\">\r\n    <div>\r\n      <el-form :model=\"form\" ref=\"dataSourceForm\" :rules=\"rules\" label-width=\"100px\">\r\n        <el-form-item label=\"编码\" prop=\"ds_name\">\r\n          <el-input v-model=\"form.ds_name\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"名称\" prop=\"ds_title\">\r\n          <el-input v-model=\"form.ds_title\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"是否集合\" prop=\"is_collection\">\r\n          <el-switch v-model=\"form.is_collection\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"JSON数据\" prop=\"ds_json\">\r\n          <el-input v-model=\"form.ds_json\" type=\"textarea\" placeholder=\"请输入JSON数据\" :rows=\"3\"/>\r\n        </el-form-item>\r\n        <el-form-item>\r\n          <el-button type=\"primary\" @click=\"handleJsonAnalyze\">JSON解析</el-button>\r\n        </el-form-item>\r\n      </el-form>\r\n    </div>\r\n    <div>\r\n      <el-tabs v-model=\"activeTab\" class=\"demo-tabs\">\r\n        <el-tab-pane label=\"报表字段明细\" name=\"reportFieldDetail\">\r\n          <ag-grid-vue\r\n              style=\"width: 100%; height: 500px\"\r\n              class=\"ag-theme-alpine\"\r\n              v-bind=\"reportFieldDetailGridOption\"\r\n              @grid-ready=\"onGridReady\"\r\n          >\r\n          </ag-grid-vue>\r\n        </el-tab-pane>\r\n      </el-tabs>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport _ from \"lodash\";\r\nimport {toRaw} from \"vue\";\r\nimport {dict} from \"../../store\"\r\nimport {ElMessage} from \"element-plus\";\r\nimport YvDesignerAgGridCombo from \"../../components/design/designPrint/yv-designer-aggrid-combo.vue\"\r\n\r\nexport default {\r\n  name: \"yv-studio-print-template-datasource-sql\",\r\n  props: {\r\n    result: {\r\n      ds_name: String,\r\n      ds_title: String,\r\n      ds_type: String,\r\n      is_collection: Boolean,\r\n      ds_json: String,\r\n      children: Object\r\n    }\r\n  },\r\n  components: {\r\n    YvDesignerAgGridCombo\r\n  },\r\n  data() {\r\n    const fieldTypeList = [\r\n      {code: 'number', desc: '数值类型'},\r\n      {code: 'string', desc: '字符类型'},\r\n      {code: 'date', desc: '日期类型'},\r\n      {code: 'datetime', desc: '日期时间类型'},\r\n    ]\r\n    const datetimeFormatterList = [\r\n      {code: 'yyyy-MM-dd HH:mm:ss', desc: 'yyyy-MM-dd HH:mm:ss'},\r\n      {code: 'yyyy-MM-dd', desc: 'yyyy-MM-dd'},\r\n    ]\r\n    const columnDefs = [\r\n      {\r\n        headerName: '#',\r\n        editable: false,\r\n        valueGetter: (params) => {\r\n          return params.node?.rowIndex + 1\r\n        }\r\n      },\r\n      {headerName: \"字段名\", field: \"field\", editable: false},\r\n      {headerName: \"字段文本\", field: \"field_label\"},\r\n      {headerName: \"排序\", field: \"field_sort\"},\r\n      {\r\n        headerName: \"类型\",\r\n        field: \"field_type\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: fieldTypeList},\r\n        cellRenderer: (params) => {\r\n          return fieldTypeList.find(fieldType => fieldType.code === params.value)?.desc\r\n        }\r\n      },\r\n      {\r\n        headerName: \"字典编码\",\r\n        field: \"field_dict\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: toRaw(dict.value)},\r\n        cellRenderer: (params) => {\r\n          return toRaw(dict.value)[params.value]?.desc\r\n        }\r\n      },\r\n      {\r\n        headerName: \"显示格式\",\r\n        field: \"formatter\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: datetimeFormatterList},\r\n      },\r\n      {\r\n        headerName: \"操作\",\r\n        editable: false,\r\n        pinned: 'right',\r\n        cellRenderer: (params) => {\r\n          const input = document.createElement(\"input\")\r\n          input.type = \"button\";\r\n          input.value = \"删除\";\r\n          input.checked = params.data.is_primary_key\r\n          input.addEventListener('click', function () {\r\n            params.api.applyTransaction({remove: [params.data]});\r\n          })\r\n          return input\r\n        }\r\n      },\r\n    ]\r\n    const rules = {\r\n      ds_name: {required: true, message: '请输入编码', trigger: 'blur'},\r\n      ds_title: {required: true, message: '请输入名称', trigger: 'blur'},\r\n      is_collection: {required: true, message: '请选择是否集合', trigger: 'blur'},\r\n      ds_json: {required: true, message: '请输入查询SQL', trigger: 'blur'}\r\n    }\r\n    return {\r\n      rules,\r\n      form: {\r\n        ds_name: '',\r\n        ds_title: '',\r\n        ds_type: 'JSON',\r\n        is_collection: true,\r\n        ds_json: ''\r\n      },\r\n      activeTab: 'reportFieldDetail',\r\n      reportFieldDetailGridApi: null,\r\n      reportFieldDetailGridOption: {\r\n        columnDefs,\r\n        rowData: [],\r\n        defaultColDef: {\r\n          editable: true,\r\n        }\r\n      }\r\n    }\r\n  },\r\n  mounted() {\r\n    _.extend(this.form, this.result)\r\n  },\r\n  methods: {\r\n    onGridReady(params) {\r\n      this.reportFieldDetailGridApi = params.api;\r\n      if (this.result?.children) {\r\n        this.reportFieldDetailGridApi.setRowData(this.result?.children)\r\n      }\r\n    },\r\n    handleJsonAnalyze() {\r\n      let ds_json = this.form.ds_json\r\n      if (!ds_json) {\r\n        ElMessage.error('请输入正确的JSON数据')\r\n        return;\r\n      }\r\n      const jsonObj = this.parseJson(ds_json)\r\n      if (!jsonObj) {\r\n        return;\r\n      }\r\n      if (!jsonObj.hasOwnProperty('data')) {\r\n        ElMessage.error('JSON格式：用data包裹起来，暂不支持嵌套')\r\n        return;\r\n      }\r\n      let jsonData = jsonObj.data\r\n      if (this.form.is_collection) {\r\n        jsonData = jsonObj.data[0]\r\n      }\r\n      const fields = []\r\n      let sortNo = 0\r\n      const existFields = this.result?.children ?? []\r\n      const fieldMap = new Map()\r\n      for (let field of existFields) {\r\n        fieldMap.set(field.field, field)\r\n      }\r\n      for (let key in jsonData) {\r\n        sortNo++\r\n        const existField = fieldMap.get(key) ?? {}\r\n        fields.push({\r\n          field: key,\r\n          field_label: key,\r\n          field_sort: sortNo,\r\n          field_type: existField.field_type,\r\n          field_dict: existField.field_dict,\r\n          formatter: existField.formatter\r\n        })\r\n      }\r\n      this.reportFieldDetailGridApi.setRowData(fields)\r\n    },\r\n\r\n    parseJson(json: string) {\r\n      try {\r\n        return JSON.parse(json);\r\n      } catch (e) {\r\n        console.log(e)\r\n        ElMessage.error('请输入正确的JSON数据');\r\n        return \"\";\r\n      }\r\n    },\r\n    getResult(callback) {\r\n      this.$refs.dataSourceForm.validate((valid) => {\r\n        if (valid) {\r\n          const children = []\r\n          this.reportFieldDetailGridApi.forEachNode((node) => {\r\n            children.push(node.data)\r\n          })\r\n          const result = _.cloneDeep(this.form)\r\n          result.field_label = result.ds_title\r\n          result.children = children;\r\n          callback.call(this, result)\r\n        }\r\n      })\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>","<template>\r\n  <div class=\"json-data-result-content\">\r\n    <div>\r\n      <el-form :model=\"form\" ref=\"dataSourceForm\" :rules=\"rules\" label-width=\"100px\">\r\n        <el-form-item label=\"编码\" prop=\"ds_name\">\r\n          <el-input v-model=\"form.ds_name\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"名称\" prop=\"ds_title\">\r\n          <el-input v-model=\"form.ds_title\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"是否集合\" prop=\"is_collection\">\r\n          <el-switch v-model=\"form.is_collection\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"JSON数据\" prop=\"ds_json\">\r\n          <el-input v-model=\"form.ds_json\" type=\"textarea\" placeholder=\"请输入JSON数据\" :rows=\"3\"/>\r\n        </el-form-item>\r\n        <el-form-item>\r\n          <el-button type=\"primary\" @click=\"handleJsonAnalyze\">JSON解析</el-button>\r\n        </el-form-item>\r\n      </el-form>\r\n    </div>\r\n    <div>\r\n      <el-tabs v-model=\"activeTab\" class=\"demo-tabs\">\r\n        <el-tab-pane label=\"报表字段明细\" name=\"reportFieldDetail\">\r\n          <ag-grid-vue\r\n              style=\"width: 100%; height: 500px\"\r\n              class=\"ag-theme-alpine\"\r\n              v-bind=\"reportFieldDetailGridOption\"\r\n              @grid-ready=\"onGridReady\"\r\n          >\r\n          </ag-grid-vue>\r\n        </el-tab-pane>\r\n      </el-tabs>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport _ from \"lodash\";\r\nimport {toRaw} from \"vue\";\r\nimport {dict} from \"../../store\"\r\nimport {ElMessage} from \"element-plus\";\r\nimport YvDesignerAgGridCombo from \"../../components/design/designPrint/yv-designer-aggrid-combo.vue\"\r\n\r\nexport default {\r\n  name: \"yv-studio-print-template-datasource-sql\",\r\n  props: {\r\n    result: {\r\n      ds_name: String,\r\n      ds_title: String,\r\n      ds_type: String,\r\n      is_collection: Boolean,\r\n      ds_json: String,\r\n      children: Object\r\n    }\r\n  },\r\n  components: {\r\n    YvDesignerAgGridCombo\r\n  },\r\n  data() {\r\n    const fieldTypeList = [\r\n      {code: 'number', desc: '数值类型'},\r\n      {code: 'string', desc: '字符类型'},\r\n      {code: 'date', desc: '日期类型'},\r\n      {code: 'datetime', desc: '日期时间类型'},\r\n    ]\r\n    const datetimeFormatterList = [\r\n      {code: 'yyyy-MM-dd HH:mm:ss', desc: 'yyyy-MM-dd HH:mm:ss'},\r\n      {code: 'yyyy-MM-dd', desc: 'yyyy-MM-dd'},\r\n    ]\r\n    const columnDefs = [\r\n      {\r\n        headerName: '#',\r\n        editable: false,\r\n        valueGetter: (params) => {\r\n          return params.node?.rowIndex + 1\r\n        }\r\n      },\r\n      {headerName: \"字段名\", field: \"field\", editable: false},\r\n      {headerName: \"字段文本\", field: \"field_label\"},\r\n      {headerName: \"排序\", field: \"field_sort\"},\r\n      {\r\n        headerName: \"类型\",\r\n        field: \"field_type\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: fieldTypeList},\r\n        cellRenderer: (params) => {\r\n          return fieldTypeList.find(fieldType => fieldType.code === params.value)?.desc\r\n        }\r\n      },\r\n      {\r\n        headerName: \"字典编码\",\r\n        field: \"field_dict\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: toRaw(dict.value)},\r\n        cellRenderer: (params) => {\r\n          return toRaw(dict.value)[params.value]?.desc\r\n        }\r\n      },\r\n      {\r\n        headerName: \"显示格式\",\r\n        field: \"formatter\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: datetimeFormatterList},\r\n      },\r\n      {\r\n        headerName: \"操作\",\r\n        editable: false,\r\n        pinned: 'right',\r\n        cellRenderer: (params) => {\r\n          const input = document.createElement(\"input\")\r\n          input.type = \"button\";\r\n          input.value = \"删除\";\r\n          input.checked = params.data.is_primary_key\r\n          input.addEventListener('click', function () {\r\n            params.api.applyTransaction({remove: [params.data]});\r\n          })\r\n          return input\r\n        }\r\n      },\r\n    ]\r\n    const rules = {\r\n      ds_name: {required: true, message: '请输入编码', trigger: 'blur'},\r\n      ds_title: {required: true, message: '请输入名称', trigger: 'blur'},\r\n      is_collection: {required: true, message: '请选择是否集合', trigger: 'blur'},\r\n      ds_json: {required: true, message: '请输入查询SQL', trigger: 'blur'}\r\n    }\r\n    return {\r\n      rules,\r\n      form: {\r\n        ds_name: '',\r\n        ds_title: '',\r\n        ds_type: 'JSON',\r\n        is_collection: true,\r\n        ds_json: ''\r\n      },\r\n      activeTab: 'reportFieldDetail',\r\n      reportFieldDetailGridApi: null,\r\n      reportFieldDetailGridOption: {\r\n        columnDefs,\r\n        rowData: [],\r\n        defaultColDef: {\r\n          editable: true,\r\n        }\r\n      }\r\n    }\r\n  },\r\n  mounted() {\r\n    _.extend(this.form, this.result)\r\n  },\r\n  methods: {\r\n    onGridReady(params) {\r\n      this.reportFieldDetailGridApi = params.api;\r\n      if (this.result?.children) {\r\n        this.reportFieldDetailGridApi.setRowData(this.result?.children)\r\n      }\r\n    },\r\n    handleJsonAnalyze() {\r\n      let ds_json = this.form.ds_json\r\n      if (!ds_json) {\r\n        ElMessage.error('请输入正确的JSON数据')\r\n        return;\r\n      }\r\n      const jsonObj = this.parseJson(ds_json)\r\n      if (!jsonObj) {\r\n        return;\r\n      }\r\n      if (!jsonObj.hasOwnProperty('data')) {\r\n        ElMessage.error('JSON格式：用data包裹起来，暂不支持嵌套')\r\n        return;\r\n      }\r\n      let jsonData = jsonObj.data\r\n      if (this.form.is_collection) {\r\n        jsonData = jsonObj.data[0]\r\n      }\r\n      const fields = []\r\n      let sortNo = 0\r\n      const existFields = this.result?.children ?? []\r\n      const fieldMap = new Map()\r\n      for (let field of existFields) {\r\n        fieldMap.set(field.field, field)\r\n      }\r\n      for (let key in jsonData) {\r\n        sortNo++\r\n        const existField = fieldMap.get(key) ?? {}\r\n        fields.push({\r\n          field: key,\r\n          field_label: key,\r\n          field_sort: sortNo,\r\n          field_type: existField.field_type,\r\n          field_dict: existField.field_dict,\r\n          formatter: existField.formatter\r\n        })\r\n      }\r\n      this.reportFieldDetailGridApi.setRowData(fields)\r\n    },\r\n\r\n    parseJson(json: string) {\r\n      try {\r\n        return JSON.parse(json);\r\n      } catch (e) {\r\n        console.log(e)\r\n        ElMessage.error('请输入正确的JSON数据');\r\n        return \"\";\r\n      }\r\n    },\r\n    getResult(callback) {\r\n      this.$refs.dataSourceForm.validate((valid) => {\r\n        if (valid) {\r\n          const children = []\r\n          this.reportFieldDetailGridApi.forEachNode((node) => {\r\n            children.push(node.data)\r\n          })\r\n          const result = _.cloneDeep(this.form)\r\n          result.field_label = result.ds_title\r\n          result.children = children;\r\n          callback.call(this, result)\r\n        }\r\n      })\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>","<template>\r\n  <div class=\"json-data-result-content\">\r\n    <div>\r\n      <el-form :model=\"form\" ref=\"dataSourceForm\" label-width=\"120px\" :rules=\"rules\">\r\n        <el-form-item label=\"编码\" prop=\"ds_name\">\r\n          <el-input v-model=\"form.ds_name\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"名称\" prop=\"ds_title\">\r\n          <el-input v-model=\"form.ds_title\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"是否集合\" prop=\"is_collection\">\r\n          <el-switch v-model=\"form.is_collection\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"SQL数据\" prop=\"ds_sql\">\r\n          <el-input v-model=\"form.ds_sql\" type=\"textarea\" placeholder=\"请输入查询SQL\" :rows=\"3\"/>\r\n        </el-form-item>\r\n        <el-form-item>\r\n          <el-button type=\"primary\" :loading=\"sqlAnalyzeOption.loading\" @click=\"handleSQLAnalyze\">SQL解析</el-button>\r\n        </el-form-item>\r\n      </el-form>\r\n    </div>\r\n    <div>\r\n      <el-tabs v-model=\"activeTab\" class=\"demo-tabs\">\r\n        <el-tab-pane label=\"报表字段明细\" name=\"reportFieldDetailTab\">\r\n          <ag-grid-vue\r\n              style=\"width: 100%; height: 500px\"\r\n              class=\"ag-theme-alpine\"\r\n              v-bind=\"reportFieldDetailGridOption\"\r\n              @grid-ready=\"reportFieldDetailOnGridReady\"\r\n          >\r\n          </ag-grid-vue>\r\n        </el-tab-pane>\r\n      </el-tabs>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport _ from \"lodash\";\r\nimport {toRaw} from \"vue\";\r\nimport {dict} from \"../../store\";\r\nimport {ElMessage} from \"element-plus\";\r\nimport YvDesignerAgGridCombo from \"../../components/design/designPrint/yv-designer-aggrid-combo.vue\"\r\n\r\nexport default {\r\n  name: \"yv-studio-print-template-datasource-sql\",\r\n  props: {\r\n    result: {\r\n      ds_name: String,\r\n      ds_title: String,\r\n      ds_type: String,\r\n      is_collection: Boolean,\r\n      ds_json: String,\r\n      children: Object\r\n    }\r\n  },\r\n  components: {\r\n    YvDesignerAgGridCombo\r\n  },\r\n  data() {\r\n    const fieldTypeList = [\r\n      {code: 'number', desc: '数值类型'},\r\n      {code: 'string', desc: '字符类型'},\r\n      {code: 'date', desc: '日期类型'},\r\n      {code: 'datetime', desc: '日期时间类型'},\r\n    ]\r\n    const datetimeFormatterList = [\r\n      {code: 'yyyy-MM-dd HH:mm:ss', desc: 'yyyy-MM-dd HH:mm:ss'},\r\n      {code: 'yyyy-MM-dd', desc: 'yyyy-MM-dd'},\r\n    ]\r\n    const columnDefs = [\r\n      {\r\n        headerName: '#',\r\n        editable: false,\r\n        valueGetter: (params) => {\r\n          return params.node?.rowIndex + 1\r\n        }\r\n      },\r\n      {headerName: \"字段名\", field: \"field\", editable: false},\r\n      {headerName: \"字段文本\", field: \"field_label\"},\r\n      {headerName: \"排序\", field: \"field_sort\"},\r\n      {\r\n        headerName: \"类型\",\r\n        field: \"field_type\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: fieldTypeList},\r\n        cellRenderer: (params) => {\r\n          return fieldTypeList.find(fieldType => fieldType.code === params.value)?.desc\r\n        }\r\n      },\r\n      {\r\n        headerName: \"字典编码\",\r\n        field: \"field_dict\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: toRaw(dict.value)},\r\n        cellRenderer: (params) => {\r\n          return toRaw(dict.value)[params.value]?.desc\r\n        }\r\n      },\r\n      {\r\n        headerName: \"显示格式\",\r\n        field: \"formatter\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: datetimeFormatterList},\r\n      },\r\n      {\r\n        headerName: \"操作\",\r\n        editable: false,\r\n        pinned: 'right',\r\n        cellRenderer: (params) => {\r\n          const input = document.createElement(\"input\")\r\n          input.type = \"button\";\r\n          input.value = \"删除\";\r\n          input.checked = params.data.is_primary_key\r\n          input.addEventListener('click', function () {\r\n            params.api.applyTransaction({remove: [params.data]});\r\n          })\r\n          return input\r\n        }\r\n      },\r\n    ]\r\n    const rules = {\r\n      ds_name: {required: true, message: '请输入编码', trigger: 'blur'},\r\n      ds_title: {required: true, message: '请输入名称', trigger: 'blur'},\r\n      is_collection: {required: true, message: '请选择是否集合', trigger: 'blur'},\r\n      ds_sql: {required: true, message: '请输入查询SQL', trigger: 'blur'}\r\n    }\r\n    return {\r\n      rules,\r\n      form: {\r\n        ds_id: null,\r\n        ds_name: '',\r\n        ds_title: '',\r\n        ds_type: 'SQL',\r\n        is_collection: true,\r\n        ds_sql: ''\r\n      },\r\n      activeTab: 'reportFieldDetailTab',\r\n      sqlAnalyzeOption: {\r\n        loading: false\r\n      },\r\n      reportFieldDetailGridApi: null,\r\n      reportFieldDetailGridOption: {\r\n        columnDefs,\r\n        rowData: [],\r\n        defaultColDef: {\r\n          editable: true,\r\n        }\r\n      },\r\n      dataPreviewGridGridApi: null,\r\n      dataPreviewGridOption: {\r\n        columnDefs,\r\n        rowData: [],\r\n        defaultColDef: {\r\n          editable: true,\r\n        }\r\n      }\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    _.extend(this.form, this.result)\r\n  },\r\n\r\n  methods: {\r\n    reportFieldDetailOnGridReady(params) {\r\n      this.reportFieldDetailGridApi = params.api;\r\n      if (this.result?.children) {\r\n        this.reportFieldDetailGridApi.setRowData(this.result?.children)\r\n      }\r\n    },\r\n    dataPreviewOnGridReady(params) {\r\n      this.dataPreviewGridGridApi = params.api;\r\n    },\r\n    handleSQLAnalyze() {\r\n      let ds_sql = this.form.ds_sql\r\n      if (!ds_sql) {\r\n        ElMessage.error('请输入正确的SQL数据')\r\n        return;\r\n      }\r\n      const params = {\r\n        sql: this.form.ds_sql,\r\n        is_collection: this.form.is_collection,\r\n        query: {}\r\n      }\r\n      this.sqlAnalyzeOption.loading = true\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@getResultSet\", params).then((res) => {\r\n        if (res.success) {\r\n          const fields = []\r\n          let sortNo = 0\r\n          let result = res.data\r\n          if (this.form.is_collection) {\r\n            result = res.data[0]\r\n          }\r\n          const existFields = this.result?.children ?? []\r\n          const fieldMap = new Map()\r\n          for (let field of existFields) {\r\n            fieldMap.set(field.field, field)\r\n          }\r\n          for (let key in result) {\r\n            sortNo++\r\n            const existField = fieldMap.get(key) ?? {}\r\n            fields.push({\r\n              field: key,\r\n              field_label: key,\r\n              field_sort: sortNo,\r\n              field_type: existField.field_type,\r\n              field_dict: existField.field_dict,\r\n              formatter: existField.formatter\r\n            })\r\n          }\r\n          this.reportFieldDetailGridApi.setRowData(fields)\r\n          return\r\n        }\r\n        system.showErrorDialog(res.msg)\r\n      }).finally(() => {\r\n        this.sqlAnalyzeOption.loading = false\r\n      })\r\n    },\r\n    getResult(callback) {\r\n      this.$refs.dataSourceForm.validate((valid) => {\r\n        if (valid) {\r\n          const children = []\r\n          this.reportFieldDetailGridApi.forEachNode((node) => {\r\n            children.push(node.data)\r\n          })\r\n          const result = _.cloneDeep(this.form)\r\n          result.field_label = result.ds_title\r\n          result.children = children;\r\n          callback.call(this, result)\r\n        }\r\n      })\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>","<template>\r\n  <div class=\"json-data-result-content\">\r\n    <div>\r\n      <el-form :model=\"form\" ref=\"dataSourceForm\" label-width=\"120px\" :rules=\"rules\">\r\n        <el-form-item label=\"编码\" prop=\"ds_name\">\r\n          <el-input v-model=\"form.ds_name\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"名称\" prop=\"ds_title\">\r\n          <el-input v-model=\"form.ds_title\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"是否集合\" prop=\"is_collection\">\r\n          <el-switch v-model=\"form.is_collection\"/>\r\n        </el-form-item>\r\n        <el-form-item label=\"SQL数据\" prop=\"ds_sql\">\r\n          <el-input v-model=\"form.ds_sql\" type=\"textarea\" placeholder=\"请输入查询SQL\" :rows=\"3\"/>\r\n        </el-form-item>\r\n        <el-form-item>\r\n          <el-button type=\"primary\" :loading=\"sqlAnalyzeOption.loading\" @click=\"handleSQLAnalyze\">SQL解析</el-button>\r\n        </el-form-item>\r\n      </el-form>\r\n    </div>\r\n    <div>\r\n      <el-tabs v-model=\"activeTab\" class=\"demo-tabs\">\r\n        <el-tab-pane label=\"报表字段明细\" name=\"reportFieldDetailTab\">\r\n          <ag-grid-vue\r\n              style=\"width: 100%; height: 500px\"\r\n              class=\"ag-theme-alpine\"\r\n              v-bind=\"reportFieldDetailGridOption\"\r\n              @grid-ready=\"reportFieldDetailOnGridReady\"\r\n          >\r\n          </ag-grid-vue>\r\n        </el-tab-pane>\r\n      </el-tabs>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport _ from \"lodash\";\r\nimport {toRaw} from \"vue\";\r\nimport {dict} from \"../../store\";\r\nimport {ElMessage} from \"element-plus\";\r\nimport YvDesignerAgGridCombo from \"../../components/design/designPrint/yv-designer-aggrid-combo.vue\"\r\n\r\nexport default {\r\n  name: \"yv-studio-print-template-datasource-sql\",\r\n  props: {\r\n    result: {\r\n      ds_name: String,\r\n      ds_title: String,\r\n      ds_type: String,\r\n      is_collection: Boolean,\r\n      ds_json: String,\r\n      children: Object\r\n    }\r\n  },\r\n  components: {\r\n    YvDesignerAgGridCombo\r\n  },\r\n  data() {\r\n    const fieldTypeList = [\r\n      {code: 'number', desc: '数值类型'},\r\n      {code: 'string', desc: '字符类型'},\r\n      {code: 'date', desc: '日期类型'},\r\n      {code: 'datetime', desc: '日期时间类型'},\r\n    ]\r\n    const datetimeFormatterList = [\r\n      {code: 'yyyy-MM-dd HH:mm:ss', desc: 'yyyy-MM-dd HH:mm:ss'},\r\n      {code: 'yyyy-MM-dd', desc: 'yyyy-MM-dd'},\r\n    ]\r\n    const columnDefs = [\r\n      {\r\n        headerName: '#',\r\n        editable: false,\r\n        valueGetter: (params) => {\r\n          return params.node?.rowIndex + 1\r\n        }\r\n      },\r\n      {headerName: \"字段名\", field: \"field\", editable: false},\r\n      {headerName: \"字段文本\", field: \"field_label\"},\r\n      {headerName: \"排序\", field: \"field_sort\"},\r\n      {\r\n        headerName: \"类型\",\r\n        field: \"field_type\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: fieldTypeList},\r\n        cellRenderer: (params) => {\r\n          return fieldTypeList.find(fieldType => fieldType.code === params.value)?.desc\r\n        }\r\n      },\r\n      {\r\n        headerName: \"字典编码\",\r\n        field: \"field_dict\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: toRaw(dict.value)},\r\n        cellRenderer: (params) => {\r\n          return toRaw(dict.value)[params.value]?.desc\r\n        }\r\n      },\r\n      {\r\n        headerName: \"显示格式\",\r\n        field: \"formatter\",\r\n        cellEditor: 'YvDesignerAgGridCombo',\r\n        cellEditorParams: {selectList: datetimeFormatterList},\r\n      },\r\n      {\r\n        headerName: \"操作\",\r\n        editable: false,\r\n        pinned: 'right',\r\n        cellRenderer: (params) => {\r\n          const input = document.createElement(\"input\")\r\n          input.type = \"button\";\r\n          input.value = \"删除\";\r\n          input.checked = params.data.is_primary_key\r\n          input.addEventListener('click', function () {\r\n            params.api.applyTransaction({remove: [params.data]});\r\n          })\r\n          return input\r\n        }\r\n      },\r\n    ]\r\n    const rules = {\r\n      ds_name: {required: true, message: '请输入编码', trigger: 'blur'},\r\n      ds_title: {required: true, message: '请输入名称', trigger: 'blur'},\r\n      is_collection: {required: true, message: '请选择是否集合', trigger: 'blur'},\r\n      ds_sql: {required: true, message: '请输入查询SQL', trigger: 'blur'}\r\n    }\r\n    return {\r\n      rules,\r\n      form: {\r\n        ds_id: null,\r\n        ds_name: '',\r\n        ds_title: '',\r\n        ds_type: 'SQL',\r\n        is_collection: true,\r\n        ds_sql: ''\r\n      },\r\n      activeTab: 'reportFieldDetailTab',\r\n      sqlAnalyzeOption: {\r\n        loading: false\r\n      },\r\n      reportFieldDetailGridApi: null,\r\n      reportFieldDetailGridOption: {\r\n        columnDefs,\r\n        rowData: [],\r\n        defaultColDef: {\r\n          editable: true,\r\n        }\r\n      },\r\n      dataPreviewGridGridApi: null,\r\n      dataPreviewGridOption: {\r\n        columnDefs,\r\n        rowData: [],\r\n        defaultColDef: {\r\n          editable: true,\r\n        }\r\n      }\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    _.extend(this.form, this.result)\r\n  },\r\n\r\n  methods: {\r\n    reportFieldDetailOnGridReady(params) {\r\n      this.reportFieldDetailGridApi = params.api;\r\n      if (this.result?.children) {\r\n        this.reportFieldDetailGridApi.setRowData(this.result?.children)\r\n      }\r\n    },\r\n    dataPreviewOnGridReady(params) {\r\n      this.dataPreviewGridGridApi = params.api;\r\n    },\r\n    handleSQLAnalyze() {\r\n      let ds_sql = this.form.ds_sql\r\n      if (!ds_sql) {\r\n        ElMessage.error('请输入正确的SQL数据')\r\n        return;\r\n      }\r\n      const params = {\r\n        sql: this.form.ds_sql,\r\n        is_collection: this.form.is_collection,\r\n        query: {}\r\n      }\r\n      this.sqlAnalyzeOption.loading = true\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@getResultSet\", params).then((res) => {\r\n        if (res.success) {\r\n          const fields = []\r\n          let sortNo = 0\r\n          let result = res.data\r\n          if (this.form.is_collection) {\r\n            result = res.data[0]\r\n          }\r\n          const existFields = this.result?.children ?? []\r\n          const fieldMap = new Map()\r\n          for (let field of existFields) {\r\n            fieldMap.set(field.field, field)\r\n          }\r\n          for (let key in result) {\r\n            sortNo++\r\n            const existField = fieldMap.get(key) ?? {}\r\n            fields.push({\r\n              field: key,\r\n              field_label: key,\r\n              field_sort: sortNo,\r\n              field_type: existField.field_type,\r\n              field_dict: existField.field_dict,\r\n              formatter: existField.formatter\r\n            })\r\n          }\r\n          this.reportFieldDetailGridApi.setRowData(fields)\r\n          return\r\n        }\r\n        system.showErrorDialog(res.msg)\r\n      }).finally(() => {\r\n        this.sqlAnalyzeOption.loading = false\r\n      })\r\n    },\r\n    getResult(callback) {\r\n      this.$refs.dataSourceForm.validate((valid) => {\r\n        if (valid) {\r\n          const children = []\r\n          this.reportFieldDetailGridApi.forEachNode((node) => {\r\n            children.push(node.data)\r\n          })\r\n          const result = _.cloneDeep(this.form)\r\n          result.field_label = result.ds_title\r\n          result.children = children;\r\n          callback.call(this, result)\r\n        }\r\n      })\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>","<template>\r\n  <el-collapse v-model=\"activeNames\">\r\n    <el-collapse-item title=\"报表信息\" name=\"1\">\r\n      <div style=\"width: 90%;\">\r\n        <el-form-item label=\"打印模板ID\" label-width=\"100px\">\r\n          <el-input v-model=\"printTemplate.print_template_id\" readonly/>\r\n        </el-form-item>\r\n        <el-form-item label=\"打印模板编码\" label-width=\"100px\">\r\n          <el-input v-model=\"printTemplate.print_template_code\" readonly/>\r\n        </el-form-item>\r\n        <el-form-item label=\"打印模板名称\" label-width=\"100px\">\r\n          <el-input v-model=\"printTemplate.print_template_name\" readonly/>\r\n        </el-form-item>\r\n      </div>\r\n    </el-collapse-item>\r\n    <el-collapse-item name=\"2\">\r\n      <template #title>\r\n        <span>数据集管理</span>\r\n        <el-dropdown @command=\"createDatasource\" class=\"datasource-plus\">\r\n          <span class=\"el-dropdown-link\">\r\n            <el-button link class=\"toolbar-btn\" :icon=\"renderIcon('fa Plus')\"/>\r\n          </span>\r\n          <template #dropdown>\r\n            <el-dropdown-menu>\r\n              <el-dropdown-item command=\"SQL\">SQL数据集</el-dropdown-item>\r\n              <el-dropdown-item command=\"JSON\">JSON数据集</el-dropdown-item>\r\n              <!--<el-dropdown-item disabled>API数据集</el-dropdown-item>-->\r\n              <!--<el-dropdown-item disabled>JavaBean数据集</el-dropdown-item>-->\r\n            </el-dropdown-menu>\r\n          </template>\r\n        </el-dropdown>\r\n      </template>\r\n      <el-tree class=\"unselect\" :data=\"datasourceTreeOption.data\"\r\n               :props=\"datasourceTreeOption.defaultProps\"\r\n               :default-expand-all=\"true\"\r\n               :expand-on-click-node=\"false\"\r\n               :allow-drag=\"()=>true\"\r\n               :allow-drop=\"()=>false\"\r\n               :draggable=\"true\"\r\n               @node-drag-start=\"onTreeStartDrag\">\r\n        <template #default=\"{ node, data }\">\r\n          <div class=\"custom-tree-node\">\r\n            <div style=\"display: inline\">{{ data.field_label }}</div>\r\n            <div class=\"tree-toolbar\" style=\"display: inline\" v-if=\"node.level === 1\">\r\n              <el-button link class=\"toolbar-btn\" @click=\"updateDatasource(node, data)\"\r\n                         :icon=\"renderIcon('fa PencilAlt')\"/>\r\n              <el-button link class=\"toolbar-btn tree-toolbar-remove\" @click=\"removeDatasource(node, data)\"\r\n                         :icon=\"renderIcon('fa Times')\"/>\r\n            </div>\r\n          </div>\r\n        </template>\r\n      </el-tree>\r\n    </el-collapse-item>\r\n  </el-collapse>\r\n\r\n  <!-- SQL data result dialog start -->\r\n  <el-dialog\r\n      :title=\"sqlDatasourceDialogOption.title\"\r\n      v-model=\"sqlDatasourceDialogOption.visible\"\r\n      fullscreen\r\n      destroy-on-close\r\n      append-to-body>\r\n    <div class=\"sql-datasource-dialog-content\">\r\n      <YvStudioPrintTemplateDatasourceSql ref=\"sqlDatasourceRef\" :result=\"sqlDatasourceDialogOption.result\"/>\r\n    </div>\r\n    <template #footer>\r\n      <span class=\"dialog-footer\">\r\n          <el-button type=\"primary\"\r\n                     :loading=\"sqlDatasourceDialogOption.submit_btn_loading\"\r\n                     @click=\"submitSQLDatasource\"\r\n                     :icon=\"renderIcon('fa Check')\">\r\n            提交\r\n          </el-button>\r\n          <el-button @click=\"closeSQLDatasourceDialog\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n      </span>\r\n    </template>\r\n  </el-dialog>\r\n  <!-- SQL data result dialog end -->\r\n\r\n  <!-- json data result dialog start -->\r\n  <el-dialog\r\n      :title=\"jsonDatasourceDialogOption.title\"\r\n      v-model=\"jsonDatasourceDialogOption.visible\"\r\n      fullscreen\r\n      destroy-on-close\r\n      append-to-body>\r\n    <div class=\"json-datasource-dialog-content\">\r\n      <YvStudioPrintTemplateDatasourceJson ref=\"jsonDatasourceRef\" :result=\"this.jsonDatasourceDialogOption.result\"/>\r\n    </div>\r\n\r\n    <template #footer>\r\n          <span class=\"dialog-footer\">\r\n              <el-button type=\"primary\"\r\n                         :loading=\"jsonDatasourceDialogOption.submit_btn_loading\"\r\n                         @click=\"submitJsonDatasource\"\r\n                         :icon=\"renderIcon('fa Check')\">\r\n                提交\r\n              </el-button>\r\n              <el-button @click=\"closeJSONDatasourceDialog\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n          </span>\r\n    </template>\r\n  </el-dialog>\r\n  <!-- SQL data result dialog end -->\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport _ from \"lodash\";\r\nimport {toRaw} from \"vue\";\r\nimport {renderIcon} from '../../utils'\r\nimport YvStudioPrintTemplateDatasourceJson from \"./yv-studio-print-template-datasource-json.vue\";\r\nimport YvStudioPrintTemplateDatasourceSql from \"./yv-studio-print-template-datasource-sql.vue\";\r\n\r\nexport default {\r\n  components: {\r\n    YvStudioPrintTemplateDatasourceJson,\r\n    YvStudioPrintTemplateDatasourceSql\r\n  },\r\n  props: {\r\n    printTemplate: {\r\n      print_template_id: String,\r\n      print_template_code: String,\r\n      print_template_name: String,\r\n      template_content: String,\r\n      template_width: Number,\r\n      template_height: Number\r\n    }\r\n  },\r\n  data() {\r\n    return {\r\n      activeNames: [\"1\", \"2\"],\r\n      datasourceTreeOption: {\r\n        defaultProps: {\r\n          label: 'field_label'\r\n        },\r\n        data: []\r\n      },\r\n      sqlDatasourceDialogOption: {\r\n        visible: false,\r\n        title: \"SQL数据集\",\r\n        submit_btn_loading: false,\r\n        result: {}\r\n      },\r\n      jsonDatasourceDialogOption: {\r\n        visible: false,\r\n        title: \"JSON数据集\",\r\n        submit_btn_loading: false,\r\n        result: {}\r\n      },\r\n    }\r\n  },\r\n  mounted() {\r\n    this.loadTemplateParam()\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    onTreeStartDrag(node, evt) {\r\n      this.treeDragNode = node\r\n      this.treeDragEvt = evt\r\n    },\r\n    loadTemplateParam() {\r\n      if (!this.printTemplate) {\r\n        return;\r\n      }\r\n      const params = {print_template_id: this.printTemplate?.print_template_id}\r\n      system.showLoading()\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintTemplateParamManager@getPrintTemplateParam\", params).then((res) => {\r\n        if (!res.success) {\r\n          system.showErrorDialog(\"加载模板参数异常\");\r\n          return;\r\n        }\r\n        const templateParams = res.data;\r\n        if (!templateParams) {\r\n          return;\r\n        }\r\n        this.templateParams = templateParams;\r\n        const treeNodes = [];\r\n        for (let templateParam of templateParams) {\r\n          const treeNode = {\r\n            ds_id: templateParam.print_template_param_id,\r\n            field_label: templateParam.param_name,\r\n            ds_name: templateParam.param_key,\r\n            ds_title: templateParam.param_name,\r\n            ds_type: templateParam.param_type,\r\n            is_collection: templateParam.result_type === 2\r\n          }\r\n          if (templateParam.param_type === 'SQL') {\r\n            treeNode.ds_sql = templateParam.param_value;\r\n          } else if (templateParam.param_type === 'JSON') {\r\n            treeNode.ds_json = templateParam.param_value;\r\n          }\r\n          const paramDetail = templateParam.param_detail\r\n          treeNode.children = JSON.parse(!!paramDetail && paramDetail !== '' ? paramDetail : '[]')\r\n          treeNodes.push(treeNode);\r\n        }\r\n        this.datasourceTreeOption.data = treeNodes;\r\n      }).finally(() => {\r\n        system.clearLoading()\r\n      })\r\n    },\r\n    createDatasource(command) {\r\n      if (command === \"SQL\") {\r\n        this.showSQLDatasourceDialog()\r\n      } else if (command === \"JSON\") {\r\n        this.showJSONDatasourceDialog()\r\n      } else {\r\n        system.msg('暂不支持')\r\n      }\r\n    },\r\n    updateDatasource(node, data) {\r\n      if (data.ds_type === \"SQL\") {\r\n        this.sqlDatasourceDialogOption.result = _.cloneDeep(data)\r\n        this.showSQLDatasourceDialog()\r\n      } else if (data.ds_type === \"JSON\") {\r\n        this.jsonDatasourceDialogOption.result = _.cloneDeep(data)\r\n        this.showJSONDatasourceDialog()\r\n      } else {\r\n        system.msg('暂不支持')\r\n      }\r\n    },\r\n    removeDatasource(node, data) {\r\n      system.confirm(\"是否确认删除?\").then(() => {\r\n        const params = {template_param_id: data.ds_id}\r\n        system.invokeServer(\"/com/galaxis/wms/print/PrintTemplateParamManager@deleteTemplateParam\", params).then((res) => {\r\n          if (!res.success) {\r\n            system.showErrorDialog(\"删除模板参数异常\");\r\n            return;\r\n          }\r\n          system.msg(res.msg);\r\n          this.loadTemplateParam();\r\n        })\r\n      }).catch(() => {\r\n      })\r\n    },\r\n    submitJsonDatasource() {\r\n      this.$refs.jsonDatasourceRef.getResult(jsonDatasource => {\r\n        if (!jsonDatasource) {\r\n          system.msg('未获取到JSON结果集数据')\r\n          return\r\n        }\r\n        this.jsonDatasourceDialogOption.submit_btn_loading = true\r\n        this.doCreateOrUpdateTemplateParam(jsonDatasource).then((res) => {\r\n          if (!res.success) {\r\n            system.showErrorDialog(\"保存打印模板参数异常, 请稍等再试...\");\r\n            return;\r\n          }\r\n          system.msg(res.msg);\r\n          this.loadTemplateParam();\r\n        }).finally(() => {\r\n          this.closeJSONDatasourceDialog();\r\n          this.jsonDatasourceDialogOption.submit_btn_loading = false\r\n        })\r\n      })\r\n    },\r\n    submitSQLDatasource() {\r\n      this.$refs.sqlDatasourceRef.getResult((sqlDatasource) => {\r\n        if (!sqlDatasource) {\r\n          system.msg('未获取到SQL结果集数据')\r\n          return\r\n        }\r\n        this.sqlDatasourceDialogOption.submit_btn_loading = true\r\n        this.doCreateOrUpdateTemplateParam(sqlDatasource).then((res) => {\r\n          if (!res.success) {\r\n            system.showErrorDialog(\"保存打印模板参数异常, 请稍等再试...\");\r\n            return;\r\n          }\r\n          system.msg(res.msg);\r\n          this.loadTemplateParam();\r\n        }).finally(() => {\r\n          this.closeSQLDatasourceDialog();\r\n          this.sqlDatasourceDialogOption.submit_btn_loading = false\r\n        })\r\n      })\r\n    },\r\n    doCreateOrUpdateTemplateParam(datasource) {\r\n      const params = {\r\n        print_template_param_id: datasource.ds_id,\r\n        print_template_id: this.printTemplate.print_template_id,\r\n        param_name: datasource.ds_title,\r\n        param_key: datasource.ds_name,\r\n        param_value: datasource.ds_type === 'SQL' ? datasource.ds_sql : datasource.ds_json,\r\n        result_type: datasource.is_collection ? 2 : 1,\r\n        param_type: datasource.ds_type,\r\n        paramDetail: JSON.stringify(datasource.children)\r\n      };\r\n      return system.invokeServer(\"/com/galaxis/wms/print/PrintTemplateParamManager@createOrUpdatePrintTemplateParam\", params)\r\n    },\r\n    showSQLDatasourceDialog() {\r\n      this.sqlDatasourceDialogOption.visible = true\r\n    },\r\n    closeSQLDatasourceDialog() {\r\n      _.extend(this.sqlDatasourceDialogOption, {visible: false, result: {}})\r\n    },\r\n    showJSONDatasourceDialog() {\r\n      this.jsonDatasourceDialogOption.visible = true\r\n    },\r\n    closeJSONDatasourceDialog() {\r\n      _.extend(this.jsonDatasourceDialogOption, {visible: false, result: {}})\r\n    },\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.datasource-plus {\r\n  position: relative;\r\n  top: 0;\r\n  left: 150px;\r\n}\r\n\r\n.tree-toolbar {\r\n  position: relative;\r\n  left: 140px;\r\n\r\n  .tree-toolbar-remove {\r\n    padding-left: 15px\r\n  }\r\n}\r\n</style>","<template>\r\n  <el-collapse v-model=\"activeNames\">\r\n    <el-collapse-item title=\"报表信息\" name=\"1\">\r\n      <div style=\"width: 90%;\">\r\n        <el-form-item label=\"打印模板ID\" label-width=\"100px\">\r\n          <el-input v-model=\"printTemplate.print_template_id\" readonly/>\r\n        </el-form-item>\r\n        <el-form-item label=\"打印模板编码\" label-width=\"100px\">\r\n          <el-input v-model=\"printTemplate.print_template_code\" readonly/>\r\n        </el-form-item>\r\n        <el-form-item label=\"打印模板名称\" label-width=\"100px\">\r\n          <el-input v-model=\"printTemplate.print_template_name\" readonly/>\r\n        </el-form-item>\r\n      </div>\r\n    </el-collapse-item>\r\n    <el-collapse-item name=\"2\">\r\n      <template #title>\r\n        <span>数据集管理</span>\r\n        <el-dropdown @command=\"createDatasource\" class=\"datasource-plus\">\r\n          <span class=\"el-dropdown-link\">\r\n            <el-button link class=\"toolbar-btn\" :icon=\"renderIcon('fa Plus')\"/>\r\n          </span>\r\n          <template #dropdown>\r\n            <el-dropdown-menu>\r\n              <el-dropdown-item command=\"SQL\">SQL数据集</el-dropdown-item>\r\n              <el-dropdown-item command=\"JSON\">JSON数据集</el-dropdown-item>\r\n              <!--<el-dropdown-item disabled>API数据集</el-dropdown-item>-->\r\n              <!--<el-dropdown-item disabled>JavaBean数据集</el-dropdown-item>-->\r\n            </el-dropdown-menu>\r\n          </template>\r\n        </el-dropdown>\r\n      </template>\r\n      <el-tree class=\"unselect\" :data=\"datasourceTreeOption.data\"\r\n               :props=\"datasourceTreeOption.defaultProps\"\r\n               :default-expand-all=\"true\"\r\n               :expand-on-click-node=\"false\"\r\n               :allow-drag=\"()=>true\"\r\n               :allow-drop=\"()=>false\"\r\n               :draggable=\"true\"\r\n               @node-drag-start=\"onTreeStartDrag\">\r\n        <template #default=\"{ node, data }\">\r\n          <div class=\"custom-tree-node\">\r\n            <div style=\"display: inline\">{{ data.field_label }}</div>\r\n            <div class=\"tree-toolbar\" style=\"display: inline\" v-if=\"node.level === 1\">\r\n              <el-button link class=\"toolbar-btn\" @click=\"updateDatasource(node, data)\"\r\n                         :icon=\"renderIcon('fa PencilAlt')\"/>\r\n              <el-button link class=\"toolbar-btn tree-toolbar-remove\" @click=\"removeDatasource(node, data)\"\r\n                         :icon=\"renderIcon('fa Times')\"/>\r\n            </div>\r\n          </div>\r\n        </template>\r\n      </el-tree>\r\n    </el-collapse-item>\r\n  </el-collapse>\r\n\r\n  <!-- SQL data result dialog start -->\r\n  <el-dialog\r\n      :title=\"sqlDatasourceDialogOption.title\"\r\n      v-model=\"sqlDatasourceDialogOption.visible\"\r\n      fullscreen\r\n      destroy-on-close\r\n      append-to-body>\r\n    <div class=\"sql-datasource-dialog-content\">\r\n      <YvStudioPrintTemplateDatasourceSql ref=\"sqlDatasourceRef\" :result=\"sqlDatasourceDialogOption.result\"/>\r\n    </div>\r\n    <template #footer>\r\n      <span class=\"dialog-footer\">\r\n          <el-button type=\"primary\"\r\n                     :loading=\"sqlDatasourceDialogOption.submit_btn_loading\"\r\n                     @click=\"submitSQLDatasource\"\r\n                     :icon=\"renderIcon('fa Check')\">\r\n            提交\r\n          </el-button>\r\n          <el-button @click=\"closeSQLDatasourceDialog\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n      </span>\r\n    </template>\r\n  </el-dialog>\r\n  <!-- SQL data result dialog end -->\r\n\r\n  <!-- json data result dialog start -->\r\n  <el-dialog\r\n      :title=\"jsonDatasourceDialogOption.title\"\r\n      v-model=\"jsonDatasourceDialogOption.visible\"\r\n      fullscreen\r\n      destroy-on-close\r\n      append-to-body>\r\n    <div class=\"json-datasource-dialog-content\">\r\n      <YvStudioPrintTemplateDatasourceJson ref=\"jsonDatasourceRef\" :result=\"this.jsonDatasourceDialogOption.result\"/>\r\n    </div>\r\n\r\n    <template #footer>\r\n          <span class=\"dialog-footer\">\r\n              <el-button type=\"primary\"\r\n                         :loading=\"jsonDatasourceDialogOption.submit_btn_loading\"\r\n                         @click=\"submitJsonDatasource\"\r\n                         :icon=\"renderIcon('fa Check')\">\r\n                提交\r\n              </el-button>\r\n              <el-button @click=\"closeJSONDatasourceDialog\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n          </span>\r\n    </template>\r\n  </el-dialog>\r\n  <!-- SQL data result dialog end -->\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport _ from \"lodash\";\r\nimport {toRaw} from \"vue\";\r\nimport {renderIcon} from '../../utils'\r\nimport YvStudioPrintTemplateDatasourceJson from \"./yv-studio-print-template-datasource-json.vue\";\r\nimport YvStudioPrintTemplateDatasourceSql from \"./yv-studio-print-template-datasource-sql.vue\";\r\n\r\nexport default {\r\n  components: {\r\n    YvStudioPrintTemplateDatasourceJson,\r\n    YvStudioPrintTemplateDatasourceSql\r\n  },\r\n  props: {\r\n    printTemplate: {\r\n      print_template_id: String,\r\n      print_template_code: String,\r\n      print_template_name: String,\r\n      template_content: String,\r\n      template_width: Number,\r\n      template_height: Number\r\n    }\r\n  },\r\n  data() {\r\n    return {\r\n      activeNames: [\"1\", \"2\"],\r\n      datasourceTreeOption: {\r\n        defaultProps: {\r\n          label: 'field_label'\r\n        },\r\n        data: []\r\n      },\r\n      sqlDatasourceDialogOption: {\r\n        visible: false,\r\n        title: \"SQL数据集\",\r\n        submit_btn_loading: false,\r\n        result: {}\r\n      },\r\n      jsonDatasourceDialogOption: {\r\n        visible: false,\r\n        title: \"JSON数据集\",\r\n        submit_btn_loading: false,\r\n        result: {}\r\n      },\r\n    }\r\n  },\r\n  mounted() {\r\n    this.loadTemplateParam()\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    onTreeStartDrag(node, evt) {\r\n      this.treeDragNode = node\r\n      this.treeDragEvt = evt\r\n    },\r\n    loadTemplateParam() {\r\n      if (!this.printTemplate) {\r\n        return;\r\n      }\r\n      const params = {print_template_id: this.printTemplate?.print_template_id}\r\n      system.showLoading()\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintTemplateParamManager@getPrintTemplateParam\", params).then((res) => {\r\n        if (!res.success) {\r\n          system.showErrorDialog(\"加载模板参数异常\");\r\n          return;\r\n        }\r\n        const templateParams = res.data;\r\n        if (!templateParams) {\r\n          return;\r\n        }\r\n        this.templateParams = templateParams;\r\n        const treeNodes = [];\r\n        for (let templateParam of templateParams) {\r\n          const treeNode = {\r\n            ds_id: templateParam.print_template_param_id,\r\n            field_label: templateParam.param_name,\r\n            ds_name: templateParam.param_key,\r\n            ds_title: templateParam.param_name,\r\n            ds_type: templateParam.param_type,\r\n            is_collection: templateParam.result_type === 2\r\n          }\r\n          if (templateParam.param_type === 'SQL') {\r\n            treeNode.ds_sql = templateParam.param_value;\r\n          } else if (templateParam.param_type === 'JSON') {\r\n            treeNode.ds_json = templateParam.param_value;\r\n          }\r\n          const paramDetail = templateParam.param_detail\r\n          treeNode.children = JSON.parse(!!paramDetail && paramDetail !== '' ? paramDetail : '[]')\r\n          treeNodes.push(treeNode);\r\n        }\r\n        this.datasourceTreeOption.data = treeNodes;\r\n      }).finally(() => {\r\n        system.clearLoading()\r\n      })\r\n    },\r\n    createDatasource(command) {\r\n      if (command === \"SQL\") {\r\n        this.showSQLDatasourceDialog()\r\n      } else if (command === \"JSON\") {\r\n        this.showJSONDatasourceDialog()\r\n      } else {\r\n        system.msg('暂不支持')\r\n      }\r\n    },\r\n    updateDatasource(node, data) {\r\n      if (data.ds_type === \"SQL\") {\r\n        this.sqlDatasourceDialogOption.result = _.cloneDeep(data)\r\n        this.showSQLDatasourceDialog()\r\n      } else if (data.ds_type === \"JSON\") {\r\n        this.jsonDatasourceDialogOption.result = _.cloneDeep(data)\r\n        this.showJSONDatasourceDialog()\r\n      } else {\r\n        system.msg('暂不支持')\r\n      }\r\n    },\r\n    removeDatasource(node, data) {\r\n      system.confirm(\"是否确认删除?\").then(() => {\r\n        const params = {template_param_id: data.ds_id}\r\n        system.invokeServer(\"/com/galaxis/wms/print/PrintTemplateParamManager@deleteTemplateParam\", params).then((res) => {\r\n          if (!res.success) {\r\n            system.showErrorDialog(\"删除模板参数异常\");\r\n            return;\r\n          }\r\n          system.msg(res.msg);\r\n          this.loadTemplateParam();\r\n        })\r\n      }).catch(() => {\r\n      })\r\n    },\r\n    submitJsonDatasource() {\r\n      this.$refs.jsonDatasourceRef.getResult(jsonDatasource => {\r\n        if (!jsonDatasource) {\r\n          system.msg('未获取到JSON结果集数据')\r\n          return\r\n        }\r\n        this.jsonDatasourceDialogOption.submit_btn_loading = true\r\n        this.doCreateOrUpdateTemplateParam(jsonDatasource).then((res) => {\r\n          if (!res.success) {\r\n            system.showErrorDialog(\"保存打印模板参数异常, 请稍等再试...\");\r\n            return;\r\n          }\r\n          system.msg(res.msg);\r\n          this.loadTemplateParam();\r\n        }).finally(() => {\r\n          this.closeJSONDatasourceDialog();\r\n          this.jsonDatasourceDialogOption.submit_btn_loading = false\r\n        })\r\n      })\r\n    },\r\n    submitSQLDatasource() {\r\n      this.$refs.sqlDatasourceRef.getResult((sqlDatasource) => {\r\n        if (!sqlDatasource) {\r\n          system.msg('未获取到SQL结果集数据')\r\n          return\r\n        }\r\n        this.sqlDatasourceDialogOption.submit_btn_loading = true\r\n        this.doCreateOrUpdateTemplateParam(sqlDatasource).then((res) => {\r\n          if (!res.success) {\r\n            system.showErrorDialog(\"保存打印模板参数异常, 请稍等再试...\");\r\n            return;\r\n          }\r\n          system.msg(res.msg);\r\n          this.loadTemplateParam();\r\n        }).finally(() => {\r\n          this.closeSQLDatasourceDialog();\r\n          this.sqlDatasourceDialogOption.submit_btn_loading = false\r\n        })\r\n      })\r\n    },\r\n    doCreateOrUpdateTemplateParam(datasource) {\r\n      const params = {\r\n        print_template_param_id: datasource.ds_id,\r\n        print_template_id: this.printTemplate.print_template_id,\r\n        param_name: datasource.ds_title,\r\n        param_key: datasource.ds_name,\r\n        param_value: datasource.ds_type === 'SQL' ? datasource.ds_sql : datasource.ds_json,\r\n        result_type: datasource.is_collection ? 2 : 1,\r\n        param_type: datasource.ds_type,\r\n        paramDetail: JSON.stringify(datasource.children)\r\n      };\r\n      return system.invokeServer(\"/com/galaxis/wms/print/PrintTemplateParamManager@createOrUpdatePrintTemplateParam\", params)\r\n    },\r\n    showSQLDatasourceDialog() {\r\n      this.sqlDatasourceDialogOption.visible = true\r\n    },\r\n    closeSQLDatasourceDialog() {\r\n      _.extend(this.sqlDatasourceDialogOption, {visible: false, result: {}})\r\n    },\r\n    showJSONDatasourceDialog() {\r\n      this.jsonDatasourceDialogOption.visible = true\r\n    },\r\n    closeJSONDatasourceDialog() {\r\n      _.extend(this.jsonDatasourceDialogOption, {visible: false, result: {}})\r\n    },\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.datasource-plus {\r\n  position: relative;\r\n  top: 0;\r\n  left: 150px;\r\n}\r\n\r\n.tree-toolbar {\r\n  position: relative;\r\n  left: 140px;\r\n\r\n  .tree-toolbar-remove {\r\n    padding-left: 15px\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"print-template-designer\">\r\n    <div>\r\n      <split class=\"default-theme split-wrap template-designer\">\r\n        <split-area :size=\"20\" class=\"left\">\r\n          <YvStudioPrintTemplateDatasource :print-template=\"printTemplate\"/>\r\n        </split-area>\r\n        <split-area :size=\"80\" class=\"center design\">\r\n          <div class=\"toolbar\">\r\n            <el-button link class=\"toolbar-btn\" @click=\"previewTemplate\" :icon=\"renderIcon('fa Eye')\">预览</el-button>\r\n          </div>\r\n          <div class=\"design-content\">\r\n            <el-upload\r\n                class=\"upload-demo\"\r\n                drag\r\n                action=\"/wms_api/print/com/galaxis/wms/print/CommonManager@uploadFile\"\r\n                accept=\".jrxml\"\r\n                :before-upload=\"handleBeforeFileUpload\"\r\n                :on-success=\"handleFileUploadSuccess\"\r\n                :show-file-list=\"false\"\r\n            >\r\n              <i class=\"fa fa-cloud-upload fa-6\" aria-hidden=\"true\"></i>\r\n              <div class=\"el-upload__text\">\r\n                请将jrxml文件拖动该区域或点击上传\r\n              </div>\r\n            </el-upload>\r\n          </div>\r\n          <div class=\"design-file\">\r\n            <el-link :href=\"uploadFile.url\">{{ uploadFile.originFileName }}</el-link>\r\n          </div>\r\n        </split-area>\r\n      </split>\r\n    </div>\r\n    <el-dialog title=\"打印模板预览\" v-model=\"previewTemplateDialogOption.visible\" width=\"70%\" height=\"70%\"\r\n               append-to-body center>\r\n      <iframe :src=\"previewTemplateDialogOption.url\" frameborder=\"0\" style=\"width: 100%; height: 800px\"/>\r\n    </el-dialog>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport _ from \"lodash\";\r\nimport {toRaw} from 'vue'\r\nimport {renderIcon} from '../../utils'\r\nimport {ElLoading} from 'element-plus'\r\nimport YvStudioPrintTemplateDatasource from './yv-studio-print-template-datasource.vue'\r\n\r\nexport default {\r\n  name: 'YvStudioPrintTemplateDesigner',\r\n  components: {\r\n    YvStudioPrintTemplateDatasource,\r\n  },\r\n  props: {\r\n    printTemplate: {\r\n      print_template_id: String,\r\n      print_template_code: String,\r\n      print_template_name: String,\r\n      template_content: String,\r\n      template_type: Number,\r\n      template_width: Number,\r\n      template_height: Number\r\n    }\r\n  },\r\n  data() {\r\n    return {\r\n      uploadFile: {\r\n        originFileName: \"\",\r\n        bucketName: \"\",\r\n        objectName: \"\",\r\n        url: \"\",\r\n        path: \"\",\r\n      },\r\n      previewTemplateDialogOption: {\r\n        visible: false,\r\n        url: ''\r\n      },\r\n    }\r\n  },\r\n  mounted() {\r\n    if (this.printTemplate.template_content && !_.startsWith(this.printTemplate.template_content, '<mxfile')) {\r\n      const templateContent = JSON.parse(this.printTemplate.template_content ?? {})\r\n      _.extend(this.uploadFile, templateContent)\r\n    }\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    previewTemplate() {\r\n      const params = {\r\n        template_id: this.printTemplate.print_template_id,\r\n        template_type: this.printTemplate.template_type,\r\n        template_content: this.printTemplate.template_content\r\n      }\r\n      const loadingInstance = ElLoading.service({fullscreen: true, lock: true, text: '正在加载中,请稍等...',})\r\n      system.invoke('/com/galaxis/wms/print/PrintPreviewManager@preview', params, {\r\n        headers: {\r\n          'Accept': 'application/json, */*',\r\n          'Content-Type': 'application/json',\r\n          'cache': 'default',\r\n          'x-ajax': 'true'\r\n        },\r\n        'responseType': 'blob',\r\n        afterResponse: (response) => {\r\n          if (response.status === 200) {\r\n            let URL = window.URL || window.webkitURL;\r\n            this.previewTemplateDialogOption.visible = true;\r\n            this.previewTemplateDialogOption.url = URL.createObjectURL(response.data);\r\n            return;\r\n          }\r\n          system.showErrorDialog(\"打印模板预览失败\")\r\n        }\r\n      }).finally(() => {\r\n        loadingInstance.close()\r\n      })\r\n    },\r\n    getTemplateContent() {\r\n      const uploadFile = toRaw(this.uploadFile);\r\n      return {\r\n        print_template_id: this.printTemplate.print_template_id,\r\n        template_content: {\r\n          originFileName: uploadFile.originFileName,\r\n          bucketName: uploadFile.bucketName,\r\n          objectName: uploadFile.objectName,\r\n          path: uploadFile.path,\r\n          url: uploadFile.url\r\n        }\r\n      }\r\n    },\r\n    handleBeforeFileUpload(rawFile) {\r\n      const fileName = rawFile.name\r\n      const fileSuffix = fileName.substring(fileName.lastIndexOf(\".\"))\r\n      if (\".jrxml\" !== fileSuffix) {\r\n        system.showErrorDialog(\"请上传.jrxml格式文件\")\r\n        return false\r\n      }\r\n    },\r\n    handleFileUploadSuccess(response, uploadFile) {\r\n      _.extend(this.uploadFile, response.data)\r\n      this.uploadFile.originFileName = uploadFile.name\r\n      system.showInfoDialog(\"文件上传成功!\")\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.print-template-designer {\r\n  width: 100%;\r\n  height: 100%;\r\n\r\n  .toolbar {\r\n    background: var(--sub-header-color);\r\n    height: 38px;\r\n    padding-left: 10px;\r\n\r\n    .el-button {\r\n      padding: 0 10px;\r\n      line-height: 38px;\r\n      cursor: pointer;\r\n      font-size: 14px;\r\n      font-weight: normal;\r\n      color: var(--el-button-text-color);\r\n\r\n      &:not(.is-disabled):focus, &:not(.is-disabled):hover {\r\n        background: #c5c5c5;\r\n        border-radius: 0;\r\n        color: #000;\r\n      }\r\n    }\r\n  }\r\n\r\n  .upload-demo {\r\n    margin: 20px;\r\n  }\r\n\r\n  .design-file {\r\n    margin: 20px\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"print-template design\">\r\n    <div class=\"toolbar\">\r\n      <el-button link class=\"toolbar-btn\" @click=\"searchPrintTemplate\" :icon=\"renderIcon('fa Search')\">\r\n        查询\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"createPrintTemplate\" :icon=\"renderIcon('fa PlusSquare')\">\r\n        新增\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"deletePrintTemplate\" :icon=\"renderIcon('fa Trash')\">\r\n        删除\r\n      </el-button>\r\n    </div>\r\n    <div class=\"print-template-content\">\r\n      <div class=\"print-template-content-search\">\r\n        <el-form :inline=\"true\" :model=\"query\" class=\"\">\r\n          <el-form-item label=\"场景编码\">\r\n            <el-input v-model=\"query.print_plan_code\" placeholder=\"请输入打印场景编码\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"场景名称\">\r\n            <el-input v-model=\"query.print_plan_name\" placeholder=\"请输入打印场景名称\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"所属仓库\">\r\n            <el-select v-model=\"query.wh_id\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"item in whList\"\r\n                  :key=\"item.wh_id\"\r\n                  :label=\"item.wh_name\"\r\n                  :value=\"item.wh_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"所属项目\">\r\n            <el-select v-model=\"query.project_id\" placeholder=\"请选择所属项目\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"project in projectList\"\r\n                  :key=\"project.project_id\"\r\n                  :label=\"project.project_name\"\r\n                  :value=\"project.project_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"模板状态\">\r\n            <el-select v-model=\"query.is_enable\" placeholder=\"请选择场景状态\" filterable clearable>\r\n              <el-option :key=\"1\" label=\"启用\" :value=\"1\"/>\r\n              <el-option :key=\"0\" label=\"禁用\" :value=\"0\"/>\r\n            </el-select>\r\n          </el-form-item>\r\n        </el-form>\r\n      </div>\r\n      <el-table\r\n          ref=\"printTemplateTable\"\r\n          border\r\n          highlight-current-row\r\n          v-loading=\"templateTableOption.loading\"\r\n          :data=\"templateTableOption.rowData\">\r\n        <el-table-column type=\"selection\" width=\"40\"/>\r\n        <el-table-column prop=\"print_template_id\" label=\"模板ID\"/>\r\n        <el-table-column prop=\"print_template_code\" label=\"模板编码\" show-overflow-tooltip/>\r\n        <el-table-column prop=\"print_template_name\" label=\"模板名称\" show-overflow-tooltip/>\r\n        <el-table-column prop=\"template_paper_name\" label=\"纸张名称\" :formatter=\"templatePaperNameFieldFormatter\"/>\r\n        <el-table-column prop=\"template_type\" label=\"模板类型\" :formatter=\"templateTypeFieldFormatter\"/>\r\n        <el-table-column prop=\"wh_id\" label=\"仓库ID\" show-overflow-tooltip/>\r\n        <el-table-column prop=\"wh_name\" label=\"仓库名称\" :formatter=\"whNameFieldFormatter\"/>\r\n        <el-table-column prop=\"project_name\" label=\"项目名称\" :formatter=\"projectNameFieldFormatter\"/>\r\n        <el-table-column prop=\"enable\" label=\"状态\" :formatter=\"enableFieldFormatter\"/>\r\n        <el-table-column fixed=\"right\" label=\"操作\" width=\"120\" header-align=\"center\">\r\n          <template #default=\"scope\">\r\n            <el-button link type=\"primary\" @click.prevent=\"updatePrintTemplate(scope.$index, scope.row)\">编辑</el-button>\r\n            <el-button link type=\"primary\" @click.prevent=\"designTemplate(scope.$index, scope.row)\">设计</el-button>\r\n          </template>\r\n        </el-table-column>\r\n      </el-table>\r\n    </div>\r\n\r\n    <!-- create or update print template drawer start -->\r\n    <el-drawer v-model=\"createOrUpdateDrawerOption.visible\"\r\n               direction=\"rtl\"\r\n               size=\"50%\">\r\n      <template #header>\r\n        <h4>{{ createOrUpdateDrawerOption.title }}</h4>\r\n      </template>\r\n      <template #default>\r\n        <div class=\"print-template-drawer-content\">\r\n          <el-form :model=\"createOrUpdateDrawerOption.form\" label-width=\"120px\">\r\n            <el-form-item label=\"模板编码\">\r\n              <el-input v-model=\"createOrUpdateDrawerOption.form.print_template_code\" placeholder=\"请输入打印模板编码\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"模板名称\">\r\n              <el-input v-model=\"createOrUpdateDrawerOption.form.print_template_name\" placeholder=\"请输入打印模板名称\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"模板类型\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.template_type\" placeholder=\"请选择模板状态\" filterable\r\n                         clearable>\r\n                <el-option v-for=\"templateType in templateTypeList\"\r\n                           :key=\"templateType.code\"\r\n                           :label=\"templateType.text\"\r\n                           :value=\"templateType.code\"/>\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"模板纸张\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.template_paper_id\" placeholder=\"请选择模板纸张\"\r\n                         filterable clearable>\r\n                <el-option v-for=\"templatePaper in templatePaperList\"\r\n                           :key=\"templatePaper.template_paper_id\"\r\n                           :label=\"processTemplatePaperName(templatePaper)\"\r\n                           :value=\"templatePaper.template_paper_id\"/>\r\n\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"所属仓库\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.wh_id\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n                <el-option\r\n                    v-for=\"item in whList\"\r\n                    :key=\"item.wh_id\"\r\n                    :label=\"item.wh_name\"\r\n                    :value=\"item.wh_id\"\r\n                />\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"所属项目\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.project_id\" placeholder=\"请选择所属项目\" filterable clearable>\r\n                <el-option\r\n                    v-for=\"project in projectList\"\r\n                    :key=\"project.project_id\"\r\n                    :label=\"project.project_name\"\r\n                    :value=\"project.project_id\"\r\n                />\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"模板状态\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.is_enable\" placeholder=\"请选择模板状态\" filterable clearable>\r\n                <el-option :key=\"1\" label=\"启用\" :value=\"1\"/>\r\n                <el-option :key=\"0\" label=\"禁用\" :value=\"0\"/>\r\n              </el-select>\r\n            </el-form-item>\r\n          </el-form>\r\n        </div>\r\n      </template>\r\n      <template #footer>\r\n        <div style=\"flex: auto\">\r\n          <el-button type=\"primary\"\r\n                     :loading=\"createOrUpdateDrawerOption.operation.loading\"\r\n                     @click=\"createOrUpdatePrintTemplate\"\r\n                     :icon=\"renderIcon('fa Check')\">\r\n            提交\r\n          </el-button>\r\n          <el-button @click=\"closeCreateOrUpdateDrawer\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n        </div>\r\n      </template>\r\n    </el-drawer>\r\n    <!-- create or update print template drawer end -->\r\n\r\n    <!-- template designer dialog start -->\r\n    <el-dialog\r\n        :title=\"templateDesignerDialogOption.title\"\r\n        v-model=\"templateDesignerDialogOption.visible\"\r\n        fullscreen\r\n        destroy-on-close\r\n        append-to-body\r\n        :close-on-press-escape=\"false\"\r\n        :close-on-click-modal=\"false\"\r\n        class=\"template-designer-dialog\">\r\n      <div class=\"template-designer-dialog-content\">\r\n        <YvDesignSpread ref=\"reportTemplateDesigner\" :printTemplate=\"printTemplate\" type=\"file\" v-if=\"printTemplate.template_type === 1\"/>\r\n        <yv-studio-print-template-designer ref=\"tagTemplateDesigner\" :print-template.sync=\"printTemplate\" v-else-if=\"printTemplate.template_type === 2\"/>\r\n        <div v-else>\r\n          <span>不支持的模板类型</span>\r\n        </div>\r\n      </div>\r\n      <template #footer>\r\n      <span class=\"dialog-footer\">\r\n          <el-button type=\"primary\"\r\n                     :loading=\"templateDesignerDialogOption.submit_btn_loading\"\r\n                     @click=\"savePrintTemplateContent\"\r\n                     :icon=\"renderIcon('fa Check')\">\r\n            提交\r\n          </el-button>\r\n          <el-button @click=\"closeTemplateDesignerDialog\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n      </span>\r\n      </template>\r\n    </el-dialog>\r\n    <!-- template designer dialog end -->\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport _ from \"lodash\";\r\nimport {markRaw} from \"vue\";\r\nimport {ElMessageBox} from \"element-plus\";\r\nimport {QuestionFilled} from '@element-plus/icons-vue'\r\nimport YvDesignSpread from \"../../components/design/designPrint/yv-designer-spread.vue\"\r\nimport YvStudioPrintTemplateDesigner from './yv-studio-print-template-designer.vue'\r\nimport {renderIcon} from '../../utils'\r\n\r\nexport default {\r\n  components: {\r\n    YvDesignSpread,\r\n    YvStudioPrintTemplateDesigner\r\n  },\r\n  data() {\r\n    const templateTypeList = [\r\n      {code: 1, text: \"报表模板\"},\r\n      {code: 2, text: \"标签模板\"},\r\n    ]\r\n    return {\r\n      activeNames: [\"1\", \"2\", \"3\"],\r\n      templateTypeList,\r\n      whList: [],\r\n      projectList: [],\r\n      templatePaperList: [],\r\n      query: {\r\n        print_template_code: '',\r\n        print_template_name: '',\r\n        project_id: null,\r\n        wh_id: null,\r\n        is_enable: null\r\n      },\r\n      templateTableOption: {\r\n        loading: false,\r\n        rowData: [],\r\n      },\r\n      createOrUpdateDrawerOption: {\r\n        visible: false,\r\n        title: '新增打印模板',\r\n        form: {\r\n          wh_id: null,\r\n          project_id: null,\r\n          print_template_id: null,\r\n          print_template_code: '',\r\n          print_terminal_name: '',\r\n          template_type: null,\r\n          is_enable: null,\r\n          template_paper_id: null,\r\n          template_width: null,\r\n          template_height: null\r\n        },\r\n        operation: {\r\n          loading: false\r\n        }\r\n      },\r\n      templateDesignerDialogOption: {\r\n        title: '模板设计器',\r\n        visible: false,\r\n        submit_btn_loading: false,\r\n        template_id: null,\r\n        template_type: null,\r\n      },\r\n      printTemplate: {\r\n        print_template_id: null,\r\n        print_template_code: '',\r\n        print_template_name: '',\r\n        template_content: '',\r\n        template_width: null,\r\n        template_height: null,\r\n      },\r\n    }\r\n  },\r\n  mounted() {\r\n    this.loadWhList();\r\n    this.loadProjectList();\r\n    this.searchPrintTemplate();\r\n    this.loadPrintTemplatePaperList();\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    loadWhList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@findWhList\", {}).then((res) => {\r\n        this.whList = res.data\r\n      })\r\n    },\r\n    loadProjectList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@findProjectList\", {}).then((res) => {\r\n        this.projectList = res.data\r\n      })\r\n    },\r\n    searchPrintTemplate() {\r\n      this.templateTableOption.loading = true;\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintTemplateList\", this.query).then((res) => {\r\n        this.templateTableOption.rowData = res.data\r\n      }).finally(() => {\r\n        this.templateTableOption.loading = false;\r\n      })\r\n    },\r\n    loadPrintTemplatePaperList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@queryPrintTemplatePaper\", {}).then((res) => {\r\n        this.templatePaperList = res.data\r\n      })\r\n    },\r\n    createPrintTemplate() {\r\n      this.createOrUpdateDrawerOption.form = {\r\n        print_template_id: null,\r\n        print_template_code: '',\r\n        print_terminal_name: '',\r\n        is_enable: 1,\r\n        template_width: null,\r\n        template_height: null\r\n      }\r\n      this.showCreateOrUpdateDrawer();\r\n    },\r\n    updatePrintTemplate(rowIdx, row) {\r\n      this.createOrUpdateDrawerOption.title = '编辑打印模板'\r\n      _.extend(this.createOrUpdateDrawerOption.form, row)\r\n      this.createOrUpdateDrawerOption.form.template_width = Number(row.template_width)\r\n      this.createOrUpdateDrawerOption.form.template_height = Number(row.template_height)\r\n      this.showCreateOrUpdateDrawer();\r\n    },\r\n    deletePrintTemplate() {\r\n      const printTemplateList = this.$refs.printTemplateTable.getSelectionRows();\r\n      if (printTemplateList.length <= 0) {\r\n        system.showErrorDialog('请选择要删除的打印模板')\r\n        return\r\n      }\r\n      const deletePrintTemplateNameList = printTemplateList.map(printTemplate => `<em>${printTemplate.print_template_name}</em>`).join(\",\")\r\n      const confirmMsg = `确定要删除打印模板名称为${deletePrintTemplateNameList}的打印模板吗?`\r\n      ElMessageBox.confirm(confirmMsg, '再次确认',\r\n          {\r\n            confirmButtonText: '确定',\r\n            cancelButtonText: '取消',\r\n            icon: markRaw(QuestionFilled),\r\n            dangerouslyUseHTMLString: true,\r\n          }\r\n      ).then(() => {\r\n        const params = {printTemplateIds: printTemplateList.map(printTemplate => printTemplate.print_template_id)}\r\n        system.invokeServer(\"/com/galaxis/wms/print/PrintManager@deletePrintTemplate\", params).then((res) => {\r\n          this.searchPrintTemplate()\r\n        })\r\n      })\r\n    },\r\n\r\n    templatePaperNameFieldFormatter(row, column, cellValue, index) {\r\n      const template_paper_name = row.template_paper_name;\r\n      if (template_paper_name) {\r\n        return template_paper_name + \": \" + row.template_width + \"mm * \" + row.template_height + \"mm\";\r\n      }\r\n      return row.template_width + \"mm * \" + row.template_height + \"mm\";\r\n    },\r\n    templateTypeFieldFormatter(row, column, cellValue, index) {\r\n      return this.templateTypeList.find(templateType => templateType.code === row.template_type)?.text\r\n    },\r\n    whNameFieldFormatter(row, column, cellValue, index) {\r\n      return this.whList.find(wh => wh.wh_id === row.wh_id)?.wh_name\r\n    },\r\n    projectNameFieldFormatter(row, column, cellValue, index) {\r\n      return this.projectList.find(project => project.project_id === row.project_id)?.project_name\r\n    },\r\n    enableFieldFormatter(row, column, cellValue, index) {\r\n      return row.is_enable == 1 ? '启用' : '禁用';\r\n    },\r\n    createOrUpdatePrintTemplate() {\r\n      const params = this.createOrUpdateDrawerOption.form\r\n      this.createOrUpdateDrawerOption.operation.loading = true\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@createOrUpdatePrintTemplate\", params).then((res) => {\r\n        this.searchPrintTemplate()\r\n      }).finally(() => {\r\n        this.createOrUpdateDrawerOption.operation.loading = false\r\n        this.closeCreateOrUpdateDrawer()\r\n      })\r\n    },\r\n    processTemplatePaperName(templatePaper) {\r\n      return templatePaper.template_paper_name + \": \" + templatePaper.paper_width + \"mm * \" + templatePaper.paper_height + \"mm\"\r\n    },\r\n    designTemplate(rowIdx, row) {\r\n      _.extend(this.templateDesignerDialogOption, {\r\n        template_id: row.print_template_id,\r\n        template_type: row.template_type\r\n      })\r\n      _.extend(this.printTemplate, _.cloneDeep(row))\r\n      if (row.template_type === 1) {\r\n        this.printTemplate.template_content = JSON.parse(row.template_content)\r\n      }\r\n      this.showTemplateDesignerDialog();\r\n    },\r\n    savePrintTemplateContent() {\r\n      const templateType = this.templateDesignerDialogOption.template_type;\r\n      if (templateType === 1) {\r\n        this.doSaveReportDesignerTemplateContent();\r\n        return;\r\n      }\r\n      if (templateType === 2) {\r\n        this.doSaveTagDesignerTemplateContent();\r\n        return;\r\n      }\r\n    },\r\n    doSaveReportDesignerTemplateContent() {\r\n      const printTemplate = this.$refs.reportTemplateDesigner.getTemplateContent();\r\n      const params = {\r\n        print_template_id: printTemplate.template_id,\r\n        template_content: JSON.stringify(printTemplate.template_content)\r\n      };\r\n      this.doSaveTemplateContent(params);\r\n    },\r\n    doSaveTagDesignerTemplateContent() {\r\n      const printTemplate = this.$refs.tagTemplateDesigner.getTemplateContent();\r\n      const params = {\r\n        print_template_id: printTemplate.print_template_id,\r\n        template_content: JSON.stringify(printTemplate.template_content)\r\n      }\r\n      this.doSaveTemplateContent(params)\r\n    },\r\n    doSaveTemplateContent(params) {\r\n      this.templateDesignerDialogOption.submit_btn_loading = true\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@updatePrintTemplateContent\", params).then((res) => {\r\n        if (!res.success) {\r\n          system.showErrorDialog(res.msg)\r\n          return\r\n        }\r\n        system.msg(res.msg)\r\n        this.searchPrintTemplate()\r\n      }).finally(() => {\r\n        this.templateDesignerDialogOption.submit_btn_loading = false\r\n        this.closeTemplateDesignerDialog()\r\n      })\r\n    },\r\n    showCreateOrUpdateDrawer() {\r\n      this.createOrUpdateDrawerOption.visible = true;\r\n    },\r\n    closeCreateOrUpdateDrawer() {\r\n      this.createOrUpdateDrawerOption.visible = false;\r\n    },\r\n    showTemplateDesignerDialog() {\r\n      this.templateDesignerDialogOption.visible = true;\r\n    },\r\n    closeTemplateDesignerDialog() {\r\n      this.templateDesignerDialogOption.visible = false;\r\n    },\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.print-template {\r\n  width: 100%;\r\n  height: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  .toolbar {\r\n    border-bottom: 1px solid #ccc\r\n  }\r\n\r\n  .print-template-content {\r\n    flex: 1;\r\n    background: #efefef;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n\r\n    .print-template-content-search {\r\n      padding-top: 10px;\r\n      background: #fff;\r\n      border-bottom: 1px solid #dbdada\r\n    }\r\n\r\n    & > .el-input {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n\r\n    .el-table {\r\n      border: 1px solid #e5e5e5;\r\n      flex: 1;\r\n      margin: 10px;\r\n\r\n      th.el-table__cell {\r\n        background: #f0f0f0;\r\n      }\r\n\r\n      .cell {\r\n        font-size: 14px;\r\n        color: #333\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n  .main {\r\n    display: flex;\r\n    flex-direction: column;\r\n    padding: 0;\r\n    overflow: hidden;\r\n\r\n    .el-tabs {\r\n      flex: 1;\r\n      display: flex;\r\n      flex-direction: column;\r\n      overflow: hidden;\r\n\r\n      & > .el-tabs__header {\r\n        border-color: #ccc;\r\n        margin: 0;\r\n\r\n        .el-tabs__active-bar {\r\n          background-color: var(--main-color);\r\n        }\r\n\r\n        .el-tabs__item.is-active {\r\n          color: #000\r\n        }\r\n\r\n        .el-tabs__nav-wrap::after {\r\n          height: 1px;\r\n          background-color: #ccc;\r\n        }\r\n      }\r\n\r\n      & > .el-tabs__content {\r\n        flex: 1;\r\n\r\n        & > .el-tab-pane {\r\n          height: 100%;\r\n\r\n          .yl-designer-tool {\r\n            border-left: 1px solid #e5e5e5;\r\n\r\n            .yl-designer-tool_bar {\r\n              padding: 5px 10px;\r\n              border-top: 1px solid #e5e5e5;\r\n            }\r\n          }\r\n\r\n          .print-template-design {\r\n            height: 100%;\r\n\r\n            .el-tabs {\r\n              height: 100%;\r\n\r\n              .el-collapse-item__header {\r\n                padding-left: 10px;\r\n                background: #efefef;\r\n                border-bottom: 1px solid #e5e5e5;\r\n                height: 38px;\r\n              }\r\n\r\n              .el-collapse-item__wrap {\r\n                .el-collapse-item__content {\r\n                  padding: 10px;\r\n\r\n                  .el-collapse {\r\n                    border: 1px solid #ededed\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      .el-tabs--border-card > .el-tabs__content {\r\n        padding: 0;\r\n\r\n        .el-tab-pane {\r\n          height: 100%;\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n.template-designer-dialog-content {\r\n  border-top: 1px solid #e8eaec;\r\n  border-bottom: 1px solid #e8eaec;\r\n}\r\n\r\n.print-template-drawer-content {\r\n  width: 95%;\r\n}\r\n\r\nem {\r\n  font-weight: bold;\r\n}\r\n\r\n.template-designer-dialog.el-dialog {\r\n  height: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  .el-dialog__headerbtn {\r\n    top: 0\r\n  }\r\n\r\n  & > .el-dialog__body {\r\n    flex: 1;\r\n    padding: 0;\r\n\r\n    .template-designer-dialog-content {\r\n      height: 100%;\r\n\r\n      .el-collapse-item__header {\r\n        padding-left: 5px;\r\n\r\n        .el-dropdown {\r\n          margin-left: 8px;\r\n        }\r\n      }\r\n\r\n      .el-collapse-item__content {\r\n        padding: 0 5px;\r\n\r\n        .tree-toolbar {\r\n          margin-left: 6px;\r\n\r\n          .el-button + .el-button {\r\n            margin-left: 2px;\r\n          }\r\n        }\r\n      }\r\n\r\n      .right {\r\n        & > div {\r\n          height: 100%;\r\n\r\n          .el-tabs {\r\n            height: 100%;\r\n            display: flex;\r\n            flex-direction: column;\r\n\r\n            .el-tabs__content {\r\n              flex: 1;\r\n              overflow: auto;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  & > .el-dialog__footer {\r\n    padding-top: 5px\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"print-template design\">\r\n    <div class=\"toolbar\">\r\n      <el-button link class=\"toolbar-btn\" @click=\"searchPrintTemplate\" :icon=\"renderIcon('fa Search')\">\r\n        查询\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"createPrintTemplate\" :icon=\"renderIcon('fa PlusSquare')\">\r\n        新增\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"deletePrintTemplate\" :icon=\"renderIcon('fa Trash')\">\r\n        删除\r\n      </el-button>\r\n    </div>\r\n    <div class=\"print-template-content\">\r\n      <div class=\"print-template-content-search\">\r\n        <el-form :inline=\"true\" :model=\"query\" class=\"\">\r\n          <el-form-item label=\"场景编码\">\r\n            <el-input v-model=\"query.print_plan_code\" placeholder=\"请输入打印场景编码\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"场景名称\">\r\n            <el-input v-model=\"query.print_plan_name\" placeholder=\"请输入打印场景名称\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"所属仓库\">\r\n            <el-select v-model=\"query.wh_id\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"item in whList\"\r\n                  :key=\"item.wh_id\"\r\n                  :label=\"item.wh_name\"\r\n                  :value=\"item.wh_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"所属项目\">\r\n            <el-select v-model=\"query.project_id\" placeholder=\"请选择所属项目\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"project in projectList\"\r\n                  :key=\"project.project_id\"\r\n                  :label=\"project.project_name\"\r\n                  :value=\"project.project_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"模板状态\">\r\n            <el-select v-model=\"query.is_enable\" placeholder=\"请选择场景状态\" filterable clearable>\r\n              <el-option :key=\"1\" label=\"启用\" :value=\"1\"/>\r\n              <el-option :key=\"0\" label=\"禁用\" :value=\"0\"/>\r\n            </el-select>\r\n          </el-form-item>\r\n        </el-form>\r\n      </div>\r\n      <el-table\r\n          ref=\"printTemplateTable\"\r\n          border\r\n          highlight-current-row\r\n          v-loading=\"templateTableOption.loading\"\r\n          :data=\"templateTableOption.rowData\">\r\n        <el-table-column type=\"selection\" width=\"40\"/>\r\n        <el-table-column prop=\"print_template_id\" label=\"模板ID\"/>\r\n        <el-table-column prop=\"print_template_code\" label=\"模板编码\" show-overflow-tooltip/>\r\n        <el-table-column prop=\"print_template_name\" label=\"模板名称\" show-overflow-tooltip/>\r\n        <el-table-column prop=\"template_paper_name\" label=\"纸张名称\" :formatter=\"templatePaperNameFieldFormatter\"/>\r\n        <el-table-column prop=\"template_type\" label=\"模板类型\" :formatter=\"templateTypeFieldFormatter\"/>\r\n        <el-table-column prop=\"wh_id\" label=\"仓库ID\" show-overflow-tooltip/>\r\n        <el-table-column prop=\"wh_name\" label=\"仓库名称\" :formatter=\"whNameFieldFormatter\"/>\r\n        <el-table-column prop=\"project_name\" label=\"项目名称\" :formatter=\"projectNameFieldFormatter\"/>\r\n        <el-table-column prop=\"enable\" label=\"状态\" :formatter=\"enableFieldFormatter\"/>\r\n        <el-table-column fixed=\"right\" label=\"操作\" width=\"120\" header-align=\"center\">\r\n          <template #default=\"scope\">\r\n            <el-button link type=\"primary\" @click.prevent=\"updatePrintTemplate(scope.$index, scope.row)\">编辑</el-button>\r\n            <el-button link type=\"primary\" @click.prevent=\"designTemplate(scope.$index, scope.row)\">设计</el-button>\r\n          </template>\r\n        </el-table-column>\r\n      </el-table>\r\n    </div>\r\n\r\n    <!-- create or update print template drawer start -->\r\n    <el-drawer v-model=\"createOrUpdateDrawerOption.visible\"\r\n               direction=\"rtl\"\r\n               size=\"50%\">\r\n      <template #header>\r\n        <h4>{{ createOrUpdateDrawerOption.title }}</h4>\r\n      </template>\r\n      <template #default>\r\n        <div class=\"print-template-drawer-content\">\r\n          <el-form :model=\"createOrUpdateDrawerOption.form\" label-width=\"120px\">\r\n            <el-form-item label=\"模板编码\">\r\n              <el-input v-model=\"createOrUpdateDrawerOption.form.print_template_code\" placeholder=\"请输入打印模板编码\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"模板名称\">\r\n              <el-input v-model=\"createOrUpdateDrawerOption.form.print_template_name\" placeholder=\"请输入打印模板名称\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"模板类型\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.template_type\" placeholder=\"请选择模板状态\" filterable\r\n                         clearable>\r\n                <el-option v-for=\"templateType in templateTypeList\"\r\n                           :key=\"templateType.code\"\r\n                           :label=\"templateType.text\"\r\n                           :value=\"templateType.code\"/>\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"模板纸张\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.template_paper_id\" placeholder=\"请选择模板纸张\"\r\n                         filterable clearable>\r\n                <el-option v-for=\"templatePaper in templatePaperList\"\r\n                           :key=\"templatePaper.template_paper_id\"\r\n                           :label=\"processTemplatePaperName(templatePaper)\"\r\n                           :value=\"templatePaper.template_paper_id\"/>\r\n\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"所属仓库\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.wh_id\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n                <el-option\r\n                    v-for=\"item in whList\"\r\n                    :key=\"item.wh_id\"\r\n                    :label=\"item.wh_name\"\r\n                    :value=\"item.wh_id\"\r\n                />\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"所属项目\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.project_id\" placeholder=\"请选择所属项目\" filterable clearable>\r\n                <el-option\r\n                    v-for=\"project in projectList\"\r\n                    :key=\"project.project_id\"\r\n                    :label=\"project.project_name\"\r\n                    :value=\"project.project_id\"\r\n                />\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"模板状态\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.is_enable\" placeholder=\"请选择模板状态\" filterable clearable>\r\n                <el-option :key=\"1\" label=\"启用\" :value=\"1\"/>\r\n                <el-option :key=\"0\" label=\"禁用\" :value=\"0\"/>\r\n              </el-select>\r\n            </el-form-item>\r\n          </el-form>\r\n        </div>\r\n      </template>\r\n      <template #footer>\r\n        <div style=\"flex: auto\">\r\n          <el-button type=\"primary\"\r\n                     :loading=\"createOrUpdateDrawerOption.operation.loading\"\r\n                     @click=\"createOrUpdatePrintTemplate\"\r\n                     :icon=\"renderIcon('fa Check')\">\r\n            提交\r\n          </el-button>\r\n          <el-button @click=\"closeCreateOrUpdateDrawer\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n        </div>\r\n      </template>\r\n    </el-drawer>\r\n    <!-- create or update print template drawer end -->\r\n\r\n    <!-- template designer dialog start -->\r\n    <el-dialog\r\n        :title=\"templateDesignerDialogOption.title\"\r\n        v-model=\"templateDesignerDialogOption.visible\"\r\n        fullscreen\r\n        destroy-on-close\r\n        append-to-body\r\n        :close-on-press-escape=\"false\"\r\n        :close-on-click-modal=\"false\"\r\n        class=\"template-designer-dialog\">\r\n      <div class=\"template-designer-dialog-content\">\r\n        <YvDesignSpread ref=\"reportTemplateDesigner\" :printTemplate=\"printTemplate\" type=\"file\" v-if=\"printTemplate.template_type === 1\"/>\r\n        <yv-studio-print-template-designer ref=\"tagTemplateDesigner\" :print-template.sync=\"printTemplate\" v-else-if=\"printTemplate.template_type === 2\"/>\r\n        <div v-else>\r\n          <span>不支持的模板类型</span>\r\n        </div>\r\n      </div>\r\n      <template #footer>\r\n      <span class=\"dialog-footer\">\r\n          <el-button type=\"primary\"\r\n                     :loading=\"templateDesignerDialogOption.submit_btn_loading\"\r\n                     @click=\"savePrintTemplateContent\"\r\n                     :icon=\"renderIcon('fa Check')\">\r\n            提交\r\n          </el-button>\r\n          <el-button @click=\"closeTemplateDesignerDialog\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n      </span>\r\n      </template>\r\n    </el-dialog>\r\n    <!-- template designer dialog end -->\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport _ from \"lodash\";\r\nimport {markRaw} from \"vue\";\r\nimport {ElMessageBox} from \"element-plus\";\r\nimport {QuestionFilled} from '@element-plus/icons-vue'\r\nimport YvDesignSpread from \"../../components/design/designPrint/yv-designer-spread.vue\"\r\nimport YvStudioPrintTemplateDesigner from './yv-studio-print-template-designer.vue'\r\nimport {renderIcon} from '../../utils'\r\n\r\nexport default {\r\n  components: {\r\n    YvDesignSpread,\r\n    YvStudioPrintTemplateDesigner\r\n  },\r\n  data() {\r\n    const templateTypeList = [\r\n      {code: 1, text: \"报表模板\"},\r\n      {code: 2, text: \"标签模板\"},\r\n    ]\r\n    return {\r\n      activeNames: [\"1\", \"2\", \"3\"],\r\n      templateTypeList,\r\n      whList: [],\r\n      projectList: [],\r\n      templatePaperList: [],\r\n      query: {\r\n        print_template_code: '',\r\n        print_template_name: '',\r\n        project_id: null,\r\n        wh_id: null,\r\n        is_enable: null\r\n      },\r\n      templateTableOption: {\r\n        loading: false,\r\n        rowData: [],\r\n      },\r\n      createOrUpdateDrawerOption: {\r\n        visible: false,\r\n        title: '新增打印模板',\r\n        form: {\r\n          wh_id: null,\r\n          project_id: null,\r\n          print_template_id: null,\r\n          print_template_code: '',\r\n          print_terminal_name: '',\r\n          template_type: null,\r\n          is_enable: null,\r\n          template_paper_id: null,\r\n          template_width: null,\r\n          template_height: null\r\n        },\r\n        operation: {\r\n          loading: false\r\n        }\r\n      },\r\n      templateDesignerDialogOption: {\r\n        title: '模板设计器',\r\n        visible: false,\r\n        submit_btn_loading: false,\r\n        template_id: null,\r\n        template_type: null,\r\n      },\r\n      printTemplate: {\r\n        print_template_id: null,\r\n        print_template_code: '',\r\n        print_template_name: '',\r\n        template_content: '',\r\n        template_width: null,\r\n        template_height: null,\r\n      },\r\n    }\r\n  },\r\n  mounted() {\r\n    this.loadWhList();\r\n    this.loadProjectList();\r\n    this.searchPrintTemplate();\r\n    this.loadPrintTemplatePaperList();\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    loadWhList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@findWhList\", {}).then((res) => {\r\n        this.whList = res.data\r\n      })\r\n    },\r\n    loadProjectList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@findProjectList\", {}).then((res) => {\r\n        this.projectList = res.data\r\n      })\r\n    },\r\n    searchPrintTemplate() {\r\n      this.templateTableOption.loading = true;\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintTemplateList\", this.query).then((res) => {\r\n        this.templateTableOption.rowData = res.data\r\n      }).finally(() => {\r\n        this.templateTableOption.loading = false;\r\n      })\r\n    },\r\n    loadPrintTemplatePaperList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@queryPrintTemplatePaper\", {}).then((res) => {\r\n        this.templatePaperList = res.data\r\n      })\r\n    },\r\n    createPrintTemplate() {\r\n      this.createOrUpdateDrawerOption.form = {\r\n        print_template_id: null,\r\n        print_template_code: '',\r\n        print_terminal_name: '',\r\n        is_enable: 1,\r\n        template_width: null,\r\n        template_height: null\r\n      }\r\n      this.showCreateOrUpdateDrawer();\r\n    },\r\n    updatePrintTemplate(rowIdx, row) {\r\n      this.createOrUpdateDrawerOption.title = '编辑打印模板'\r\n      _.extend(this.createOrUpdateDrawerOption.form, row)\r\n      this.createOrUpdateDrawerOption.form.template_width = Number(row.template_width)\r\n      this.createOrUpdateDrawerOption.form.template_height = Number(row.template_height)\r\n      this.showCreateOrUpdateDrawer();\r\n    },\r\n    deletePrintTemplate() {\r\n      const printTemplateList = this.$refs.printTemplateTable.getSelectionRows();\r\n      if (printTemplateList.length <= 0) {\r\n        system.showErrorDialog('请选择要删除的打印模板')\r\n        return\r\n      }\r\n      const deletePrintTemplateNameList = printTemplateList.map(printTemplate => `<em>${printTemplate.print_template_name}</em>`).join(\",\")\r\n      const confirmMsg = `确定要删除打印模板名称为${deletePrintTemplateNameList}的打印模板吗?`\r\n      ElMessageBox.confirm(confirmMsg, '再次确认',\r\n          {\r\n            confirmButtonText: '确定',\r\n            cancelButtonText: '取消',\r\n            icon: markRaw(QuestionFilled),\r\n            dangerouslyUseHTMLString: true,\r\n          }\r\n      ).then(() => {\r\n        const params = {printTemplateIds: printTemplateList.map(printTemplate => printTemplate.print_template_id)}\r\n        system.invokeServer(\"/com/galaxis/wms/print/PrintManager@deletePrintTemplate\", params).then((res) => {\r\n          this.searchPrintTemplate()\r\n        })\r\n      })\r\n    },\r\n\r\n    templatePaperNameFieldFormatter(row, column, cellValue, index) {\r\n      const template_paper_name = row.template_paper_name;\r\n      if (template_paper_name) {\r\n        return template_paper_name + \": \" + row.template_width + \"mm * \" + row.template_height + \"mm\";\r\n      }\r\n      return row.template_width + \"mm * \" + row.template_height + \"mm\";\r\n    },\r\n    templateTypeFieldFormatter(row, column, cellValue, index) {\r\n      return this.templateTypeList.find(templateType => templateType.code === row.template_type)?.text\r\n    },\r\n    whNameFieldFormatter(row, column, cellValue, index) {\r\n      return this.whList.find(wh => wh.wh_id === row.wh_id)?.wh_name\r\n    },\r\n    projectNameFieldFormatter(row, column, cellValue, index) {\r\n      return this.projectList.find(project => project.project_id === row.project_id)?.project_name\r\n    },\r\n    enableFieldFormatter(row, column, cellValue, index) {\r\n      return row.is_enable == 1 ? '启用' : '禁用';\r\n    },\r\n    createOrUpdatePrintTemplate() {\r\n      const params = this.createOrUpdateDrawerOption.form\r\n      this.createOrUpdateDrawerOption.operation.loading = true\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@createOrUpdatePrintTemplate\", params).then((res) => {\r\n        this.searchPrintTemplate()\r\n      }).finally(() => {\r\n        this.createOrUpdateDrawerOption.operation.loading = false\r\n        this.closeCreateOrUpdateDrawer()\r\n      })\r\n    },\r\n    processTemplatePaperName(templatePaper) {\r\n      return templatePaper.template_paper_name + \": \" + templatePaper.paper_width + \"mm * \" + templatePaper.paper_height + \"mm\"\r\n    },\r\n    designTemplate(rowIdx, row) {\r\n      _.extend(this.templateDesignerDialogOption, {\r\n        template_id: row.print_template_id,\r\n        template_type: row.template_type\r\n      })\r\n      _.extend(this.printTemplate, _.cloneDeep(row))\r\n      if (row.template_type === 1) {\r\n        this.printTemplate.template_content = JSON.parse(row.template_content)\r\n      }\r\n      this.showTemplateDesignerDialog();\r\n    },\r\n    savePrintTemplateContent() {\r\n      const templateType = this.templateDesignerDialogOption.template_type;\r\n      if (templateType === 1) {\r\n        this.doSaveReportDesignerTemplateContent();\r\n        return;\r\n      }\r\n      if (templateType === 2) {\r\n        this.doSaveTagDesignerTemplateContent();\r\n        return;\r\n      }\r\n    },\r\n    doSaveReportDesignerTemplateContent() {\r\n      const printTemplate = this.$refs.reportTemplateDesigner.getTemplateContent();\r\n      const params = {\r\n        print_template_id: printTemplate.template_id,\r\n        template_content: JSON.stringify(printTemplate.template_content)\r\n      };\r\n      this.doSaveTemplateContent(params);\r\n    },\r\n    doSaveTagDesignerTemplateContent() {\r\n      const printTemplate = this.$refs.tagTemplateDesigner.getTemplateContent();\r\n      const params = {\r\n        print_template_id: printTemplate.print_template_id,\r\n        template_content: JSON.stringify(printTemplate.template_content)\r\n      }\r\n      this.doSaveTemplateContent(params)\r\n    },\r\n    doSaveTemplateContent(params) {\r\n      this.templateDesignerDialogOption.submit_btn_loading = true\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@updatePrintTemplateContent\", params).then((res) => {\r\n        if (!res.success) {\r\n          system.showErrorDialog(res.msg)\r\n          return\r\n        }\r\n        system.msg(res.msg)\r\n        this.searchPrintTemplate()\r\n      }).finally(() => {\r\n        this.templateDesignerDialogOption.submit_btn_loading = false\r\n        this.closeTemplateDesignerDialog()\r\n      })\r\n    },\r\n    showCreateOrUpdateDrawer() {\r\n      this.createOrUpdateDrawerOption.visible = true;\r\n    },\r\n    closeCreateOrUpdateDrawer() {\r\n      this.createOrUpdateDrawerOption.visible = false;\r\n    },\r\n    showTemplateDesignerDialog() {\r\n      this.templateDesignerDialogOption.visible = true;\r\n    },\r\n    closeTemplateDesignerDialog() {\r\n      this.templateDesignerDialogOption.visible = false;\r\n    },\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.print-template {\r\n  width: 100%;\r\n  height: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  .toolbar {\r\n    border-bottom: 1px solid #ccc\r\n  }\r\n\r\n  .print-template-content {\r\n    flex: 1;\r\n    background: #efefef;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n\r\n    .print-template-content-search {\r\n      padding-top: 10px;\r\n      background: #fff;\r\n      border-bottom: 1px solid #dbdada\r\n    }\r\n\r\n    & > .el-input {\r\n      margin-bottom: 5px;\r\n\r\n      .el-input__wrapper {\r\n        border-radius: 0;\r\n      }\r\n    }\r\n\r\n    .el-table {\r\n      border: 1px solid #e5e5e5;\r\n      flex: 1;\r\n      margin: 10px;\r\n\r\n      th.el-table__cell {\r\n        background: #f0f0f0;\r\n      }\r\n\r\n      .cell {\r\n        font-size: 14px;\r\n        color: #333\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n  .main {\r\n    display: flex;\r\n    flex-direction: column;\r\n    padding: 0;\r\n    overflow: hidden;\r\n\r\n    .el-tabs {\r\n      flex: 1;\r\n      display: flex;\r\n      flex-direction: column;\r\n      overflow: hidden;\r\n\r\n      & > .el-tabs__header {\r\n        border-color: #ccc;\r\n        margin: 0;\r\n\r\n        .el-tabs__active-bar {\r\n          background-color: var(--main-color);\r\n        }\r\n\r\n        .el-tabs__item.is-active {\r\n          color: #000\r\n        }\r\n\r\n        .el-tabs__nav-wrap::after {\r\n          height: 1px;\r\n          background-color: #ccc;\r\n        }\r\n      }\r\n\r\n      & > .el-tabs__content {\r\n        flex: 1;\r\n\r\n        & > .el-tab-pane {\r\n          height: 100%;\r\n\r\n          .yl-designer-tool {\r\n            border-left: 1px solid #e5e5e5;\r\n\r\n            .yl-designer-tool_bar {\r\n              padding: 5px 10px;\r\n              border-top: 1px solid #e5e5e5;\r\n            }\r\n          }\r\n\r\n          .print-template-design {\r\n            height: 100%;\r\n\r\n            .el-tabs {\r\n              height: 100%;\r\n\r\n              .el-collapse-item__header {\r\n                padding-left: 10px;\r\n                background: #efefef;\r\n                border-bottom: 1px solid #e5e5e5;\r\n                height: 38px;\r\n              }\r\n\r\n              .el-collapse-item__wrap {\r\n                .el-collapse-item__content {\r\n                  padding: 10px;\r\n\r\n                  .el-collapse {\r\n                    border: 1px solid #ededed\r\n                  }\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      .el-tabs--border-card > .el-tabs__content {\r\n        padding: 0;\r\n\r\n        .el-tab-pane {\r\n          height: 100%;\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n.template-designer-dialog-content {\r\n  border-top: 1px solid #e8eaec;\r\n  border-bottom: 1px solid #e8eaec;\r\n}\r\n\r\n.print-template-drawer-content {\r\n  width: 95%;\r\n}\r\n\r\nem {\r\n  font-weight: bold;\r\n}\r\n\r\n.template-designer-dialog.el-dialog {\r\n  height: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  .el-dialog__headerbtn {\r\n    top: 0\r\n  }\r\n\r\n  & > .el-dialog__body {\r\n    flex: 1;\r\n    padding: 0;\r\n\r\n    .template-designer-dialog-content {\r\n      height: 100%;\r\n\r\n      .el-collapse-item__header {\r\n        padding-left: 5px;\r\n\r\n        .el-dropdown {\r\n          margin-left: 8px;\r\n        }\r\n      }\r\n\r\n      .el-collapse-item__content {\r\n        padding: 0 5px;\r\n\r\n        .tree-toolbar {\r\n          margin-left: 6px;\r\n\r\n          .el-button + .el-button {\r\n            margin-left: 2px;\r\n          }\r\n        }\r\n      }\r\n\r\n      .right {\r\n        & > div {\r\n          height: 100%;\r\n\r\n          .el-tabs {\r\n            height: 100%;\r\n            display: flex;\r\n            flex-direction: column;\r\n\r\n            .el-tabs__content {\r\n              flex: 1;\r\n              overflow: auto;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  & > .el-dialog__footer {\r\n    padding-top: 5px\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"print-terminal design\">\r\n    <div class=\"toolbar\">\r\n      <el-button link class=\"toolbar-btn\" @click=\"searchPrintTerminal\" :icon=\"renderIcon('fa Search')\">\r\n        查询\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"createPrintTerminal\" :icon=\"renderIcon('fa PlusSquare')\">\r\n        新建\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"batchDeletePrintTerminal\" :icon=\"renderIcon('fa Trash')\">\r\n        批量删除\r\n      </el-button>\r\n    </div>\r\n    <div class=\"print-terminal-content\">\r\n      <div class=\"print-terminal-content-search\">\r\n        <el-form :inline=\"true\" :model=\"query\" class=\"\">\r\n          <el-form-item label=\"打印终端名称\">\r\n            <el-input v-model=\"query.print_terminal_name\" placeholder=\"请输入打印终端名称\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"所属仓库\">\r\n            <el-select v-model=\"query.wh_id\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"item in whList\"\r\n                  :key=\"item.wh_id\"\r\n                  :label=\"item.wh_name\"\r\n                  :value=\"item.wh_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n        </el-form>\r\n      </div>\r\n      <div class=\"print-terminal-content-table\">\r\n        <el-table\r\n            ref=\"PrintTerminalTable\"\r\n            border\r\n            highlight-current-row\r\n            v-loading=\"printTerminalTableOption.loading\"\r\n            :data=\"printTerminalTableOption.rowData\"\r\n            @row-click=\"printTerminalTableOnRowClick\">\r\n          <el-table-column type=\"selection\" width=\"40\"/>\r\n          <el-table-column prop=\"print_terminal_id\" label=\"ID\" width=\"60\"/>\r\n          <el-table-column prop=\"print_terminal_name\" label=\"终端名称\" show-overflow-tooltip/>\r\n          <el-table-column label=\"终端地址\" :formatter=\"serverAddrFieldFormatter\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"wh_id\" label=\"所属仓库ID\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"wh_name\" label=\"所属仓库名称\" :formatter=\"whNameFieldFormatter\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"create_at\" label=\"创建时间\"/>\r\n          <el-table-column prop=\"create_by\" label=\"创建者\"/>\r\n          <el-table-column prop=\"update_at\" label=\"最后修改时间\"/>\r\n          <el-table-column prop=\"update_by\" label=\"最后修改者\"/>\r\n          <el-table-column fixed=\"right\" label=\"操作\" width=\"120\" header-align=\"center\">\r\n            <template #default=\"scope\">\r\n              <el-button link type=\"primary\" @click.prevent=\"updatePrintTerminal(scope.row)\">编辑</el-button>\r\n              <el-button link type=\"primary\" @click.prevent=\"deletePrintTerminal(scope.row)\">删除</el-button>\r\n            </template>\r\n          </el-table-column>\r\n        </el-table>\r\n        <!--        <el-pagination-->\r\n        <!--            class=\"print-terminal-content-table-page\"-->\r\n        <!--            v-model:current-page=\"printTerminalTableOption.pageNo\"-->\r\n        <!--            v-model:page-size=\"printTerminalTableOption.pageSize\"-->\r\n        <!--            :page-sizes=\"[50, 100, 200, 400, 500]\"-->\r\n        <!--            :background=\"true\"-->\r\n        <!--            layout=\"total, sizes, prev, pager, next\"-->\r\n        <!--            :total=\"printTerminalTableOption.total\"-->\r\n        <!--            @size-change=\"handlePageSizeChange\"-->\r\n        <!--            @current-change=\"handlePageNoChange\"-->\r\n        <!--        />-->\r\n      </div>\r\n    </div>\r\n\r\n    <!-- create or update print plan drawer start -->\r\n    <el-drawer v-model=\"createOrUpdateDrawerOption.visible\"\r\n               direction=\"rtl\"\r\n               size=\"50%\">\r\n      <template #header>\r\n        <h4>{{ createOrUpdateDrawerOption.title }}</h4>\r\n      </template>\r\n      <template #default>\r\n        <div class=\"print-terminal-drawer-content\">\r\n          <el-form :model=\"createOrUpdateDrawerOption.form\" label-width=\"120px\">\r\n            <el-form-item label=\"终端名称\">\r\n              <el-input v-model=\"createOrUpdateDrawerOption.form.print_terminal_name\" placeholder=\"请输入打印终端名称\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"所属仓库\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.wh_id\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n                <el-option\r\n                    v-for=\"item in whList\"\r\n                    :key=\"item.wh_id\"\r\n                    :label=\"item.wh_name\"\r\n                    :value=\"item.wh_id\"\r\n                />\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"终端服务地址\">\r\n              <el-input v-model=\"createOrUpdateDrawerOption.form.server_addr\" placeholder=\"请输入打印终端服务地址\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"终端服务端口\">\r\n              <el-input v-model=\"createOrUpdateDrawerOption.form.server_port\" placeholder=\"请输入打印服务端口\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"默认打印机\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.default_printer_name\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n                <el-option label=\"打印机_001\" value=\"shanghai\"/>\r\n              </el-select>\r\n            </el-form-item>\r\n\r\n            <div class=\"print-terminal-drawer-content-printer\"\r\n                 v-for=\"(printCondition, conditionIdx) in createOrUpdateDrawerOption.form.print_condition_list\">\r\n              <div class=\"remove-print-condition-btn\">\r\n                <el-button link type=\"danger\" @click=\"removePrintCondition(conditionIdx)\" :icon=\"renderIcon('fa Trash')\">删除</el-button>\r\n              </div>\r\n              <el-row :gutter=\"25\">\r\n                <el-col :span=\"12\">\r\n                  <el-form-item label=\"场景\" label-width=\"60px\">\r\n                    <el-select v-model=\"printCondition.print_plan_id\" placeholder=\"请选择打印场景\" filterable clearable @change=\"printPlanOnChange\">\r\n                      <el-option v-for=\"printPlan in printPlanList\" :label=\"printPlan.print_plan_name\" :key=\"printPlan.print_plan_id\" :value=\"printPlan.print_plan_id\"/>\r\n                    </el-select>\r\n                  </el-form-item>\r\n                </el-col>\r\n                <el-col :span=\"12\">\r\n                  <el-form-item label=\"模板\" label-width=\"60px\">\r\n                    <el-select v-model=\"printCondition.print_template_id\" placeholder=\"请选择打印模板\" filterable clearable>\r\n                      <el-option v-for=\"printTemplate in printTemplateList\"\r\n                                 :label=\"printTemplate.print_template_name\"\r\n                                 :key=\"printTemplate.print_template_id\"\r\n                                 :value=\"printTemplate.print_template_id\"/>\r\n                    </el-select>\r\n                  </el-form-item>\r\n                </el-col>\r\n                <el-col :span=\"12\">\r\n                  <el-form-item label=\"条件\" label-width=\"60px\">\r\n                    <el-input v-model=\"printCondition.print_condition\" placeholder=\"请输入打印条件\"/>\r\n                  </el-form-item>\r\n                </el-col>\r\n                <el-col :span=\"12\">\r\n                  <el-form-item label=\"打印机\" label-width=\"60px\">\r\n                    <el-select v-model=\"printCondition.printer_name\" placeholder=\"请选择打印机\" filterable clearable>\r\n                      <el-option v-for=\"printer in printerList\" :label=\"printer.name\" :key=\"printer.id\" :value=\"printer.name\"/>\r\n                    </el-select>\r\n                  </el-form-item>\r\n                </el-col>\r\n              </el-row>\r\n            </div>\r\n            <div class=\"add-print-condition-btn\">\r\n              <el-button link type=\"primary\" plain @click=\"addPrintCondition\" :icon=\"renderIcon('fa PlusCircle')\">\r\n                添加打印机\r\n              </el-button>\r\n            </div>\r\n          </el-form>\r\n        </div>\r\n      </template>\r\n      <template #footer>\r\n        <div style=\"flex: auto\">\r\n          <el-button type=\"primary\" @click=\"createOrUpdatePrintTerminal\" :icon=\"renderIcon('fa Check')\">提交</el-button>\r\n          <el-button @click=\"closeCreateOrUpdateDrawer\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n        </div>\r\n      </template>\r\n    </el-drawer>\r\n    <!-- create or update print plan drawer end -->\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {renderIcon} from '../../utils'\r\n\r\nexport default {\r\n  data() {\r\n\r\n    return {\r\n      whList: [],\r\n      printPlanList: [],\r\n      printTemplateList: [],\r\n      printerList: [],\r\n      query: {\r\n        print_terminal_code: '',\r\n        print_terminal_name: '',\r\n        wh_id: null,\r\n      },\r\n      printTerminalTableOption: {\r\n        loading: false,\r\n        rowData: [],\r\n      },\r\n      createOrUpdateDrawerOption: {\r\n        visible: false,\r\n        title: '新增打印终端',\r\n        form: {\r\n          print_terminal_id: null,\r\n          print_terminal_code: '',\r\n          print_terminal_name: '',\r\n          wh_id: null,\r\n          server_addr: '',\r\n          server_port: '',\r\n          default_printer_name: '',\r\n          print_condition_list: []\r\n        },\r\n      },\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    this.loadWhList()\r\n    this.loadPrintTerminalList()\r\n    this.loadPrinterList()\r\n    this.loadPrintPlanList()\r\n  },\r\n\r\n  methods: {\r\n    renderIcon,\r\n    loadWhList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@findWhList\", {}).then((res) => {\r\n        this.whList = res.data\r\n      })\r\n    },\r\n    loadPrintTerminalList() {\r\n      this.printTerminalTableOption.loading = true\r\n      const params = {print_terminal_name: this.query.print_terminal_name, wh_id: this.query.wh_id}\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintTerminalList\", params).then((res) => {\r\n        this.printTerminalTableOption.rowData = res.data\r\n      }).finally(() => {\r\n        this.printTerminalTableOption.loading = false\r\n      })\r\n    },\r\n    loadPrinterList() {\r\n      // TODO 获取打印机列表\r\n      const printerList = []\r\n      for (let i = 0; i < 10; i++) {\r\n        printerList.push({id: i, name: \"打印机_0\" + i})\r\n      }\r\n      this.printerList = printerList\r\n    },\r\n    loadPrintPlanList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintPlanList\", this.query).then((res) => {\r\n        this.printPlanList = res.data\r\n      })\r\n    },\r\n    loadPrintTemplateList() {\r\n\r\n    },\r\n    searchPrintTerminal() {\r\n      this.loadPrintTerminalList();\r\n    },\r\n    createPrintTerminal() {\r\n      this.createOrUpdateDrawerOption.form = {\r\n        print_terminal_id: null,\r\n        print_terminal_code: '',\r\n        print_terminal_name: '',\r\n        wh_id: null,\r\n        server_addr: '',\r\n        server_port: '',\r\n        default_printer_name: '',\r\n        print_condition_list: []\r\n      }\r\n      this.showCreateOrUpdateDrawer();\r\n    },\r\n    batchDeletePrintTerminal() {\r\n      const selectedRows = this.$refs.PrintTerminalTable.getSelectionRows();\r\n      if (selectedRows.length <= 0) {\r\n        system.showErrorDialog('请勾选需要删除的数据')\r\n        return\r\n      }\r\n      const printTerminalNames = selectedRows.map(printTerminal => printTerminal.print_terminal_name).join(',');\r\n      system.confirm(`确定删除 ${printTerminalNames} 的打印终端吗?`).then(res => {\r\n        this.doDeletePrintTerminal(selectedRows.map(printTerminal => printTerminal.print_terminal_id))\r\n      })\r\n    },\r\n    printTerminalTableOnRowClick(row) {\r\n\r\n    },\r\n    serverAddrFieldFormatter(row, column, cellValue, index) {\r\n      const server_addr = row.server_addr\r\n      if (row.server_port) {\r\n        return server_addr + ':' + row.server_port\r\n      }\r\n      return server_addr\r\n    },\r\n    whNameFieldFormatter(row, column, cellValue, index) {\r\n      const whList = this.whList\r\n      const distWhList = whList.filter((wh) => wh.wh_id === row.wh_id)\r\n      if (distWhList.length <= 0) {\r\n        return\r\n      }\r\n      return distWhList[0].wh_name\r\n    },\r\n    updatePrintTerminal(row) {\r\n      this.createOrUpdateDrawerOption.title = '编辑打印终端'\r\n      _.extend(this.createOrUpdateDrawerOption.form, row)\r\n      const params = {print_terminal_id: row.print_terminal_id}\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintConditionByTerminalId\", params).then((res) => {\r\n        this.createOrUpdateDrawerOption.form.print_condition_list = res.data\r\n        this.showCreateOrUpdateDrawer()\r\n      })\r\n    },\r\n    deletePrintTerminal(row) {\r\n      const _this = this\r\n      system.confirm(`确定删除 ${row.print_terminal_name} 的打印终端吗?`).then(() => {\r\n        _this.doDeletePrintTerminal([row.print_terminal_id])\r\n      })\r\n    },\r\n    doDeletePrintTerminal(printTerminalIds) {\r\n      const params = {print_terminal_ids: printTerminalIds}\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@deletePrintTerminal\", params).then((res) => {\r\n        system.showInfoDialog(res.msg)\r\n        if (res.success) {\r\n          this.loadPrintTerminalList()\r\n        }\r\n      })\r\n    },\r\n    showCreateOrUpdateDrawer() {\r\n      this.createOrUpdateDrawerOption.visible = true;\r\n    },\r\n    closeCreateOrUpdateDrawer() {\r\n      this.createOrUpdateDrawerOption.visible = false;\r\n    },\r\n    addPrintCondition() {\r\n      const printConditionList = this.createOrUpdateDrawerOption.form.print_condition_list\r\n      printConditionList.push({})\r\n      _.extend(this.createOrUpdateDrawerOption, {print_condition_list: printConditionList})\r\n    },\r\n    removePrintCondition(templateIdx, conditionIdx) {\r\n      const printConditionList = this.createOrUpdateDrawerOption.form.print_condition_list\r\n      printConditionList.splice(conditionIdx, 1)\r\n      _.extend(this.createOrUpdateDrawerOption, {print_condition_list: printConditionList})\r\n    },\r\n    printPlanOnChange(value) {\r\n      const params = {print_plan_id: value}\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintTemplateByPrintPlanId\", params).then((res) => {\r\n        this.printTemplateList = res.data\r\n      })\r\n    },\r\n    createOrUpdatePrintTerminal() {\r\n      const params = this.createOrUpdateDrawerOption.form\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@createOrUpdatePrintTerminal\", params).then((res) => {\r\n        system.showInfoDialog(res.msg)\r\n        if (res.success) {\r\n          this.loadPrintTerminalList()\r\n          this.closeCreateOrUpdateDrawer()\r\n        }\r\n      })\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.print-terminal {\r\n  width: 100%;\r\n  height: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  .toolbar{\r\n    border-bottom:1px solid #ccc\r\n  }\r\n  .print-terminal-content {\r\n    flex:1;\r\n    background: #efefef;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n    .print-terminal-content-search {\r\n      padding-top: 10px;\r\n      background: #fff;\r\n      border-bottom:1px solid #dbdada\r\n    }\r\n\r\n    .print-terminal-content-table {\r\n      width: 100%;\r\n      flex:1;\r\n      margin:10px;\r\n      border:1px solid #dbdada;\r\n      .el-table {\r\n        width: 100%;\r\n        height: 100%;\r\n        th.el-table__cell {\r\n          background: #f0f0f0;\r\n        }\r\n\r\n        .cell {\r\n          font-size: 14px;\r\n          color: #333\r\n        }\r\n      }\r\n      .print-terminal-content-table-page {\r\n        float: right;\r\n        margin-top: 5px;\r\n        margin-right: 10px;\r\n      }\r\n    }\r\n  }\r\n\r\n  .print-terminal-drawer-content {\r\n    width: 95%;\r\n\r\n    .print-terminal-drawer-content-printer {\r\n      border: 1px dashed var(--main-color);\r\n      padding: 18px 10px 0 10px;\r\n      margin: 0 0 5px 30px;\r\n      border-radius: 5px;\r\n      background-color: var(--sub-header-color);\r\n    }\r\n\r\n    .remove-print-condition-btn {\r\n      float: right;\r\n      margin-top: -16px;\r\n    }\r\n\r\n    .add-print-condition-btn {\r\n      float: right;\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"print-terminal design\">\r\n    <div class=\"toolbar\">\r\n      <el-button link class=\"toolbar-btn\" @click=\"searchPrintTerminal\" :icon=\"renderIcon('fa Search')\">\r\n        查询\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"createPrintTerminal\" :icon=\"renderIcon('fa PlusSquare')\">\r\n        新建\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"batchDeletePrintTerminal\" :icon=\"renderIcon('fa Trash')\">\r\n        批量删除\r\n      </el-button>\r\n    </div>\r\n    <div class=\"print-terminal-content\">\r\n      <div class=\"print-terminal-content-search\">\r\n        <el-form :inline=\"true\" :model=\"query\" class=\"\">\r\n          <el-form-item label=\"打印终端名称\">\r\n            <el-input v-model=\"query.print_terminal_name\" placeholder=\"请输入打印终端名称\"/>\r\n          </el-form-item>\r\n          <el-form-item label=\"所属仓库\">\r\n            <el-select v-model=\"query.wh_id\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"item in whList\"\r\n                  :key=\"item.wh_id\"\r\n                  :label=\"item.wh_name\"\r\n                  :value=\"item.wh_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n        </el-form>\r\n      </div>\r\n      <div class=\"print-terminal-content-table\">\r\n        <el-table\r\n            ref=\"PrintTerminalTable\"\r\n            border\r\n            highlight-current-row\r\n            v-loading=\"printTerminalTableOption.loading\"\r\n            :data=\"printTerminalTableOption.rowData\"\r\n            @row-click=\"printTerminalTableOnRowClick\">\r\n          <el-table-column type=\"selection\" width=\"40\"/>\r\n          <el-table-column prop=\"print_terminal_id\" label=\"ID\" width=\"60\"/>\r\n          <el-table-column prop=\"print_terminal_name\" label=\"终端名称\" show-overflow-tooltip/>\r\n          <el-table-column label=\"终端地址\" :formatter=\"serverAddrFieldFormatter\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"wh_id\" label=\"所属仓库ID\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"wh_name\" label=\"所属仓库名称\" :formatter=\"whNameFieldFormatter\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"create_at\" label=\"创建时间\"/>\r\n          <el-table-column prop=\"create_by\" label=\"创建者\"/>\r\n          <el-table-column prop=\"update_at\" label=\"最后修改时间\"/>\r\n          <el-table-column prop=\"update_by\" label=\"最后修改者\"/>\r\n          <el-table-column fixed=\"right\" label=\"操作\" width=\"120\" header-align=\"center\">\r\n            <template #default=\"scope\">\r\n              <el-button link type=\"primary\" @click.prevent=\"updatePrintTerminal(scope.row)\">编辑</el-button>\r\n              <el-button link type=\"primary\" @click.prevent=\"deletePrintTerminal(scope.row)\">删除</el-button>\r\n            </template>\r\n          </el-table-column>\r\n        </el-table>\r\n        <!--        <el-pagination-->\r\n        <!--            class=\"print-terminal-content-table-page\"-->\r\n        <!--            v-model:current-page=\"printTerminalTableOption.pageNo\"-->\r\n        <!--            v-model:page-size=\"printTerminalTableOption.pageSize\"-->\r\n        <!--            :page-sizes=\"[50, 100, 200, 400, 500]\"-->\r\n        <!--            :background=\"true\"-->\r\n        <!--            layout=\"total, sizes, prev, pager, next\"-->\r\n        <!--            :total=\"printTerminalTableOption.total\"-->\r\n        <!--            @size-change=\"handlePageSizeChange\"-->\r\n        <!--            @current-change=\"handlePageNoChange\"-->\r\n        <!--        />-->\r\n      </div>\r\n    </div>\r\n\r\n    <!-- create or update print plan drawer start -->\r\n    <el-drawer v-model=\"createOrUpdateDrawerOption.visible\"\r\n               direction=\"rtl\"\r\n               size=\"50%\">\r\n      <template #header>\r\n        <h4>{{ createOrUpdateDrawerOption.title }}</h4>\r\n      </template>\r\n      <template #default>\r\n        <div class=\"print-terminal-drawer-content\">\r\n          <el-form :model=\"createOrUpdateDrawerOption.form\" label-width=\"120px\">\r\n            <el-form-item label=\"终端名称\">\r\n              <el-input v-model=\"createOrUpdateDrawerOption.form.print_terminal_name\" placeholder=\"请输入打印终端名称\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"所属仓库\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.wh_id\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n                <el-option\r\n                    v-for=\"item in whList\"\r\n                    :key=\"item.wh_id\"\r\n                    :label=\"item.wh_name\"\r\n                    :value=\"item.wh_id\"\r\n                />\r\n              </el-select>\r\n            </el-form-item>\r\n            <el-form-item label=\"终端服务地址\">\r\n              <el-input v-model=\"createOrUpdateDrawerOption.form.server_addr\" placeholder=\"请输入打印终端服务地址\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"终端服务端口\">\r\n              <el-input v-model=\"createOrUpdateDrawerOption.form.server_port\" placeholder=\"请输入打印服务端口\"/>\r\n            </el-form-item>\r\n            <el-form-item label=\"默认打印机\">\r\n              <el-select v-model=\"createOrUpdateDrawerOption.form.default_printer_name\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n                <el-option label=\"打印机_001\" value=\"shanghai\"/>\r\n              </el-select>\r\n            </el-form-item>\r\n\r\n            <div class=\"print-terminal-drawer-content-printer\"\r\n                 v-for=\"(printCondition, conditionIdx) in createOrUpdateDrawerOption.form.print_condition_list\">\r\n              <div class=\"remove-print-condition-btn\">\r\n                <el-button link type=\"danger\" @click=\"removePrintCondition(conditionIdx)\" :icon=\"renderIcon('fa Trash')\">删除</el-button>\r\n              </div>\r\n              <el-row :gutter=\"25\">\r\n                <el-col :span=\"12\">\r\n                  <el-form-item label=\"场景\" label-width=\"60px\">\r\n                    <el-select v-model=\"printCondition.print_plan_id\" placeholder=\"请选择打印场景\" filterable clearable @change=\"printPlanOnChange\">\r\n                      <el-option v-for=\"printPlan in printPlanList\" :label=\"printPlan.print_plan_name\" :key=\"printPlan.print_plan_id\" :value=\"printPlan.print_plan_id\"/>\r\n                    </el-select>\r\n                  </el-form-item>\r\n                </el-col>\r\n                <el-col :span=\"12\">\r\n                  <el-form-item label=\"模板\" label-width=\"60px\">\r\n                    <el-select v-model=\"printCondition.print_template_id\" placeholder=\"请选择打印模板\" filterable clearable>\r\n                      <el-option v-for=\"printTemplate in printTemplateList\"\r\n                                 :label=\"printTemplate.print_template_name\"\r\n                                 :key=\"printTemplate.print_template_id\"\r\n                                 :value=\"printTemplate.print_template_id\"/>\r\n                    </el-select>\r\n                  </el-form-item>\r\n                </el-col>\r\n                <el-col :span=\"12\">\r\n                  <el-form-item label=\"条件\" label-width=\"60px\">\r\n                    <el-input v-model=\"printCondition.print_condition\" placeholder=\"请输入打印条件\"/>\r\n                  </el-form-item>\r\n                </el-col>\r\n                <el-col :span=\"12\">\r\n                  <el-form-item label=\"打印机\" label-width=\"60px\">\r\n                    <el-select v-model=\"printCondition.printer_name\" placeholder=\"请选择打印机\" filterable clearable>\r\n                      <el-option v-for=\"printer in printerList\" :label=\"printer.name\" :key=\"printer.id\" :value=\"printer.name\"/>\r\n                    </el-select>\r\n                  </el-form-item>\r\n                </el-col>\r\n              </el-row>\r\n            </div>\r\n            <div class=\"add-print-condition-btn\">\r\n              <el-button link type=\"primary\" plain @click=\"addPrintCondition\" :icon=\"renderIcon('fa PlusCircle')\">\r\n                添加打印机\r\n              </el-button>\r\n            </div>\r\n          </el-form>\r\n        </div>\r\n      </template>\r\n      <template #footer>\r\n        <div style=\"flex: auto\">\r\n          <el-button type=\"primary\" @click=\"createOrUpdatePrintTerminal\" :icon=\"renderIcon('fa Check')\">提交</el-button>\r\n          <el-button @click=\"closeCreateOrUpdateDrawer\" :icon=\"renderIcon('fa PowerOff')\">关闭</el-button>\r\n        </div>\r\n      </template>\r\n    </el-drawer>\r\n    <!-- create or update print plan drawer end -->\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {renderIcon} from '../../utils'\r\n\r\nexport default {\r\n  data() {\r\n\r\n    return {\r\n      whList: [],\r\n      printPlanList: [],\r\n      printTemplateList: [],\r\n      printerList: [],\r\n      query: {\r\n        print_terminal_code: '',\r\n        print_terminal_name: '',\r\n        wh_id: null,\r\n      },\r\n      printTerminalTableOption: {\r\n        loading: false,\r\n        rowData: [],\r\n      },\r\n      createOrUpdateDrawerOption: {\r\n        visible: false,\r\n        title: '新增打印终端',\r\n        form: {\r\n          print_terminal_id: null,\r\n          print_terminal_code: '',\r\n          print_terminal_name: '',\r\n          wh_id: null,\r\n          server_addr: '',\r\n          server_port: '',\r\n          default_printer_name: '',\r\n          print_condition_list: []\r\n        },\r\n      },\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    this.loadWhList()\r\n    this.loadPrintTerminalList()\r\n    this.loadPrinterList()\r\n    this.loadPrintPlanList()\r\n  },\r\n\r\n  methods: {\r\n    renderIcon,\r\n    loadWhList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@findWhList\", {}).then((res) => {\r\n        this.whList = res.data\r\n      })\r\n    },\r\n    loadPrintTerminalList() {\r\n      this.printTerminalTableOption.loading = true\r\n      const params = {print_terminal_name: this.query.print_terminal_name, wh_id: this.query.wh_id}\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintTerminalList\", params).then((res) => {\r\n        this.printTerminalTableOption.rowData = res.data\r\n      }).finally(() => {\r\n        this.printTerminalTableOption.loading = false\r\n      })\r\n    },\r\n    loadPrinterList() {\r\n      // TODO 获取打印机列表\r\n      const printerList = []\r\n      for (let i = 0; i < 10; i++) {\r\n        printerList.push({id: i, name: \"打印机_0\" + i})\r\n      }\r\n      this.printerList = printerList\r\n    },\r\n    loadPrintPlanList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintPlanList\", this.query).then((res) => {\r\n        this.printPlanList = res.data\r\n      })\r\n    },\r\n    loadPrintTemplateList() {\r\n\r\n    },\r\n    searchPrintTerminal() {\r\n      this.loadPrintTerminalList();\r\n    },\r\n    createPrintTerminal() {\r\n      this.createOrUpdateDrawerOption.form = {\r\n        print_terminal_id: null,\r\n        print_terminal_code: '',\r\n        print_terminal_name: '',\r\n        wh_id: null,\r\n        server_addr: '',\r\n        server_port: '',\r\n        default_printer_name: '',\r\n        print_condition_list: []\r\n      }\r\n      this.showCreateOrUpdateDrawer();\r\n    },\r\n    batchDeletePrintTerminal() {\r\n      const selectedRows = this.$refs.PrintTerminalTable.getSelectionRows();\r\n      if (selectedRows.length <= 0) {\r\n        system.showErrorDialog('请勾选需要删除的数据')\r\n        return\r\n      }\r\n      const printTerminalNames = selectedRows.map(printTerminal => printTerminal.print_terminal_name).join(',');\r\n      system.confirm(`确定删除 ${printTerminalNames} 的打印终端吗?`).then(res => {\r\n        this.doDeletePrintTerminal(selectedRows.map(printTerminal => printTerminal.print_terminal_id))\r\n      })\r\n    },\r\n    printTerminalTableOnRowClick(row) {\r\n\r\n    },\r\n    serverAddrFieldFormatter(row, column, cellValue, index) {\r\n      const server_addr = row.server_addr\r\n      if (row.server_port) {\r\n        return server_addr + ':' + row.server_port\r\n      }\r\n      return server_addr\r\n    },\r\n    whNameFieldFormatter(row, column, cellValue, index) {\r\n      const whList = this.whList\r\n      const distWhList = whList.filter((wh) => wh.wh_id === row.wh_id)\r\n      if (distWhList.length <= 0) {\r\n        return\r\n      }\r\n      return distWhList[0].wh_name\r\n    },\r\n    updatePrintTerminal(row) {\r\n      this.createOrUpdateDrawerOption.title = '编辑打印终端'\r\n      _.extend(this.createOrUpdateDrawerOption.form, row)\r\n      const params = {print_terminal_id: row.print_terminal_id}\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintConditionByTerminalId\", params).then((res) => {\r\n        this.createOrUpdateDrawerOption.form.print_condition_list = res.data\r\n        this.showCreateOrUpdateDrawer()\r\n      })\r\n    },\r\n    deletePrintTerminal(row) {\r\n      const _this = this\r\n      system.confirm(`确定删除 ${row.print_terminal_name} 的打印终端吗?`).then(() => {\r\n        _this.doDeletePrintTerminal([row.print_terminal_id])\r\n      })\r\n    },\r\n    doDeletePrintTerminal(printTerminalIds) {\r\n      const params = {print_terminal_ids: printTerminalIds}\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@deletePrintTerminal\", params).then((res) => {\r\n        system.showInfoDialog(res.msg)\r\n        if (res.success) {\r\n          this.loadPrintTerminalList()\r\n        }\r\n      })\r\n    },\r\n    showCreateOrUpdateDrawer() {\r\n      this.createOrUpdateDrawerOption.visible = true;\r\n    },\r\n    closeCreateOrUpdateDrawer() {\r\n      this.createOrUpdateDrawerOption.visible = false;\r\n    },\r\n    addPrintCondition() {\r\n      const printConditionList = this.createOrUpdateDrawerOption.form.print_condition_list\r\n      printConditionList.push({})\r\n      _.extend(this.createOrUpdateDrawerOption, {print_condition_list: printConditionList})\r\n    },\r\n    removePrintCondition(templateIdx, conditionIdx) {\r\n      const printConditionList = this.createOrUpdateDrawerOption.form.print_condition_list\r\n      printConditionList.splice(conditionIdx, 1)\r\n      _.extend(this.createOrUpdateDrawerOption, {print_condition_list: printConditionList})\r\n    },\r\n    printPlanOnChange(value) {\r\n      const params = {print_plan_id: value}\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintTemplateByPrintPlanId\", params).then((res) => {\r\n        this.printTemplateList = res.data\r\n      })\r\n    },\r\n    createOrUpdatePrintTerminal() {\r\n      const params = this.createOrUpdateDrawerOption.form\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@createOrUpdatePrintTerminal\", params).then((res) => {\r\n        system.showInfoDialog(res.msg)\r\n        if (res.success) {\r\n          this.loadPrintTerminalList()\r\n          this.closeCreateOrUpdateDrawer()\r\n        }\r\n      })\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n.print-terminal {\r\n  width: 100%;\r\n  height: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  .toolbar{\r\n    border-bottom:1px solid #ccc\r\n  }\r\n  .print-terminal-content {\r\n    flex:1;\r\n    background: #efefef;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n    .print-terminal-content-search {\r\n      padding-top: 10px;\r\n      background: #fff;\r\n      border-bottom:1px solid #dbdada\r\n    }\r\n\r\n    .print-terminal-content-table {\r\n      width: 100%;\r\n      flex:1;\r\n      margin:10px;\r\n      border:1px solid #dbdada;\r\n      .el-table {\r\n        width: 100%;\r\n        height: 100%;\r\n        th.el-table__cell {\r\n          background: #f0f0f0;\r\n        }\r\n\r\n        .cell {\r\n          font-size: 14px;\r\n          color: #333\r\n        }\r\n      }\r\n      .print-terminal-content-table-page {\r\n        float: right;\r\n        margin-top: 5px;\r\n        margin-right: 10px;\r\n      }\r\n    }\r\n  }\r\n\r\n  .print-terminal-drawer-content {\r\n    width: 95%;\r\n\r\n    .print-terminal-drawer-content-printer {\r\n      border: 1px dashed var(--main-color);\r\n      padding: 18px 10px 0 10px;\r\n      margin: 0 0 5px 30px;\r\n      border-radius: 5px;\r\n      background-color: var(--sub-header-color);\r\n    }\r\n\r\n    .remove-print-condition-btn {\r\n      float: right;\r\n      margin-top: -16px;\r\n    }\r\n\r\n    .add-print-condition-btn {\r\n      float: right;\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"yvan-dev-print-task design\">\r\n    <div class=\"toolbar\">\r\n      <el-button link class=\"toolbar-btn\" @click=\"searchPrintTask\" :icon=\"renderIcon('fa Search')\">\r\n        查询\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"batchDeletePrintTask\" :icon=\"renderIcon('fa Trash')\">\r\n        批量删除\r\n      </el-button>\r\n    </div>\r\n    <div class=\"print-task-content\">\r\n      <div class=\"print-task-content-search\">\r\n        <el-form :inline=\"true\" :model=\"query\" class=\"\">\r\n          <el-form-item label=\"场景名称\">\r\n            <el-select v-model=\"query.print_plan_id\" placeholder=\"请选择打印场景\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"item in printPlanList\"\r\n                  :key=\"item.print_plan_id\"\r\n                  :label=\"item.print_plan_name\"\r\n                  :value=\"item.print_plan_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"模板名称\">\r\n            <el-select v-model=\"query.print_template_id\" placeholder=\"请选择打印模板\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"item in printTemplateList\"\r\n                  :key=\"item.print_template_id\"\r\n                  :label=\"item.print_template_name\"\r\n                  :value=\"item.print_template_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"终端名称\">\r\n            <el-select v-model=\"query.print_terminal_id\" placeholder=\"请选择打印终端\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"item in printTerminalList\"\r\n                  :key=\"item.print_terminal_id\"\r\n                  :label=\"item.print_terminal_name\"\r\n                  :value=\"item.print_terminal_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"所属仓库\">\r\n            <el-select v-model=\"query.wh_id\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"item in whList\"\r\n                  :key=\"item.wh_id\"\r\n                  :label=\"item.wh_name\"\r\n                  :value=\"item.wh_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"打印状态\">\r\n            <el-select v-model=\"query.print_state\" placeholder=\"请选择场景状态\" filterable clearable>\r\n              <el-option v-for=\"printState in printStates\"\r\n                         :key=\"printState.code\"\r\n                         :label=\"printState.name\"\r\n                         :value=\"printState.code\"/>\r\n            </el-select>\r\n          </el-form-item>\r\n        </el-form>\r\n      </div>\r\n      <div class=\"print-task-content-table\">\r\n        <el-table\r\n            ref=\"printTaskTable\"\r\n            border\r\n            highlight-current-row\r\n            v-loading=\"printTaskTableOption.loading\"\r\n            :data=\"printTaskTableOption.rowData\"\r\n            @row-click=\"printTaskTableOnRowClick\">\r\n          <el-table-column type=\"selection\" width=\"40\"/>\r\n          <el-table-column prop=\"print_task_id\" label=\"ID\" width=\"60\"/>\r\n          <el-table-column prop=\"print_plan_code\" label=\"场景编码\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"print_plan_name\" label=\"场景名称\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"print_template_code\" label=\"模板编码\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"print_template_name\" label=\"模板名称\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"print_terminal_name\" label=\"终端名称\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"server_addr\" label=\"终端服务地址\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"printer_name\" label=\"打印机名称\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"error_count\" label=\"错误次数\" />\r\n          <!--<el-table-column prop=\"wh_id\" label=\"所属仓库ID\" show-overflow-tooltip/>-->\r\n          <!--<el-table-column prop=\"wh_name\" label=\"所属仓库名称\" :formatter=\"whNameFieldFormatter\" show-overflow-tooltip/>-->\r\n          <el-table-column prop=\"print_state\" label=\"状态\" :formatter=\"printStateFieldFormatter\"/>\r\n          <el-table-column prop=\"create_at\" label=\"创建时间\"/>\r\n          <el-table-column prop=\"update_at\" label=\"最后修改时间\"/>\r\n          <el-table-column fixed=\"right\" label=\"操作\" width=\"120\" header-align=\"center\">\r\n            <template #default=\"scope\">\r\n              <el-button link type=\"primary\" @click.prevent=\"downloadFile(scope.row)\" v-if=\"canDownloadFile(scope.row)\">下载</el-button>\r\n            </template>\r\n          </el-table-column>\r\n        </el-table>\r\n        <el-pagination\r\n            v-model:current-page=\"query.pageNo\"\r\n            background\r\n            :page-size=\"50\"\r\n            layout=\"total, prev, pager, next\"\r\n            :total=\"printTaskTableOption.total\"\r\n            @current-change=\"handleCurrentChange\"\r\n        />\r\n      </div>\r\n    </div>\r\n\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {renderIcon} from '../../utils'\r\nimport {ElMessage} from 'element-plus'\r\n\r\nexport default {\r\n  data() {\r\n    const printStates = [\r\n      {code: 1, name: \"初始化\"},\r\n      {code: 2, name: \"打印中\"},\r\n      {code: 3, name: \"已打印\"},\r\n      {code: 4, name: \"打印错误\"},\r\n    ]\r\n    return {\r\n      printStates,\r\n      whList: [],\r\n      printPlanList: [],\r\n      printTemplateList: [],\r\n      printTerminalList: [],\r\n      query: {\r\n        print_plan_id: null,\r\n        print_template_id: null,\r\n        print_terminal_id: null,\r\n        wh_id: null,\r\n        print_state: null,\r\n        pageNo: 1,\r\n        pageSize: 50\r\n      },\r\n      printTaskTableOption: {\r\n        loading: false,\r\n        rowData: [],\r\n        total: 0\r\n      },\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    this.loadWhList()\r\n    this.loadPrintPlanList()\r\n    this.loadPrintTemplateList()\r\n    this.loadPrintTerminalList()\r\n    this.loadPrintTaskList(1)\r\n  },\r\n\r\n  methods: {\r\n    renderIcon,\r\n    loadWhList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@findWhList\", {}).then((res) => {\r\n        this.whList = res.data\r\n      })\r\n    },\r\n    loadPrintTaskList(pageNo) {\r\n      this.query.pageNo = !pageNo && pageNo <= 0 ? 1 : pageNo\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintTaskManager@findPrintTaskWithPage\", this.query).then((res) => {\r\n        this.printTaskTableOption.total = _.toNumber(res.data.total ? res.data.total : 0)\r\n        this.printTaskTableOption.rowData = res.data.printTaskList\r\n      })\r\n    },\r\n    loadPrintPlanList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintPlanList\", this.query).then((res) => {\r\n        this.printPlanList = res.data\r\n      })\r\n    },\r\n    loadPrintTemplateList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintTemplateList\", {}).then((res) => {\r\n        this.printTemplateList = res.data\r\n      })\r\n    },\r\n    loadPrintTerminalList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintTerminalList\", {}).then((res) => {\r\n        this.printTerminalList = res.data\r\n      })\r\n    },\r\n    searchPrintTask() {\r\n      this.loadPrintTaskList(1);\r\n    },\r\n    batchDeletePrintTask() {\r\n      const selectedRows = this.$refs.printTaskTable.getSelectionRows();\r\n      if (selectedRows.length <= 0) {\r\n        system.showErrorDialog('请勾选需要删除的数据')\r\n        return\r\n      }\r\n      system.confirm(`确定删除选中的打印任务吗?`).then(() => {\r\n        console.log('selectedRows', selectedRows)\r\n        const printTaskIds = selectedRows.map(printTask => printTask.print_task_id)\r\n        system.invokeServer(\"/com/galaxis/wms/print/PrintTaskManager@batchDeletePrintTask\", {print_task_ids: printTaskIds}).then((res) => {\r\n          system.showInfoDialog(res.msg)\r\n          this.loadPrintTaskList(1);\r\n        })\r\n      })\r\n    },\r\n    whNameFieldFormatter(row, column, cellValue, index) {\r\n      const whList = this.whList\r\n      const distWhList = whList.filter((wh) => wh.wh_id === row.wh_id)\r\n      if (distWhList.length <= 0) {\r\n        return\r\n      }\r\n      return distWhList[0].wh_name\r\n    },\r\n    printStateFieldFormatter(row, column, cellValue, index) {\r\n      const printState = this.printStates.find(printState => printState.code === cellValue)\r\n      if (printState) {\r\n        return printState.name\r\n      }\r\n      return \"\"\r\n    },\r\n    printTaskTableOnRowClick() {\r\n\r\n    },\r\n    canDownloadFile(printTask) {\r\n      return printTask.print_state === 3 && printTask.file_path\r\n    },\r\n    downloadFile(printTask) {\r\n      window['printTools'].openWindow(printTask.file_path, '下载', 800, 800);\r\n    },\r\n    handleCurrentChange(pageNo) {\r\n      this.loadPrintTaskList(pageNo)\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.yvan-dev-print-task {\r\n  width: 100%;\r\n  height: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .toolbar {\r\n    border-bottom: 1px solid #ccc\r\n  }\r\n\r\n  .print-task-content {\r\n    flex: 1;\r\n    background: #efefef;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n\r\n    .print-task-content-search {\r\n      padding-top: 10px;\r\n      background: #fff;\r\n      border-bottom: 1px solid #dbdada\r\n    }\r\n\r\n    .print-task-content-table {\r\n      flex: 1;\r\n      margin: 10px;\r\n      border: 1px solid #dbdada;\r\n      display: flex;\r\n      flex-direction: column;\r\n      overflow: hidden;\r\n\r\n      .el-table {\r\n        flex: 1;\r\n\r\n        tr th.el-table__cell {\r\n          background: #f0f0f0;\r\n        }\r\n\r\n        .cell {\r\n          font-size: 14px;\r\n          color: #333\r\n        }\r\n      }\r\n\r\n      .el-pagination {\r\n        background: #fff;\r\n        display: flex;\r\n        flex-direction: row-reverse;\r\n      }\r\n\r\n      .el-table th.el-table__cell {\r\n        background: #f0f0f0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n  <div class=\"yvan-dev-print-task design\">\r\n    <div class=\"toolbar\">\r\n      <el-button link class=\"toolbar-btn\" @click=\"searchPrintTask\" :icon=\"renderIcon('fa Search')\">\r\n        查询\r\n      </el-button>\r\n      <el-button link class=\"toolbar-btn\" @click=\"batchDeletePrintTask\" :icon=\"renderIcon('fa Trash')\">\r\n        批量删除\r\n      </el-button>\r\n    </div>\r\n    <div class=\"print-task-content\">\r\n      <div class=\"print-task-content-search\">\r\n        <el-form :inline=\"true\" :model=\"query\" class=\"\">\r\n          <el-form-item label=\"场景名称\">\r\n            <el-select v-model=\"query.print_plan_id\" placeholder=\"请选择打印场景\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"item in printPlanList\"\r\n                  :key=\"item.print_plan_id\"\r\n                  :label=\"item.print_plan_name\"\r\n                  :value=\"item.print_plan_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"模板名称\">\r\n            <el-select v-model=\"query.print_template_id\" placeholder=\"请选择打印模板\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"item in printTemplateList\"\r\n                  :key=\"item.print_template_id\"\r\n                  :label=\"item.print_template_name\"\r\n                  :value=\"item.print_template_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"终端名称\">\r\n            <el-select v-model=\"query.print_terminal_id\" placeholder=\"请选择打印终端\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"item in printTerminalList\"\r\n                  :key=\"item.print_terminal_id\"\r\n                  :label=\"item.print_terminal_name\"\r\n                  :value=\"item.print_terminal_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"所属仓库\">\r\n            <el-select v-model=\"query.wh_id\" placeholder=\"请选择所属仓库\" filterable clearable>\r\n              <el-option\r\n                  v-for=\"item in whList\"\r\n                  :key=\"item.wh_id\"\r\n                  :label=\"item.wh_name\"\r\n                  :value=\"item.wh_id\"\r\n              />\r\n            </el-select>\r\n          </el-form-item>\r\n          <el-form-item label=\"打印状态\">\r\n            <el-select v-model=\"query.print_state\" placeholder=\"请选择场景状态\" filterable clearable>\r\n              <el-option v-for=\"printState in printStates\"\r\n                         :key=\"printState.code\"\r\n                         :label=\"printState.name\"\r\n                         :value=\"printState.code\"/>\r\n            </el-select>\r\n          </el-form-item>\r\n        </el-form>\r\n      </div>\r\n      <div class=\"print-task-content-table\">\r\n        <el-table\r\n            ref=\"printTaskTable\"\r\n            border\r\n            highlight-current-row\r\n            v-loading=\"printTaskTableOption.loading\"\r\n            :data=\"printTaskTableOption.rowData\"\r\n            @row-click=\"printTaskTableOnRowClick\">\r\n          <el-table-column type=\"selection\" width=\"40\"/>\r\n          <el-table-column prop=\"print_task_id\" label=\"ID\" width=\"60\"/>\r\n          <el-table-column prop=\"print_plan_code\" label=\"场景编码\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"print_plan_name\" label=\"场景名称\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"print_template_code\" label=\"模板编码\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"print_template_name\" label=\"模板名称\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"print_terminal_name\" label=\"终端名称\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"server_addr\" label=\"终端服务地址\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"printer_name\" label=\"打印机名称\" show-overflow-tooltip/>\r\n          <el-table-column prop=\"error_count\" label=\"错误次数\" />\r\n          <!--<el-table-column prop=\"wh_id\" label=\"所属仓库ID\" show-overflow-tooltip/>-->\r\n          <!--<el-table-column prop=\"wh_name\" label=\"所属仓库名称\" :formatter=\"whNameFieldFormatter\" show-overflow-tooltip/>-->\r\n          <el-table-column prop=\"print_state\" label=\"状态\" :formatter=\"printStateFieldFormatter\"/>\r\n          <el-table-column prop=\"create_at\" label=\"创建时间\"/>\r\n          <el-table-column prop=\"update_at\" label=\"最后修改时间\"/>\r\n          <el-table-column fixed=\"right\" label=\"操作\" width=\"120\" header-align=\"center\">\r\n            <template #default=\"scope\">\r\n              <el-button link type=\"primary\" @click.prevent=\"downloadFile(scope.row)\" v-if=\"canDownloadFile(scope.row)\">下载</el-button>\r\n            </template>\r\n          </el-table-column>\r\n        </el-table>\r\n        <el-pagination\r\n            v-model:current-page=\"query.pageNo\"\r\n            background\r\n            :page-size=\"50\"\r\n            layout=\"total, prev, pager, next\"\r\n            :total=\"printTaskTableOption.total\"\r\n            @current-change=\"handleCurrentChange\"\r\n        />\r\n      </div>\r\n    </div>\r\n\r\n  </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {renderIcon} from '../../utils'\r\nimport {ElMessage} from 'element-plus'\r\n\r\nexport default {\r\n  data() {\r\n    const printStates = [\r\n      {code: 1, name: \"初始化\"},\r\n      {code: 2, name: \"打印中\"},\r\n      {code: 3, name: \"已打印\"},\r\n      {code: 4, name: \"打印错误\"},\r\n    ]\r\n    return {\r\n      printStates,\r\n      whList: [],\r\n      printPlanList: [],\r\n      printTemplateList: [],\r\n      printTerminalList: [],\r\n      query: {\r\n        print_plan_id: null,\r\n        print_template_id: null,\r\n        print_terminal_id: null,\r\n        wh_id: null,\r\n        print_state: null,\r\n        pageNo: 1,\r\n        pageSize: 50\r\n      },\r\n      printTaskTableOption: {\r\n        loading: false,\r\n        rowData: [],\r\n        total: 0\r\n      },\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    this.loadWhList()\r\n    this.loadPrintPlanList()\r\n    this.loadPrintTemplateList()\r\n    this.loadPrintTerminalList()\r\n    this.loadPrintTaskList(1)\r\n  },\r\n\r\n  methods: {\r\n    renderIcon,\r\n    loadWhList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/CommonManager@findWhList\", {}).then((res) => {\r\n        this.whList = res.data\r\n      })\r\n    },\r\n    loadPrintTaskList(pageNo) {\r\n      this.query.pageNo = !pageNo && pageNo <= 0 ? 1 : pageNo\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintTaskManager@findPrintTaskWithPage\", this.query).then((res) => {\r\n        this.printTaskTableOption.total = _.toNumber(res.data.total ? res.data.total : 0)\r\n        this.printTaskTableOption.rowData = res.data.printTaskList\r\n      })\r\n    },\r\n    loadPrintPlanList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintPlanList\", this.query).then((res) => {\r\n        this.printPlanList = res.data\r\n      })\r\n    },\r\n    loadPrintTemplateList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintTemplateList\", {}).then((res) => {\r\n        this.printTemplateList = res.data\r\n      })\r\n    },\r\n    loadPrintTerminalList() {\r\n      system.invokeServer(\"/com/galaxis/wms/print/PrintManager@findPrintTerminalList\", {}).then((res) => {\r\n        this.printTerminalList = res.data\r\n      })\r\n    },\r\n    searchPrintTask() {\r\n      this.loadPrintTaskList(1);\r\n    },\r\n    batchDeletePrintTask() {\r\n      const selectedRows = this.$refs.printTaskTable.getSelectionRows();\r\n      if (selectedRows.length <= 0) {\r\n        system.showErrorDialog('请勾选需要删除的数据')\r\n        return\r\n      }\r\n      system.confirm(`确定删除选中的打印任务吗?`).then(() => {\r\n        console.log('selectedRows', selectedRows)\r\n        const printTaskIds = selectedRows.map(printTask => printTask.print_task_id)\r\n        system.invokeServer(\"/com/galaxis/wms/print/PrintTaskManager@batchDeletePrintTask\", {print_task_ids: printTaskIds}).then((res) => {\r\n          system.showInfoDialog(res.msg)\r\n          this.loadPrintTaskList(1);\r\n        })\r\n      })\r\n    },\r\n    whNameFieldFormatter(row, column, cellValue, index) {\r\n      const whList = this.whList\r\n      const distWhList = whList.filter((wh) => wh.wh_id === row.wh_id)\r\n      if (distWhList.length <= 0) {\r\n        return\r\n      }\r\n      return distWhList[0].wh_name\r\n    },\r\n    printStateFieldFormatter(row, column, cellValue, index) {\r\n      const printState = this.printStates.find(printState => printState.code === cellValue)\r\n      if (printState) {\r\n        return printState.name\r\n      }\r\n      return \"\"\r\n    },\r\n    printTaskTableOnRowClick() {\r\n\r\n    },\r\n    canDownloadFile(printTask) {\r\n      return printTask.print_state === 3 && printTask.file_path\r\n    },\r\n    downloadFile(printTask) {\r\n      window['printTools'].openWindow(printTask.file_path, '下载', 800, 800);\r\n    },\r\n    handleCurrentChange(pageNo) {\r\n      this.loadPrintTaskList(pageNo)\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.yvan-dev-print-task {\r\n  width: 100%;\r\n  height: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n\r\n  .toolbar {\r\n    border-bottom: 1px solid #ccc\r\n  }\r\n\r\n  .print-task-content {\r\n    flex: 1;\r\n    background: #efefef;\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n\r\n    .print-task-content-search {\r\n      padding-top: 10px;\r\n      background: #fff;\r\n      border-bottom: 1px solid #dbdada\r\n    }\r\n\r\n    .print-task-content-table {\r\n      flex: 1;\r\n      margin: 10px;\r\n      border: 1px solid #dbdada;\r\n      display: flex;\r\n      flex-direction: column;\r\n      overflow: hidden;\r\n\r\n      .el-table {\r\n        flex: 1;\r\n\r\n        tr th.el-table__cell {\r\n          background: #f0f0f0;\r\n        }\r\n\r\n        .cell {\r\n          font-size: 14px;\r\n          color: #333\r\n        }\r\n      }\r\n\r\n      .el-pagination {\r\n        background: #fff;\r\n        display: flex;\r\n        flex-direction: row-reverse;\r\n      }\r\n\r\n      .el-table th.el-table__cell {\r\n        background: #f0f0f0;\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>","<template>\r\n    <div>\r\n      打印日志\r\n    </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nexport default {\r\n  name: \"yv-studio-print-record\"\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n\r\n</style>","<template>\r\n  <el-container class=\"print\">\r\n    <el-aside width=\"200px\">\r\n      <el-menu\r\n              :default-active=\"menuList[0].id\"\r\n              class=\"\"\r\n              @select=\"onSelect\">\r\n        <el-menu-item v-for=\"menuItem in menuList\" :index=\"menuItem.id\">\r\n          <component :is=\"menuItem.icon\" style=\"width: 15px; height:15px;margin-right:5px\"/>\r\n          <span> {{ menuItem.name }}</span>\r\n        </el-menu-item>\r\n      </el-menu>\r\n    </el-aside>\r\n    <el-main>\r\n        <component :is=\"activeComponent\"/>\r\n    </el-main>\r\n  </el-container>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport YvStudioPrintPlan from './yv-studio-print-plan.vue'\r\nimport YvStudioPrintTemplatePaper from './yv-studio-print-template-paper.vue'\r\nimport YvStudioPrintTemplate from './yv-studio-print-template.vue'\r\nimport YvStudioPrintTerminal from './yv-studio-print-terminal.vue'\r\nimport YvStudioPrintTask from './yv-studio-print-task.vue'\r\nimport YvStudioPrintRecord from './yv-studio-print-record.vue'\r\nimport { Document } from '@element-plus/icons-vue'\r\nimport {markRaw} from \"vue\";\r\n\r\nexport default {\r\n  name: \"yv-studio-print\",\r\n  components:{\r\n    Document\r\n  },\r\n  data() {\r\n    const menuList = [\r\n      {\r\n        \"id\": \"studioPrintPlan\",\r\n        \"path\": \"printPlan\",\r\n        \"name\": \"打印场景管理\",\r\n        \"icon\": 'Document',\r\n        \"componentRaw\": markRaw(YvStudioPrintPlan)\r\n      },\r\n      {\r\n        \"id\": \"studioPrintTemplate\",\r\n        \"path\": \"printTemplate\",\r\n        \"name\": \"打印模板管理\",\r\n        \"icon\": 'Document',\r\n        \"componentRaw\": markRaw(YvStudioPrintTemplate)\r\n      },\r\n      {\r\n        \"id\": \"studioPrintTemplatePaper\",\r\n        \"path\": \"printTemplatePaper\",\r\n        \"name\": \"打印模板纸张管理\",\r\n        \"icon\": 'Document',\r\n        \"componentRaw\": markRaw(YvStudioPrintTemplatePaper)\r\n      },\r\n      {\r\n        \"id\": \"studioPrintTerminal\",\r\n        \"path\": \"printTerminal\",\r\n        \"name\": \"打印终端管理\",\r\n        \"icon\": 'Document',\r\n        \"componentRaw\": markRaw(YvStudioPrintTerminal)\r\n      },\r\n      {\r\n        \"id\": \"studioPrintTask\",\r\n        \"path\": \"printTask\",\r\n        \"name\": \"打印任务管理\",\r\n        \"icon\": 'Document',\r\n        \"componentRaw\": markRaw(YvStudioPrintTask)\r\n      },\r\n      {\r\n        \"id\": \"studioPrintRecord\",\r\n        \"path\": \"printRecord\",\r\n        \"name\": \"打印日志管理\",\r\n        \"icon\": 'Document',\r\n        \"componentRaw\": markRaw(YvStudioPrintRecord)\r\n      },\r\n    ]\r\n\r\n    return {\r\n      menuList,\r\n      activeComponent: menuList[0].componentRaw\r\n    }\r\n  },\r\n  methods: {\r\n    onSelect(menuId) {\r\n      const menu = this.menuList.find(menu => menu.id === menuId)\r\n      if (menu) {\r\n        this.activeComponent = menu.componentRaw\r\n      }\r\n      return this.menuList[0].componentRaw\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.el-main {\r\n  --el-main-padding: 0;\r\n}\r\n  .print{\r\n    width:100%;\r\n    height:100%;\r\n    overflow: hidden;\r\n    .el-aside{\r\n      .el-menu{\r\n        height:100%;\r\n        background: var(--sub-header-color);\r\n        border-right:1px solid #ccc;\r\n        .el-menu-item{\r\n          height: 50px;\r\n          &:hover,&.is-active{\r\n            background: #d7d7d7;\r\n            color: #000;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n  }\r\n</style>","<template>\r\n  <el-container class=\"print\">\r\n    <el-aside width=\"200px\">\r\n      <el-menu\r\n              :default-active=\"menuList[0].id\"\r\n              class=\"\"\r\n              @select=\"onSelect\">\r\n        <el-menu-item v-for=\"menuItem in menuList\" :index=\"menuItem.id\">\r\n          <component :is=\"menuItem.icon\" style=\"width: 15px; height:15px;margin-right:5px\"/>\r\n          <span> {{ menuItem.name }}</span>\r\n        </el-menu-item>\r\n      </el-menu>\r\n    </el-aside>\r\n    <el-main>\r\n        <component :is=\"activeComponent\"/>\r\n    </el-main>\r\n  </el-container>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport YvStudioPrintPlan from './yv-studio-print-plan.vue'\r\nimport YvStudioPrintTemplatePaper from './yv-studio-print-template-paper.vue'\r\nimport YvStudioPrintTemplate from './yv-studio-print-template.vue'\r\nimport YvStudioPrintTerminal from './yv-studio-print-terminal.vue'\r\nimport YvStudioPrintTask from './yv-studio-print-task.vue'\r\nimport YvStudioPrintRecord from './yv-studio-print-record.vue'\r\nimport { Document } from '@element-plus/icons-vue'\r\nimport {markRaw} from \"vue\";\r\n\r\nexport default {\r\n  name: \"yv-studio-print\",\r\n  components:{\r\n    Document\r\n  },\r\n  data() {\r\n    const menuList = [\r\n      {\r\n        \"id\": \"studioPrintPlan\",\r\n        \"path\": \"printPlan\",\r\n        \"name\": \"打印场景管理\",\r\n        \"icon\": 'Document',\r\n        \"componentRaw\": markRaw(YvStudioPrintPlan)\r\n      },\r\n      {\r\n        \"id\": \"studioPrintTemplate\",\r\n        \"path\": \"printTemplate\",\r\n        \"name\": \"打印模板管理\",\r\n        \"icon\": 'Document',\r\n        \"componentRaw\": markRaw(YvStudioPrintTemplate)\r\n      },\r\n      {\r\n        \"id\": \"studioPrintTemplatePaper\",\r\n        \"path\": \"printTemplatePaper\",\r\n        \"name\": \"打印模板纸张管理\",\r\n        \"icon\": 'Document',\r\n        \"componentRaw\": markRaw(YvStudioPrintTemplatePaper)\r\n      },\r\n      {\r\n        \"id\": \"studioPrintTerminal\",\r\n        \"path\": \"printTerminal\",\r\n        \"name\": \"打印终端管理\",\r\n        \"icon\": 'Document',\r\n        \"componentRaw\": markRaw(YvStudioPrintTerminal)\r\n      },\r\n      {\r\n        \"id\": \"studioPrintTask\",\r\n        \"path\": \"printTask\",\r\n        \"name\": \"打印任务管理\",\r\n        \"icon\": 'Document',\r\n        \"componentRaw\": markRaw(YvStudioPrintTask)\r\n      },\r\n      {\r\n        \"id\": \"studioPrintRecord\",\r\n        \"path\": \"printRecord\",\r\n        \"name\": \"打印日志管理\",\r\n        \"icon\": 'Document',\r\n        \"componentRaw\": markRaw(YvStudioPrintRecord)\r\n      },\r\n    ]\r\n\r\n    return {\r\n      menuList,\r\n      activeComponent: menuList[0].componentRaw\r\n    }\r\n  },\r\n  methods: {\r\n    onSelect(menuId) {\r\n      const menu = this.menuList.find(menu => menu.id === menuId)\r\n      if (menu) {\r\n        this.activeComponent = menu.componentRaw\r\n      }\r\n      return this.menuList[0].componentRaw\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.el-main {\r\n  --el-main-padding: 0;\r\n}\r\n  .print{\r\n    width:100%;\r\n    height:100%;\r\n    overflow: hidden;\r\n    .el-aside{\r\n      .el-menu{\r\n        height:100%;\r\n        background: var(--sub-header-color);\r\n        border-right:1px solid #ccc;\r\n        .el-menu-item{\r\n          height: 50px;\r\n          &:hover,&.is-active{\r\n            background: #d7d7d7;\r\n            color: #000;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n  }\r\n</style>","<template>\r\n  <div class=\"report\">\r\n    <div class=\"toolbar\">\r\n      <el-col :span=\"6\"><div class=\"grid-content ep-bg-purple\" />\r\n        <el-button link class=\"toolbar-btn\" :icon=\"renderIcon('DocumentAdd')\" @click=\"createReport\">新建查询报表</el-button>\r\n\r\n        <el-button link class=\"toolbar-btn\" @click=\"handleDelete1\" :icon=\"renderIcon('fa Remove')\">\r\n          删除\r\n        </el-button>\r\n\r\n        <el-button link class=\"toolbar-btn\"  :icon=\"renderIcon('x-fa fa-refresh')\" @click=\"refreshReport\">\r\n          刷新\r\n        </el-button>\r\n      </el-col>\r\n\r\n      <el-col :span=\"18\"><div class=\"grid-content ep-bg-purple\" />\r\n        <el-button link class=\"toolbar-btn\" :icon=\"renderIcon('DocumentAdd')\" @click=\"saveReport\">保存</el-button>\r\n      </el-col>\r\n\r\n    </div>\r\n\r\n    <div class=\"content\">\r\n      <div class=\"content-split\">\r\n        <el-container style=\"height:100%\">\r\n          <el-aside width=\"25%\">\r\n            <el-row>\r\n              <el-input v-model=\"tableListFilter\"   placeholder=\"搜索过滤\" clearable/>\r\n            </el-row>\r\n            <el-table\r\n                        :data=\"tableData1\"\r\n                        border\r\n                        @row-click=\"selectionLineChangeHandle\"\r\n                        style=\"width: 100%;height:100%\">\r\n                      <el-table-column\r\n                          prop=\"report_id\"\r\n                          label=\"id\"\r\n                          width=\"120\">\r\n                      </el-table-column>\r\n                      <el-table-column\r\n                          prop=\"report_name\"\r\n                          label=\"报表名\"\r\n                          width=\"120\">\r\n                      </el-table-column>\r\n                      <el-table-column\r\n                          label=\"操作\"\r\n                          >\r\n                        <el-button type=\"text\" @click=\"handleDelete1\">删除</el-button>\r\n<!--                        <el-button type=\"text\" >重命名</el-button>-->\r\n                        <el-button type=\"text\" @click=\"handleEdit1\">编辑</el-button>\r\n                      </el-table-column>\r\n\r\n             </el-table>\r\n          </el-aside>\r\n          <el-main>\r\n            <el-tabs v-model=\"activeName\" type=\"card\" @tab-click=\"handleClick2\">\r\n                            <el-tab-pane label=\"SQL和查询条件\" class=\"tab-one\" name=\"first\">\r\n                              <el-row>\r\n                                <el-button type=\"info\" :icon=\"renderIcon('fa Save')\" @click=\"addQueryDialog\">添加条件</el-button>\r\n                                <el-button type=\"info\" plain :icon=\"renderIcon('fa Remove')\" @click=\"deleteRow2\">删除条件</el-button>\r\n                                <el-button type=\"info\" plain @click=\"autoAnalyse\">自动分析条件变量</el-button>\r\n                                <el-button type=\"info\" plain  @click=\"upRow\">上移</el-button>\r\n                                <el-button type=\"info\" plain  @click=\"downRow\">下移</el-button>\r\n                              </el-row>\r\n                              <el-table\r\n                                  :data=\"tableData2\"\r\n                                  border\r\n                                  ref=\"tab2\"\r\n                                  :highlight-current-row=\"true\"\r\n                                  @current-change=\"handleCurrentChange2\"\r\n                                  style=\"width: 100%;height: 30%\">\r\n                                <el-table-column\r\n                                    type=\"index\"\r\n                                    width=\"60\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"conditionFieldBind\"\r\n                                    label=\"条件变量\"\r\n                                    width=\"150\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"conditionFieldLabel\"\r\n                                    label=\"中文标题\"\r\n                                    width=\"150\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"conditionFieldXtype\"\r\n                                    label=\"编辑类型\"\r\n                                    width=\"150\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"conditionFieldFlex\"\r\n                                    label=\"权重\"\r\n                                    width=\"140\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"conditionFieldDict\"\r\n                                    label=\"字典\"\r\n                                    width=\"140\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"conditionFieldWrap\"\r\n                                    label=\"换行\"\r\n                                    width=\"140\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"conditionFieldExtend\"\r\n                                    label=\"扩展参数\"\r\n                                    width=\"150\"\r\n                                   >\r\n                                </el-table-column>\r\n                              </el-table>\r\n\r\n                              <yv-src-editor v-model=\"querySql\" language=\"sql\" style=\"height:250px;width: 1145px\"/>\r\n                            </el-tab-pane>\r\n                            <el-tab-pane label=\"查询结果字段\" class=\"tab-two\" name=\"second\">\r\n                              <el-row>\r\n                                <el-button type=\"info\" :icon=\"renderIcon('fa Save')\" @click=\"addColumnDialog\">添加</el-button>\r\n                                <el-button type=\"info\" plain :icon=\"renderIcon('fa Remove')\" @click=\"deleteRow2\">删除</el-button>\r\n                                <el-button type=\"info\" plain @click=\"upRow\">上移</el-button>\r\n                                <el-button type=\"info\" plain @click=\"downRow\">下移</el-button>\r\n                              </el-row>\r\n                              <el-table\r\n                                  :data=\"tableData3\"\r\n                                  border\r\n                                  ref=\"singleTable\"\r\n                                  @current-change=\"handleCurrentChange3\"\r\n                                  style=\"width: 100%;height: 60%\">\r\n                                <el-table-column\r\n                                    type=\"index\"\r\n                                    width=\"60\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"dataIndex\"\r\n                                    label=\"字段\"\r\n                                    width=\"100\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"header\"\r\n                                    label=\"标题\"\r\n                                    width=\"100\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"xtype\"\r\n                                    label=\"显示类型\"\r\n                                    width=\"100\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"dataType\"\r\n                                    label=\"数据类型\"\r\n                                    width=\"100\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"width\"\r\n                                    label=\"宽度\"\r\n                                    width=\"60\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"flex\"\r\n                                    label=\"权重\"\r\n                                    width=\"60\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"dict\"\r\n                                    label=\"字典\"\r\n                                    width=\"80\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"align\"\r\n                                    label=\"对齐\"\r\n                                    width=\"60\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"filterable\"\r\n                                    label=\"过滤\"\r\n                                    width=\"60\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"hidden\"\r\n                                    label=\"隐藏\"\r\n                                    width=\"60\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"sortable\"\r\n                                    label=\"排序\"\r\n                                    width=\"60\">\r\n                                </el-table-column>\r\n\r\n                                <el-table-column\r\n                                    prop=\"fieldExtend\"\r\n                                    label=\"扩展参数\"\r\n                                    width=\"100\"\r\n                                >\r\n                                </el-table-column>\r\n                              </el-table>\r\n                            </el-tab-pane>\r\n                            <el-tab-pane label=\"汇总和汇总逻辑\" class=\"tab-one\"  name=\"third\">\r\n                              <el-row>\r\n                                <el-button type=\"info\" :icon=\"renderIcon('fa Save')\" @click=\"addSummaryDialog\">添加</el-button>\r\n                                <el-button type=\"info\" plain :icon=\"renderIcon('fa Remove')\" @click=\"deleteRow2\">删除</el-button>\r\n                                <el-button type=\"info\" plain @click=\"autoAnalyse\">自动分析</el-button>\r\n                                <el-button type=\"info\" plain @click=\"upRow\">上移</el-button>\r\n                                <el-button type=\"info\" plain @click=\"downRow\">下移</el-button>\r\n                              </el-row>\r\n                              <el-table\r\n                                  :data=\"tableData4\"\r\n                                  border\r\n                                  ref=\"singleTable\"\r\n                                  @current-change=\"handleCurrentChange4\"\r\n                                  style=\"width: 100%;height: 30%\">\r\n                                <el-table-column\r\n                                    type=\"index\"\r\n                                    width=\"60\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"sumFieldBind\"\r\n                                    label=\"字段名\"\r\n                                    width=\"150\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"sumFieldLabel\"\r\n                                    label=\"标题\"\r\n                                    width=\"140\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"sumFieldFlex\"\r\n                                    label=\"权重\"\r\n                                    width=\"140\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"sumFieldWrap\"\r\n                                    label=\"换行\"\r\n                                    width=\"140\">\r\n                                </el-table-column>\r\n                                <el-table-column\r\n                                    prop=\"sumFieldExtend\"\r\n                                    label=\"扩展参数\"\r\n                                    width=\"150\"\r\n                                >\r\n                                </el-table-column>\r\n                              </el-table>\r\n                    <yv-src-editor v-model=\"summarySql\" language=\"sql\" style=\"height:250px;width: 1145px\"/>\r\n                   </el-tab-pane>\r\n            </el-tabs>\r\n\r\n          </el-main>\r\n         </el-container>\r\n\r\n\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <el-dialog :title=\"title\" v-model=\"dialogFormVisible\" :append-to-body=\"true\">\r\n    <el-form :model=\"form\">\r\n      <el-form-item label=\"报表名称\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"form.report_name\" autocomplete=\"off\" />\r\n      </el-form-item>\r\n    </el-form>\r\n    <template #footer>\r\n      <span class=\"dialog-footer\">\r\n        <el-button @click=\"dialogQueryVisible = false\">Cancel</el-button>\r\n        <el-button type=\"primary\" @click=\"dialogFormConfirm\">\r\n          Confirm\r\n        </el-button>\r\n      </span>\r\n    </template>\r\n  </el-dialog>\r\n\r\n\r\n  <el-dialog v-model=\"dialogQueryVisible\" title=\"添加查询条件\" @open=\"dialogQueryOpen\" :append-to-body=\"true\">\r\n    <el-form :model=\"queryForm\">\r\n      <el-form-item label=\"条件变量\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"queryForm.conditionFieldBind\" autocomplete=\"off\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"中文标题\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"queryForm.conditionFieldLabel\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"编辑类型\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"queryForm.conditionFieldXtype\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"权重\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"queryForm.conditionFieldFlex\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"字典\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"queryForm.conditionFieldDict\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"换行\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"queryForm.conditionFieldWrap\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"扩展参数\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"queryForm.conditionFieldExtend\" />\r\n      </el-form-item>\r\n    </el-form>\r\n    <template #footer>\r\n      <span class=\"dialog-footer\">\r\n        <el-button @click=\"dialogQueryVisible = false\">Cancel</el-button>\r\n        <el-button type=\"primary\" @click=\"dialogQueryConfirm\">\r\n          Confirm\r\n        </el-button>\r\n      </span>\r\n    </template>\r\n  </el-dialog>\r\n\r\n  <el-dialog title=\"添加查询结果字段\" v-model=\"dialogColumnVisible\" @open=\"dialogColumnOpen\" :append-to-body=\"true\">\r\n    <el-form :model=\"columnForm\">\r\n      <el-form-item label=\"字段\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"columnForm.dataIndex\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"标题\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"columnForm.header\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"显示类型\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"columnForm.xtype\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"数据类型\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"columnForm.dataType\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"宽度\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"columnForm.width\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"权重\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"columnForm.flex\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"字典\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"columnForm.dict\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"对齐\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"columnForm.align\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"过滤\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"columnForm.filterable\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"隐藏\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"columnForm.hidden\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"排序\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"columnForm.sortable\" />\r\n      </el-form-item>\r\n      <el-form-item label=\"扩展参数\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"columnForm.fieldExtend\" />\r\n      </el-form-item>\r\n    </el-form>\r\n    <template #footer>\r\n      <span class=\"dialog-footer\">\r\n        <el-button @click=\"dialogColumnVisible = false\">Cancel</el-button>\r\n        <el-button type=\"primary\" @click=\"dialogColumnConfirm\">\r\n          Confirm\r\n        </el-button>\r\n      </span>\r\n    </template>\r\n  </el-dialog>\r\n\r\n  <el-dialog title=\"添加汇总和汇总字段\" v-model=\"dialogSummaryVisible\"  @open=\"dialogSummaryOpen\" :append-to-body=\"true\">\r\n    <el-form :model=\"summaryForm\">\r\n      <el-form-item label=\"字段名\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"summaryForm.sumFieldBind\"  />\r\n      </el-form-item>\r\n      <el-form-item label=\"标题\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"summaryForm.sumFieldLabel\"  />\r\n      </el-form-item>\r\n      <el-form-item label=\"权重\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"summaryForm.sumFieldFlex\"  />\r\n      </el-form-item>\r\n      <el-form-item label=\"换行\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"summaryForm.sumFieldWrap\"  />\r\n      </el-form-item>\r\n      <el-form-item label=\"扩展参数\" :label-width=\"formLabelWidth\">\r\n        <el-input v-model=\"summaryForm.sumFieldExtend\"  />\r\n      </el-form-item>\r\n    </el-form>\r\n    <template #footer>\r\n      <span class=\"dialog-footer\">\r\n        <el-button @click=\"dialogSummaryVisible = false\">Cancel</el-button>\r\n        <el-button type=\"primary\" @click=\"dialogSummaryConfirm\">\r\n          Confirm\r\n        </el-button>\r\n      </span>\r\n    </template>\r\n  </el-dialog>\r\n\r\n</template>\r\n\r\n<script>\r\nimport {renderIcon} from '../../utils'\r\nimport JSON5 from 'json5'\r\n\r\nexport default {\r\n  components: {\r\n\r\n  },\r\n  data() {\r\n\r\n    return {\r\n      dataSelections1:null,\r\n      activeName: \"first\",\r\n      areaText: '',\r\n      num: '',\r\n      tableListFilter: null,\r\n      tableData1: [],\r\n      tableData2: [],\r\n      tableData3: [],\r\n      tableData4: [],\r\n      currentRow: {},\r\n      currentRow2: null,\r\n      currentRow3: null,\r\n      currentRow4: null,\r\n      index2: 0,\r\n      index3: 0,\r\n      index4: 0,\r\n      querySql: null,\r\n      summarySql: null,\r\n      title: '新建报表',\r\n\r\n      form:{\r\n        report_name:''\r\n      },\r\n      dialogFormVisible: false,\r\n      dialogQueryVisible: false,\r\n      dialogColumnVisible: false,\r\n      dialogSummaryVisible: false,\r\n\r\n      queryForm: {\r\n        conditionFieldBind: '',\r\n        conditionFieldLabel: '',\r\n        conditionFieldXtype: '',\r\n        conditionFieldFlex: '',\r\n        conditionFieldDict: '',\r\n        conditionFieldWrap: '',\r\n        conditionFieldExtend: ''\r\n      },\r\n      columnForm: {\r\n        dataIndex: '',\r\n        header: '',\r\n        xtype: '',\r\n        dataType: '',\r\n        width: '',\r\n        flex: '',\r\n        dict: '',\r\n        align: '',\r\n        filterable:'',\r\n        hidden:'',\r\n        sortable:'',\r\n        fieldExtend:''\r\n      },\r\n      summaryForm:{\r\n        sumFieldBind: '',\r\n        sumFieldLabel: '',\r\n        sumFieldFlex: '',\r\n        sumFieldWrap: '',\r\n        sumFieldExtend: '',\r\n      },\r\n      formLabelWidth: '100px'\r\n    }\r\n  },\r\n  watch: {\r\n    tableListFilter: function(val) {\r\n      if(val==null||val==''){\r\n        this.selectReportList()\r\n      }else{\r\n        this.tableData1 = this.tableData1.filter((item) => (item.report_id.includes(this.tableListFilter) || item.report_name.includes(this.tableListFilter)))\r\n      }\r\n    }\r\n\r\n  },\r\n  computed: {\r\n\r\n  },\r\n  mounted() {\r\n     this.selectReportList()\r\n  },\r\n  methods: {\r\n    renderIcon,\r\n    handleClick(row) {\r\n      console.log(row);\r\n    },\r\n    setCurrent(row) {\r\n      this.$refs.singleTable.setCurrentRow(row);\r\n    },\r\n    handleClick2(tab, event) {\r\n      console.log(tab, event);\r\n    },\r\n\r\n    selectionLineChangeHandle (row) {\r\n      this.dataSelections1 = row;\r\n      system.invokeStudio(\"FileManager@reportById\",{reportId: row.report_id}).then(({data}) => {\r\n        debugger\r\n\r\n        // this.tableData2 = data;\r\n        let report = data.report.replaceAll(\"\\n\",\"\");\r\n        report = JSON5.parse(report)\r\n        this.tableData2 = report.query\r\n        this.tableData3 = report.columns\r\n        this.tableData4 = report.summary\r\n        this.querySql = data.query_sql\r\n        this.summarySql = data.summary_sql\r\n\r\n      })\r\n    },\r\n    // 删除行\r\n    handleDelete1() {\r\n      this.$confirm(\"是否确认删除本条数据，删除后不可恢复?\", \"提示\", {\r\n        confirmButtonText: \"确定\",\r\n        cancelButtonText: \"取消\",\r\n        type: \"info\"\r\n      }).then(() => {\r\n        // 此为假删除，只是删除了模态框中当前行的数据，并没有真正删除表格数据\r\n        this.tableData1 = this.tableData1.filter((item) => {\r\n          return item.id != this.dataSelections1.reportId\r\n        });\r\n        let report_id =this.dataSelections1.report_id;\r\n        system.invokeStudio(\"FileManager@delReport\",{ report_id: report_id }).then(res => {\r\n          if (res.success) {\r\n            this.$message({\r\n              message: \"删除成功\",\r\n              type: \"success\",\r\n              duration: 2000\r\n            });\r\n          }\r\n        });\r\n      });\r\n    },\r\n    handleEdit1(){\r\n      this.title = '修改报表'\r\n      this.dialogFormVisible = true\r\n    },\r\n    handleCurrentChange2(val) {\r\n      this.currentRow2 = val\r\n      this.index2 = this.tableData2.findIndex(function(item){\r\n        return item.conditionFieldBind === val.conditionFieldBind\r\n      })\r\n    },\r\n    handleCurrentChange3(val) {\r\n      this.currentRow3 = val\r\n      this.index3 = this.tableData3.findIndex(function(item){\r\n        return item.dataIndex === val.dataIndex\r\n      })\r\n    },\r\n    handleCurrentChange4(val) {\r\n      this.currentRow4 = val\r\n      this.index4 = this.tableData4.findIndex(function(item){\r\n        return item.sumFieldBind === val.sumFieldBind\r\n      })\r\n    },\r\n\r\n    deleteRow2(){\r\n      if(this.activeName==\"first\"){\r\n        if(this.currentRow2!=null){\r\n          this.tableData2 = this.tableData2.filter((item) => {\r\n            return item.conditionFieldBind != this.currentRow2.conditionFieldBind\r\n          })\r\n        }\r\n\r\n      }else if(this.activeName==\"second\"){\r\n        if(this.currentRow3!=null){\r\n          this.tableData3 = this.tableData3.filter((item) => {\r\n            return item.dataIndex != this.currentRow3.dataIndex\r\n          })\r\n        }\r\n      }else{\r\n        if(this.currentRow4!=null){\r\n          this.tableData4 = this.tableData4.filter((item) => {\r\n            return item.sumFieldBind != this.currentRow4.sumFieldBind\r\n          })\r\n        }\r\n      }\r\n    },\r\n    upRow(){\r\n      if(this.activeName==\"first\"){\r\n        if(this.index2>0){\r\n          let upData = this.tableData2[this.index2 - 1];\r\n          this.tableData2.splice(this.index2 - 1, 1);\r\n          this.tableData2.splice(this.index2, 0, upData);\r\n          this.index2=this.index2-1;\r\n        }\r\n      }else if(this.activeName==\"second\"){\r\n        if(this.index3>0){\r\n          let upData = this.tableData3[this.index3 - 1];\r\n          this.tableData3.splice(this.index3 - 1, 1);\r\n          this.tableData3.splice(this.index3, 0, upData);\r\n          this.index3=this.index3-1;\r\n        }\r\n      }else{\r\n        if(this.index4>0){\r\n          let upData = this.tableData4[this.index4 - 1];\r\n          this.tableData4.splice(this.index4 - 1, 1);\r\n          this.tableData4.splice(this.index4, 0, upData);\r\n          this.index4=this.index4-1;\r\n        }\r\n      }\r\n\r\n\r\n    },\r\n    downRow(){\r\n      if(this.activeName==\"first\"){\r\n        if ((this.index2 + 1) == this.tableData2.length) {\r\n          this.$message({\r\n            message: '已经是最后一条，下移失败',\r\n            type: 'warning'\r\n          });\r\n        } else {\r\n          let downData = this.tableData2[this.index2 + 1];\r\n          this.tableData2.splice(this.index2 + 1, 1);\r\n          this.tableData2.splice(this.index2, 0, downData);\r\n          this.index2=this.index2+1;\r\n        }\r\n\r\n      }else if(this.activeName==\"second\"){\r\n        if ((this.index3 + 1) == this.tableData3.length) {\r\n          this.$message({\r\n            message: '已经是最后一条，下移失败',\r\n            type: 'warning'\r\n          });\r\n        } else {\r\n          let downData = this.tableData3[this.index3 + 1];\r\n          this.tableData3.splice(this.index3 + 1, 1);\r\n          this.tableData3.splice(this.index3, 0, downData);\r\n          this.index3=this.index3+1;\r\n        }\r\n      }else {\r\n        if ((this.index4 + 1) == this.tableData4.length) {\r\n          this.$message({\r\n            message: '已经是最后一条，下移失败',\r\n            type: 'warning'\r\n          });\r\n        } else {\r\n          let downData = this.tableData4[this.index4 + 1];\r\n          this.tableData4.splice(this.index4 + 1, 1);\r\n          this.tableData4.splice(this.index4, 0, downData);\r\n          this.index4=this.index4+1;\r\n        }\r\n      }\r\n\r\n    },\r\n    addQueryDialog(){\r\n      this.dialogQueryVisible = true;\r\n    },\r\n    addColumnDialog(){\r\n      this.dialogColumnVisible = true;\r\n    },\r\n    addSummaryDialog(){\r\n      this.dialogSummaryVisible = true;\r\n    },\r\n    dialogQueryConfirm(){\r\n      this.dialogQueryVisible = false\r\n      let arr = []\r\n      let that = this\r\n      arr.push(\r\n          {\r\n            \"conditionFieldBind\": this.queryForm.conditionFieldBind,\r\n            \"conditionFieldLabel\": this.queryForm.conditionFieldLabel,\r\n            \"conditionFieldXtype\": this.queryForm.conditionFieldXtype,\r\n            \"conditionFieldFlex\": this.queryForm.conditionFieldFlex,\r\n            \"conditionFieldDict\": this.queryForm.conditionFieldDict,\r\n            \"conditionFieldWrap\": this.queryForm.conditionFieldWrap,\r\n            \"conditionFieldExtend\": this.queryForm.conditionFieldExtend\r\n          }\r\n      )\r\n      if(this.tableData2==undefined){\r\n        this.tableData2 = arr\r\n      }else{\r\n        this.tableData2.push(\r\n            {\r\n              \"conditionFieldBind\": this.queryForm.conditionFieldBind,\r\n              \"conditionFieldLabel\": this.queryForm.conditionFieldLabel,\r\n              \"conditionFieldXtype\": this.queryForm.conditionFieldXtype,\r\n              \"conditionFieldFlex\": this.queryForm.conditionFieldFlex,\r\n              \"conditionFieldDict\": this.queryForm.conditionFieldDict,\r\n              \"conditionFieldWrap\": this.queryForm.conditionFieldWrap,\r\n              \"conditionFieldExtend\": this.queryForm.conditionFieldExtend\r\n            }\r\n        )\r\n      }\r\n\r\n\r\n    },\r\n    dialogColumnConfirm(){\r\n      this.dialogColumnVisible = false\r\n      let arr = []\r\n      arr.push(\r\n          {\r\n            dataIndex: this.columnForm.dataIndex,\r\n            header: this.columnForm.header,\r\n            xtype: this.columnForm.xtype,\r\n            dataType: this.columnForm.dataType,\r\n            width: this.columnForm.width,\r\n            flex: this.columnForm.flex,\r\n            dict: this.columnForm.dict,\r\n            align: this.columnForm.align,\r\n            filterable: this.columnForm.filterable,\r\n            hidden: this.columnForm.hidden,\r\n            sortable: this.columnForm.sortable,\r\n            fieldExtend: this.columnForm.fieldExtend\r\n          }\r\n      )\r\n      if(this.tableData3==undefined){\r\n        this.tableData3 = arr\r\n      }else{\r\n        this.tableData3.push(\r\n            {\r\n              dataIndex: this.columnForm.dataIndex,\r\n              header: this.columnForm.header,\r\n              xtype: this.columnForm.xtype,\r\n              dataType: this.columnForm.dataType,\r\n              width: this.columnForm.width,\r\n              flex: this.columnForm.flex,\r\n              dict: this.columnForm.dict,\r\n              align: this.columnForm.align,\r\n              filterable: this.columnForm.filterable,\r\n              hidden: this.columnForm.hidden,\r\n              sortable: this.columnForm.sortable,\r\n              fieldExtend: this.columnForm.fieldExtend\r\n            }\r\n        )\r\n      }\r\n\r\n    },\r\n    dialogSummaryConfirm(){\r\n      this.dialogSummaryVisible = false\r\n      let arr = [];\r\n      arr.push(\r\n          {\r\n            sumFieldBind: this.summaryForm.sumFieldBind,\r\n            sumFieldLabel: this.summaryForm.sumFieldLabel,\r\n            sumFieldFlex: this.summaryForm.sumFieldFlex,\r\n            sumFieldWrap: this.summaryForm.sumFieldWrap,\r\n            sumFieldExtend: this.summaryForm.sumFieldExtend,\r\n          }\r\n      )\r\n      if(this.tableData4==undefined){\r\n          this.tableData4 = arr\r\n      }else{\r\n        this.tableData4.push(\r\n            {\r\n              sumFieldBind: this.summaryForm.sumFieldBind,\r\n              sumFieldLabel: this.summaryForm.sumFieldLabel,\r\n              sumFieldFlex: this.summaryForm.sumFieldFlex,\r\n              sumFieldWrap: this.summaryForm.sumFieldWrap,\r\n              sumFieldExtend: this.summaryForm.sumFieldExtend,\r\n            }\r\n        )\r\n      }\r\n    },\r\n    dialogQueryOpen(){\r\n      this.queryForm.conditionFieldBind = ''\r\n      this.queryForm.conditionFieldLabel = ''\r\n      this.queryForm.conditionFieldXtype = ''\r\n      this.queryForm.conditionFieldFlex = ''\r\n      this.queryForm.conditionFieldDict = ''\r\n      this.queryForm.conditionFieldWrap = ''\r\n      this.queryForm.conditionFieldExtend = ''\r\n    },\r\n    dialogColumnOpen(){\r\n      this.columnForm.header = ''\r\n      this.columnForm.xtype = ''\r\n      this.columnForm.dataType = ''\r\n      this.columnForm.width = ''\r\n      this.columnForm.flex = ''\r\n      this.columnForm.dict = ''\r\n      this.columnForm.align = ''\r\n      this.columnForm.filterable = ''\r\n      this.columnForm.hidden = ''\r\n      this.columnForm.align = ''\r\n      this.columnForm.sortable = ''\r\n      this.columnForm.fieldExtend = ''\r\n    },\r\n    dialogSummaryOpen(){\r\n      this.summaryForm.sumFieldBind = ''\r\n      this.summaryForm.sumFieldLabel = ''\r\n      this.summaryForm.sumFieldFlex = ''\r\n      this.summaryForm.sumFieldWrap = ''\r\n      this.summaryForm.sumFieldExtend = ''\r\n    },\r\n    createReport(){\r\n       this.title = '新建报表'\r\n       this.dialogFormVisible = true\r\n    },\r\n    dialogFormConfirm(){\r\n      this.dialogFormVisible = false\r\n      system.invokeStudio(\"FileManager@createReport\",{ reportName: this.form.report_name }).then(res => {\r\n        if (res.success) {\r\n          system.invokeStudio(\"FileManager@reportList\",{}).then(({data}) => {\r\n            console.log(data)\r\n            this.tableData1 = data;\r\n          })\r\n        }\r\n      });\r\n    },\r\n   saveReport(){\r\n      if(this.dataSelections1==null){\r\n        return\r\n      }\r\n      let json = {\r\n        query: this.tableData2,\r\n        columns: this.tableData3,\r\n        summary: this.tableData4\r\n      }\r\n\r\n     system.invokeStudio(\"FileManager@saveReport\",\r\n         {\r\n               report_id: this.dataSelections1.report_id,\r\n               report_name: this.dataSelections1.report_name,\r\n               report_enable: 1,\r\n               query_sql: this.querySql,\r\n               summary_sql: this.summarySql,\r\n               report: JSON5.stringify(json)\r\n         }\r\n       ).then(res => {\r\n       if (res.success) {\r\n         system.invokeStudio(\"FileManager@reportList\",{}).then(({data}) => {\r\n           console.log(data)\r\n           this.tableData1 = data;\r\n         })\r\n       }\r\n     });\r\n   },\r\n\r\n    refreshReport(){\r\n      this.selectReportList()\r\n    },\r\n\r\n    selectReportList(){\r\n      system.invokeStudio(\"FileManager@reportList\",{}).then(({data}) => {\r\n        // console.log(data)\r\n        this.tableData1 = data;\r\n      })\r\n    },\r\n    autoAnalyse(){\r\n      if(this.activeName==\"first\"){\r\n        system.invokeStudio(\"FileManager@parseDynamicSql\", { sql: this.querySql })\r\n            .then((res) => {\r\n              if (res.success) {\r\n\r\n              }\r\n            })\r\n      }else{\r\n        system.invokeStudio(\"FileManager@parseDynamicSql\", { sql: this.summarySql })\r\n            .then((res) => {\r\n              if (res.success) {\r\n\r\n              }\r\n            })\r\n      }\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\">\r\n* {\r\n  box-sizing: border-box;\r\n}\r\n\r\n.report {\r\n  width: 100%;\r\n  height: 100%;\r\n  display: flex;\r\n  flex-direction: column;\r\n\r\n  .toolbar {\r\n    height: 38px;\r\n    flex-grow: 0;\r\n    display: flex;\r\n    flex-direction: row;\r\n    padding: 0 5px;\r\n    background: var(--sub-header-color);\r\n\r\n    .toolbar-btn {\r\n      padding: 0 10px;\r\n      line-height: 38px;\r\n      cursor: pointer;\r\n      font-size: 14px;\r\n      font-weight: normal;\r\n      &:hover {\r\n        background: #c5c5c5;\r\n        border-radius: 0;\r\n      }\r\n    }\r\n    .el-divider{\r\n      height: auto;\r\n    }\r\n\r\n  }\r\n\r\n  .sub-toolbar {\r\n    height: 38px;\r\n    line-height: 38px;\r\n    flex-grow: 0;\r\n    display: flex;\r\n    flex-direction: row;\r\n    border-top: 1px solid #ccc;\r\n    background: var(--sub-header-color);\r\n  }\r\n\r\n  .content {\r\n    flex: 1;\r\n    border-top: 1px solid #ccc;\r\n    display: flex;\r\n    flex-direction: row;\r\n    overflow: hidden;\r\n    .tree-menu {\r\n      width: 42px;\r\n      min-width: 42px;\r\n      flex-grow: 0;\r\n      display: flex;\r\n      flex-direction: column;\r\n      border-right: 1px solid #ccc;\r\n      background: var(--sub-header-color);\r\n\r\n      & > div {\r\n        cursor: pointer;\r\n        text-align: center;\r\n        padding: 15px 0;\r\n        box-sizing: border-box;\r\n\r\n        &.selected {\r\n          background: #fff;\r\n          position: relative;\r\n          transition: all .3s linear;\r\n\r\n          &:before {\r\n            content: '';\r\n            position: absolute;\r\n            width: 3px;\r\n            height: 20px;\r\n            background: var(--main-color);\r\n            top: 14px;\r\n            left: 2px;\r\n            border-radius: 5px;\r\n            transition: background 1s linear;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    .content-split {\r\n      flex-grow: 1;\r\n\r\n      .split-wrap {\r\n        height: 100%;\r\n        width: 100%;\r\n        background: var(--sub-header-color);\r\n\r\n        .left {\r\n          &>.el-table{\r\n            height: 100%;\r\n            overflow: auto;\r\n          }\r\n        }\r\n\r\n        .center {\r\n          .el-tabs{\r\n            width: 100%;\r\n            height: 100%;\r\n            display: flex;\r\n            flex-direction: column;\r\n            .el-tabs__header{\r\n              margin-bottom: 0;\r\n            }\r\n            .el-tabs__content{\r\n              flex:1;\r\n              .tab-one{\r\n                width: 100%;\r\n                height: 100%;\r\n                display: flex;\r\n                flex-direction: column;\r\n                .el-row{\r\n                  margin:6px 6px;\r\n                }\r\n                .el-table{\r\n                  height: 300px;\r\n                }\r\n\r\n              }\r\n              .tab-two{\r\n                width: 100%;\r\n                height: 100%;\r\n                display: flex;\r\n                flex-direction: column;\r\n                .el-row{\r\n                  margin:6px 6px;\r\n                }\r\n                .el-table{\r\n                  flex:1\r\n                }\r\n              }\r\n            }\r\n          }\r\n          .form-widget-container{\r\n            background: #f4f3ec;\r\n          }\r\n        }\r\n\r\n        .right {\r\n        }\r\n      }\r\n      &>.splitpanes{\r\n        &>.splitpanes__splitter{\r\n          /*background: #dcdbdc;*/\r\n        }\r\n        &.default-theme>.splitpanes__splitter:before,&.default-theme>.splitpanes__splitter:after{\r\n          background: #000;\r\n        }\r\n      }\r\n    }\r\n\r\n\r\n  }\r\n}\r\n  .report{\r\n\r\n  }\r\n</style>","<script>\r\nimport {Minus, Plus, RefreshRight,} from '@element-plus/icons-vue'\r\nimport lodash, {defer} from \"lodash\";\r\nimport {ElMessage, ElMessageBox} from \"element-plus\";\r\nimport {dict} from \"../../store\";\r\n\r\nexport default {\r\n  components: {\r\n    RefreshRight, Plus, Minus,\r\n  },\r\n  data() {\r\n    const dictData = []\r\n    lodash.each(dict.value, item => {\r\n      dictData.push({code: item.code, desc: item.desc})\r\n    })\r\n    return {\r\n      dict: dictData,\r\n      editIndex: -1,\r\n      tableWidgetListFilter: '',\r\n      addWidget: {\r\n        showAddDialog: false,\r\n        widget_path: \"\",\r\n        widget_name: \"\",\r\n      },\r\n      widget: {\r\n        loading: false,\r\n        widget_path: \"\",\r\n        widget_name: \"\",\r\n        sqlId: \"\",\r\n        sqlCode: \"\",\r\n        columnList: [],\r\n      },\r\n      widgetColumn: {\r\n        showAddDialog: false,\r\n        dataIndex: \"\",\r\n        header: \"\",\r\n        width: \"\",\r\n        format: \"\",\r\n        dict: \"\",\r\n        hidden: \"\",\r\n      },\r\n      tableWidgetLoading: false,\r\n      tableWidgetList: [],\r\n      deleteWidgetIndex: -1,\r\n\r\n      rules: {\r\n        dataIndex: [{\r\n          required: true,\r\n          message: '字段值不可为空',\r\n        }],\r\n        header: [{\r\n          required: true,\r\n          message: '字段值不可为空',\r\n        }],\r\n      },\r\n      activeTab: \"结果字段定义\"\r\n      // editableTabsValue:'结果字段定义'\r\n    }\r\n  },\r\n\r\n  methods: {\r\n    tableRow({row, rowIndex}) {\r\n      row.row_index = rowIndex\r\n    },\r\n\r\n    loadWidget() {\r\n      this.tableWidgetLoading = true\r\n      system.invokeStudio(\"DesignWidget@widgetListApi\", {}).then((res) => {\r\n        if (res.success) {\r\n          this.tableWidgetList = res.data\r\n        }\r\n      }).finally(() => {\r\n        this.tableWidgetLoading = false\r\n      })\r\n    },\r\n\r\n    widgetDelete() {\r\n      if (this.deleteWidgetIndex >= 0) {\r\n        const widgetPath = this.tableWidgetList[this.deleteWidgetIndex].widget_path\r\n        ElMessageBox.confirm(`确认删除:${widgetPath}`).then(() => {\r\n          this.tableWidgetLoading = true\r\n          system.invokeStudio(\"DesignWidget@deleteWidget\", {widgetPath}).then((res) => {\r\n            if (res.success) {\r\n              ElMessage({message: '删除成功！', type: 'success',})\r\n              this.loadWidget()\r\n            }\r\n          }).finally(() => {\r\n            this.tableWidgetLoading = false\r\n          })\r\n        })\r\n      }\r\n    },\r\n\r\n    widgetAdd() {\r\n      const widgetPath = this.addWidget.widget_path\r\n      const title = this.addWidget.widget_name\r\n      system.invokeStudio(\"DesignWidget@saveWidget\",\r\n          {\r\n            widgetPath,\r\n            form: {\r\n              title\r\n            }\r\n          }).then((res) => {\r\n        if (res.success) {\r\n          ElMessage({message: '添加成功！', type: 'success',})\r\n          this.addWidget.showAddDialog = false\r\n          this.loadWidget()\r\n        } else {\r\n          ElMessage.error(res.msg)\r\n        }\r\n      }).catch((error) => {\r\n        system.showErrorDialog(error?.response?.data?.msg)\r\n      }).finally(() => {\r\n      })\r\n    },\r\n\r\n    wigetSave() {\r\n      const widgetPath = this.widget.widget_path\r\n      const title = this.widget.widget_name\r\n      const sqlId = this.widget.sqlId\r\n      const sql = this.widget.sqlCode\r\n      const columns = this.widget.columnList\r\n      let url = this.widget.url\r\n      if (!this.widget.isUrl) {\r\n        url = '/pages/widget/Widget@query'\r\n      }\r\n\r\n      system.invokeStudio(\"DesignWidget@saveWidget\",\r\n          {\r\n            widgetPath,\r\n            form: {\r\n              title,\r\n              sqlId,\r\n              sql,\r\n              columns,\r\n              url,\r\n            }\r\n          }).then((res) => {\r\n        if (res.success) {\r\n          ElMessage({message: '添加成功！', type: 'success',})\r\n          this.addWidget.showAddDialog = false\r\n        } else {\r\n          ElMessage.error(res.msg)\r\n        }\r\n      }).catch((error) => {\r\n        system.showErrorDialog(error?.response?.data?.msg)\r\n      }).finally(() => {\r\n      })\r\n    },\r\n\r\n    widgetListClick(row, column, cell, event) {\r\n      this.deleteWidgetIndex = row.row_index\r\n      const widgetPath = row.widget_path\r\n      this.widget.widget_path = widgetPath\r\n      this.refreshWidget()\r\n    },\r\n\r\n    refreshWidget() {\r\n      const widgetPath = this.widget.widget_path\r\n      if (widgetPath) {\r\n        this.widget.loading = true\r\n        system.invokeStudio(\"DesignWidget@readWidget\", {widgetPath})\r\n            .then((res) => {\r\n              if (res.success) {\r\n                const sqlCord = res.data.sql\r\n                const widgetjs = res.data.widgetjs\r\n\r\n                this.widget.widget_path = widgetPath\r\n                this.widget.widget_name = widgetjs?.title\r\n                this.widget.sqlId = widgetjs?.dataSource?.params?.sqlId\r\n                this.widget.isUrl = (widgetjs?.dataSource?.url !== '/pages/widget/Widget@query')\r\n                this.widget.url = (widgetjs?.dataSource?.url)\r\n\r\n                const columnDataList = []\r\n                const columns = widgetjs?.columns\r\n                for (let columnIndex in columns) {\r\n                  const column = columns[columnIndex]\r\n                  if (column?.header || column?.dataIndex) {\r\n                    const columnData = {}\r\n\r\n                    columnData.header = column?.header\r\n                    columnData.dataIndex = column?.dataIndex\r\n                    columnData.width = column?.width\r\n                    columnData.hidden = column?.hidden\r\n\r\n                    /*const fix = column?.fix?.toString()\r\n                    let format, dict\r\n                    if (fix) {\r\n                      if (fix.includes(\"system.formatDate\")) {\r\n                        format = \"Date\"\r\n                      } else if (fix.includes(\"system.getDict\")) {\r\n                        dict = fix\r\n                        format = \"字典\"\r\n                      }\r\n                    }*/\r\n\r\n                    /*columnData.format = format*/\r\n                    columnData.dict = column?.dict\r\n                    columnDataList.push(columnData)\r\n                  }\r\n                }\r\n                this.widget.columnList = columnDataList\r\n\r\n                this.widget.sqlCode = sqlCord\r\n              }\r\n            })\r\n            .finally(() => {\r\n              this.widget.loading = false\r\n            })\r\n      }\r\n    },\r\n\r\n    deleteColumnRow(scope) {\r\n      const index = scope.$index\r\n      this.widget.columnList.splice(index, 1)\r\n    },\r\n\r\n    showColumnAddPage() {\r\n      this.editIndex = -1\r\n      this.widgetColumn = {}\r\n      if (this.deleteWidgetIndex >= 0) {\r\n        this.widgetColumn.showAddDialog = true\r\n      } else {\r\n        system.showErrorDialog(\"请选择一个弹框后再添加\")\r\n      }\r\n    },\r\n\r\n    widgetColumnAdd() {\r\n      const dataIndex = this.widgetColumn.dataIndex\r\n      const header = this.widgetColumn.header\r\n      const width = this.widgetColumn.width\r\n      const format = this.widgetColumn.format\r\n      const dict = this.widgetColumn.dict\r\n      const hidden = this.widgetColumn.hidden\r\n\r\n      if (this.editIndex >= 0) {\r\n        this.widget.columnList[this.editIndex] = {\r\n          dataIndex, header, width, format, dict, hidden\r\n        }\r\n      } else {\r\n        this.widget.columnList.push({\r\n          dataIndex, header, width, format, dict, hidden\r\n        })\r\n        defer(() => {\r\n          this.$refs.columnTable.scrollTo(0, 10000)\r\n          this.widgetColumn = {}\r\n        })\r\n      }\r\n\r\n      this.widgetColumn.showAddDialog = false\r\n\r\n    },\r\n\r\n    showEditColumnPage(scope) {\r\n      const index = scope.$index\r\n      this.editIndex = index\r\n      this.widgetColumn = {...this.widget.columnList[index]}\r\n      this.widgetColumn.showAddDialog = true\r\n    },\r\n\r\n    columnMoveUp(scope) {\r\n      const index = scope.$index\r\n      if (index > 0) {\r\n        [this.widget.columnList[index - 1], this.widget.columnList[index]] = [this.widget.columnList[index],\r\n          this.widget.columnList[index - 1]]\r\n      }\r\n    },\r\n\r\n    columnMoveDown(scope) {\r\n      const index = scope.$index\r\n      if ((index + 1) < this.widget.columnList.length) {\r\n        [this.widget.columnList[index + 1], this.widget.columnList[index]] = [this.widget.columnList[index],\r\n          this.widget.columnList[index + 1]]\r\n      }\r\n    },\r\n\r\n    calcColumn() {\r\n      const sqlCode = this.widget.sqlCode\r\n      this.widget.loading = true\r\n      system.invokeStudio(\"FileManager@parseDynamicSql\", {sql: sqlCode})\r\n          .then((res) => {\r\n            if (res.success) {\r\n              this.widget.columnList = res.data.map(r => {\r\n                return {dataIndex: r.columnName}\r\n              })\r\n            }\r\n          })\r\n          .finally(() => {\r\n            this.widget.loading = false\r\n          })\r\n    },\r\n\r\n    widgetListFilterEvent(value) {\r\n      if (value) {\r\n        this.tableWidgetList = this.tableWidgetList.filter((item) => (item.widget_path.includes(value) || item.widget_name.includes(value)))\r\n      }\r\n    },\r\n\r\n  },\r\n\r\n  mounted() {\r\n    this.loadWidget();\r\n  }\r\n\r\n}\r\n</script>\r\n\r\n<template>\r\n  <el-container class=\"search-widget\">\r\n    <el-aside width=\"300px\" class=\"aside\">\r\n      <div class=\"toolbar\">\r\n        <el-button @click=\"loadWidget\" link>\r\n          <el-icon>\r\n            <RefreshRight/>\r\n          </el-icon>\r\n          刷新\r\n        </el-button>\r\n        <el-button @click=\"addWidget.showAddDialog = true\" link>\r\n          <el-icon>\r\n            <Plus/>\r\n          </el-icon>\r\n          新增\r\n        </el-button>\r\n        <el-button @click=\"widgetDelete\" link>\r\n          <el-icon>\r\n            <Minus/>\r\n          </el-icon>\r\n          删除\r\n        </el-button>\r\n      </div>\r\n      <div class=\"content\">\r\n        <el-input v-model=\"tableWidgetListFilter\" @input=\"widgetListFilterEvent\" placeholder=\"搜索过滤\"/>\r\n        <el-table v-loading=\"tableWidgetLoading\" border :data=\"tableWidgetList\" style=\"flex:1\" highlight-current-row\r\n                  @row-click=\"widgetListClick\" :row-class-name=\"tableRow\">\r\n          <el-table-column prop=\"widget_path\" label=\"弹框文件\"/>\r\n          <el-table-column prop=\"widget_name\" label=\"弹框名称\"/>\r\n        </el-table>\r\n      </div>\r\n    </el-aside>\r\n    <el-container v-loading=\"widget.loading\" class=\"container\">\r\n      <div class=\"top\">\r\n        <div class=\"toolbar\">\r\n          <el-button type=\"primary\" link @click=\"refreshWidget\">刷新</el-button>\r\n          <el-button type=\"primary\" link @click=\"wigetSave\">保存</el-button>\r\n          <el-button type=\"primary\" link>预览</el-button>\r\n        </div>\r\n        <el-form :inline=\"true\" :model=\"formInline\" class=\"demo-form-inline\">\r\n          <el-form-item label=\"弹框文件:\">\r\n            <el-input v-model=\"widget.widget_path\" readonly/>\r\n          </el-form-item>\r\n          <el-form-item label=\"弹框名称:\">\r\n            <el-input v-model=\"widget.widget_name\" readonly/>\r\n          </el-form-item>\r\n          <el-form-item label=\"sqlId:\">\r\n            <el-input v-model=\"widget.sqlId\" readonly/>\r\n          </el-form-item>\r\n        </el-form>\r\n      </div>\r\n      <el-main style=\"overflow: hidden\" class=\"main\">\r\n        <el-tabs refs=\"tabs\" v-model=\"activeTab\">\r\n          <el-tab-pane label=\"结果字段定义\" name=\"结果字段定义\">\r\n            <div class=\"sql-condition\">\r\n              <div class=\"sql-condition-toolbar\">\r\n                <el-button type=\"primary\" @click=\"showColumnAddPage\">添加</el-button>\r\n                <el-button type=\"primary\" @click=\"calcColumn\">自动分析</el-button>\r\n              </div>\r\n              <el-table ref=\"columnTable\" :data=\"widget.columnList\" border>\r\n                <el-table-column type=\"index\" label=\"顺序\" width=\"60\"/>\r\n                <!--                <el-table-column prop=\"date\" label=\"字体\" width=\"180\"/>-->\r\n                <el-table-column prop=\"dataIndex\" label=\"字段英文\" width=\"180\"/>\r\n                <el-table-column prop=\"header\" label=\"字段中文\" width=\"180\"/>\r\n                <el-table-column prop=\"width\" label=\"宽度值\" width=\"80\"/>\r\n                <el-table-column prop=\"hidden\" label=\"是否隐藏\" width=\"100\"/>\r\n                <el-table-column prop=\"dict\" label=\"字典\" width=\"280\"/>\r\n                <el-table-column fixed=\"right\" label=\"操作\" width=\"220\">\r\n                  <template #default=\"scope\">\r\n                    <el-button link type=\"primary\" @click=\"deleteColumnRow(scope)\">\r\n                      删除\r\n                    </el-button>\r\n                    <el-button link type=\"primary\" @click=\"showEditColumnPage(scope)\">\r\n                      修改\r\n                    </el-button>\r\n                    <el-button link type=\"primary\" @click=\"columnMoveUp(scope)\">上移</el-button>\r\n                    <el-button link type=\"primary\" @click=\"columnMoveDown(scope)\">下移</el-button>\r\n                  </template>\r\n                </el-table-column>\r\n              </el-table>\r\n            </div>\r\n          </el-tab-pane>\r\n\r\n          <!--          <el-tab-pane label=\"SQL查询条件\" name=\"SQL查询条件\">\r\n                      <div class=\"sql-condition\">\r\n                        <div class=\"sql-condition-toolbar\">\r\n                          <el-button type=\"primary\">添加</el-button>\r\n                          &lt;!&ndash; <el-button type=\"primary\">删除</el-button>\r\n                          <el-button type=\"primary\">上移</el-button>\r\n                          <el-button type=\"primary\">下移</el-button> &ndash;&gt;\r\n                          <el-button type=\"primary\">自动分析</el-button>\r\n                        </div>\r\n                        <el-table style=\"width: 100%\">\r\n                          <el-table-column prop=\"date\" label=\"条件变量\" width=\"180\" />\r\n                          <el-table-column prop=\"name\" label=\"中文标题\" width=\"180\" />\r\n                          &lt;!&ndash;                <el-table-column prop=\"name\" label=\"编辑类型\" width=\"180\"/>\r\n                                          <el-table-column prop=\"name\" label=\"权重\" width=\"180\"/>\r\n                                          <el-table-column prop=\"name\" label=\"字典\" width=\"180\"/>\r\n                                          <el-table-column prop=\"name\" label=\"换行\" width=\"180\"/>&ndash;&gt;\r\n                        </el-table>\r\n                      </div>\r\n                    </el-tab-pane>-->\r\n        </el-tabs>\r\n        <el-form-item label=\"自定义URL请求\">\r\n          <el-switch v-model=\"widget.isUrl\"/>\r\n        </el-form-item>\r\n        <template v-if=\"widget.isUrl\">\r\n          <el-form-item label=\"URL地址\">\r\n            <el-input v-model=\"widget.url\"/>\r\n          </el-form-item>\r\n        </template>\r\n        <yv-src-editor v-else v-model=\"widget.sqlCode\" language=\"sql\" style=\"height:250px\" class=\"editor\"/>\r\n      </el-main>\r\n    </el-container>\r\n  </el-container>\r\n\r\n  <el-dialog v-model=\"addWidget.showAddDialog\" title=\"新建 widget\" width=\"25%\" center :append-to-body=\"true\">\r\n    <el-form>\r\n      <el-form-item label-width=\"100px\" label=\"弹框文件名\">\r\n        <el-input v-model=\"addWidget.widget_path\"/>\r\n      </el-form-item>\r\n      <el-form-item label-width=\"100px\" label=\"弹框名称\">\r\n        <el-input v-model=\"addWidget.widget_name\"/>\r\n      </el-form-item>\r\n    </el-form>\r\n    <template #footer>\r\n      <span class=\"dialog-footer\">\r\n        <el-button @click=\"addWidget.showAddDialog = false\">取消</el-button>\r\n        <el-button type=\"primary\" @click=\"widgetAdd\">保存</el-button>\r\n      </span>\r\n    </template>\r\n  </el-dialog>\r\n\r\n  <el-dialog v-model=\"widgetColumn.showAddDialog\" title=\"添加字段\" width=\"25%\" center :append-to-body=\"true\">\r\n    <el-form ref=\"vForm\" :rules=\"rules\">\r\n      <el-form-item label-width=\"100px\" prop=\"dataIndex\" label=\"字段英文\">\r\n        <el-input v-model=\"widgetColumn.dataIndex\"/>\r\n      </el-form-item>\r\n      <el-form-item label-width=\"100px\" prop=\"header\" label=\"字段中文\">\r\n        <el-input v-model=\"widgetColumn.header\"/>\r\n      </el-form-item>\r\n      <el-form-item label-width=\"100px\" prop=\"width\" label=\"宽度值\">\r\n        <el-input v-model=\"widgetColumn.width\"/>\r\n      </el-form-item>\r\n      <el-form-item label-width=\"100px\" prop=\"hidden\" label=\"是否隐藏\">\r\n        <el-select v-model=\"widgetColumn.hidden\" filterable clearable>\r\n          <el-option key=\"1\" label=\"是\" value=\"true\"/>\r\n          <el-option key=\"2\" label=\"否\" value=\"false\"/>\r\n        </el-select>\r\n      </el-form-item>\r\n\r\n      <!--      <el-form-item label-width=\"100px\" prop=\"format\" label=\"格式化\">\r\n              <el-input v-model=\"widgetColumn.format\" />\r\n            </el-form-item>-->\r\n      <el-form-item label-width=\"100px\" prop=\"dict\" label=\"字典值\">\r\n        <!--        <el-input v-model=\"widgetColumn.dict\" />-->\r\n        <el-select v-model=\"widgetColumn.dict\" filterable clearable>\r\n          <el-option v-for=\"item in dict\" :key=\"item.code\" :label=\"item.desc\" :value=\"item.code\"/>\r\n        </el-select>\r\n\r\n      </el-form-item>\r\n    </el-form>\r\n    <template #footer>\r\n      <span class=\"dialog-footer\">\r\n        <el-button @click=\"widgetColumn.showAddDialog = false\">取消</el-button>\r\n        <el-button type=\"primary\" @click=\"widgetColumnAdd\">保存</el-button>\r\n      </span>\r\n    </template>\r\n  </el-dialog>\r\n\r\n\r\n</template>\r\n<style lang=\"less\">\r\n.search-widget {\r\n  height: 100%;\r\n  overflow: hidden;\r\n  display: flex;\r\n  flex-direction: row;\r\n\r\n  .aside {\r\n    overflow: hidden;\r\n    display: flex;\r\n    flex-direction: column;\r\n    background: var(--sub-header-color);\r\n\r\n    .toolbar {\r\n      background: var(--sub-header-color);\r\n      height: 38px;\r\n      padding-left: 10px;\r\n\r\n      .el-button {\r\n        padding: 0 10px;\r\n        line-height: 38px;\r\n        cursor: pointer;\r\n        font-size: 14px;\r\n        font-weight: normal;\r\n        color: var(--el-button-text-color);\r\n\r\n        &:not(.is-disabled):focus, &:not(.is-disabled):hover {\r\n          background: #c5c5c5;\r\n          border-radius: 0;\r\n          color: #000;\r\n        }\r\n      }\r\n    }\r\n\r\n    .content {\r\n      flex: 1;\r\n      display: flex;\r\n      flex-direction: column;\r\n      overflow: hidden;\r\n      margin: 0 10px 10px 10px;\r\n\r\n      & > .el-input {\r\n        margin-bottom: 5px;\r\n\r\n        .el-input__wrapper {\r\n          border-radius: 0;\r\n        }\r\n      }\r\n\r\n      .el-table {\r\n        border: 1px solid #e5e5e5;\r\n\r\n        th.el-table__cell {\r\n          background: #f0f0f0;\r\n        }\r\n\r\n        .cell {\r\n          font-size: 14px;\r\n          color: #333\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  .container {\r\n    display: flex;\r\n    flex-direction: column;\r\n    background: var(--sub-header-color);\r\n\r\n    .top {\r\n      background: #fff;\r\n      border-bottom: 1px solid #e5e5e5;\r\n      border-left: 1px solid #e5e5e5;\r\n\r\n      .toolbar {\r\n        height: 38px;\r\n        border-bottom: 1px solid #e5e5e5;\r\n        margin-bottom: 10px;\r\n\r\n        .el-button {\r\n          padding: 0 12px;\r\n          line-height: 38px;\r\n          cursor: pointer;\r\n          font-size: 14px;\r\n          font-weight: normal;\r\n          color: var(--main-color);\r\n          border: none;\r\n\r\n          &:not(.is-disabled):focus, &:not(.is-disabled):hover {\r\n            background: #c5c5c5;\r\n            border-radius: 0;\r\n            color: #000;\r\n          }\r\n        }\r\n      }\r\n\r\n      .el-form-item {\r\n        margin-bottom: 12px\r\n      }\r\n    }\r\n  }\r\n\r\n  .main {\r\n    display: flex;\r\n    flex-direction: column;\r\n    padding: 0;\r\n\r\n    .el-tabs {\r\n      flex: 1;\r\n      display: flex;\r\n      flex-direction: column;\r\n      overflow: hidden;\r\n\r\n      & > .el-tabs__header {\r\n        border-color: #ccc;\r\n        margin: 0;\r\n\r\n        .el-tabs__active-bar {\r\n          background-color: var(--main-color);\r\n        }\r\n\r\n        .el-tabs__item.is-active {\r\n          color: #000\r\n        }\r\n\r\n        .el-tabs__nav-wrap::after {\r\n          height: 1px;\r\n          background-color: #ccc;\r\n        }\r\n      }\r\n\r\n      & > .el-tabs__content {\r\n        flex: 1;\r\n        background: #fff;\r\n        padding: 0 10px;\r\n        border: 1px solid #e5e5e5;\r\n        border-top: 0;\r\n\r\n        & > .el-tab-pane {\r\n          height: 100%;\r\n\r\n          .el-table {\r\n            /*border:1px solid #e5e5e5;*/\r\n\r\n            th.el-table__cell {\r\n              background: #f0f0f0;\r\n            }\r\n\r\n            .cell {\r\n              font-size: 14px;\r\n              color: #333\r\n            }\r\n          }\r\n\r\n          .sql-condition {\r\n            height: 100%;\r\n            display: flex;\r\n            flex-direction: column;\r\n\r\n            .sql-condition-toolbar {\r\n              padding: 10px 0;\r\n            }\r\n\r\n            .el-table {\r\n              flex: 1;\r\n              margin-bottom: 10px\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    .editor {\r\n      height: 300px;\r\n      margin: 10px 0 10px 0;\r\n      border: 1px solid #e5e5e5;\r\n    }\r\n  }\r\n}\r\n</style>","export default {\r\n    props: {\r\n        _input: {\r\n            required: false,\r\n        },\r\n    },\r\n    data: {\r\n        vjson: {\r\n            items: [\r\n                {\r\n                    xtype: 'toolbar',\r\n                    items: [\r\n                        {\r\n                            xtype: 'button',\r\n                            text: '验收',\r\n                            iconCls: 'x-fa fa-check-square-o',\r\n                            listeners: {\r\n                                click: '{save}',\r\n                            },\r\n                        },\r\n                        {\r\n                            xtype: 'button',\r\n                            text: '明细拆分',\r\n                            iconCls: 'x-fa fa-sitemap',\r\n                            listeners: {\r\n                                click: 'order_split',\r\n                            },\r\n                        },\r\n                        {\r\n                            xtype: 'button',\r\n                            text: '刷新',\r\n                            iconCls: 'x-fa fa-repeat',\r\n                            listeners: {\r\n                                click: 'reload',\r\n                            },\r\n                        },\r\n                    ]\r\n                },\r\n                {\r\n                    xtype: 'split',\r\n                    defaultSize: 25,\r\n                    items: [\r\n                        {\r\n                            items: [\r\n                                {\r\n                                    xtype: 'split',\r\n                                    defaultSize: 66,\r\n                                    hiddenSplit: true,\r\n                                    items: [\r\n                                        {\r\n                                            items: [\r\n                                                {\r\n                                                    xtype: 'yvgrid',\r\n                                                    reference: 'theGrid1',\r\n                                                    pagination: true,\r\n                                                    autoLoad: true,\r\n                                                    _mode: 'select',\r\n                                                    listeners: {\r\n                                                        itemclick: '{grid1Itemclick}',\r\n                                                        // dataLoadComplete: 'scope.dataLoadComplete',\r\n                                                    },\r\n                                                    dataSource: {\r\n                                                        url: '/inbound/order_in_check/OrderInCheck@queryOrder',\r\n                                                        method: 'invoke',\r\n                                                        params: {\r\n                                                            order_in_code: '{form.order_in_code}',\r\n                                                            business_code: '{form.business_code}',\r\n                                                            barcode: '{form.barcode}',\r\n                                                            item_code: '{form.item_code}',\r\n                                                            order_biz_type: '{form.order_biz_type}',\r\n                                                        },\r\n                                                    },\r\n                                                    columns: [\r\n                                                        {dataIndex: 'order_in_id', header: '单据ID', hidden: true},\r\n                                                        {dataIndex: 'order_in_code', header: '单据编号',},\r\n                                                        {dataIndex: 'customer_code', header: '供应商编号',},\r\n                                                        {dataIndex: 'supplier_name', header: '供应商名称',},\r\n                                                        {dataIndex: 'dates', header: '开票时间',},\r\n                                                        {dataIndex: 'business_code', header: '业务单据编号',},\r\n                                                        {dataIndex: 'order_type', header: '订单类型', fix: ['system.getDict(\"ORDER_TYPE\")']},\r\n                                                        {dataIndex: 'order_biz_type', header: '业务类型', fix: ['system.getDict(\"ASN_TYPE\")']},\r\n                                                        {dataIndex: 'asn_staff', header: '采购员',},\r\n                                                        {dataIndex: 'order_staff', header: '收货员',},\r\n                                                    ],\r\n                                                }\r\n                                            ],\r\n                                        },\r\n                                        {\r\n                                            items: [\r\n                                                {\r\n                                                    xtype: 'form',\r\n                                                    title: \"查询条件\",\r\n                                                    colsOfRow: 2,\r\n                                                    items: [\r\n                                                        {\r\n                                                            xtype: 'textfield',\r\n                                                            fieldLabel: '入库单据号',\r\n                                                            bind: {\r\n                                                                value: \"{form.order_in_code}\"\r\n                                                            },\r\n                                                            enableKeyEvents: true,\r\n                                                            listeners: {\r\n                                                                keyup: \"{searchEvent1}\"\r\n                                                            }\r\n                                                        },\r\n                                                        {\r\n                                                            xtype: 'textfield',\r\n                                                            fieldLabel: '业务单据号',\r\n                                                            bind: {\r\n                                                                value: \"{form.business_code}\"\r\n                                                            },\r\n                                                            enableKeyEvents: true,\r\n                                                            listeners: {\r\n                                                                keyup: \"{searchEvent1}\"\r\n                                                            }\r\n                                                        },\r\n                                                        {\r\n                                                            xtype: 'textfield',\r\n                                                            fieldLabel: '托盘号',\r\n                                                            bind: {\r\n                                                                value: \"{form.barcode}\"\r\n                                                            },\r\n                                                            enableKeyEvents: true,\r\n                                                            listeners: {\r\n                                                                keyup: \"{searchEvent2}\"\r\n                                                            }\r\n                                                        },\r\n                                                        {\r\n                                                            xtype: 'textfield',\r\n                                                            fieldLabel: '商品搜索',\r\n                                                            bind: {\r\n                                                                value: \"{form.item_code}\"\r\n                                                            },\r\n                                                            enableKeyEvents: true,\r\n                                                            listeners: {\r\n                                                                keyup: \"{searchEvent2}\"\r\n                                                            }\r\n                                                        },\r\n                                                        {\r\n                                                            xtype: 'combo',\r\n                                                            fieldLabel: '订单类型',\r\n                                                            bind: {\r\n                                                                value: '{form.order_biz_type}'\r\n                                                            },\r\n                                                            fix: ['system.getDict(\"ASN_TYPE\")'],\r\n                                                            listeners: {\r\n                                                                change: \"{changeOrder_biz_type}\"\r\n                                                            },\r\n                                                        },\r\n                                                    ],\r\n                                                },\r\n                                            ],\r\n                                        },\r\n                                    ],\r\n                                    hidden: true,\r\n                                },\r\n                            ],\r\n                        },\r\n                        {\r\n                            items: [\r\n                                {\r\n                                    xtype: 'yvgrid',\r\n                                    // pagination: false,\r\n                                    reference: 'grid1',\r\n                                    // remoteSort: false,\r\n                                    autoLoad: false,\r\n                                    height: '100%',\r\n                                    width: '100%',\r\n                                    minHeight: 300,\r\n                                    _mode: 'checkOnly',\r\n                                    // store: {},\r\n                                    dataSource: {\r\n                                        url: '/inbound/order_in_check/OrderInCheck@queryOrderDetails',\r\n                                        method: 'invoke',\r\n                                        params: {\r\n                                            order_in_id: \"{theGrid1.selection.order_in_id}\",\r\n                                            barcode: '{form.barcode}',\r\n                                            item_code: '{form.item_code}',\r\n                                        },\r\n                                    },\r\n                                    columns: [\r\n                                        {xtype: \"rownumberer\", header: \"序号\"},\r\n                                        {dataIndex: 'asn_in_id', header: '订单ID', hidden: true},\r\n                                        {dataIndex: 'asn_in_code', header: '采购单号'},\r\n                                        {dataIndex: 'asn_line_no', header: '采购单行号'},\r\n                                        {dataIndex: 'business_code', header: '业务单号'},\r\n                                        {dataIndex: 'business_code_line', header: '业务单号行号'},\r\n                                        {dataIndex: 'stock_env', header: '存储条件', fix: ['system.getDict(\"STOCK_ENV\")']},\r\n                                        {dataIndex: 'item_id', header: '商品Id', hidden: true},\r\n                                        {dataIndex: 'item_code', header: '商品编号'},\r\n                                        {dataIndex: 'item_name', header: '商品名称'},\r\n                                        {dataIndex: 'item_desc', header: '商品描述'},\r\n                                        {dataIndex: 'manufacturer', header: '厂家'},\r\n                                        {dataIndex: 'origin', header: '产地'},\r\n                                        {dataIndex: 'approval_no', header: '批准文号'},\r\n                                        {dataIndex: 'package_id', header: '包装编号Id', hidden: true},\r\n                                        {dataIndex: 'package_item_id', header: '包装明细Id', hidden: true},\r\n                                        {dataIndex: 'is_unpack', header: '是否拆包', hidden: true},\r\n                                        {dataIndex: 'package_level', hidden: true},\r\n                                        {\r\n                                            dataIndex: 'package_name', header: '商品包装',\r\n                                            // editor: {\r\n                                            //     allowBlank: false,\r\n                                            //     xtype: 'combogrid',\r\n                                            //     editEnable: {\r\n                                            //         condition: '(item_id)',\r\n                                            //         errorMsg: \"商品ID为空\",\r\n                                            //     },\r\n                                            //     param: {\r\n                                            //         item_id: '{item_id}',\r\n                                            //     },\r\n                                            //     lookup: {\r\n                                            //         medium: '{medium}',\r\n                                            //         large: '{large}',\r\n                                            //         // package_id: '{package_id}',\r\n                                            //         // package_level: '{package_level}',\r\n                                            //         // package_level_name: '{package_level_name}',\r\n                                            //         // package_meas: '{package_meas}',\r\n                                            //         // is_unpack: '{is_unpack}',\r\n                                            //         // primary_meas: '{primary_meas}',\r\n                                            //         // package_item_id: '{package_item_id}',\r\n                                            //         // primary_unit: '{primary_unit}',\r\n                                            //         // package_unit: '{package_unit}',\r\n                                            //     },\r\n                                            //     fix: [\r\n                                            //         'system.getGrid(\"./widget/PackageSearch\")',\r\n                                            //     ],\r\n                                            //     listeners: {\r\n                                            //         change: 'packageChange'\r\n                                            //     }\r\n                                            // }\r\n                                        },\r\n                                        {dataIndex: 'package_meas', header: '计量规格(收货单位)', hidden: true},\r\n                                        {dataIndex: 'package_unit', header: '包装单位(收货单位)', hidden: true},\r\n                                        {dataIndex: 'primary_meas', header: '计量规格(主单位)', hidden: true},\r\n                                        {dataIndex: 'primary_unit', header: '包装单位(主单位)', hidden: true},\r\n                                        {dataIndex: 'primary_item_id', header: '主单位包装Id', hidden: true},\r\n                                        {dataIndex: 'medium', header: '包装数量'},\r\n                                        {\r\n                                            dataIndex: 'large', header: '码放件数',\r\n                                            listeners: {\r\n                                                // dblclick: 'scope.clickLarge',\r\n                                            },\r\n                                        },\r\n                                        {header: '采购数量', dataIndex: 'qty',},\r\n                                        {\r\n                                            dataIndex: 'surplus_piece', header: '件数',\r\n                                            editor: {\r\n                                                xtype: 'numberfield',\r\n                                                decimalPrecision: 0,\r\n                                                listeners: {\r\n                                                    // change: 'scope.orderQtyPiece'\r\n                                                }\r\n                                            }\r\n                                        },\r\n                                        {\r\n                                            dataIndex: 'surplus_less', header: '零散数',\r\n                                            editor: {\r\n                                                xtype: 'numberfield',\r\n                                                decimalPrecision: 0,\r\n                                                listeners: {\r\n                                                    // change: 'scope.qtyLessChange'\r\n                                                }\r\n                                            },\r\n                                        },\r\n                                        {header: '数量', dataIndex: 'surplus_qty',},\r\n                                        {\r\n                                            dataIndex: 'intention_in', header: '入库意向',\r\n                                            dict: 'INTENTION_IN',\r\n                                            editor: {\r\n                                                allowBlank: false,\r\n                                                xtype: 'combobox',\r\n                                            },\r\n                                        },\r\n                                        {\r\n                                            dataIndex: 'price', header: '价格',\r\n                                            editor: {\r\n                                                allowBlank: true,\r\n                                                decimalPrecision: 4,\r\n                                                xtype: 'numberfield',\r\n                                            },\r\n                                        },\r\n                                        {\r\n                                            dataIndex: 'quality', header: '质量状态',\r\n                                            dict: \"QUALITY_ORDER_IN\",\r\n                                            editor: {\r\n                                                allowBlank: false,\r\n                                                xtype: 'combobox',\r\n                                            },\r\n                                        },\r\n                                        {\r\n                                            dataIndex: 'reject_reason', header: '拒收原因',\r\n                                            dict: 'REJECT_REASON',\r\n                                            editor: {\r\n                                                allowBlank: false,\r\n                                                xtype: 'combobox',\r\n                                            },\r\n                                        },\r\n                                        {dataIndex: 'item_mhdhb', header: '货架寿命', hidden: true},\r\n                                        {\r\n                                            dataIndex: 'lot01',\r\n                                            header: '批号',\r\n                                            // editor: {\r\n                                            //     allowBlank: false,\r\n                                            //     xtype: 'combogrid',\r\n                                            //     param: {\r\n                                            //         item_id: '{item_id}',\r\n                                            //     },\r\n                                            //     lookup: {\r\n                                            //         lot_id: '{lot_id}',\r\n                                            //         lot01: '{lot01}',\r\n                                            //         lot02: '{lot02}',\r\n                                            //         lot03: '{lot03}',\r\n                                            //         lot04: '{lot04}',\r\n                                            //         lot05: '{lot05}',\r\n                                            //         lot06: '{lot06}',\r\n                                            //     },\r\n                                            //     fix: [\r\n                                            //         'system.getGrid(\"./widget/LotSearch\")',\r\n                                            //     ],\r\n                                            //     listeners: {\r\n                                            //         // change: 'scope.changeLot01'\r\n                                            //     }\r\n                                            // },\r\n                                        },\r\n                                        {\r\n                                            dataIndex: 'lot02', header: '生产日期',\r\n                                            fix: ['system.formatDate()'],\r\n                                            editor: {\r\n                                                xtype: 'datefield',\r\n                                                allowBlank: false,\r\n                                                listeners: {\r\n                                                    // change: 'scope.changeLot02'\r\n                                                }\r\n                                            },\r\n                                        },\r\n                                        {\r\n                                            dataIndex: 'lot03', header: '有效期至',\r\n                                            fix: ['system.formatDate()'],\r\n                                            editor: {\r\n                                                xtype: 'datefield',\r\n                                                allowBlank: false,\r\n                                                listeners: {\r\n                                                    // change: 'scope.changeLot03'\r\n                                                }\r\n                                            },\r\n                                        },\r\n                                        {\r\n                                            dataIndex: 'lot04', header: '供应商批次',\r\n                                            editor: {\r\n                                                xtype: 'textfield',\r\n                                            },\r\n                                        },\r\n                                        {\r\n                                            dataIndex: 'lot05', header: '新旧批次',\r\n                                            editor: {\r\n                                                xtype: 'textfield',\r\n                                            },\r\n                                        },\r\n                                        {\r\n                                            dataIndex: 'lot06', header: '虚拟货主',\r\n                                        },\r\n                                        {\r\n                                            dataIndex: 'barcode', header: '托盘号',\r\n                                            // editor: {\r\n                                            //     xtype: 'combogrid',\r\n                                            //     lookup: {\r\n                                            //         container_code: '{barcode}',\r\n                                            //     },\r\n                                            //     param: {\r\n                                            //         wh_id: '{wh_id}',\r\n                                            //         container_state: '0',\r\n                                            //         container_type: '1',\r\n                                            //     },\r\n                                            //     fix: [\r\n                                            //         'system.getGrid(\"./widget/ContainerSearch\")',\r\n                                            //     ],\r\n                                            // },\r\n                                        },\r\n                                        {\r\n                                            dataIndex: 'zzx', header: '周转箱',\r\n                                            // editor: {\r\n                                            //     xtype: 'combogrid',\r\n                                            //     lookup: {\r\n                                            //         container_code: '{zzx}',\r\n                                            //     },\r\n                                            //     param: {\r\n                                            //         wh_id: '{wh_id}',\r\n                                            //         container_state: '0',\r\n                                            //         container_type: '2',\r\n                                            //     },\r\n                                            //     fix: [\r\n                                            //         'system.getGrid(\"./widget/ContainerSearch\")',\r\n                                            //     ],\r\n                                            // },\r\n                                        },\r\n                                        {\r\n                                            dataIndex: 'tracks',\r\n                                            header: '唯一码',\r\n                                            listeners: {\r\n                                                // dblclick: 'scope.clickTracks',\r\n                                            },\r\n                                        },\r\n                                        {\r\n                                            dataIndex: 'is_quick_in', header: '是否快速入库',\r\n                                            fix: ['system.getDict(\"YESNO\")'],\r\n                                        },\r\n                                        {dataIndex: 'is_check', header: '是否需要质检', hidden: true},\r\n                                        {\r\n                                            dataIndex: 'rule_name', header: '规则名称',\r\n                                        },\r\n                                        {\r\n                                            dataIndex: 'lot12', header: '库存地点', fix: ['system.getDict(\"LOC_PLACE\")'],\r\n                                        },\r\n                                        {\r\n                                            dataIndex: 'loc_place', header: '选择库存', fix: ['system.getDict(\"LOC_PLACE\")'],\r\n                                            editor: {\r\n                                                xtype: \"combobox\",\r\n                                                dict: 'LOC_PLACE',\r\n                                                listeners: {\r\n                                                    // change: 'scope.changeLocPlace'\r\n                                                }\r\n                                            }\r\n                                        }\r\n                                    ],\r\n                                }\r\n                            ]\r\n                        },\r\n                    ],\r\n                    horizontal: true,\r\n                    hidden: false,\r\n                },\r\n            ],\r\n        },\r\n    },\r\n    computed: {},\r\n    methods: {\r\n        grid1Itemclick() {\r\n            this.refs.grid1.reload()\r\n        },\r\n        order_split() {\r\n\r\n        },\r\n        reload() {\r\n\r\n        },\r\n        packageChange() {\r\n\r\n        },\r\n        drawAsn1(e) {\r\n\r\n        },\r\n        drawAsn2(e) {\r\n\r\n        },\r\n        drawAsn3(e) {\r\n\r\n        },\r\n        drawAsn4(e) {\r\n\r\n        },\r\n        bccg(e) {\r\n\r\n        },\r\n        clearView(e) {\r\n\r\n        },\r\n        addDJMX(e) {\r\n\r\n        },\r\n        removeDetail(e) {\r\n\r\n        },\r\n        delDJMX2(e) {\r\n\r\n        },\r\n        locNotFound(e) {\r\n\r\n        },\r\n        searchEvent1() {\r\n        },\r\n        searchEvent2() {\r\n        },\r\n        changeOrder_biz_type() {\r\n        },\r\n        textfield1_change(a, b, c) {\r\n            console.log(a, b, c)\r\n        },\r\n    },\r\n}\r\n","<template>\r\n  <YvDesignSpread  type=\"demo\"/>\r\n  <!--\r\n  <div id=\"x-spreadsheet-demo\" style=\"height: 100%;\"></div>\r\n  -->\r\n</template>\r\n\r\n<script>\r\nimport design from './yv-studio-tools.design'\r\nimport {VJsonContext} from \"../../components\"\r\nimport Split from '../../components/split.vue'\r\nimport SplitArea from '../../components/split-area.vue'\r\nimport YvDesignSpread from \"../../components/design/designPrint/yv-designer-spread.vue\"\r\n\r\nexport default {\r\n  //@ts-ignore\r\n  mixins: [design],\r\n  components: {\r\n    Split,\r\n    SplitArea,\r\n    YvDesignSpread,\r\n  },\r\n  data() {\r\n    const vcxt = VJsonContext.createRuntime(this)\r\n    return {\r\n      AA: 1,\r\n      STR: '',\r\n      vcxt,\r\n      isShow: true,\r\n      isDrawer: false,\r\n    }\r\n  },\r\n  mounted() {\r\n\r\n    const saveIcon = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTc3MTc3MDkyOTg4IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI2NzgiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTIxMy4zMzMzMzMgMTI4aDU5Ny4zMzMzMzRhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMSA4NS4zMzMzMzMgODUuMzMzMzMzdjU5Ny4zMzMzMzRhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMS04NS4zMzMzMzMgODUuMzMzMzMzSDIxMy4zMzMzMzNhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMS04NS4zMzMzMzMtODUuMzMzMzMzVjIxMy4zMzMzMzNhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMSA4NS4zMzMzMzMtODUuMzMzMzMzeiBtMzY2LjkzMzMzNCAxMjhoMzQuMTMzMzMzYTI1LjYgMjUuNiAwIDAgMSAyNS42IDI1LjZ2MTE5LjQ2NjY2N2EyNS42IDI1LjYgMCAwIDEtMjUuNiAyNS42aC0zNC4xMzMzMzNhMjUuNiAyNS42IDAgMCAxLTI1LjYtMjUuNlYyODEuNmEyNS42IDI1LjYgMCAwIDEgMjUuNi0yNS42ek0yMTMuMzMzMzMzIDIxMy4zMzMzMzN2NTk3LjMzMzMzNGg1OTcuMzMzMzM0VjIxMy4zMzMzMzNIMjEzLjMzMzMzM3ogbTEyOCAwdjI1NmgzNDEuMzMzMzM0VjIxMy4zMzMzMzNoODUuMzMzMzMzdjI5OC42NjY2NjdhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMS00Mi42NjY2NjcgNDIuNjY2NjY3SDI5OC42NjY2NjdhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMS00Mi42NjY2NjctNDIuNjY2NjY3VjIxMy4zMzMzMzNoODUuMzMzMzMzek0yNTYgMjEzLjMzMzMzM2g4NS4zMzMzMzMtODUuMzMzMzMzeiBtNDI2LjY2NjY2NyAwaDg1LjMzMzMzMy04NS4zMzMzMzN6IG0wIDU5Ny4zMzMzMzR2LTEyOEgzNDEuMzMzMzMzdjEyOEgyNTZ2LTE3MC42NjY2NjdhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMSA0Mi42NjY2NjctNDIuNjY2NjY3aDQyNi42NjY2NjZhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMSA0Mi42NjY2NjcgNDIuNjY2NjY3djE3MC42NjY2NjdoLTg1LjMzMzMzM3ogbTg1LjMzMzMzMyAwaC04NS4zMzMzMzMgODUuMzMzMzMzek0zNDEuMzMzMzMzIDgxMC42NjY2NjdIMjU2aDg1LjMzMzMzM3oiIHAtaWQ9IjI2NzkiIGZpbGw9IiMyYzJjMmMiPjwvcGF0aD48L3N2Zz4='\r\n    const previewIcon = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjIxMzI4NTkxMjQzIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjU2NjMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNTEyIDE4Ny45MDRhNDM1LjM5MiA0MzUuMzkyIDAgMCAwLTQxOC41NiAzMTUuNjQ4IDQzNS4zMjggNDM1LjMyOCAwIDAgMCA4MzcuMTIgMEE0MzUuNDU2IDQzNS40NTYgMCAwIDAgNTEyIDE4Ny45MDR6TTUxMiAzMjBhMTkyIDE5MiAwIDEgMSAwIDM4NCAxOTIgMTkyIDAgMCAxIDAtMzg0eiBtMCA3Ni44YTExNS4yIDExNS4yIDAgMSAwIDAgMjMwLjQgMTE1LjIgMTE1LjIgMCAwIDAgMC0yMzAuNHpNMTQuMDggNTAzLjQ4OEwxOC41NiA0ODUuNzZsNC44NjQtMTYuMzg0IDQuOTI4LTE0Ljg0OCA4LjA2NC0yMS41NjggNC4wMzItOS43OTIgNC43MzYtMTAuODggOS4zNDQtMTkuNDU2IDEwLjc1Mi0yMC4wOTYgMTIuNjA4LTIxLjMxMkE1MTEuNjE2IDUxMS42MTYgMCAwIDEgNTEyIDExMS4xMDRhNTExLjQ4OCA1MTEuNDg4IDAgMCAxIDQyNC41MTIgMjI1LjY2NGwxMC4yNCAxNS42OGMxMS45MDQgMTkuMiAyMi41OTIgMzkuMTA0IDMyIDU5Ljc3NmwxMC40OTYgMjQuOTYgNC44NjQgMTMuMTg0IDYuNCAxOC45NDQgNC40MTYgMTQuODQ4IDQuOTkyIDE5LjM5Mi0zLjIgMTIuODY0LTMuNTg0IDEyLjgtNi40IDIwLjA5Ni00LjQ4IDEyLjYwOC00Ljk5MiAxMi45MjhhNTExLjM2IDUxMS4zNiAwIDAgMS0xNy4yOCAzOC40bC0xMi4wMzIgMjIuNC0xMS45NjggMjAuMDk2QTUxMS41NTIgNTExLjU1MiAwIDAgMSA1MTIgODk2YTUxMS40ODggNTExLjQ4OCAwIDAgMS00MjQuNDQ4LTIyNS42bC0xMS4zMjgtMTcuNTM2YTUxMS4yMzIgNTExLjIzMiAwIDAgMS0xOS44NC0zNS4wMDhMNTMuMzc2IDYxMS44NGwtOC42NC0xOC4yNC0xMC4xMTItMjQuMTI4LTcuMTY4LTE5LjY0OC04LjMyLTI2LjYyNC0yLjYyNC05Ljc5Mi0yLjQ5Ni05LjkyeiIgcC1pZD0iNTY2NCI+PC9wYXRoPjwvc3ZnPg=='\r\n\r\n    // Spreadsheet.locale('zh-cn', zhCn)\r\n    const options = {\r\n      mode: 'edit',\r\n      showToolbar: true,\r\n      showGrid: true,\r\n      showBottomBar: false,\r\n      showContextmenu: true,\r\n      extendContextMenu: {\r\n        top: [\r\n          {\r\n            key: 'vv', title: () => 'VV',\r\n            onClick: (data, sheet) => {\r\n              console.log('vv It', data, sheet)\r\n            }\r\n          },\r\n          {\r\n            tip: 'vv2', title: () => 'VV2',\r\n            onClick: (data, sheet) => {\r\n              console.log('vv2 It', data, sheet)\r\n            }\r\n          },\r\n          {key: 'divider'},\r\n        ],\r\n        bottom: [\r\n          {key: 'divider'},\r\n          {\r\n            tip: 'vb', title: () => 'VB',\r\n            onClick: (data, sheet) => {\r\n              console.log('vb It', data, sheet)\r\n            }\r\n          },\r\n          {\r\n            tip: 'vb2', title: () => 'VB2',\r\n            onClick: (data, sheet) => {\r\n              console.log('vb2 It', data, sheet)\r\n            }\r\n          }\r\n        ]\r\n      },\r\n      extendToolbar: {\r\n        left: [\r\n          {\r\n            tip: 'Save',\r\n            icon: saveIcon,\r\n            onClick: (data, sheet) => {\r\n              console.log('click save button：', data, sheet)\r\n            }\r\n          }\r\n        ],\r\n        right: [\r\n          {\r\n            tip: 'Preview',\r\n            el: previewIcon,\r\n            onClick: (data, sheet) => {\r\n              console.log('click preview button：', data)\r\n            }\r\n          }\r\n        ],\r\n      },\r\n      view: {\r\n        height: () => document.getElementById('x-spreadsheet-demo').clientHeight,\r\n        width: () => document.getElementById('x-spreadsheet-demo').clientWidth,\r\n      },\r\n      row: {\r\n        len: 100,\r\n        height: 25,\r\n      },\r\n      col: {\r\n        len: 26,\r\n        width: 60,\r\n        indexWidth: 30,\r\n        minWidth: 0,\r\n      },\r\n      style: {\r\n        bgcolor: '#ffffff',\r\n        align: 'left',\r\n        valign: 'middle',\r\n        textwrap: false,\r\n        strike: false,\r\n        underline: false,\r\n        color: '#0a0a0a',\r\n        font: {\r\n          name: 'Helvetica',\r\n          size: 10,\r\n          bold: false,\r\n          italic: false,\r\n        },\r\n      },\r\n    };\r\n    // const s = new Spreadsheet(\"#x-spreadsheet-demo\", options)\r\n    //     .loadData({}) // load data\r\n    //     .change(data => {\r\n    //       // save data to db\r\n    //       console.log('changed', data)\r\n    //     });\r\n\r\n\r\n  },\r\n  methods: {\r\n    showDrawer() {\r\n      this.isDrawer = true\r\n      this.isShow = true\r\n    },\r\n    inc() {\r\n      this.AA++\r\n    },\r\n    show() {\r\n      // this.$refs.dd.show()\r\n      this.isDrawer = false\r\n      this.isShow = true\r\n    },\r\n    close(e) {\r\n      this.isShow = false\r\n    },\r\n    custom1() {\r\n      console.log('custom1')\r\n    },\r\n    showDrawer2() {\r\n      const panel1 = new Ext.form.Panel({\r\n        // renderTo: this.$refs._target1,\r\n        // renderTo: document.body,\r\n        title: '面板的头部header',\r\n        width: 300,\r\n        // height: 100,\r\n        // toFrontOnShow: true,\r\n        hidden: true,\r\n        floated: true,\r\n        modal: true,\r\n        hideOnMaskTap: false,\r\n        right: 0,\r\n        closable: true,\r\n        height: '100%',\r\n        html: '<h1>面板主区域</h1>',\r\n        hideAnimation: {type: 'slideOut', duration: 250, easing: 'ease-in', direction: 'right'},\r\n        showAnimation: {type: 'slideIn', duration: 250, easing: 'ease-out', direction: 'left'},\r\n        resizable: {\r\n          split: true,\r\n          edges: 'west'\r\n        },\r\n        tbar: [\r\n          {\r\n            text: '顶部工具栏topToolbar'\r\n          }\r\n        ],\r\n        bbar: [\r\n          {\r\n            text: '底部工具栏bottomToolbar'\r\n          }\r\n        ],\r\n        buttons: [\r\n          {\r\n            text: '按钮位于footer'\r\n          }\r\n        ]\r\n      });\r\n\r\n      panel1.show()\r\n    },\r\n  }\r\n}\r\n</script>","<template>\r\n  <div class=\"yv-workflow-wrap\" style=\"height:100%\">\r\n    <div class=\"yv-workleft\" style=\"height:100%; overflow: auto;\">\r\n      LEFT-WORKFLOW\r\n      <Markdown :source=\"source\"/>\r\n    </div>\r\n    <div ref=\"_inner\" class=\"yv-workflow\"/>\r\n  </div>\r\n  <!--\r\n  <div id=\"x-spreadsheet-demo\" style=\"height: 100%;\"></div>\r\n  -->\r\n</template>\r\n\r\n<script>\r\nimport Markdown from 'vue3-markdown-it'\r\n\r\nexport default {\r\n  components: {Markdown},\r\n  data() {\r\n    return {\r\n      options: {\r\n        markdownIt: {\r\n          linkify: true\r\n        },\r\n      },\r\n      source: `\r\n\r\n# markdown-it-vue\r\n::: success\r\nYou have got it.\r\n:::\r\n## Image size and Viewer\r\n\r\n![gvf](http://www.aqcoder.com/gvf-project.png =60x45)\r\n![ravenq](http://www.aqcoder.com/ravenq-qr.png =60x)\r\n\r\n## GitHub Table of Contents\r\n\r\n### c\r\n\\`\\`\\`c\r\n#include <stdio.h>\r\nint main(int argc char* argv[]) {\r\n  printf(\"Hello, World!\");\r\n  return 0;\r\n}\r\n\\`\\`\\`\r\n\r\n### json\r\n\r\n\\`\\`\\`json\r\n{\r\n  \"name\": \"markdown-it-vue\"\r\n}\r\n\\`\\`\\`\r\n\r\n### javascript\r\n\\`\\`\\`json\r\nimport MarkdownItVue from 'markdown-it-vue'\r\nexport default {\r\n  components: {\r\n    MarkdownItVue\r\n  }\r\n}\r\n\\`\\`\\`\r\n\r\n### bash\r\n\\`\\`\\`bash\r\nnpm install markdown-it-vue\r\n\\`\\`\\`\r\n\r\n## table\r\n\r\n| First Header  | Second Header |\r\n|:--|:--|\r\n| Content Cell  | Content Cell  |\r\n| Content Cell  | Content Cell  |\r\n\r\n## flowchart.js\r\n\r\n\\`\\`\\`\r\n\r\n\r\n      `\r\n    }\r\n  },\r\n}\r\n</script>","import YvStudioHome from './pages/yv-studio-home.vue'\r\nimport YvStudioDesign from './pages/yv-studio-design.vue'\r\nimport YvStudioDatabase from './pages/yv-studio-database.vue'\r\nimport YvStudioDict from './pages/yv-studio-dict.vue'\r\nimport YvStudioInterface from './pages/yv-studio-interface.vue'\r\nimport YvStudioPrint from './pages/yv-studio-print.vue'\r\nimport YvStudioPrintPlan from './pages/yv-studio-print-plan.vue'\r\nimport YvStudioPrintTemplate from './pages/yv-studio-print-template.vue'\r\nimport YvStudioPrintTerminal from './pages/yv-studio-print-terminal.vue'\r\nimport YvStudioPrintTask from './pages/yv-studio-print-task.vue'\r\nimport YvStudioParam from './pages/yv-studio-param.vue'\r\n// import YvStudioReport from './pages/yv-studio-report.vue'\r\nimport YvStudioSearchWidget from './pages/yv-studio-search-widget.vue'\r\nimport YvStudioTools from './pages/yv-studio-tools.vue'\r\nimport YvStudioWorkflow from './pages/yv-studio-workflow.vue'\r\nimport ApiConfig from './pages/api/ApiConfig.vue'\r\n\r\nconst StudioPages = {\r\n    YvStudioHome,\r\n    YvStudioDesign,\r\n    YvStudioDatabase,\r\n    YvStudioDict,\r\n    YvStudioSearchWidget,\r\n    // YvStudioReport,\r\n    YvStudioParam,\r\n    YvStudioPrint,\r\n    YvStudioPrintPlan,\r\n    YvStudioPrintTask,\r\n    YvStudioPrintTemplate,\r\n    YvStudioPrintTerminal,\r\n    YvStudioInterface,\r\n    YvStudioTools,\r\n    YvStudioWorkflow,\r\n    ApiConfig,\r\n}\r\n\r\nexport const StudioRouter: Menu[] = [\r\n    {\r\n        \"id\": \"studioHome\",\r\n        \"path\": \"home\",\r\n        \"name\": \"主页\",\r\n        \"icon\": false,\r\n        \"componentRaw\": StudioPages.YvStudioHome,\r\n    },\r\n    {\r\n        \"id\": \"studioDesignModel\",\r\n        \"path\": \"design\",\r\n        \"name\": \"功能设计\",\r\n        \"icon\": false,\r\n        \"componentRaw\": StudioPages.YvStudioDesign\r\n    },\r\n    {\r\n        \"id\": \"studioDatabase\",\r\n        \"path\": \"database\",\r\n        \"name\": \"数据库\",\r\n        \"icon\": false,\r\n        \"componentRaw\": StudioPages.YvStudioDatabase\r\n    },\r\n    {\r\n        \"id\": \"studioDict\",\r\n        \"path\": \"dict\",\r\n        \"name\": \"枚举字典\",\r\n        \"icon\": false,\r\n        \"componentRaw\": StudioPages.YvStudioDict,\r\n    },\r\n    {\r\n        \"id\": \"studioSearchWidget\",\r\n        \"path\": \"searchWidget\",\r\n        \"name\": \"数据字典\",\r\n        \"icon\": false,\r\n        \"componentRaw\": StudioPages.YvStudioSearchWidget\r\n    },\r\n    {\r\n        \"id\": \"studioReport\",\r\n        \"path\": \"report\",\r\n        \"name\": \"系统参数\",\r\n        \"icon\": false,\r\n        \"componentRaw\": StudioPages.YvStudioParam\r\n    },\r\n    // {\r\n    //     \"id\": \"studioReport\",\r\n    //     \"path\": \"report\",\r\n    //     \"name\": \"查询报表\",\r\n    //     \"icon\": false,\r\n    //     \"componentRaw\": StudioPages.YvStudioReport\r\n    // },\r\n    {\r\n        \"id\": \"studioPrint\",\r\n        \"path\": \"print\",\r\n        \"name\": \"打印系统\",\r\n        \"icon\": false,\r\n        \"componentRaw\": StudioPages.YvStudioPrint\r\n    },\r\n\r\n    {\r\n        \"id\": \"studioInterface\",\r\n        \"path\": \"interface\",\r\n        \"name\": \"接口系统\",\r\n        \"icon\": false,\r\n        \"componentRaw\": StudioPages.YvStudioInterface,\r\n        // \"componentRaw\": StudioPages.ApiConfig,\r\n    },\r\n    {\r\n        \"id\": \"studioTools\",\r\n        \"path\": \"tools\",\r\n        \"name\": \"工具集\",\r\n        \"icon\": false,\r\n        \"componentRaw\": StudioPages.YvStudioTools\r\n    },\r\n    {\r\n        \"id\": \"studioWorkflow\",\r\n        \"path\": \"workflow\",\r\n        \"name\": \"工作流设计\",\r\n        \"icon\": false,\r\n        \"componentRaw\": StudioPages.YvStudioWorkflow\r\n    },\r\n]","import _ from 'lodash'\r\nimport {AxiosInstance} from \"axios\";\r\n\r\nexport type ServerInvokeUrlTransformFunction = (jsUrl: string, option?: any) => string | undefined;\r\n\r\n/**\r\n * 处理 VJson 的\r\n * @param this 是指 scope 对象\r\n * @param vjson 是待处理的 VJson 对象\r\n * @result 返回处理 VJson 的 Promise 异步结果\r\n */\r\ndeclare type ConfigProcess = (me, config) => any\r\n\r\nexport interface ApiConvert {\r\n    /**\r\n     * 从表格 dataSource 属性，转换为 ExtJS.storeOption 属性\r\n     */\r\n    gridInvokeBuild: (scope, grid, config, dataSource, params, reloadParams) => object\r\n}\r\n\r\n/**\r\n * YvanUI 全局扩展配置\r\n */\r\nexport interface ConfigOption {\r\n\r\n    /**\r\n     * 是否在设计器模式\r\n     */\r\n    // designMode: boolean\r\n\r\n    /**\r\n     * 扩展自定义的 ajax 方法\r\n     */\r\n    axios: AxiosInstance;\r\n\r\n    /**\r\n     * 扩展自定义的后端请求方法\r\n     */\r\n    apiConvert: ApiConvert;\r\n\r\n    /**\r\n     * serverJS Url转换为Ajax请求\r\n     */\r\n    serverInvokeUrlTransform: ServerInvokeUrlTransformFunction;\r\n\r\n    /**\r\n     * 获取拼音首字母的函数\r\n     */\r\n    pinyinFunction: (py: string) => string\r\n\r\n    /**\r\n     * Scope onload 时扩展方法\r\n     */\r\n    scopeOnLoad: (scope: any) => void\r\n\r\n    /**\r\n     * 自定义 scope 方法\r\n     */\r\n    scopeOnCreate: ({vjson, model}, scope) => void\r\n}\r\n\r\n/**\r\n * 全局 ajax 方法\r\n */\r\nexport const ajax: { axios?: AxiosInstance } = {}\r\n\r\n/**\r\n * 计算拼音的函数\r\n */\r\nlet pinyinFunc: Function = (str) => (str)\r\n\r\nexport let scopeOnLoad: (scope: any) => void = null\r\n\r\nexport let scopeOnCreate: ({vjson, model}, scope) => void\r\n\r\nexport let apiConvert: ApiConvert = undefined\r\n\r\nexport const baseConfigProcessList: ConfigProcess[] = []\r\n\r\n/**\r\n * 在基类添加 Config 的处理方法\r\n */\r\nexport function baseConfigProcess(option?: any) {\r\n    return (target, propertyKey) => {\r\n        baseConfigProcessList.push(target[propertyKey])\r\n    }\r\n}\r\n\r\n// let designMode: boolean = false\r\n//\r\n// export function isDesignMode(): boolean {\r\n//     return designMode\r\n// }\r\n//\r\n// export function setDesignMode(v: boolean) {\r\n//     designMode = v\r\n// }\r\n\r\n/**\r\n * 将业务定义的 url 转换为调用服务端 groovy 的 url\r\n */\r\nexport function serverInvokeUrlTransform(url: string, option?: any): string {\r\n    return _.get(window, '_YvanUI_serverInvokePrefix')(url, option);\r\n}\r\n\r\n/**\r\n * YvanUI 全局扩展配置\r\n */\r\nexport function extend(option: Partial<ConfigOption>) {\r\n    if (option.serverInvokeUrlTransform) {\r\n        _.extend(window, {_YvanUI_serverInvokePrefix: option.serverInvokeUrlTransform});\r\n    }\r\n\r\n    if (option.pinyinFunction) {\r\n        pinyinFunc = option.pinyinFunction\r\n    }\r\n\r\n    if (option.scopeOnLoad) {\r\n        scopeOnLoad = option.scopeOnLoad\r\n    }\r\n\r\n    if (option.scopeOnCreate) {\r\n        scopeOnCreate = option.scopeOnCreate\r\n    }\r\n\r\n    if (option.apiConvert) {\r\n        apiConvert = option.apiConvert\r\n    }\r\n\r\n    // if (typeof option.designMode !== 'undefined') {\r\n    //     setDesignMode(option.designMode)\r\n    // }\r\n}\r\n\r\nexport function getApiConvert() {\r\n    return apiConvert\r\n}\r\n\r\nexport function getScopeOnCreate(): ({vjson, model}, scope) => void {\r\n    return scopeOnCreate\r\n}\r\n\r\nexport function getPinyin(v: string) {\r\n    return pinyinFunc(v)\r\n}\r\n\r\n/**\r\n * 适用于 Select / Tree 等，作筛选的通用方法.\r\n * 1.首字母模糊匹配（不区分大小写）\r\n * 2.标识的模糊匹配（不区分大小写）\r\n * 3.名称的模糊匹配，且支持以逗号（全角或半角）隔开的字词匹配，并自动去空格，如“南京， 物流 ”可以匹配出“南京九州通物流技术开发有限公司”\r\n */\r\nexport function keywordFilter(keyword: string, label: string, value?: string) {\r\n    if (!keyword) {\r\n        return true\r\n    }\r\n    const ws = _.trim(keyword).split(/\\s+|\\.|,|\\)|\\(|，|。|-|—/g)\r\n    // const labelPy = _.toLower(getPinyin(label))\r\n    //@ts-ignore\r\n    const labelPy = _.toLower(getFirstPinyin2(label))\r\n    value = _.toLower(_.trim(value))\r\n\r\n    let found = 0\r\n    _.some(ws, (word) => {\r\n        if (labelPy.indexOf(word.toLowerCase()) >= 0 || label.indexOf(word) >= 0) {\r\n            found++\r\n            return\r\n        }\r\n\r\n        if (value && value.indexOf(word.toLowerCase()) >= 0) {\r\n            found++\r\n            return\r\n        }\r\n    })\r\n\r\n    return found >= ws.length\r\n}\r\n","import _ from 'lodash'\r\n\r\ninterface Fn<T = any, R = T> {\r\n    (...arg: T[]): R;\r\n}\r\n\r\ninterface WindowSizeOptions {\r\n    once?: boolean;\r\n    immediate?: boolean;\r\n    listenerOptions?: AddEventListenerOptions | boolean;\r\n}\r\n\r\nexport function useWindowSizeFn<T>(fn: Fn<T>, wait = 150, options?: WindowSizeOptions) {\r\n    let handler = () => {\r\n        fn();\r\n    };\r\n    const handleSize = _.debounce(handler, wait)\r\n    handler = handleSize;\r\n\r\n    const start = () => {\r\n        if (options && options.immediate) {\r\n            handler();\r\n        }\r\n        window.addEventListener('resize', handler);\r\n    };\r\n\r\n    const stop = () => {\r\n        window.removeEventListener('resize', handler);\r\n    };\r\n\r\n    return {start, stop, func: handler};\r\n}\r\n"],"names":["__assign","t","s","i","p","__rest","e","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","rejected","result","__generator","body","_","f","y","g","verb","n","v","op","__values","o","m","__read","r","ar","error","__spreadArray","to","from","pack","l","VJsonContext","vueInstance","vcxt","slotName","name","containers","basicFields","advancedFields","customFields","ctl","property","bindValue","vjson","xtype","reference","findCount","tryFindDesignVjson","designVJson","deepTrav","target","designerVjson","define","propName","item","runtimeVjson","designer","targetColumnJoin","column","runtimeVjsonColumnJoin","conversion_getDPI","tmpNode","inch","c_value","style","cls","funcBody","keys","values","func","scope","eventName","args","_i","me","methodVarName_1","k","methodName","_a","_b","obj","c","$watch","paramObject","cb","stopHandles","watchIfExpress","str","start","end","path_1","watchStop","newVal","trav","param","key","idx","prefix","line","handler","oldHandler","resolver","markObj","r_1","data","config","checkedIds","allNode","data_1","data_1_1","node","_d","tree","buildTree","isRoot","children","_c","child","rootNode","parentNode","allNode_1","allNode_1_1","rootNode_1","rootNode_1_1","root","data_2","data_2_1","allNode_2","allNode_2_1","rootNode_2","rootNode_2_1","TsLanguageSupport","_this","defineFileObject","fileContent","filePath","defTsCompilerOptions","ttl","rootStringf","toRaw","refsList","deepTravGetReference","parent","defineRoot","refString","content","vv","actived","Designer","vexport","resetFormJson","skipHistoryChange","emptyWidgetListFlag","newType","useFor","dataRoot","targetVjson","currentDialogReference","resolverTarget","designCmp","row","referenceNamePool","buildFuncBody","targetVJson","computedName","referenceNamePool_1","vexportData","saveHandle","code","eventData","chooseDisplayName","desc","deepTravEvents","displayName_1","displayName","removeFuncBody","loadHandle","cmpId","cmp","evObj","option","parentComponent","parentList","indexOfParentList","nextSelected_1","evt","typeName","allWidgets","foundCon","con","origin","newCon","widget","evtName","evtData","id","module","res","_e","ret","id_1","originId","vj","targetDialog","d","selectedDialogReference","selectedDialogReference_1","it","panel","clipData","msg","i_1","i_2","isDup","bodyWithName","TypeEnum","object","typeStr","type","icon","component","h","databaseMeta","table_list","columnName","oldVal","subList","newIndex","_sfc_main","_createBlock","_component_el_alert","$data","$props","_ctx","bindValue2","dialog","_hoisted_1","_hoisted_2","_createElementVNode","_openBlock","_createElementBlock","_createVNode","_component_el_form","_component_el_form_item","_component_el_input","_cache","$event","_component_el_divider","_component_el_switch","YvComponentDesc","fn","Vue","layout","componentDesign","outline","layoutProp","emptyTemplate","saveHandler","loadHandler","markRaw","list","layoutName","defaultXType","options","variableDefine","ws","min","max","columnWidths","cell","cellLength","lodash","width","workbook","worksheet","heads","file","reader","event","sheet","rows","headMap_1","excelRows","excelRow","dataIndex","files","upload","uploadFile","uploadFiles","rootElementList","_component_el_dialog","_component_el_button","$options","_component_el_upload","_component_el_icon","_component_Loading","a","b","suffix","factory","forEachToken","mode","currentMode","token","surroundedBy","index","chr","tokenizeIndex","lowestIndexOfTokenize","toTokenize","tokenize","indexOfTokenize","match","delimiter","Operator","precedence","SqlWhereParser","TokenizeThis","operators","operator","sql","evaluator","operatorStack","outputStream","lastOperator","tokenCount","lastTokenWasOperatorOrLeftParenthesis","normalizedToken","operands","numOperands","operatorValue","expression","lastToken","expressionParentheses","precedenceParenthesisIndex","expressionTokens","operatorValue1","operatorValue2","toNumber","defaultValue","year","month","day","targetStr","newStr","sourceStr","cacheData","System","Conv.asLong","Conv.toNumber","Conv.asString","Conv.asDecimal","Conv.asInteger","request","uiInfos","uiBlocks","customSetting","callback","extCallback","lotCallback","$","t1","t2","t3","t4","date","Y","M","D","timestamp","url","msgOrTitle","_insId","handle","props","bizCmp","title","dialogCmp","dialogInstance","defaultProps","targetProps","bizInstance","specHeight","footerReference","footerDefine","defineList","titleClass","headerTags","message","$body","$w","iframeWidth","iframeHeight","windowWidth","windowHeight","setWidth","setHeight","count","path","href","studioWindow","parentJson","uiBlock_1","columns","col","uiKey","setting","extCmpList","items","uiBlock_2","parentPaths","ret_1","specCode","params","selectedRows","planCode","templateCodes","parameters","_component_ag_grid_vue","_mergeProps","PrintTools","printPlanCode","fileUrl","iWidth","iHeight","iTop","iLeft","errors","validRet","_Fragment","_renderList","_createTextVNode","_toDisplayString","cname","ca","_relPath","_absPath","pagePath","fileOnVite","absPathIdx","propData","global","whId","_f","newVjson","formInstance","field","form","reloadOption","hookVjsonComponentOnRuntime","el","rules","cmpJson","uiBlock","cust_ui","lotItemIdx","pushItems_1","ui_setting","lotColumnIdx","pushColumns_1","lot","cl","validRetList","binding","debounce","getRefFn","delay","yvgrid","clickHandler","hidden","express","stopHandle","calcValue","kv","opt","_resolveDynamicComponent","Split","Button","Toolbar","model","newValue","vd","mlist","pathC","dataSource","watchResultForParam","reParams","cancel","cp","expandKeys","nodeDatas","treeData","isLoad","checkedKeys","checkedNodes","halfCheckedKeys","halfCheckedNodes","expanded","text","_component_el_empty","_component_el_row","_component_el_button_group","_vShow","_component_el_scrollbar","_component_el_tree","_withCtx","_hoisted_3","_component_Vue3Menus","menu","activeIndex","position","lang","_normalizeClass","_KeepAlive","YvStudioFileSearchWindow","_component_yv_vjson_yvgrid","_component_el_skeleton","bodyItems","footerItem","headerItem","modalProp","itemIdx","_component_el_drawer","_component_yv_vjson_object","dlg","_component_yv_vjson_dialog","_component_yv_vjson_drawer","extendNode","globalNode","travVar","parentKey","_component_Search","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_component_YvDesignInputExpress","_component_YvDesignInputParams","_component_draggable","_component_el_select","_component_el_option","_component_ArrowUp","_component_ArrowDown","_component_yv_vjson_toolbar","_TransitionGroup","_withDirectives","ctx","dataVal","watch","oldValue","init","useFirstDefaultSize","useLastDefaultSize","splitSumCount","splitCount","splitOptions","dimension","size","gutterSize","_g","_h","parentVal","vnode","vodeType","reset","getSizes","_sfc_render","$setup","elIcon","_component_el_col","_component_el_tabs","_component_el_tab_pane","_withScopeId","_component_YvDesignerPermissions","_component_yv_design_input_icon","customSlotContent","prop","color","_normalizeStyle","_component_Pointer","_hoisted_14","referenceGrid","aggrid","formItems","newFormItem","_component_yv_design_input_height","weight","simpleSpan","_renderSlot","dialogReference","_component_yv_vjson_form_item","_hoisted_13","_hoisted_15","_hoisted_19","_hoisted_16","_hoisted_18","_hoisted_21","_component_yv_design_input_width","_component_yv_design_form_item","_component_el_tree_select","DICT_VERSION","DICT_DATA","dictVersion","oldDict","DICT_CACHE","SqlOperationType","SqlOperationType2","OperationType","OperationType2","TableSchemaType","TableSchemaType2","DatabaseConstant","uid","dataSourceParams","targetExpress","subKey","allKey","expr","required","button","isWatch","isRequire","sqlId","tableMapFieldList","tableMapMeta","tableName","existColumns","fieldList","tableNode","tableMeta","columnMeta","childNode","nodes","source","payload","_hoisted_17","_component_el_checkbox","_component_yv_src_editor","_directive_loading","dictData","previewDictListItems","dictObj","isDisable","_component_YvDesignDatasource","_component_el_input_number","status","optionData","_component_el_radio_group","_component_el_radio_button","_component_el_radio","dictList","gridOption","grid","rawValue","expandCauseByAutoSelect","grid_1","firstRow","rawValue_1","dom","sender","lookup","writeTarget","gridColumn","record","_component_CircleClose","_component_el_popover","currentWidget","lookupArr","lookupItem","sourceGridColumn","gridColumnItem","dropdowns","objk","widgetItem","binds","widgetColumn","bindProp","_component_el_date_picker","YvVjsonDatefield","action","_hoisted_20","_hoisted_22","_hoisted_23","_component_el_card","_component_el_tag","editor","header","_component_json_editor_vue","footReference","newVJson","DrawerDefaultProps","cnt","dicCnt","indx","editorOption","enumExpr","rt","dict","paramForCalc","queryValue","allowEdit","boolValue","val","_gridOption","_columnDefs","dlgHandle","errorKey","validErrorList","allowBlank","headerName","columnDefs","sort","custUrl","custParams","reqData","valid","errorRowIdx","errorColumn","nid","_origin","newData","isChange","trans","editCols","lastNode","rowIndexRange","range","nodeRange","selectedNodes","selRows","idField","parentField","textField","idMap","treeDataRow","setPath","sel","rowData","nodeData","colId","editingCells","rowIdx","predicate","rid","relPath","pageInfo","valueRaw","setCount","designVjson","designColumnVjson","rowCount","vjsonRaw","valueFormatterStr","allLeafChildren","minWidth","maxWidth","hashValueGetter","dictValue","dictText","dictStr","dictItem","dictArray","selectedNode","rowIndex","targetNode","api","dt","newRow","colDef","lookupColumns","targetColumn","targetField","currentRow","targetRow","cellRanges","selection","datas","jsonModeColumns","fieldName","getDict","_rid","newRowData","quickFilterText","observed","raw","exists","allowEmptyString","missingOrEmpty","valueParsed","left","right","val1","val2","val1Json","val2Json","valueA","valueB","accentedCompare","valueAMissing","valueBMissing","doQuickCompare","arr","colField","idToTry","copy","keysToSkip","isNonNullObject","properties","transform","objects","allValues","anyObject","mergeDeep","dest","copyUndefined","makeCopyOfSimpleObjects","sourceValue","destValue","objectToRead","objectToUpdate","fieldContainsDots","fields","currentObject","objectName","proto","doOnceFlags","doOnce","funcConstructor","matches","funcs","funcsCopy","milliseconds","timeout","context","throttle","wait","previousCall","currentCall","condition","timeoutMessage","timeStamp","interval","executed","internalCallback","reachedTimeout","fns","arg","composed","ModuleNames","moduleBased","gridId","modules","moduleMajor","moduleMinor","currentModuleMajor","currentModuleMinor","moduleName","reason","warningKey","warningMessage","modName","logger","beanInstances","beanEntry","bean","afterPreCreateCallback","constructorParamsMeta","constructorParams","newInstance","createdBeanNames","BeanClass","metaData","beanName","beanInstance","attributes","attribute","otherBean","wireParams","initParams","prototype","constructor","constructorString","beansList","paramIndex","otherBeanName","wiringBean","optional","lifeCycleMethod","methodToIgnore","allMethods","methods","beans","beanAny","descriptor","classConstructor","propertyKey","classPrototype","methodOrAttributeName","decorators","decorator","loggerFactory","gridOptionsService","frameworkOverrides","globalEventListener","async","eventType","autoCreateListenerCollection","listenerMap","listeners","listener","agEvent","columnApi","browserEvent","processEventListeners","queueCopy","userProvidedColDef","primary","sortIndex","initialSortIndex","hide","initialHide","flex","initialFlex","originalParent","suppressDotNotation","initialWidth","showingAllGroups","showingThisGroup","colDefAny","warnOnce","itemsUsed","x","communityMenuTabs","enterpriseMenuTabs","tab","rowNode","userFunc","moving","visible","sortOrder","aggFunc","active","additionalEventAttributes","filterChangedEvent","pinned","firstRightPinned","lastLeftPinned","height","changed","colSpan","rowSpan","actualWidth","silent","rowGroup","pivot","defaultValues","menuTabs","colGroupDef","groupId","padding","level","leafColumns","atLeastOneShowingWhenOpen","atLeastOneShowingWhenClosed","atLeastOneChangeable","j","abstractColumn","headerGroupShow","expandable","process","comparator","arr1","arr2","array","thisOneMatches","nextOneMatches","toRemove","toIndex","src","objectsToMove","arrayOfArrays","tags","eventTarget","sourceElement","renderedComp","element","pointer","eventNoType","eElement","destroyFunc","defs","primaryColumns","existingTree","columnKeyCreator","existingCols","existingGroups","existingColKeys","unbalancedTree","treeDept","columnTree","deptFirstCallback","group","autoGroupCols","gridBalancedTree","balancedColumnTree","dept","nextChild","autoGroup","currentDept","columnDept","originalGroup","newChildren","firstPaddedGroup","currentPaddedGroup","newColId","colGroupDefMerged","paddedGroup","leaf","treeChildren","maxDeptThisLevel","newDept","existingColsCopy","def","existingColumns","providedGroup","existingGroup","colDefMerged","widthBeforeUpdate","newColDef","existingCol","existingColDef","newHasId","newHasField","newGroupDef","defaultColDef","columnType","autoGroupColDef","isSortingCoupled","typeKeys","allColumnTypes","userTypes","typeColDef","abstractColDef","providedColumnGroup","partId","instanceId","allLeafColumns","lastChildLeft","firstChildLeft","wantedChild","foundChild","groupActualWidth","groupChild","parentWithExpansion","lastResult","__decorate$2y","rowGroupColumns","groupAutoColumns","doingTreeData","doingMultiAutoColumn","rowGroupCol","defaultAutoColDef","userAutoColDef","newCol","userDef","stringFromCharCode","ucs2decode","string","output","len","counter","extra","checkScalarValue","point","createByte","shift","encodeCodePoint","symbol","codePoints","length","codePoint","byteString","toEscape","skipEscapingHtmlChars","stringResult","camelCase","rex","rexCaps","word","map","pair","coercionLookup","coercionStep","isVue","gridOptions","pGridOptions","coercedValue","changes","changesToApply","gridKey","inputValues","validValues","allSuggestions","fuzzyMatches","invalidInputs","inputValue","validValue","invalidInput","hideIrrelevant","filterByPercentageOfBestMatch","thisSuggestions","suggestion","limit","str1","str2","lastIndex","__decorate$2x","version","oldProp","newProp","newPropMsg","prop1","prop2","alt","validateRegistered","validProperties","validateColDef","propertyName","userProperties","rowModel","unsupportedProperties","validPropertiesAndExceptions","containerName","docsUrl","invalidProperties","details","oldPropValue","toMatch","supplied","groupDisplayTypeValues","treeDataDisplayTypeValues","__decorate$2w","pivotMode","colsPreviouslyExisted","oldTree","newTree","oldObjectsById","colsToDestroy","dispatchEventsFunc","oldPrimaryColumns","oldPrimaryTree","balancedTreeResult","gridColsNotProcessed","newColumnsLoadedEvent","eventEverythingChanged","colA","colB","primaryIndexA","primaryIndexB","indexAPresent","indexBPresent","gridIndexA","gridIndexB","currentColumn","scrollWidth","scrollPosition","pivotKeys","valueColKey","valueColumnToFind","foundColumn","thisPivotKeys","pivotValueColumn","lastLeft","firstRight","skipHeader","skipHeaderGroups","stopAtGroup","columnsAutosized","changesThisTimeAround","shouldSkipHeader","shouldSkipHeaderGroups","preferredWidth","newWidth","finished","flexColumns","movedColumns","changedColumns","columnGroups","headerGroupCtrl","resizedColumns","columnGroup","headerContainerCtrl","allDisplayedColumns","rootColumns","recursiveFindColumns","childColumns","displayedColumns","filterCallback","emptySpaceBeforeColumn","lastConsideredCol","maxAllowedColSpan","columnsToCheckFilter","colsToRemove","filterPasses","colForFilter","columnLeft","columnRight","leftBounds","rightBounds","columnToMuchLeft","columnToMuchRight","masterList","actionIsAdd","columnCallback","atLeastOne","columnToAdd","colKeys","added","initialAggFunc","colKey","shiftKey","sets","columnWidth","otherCol","widthDiff","otherColWidth","columnResizeSet","minWidthAccumulated","maxWidthAccumulated","maxWidthActive","minWidthPasses","maxWidthPasses","resizeSets","changedCols","allResizedCols","set","ratios","newWidths","finishedCols","finishedColsGrew","loopCount","subsetCols","subsetRatioTotal","pixelsToDistribute","ratioThisCol","ratioScale","lastCol","colNewWidth","atLeastOneColChanged","flexedCols","colsForEvent","fromIndex","columnsToMoveKeys","columnsToMove","proposedColumnOrder","gridOrder","cols","indexA","indexB","lastPlacement","rulePassed","lockPositionToPlacement","placement","allColumnsCopy","newIndexes","newColIndex","maxIndex","minIndex","spread","maxSpread","newBodyWidth","newLeftWidth","newRightWidth","actualPinned","createEvent","updatedColumns","oldIndex","direction","requiredLevel","colGroupLeafColumns","getDisplayColMethod","groupPointer","originalGroupLevel","groupPointerLevel","rowGroupIndex","pivotIndex","columnStateList","colIdToGridIndexMap","itemA","itemB","posA","posB","columnStates","letRowGroupIndex","letPivotIndex","colsToProcess","getValueOrNull","stateItem","applyStates","states","getById","columnsWithNoState","rowGroupIndexes","pivotIndexes","autoGroupColumnStates","unmatchedAndAutoStates","unmatchedCount","previousRowGroupCols","previousPivotCols","state","applyDefaultsFunc","indexes","oldList","aHasIndex","bHasIndex","oldIndexA","oldIndexB","aHasOldIndex","bHasOldIndex","autoGroupColsCopy","autoCol","newOrder","processedColIds","autoGroupInsertIndex","startState","columnStateBefore","columnStateBeforeMap","colsForState","dispatchWhenListsDifferent","colsBefore","colsAfter","idMapper","beforeList","afterList","getChangedColumns","changedPredicate","colStateBefore","columnIdMapper","cs","oldActive","activeChanged","aggFuncChanged","resizeChangePredicate","pinnedChangePredicate","visibilityChangePredicate","valueGetter","firstValue","colStateAfter","colStateAfterMapped","colsIntersectIds","beforeFiltered","afterFiltered","csAfter","csBefore","gridCol","defaultState","getValue","key1","key2","calculated","minColWidth","columnLookupCallback","foundColumns","columnList","columnMap","groupCol","sourceColumnId","columnMatches","colDefMatches","idMatches","location","includeAggFunc","headerValueGetter","pivotActiveOnThisColumn","aggFuncFound","isCollapsedHeaderEnabled","isTotalColumn","measureActive","aggregationPresent","aggFuncString","allColumnGroups","checkPartId","matched","flag","previousCols","setFlagFunc","getIndexFunc","getInitialIndexFunc","getValueFunc","getInitialValueFunc","colsWithIndex","colsWithValue","colIsNew","initialValue","initialIndex","include","getIndexForCol","defaultIndex","stateItems","groupState","columnGroupState","impactedGroups","groupKey","keyAsString","columnsForDisplay","isAutoGroupCol","isValueCol","checkFunc","underlyingColumn","rowGroupColumnId","colDefs","newColsPresent","groupCallback","searchForColDefs","colDefs2","prevGridCols","sortOrderToRecover","hasSameColumns","groupAutoColsMap","colsOrder","lastOrderMapped","noColsFound","gridColsMap","oldColsOrdered","oldColsMap","newColsOrdered","newGridColumns","siblings","leafCol","presentInNewGriColumns","noYetInSiblings","columnsForQuickFilter","normal","newAutoColsTree","allColumns","doingRtl","virtualColIds","testGroup","returnValue","addThisItem","displayedChildren","hashColumn","newHash","flexAfterDisplayIndex","indexOfCol","isColFlex","afterResizingCols","knownWidthColumns","flexingColumns","flexingColumnSizes","spaceForFlexingColumns","outer","totalFlex","widthByFlexRule","constrainedWidth","remainingSpace","gridWidth","limitsMap","dimensions","doColumnsAlreadyFit","colsToSpread","colsToNotSpread","colsToDispatchEventFor","finishedResizing","moveToNotSpread","availablePixels","widthOverride","scale","pixelsForLastCol","minOverride","maxOverride","colMinWidth","colMaxWidth","visibleColumns","leftVisibleColumns","rightVisibleColumns","centerVisibleColumns","groupInstanceIdCreator","forceRecreateAutoGroups","groupFullWidthRow","suppressAutoColumn","newAutoGroupCols","groupDisplayType","treeDataDisplayType","colsA","colsB","isRtl","queryOrder","container","defaultHeight","displayedHeights","__decorate$2v","maxColWidth","colDefWidth","colDefInitialWidth","originalBalancedTree","found","recursePath","__decorate$2u","sortedVisibleColumns","oldDisplayedGroups","previousRealPath","previousOriginalPath","oldColumnsMapped","currentOriginalPath","currentRealPath","firstColumn","newGroup","uniqueId","displayedGroups","recursive","columnsOrGroups","columnOrGroup","columnsOrGroup","__decorate$2t","components","componentMeta","classUpperCase","htmlTag","role","sortDirection","label","labelledBy","description","describedby","live","disabled","setsize","multiSelectable","colCount","colIndex","selected","checked","controllerElement","controlledElement","translate","versionMatch","win","numberTabIndex","tabIndex","testUpTo","div","test","totalStringSize","first","last","number","bytes","hex","thousandSeparator","decimalSeparator","sum","total","valueNumber","includeTime","separator","serialised","part","format","fullYear","months","days","replace","regexp","dateStr","timeStr","hours","minutes","seconds","elementClass","otherElementClass","sibling","inputSelector","isFocusable","isNotFocusable","isElementVisible","displayed","skipAriaHidden","attributeName","addOrRemoveDisabledAttribute","input","maxNest","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","paddingTop","paddingRight","paddingBottom","paddingLeft","marginTop","marginRight","marginBottom","marginLeft","boxSizing","marginWidth","template","rtl","scrollLeft","cssSelector","tempDiv","eContainer","htmlTemplate","eChild","eChildBefore","focusedEl","eChildHasFocus","orderedChildren","correctCellAtIndex","actualCellAtIndex","eToInsert","documentFragment","styles","parsedKey","valueAsString","parsedValue","priority","nodeList","attr","iconName","iconContents","className","eResult","forceCreate","userProvidedIcon","icons","optionsIcons","rendererResult","span","cssClass","keyboardEvent","editing","colDefFunc","headerRowIndex","keyCode","alwaysReturnFalseOnBackspace","e1","e2","pixelCount","diffX","diffY","rowNodes","rowNodeOrder","nodeA","nodeB","positionA","positionB","bothNodesAreUserNodes","bothNodesAreFillerNodes","rowNodeA","rowNodeB","atLeastOneOutOfOrder","keyParts","recursiveSearchNodes","currentNodes","initValue","valToReturn","AgPromiseStatus","promises","remainingToResolve","combinedValues","promise","ifNotResolvedValue","ifResolved","waiter","__decorate$2s","TooltipStates","parentComp","tooltipShowDelay","tooltipHideDelay","capitalisedType","tooltipPopupDestroyFunc","tooltipComp","now","then","tooltipInstanceCopy","eGui","addPopupRes","getGui","addOrRemove","__decorate$2r","newTooltipText","removeTooltip","addTooltip","paramsMap","childComp","componentParams","ComponentClass","newComponent","eComponent","thisNoType","querySelector","thisPrototype","currentProtoName","setResult","resultOfQuery","newChild","childComponent","refName","ref","selector","refSelector","instanceName","__decorate$2q","parentModel","filterInstance","modelAsString","userComponentFactory","dateComponentParams","eParent","dateComp","placeholder","defaultOptions","filterOption","requiredProperties","propertyCheck","firstFilterOption","__decorate$2p","eFocusableElement","callbacks","nextRoot","__decorate$2o","clientHeight","clientWidth","centered","forcePopupParentAsOffsetParent","minHeight","computedMinHeight","computedMinWidth","isVisible","boundaryEl","offsetParentComputedStyles","paddingWidth","paddingHeight","top","movable","moveElement","resizable","side","isSideResizable","resizerEl","popup","isPercent","availableHeight","elRect","offsetParentRect","yPosition","parentTop","additionalHeight","parentEl","bottom","xPosition","ePopup","constrain","applyMaxHeightToElement","isLeft","isTop","anywhereWithin","topBuffer","xDiff","yDiff","movementX","movementY","diff","parentRect","boundaryElRect","skipX","skipY","resizers","currentEl","isFlex","nextHeight","nextWidth","computedStyle","vertical","containerToFlex","isRight","isBottom","isHorizontal","isVertical","offsetLeft","offsetTop","oldWidth","skipWidth","oldHeight","newHeight","skipHeight","__decorate$2n","filterNameKey","templateString","buttons","eButtonsPanel","addButton","clickListener","debounceMs","debounceFunc","currentModel","afterUiUpdatedFunc","afterAppliedFunc","newModel","previousModel","afterFloatingFilter","afterDataChange","closeOnApply","fromFloatingFilter","apply","isValid","containerType","isFloatingFilter","positionableFeature","debounceDefault","__decorate$2m","labelSeparator","labelWidth","labelAlignment","alignment","eGuiClassList","hasEllipsis","callbackFn","__decorate$2l","pickerIcon","ariaRole","displayId","__decorate$2k","cssIdentifier","pos","isDown","itemToHighlight","nextPos","listOptions","listOption","sanitisedText","itemEl","__decorate$2j","listGui","eDocument","destroyMouseWheelFunc","destroyFocusOutFunc","fromPicker","__decorate$2i","inputType","displayFieldTag","eInput","passive","readOnly","previousValue","nextValue","checkboxChangedEvent","localeService","optionsFactory","isCombined","combinedModel","conditions","condition1","condition2","customOptions","joinOperatorTranslateKey","customOption","displayKey","numberOfInputs","customOpts","zeroInputTypes","eType","aIsSimple","bIsSimple","aSimple","bSimple","aCombined","bCombined","aModel","bModel","numConditions","numPrevConditions","orChecked","eJoinOperatorAnd","eJoinOperatorOr","simpleModel","models","eConditionBody","eJoinOperatorPanel","uniqueGroupId","eJoinOperators","andOr","eJoinOperator","defaultJoinOperator","filterOptions","joinOperator","lastUiCompletePosition","areAllConditionsUiComplete","activePosition","removeStartPosition","numConditionsToRemove","startPosition","deleteCount","joinOperatorIndex","elements","comp","firstInput","appliedModel","updatedLastUiCompletePosition","conditionsRemoved","shouldRemovePositionAtEnd","positionBeforeLastUiCompletePosition","shouldUpdateConditionStatusesAndValues","defaultPlaceholder","filterPlaceholderFn","filterOptionKey","globalTranslate","ariaLabel","inputs","filteringLabel","elPosition","filterModel","cellValue","customFilterOption","customFilterResult","filterType","compareResult","compareToResult","__decorate$2h","dateFilterParams","isRange","dateFrom","dateTo","formattedFrom","formattedTo","filterDate","cellAsDate","yearParser","fallback","dateCompWrapper","eCondition","eConditionPanels","dateConditionComps","fromTo","eConditionPanel","isValidDate","_elPosition","editable","uneditableTypes","__decorate$2g","allowEditing","dateModel","filterValueDate","filterValueText","__decorate$2f","inputElement","shouldUseBrowserDatePicker","usingSafariDatePicker","minValidYear","maxValidYear","pattern","preventCharacters","floatedValue","isScientificNotation","floatString","parts","precision","setValueFunc","setInputValueOnlyFunc","setInputValueOnly","normalizedValue","filterParams","allowedCharPattern","filter","filterTo","eValues","eValue","filterText","trimmedInput","legacyComparator","cleanValue","filterTypesAllowNulls","formattedValues","cellValueFormatted","textFormatter","matcherParams","__decorate$2e","parentElement","inputGui","toDebounce","isEnterKey","preventMouseClick","startListener","moveListener","endListener","touchList","touchEvent","touchStartCopy","touchesMatch","touch","__decorate$2d","skipTemplate","eSortOrder","eSortAsc","eSortDesc","eSortMixed","eSortNone","suppressOrder","eIcon","isAscending","isDescending","alwaysHideNoSort","isNone","isColumnShowingRowGroup","isMixedSort","allColumnsWithSorting","indexThisCol","moreThanOneColSorting","showIndex","__decorate$2c","displayNameSanitised","touchListener","suppressMenuHide","tapMenuButton","menuTouchListener","showMenuFn","tapListener","menuHides","onIpadAndMenuHides","eventSource","sortUsingCtrl","movedRecently","multiSort","onSortingChanged","sourceColumns","isMultiSorting","sourceCol","filterPresent","__decorate$2b","expandAction","newExpandedValue","stopPropagationAction","__decorate$2a","__decorate$29","hasValue","valueFormatted","valueFormattedExits","__decorate$28","cellEditorInput","startValue","eventKey","inputEl","focusEl","__decorate$27","delta","absDelta","valueToUse","deltaUp","refreshCountCopy","__decorate$26","update","oldData","oldNode","isRowSelectableFunc","getRowIdFunc","parentKeys","excludeSelf","pixel","firstChild","lastChild","childIndex","rowTop","dragging","highlighted","hovered","allChildrenCount","master","rowHeight","estimated","cellHeight","notAllPresent","nonePresent","newRowHeight","autoHeights","activeColsForRow","uiLevel","valueChanged","lockedClosedGroup","isOpenGroup","groupFootersEnabled","groupAlwaysShowAggData","ignoreAggData","columnId","newAggData","colIds","oldAggData","isTreeData","isGroupFunc","cellChangedEvent","atLeastOneSelected","atLeastOneDeSelected","atLeastOneMixed","childState","selectable","selectionNotAllowed","selectionNotChanged","clearSelection","potentialParent","rowGroupColumn","currentRowNode","isCandidate","foundFirstChildPath","nodeToSwapIn","parentRowNode","isFullWidthCellFunc","footerNode","__decorate$25","stateName","groupSelectsFiltered","showOrHideSelectListener","extraParams","__decorate$24","DragSourceType","VerticalDirection","HorizontalDirection","dragSource","allowTouch","sourceAndParams","mouseEvent","draggingEvent","fromNudge","hDirection","vDirection","validDropTargets","dropTarget","secondaryContainers","rect","horizontalFit","verticalFit","allContainersFromDropTarget","mouseOverTarget","currentContainers","elementStack","dragEnterEvent","dragLeaveEvent","zones","zone","clientX","eClientX","clientY","eClientY","dropZoneTarget","dragItem","ghost","ghostHeight","browserWidth","browserHeight","windowScrollY","windowScrollX","theme","eText","dragItemName","targetEl","shake","__decorate$23","cellValueFn","customGui","dragStartPixels","suppressVisibilityChange","strategy","dragElement","managed","rowDragText","dragItemCount","neverDisplayed","displayedOptions","shown","isShownSometimes","rowDragFeature","shouldPreventRowMove","suppressRowDrag","hasExternalDropZones","__decorate$22","eCheckbox","eExpanded","eContracted","compClass","topLevelFooter","embeddedRowMismatch","isNullValueAndNotMaster","skipCell","showRowGroup","eParentOfValue","rowGroupCols","pinnedLeftCell","pinnedRightCell","bodyCell","keyOfGroupingColumn","valPresent","paramsAdjusted","innerCompDetails","valueWhenNoRenderer","relatedColumn","footerValueGetter","footerValue","paramsClone","isGroupRowRenderer","relatedColDef","relatedCompDetails","countString","eExpandedIcon","eContractedIcon","eGroupCell","expandableChangedListener","nextExpandState","reducedLeafNode","displayedGroup","columnModel","isExpandable","pivotModeAndLeafGroup","addExpandableCss","isTotalFooterNode","fullWithRow","paddingCount","rowDragComp","paramsCheckbox","checkboxNeeded","cbSelectionComponent","__decorate$21","compProxy","compDetails","valueToDisplay","ctrl","fullWidth","componentPromise","destroyComp","__decorate$20","localeTextFunc","eLoadingIcon","localisedTemplate","__decorate$1$","getDataTypeService","__decorate$1_","isSelected","eventStarted","eventStopped","__decorate$1Z","__decorate$1Y","createResult","componentFromFramework","registeredViaFrameworkComp","jsComponent","isFwkComp","defaultComponent","moduleForComponent","componentName","validComponents","suggestions","__decorate$1X","defaultFilter","defaultFloatingFilter","toolPanelDef","defObject","defaultName","mandatory","cellRenderer","compName","jsComp","fwComp","paramsFromSelector","popupFromSelector","popupPositionFromSelector","lookupFromRegistry","paramsMerged","componentClass","defObjectAny","selectorFunc","selectorRes","assignComp","providedJsComp","instance","thisComponentConfig","deferredInit","paramsFromGrid","userParams","userParamsFromFunc","getFromDefault","defaultFloatingFilterType","ExcelFactoryMode","__decorate$1W","dragSourceAndListener","mouseDownListener","touchStartListener","includeTouch","mouseListener","suppressTouch","touchMoveEvent","touchEndEvent","documentTouchMove","events","mouseMoveEvent","mouseUpEvent","contextEvent","currentEvent","startEvent","requiredPixelDiff","tagName","eventOrTouch","RowHighlightPosition","ClientSideRowModelSteps","__decorate$1V","compAsAny","overlayWrapperComp","sideBarComp","setterName","dynamicApi","gridInfo","baseParams","method","exportMode","eGrid","ariaProperty","apiMethod","requiredRowModels","datasource","blockSize","viewportDatasource","columnTypes","show","expandParents","newFilter","nodesAsRowNode","nodeSelector","includeFooterNodes","unwrapped","filterPromise","currentValue","filterComp","rowPinned","activeDropTarget","headerHeight","domLayout","animateRows","isExternalFilterPresentFunc","doesExternalFilterPassFunc","navigateToNextCellFunc","tabToNextCellFunc","tabToNextHeaderFunc","navigateToNextHeaderFunc","rowGroupPanelShow","getGroupRowAggFunc","getBusinessKeyForNodeFunc","getChildCountFunc","processRowPostCreateFunc","rowClassFunc","isFullWidthRowFunc","isRowMasterFunc","postSortRowsFunc","getDocumentFunc","getContextMenuItemsFunc","getMainMenuItemsFunc","processCellForClipboardFunc","sendToClipboardFunc","processCellFromClipboardFunc","processSecondaryColDefFunc","processSecondaryColGroupDefFunc","processPivotResultColDefFunc","processPivotResultColGroupDefFunc","postProcessPopupFunc","initialGroupOrderComparatorFunc","getChartToolbarItemsFunc","paginationNumberFormatterFunc","getServerSideStoreParamsFunc","getServerSideGroupLevelParamsFunc","isServerSideGroupOpenByDefaultFunc","isApplyServerSideTransactionFunc","isServerSideGroupFunc","getServerSideGroupKeyFunc","rowStyleFunc","rowHeightFunc","enable","maxRowFound","gridCtrl","chartId","chartModel","chartContainer","buttonElement","ePopupParent","cellPosition","aggFuncs","transaction","rowDataTransaction","dataTypeDefinitions","page","__decorate$1U","isFilterPresent","doesFilterPass","allPromises","modelKeys","filterWrapper","before","after","promiseFilter","filterToSkip","isFilterActive","groupFilterEnabled","isAggFilter","isShowingPrimaryColumns","targetAggregates","aggData","targetedFilters","targetedData","parsedFilter","filterPart","usingCache","stringParts","createIfDoesNotExist","cellDataType","eFilterGui","guiFromFilter","wrapper","groupColumns","groupColumn","showParentFilter","finalFilterParams","filterComponent","columnListener","__decorate$1T","cssClassName","on","__decorate$1S","LayoutCssClasses","view","__decorate$1R","eBodyViewport","fakeHScroll","fakeVScroll","isDebounce","onVScroll","onFakeVScroll","offset","topCenterContainer","stickyTopCenterContainer","bottomCenterContainer","centerViewport","partner","eDiv","fakeHScrollViewport","centerContainerViewport","eSource","fakeVScrollViewport","scrollTop","fakeScrollLeft","bodyScrollEvent","bodyScrollEndEvent","scrollTo","touchOnly","scrollHeight","frameNeeded","hScrollPosition","minScrollLeft","maxScrollLeft","vScrollPosition","pixels","oldScrollPosition","indexToSelect","stickyTopHeight","rowGotShiftedDuringOperation","startingRowTop","startingRowHeight","paginationOffset","rowTopPixel","rowBottomPixel","heightOffset","vScrollTop","vScrollBottom","viewportHeight","pxTop","pxBottom","pxMiddle","rowAboveViewport","rowBelowViewport","newScrollPosition","newHorizontalScroll","columnBeforeStart","columnAfterEnd","viewportTooSmallForColumn","viewportWidth","alignColToStart","alignColToEnd","isMiddle","colLeft","colMiddle","colRight","viewportStart","viewportEnd","bodyWidth","colWidth","multiplier","colLeftPixel","colRightPixel","colMidPixel","viewportStartPixel","viewportEndPixel","forceSkipVerticalScroll","skipVerticalScroll","scrollTick","tickAmount","__decorate$1Q","refreshStatus","gridBodyCon","rowGroups","isRowDragMultiRow","currentNode","dragSourceDomDataKey","gridGui","isFromThisGrid","managedDrag","lastHighlightedRowNode","isBelow","increment","addIndex","processedParams","getContainer","onDragEnter","onDragLeave","onDragging","onDragStop","yNormalised","mouseIsPastLastRow","overIndex","overNode","vDirectionString","__decorate$1P","RowAnimationCssClasses","eGridBody","eTop","eBottom","eStickyTop","isFocusedElementNested","relatedTarget","gridContainRelatedTarget","isNestedRelatedTarget","scrollbarWidth","pad","focusOutListener","elementWithFocus","clickInsideGrid","viewports","viewport","popupService","headerCount","overflowY","allowVerticalScroll","animateRowsCssClass","fullWidthContainer","eCenterColsViewport","longTapListener","pinnedRowModel","floatingTopHeight","floatingBottomHeight","vScrollVisible","pinnedTopHeight","nextTimeout","scrollWidthToRemove","availableWidth","SelectionHandleType","CellRangeType","cellComp","rangeBorders","isSingleCell","rangeService","thisCol","leftCol","rightCol","ranges","startRow","endRow","shouldHaveSelectionHandle","rangesLen","cellRange","isFillHandleAvailable","isRangeHandleAvailable","handleIsAvailable","isCategoryCell","cellRangeType","colsSpanning","mostLeftCol","leftPosition","leftWidth","totalRowHeight","cellClassParams","cellStyleParams","cellStyleFunc","__decorate$1O","eventService","isMultiKey","cellClickedEvent","nowMillis","cellDoubleClickedEvent","ctrlKey","metaKey","forceBrowserFocus","thisCell","cellMouseOutEvent","cellMouseOverEvent","cellContainsTarget","cellContainsRelatedTarget","rowCtrl","endCell","cellCtrl","currentSelection","newSelection","updatedCount","__decorate$1N","eCell","dragEvent","providedOnRowDrag","defaultOnRowDrag","jsonData","tooltipCtrl","eCellWrapper","printLayout","startEditing","colIdSanitised","eParentCell","minRowHeight","measureHeight","timesCalled","extraHeight","autoHeight","doc","notYetInDom","possiblyNoContentYet","destroyResizeObserver","forceNewCellRendererInstance","selectionChanged","rowDragChanged","dndSourceChanged","cellStartedEdit","editorParams","noValueResult","cellEditor","newValueExists","editingStoppedEvent","rowDraggerElement","suppressFlash","noValueProvided","forceRefresh","valuesDifferent","processingFilterChange","suppressNavigateAfterEdit","delays","flashDelay","fadeDelay","cssName","fullName","animationFullName","cellId","force","oldValueFormatted","domEvent","colIdx","htmlElement","cellFocused","fullRowEdit","isHovered","cellContextMenuEvent","dndSourceComp","customElement","newComp","pagination","rowDragManaged","clientSideRowModelActive","RowType","animateIn","useAnimationFrameForCreate","businessKey","rowComp","gui","rowGui","cached","displayValue","rg","gos","rowId","isLeftReady","isCenterReady","isRightReady","isStub","isFullWidthCell","isDetailCell","isFullWidthGroup","suppressAnimationFrame","useFlushSync","prev","addCell","colInstanceId","prevCellCtrl","centerCols","leftCols","rightCols","cellControls","nextContainerPinned","focused","isEnsureDomOrder","isPrintLayout","oldRowTopExists","pinningLeft","pinningRight","tryRefresh","fullWidthSuccess","centerSuccess","leftSuccess","rightSuccess","aboveOn","belowOn","currentFullWidthComp","lastFocusedCell","currentFullWidthContainer","isFullWidthContainerFocused","nextEl","isFocused","cellCtrlToRemove","isShiftKey","multiSelectOnClick","rowDeselectionWithCtrl","eDetailGui","checkRowSizeFunc","updateRowHeightFunc","resizeObserverDestroyFunc","eRow","newLevel","classToAdd","classToRemove","newFirst","newLast","isRowEdit","fireRowEditEvent","sourceRenderedCell","cssClasses","classStr","rowStyles","rowContainerType","rowStyle","rowStyleFuncResult","minPixel","maxPixel","defaultRowHeight","heightFromFunc","lineHeight","destroyCellCtrls","ctrls","rowFocused","currentPage","topPx","reverse","pixelOffset","afterPaginationPixels","suppressRowTransform","rowIndexStr","headerRowCount","rowIsEven","ariaRowIndex","__decorate$1M","rowCon","anchorToElement","cellKeyDownEvent","focusedCell","paginationProxy","isEmptyPinnedTop","isEmptyPinnedBottom","floatingStart","floatingEnd","rowEnd","__decorate$1L","centerContainerCtrl","bodyHeight","__decorate$1K","__decorate$1J","rightWidth","__decorate$1I","eWrapper","heightString","__decorate$1H","__decorate$1G","addSpacer","centerWidth","totalWidth","__decorate$1F","RowContainerName","RowContainerType","containerClass","viewportClass","wrapperClass","names","eViewport","allTopNoFW","allStickyTopNoFW","allBottomNoFW","allMiddleNoFW","allNoFW","allMiddle","allCenter","allLeft","allRight","pinnedWidthChangedEvent","enableRtl","sideToCheck","pinnedWidth","marginSide","resetScrollLeft","preventScroll","unsubscribeFromResize","amount","doesRowMatch","fullWidthRow","embedFW","rowsThisContainer","__decorate$1E","animate","display","classList","overflow","ct","bodyViewportClassList","__decorate$1D","centerRowCtrl","__decorate$1C","eGridDiv","gridPanelHasScrolls","vRange","hRange","__decorate$1B","rangeServiceShouldHandleShift","currentCell","processed","navigateParams","scrollIndex","scrollType","scrollColumn","focusIndex","focusColumn","gridCell","pixelsInOnePage","pagingPixelOffset","currentPageBottomPixel","currentPageBottomRow","currentPageTopPixel","currentPageTopRow","up","lastRow","rowPixelDiff","nextCellPixel","lastRowIndex","pixelSum","currentIndex","currentCellHeight","cellToFocus","homeKey","columnToSelect","previous","backwards","cellOrRow","previousCell","previousPos","nextCell","previousEditable","nextEditable","rowsMatch","cellPos","previousPosition","nextPosition","userCell","headerLen","allowUserOverride","hitEdgeOfGrid","normalisedPosition","currentCellFocused","fromBelow","focusEvent","colSpanningList","isGroupStickyEnabled","__decorate$1A","editingRow","setAttribute","actualElement","controlWrapperChanged","providingControls","usingWrapper","putWrapperIn","takeWrapperOut","usingCellValue","putCellValueIn","takeCellValueOut","templateChanged","versionCopy","cellEditorPromise","escapedValue","compClassAndParams","useTaskService","displayComponentVersionCopy","createCellRendererFunc","cellRendererVersion","cellRendererClass","requestVersion","cellEditorInPopup","isPopup","ePopupGui","useModelPopup","positionToUse","positionParams","positionCallback","domOrder","cellCtrls","cellsToRemove","cellCompsToRemove","elementsInOrder","cellsToDestroy","fullWidthRowComponent","cellComps","__decorate$1z","template1","template2","rowCtrls","oldRows","processRow","existingRowComp","oldRowComp","__decorate$1y","dragColumns","__decorate$1x","visibleState","allowedCols","xAdjustedForScroll","firstVisiblePixel","lastVisiblePixel","fromEnter","fakeEvent","mouseX","dragSourceType","allMovingColumns","draggingLeft","draggingRight","newCols","movingGroup","allMovingColumnsOrdered","validMoves","firstValidMove","constrainDirection","displayedCols","potentialMoves","targetOrder","move","order","displayedOrder","fragCount","movingCols","gridCols","firstIndex","parents","allDisplayedCols","allGridCols","movingDisplayedCols","otherDisplayedCols","otherGridCols","displayIndex","widthOfMovingDisplayedCols","leftColumn","numberComparator","displacedCol","firstDisplayIndex","pixelsToMove","pixelsMoved","scrollFeature","columnsThatCanPin","pinType","__decorate$1w","classesOrFunc","classToUse","__decorate$1v","selectAllGui","headerComp","__decorate$1u","headerGroupComp","eHeaderGroupGui","__decorate$1t","HeaderRowType","extraClass","oldComps","comps","leftA","leftB","headerCtrl","__decorate$1s","columnGroupChild","parentRowCtrl","wrapperHasFocus","__decorate$1r","suppressMoveAnimation","oldLeftExists","colOrGroup","oldLeft","oldActualLeft","actualLeft","indexColumn","__decorate$1q","__decorate$1p","eButtonShowMainFilter","eFloatingFilterBody","filterExists","floatingFilterExists","eMenuIcon","nextFocusableEl","nextFocusableColumn","columModel","nextCol","notFromHeaderWrapper","fromWithinHeader","lastFocusEvent","fromTab","shouldFocusLast","setLeftFeature","syncWithFilter","compPromise","wasActive","becomeActive","newCompDetails","compInstance","__decorate$1o","eResize","destroyResizeFuncs","canResize","canAutosize","addResize","finishedWithResizeFunc","skipHeaderOnAutoSize","autoSizeColListener","removeResize","refresh","resize","autoSize","resizeAmount","resizeAmountNormalised","dragChange","notPinningLeft","__decorate$1n","checkbox","allSelected","ariaStatus","feature","rowModelType","__decorate$1m","eHeaderCompWrapper","tooltipFeature","refreshHeaderClasses","classes","oldClasses","hideColumnOnExit","unlockedColumns","updateSortableCssClass","wrapText","numberOfParents","isSpanningTotal","groupHeaderHeight","wrapperElement","isMeasuring","stopResizeObserver","checkMeasuring","startMeasuring","stopMeasuring","descriptionArray","__decorate$1l","takeFromGroup","takeFromLeafCols","preferredSize","leafCols","__decorate$1k","widthChangedListener","__decorate$1j","providedColGroup","eHeaderGroup","allColumnsOriginalOrder","allColumnsCurrentOrder","childSuppressesMoving","__decorate$1i","sizes","numberOfFloating","groupHeight","numberOfNonGroups","numberOfGroups","topOffset","thisRowHeight","oldCtrls","idOfChild","isFocusedAndDisplayed","oldCtrl","ctrlsToDisplay","viewportColumns","actualDepth","__decorate$1h","dropContainer","bodyDropTarget","keepColumns","sequence","focusedHeaderPosition","refreshColumnGroups","groupRowCount","refreshColumns","needNewInstance","refreshFilters","destroyPreviousComp","rowIndexMismatch","allCtrls","includeFloatingFilter","hiddenChanged","widthWithPadding","__decorate$1g","pinnedLeft","pinnedRight","oldRowComps","prevGui","appendEnsuringDomOrder","ctrlId","existingComp","__decorate$1f","HeaderNavigationDirection","centerHeaderContainer","fromHeader","rowLen","isUp","nextRow","nextFocusColumn","skipColumn","focusedHeader","nextHeader","normalisedDirection","nextRowIndex","columnToScrollTo","__decorate$1e","totalHeaderHeight","px","shouldAllowOverflow","__decorate$1d","addContainer","__decorate$1c","__decorate$1b","eMenu","hidePopup","afterGuiDetached","closedCallback","isKeyboardEvent","focusableEl","__decorate$1a","isRightKey","currentPosition","nextItem","focusService","eHeader","eBody","activeItem","activeElement","eHeaderButton","tabbedItem","itemWrapper","onlyUnmanaged","scrollableContainer","__decorate$19","DEBOUNCE_DELAY","useBrowserResizeObserver","resizeObserver","usePolyfill","widthLastTime","heightLastTime","running","periodicallyCheckWidthAndHeight","suppressResize","executeAllFuncs","__decorate$18","isPaginationActive","task","taskItem","taskList","millis","p1TaskList","p1Tasks","p2TaskList","p2Tasks","destroyTasks","frameStart","duration","noMaxMillis","pending","__decorate$17","eHeaderCell","eDummyContainer","eBodyContainer","dummyContainerWidth","autoSizePadding","eCellClone","eCloneParent","eCloneParentClassList","__decorate$16","createRowCon","destroyRowCtrls","stickyRows","firstPixel","addStickyRow","stickyRow","lastChildBottom","lastAncestor","storeBounds","stickRowBottom","thisRowLastPx","firstPixelAfterStickyRows","firstMissingParent","stickRowNode","allStickyNodes","removedCtrls","addedNodes","ctrlsToDestroy","removedCtrl","newCtrls","__decorate$15","countProp","keepDetailRowsCount","liveList","zombieList","cachedList","forEachCellWithThisCol","leftChangedListener","firstRightPinnedChangedListener","lastLeftPinnedChangedListener","colDefChangedListener","embedFullWidthRows","destroyRows","rowIndexesToRemove","rowComps","renderedRow","partialRefresh","indexesToRemove","cellDomData","rowDomData","recycleRows","rowsToRecycle","scrollToTop","suppressScrollToTop","containerHeight","rowCtrlsLength","cellCtrlsLength","stickyRowCtrls","refreshCellParams","cellRenderers","renderer","fullWidthRenderers","rowIdMap","fullWidthRenderer","rowIdsMap","floating","colIdsMap","stubNodeIndexes","ctrlsByIdMap","rowsToRemove","indexToRemove","newFocusedCell","indexesToDraw","indexesToDrawMap","indexesNotToDraw","checkRowToDraw","indexStr","afterScroll","fullWidthCtrl","rowNodesMap","fullWidthCtrls","redraw","indicesToForce","rowCtrlsMap","executeInAWhileFuncs","nodeId","rowBuffer","rowsToBuffer","bufferPixels","gridBodyCtrl","suppressRowVirtualisation","rowHeightsChanged","lastPixel","pageFirstPixel","pageLastPixel","divStretchOffset","bodyVRange","bodyTopPixel","bodyBottomPixel","firstRowIndex","pageFirstRow","pageLastRow","rowLayoutNormal","suppressRowCountRestriction","rowBufferMaxSize","firstDiffers","lastDiffers","topPixel","bottomPixel","rowHasFocus","rowIsEditing","rowIsDetail","rowCtrlFromCache","renderedRows","rowPosition","gridRow","startIndex","endIndex","blockAfterViewport","maxCount","rowCtrlToDestroy","rowNodeId","__decorate$14","suppliedFormatter","useFormatterFromColumn","formatter","__decorate$13","allData","nextRowTop","dataItem","idPrefix","ServerSideTransactionResultStatus","keepingColumns","pathItem","traverseEverything","traverseLeafNodes","includeUnchangedNodes","newEntryCount","newEntry","thisItem","parentItem","valueColumns","colsForThisNode","thisIsMostRecentRequest","weAreNotDestroyed","success","__decorate$12","blockLoadDebounceMillis","block","loadAvailability","blocksToLoad","__decorate$11","startPixel","endPixel","startLimitIndex","endLimitIndex","modelUpdatedEvent","paginationChangedEvent","pageNumber","lastPage","masterLastRowIndex","masterPageStartIndex","masterPageEndIndex","firstIndexNotToShow","maxRowIndex","__decorate$10","onApplicableClass","onNotApplicableClass","classRules","classNames","classesToApply","classesToRemove","rule","resultOfRule","singleClass","cellClass","classOrClasses","cssClassItem","usingSafari","minDate","maxDate","__decorate$$","eventChanged","textValue","sliderValue","minValue","maxValue","__decorate$_","enabled","suppressEnabledCheckbox","suppressOpenCloseIcons","initialItems","showIcon","newCls","itemToHide","skipToggle","__decorate$Z","TabGuardClassNames","eTopGuard","eBottomGuard","focusInnerElement","onFocusIn","onFocusOut","shouldStopEventPropagation","onTabKeyDown","handleKeyDown","guard","fromBottom","tabGuardsAreActive","focusable","tabGuardToFocus","tabGuards","tabGuard","topTabGuard","bottomTabGuard","__decorate$Y","parentGui","topMenu","menuItems","menuItemOrString","menuItemDef","menuItem","currentItem","separatorHtml","nextParent","foundCurrent","__decorate$X","wrappedComponent","__decorate$W","activateFirstItem","destroySubMenu","currentLevel","nextLevel","childMenu","subMenu","menuPanel","subMenuGui","mouseEnterListener","openSubMenu","shortcut","__decorate$V","closable","hideTitleBar","closeButtonComp","bodyComponent","eTitleBarButtons","__decorate$U","maximizable","alwaysOnTop","modal","destroyListener","eTitleBar","maximizeButtonComp","__decorate$T","controller","docControllers","newControllers","currentGridCore","isKeyboardActive","controllersForDoc","clearFocusedCellListener","gridCompController","colFromColumnModel","eBrowserCell","ePointer","preventScrollOnBrowserFocus","focusedColumn","focusedHeaderRowIndex","headerPosition","exclude","focusableString","excludeString","excludeNodes","focusableElements","toFocus","referenceElement","referenceIndex","lastTabGuardIndex","onlyManaged","activeEl","nextIndex","managedContainers","forceOut","__decorate$S","DIRECTION","sourceRect","maxX","xLeftPosition","xRightPosition","nudgeX","nudgeY","skipObserver","alignSide","updatePosition","keepWithinBounds","lastSize","updatePopupPosition","fromResizeObserver","popupParent","bounds","sizeProperty","anchorProperty","offsetProperty","scrollPositionProperty","docElement","documentRect","isBody","offsetSize","sizeOfParent","wrapperEl","removeListeners","ePopupParentRect","allThemes","popupEl","pointerEvent","afterGuiAttached","closeOnEsc","popupHidden","hidePopupOnKeyboardEvent","hidePopupOnMouseEvent","hidePopupOnTouchEvent","popupParams","relativeElement","destroyPositionTracker","initialDiffTop","initialDiffLeft","lastDiffTop","lastDiffLeft","leftPx","pRect","sRect","currentDiffTop","newTop","currentDiffLeft","newLeft","intervalId","indexOfThisChild","originalMouseEvent","mouseEventOrTouch","screenX","screenY","xMatch","yMatch","popupList","popupLen","alwaysOnTopList","onTopLength","innerEls","innerElsScrollMap","__decorate$R","listName","ariaEl","destroyObserver","rowNumber","viewportTopPixel","viewportBottomPixel","viewportScrolledPastRow","viewportScrolledBeforeRow","componentCreator","componentUpdater","softRefresh","finish","rowComponent","useCapture","isPassive","__decorate$Q","ctrlPressed","upKey","downKey","leftKey","lastCell","colToLeft","colToRight","nextStickyPosition","nextCtrl","rowBelow","rowAbove","newRowIndex","newFloating","newColumn","__decorate$P","otherGrids","otherGridOptions","alignedGridService","alignedGridsService","colEvent","groupOpenedEvent","masterColumnGroup","otherColumnGroup","masterColumn","otherColumn","masterColumns","movedEvent","destColState","visibleEvent","pinnedEvent","resizedEvent","isVerticalScrollShowing","alignedGrids","__decorate$O","propChange","suppressFinishActions","rangeSelect","lastSelectedNode","nodesChanged","fromNode","toNode","nodesToSelect","newSelectedNodes","changedPath","rowNodeToKeepSelected","groupsToRefresh","otherRowNode","topLevelNodes","traverse","maybeGroup","rowModelClientSide","justFiltered","justCurrentPage","selectedCount","notSelectedCount","recursivelyAddChildren","clientSideRowModel","__decorate$N","__decorate$M","forFilter","groupDataExists","aggDataExists","ignoreSsrmAggData","ssrmFooterGroupCol","cellValueGetter","openedGroup","valueSetter","valueWasDifferent","onCellValueChanged","isFieldContainsDots","valuesAreSame","fieldPieces","fieldPiece","valueFromCache","keyCreator","keyParams","__decorate$L","functionBody","theFunction","__decorate$K","templateFromCache","callbackList","that","client","httpResult","__decorate$J","Logger","isLoggingFunc","__decorate$I","focusableContainers","nextIdx","lastColumn","__decorate$H","eRootWrapperBodyClassList","dropZones","sideBar","statusBar","watermark","__decorate$G","nextDirection","isColumnsSortingCoupledToGroup","columnsToUpdate","sortableRowGroupColumns","lastColToChange","isCoupled","groupParent","lastSortIndexCol","allSortedCols","allSortedColsWithoutChanges","sortedCols","columnsToSkip","columnToClear","sortingOrder","notInArray","lastItemInArray","isSortingLinked","isAggregated","isSecondary","isGroup","sortedRowGroupCols","isSortLinked","allColsIndexes","iA","iB","indexMap","groupDisplayCol","col1","idx1","col2","idx2","isColumnSortCouplingActive","isGroupDisplayColumn","linkedColumns","sortableColumns","firstSort","__decorate$F","__decorate$E","animationThreadCountCopy","nowFuncs","waitFuncs","__decorate$D","newPageSize","__decorate$C","__decorate$B","SOURCE_PASTE","onlyChangedColumns","__decorate$A","jsCompFunc","metadata","Adapter","callbackResult","candidate","__decorate$z","__decorate$y","themeFamily","themeElement","useTheme","classesFromThemeElement","prevEl","currentClass","currentDiv","calculatedValue","sizeName","reg","themeMatch","sassVariableName","oldRowHeight","measuredMin","__decorate$x","newScrollY","newBodyHeight","scrollPercent","newOffset","newOffsetFloor","modelHeight","modelPixel","modelMaxScroll","__decorate$w","nextChildrenFunc","rowSelectable","firstSelectable","__decorate$v","paginationPanelEnabled","pagesExist","toDisplay","strPage","strTo","strOf","strFirst","strPrevious","strNext","strLast","compId","totalPages","zeroPagesToDisplay","onLastPage","pageSize","lastPageFound","moreText","__decorate$u","LoadingType","overlayWrapperClassList","loadingType","workItem","isEmpty","isSuppressNoRowsOverlay","__decorate$t","pinnedBottomCount","pinnedTopCount","rowA","rowB","__decorate$s","cellA","cellB","colsMatch","floatingMatch","indexMatch","cellValueChanges","initialRange","finalRange","maxStackSize","__decorate$r","eventCell","isCellEditing","isRowEditing","cellValueChange","undoRedoLimit","operationPerformed","endEvent","undoRedoStack","opposingUndoRedoStack","rangeProperty","cellValueChangeProperty","undoRedoAction","valueExtractor","cellRangeParams","setRangeToCell","__decorate$q","nextColumn","getGroupMethod","getColMethod","currentRowType","isColumn","leafChild","__decorate$p","pivotColumns","colGroupDefs","addToResult","childDef","lastPointer","parentDef","existingParentDef","defCloned","colDefCloned","__decorate$o","rowCls","rowClass","rowClassFuncResult","rowClassParams","__decorate$n","sortOptions","mapper","sortedRowNodes","sortedNodeA","sortedNodeB","sortOption","comparatorResult","providedComparator","comparatorOnCol","groupLeafField","primaryColumn","displayCol","__decorate$m","gridHeaderCtrl","__decorate$l","meta","ControllerClass","__decorate$k","activateEvents","deactivateEvents","__decorate$j","spacerWidthsListener","bottomPinnedHeight","vScrollShowing","rightSpacing","scrollOnRight","leftSpacing","hScrollShowing","invisibleScrollbar","isSuppressHorizontalScroll","scrollContainerSize","__decorate$i","__decorate$h","__decorate$g","gridApi","callbackParams","mergedParams","eventParams","callbackMethodName","allowEstimate","domData","domDataKey","autoGroupColumnDef","userValue","__decorate$f","getLocaleText","variableValues","localeText","localisedText","__decorate$e","adjustedScrollbarWidth","gridBodyViewportEl","__decorate$d","defaultDataTypes","dataTypeDefinition","mergedDataTypeDefinition","overriddenDataTypeMatcher","parentDataTypeDefinition","childDataTypeDefinition","alreadyProcessedDataTypes","extendsCellDataType","baseDataTypeDefinition","extendedDataTypeDefinition","mergedExtendedDataTypeDefinition","parentCellDataType","userColDef","dataTypeDefinitionColumnType","propsToCheckForInference","columnTypeDefs","columnTypeDef","comparisonValue","checkProps","_cellDataType","dataTypeMatcher","resolvedObjectDataTypeDefinition","defaultObjectDataTypeDefinition","formatValue","valueFormatter","usingSetFilter","valA","valB","_filterValues","pathKey","monthKey","convertToDate","defaultDateFormatMatcher","__decorate$c","valueParser","gridComp","createUi","acceptChanges","debug","registeredModules","beanClasses","providedBeanInstances","contextParams","contextLogger","isEnterprise","agStackComponents","passedViaConstructor","registered","allModules","mapNames","addModule","mod","currentModule","compMeta","seed","moduleAgStackComps","rowModelModules","rowModelModuleNames","moduleBeans","beansNoDuplicates","moduleEntities","extractor","readyEvent","OriginalConstructor","mandatoryMethodList","optionalMethodList","componentType","BarColumnLabelPlacement","selectionService","rowDataTran","rowNodeTransaction","nodesToUnselect","add","newNodes","normalisedAddIndex","nodesBeforeIndex","nodesAfterIndex","remove","rowIdsRemoved","setExpanded","numRowGroupColumns","masterRowLevel","expandByDefault","__decorate$b","RecursionType","refreshEverythingFunc","refreshEverythingAfterColsChangedFunc","refreshMapListener","atLeastOneChange","rowAtStartPixel","rowAtEndPixel","displayedRowsMapped","changedPathActive","clearIfNotDisplayed","recurse","isRootNode","indexAtPixelNow","rowNodeAtPixelNow","highlight","filteredChildren","topLevelIndex","rowNodeTransactions","noTransactions","transWithAddsOrDeletes","tx","paramsStep","stepsMapped","paramsOrStep","displayedNodesMapped","rowsMissing","firstInRange","lastInRange","started","groupsSelectChildren","pixelToMatch","bottomPointer","topPointer","oldBottomPointer","oldTopPointer","midPointer","recursionType","firstNode","nodeChildren","expand","usingTreeData","usingPivotMode","recursiveExpandOrCollapse","actionRow","afterColumnsChanged","rowDataUpdatedEvent","waitMillis","callbackFuncsBound","rowNodeTrans","forceRowNodeOrder","tranItem","rowNodeTran","orderMap","detailNode","__decorate$a","__decorate$9","sortActive","deltaSort","sortContainsGroupColumns","__decorate$8","skipLeafNodes","showRootNode","topList","atLeastOneRowPresent","rowsToFlatten","hideOpenParents","groupRemoveSingleChildren","groupRemoveLowestSingleChildren","isParent","isSkippedLeafNode","isRemovedSingleChildrenGroup","isRemovedLowestSingleChildrenGroup","neverAllowToExpand","isHiddenOpenParent","excludedParent","uiLevelForChildren","isGroupMultiAutoColumn","masterNode","__decorate$7","useDeltaSort","groupMaintainOrder","groupColumnsPresent","allDirtyNodes","isPivotMode","skipSortingPivotLeafs","childrenToBeSorted","indexedOrders","row1","row2","dirtyNodes","addNodesFunc","tran","allTouchedNodes","unsortedRows","oldSortedRows","untouchedRowsMap","touchedRows","sortedUntouchedRows","mapNodeToSortedNode","sortedChangedRows","listToSort","clearOperation","childRowNode","displayingGroupKey","parentToStealFrom","__decorate$6","filterActive","includeChildNodes","passBecauseChildren","passBecauseDataPasses","treeDataDepthFirstFilter","alreadyFoundInParent","foundInParent","treeDataFilterCallback","defaultFilterCallback","__decorate$5","getRowIdProvided","transactionAndMap","orderIdMap","existingNodesMap","existingNode","VERSION$2","__decorate$4","parentCache","dontTouchLastAccessed","localIndex","finalRowCount","__decorate$3","dontCreatePage","blockId","blockNumber","newBlock","blockToExclude","blocksForPurging","lastAccessedComparator","maxBlocksProvided","blocksToKeep","emptyBlocksToKeep","purgeBecauseBlockEmpty","purgeBecauseCacheFull","blockIndexStart","blockIndexEnd","blockToRemove","lastRowIndexPlusOverflow","lastRowIndexKnown","blockComparator","blocksToDestroy","lastBlockId","inActiveRange","numberSequence","foundGapInSelection","hitFirstOrLast","__decorate$2","resetRequired","rowIndexForPixel","VERSION$1","fileName","extension","serializingSession","valueService","valueFormatterService","valueParserService","processCellCallback","processHeaderCallback","processGroupHeaderCallback","processRowGroupCallback","columnsToExport","accumulatedRowIndex","currentColumnIndex","isGroupUseEntireRow","isFooter","groupValue","valueToParse","valueToFormat","suppressQuotes","columnSeparator","rowCellValue","stringValue","__decorate$1","packagedFile","skipDefaultParams","__decorate","gridSerializingSession","rowSkipper","skipSingleChildrenGroup","skipLowestSingleChildrenGroup","isExplicitExportSelection","isLeafNode","skipRowGroups","shouldSkipLowestGroup","shouldSkipCurrentGroup","rowAccumulator","appendContent","prependContent","gridRowIterator","usingCsrm","usingSsrm","onlySelectedNonStandardModel","exportedRows","compareNodes","columnKeys","directChildrenHeaderGroups","columnIndex","collapsibleGroupRanges","collapsibleGroups","currentIdx","lastGroup","VERSION","headerElement","headerStart","headerEnd","att","xmlElement","booleanTransformer","prefixedSet","xmlValue","paths","isBase64","mimeType","textOutput","uInt8Output","fData","totalFiles","foData","lL","cL","currentFile","fileHeader","folderHeader","foEnd","created","utf8_encode","decToHex","utfPath","isUTF8","time","extraFields","uExtraFieldPath","convertedContent","tLen","cLen","lLen","uint8","iterable","crc","componentDefinition","provides","vNode","destroy","maxDepth","suppressError","componentInstance","currentParent","depth","currentParentAsThis","DynamicComponent","unmount","kebabName","indirectName","thisAsAny","currentRowData","previousRowData","later","frameworkComponentWrapper","gridParams","colProp","columnIdx","tabPanelVjson","EventBus","tabIdx","tpIdx","tpItem","_component_MoreFilled","newTabName","_component_split","_component_split_area","_component_Close","panelSize1","panelSize2","envs","_component_el_table","_component_el_table_column","formatNumber","formatList","resultList","query","oldValIsIn","newValIsIn","dictCode","table","field2","computMeta","vjsonDefineStr","vjsonDefine","_component_el_option_group","exprType","_component_yv_querycode","_component_YvQueryField","exprs","exprItem","sb","isFirst","ast","exprs_1","tableAndProperty","entity","propertyMeta","entityName","metaEntity","metaProperty","$exprform","_component_el_result","_component_YvQuerycode","_component_YvOrdercode","notEmptyList","listValue","metaProperties","tabMode","env","treeItem","_component_YvVjsonParambuild","_component_YvQuerybuild","_component_YvOrderbuild","_component_YvSrcEditor","_component_Markdown","_component_CircleCheck","vjsonString","editorXtype","createByTemplate","_component_yv_vjson_log","viewType","objc","uuid","dx","dy","subViews","topLine","leftLine","bottomLine","rightLine","lineObj","WIDGET_NAME","_component_el_image","install","YvVJsonLayout","cookie_name","allcookies","cookie_pos","cookie_end","CodeWindow","methodListReload","funcObj","funcPropName","parentObj","app","q","tail","md5blks","hex_chr","lsw","document","md5","license","isTrial","restrictionHashed","licenseKey","cleanedLicenseKey","hashStart","trialExpired","expiry","loc","hostname","pathname","monthNames","monthIndex","keystr","u","gridReleaseDate","current","formattedExpiryDate","formattedReleaseDate","CellClearType","defaultPrevented","handlePasteEvent","currentPastOperationTime","textArea","parsedData","pasteOperation","cellsToFlash","updatedRowNodes","strData","isNewline","char","insideQuotedField","previousChar","currentChar","nextChar","ensureDataExists","pasteOperationFunc","clipboardData","abortRepeatingPasteIntoRows","indexOffset","dataRowIndex","rowCallback","columnsToPasteInto","firstRowValues","firstRowValue","lastLine","clipboardGridData","rowPointer","skipGroupRows","getNextGoodRowNode","clipboardRowData","processedValue","cut","includeHeaders","includeGroupHeaders","copyParams","shouldCopyRows","cellClearType","onlyFirst","isLastRange","rangeIndex","isLastRow","allRangesMerge","columnsSet","rowPositionsMap","allRowPositions","allCellsToFlash","rowPositions","rowPositionAsString","exportedColumns","exportParams","processCellForClipboard","canParse","canFormat","userProvidedFunc","focusedElementBefore","callbackNow","callbackAfter","eDoc","eTempInput","guiRoot","startRangeIndex","endRangeIndex","ExpandState","showFilter","showSelect","showExpand","groupsPresent","passesFilter","groupedColumns","menuList","menuItemsMapped","hideFunc","isInactive","isActive","modelItem","allowDragging","focusWrapper","checkboxGui","checkboxInput","contextMenu","nextState","extractCols","columnLabel","checkboxValue","visibilityLabel","selectedValue","readOnlyValue","visibleLeafColumns","checkedCount","uncheckedCount","colsThatCanAction","pivoted","grouped","aggregated","oldState","folderOpen","cbValue","virtualList","virtualListGui","hoveredColumnItem","maxLen","normalizedRowIndex","targetIndex","currentColumns","columnItemComponent","isBefore","targetColumnIndex","adjustedTarget","groupsExist","indent","anyFunctionActive","canBeToggled","canBeDragged","functionsReadOnly","noFunctionsAllowed","enableRowGroup","enableValue","lockPosition","suppressMovable","lockVisible","forceDraggable","disableDraggable","checkboxPassive","columnListName","listItemElement","renderedGroup","columnComp","expandedStates","pivotModeActive","colGroup","columnExpandedListener","addListeners","removeFunc","recursivelyBuild","createGroupItem","createColumnItem","columnGroupDef","recursiveFunc","focusedRow","groupIds","expandedGroupIds","unrecognisedGroupIds","expandedCount","notExpandedCount","selectAllChecked","recursivelyCheckFilter","parentPasses","atLeastOneChildPassed","groupPasses","childPasses","expandState","selectionState","noValueColumns","noUserAgg","aggDetails","pivotActive","measureColumns","notPivoting","measureColumnsMissing","pivotColumnsMissing","aggResult","secondaryColumns","secondaryCol","pivotTotalColumnIds","aggResults","currentColId","changedValueColumns","notChangedValueColumns","values2d","oldValues","valueColumn","mappedSet","mapPointer","valueColumnCount","aggFuncOrString","pivotResultColumn","aggFuncAny","nodeDetails","afterColsChanged","leafNodes","groupNodes","unbalancedNode","groupedCols","batchRemover","parentsWithChildrenRemoved","recursiveSort","childNodes","infoToKeyMapper","oldPath","newPath","newParent","leafRowNodes","nodeParents","nodesToRemove","provided","batchRemoverIsLocal","batchRemoverToUse","nodeToRemove","newGroupNode","possibleEmptyGroups","checkAgain","groupShouldBeRemoved","mapKey","possibleEmptyGroup","d1","d2","groupInfo","noFurtherProcessingNeeded","groupDisplayColumns","newGroupDisplayColIds","newRowNodes","isMove","parentGroup","nextNode","fillerGroup","userGroup","groupNode","userCallback","groupInfoMapper","keyExists","uniqueValues","levelsDeep","pivotColumnGroupDefs","extractColDefs","pivotColumnDefs","pivotColumnDefsClone","uniqueValue","primaryPivotColumns","primaryPivotColumnDefs","newPivotKeys","groups","measureCol","recursivelyAddSubTotals","groupDef","currentPivotColumnDefs","acc","childAcc","grp","firstGroup","totalColDef","pivotValueColId","insertAfter","valueCols","valueCol","childColIds","withGroup","parentChildren","addGroup","valueGroup","totalColumn","colDefToCopy","userComparator","m1","m2","updatedList","measureColumnId","uniqueValuesChanged","aggregationColumns","aggregationColumnsHash","aggregationFuncsHash","aggregationColumnsChanged","aggregationFuncsChanged","groupColumnsHash","groupColumnsChanged","newValues","json1","json2","recursivelyBucketFilteredChildren","mappedChildren","pivotColumn","allKeys","allowed","funcExists","defaultAgg","userAllowedFuncs","valueToAdd","existingAggData","dragSourceDropTarget","dropZonePurpose","horizontal","isFunctionsReadOnly","aggFuncName","aggSeparator","columnSort","isSortSuppressed","ariaInstructions","aggregationMenuAria","sortProgressAria","deleteAria","canSort","isGroupingZone","performSort","isEnter","displayValueSanitised","popupHiddenFunc","rowToFocus","itemSelected","aggFuncStringTranslated","isNext","isPrevious","mouseLocation","boundsList","hoveredIndex","goodDragColumns","columnsToRemove","newColumnList","columnsToAdd","colsToAddNoDuplicates","resizeEnabled","focusedIndex","alternateElement","indexToFocus","itemsToAddToGui","dndColumns","columnComponent","eGroupIcon","eTitle","eMessage","emptyMessage","topPanelGui","dropPanelVisibleListener","bothDisplayed","grouping","isAggFilterActive","defaultPrimaryColumnPredicate","defaultSecondaryColumnPredicate","applyFilterToNode","preserveChildren","filterChildren","allSourceColumns","sourceColumn","filterPromises","filterColumnPairs","selectedFilterColumnPair","canShowUnderlyingFloatingFilter","parentFilterInstance","floatingFilter","_model","selectedFilter","hideFilter","hideSelect","defaultParams","pivotModeListener","columnDrop","columnDropEls","lastVisible","elementToResize","isEnd","inverted","buttonComp","toParse","lookupResult","toAdd","resizeBar","sideBarButtonsComp","sideBarGui","openPanel","currentButton","currentPos","innerButton","sideBarRaw","shouldDisplaySideBar","toolPanelDefs","resizerSide","wrapperGui","currentlyOpenedKey","newlyOpenedKey","toolPanelWrapper","toolPanel","previousKey","switchingToolPanel","activeToolPanel","invalidColIds","createDummyColGroup","mappedResults","syncLayoutCallback","leafPathTrees","mergedColumnTrees","getLeafPathTree","leafPathTree","matchingRootGroupIds","pathA","pathB","mergeTrees","treeA","treeB","mergeResult","groupToMerge","mergeColDefs","second","subGroupIsSplit","currentSubGroup","currentSubGroupToAdd","existingChildIds","childGroupAlreadyExists","lastChildIsDifferent","currentGroup","groupToAdd","subGroup","colTree","allItems","colStateItems","copyOfPivotColumns","copyOfValueColumns","copyOfRowGroupColumns","pivotChanged","rowGroupChanged","mergeAcross","styleId","cells","styleProperties","readingOrder","rotate","shrinkToFit","verticalText","borderBottom","borderLeft","borderRight","borderTop","bold","fontName","italic","shadow","strikeThrough","underline","verticalAlign","charSet","family","patternColor","currentWorksheet","docProps","eWorkbook","wb","boolean","docProperties","points","finalHeight","image","columnsInSpan","totalHeight","nextRowHeight","xmlBody","fromCharCode","tableIdx","customContent","outlineLevel","rowObj","excelStyles","excelStyleId","currentCells","collapsibleRanges","styleIds","suppressRowOutline","rowGroupExpandState","collapseAll","isExpanded","longestRow","nameForCol","onNewColumnAccumulator","skipCols","valueForCell","addedImage","excelId","resultantStyle","excelStyle","actualStyle","typeTransformed","cdataStart","cdataEnd","cdataEndRegex","convertBoolean","numOfCells","author","jsonDate","ContentType","Extension","PartName","sheetLen","worksheets","sheetsWithImages","imageTypesObject","imageDocs","ext","contentType","imageAnchor","primaryColor","secondaryColor","blipChildren","transparency","imageBoxSize","xfrm","rotation","fitCell","offsetX","offsetY","worksheetImageIndex","sheetIndex","sheetImages","sheetImageIds","boxSize","innerType","lastClr","typeface","script","panose","schemeColor","satMod","lumMod","tint","shade","rotWithShape","gs1","gs2","gs3","lin","ang","scaled","w","cap","cmpd","algn","blurRad","dist","dir","strMap","textNode","strings","numberFormat","formatCode","numFmtId","numberFormats","font","colorTheme","scheme","fonts","fill","patternType","fgTheme","fgTint","fgRgb","bgRgb","bgIndexed","pf","fills","namedWeight","mappedName","border","diagonal","leftChildren","rightChildren","topChildren","bottomChildren","diagonalChildren","borders","protection","locked","xf","borderId","fillId","fontId","xfId","xfs","cellStyle","builtinId","cellStyles","currentSheet","convertedPattern","convertedFillColor","convertedPatternColor","currentFill","currentFormat","bottomStyle","topStyle","leftStyle","rightStyle","bottomColor","topColor","leftColor","rightColor","currentBorder","clS","clC","crS","crC","ctS","ctC","cbS","cbC","utf8Name","convertedColor","familyId","convertedUnderline","convertedVerticalAlign","currentFont","interior","currentNumberFmt","defaultFontSize","cellStylesXfs","cellXfs","_currentSheet","sheetId","bestFit","excelWidth","customWidth","convertedType","mergeMap","posCounter","mergedCells","collapsed","suppressColumnOutline","cellsWithCollapsibleGroups","merges","cellIdx","outputRow","rangeMap","currentRange","rangeString","refCol","currentOutlineLevel","orientation","sheetNumber","mergeCells","mergedCell","margins","footer","pageSetup","headerString","curr","headerFooterConfig","headersAndFooters","headerFooter","namePrefix","nameSuffix","differentFirst","differentOddEven","maxOutline","Id","Type","Target","relationship","currentSheetIndex","registeredImage","calculatedImage","currentSheetImages","currentImage","worksheetImageIdMap","append","rs","worksheetImageIds","XMLArr","currentRelationIndex","fontSize","hasImages","imgCounter","firstImage","imageRelationCounter","contents","drawingFolder","drawingFileName","relFileName","worksheetRelFile","packageFile","factoryMode","isXlsx","sheetName","rowType","isHeader","isGroupHeader","headerClasses","applicableStyles","EXPAND_STATE","showFilterSearch","isFilterGroupPresent","filterGroupsPresent","hideHeader","filterPanelWrapper","guiPromise","filterContainerEl","isDisplayed","childFilterComps","expandedCallback","showingColumn","groupParams","expandListener","collapseListener","anyChildFiltersActive","expansionState","hideFilterCompHeader","filterGroupComp","newDepth","suppressFiltersToolPanel","recursiveGetExpansionState","updatedGroupIds","updateGroupExpandState","filterGroup","updatedColIds","anyChildrenChanged","updateFilterExpandState","unrecognisedColIds","updateExpandCounts","searchText","searchFilter","groupName","recursivelySearch","filterItem","groupNamePasses","alreadyPassed","anyChildPasses","firstVisible","firstIdx","lastIdx","hideExpand","hideSearch","extendStatics","__","TimeInterval","encode","decode","rangeCallback","stop","extend","e0","_super","CountableTimeInterval","snapTo","initialOffset_1","encoded","utc","weekday","base","userAgent","HdpiCanvas","domLayer","zIndex","overrideDevicePixelRatio","img","fileFormat","dataUrl","ratio","pixelRatio","canvas","xmlns","svg","svgText","isChrome","isFirefox","isSafari","textBaseline","textAlign","metrics","cache","fontCache","size_1","bbox","overrides","name_1","BBox","other","amt","paddingCopy","boxes","box","il","Matrix","A","B","C","rD","xx","xy","yx","yy","h_w","h_h","cx","cy","sourceMatrix","matrix","scalingX","scalingY","translationX","translationY","opts","bbcx","bbcy","sx","sy","scx","scy","cos","sin","rcx","rcy","ty","tx4","ty4","domMatrix","nextId","RedrawType","changeCb","convertor","privateKey","checkDirtyOnAssignment","setterJs","getterJs","setter","getter","ChangeDetectable","_source","_opts","PointerEvents","Node","datum","e_1","e_1_1","e_2","nodes_1","nodes_1_1","e_2_1","_x","_y","containsPoint","hit","e_3","childResult","e_3_1","scalingCenterX","scalingCenterY","rotationCenterX","rotationCenterY","renderCtx","stats","topLeft","bottomRight","parentType","e_4","e_4_1","e_5","dirtyCount","visibleCount","childCount","childVisibleCount","childDirtyCount","e_5_1","toLiteral","logContent","Group","zIndexSubOrder","scene","getComputedOpacity","getVisibility","opacity","_j","consoleLog","_k","dirty","dirtyZIndex","layer","clipRect","forceRender","clipBBox","resized","canvasCtxTransform","isDirty","isChildDirty","currentBBox","counts","groupVisible","renderContextChanged","childRenderContext","skipped","children_1","children_1_1","HdpiOffscreenCanvas","WINDOW","Scene","lessThanZero","nan","unchanged","layeredModes","advLayer","newLayer","domCanvases","newLayerIndex","lastLayer","newZIndex","newZIndexSubOrder","layers","layers_1","layers_1_1","debugSplitTimes","extraDebugStats","pendingSize","canvasCleared","dirtyTree","imageSource","renderCtxStats","pct","rendered","time_1","layersRendered","layersSkipped","nodesRendered","nodesSkipped","splits","extras","statsSize","statsSize_1","statsSize_1_1","stat","sceneNodeHighlight","debugNodes","regexpPredicate","matcher","stringPredicate","sceneNodeHighlight_1","sceneNodeHighlight_1_1","next","childTree","treeNodeName","childrenDirtyTree","Gradient","radians","degrees","LinearGradient","angleOffset","stops","angle","diagonalAngle","quarteredAngle","gradient_1","Shape","shape","protoStyles","linearGradientMatch","colors_1","colorsPart","colorRegex","alignedStart","globalAlpha","fillShadow","Text","stroke","strokeWidth","lineDash","lineDashOffset","lineCap","lineJoin","renderCallback","lines","lineHeights","maxHeight","textProps","wrapping","measurer","cumulativeHeight","lines_1","lines_1_1","wrappedLine","initialSize","words","wrapResult","linesCount","balanced","wrappedText","ln","firstLineWidth","hyphens","isPunctuationAt","breaks","partWidth","breaks_1","breaks_1_1","forceEllipsis","lineWidth","ellipsisWidth","trunc","truncWidth","breakWord","hyphenate","spaceWidth","wordsBrokenOrTruncated","linesTruncated","currentLine","addNewLine","expectedHeight","wordWidth","expectedSpaceWidth","expectedLineWidth","availWidth","breakLoop","totalWordsWidth","totalSpaceWidth","averageLineWidth","newLine","words_1","words_1_1","getTextSize","getLineWidth","fontProps","fontFamily","fontStyle","fontWeight","baselineDistance","firstLineHeight","lineSize","Observable","allEventListeners","eventListeners","isNumberObject","isDate","isContinuousScale","Color","po","pc","rgba","alpha","rgb","fractionDigits","S","H","rc","gc","bc","hueShift","saturationFactor","brightnessFactor","opacityFactor","hsb","c0","c1","propertyKeyOrSymbol","valueStoreKey","prevSet","prevGet","transformFn","setters","setters_1","setters_1_1","setTransform","getTransform","getters","cleanKey","targetClass","targetClassName","predicates","otherField","Layers","ChartAxisDirection","domain","values_1","values_1_1","accuracy","extent","DataModel","props_1","props_1_1","_loop_1","this_1","properties_1","properties_1_1","searchId","processedData","groupByKeys","groupByFn","aggregates","groupProcessors","reducers","processors","propertyProcessors","e_6","e_7","e_8","keyDefs","valueDefs","dataVisible","dataDomain","processValue","resultData","resultDataIdx","keyIdx","keyDefs_1","keyDefs_1_1","e_7_1","valueIdx","valueDefs_1","valueDefs_1_1","e_8_1","e_6_1","propertyDomain","groupingFn","e_9","e_10","dataEntry","groupStr","existingData","e_9_1","resultGroups","e_10_1","e_11","e_12","e_13","aggDefs","resultAggValues","resultAggValueIndices","resultAggFns","resultGroupAggFns","resultFinalFns","_l","_m","resultIdx","resultAggValueIndices_1","resultAggValueIndices_1_1","indices","groupAggValues","_loop_2","distinctValues","valuesToAgg","valuesAgg","e_13_1","finalValues","e_12_1","e_11_1","e_14","e_15","e_16","e_17","groupProcessors_1","groupProcessors_1_1","processor","valueIndexes","adjustFn","e_16_1","e_15_1","e_17_1","e_14_1","e_18","propertyProcessors_1","propertyProcessors_1_1","adjust","e_18_1","e_19","e_20","reducerDefs","accValues","reducerIndex","reducers_1","reducers_1_1","reducer","e_20_1","e_19_1","accIdx","e_21","processorDefs","processorDefs_1","processorDefs_1_1","e_21_1","processorFns","initDataDomainKey","updateDataDomain","initDataDomain","previousDatum","valueInDatum","missingValueDef","log","flattenedValues","aggValues","skipKeys","skipAggValues","warn","newPropName","mapValue","warnDeprecated","defaults","backgroundColor","titleHtml","TooltipPosition","Tooltip","canvasElement","observer","entries","entries_1","entries_1_1","entry","styleElement","showArrow","newClass","lastClass","enableInteraction","wasVisible","toggleClass","html","instantly","low","actual","high","xOffset","yOffset","canvasRect","naiveLeft","naiveTop","windowBounds","maxLeft","maxTop","constrained","defaultShowArrow","classListContains","accumulator","aggFn","keyRange","keyWidth","SeriesNodePickMode","continuous","defOpts","SeriesNodeBaseClickEvent","nativeEvent","series","SeriesNodeClickEvent","SeriesNodeDoubleClickEvent","SeriesItemHighlightStyle","SeriesHighlightStyle","TextHighlightStyle","HighlightStyle","SeriesTooltip","SeriesTooltipInteraction","Series","useSeriesGroupLayer","useLabelLayer","pickModes","directionKeys","directionNames","rootGroup","resolvedDirection","flatten","array_1","array_1_1","addValue","dimOpacity","defaultOpacity","defaultStrokeWidth","highlightedDatum","itemId","highlighting","limitPickModes","pickModes_1","pickModes_1_1","pickMode","_point","_requireCategoryAxis","_datum","eventObject","_itemId","axis","fixedExtent","Padding","SizeMonitor","NativeResizeObserver","edgeX","edgeY","r1","x2","y2","w2","h2","xOverlap","yOverlap","r2x","r2y","r2w","r2h","labels","withinBounds","overlapPoints","overlapLabels","overlap","state_1","scheduleFn","scheduleCount","promiseRunning","awaitingPromise","awaitingDone","busy","done","scheduleCb","maybePromise","roots","Q","R","third","T","Im","t_1","theta","thirdA","twoSqrtQ","ax1","ay1","ax2","ay2","bx1","by1","bx2","by2","ua","ub","px1","py1","px2","py2","px3","py3","px4","py4","x1","y1","intersections","bx","by","roots_1","roots_1_1","tt","ttt","P1","P2","P3","P4","startAngle","endAngle","counterClockwise","y0","i1x","i2x","isXInsideLine","a1","a2","intersectionAngle","Command","Path2D","commands","commands_1","commands_1_1","command","sAngle","eAngle","antiClockwise","endX","endY","cx1","cy1","cx2","cy2","trackChanges","cn","ox","oy","py","intersectionCount","ci","pi","Path","Marker","half","moves","moves_1","moves_1_1","mx","my","Circle","SeriesMarker","Selection","classOrFactory","iterate","old","results","Class","tag","BandScale","didChange","round","paddingInner","paddingOuter","r0","rawStep","fullBandWidth","x0","bw","bandwidth","rawBandwidth","Line","epsilon","fractionOrSignificantDigits","power","ArcType","Arc","childName","childProperty","newValueFn","oldValueFn","changeValueFn","Caption","containerWidth","wrapped","arrA","arrB","ContinuousScale","strict","d0","isReversed","rMin","rMax","availableRange","minCount","isWithinBounds","diffCount","NumericTicks","countDigits","expNo","fractionalDigits","startOfYear","startOffset","timeDiff","timeOneDay","startDay","startOfYearDay","firstWeekStartOffset","firstOfYear","firstOfYearDay","firstThursdayOffset","unsignedOffset","sign","padChar","formatString","formatParts","nextEscapeIdx","literalPart","maybePadSpecifier","maybePad","maybeFormatterSpecifier","maybeFormatter","dateTime","dateTimeAsDate","DefaultTimeFormats","TimeScale","ticks","defaultTimeFormat","updateFormat","ticks_1","ticks_1_1","firstTick","lastTick","startYear","stopYear","yearChange","formatStringArray","timeEndIndex","weekDayIndex","tickIntervals","countableTimeInterval","tickCount","diff0","diff1","t0","ticks_2","absInterval","reversedInterval","timeInterval","tickInterval","stopDate","specifier","maxAttempts","n0","n1","intervalRange","align","zero","comma","tilde","surrounded","trim","formatBody","numString","dotIndex","integerChars","fractionalPart","num","signType","plusSign","padWidth","padLeft","padRight","digits","exp","LogScale","logBase_1","pow","p0","p1","absDiff","isBaseInteger","isDiffLarge","ticks$1","isPositive","availableSpacing","lastTickPosition","nextMagnitudeTickPosition","tickPosition","prevSpacing","nextSpacing","fits","replaces","Label","parallelFlipRotation","regularFlipRotation","configuredRotation","parallelFlipFlag","regularFlipFlag","defaultRotation","minSpacing","rotated","parallel","labelRotation","sideFlag","labelAutoRotation","labelRotated","labelAutoRotated","alignFlag","labelX","labelY","labelMatrix","translatedBBox","Tags","TickGenerationType","AxisLine","BaseAxisTick","AxisLabel","AxisTitle","Axis","moduleCtx","crossLine","rr","vr","tolerance","logScale","defaultLabelFormatter","tickValues","tickMin","tickMax","minTickCount","maxTickCount","primaryTickCount","tickData","combinedRotation","ticksResult","nice","tick","secondaryAxis","initialRotation","maxIterations","autoRotation","labelOverlap","terminate","tickStrategies","tickStrategies_1","tickStrategies_1_1","rotation_1","avoidLabelCollisions","filterTicks","autoRotate","strategies","tickGenerationType","tickGenerationStrategy","tickFilterStrategy","autoWrapStrategy","autoRotateStrategy","defaultTickCount","regenerateTicks","prevTicks","rawTicks","labelCount","shouldTerminate","labelData","labelSpacing","tickData_1","tickData_1_1","tickDatum","tickLabel","labelDatum","labelOveralap","previousTicks","halfBandwidth","rawTick","tickSpacing","keepEvery","maxSpacing","defaultMinSpacing","requestedRange","requestedRangeMin","requestedRangeMax","visibleFn","gridLineGroupSelection","gridArcGroupSelection","tickLineGroupSelection","tickLabelGroupSelection","anySeriesActive","crossLineGroup","axisGroup","gridGroup","translation","gridPadding","gridLength","_primaryTickCount","gridData","translationFn","gridStyle","styleCount_1","angularGridLength_1","halfBandwidth_1","arc","radius","labelsEnabled","userHidden","labelProps","defaultMaxLabelWidth","maxLabelWidth","defaultMaxLabelHeight","maxLabelHeight","wrappedTickLabel","lineNode","anyTickVisible","identityFormatter","_titleCaption","tickLineGroup","tickLabelGroup","callbackCache","titleVisible","titleNode","titleRotationFlag","bboxYDimension","tickBBox","tickWidth","labelFormatter","_max","LinearScale","prev0","prev1","ChartAxis","boundSeries","includeInvisibleDomains","domains","visibleSeries","visibleSeries_1","visibleSeries_1_1","seriesKeys","moduleInstance","CategoryAxis","valuesSet","paddings","sourceType","targetType","targetArray","targetElement","lhs","rhs","allProps","propsChangedCount","take","lhsType","rhsType","allProps_1","allProps_1_1","json","avoidDeepClone","jsonTypes","finalValue","nextProp","lastValue","types","matcherPath","skip","constructors","allowedTypes","targetAny","_loop_3","propertyMatcherPath","propertyPath","ctr","currentValueType","newValueType","allowableTypes","newValueArray","err","visit","jsons","jsonType","_loop_4","otherValues","valueType","Square","hs","Cross","Diamond","Heart","degree","rad","Plus","Triangle","StateMachine","initialState","currentStateConfig","destinationTransition","destinationState","destinationStateConfig","CartesianSeriesNodeBaseClickEvent","xKey","yKey","CartesianSeriesNodeClickEvent","CartesianSeriesNodeDoubleClickEvent","CartesianStateMachine","CartesianSeries","pathsPerSeries","hasMarkers","pathsZIndexSubOrderOffset","isContinuousX","isContinuousY","isValidDatum","xAxis","yAxis","seriesRect","seriesItemEnabled","seriesHighlighted","anySeriesItemEnabled","newNodeDataDependencies","datumSelection","markerSelection","labelSelection","seriesIdx","contextData","MarkerShape","contextNodeData","contentGroup","subGroups","totalGroups","subGroupId","subGroupZOffset","dataNodeGroup","markerGroup","labelGroup","paths_1","paths_1_1","highlightSelection","highlightLabelSelection","seriesOpacity","subGroupOpacities","isSubGroupOpacityDifferent","subOp","subGroupVisible","subGroupOpacity","paths_2","paths_2_1","labelItem","itemId_1","contextNodeData_1","contextNodeData_1_1","ld","hitPoint","minDistance","closestDatum","contextNodeData_2","contextNodeData_2_1","datumX","datumY","isInRange","distance","requireCategoryAxis","directions","primaryDirection","hitPointCoords","contextNodeData_3","contextNodeData_3_1","_o","point_1","newMinDistance","numVisibleItems","totalVisibleItems","wasClicked","newEnabled","_data","CartesianSeriesMarker","sleepTimeoutMs","Overlay","ChartOverlays","Listeners","listeners_1","listeners_1_1","cancelled","listeners_2","listeners_2_1","reduceFn","listenerResult","listeners_3","listeners_3_1","listenerSymbol","BaseManager","red","green","blue","interp","RepeatType","driver","autoplay","ease","repeatMax","repeatType","onComplete","onPlay","onRepeat","onStop","onUpdate","delayElapsed","elapsed","iteration","isForward","isComplete","easing","controls","play","pause","driverControls","repeat","complete","handleUpdate","animateOpts","animationControls","AnimationManager","interactionManager","optsExtra","updateBatch","completeBatch","drivers","inner_id","disableInteractions","frame","deltaMs","CursorManager","callerId","styleToApply","ChartEventManager","HighlightManager","previousHighlight","highlightToApply","event_1","InteractionManager","EVENT_HANDLERS_1","EVENT_HANDLERS_1_1","WINDOW_EVENT_HANDLERS_1","WINDOW_EVENT_HANDLERS_1_1","WINDOW_EVENT_HANDLERS_2","WINDOW_EVENT_HANDLERS_2_1","EVENT_HANDLERS_2","EVENT_HANDLERS_2_1","coords","types_1","types_1_1","interactionEvent","mouseButtonDown","pageX","pageY","lastTouch","offsets","offsetDragStart","offsetEvent","pageRect","builtEvent","TooltipManager","tooltip","hoverRef","area","destroyFn","newAppliedExclusiveArea","entryId","ids","contentToApply","metaToApply","renderInstantly","ZoomManager","newZoom","currentZoom","zoomToApply","LayoutService","stage","shrinkRect","DataService","getSeries","ChartUpdateType","UpdateService","updateCallback","forceNodeDataRefresh","ChartHighlight","MarkerLabel","marker","markerSize","bboxes","itemPaddingY","itemPaddingX","forceResult","secondary","processedBBoxCount","rawPages","unprocessedBBoxes","minGuess","startingGuess","guess","pageIndices","primaryCount","sumSecondary","currentMaxSecondary","currentPrimaryIndices","maxPrimaryValues","bboxIndex","primaryValueIdx","primaryValue","currentSecondaryDimension","returnResult","sumPrimary","maxPageWidth","maxPageHeight","pages","colIndices","colBBoxes","columnHeight","pageWidth","pageHeight","innerData","dataIdx","primarySum","PaginationLabel","PaginationMarkerStyle","PaginationMarker","Pagination","chartUpdateCallback","pageUpdateCallback","cursorManager","labelNode","markerPadding","labelBBox","nextButton","previousButton","nextButtonDisabled","previousButtonDisabled","activeStyle","inactiveStyle","highlightStyle","highlightActive","buttonStyle","onFirstPage","LegendLabel","LegendMarker","LegendItem","LegendListeners","Legend","interactionListeners","layoutListeners","characterWidths","cw","paddingX","paddingY","markerShape","maxLength","itemMaxWidthPercentage","maxItemWidth","paddedMarkerWidth","markerLabel","labelText","oldSize","maxCharLength","ellipsis","textChars","addEllipsis","truncatedText","cumulativeWidth","textChars_1","textChars_1_1","trackingIndex","paginationBBox","paginationVertical","newCurrentPage","paginationComponentPadding","legendItemsWidth","legendItemsHeight","paginationX","paginationY","lastPassPaginationBBox","stableOutput","itemSelection","visibleStart","visibleEnd","columnCount","itemHeight","rowSumColumnWidths","pageIndex","visibleChildBBoxes","closestLeftTop","childBBox","distX","distY","toTheLeftTop","pageBBox","actualBBox","legendItemClick","dataService","highlightManager","toggleSeriesVisible","legendBBox","pointerInsideLegend","chartSeries","legendItemDoubleClick","seriesId","legendData","ls","numVisibleItems_1","clickedItem","pointerOverLegendDatum","newShrinkRect","legendWidth","legendHeight","calculateTranslationPerpendicularDimension","legendPadding","legendPositionedBBox","aspectRatio","maxCoefficient","minHeightCoefficient","minWidthCoefficient","heightCoefficient","widthCoefficient","CallbackCache","serialisedParams","paramCache","invoke","Chart","resources","error_1","seriesNodeClickEvent","seriesNodeDoubleClick","autoWidth","authHeight","queuedUserOptions","lastUpdateOptions","animationManager","chartEventManager","tooltipManager","zoomManager","layoutService","updateService","keepTransferableResources","highlightOnly","seriesToUpdate","seriesToUpdate_1","seriesToUpdate_1_1","performUpdateType","count_1","seriesRect_1","seriesUpdates","tooltipMeta","removedAxes","allSeries","seriesRoot","canAdd","beforeIndex","seriesAxis","directionToAxesMap","directionAxes","currentAxis","newAxis","directionAxes_1","directionAxes_1_1","axisKeys","directionKeys_1","directionKeys_1_1","directionKey","legendType","initLegend","labelMarkerFills","seriesType","dc","subtitle","footnote","updateCaption","caption","defaultCaptionHeight","captionLineHeight","positionTopAndShrinkBBox","baseY","bboxHeight","positionBottomAndShrinkBBox","exactMatchOnly","maxDistance","reverseSeries","reverseSeries_1","reverseSeries_1_1","lastPick","hoverRect","disablePointer","pixelRange","pick","isNewDatum","isPixelRange","tooltipEnabled","exactlyMatched","rangeMatched","shouldUpdateTooltip","nearestNode","nodeClickRange","newSeries","newDatum","lastSeries","lastDatum","updateAll","timeoutMs","shouldDisplayNoDataOverlay","TreeNode","pathParts","lastPartIndex","pathPart","partIndex","isNotLeaf","wm","wp","subtrees","vim","defaultAncestor","change","vop","vip","vom","sip","sop","sim","som","defaultAncestor_1","midpoint","leftSibling","Dimensions","leafCount","TreeLayout","shiftX","shiftY","flipX","xSteps","ySteps","existingSpacingX","desiredSpacingX","existingSpacingY","desiredSpacingY","screenDimensions","GroupedCategoryAxisLabel","GroupedCategoryAxis","gridLineGroup","tickScale","isNumericX","domain_1","tickTree","tickScaleDomain","rangeStart","rangeEnd","rangeLength","tickTreeLayout","treeLabels","isLabelTree","gridLineSelection","labelBBoxes","maxLeafLabelWidth","labelGrid","separatorData","minX","separatorSelection","lineCount","axisLineSelection","styles_1","CartesianChart","visibility","clipSeries","seriesAreaPadding","seriesPaddedRect","hoverRectPadding","inputShrinkRect","axisWidths","liveAxisWidths","stableOutputs","otherAxisWidths","otherVisibility","otherW","ceilValues","records","out","lastPassAxisWidths","lastPassVisibility","clipRectPadding","lastPassSeriesRect","axes","visited","newAxisWidths","primaryTickCounts","paddedBounds","crossLinePadding","axisBound","newClipSeries","axisThickness","axisOffset","paddedRect","reversedAxes","horizontalPadding","verticalPadding","clampBounds","compareTo","addInterAxisPadding","axisLeftRightRange","zoom","paddedBoundsCoefficient","axisPadding","PolarSeries","_options","_seriesRect","sector","innerRadius","outerRadius","outerStart","outerEnd","innerStart","innerEnd","topRight","bottomLeft","Sector","fullPie","centerX","centerY","prevX","smallestSoFar","nextX","normaliseTo","normalise","valuesExtent","valueIndexes_1","valueIndexes_1_1","valIdx","valueIndexes_2","valueIndexes_2_1","rangeMin","rangeMax","normaliseSpan","pData","pIdx","groupValues","groupValues_1","groupValues_1_1","PieSeriesNodeBaseClickEvent","angleKey","calloutLabelKey","sectorLabelKey","radiusKey","PieSeriesNodeClickEvent","PieSeriesNodeDoubleClickEvent","PieNodeTag","PieSeriesCalloutLabel","PieSeriesSectorLabel","PieSeriesCalloutLine","PieSeriesTooltip","PieTitle","DoughnutInnerLabel","DoughnutInnerCircle","PieStateMachine","PieSeries","pieCalloutLabels","pieSectorLabels","innerLabels","extraProps","dataModel","angleScale","angleIdx","radiusIdx","currentStart","midAngle","angleValue","radiusValue","sectorFormat","skipDisabled","calloutLabel","sectorLabel","legendItemKey","labelFormatterParams","calloutLabelText","calloutLabelMinAngle","calloutLabelVisible","sectorLabelText","legendItemText","radiusName","angleName","calloutLabelName","sectorLabelName","quadrantTextOpts","midAngle180","quadrantStart","quadrantOffset","quadrant","quadrantIndex","strokes","seriesFillOpacity","isDatumHighlighted","highlightedStyle","fillOpacity","innerRadiusRatio","innerRadiusOffset","outerRadiusRatio","outerRadiusOffset","spacing","titleOffset","titleBox","oldTitle","innerCircle","oldInnerCircle","circle","groupSelection","calloutLabelSelection","sectorLabelSelection","innerLabelsSelection","radiusScale","updateSectorFn","sectorParent","sectorGrandParent","calloutLine","calloutLength","calloutStrokeWidth","calloutColors","length_1","paddedLength","seriesLeft","seriesRight","seriesTop","seriesBottom","errPx","visibleTextPart","hasVerticalOverflow","textLength","hasSurroundingSeriesOverflow","surroundingRadius","corners","sur2","corner","shouldSkip","fullData","leftLabels","rightLabels","topLabels","bottomLabels","tempTextNode","getTextBBox","labelRadius","avoidNeighbourYCollision","collidesOrBehind","avoidYCollisions","midLabel","midIndex","avoidXCollisions","labelsCollideLabelsByY","paddedBoxes","labelsCollideLabelsByX","sectors","labelsCollideSectors","displayText","maxCollisionOffset","textBoxes","titleCleanArea","isTooShort","positionOffset","positionRatio","isDoughnut","singleVisibleSector","isTextVisible","shouldPutTextInCenter","sectorBounds_1","circleRadius","antiAliasingPadding","textBBoxes","getMarginTop","getMarginBottom","labelsVisible","textBottoms","nodeDatum","tooltipRenderer","formattedAngleValue","titleText","labelParts","datumToggledLegendItemValue","datumItemId","labelDuration","labelAnimationOptions","PolarChart","fullSeriesRect","seriesBox","polarSeries","setSeriesCircle","pieSeries","innerRadii","initialRadius","hideWhenNecessary","labelBoxes","polarSeries_1","polarSeries_1_1","labelBox","refined","labelsBox","minCircleRatio","circleLeft","circleTop","circleRight","circleBottom","padTop","padBottom","availCircleWidth","availCircleHeight","newRadius","minHorizontalRadius","minVerticalRadius","minRadius","padHeight","HierarchyChart","formats","valueName","formatName","locales","segments","magnitude","stepPower","NumberAxisTick","NumberAxis","LogAxis","isInverted","crossesZero","hasZeroExtent","invalidDomain","TimeAxisTick","TimeAxis","_min","AreaSeriesLabel","AreaSeriesTooltip","AreaSeriesTag","AreaSeries","visibles","absValue","yKeys","normalizedTo","enabledYKeys","keyDef","yExtent","ySumExtent","groupedData","contexts","xScale","yScale","continuousY","xDataCount","cumulativePathValues","cumulativeMarkerValues","createPathCoordinates","createMarkerCoordinate","xDatum","yDatum","prevY","currY","prevYCoordinate","currYCoordinate","rawYDatum","normalized","normalizedAndValid","yKeyDataIndex","labelSelectionData","markerSelectionData","strokeSelectionData","fillSelectionData","fillPoints","fillPhantomPoints","strokePoints","yValues","datumIdx","datumGroup","datumArray","valuesArray","seriesDatum","nextValuesSameGroup","nextDatumGroup","nextXDatum","rawNextYIdx","rawNextYDatum","nextYDatum","windowX","windowY","currCoordinates","nextCoordinates","markerFillOpacity","strokeOpacity","highlightedFill","highlightFillOpacity","highlightedStroke","highlightedDatumStrokeWidth","markerStrokeWidth","customMarker","yKeyIndex","labelEnabled","xValue","yValue","xName","yNames","markerFormatter","markerFill","markerStroke","xString","yString","processedYValue","yName","tooltipFormat","newEnableds","singleEnabledWasClicked","singleEnabledInEachSeries_1","markerSelections","labelSelections","markerDuration","animationOptions","points_1","yValues_1","moveTo","allPoints","points_2","bottomPoints_1","reverseIndex","bottomY","Rect","borderPath","crisp","pixelSize","microPixelEffectOpacity","lx","ly","halfStrokeWidth","effectiveStrokeWidth","borderClipPath","borderActive","barAlongX","labelTextAlign","labelTextBaseline","isHighlighted","stackGroup","itemFill","itemStroke","itemStrokeWidth","visibleRange","visibleMin","visibleMax","isZoomed","BarSeriesNodeTag","BarSeriesLabel","BarSeriesTooltip","BarSeries","flatYKeys","stackGroups","flattenKeys","flatKeys_1","keysInStacks_1","ungroupedKeys","newKeys","newKeysIndices_1","prevYKeyCount_1","visibleStacks_1","stack","groupScale","flattenFn","visiblesIdx","map_1","normalizedToAbs","activeSeriesItems","activeStacks","smallestX","keysExtent","smallestInterval","domainLength","intervals","maxBands","bands","cumYKeyCount","xBandWidth","barWidth","stackIndex","stackYKeys","prevMinY","prevMaxY","levelIndex","yIndex","barX","nodeMidPoint","labelFontStyle","labelFontWeight","labelFontSize","labelFontFamily","labelColor","colorIndex","isHighlight","itemHighlightStyle","categoryAlongX","fillIndex","legendItemNames","hideInLegend","hasAnyLegendItemName","hasLegendItemName","singleEnabledInEachSeries","nameYKey","visibleStacks","datumSelections","startingX","ColumnSeries","startingY","HistogramSeriesNodeTag","HistogramSeriesLabel","HistogramSeriesTooltip","HistogramSeries","xDomain","binStarts","binSize_1","firstBinEnd","expandStartToBin","binCount","startGuess","binSize","bins","areaPlot","aggregation","aggProp","dataSet","xExtent","nextBin","yDomain","xDomainMin","xDomainMax","negativeAgg","positiveAgg","frequency","xMinPx","xMaxPx","yZeroPx","yMaxPx","selectionDatumLabel","aggregatedValue","LineSeriesLabel","LineSeriesTooltip","LineSeries","xDef","markerEnabled","_p","_q","_r","xIdx","yIdx","prevXInRange","nextPoint","actualLength","_s","xInRange","nextXInRange","_t","lineStroke","contextDataIndex","linePath","ColorScale","isSmallRange","parsedRange","ScatterSeriesLabel","ScatterSeriesNodeBaseClickEvent","sizeKey","ScatterSeriesNodeClickEvent","ScatterSeriesNodeDoubleClickEvent","ScatterSeriesTooltip","ScatterSeries","colorScale","colorDomain","colorRange","colorKey","sizeKeyIdx","processedSize","colorKeyIdx","dataDef","labelKey","xDataIdx","yDataIdx","sizeScale","colorIdx","_u","markerStrokeOpacity","placedLabels","placedNodeDatum","labelName","HierarchySeries","DropShadow","TreemapSeriesTooltip","TreemapSeriesNodeBaseClickEvent","TreemapSeriesNodeClickEvent","TreemapSeriesNodeDoubleClickEvent","TreemapSeriesLabel","TreemapSeriesTileLabel","TreemapValueLabel","TextNodeTag","fallbackColor","TreemapTextHighlightStyle","TreemapHighlightStyle","TreemapSeries","nodePadding","textSize","heightRatioThreshold","outputNodesBoxes","targetTileAspectRatio","stackSum","minRatioDiff","partitionSum","innerBox","partition","isVertical_1","partThickness","partLength","firstTileLength","stackThickness","start_1","width_1","height_1","childBox","width_2","height_2","gap","getBounds","innerBounds","childBounds","sides","groupFill","createTreeNodeDatum","colorScaleValue","isLeaf","childNodeDatum","chart","descendants","nameLabel","valueLabel","gradient","tileStroke","tileStrokeWidth","groupStroke","groupStrokeWidth","highlightedFillOpacity","highlightedTextColor","tileShadow","labelShadow","labelMeta","highlightedSubtree","updateRectFn","updateLabelFn","fillColor","treeNodeDatum","wrappedRegExp","availTextWidth","availTextHeight","isBoxTooSmall","labelStyle","minSizeRatio","valueText","valueConfig","valueStyle","valueMargin","valueSize","pickStyle","availHeight","labelStyles","labelStyles_1","labelStyles_1_1","smallSize","labelSize","hasValueText","_direction","rootName","valueKey","chartType","cstr","seriesConstructor","transforms","result_1","axisType","ChartTheme","palette","common","cartesian","polar","hierarchy","applyOverrides","seriesTypes","overrideOpts","chartConfig","seriesDefaults","typeToAliases","nextType","aliases","typeDefaults","alias","getOverridesByType","themeTemplate","themeInstance","extensions","parentDefaults","DarkTheme","fontColor","mutedFontColor","axisDefaults","seriesLabelDefaults","chartAxesDefaults","chartDefaults","MaterialLight","MaterialDark","PastelLight","PastelDark","SolarLight","SolarDark","VividLight","VividDark","stockTheme","flattenedTheme","baseTheme","seriesOptions","seriesOptions_1","seriesOptions_1_1","groupingKey","indexKey","sparse","activationValue","reducerConfig","defaultReduce","outputProp","preprocessed","specifiedType","input_1","input_1_1","colours","newOptions","fallbackOptions","userSuppliedOptionsType","globalTooltipPositionOptions","checkSeriesType","defaultSeriesType","defaultOverrides","mergedOptions","axesThemes","seriesThemes","mergedSeries","checkAxisType","isAxisType","validAxesTypes","axesTheme","deprecatedArrayProps","mergedTooltipPosition","cleanedTheme","themeConfig","paletteOptions","removeOptions","mergedResult","inputAny","colourCount","axisTheme","crossLinesTheme_1","cleanTheme","visitingUserOpts","visitingMergedOpts","_enabledFromTheme","pieSeriesTheme","yDirection","crossLineTranslationDirections","xTranslationDirection","yTranslationDirection","xTranslation","yTranslation","chartPadding","xEnd","yStart","yEnd","xStart","Range","fillActive","startLine","endLine","strokeActive","CrossLineLabel","CrossLine","crossLineRange","crossLineLabel","dataCreated","clippedRange","clippedRangeClamper","clampedYStart","clampedYEnd","validRange","isContinuous","labelPadding","crossLineLabelBBox","BaseModuleInstance","otherModule","RangeHandle","ax","ay","axw","ayh","RangeMask","RangeSelector","mask","minHandle","maxHandle","NavigatorMask","rangeMask","NavigatorHandle","rangeHandle","Navigator","navigatorTotalHeight","panHandleOffset","getRatio","Background","layoutHandle","REGISTERED_MODULES_1","REGISTERED_MODULES_1_1","AgChart","deltaOptions","AgChartInstanceProxy","signatureProps","heuristicTypeCheck","AgChartInternal","userOptions","proxy","mixinOpts","processedOptions","chartToUpdate","dequeue","queuedOptionsIdx","asyncDownload","maybeClone","currentWidth","currentHeight","clonedChart","oldChart","transferableResource","optionalParams","completeOptions","modulesChanged","axesPresent","seriesOpts","seriesDataUpdate","otherRefreshUpdate","majorChange","updateType","matchingChartType","rootModules","rootModules_1","rootModules_1_1","shouldBeEnabled","isEnabled","optSeries","matchingTypes","previousOpts","seriesDiff","optAxes","oldOpts_1","axisDiff","legend","moduleContext","seriesInstance","axisOptions","rootModules_2","rootModules_2_1","applyOpts","jsonApplyOptions","ctrs","seriesTypeOverrides","Image","sourceImage","chartProxyParams","chartOptionsToRestore","chartPaletteToRestore","chartThemeToRestore","themeName","rootTheme","gridOptionsThemeOverrides","apiThemeOverrides","crossFilterThemeOverridePoint","crossFilteringOverrides","formattingPanelOverrides","isTitleEnabled","rootThemePalette","paletteA","paletteB","arrayCompare","overrideType","titleEnabled","extraPadding","chartThemeName","availableThemes","customChartThemes","customChartTheme","validationFn","expectedType","validations","validPropertyNames","paramsType","validation","warnMessage","themeOverrides","unlinkChart","chartModelParams","updatedCol","updatedOverrides","selectedDimension","modelType","seriesChartTypes","columnNames","chartProxy","savedCustomSeriesChartTypes","seriesChartType","updateChartType","prevSeriesChartType","selectedColIds","supportedComboSeriesTypes","chartTypeMap","currentChartType","firstCellRange","chartController","chartOptionsService","dimensionCols","groupExpandedState","getSeriesLabel","seriesChartTypeIndex","prevVal","groupType","defaultExpanded","columnState","inputName","pairedModeToggle","seriesGroupGui","seriesItemGroup","secondaryAxisComp","defaultText","availableChartTypes","chartTypeComp","eDragHandle","isBubble","isInPairedMode","selectedValuesCount","indexToAxisLabel","escapedLabel","axisLabel","userProvidedDataPanelDef","itemHovered","lastHoveredComp","lastHoveredPosition","draggedColumnState","families","valueIndex","capitalisedFontValue","weightStyles","selectedOption","selectedWeightStyle","newColor","isExpandedOnInit","positions","initSlider","defaultMaxValue","fontPanelComp","initInput","floatValue","eChildCircle","radiansValue","updateAxisLabelRotations","axisTicksComp","initialFont","setFont","labelPanelComp","xRotationComp","yRotationComp","autoRotateCb","getLabelRotation","setLabelRotation","updateAutoRotate","xRotation","yRotation","autoRotateCheckbox","degreesSymbol","createRotationComp","angleSelect","labelPaddingSlider","chartTranslationService","chartOptions","topPadding","hasTitle","isSilent","fontPanelParams","currentTitleText","replaceableTitleText","spacingSlider","toolbarItemsFunc","titlePanelComp","paddingPanelComp","backgroundPanelComp","getSelectedSeries","seriesOptionLabelProperty","getFontOptionExpression","fontOption","getFontOption","setFontOption","seriesMarkerShapeOptions","shouldHideEnabledCheckbox","seriesSelect","seriesTooltipsToggle","seriesStrokeWidthSlider","seriesLineWidthSlider","seriesLineDashSlider","seriesLineOpacitySlider","seriesFillOpacitySlider","labelParams","calloutPanelComp","sectorParams","sectorPanelComp","positionRatioComp","shadowPanelComp","markersPanelComp","seriesBinCountSlider","seriesSelectOptions","activeChartTypes","cartesianOnlyGroupPanels","cartesianSeries","reuse","isGrouping","userProvidedFormatPanelDef","tooltipName","leftAxis","bottomAxis","stacked","xScalePadding","xScaleDomain","yScaleDomain","createBars","linesGroup","columnData","bar","centerRadiusScaler","center","angles","pointsGroup","pathData","lineData","areaData","yZero","firstX","lastX","axisStroke","axisOvershoot","penIcon","chartGroups","chartGroupValues","groupComponent","MiniClass","miniWrapper","miniClassChartType","selectedChartType","miniChartType","miniChart","isMiniChartsContainerVisible","miniChartsContainers","currentChart","forceReset","palettes","isActivePalette","miniChartsContainer","link","animationDirection","currentPalette","currentGui","futurePalette","nextGui","final","animatingClass","panels","panelType","TabPanelClass","eWrapperDiv","titleEl","translatedTitle","tabItem","eChartContainer","eMenuPanelContainer","topItems","rightItems","defaultChartToolbarOptions","chartToolbarOptions","panelsOverride","menuOption","defaultToolPanel","tabOptions","isLegacyToolbar","ignoreOptions","tooltipKey","tooltipTitle","menuEl","buttonConfig","buttonEl","defaultTab","chartMenu","destroyDbleClickListener","wasInTitle","destroyMouseMoveListener","inTitle","titleBBox","canvasWidth","minimumTargetInputWidth","inputWidth","inputStyle","isTitlePlaceholder","oldTitleLines","currentTitleLines","fixedLineHeight","titleColor","transparentColor","extractedRowData","groupNodeIndexes","groupsToRemove","filteredNodes","allRowNodes","numRows","modelLastRow","valueObject","valueString","columnNamesArr","filteredOutColId","actualValue","groupIndexesToRemove","filterFunc","dataFromGrid","lastColId","dataAggregated","currentMap","groupItem","dimCol","dimColId","dataToAgg","dataToAggFiltered","aggResultFiltered","pivotKeySeparator","extractSeparator","childId","firstSecondaryCol","initialLabel","chartDataType","childRow","chartDataModel","seriesChartTypesExist","primaryOnly","getSeriesChartType","providedSeriesChartType","updatedSeriesChartTypes","valueColState","primaryChartType","secondaryChartType","selectedCols","lineIndex","pivotChart","suppressChartRanges","crossFiltering","updatedColState","allColsFromRanges","chartData","isGroupActive","groupDimensionSelected","valueCellRange","endRowPosition","allCols","isInitialising","hasSelectedDimension","aggFuncDimension","defaultCategory","valueColumnsFromReferenceRange","idsMatch","dimensionColState","orderedColIds","ascColStateOrder","colsInRange","selectedDimensionColState","selectedValueCols","colIdSet","foundColState","colState","chartOrProxy","rawChart","imageFileName","paired","categoryKey","categoryAxis","existingOptions","inUseTheme","keepChartInstance","supportsCrossFiltering","xAxisIsCategory","isCategoryAxis","testDatum","getYKey","multiSelection","category","lastSelectedChartId","pointSelected","customMerge","destination","sourceIsArray","targetIsArray","isBar","numberAxis","groupedCharts","isGrouped","updatePrimarySeries","updateFilteredOutSeries","primarySeries","normalisedCharts","numFields","primaryOptions","filteredOutOptions","primaryOpts","_params","seriesDefinitions","labelFieldDefinition","seriesDefinition","filteredOutKey","calcMarkerDomain","markerDomain","filterableEvent","updatedSeries","isBubbleChart","currentXField","xField","yField","firstField","chartSeriesTypes","chartAxis","chartRef","fieldsMap","primaryYKeys","secondaryYKeys","secondaryYKey","secondaryAxisOptions","primaryYAxis","primaryYKey","lastSecondaryAxis","groupedOpts","availableChartThemes","modelParams","suppliedThemes","customThemeName","chartInstance","crossFilterCallback","toTranslate","chartUpdateParams","updateParams","currentType","updatedChartType","pivotModeDisabled","minFieldsRequired","isEmptyChart","chartPalette","axesTypes","highlightOptUpdate","otherChartOptions","otherModelProps","chartTypeMixin","minimalAxis","updatedAxes","axisProps","updatedChartOptions","tracking","modelAny","hasKey","hints","defaultVersion","matchingHints","heuristicVersion","maxVersion","migration","split","major","minor","patch","nextPath","valueToMove","valueFound","renameTo","skipMissing","mutator","pathElements","parentPathElements","targetName","hasProperty","pathOptions","pathOption","arrayName","jsonProp","chartComp","versionedModel","cr","selectedRange","getCellRange","chartAllRangeParams","chartThemeOverrides","createChartContainerFunc","defaultTranslation","dataKey","existingGridValues","valueAlreadyExists","updatedValues","filteredValues","beforeCols","countBefore","lastRange","rangeColumns","allPositions","pinnedBottomRowCount","appendRange","rowForCell","endColumn","colsToAdd","startColumn","moveColInCellRange","colToMove","moveToFront","otherCols","allIndices","startCell","firstCol","endCellIndex","endCellFloating","newEndCell","newRange","cellEventSource","dispatchWrapperEvents","wrapperEventSource","startsOnTheRight","columnStart","columnEnd","rowToColumnMap","rowName","currentRangeColIds","filteredColumns","columnsString","currentValString","topRow","bottomRow","columnInRange","rowInRange","rangeFirstIndexColumn","rangeLastIndexColumn","lastRangeColumn","isRightColumn","thisRow","equalsFirstRow","equalsLastRow","afterFirstRow","beforeLastRow","isMultiSelect","extendRange","startTarget","mouseRowPosition","fromMouseClick","intersectionStartRow","intersectionEndRow","newRanges","intersectCols","rangeCountBefore","middle","isMouseAndStartInPinned","columnFrom","columnTo","isSameColumn","oldCellComp","maxDecimals","splitExponent","sum_x","sum_y","sum_xy","sum_xx","newX","newY","allowedDirection","lastCellHovered","isX","colLen","rangeStartRow","rangeEndRow","fillStartEvent","fillEndEvent","initialRangeEndRow","initialRangeStartRow","finalRangeEndRow","finalRangeStartRow","withinInitialRange","initialValues","resetValues","iterateAcrossCells","fillValues","currentValues","updateInitialSet","skipValue","fromUserFunction","sourceRowNode","userFillOperation","userResult","allNumbers","asFloat","initialPosition","initialColumn","endPosition","isMovingUp","navigationService","rowPos","cellInRange","isInitialRow","celPos","isMovingLeft","startCol","endCol","colsToMark","valRect","hueRect","slider","sliderRect","alphaRect","spectrumColor","rgbaColor","colorPicker","saturation","brightness","dragger","draggerRect","innerHtml","spectrumHueRect","spectrumAlphaRect","recentColors","currentColor","eGuiRect","colorDialog","colorPanel","gridMajorVersion","chartsMajorVersion","gridMajor","chartsMajor","gridMajorDifference","chartsMajorDifference","isFirstOrAfterVersion","gridVersion","gridMinor","gridMajorMinor","chartsMajorMinor","chartsVersion","invalidMessage","chartsMinor","isValidMajor","eventRow","parentClass","detailClass","providedStrategy","masterGridApi","versionThisCall","successCallback","funcParams","setDefaultTemplate","templateFunc","agGridReact","agGridReactCloned","restrictToTabs","eMenuGui","currentHeaderPosition","closedFuncs","stopAnchoringPromise","closedFuncsArr","stopAnchoringFunc","columnToFocus","initialSelection","restrictTo","tabs","tabName","menuTabName","itemsToConsider","toShow","ev","defaultMenuOptions","allowPinning","rowGroupCount","doingGrouping","groupedByThisColumn","allowValue","allowRowGroup","isPrimary","pivotModeOn","isInMemoryRowModel","allowValueAgg","afterFilterAttachedCallback","afterDetachedCallback","columnSelectPanel","columnsMenuParams","contractColumnSelection","suppressColumnExpandAll","suppressColumnFilter","suppressColumnSelectAll","suppressSyncLayoutWithGrid","columnLayout","columnSelectPanelGui","csvModuleMissing","excelModuleMissing","suppressExcel","suppressCsv","which","eGridBodyGui","ContextMenu","currentFocusedCell","originalList","resultDef","isEditable","exportSubMenuItems","csvModuleLoaded","excelModuleLoaded","columnToUse","columnIsAlreadyAggValue","funcNames","funcName","builder","topLevelMenuItem","chartGroupsDef","removeKey","itemLookup","addItem","configLookup","menuItemLookup","orderedAndFiltered","chartTypes","chartConfigGroup","subMenus","itemKey","chartService","getMenuItem","localeKey","filters","filterChangedCallback","filterDef","filterTitle","filterGui","filterWithoutType","rowPasses","providedFilter","setFilterModel","suppressFocus","filterModifiedCallback","doesRowPassOtherFilter","changedFilter","lastActiveIndex","activeFilter","floatingFilterPromises","floatingFilterParams","floatingFilterPromise","floatingFilters","lastActiveFloatingFilterIndex","shouldShow","defaultComponentName","cellRendererPromise","eTarget","valueToRender","debounceDelay","valueToSelect","keyString","searchStrings","topSuggestion","topSuggestionIndex","topValue","mouseY","selectedIndex","ssrmParams","storeParams","groupColVo","initialRowCount","isRootStore","userInitialRowCount","loadingRowsCount","failedLoad","loadingRowNode","defaultId","info","nodesToRecycle","lookupNodeToRecycle","foundNode","recycleNode","nodeToRecycle","serverIsSorting","noSortApplied","serverIsFiltering","groupLevel","displayIndexSeq","visibleNodeIds","childCache","displayRowIndex","lastRowNode","lastRowNodeBottomPx","res2","childStore","storeIsImpacted","store","applyCallback","newRowNode","purge","loadingRowsToShow","firstRowInViewport","lastRowInViewport","lazyNode","nodesToRefresh","nodeToRefresh","nodeToRefreshDist","distToViewportTop","distToViewportBottom","lazyIndex","removeNodesFromLoadingMap","addNodesToLoadingMap","fail","nextBlockToLoad","startRowString","availableLoadingCount","storeIndex","startOfBlock","iterator","numberOfRows","contiguouslyPreviousNode","lazyCacheNode","adjacentNodes","storeIndexFromEndIndex","previousNode","displayIndexDiff","newStoreIndex","rowBounds","newNode","numberOfRowsToSkip","orderedMap","stringIndex","numericIndex","isLastRowIndexKnown","nodeAtIndex","storeIndexDiff","atStoreIndex","createNodeCallback","blockCounts","blockStates","blockStart","rowState","statePriorityMap","blockPrefix","uniqueStates","priorityState","firstRowBlockStart","lastRowBlockEnd","otherDisplayIndex","blockDistanceToMiddle","blockEnd","distStart","distEnd","lastLazyNode","farthest","allLoadedBlocks","blocksInViewport","numberOfBlocksToRetain","blocksToRemove","lastRowBlockStart","disposableNodes","rowBlockStart","midViewportRow","blockDistanceArray","newIds","duplicates","numberOfRowsExpected","response","duplicateIdText","wasRefreshing","responseRowIndex","nodeFromCache","finishedRefreshing","lastInferredRow","updates","updatedNodes","inserts","indexToAdd","uniqueInsertsMap","dataId","uniqueInserts","numberOfInserts","nodesToMove","uniqueInsertOffset","idsToRemove","removedNodes","nodesToVerify","deletedNodeCount","remainingIdsToRemove","allNodes","contiguousIndex","matchIndex","idToRemove","numericStoreIndex","idFunc","insertedNodes","allIdsToRemove","allUniqueIdsToRemove","nodesToDeselect","orderedNodes","thisNode","boundsFromRow","numberOfRowDiff","lastTop","distToPreviousNodeTop","distToNextNodeTop","distBetween","indexOfRow","nextTop","oldCount","resetListener","rowGroupColumnVos","valueColumnVos","pivotColumnVos","areColsSame","allColsUnchanged","equivalentCol","missingCols","sortModelDifferent","rowGroupDifferent","pivotDifferent","newParams","newSortModel","rootStore","rowDataChangedEvent","dynamicRowHeight","newFilterModel","route","storeToExecuteOn","thisRowIndex","all","parentBlock","groupKeys","getRowsParams","currentCache","findNodeFunc","nextKey","keyListForNextLevel","nextStore","colIdThisGroup","preserveStore","getKeyFunc","isMasterFunc","cachedRowHeight","getChildCount","groupDisplayCols","expandedMasterRow","extractRowBounds","resultFuncs","resultsForEvent","transactionsToRetry","atLeastOneTransactionApplied","txWrapper","removedRowIds","storeUpdatedEvent","defaultDetailRowHeight","sortModel","multiColumnPrefix","autoGroupSortModel","sm","autoGroupIndex","isNotInSortModel","mapColumnToSortModel","newModels","oldSortModel","valueColChanged","secondaryColChanged","allColsInBothSorts","differentSorts","oldSortItem","newSortItem","oldSort","newSort","differentIndexes","oldModel","allColKeysMap","oldJson","newJson","CacheClass","userStoreParams","infiniteScroll","cacheBlockSize","maxBlocksInCache","changedColumnsInSort","valueColIds","secondaryColIds","newState","parentPath","removedNodeIds","anyNodesToggled","onlyThisNode","updateNodeState","isToggled","clearedRows","recursivelySerializeState","normalisedState","toggledNodes","recursivelyDeserializeState","parentSelected","innerState","isThisNodeSelected","convertedChildren","parentRoute","parentState","remainingRoute","anyStateChanged","routes","completedRoutes","idPathToNode","pathToNode","tempNode","recursivelyRemoveState","selectedState","allChildNodesFound","noIndeterminateChildren","doesStateAlreadyExist","groupSelectsChildren","StrategyClazz","changedNodes","storeRoute","isNodeSelected","createKey","caseFormat","treeDataOrGrouping","getDataPath","existingValues","existingFormattedKeys","formattedKeys","unformattedKey","formattedKey","keyToAdd","existingUnformattedKey","processedPart","dataPath","treeKey","_value","_getValue","_allKeys","availableKeys","matchesFilter","nullMatchesFilter","valueFormatterValue","textFormatterValue","treeListPathGetter","treeListFormatter","available","parentTreeKeys","availableKey","recursivelyFlattenDisplayedItems","recursiveFilterReset","displayedKeys","recursiveForEachItem","topParentExpanded","recursiveSomeItem","recursiveExpansionCheck","someTrue","someFalse","childExpanded","checkFunction","itemProp","itemPasses","isAvailable","SetFilterModelValuesType","usingComplexObjects","treeDataTreeList","groupingTreeList","suppressSorting","caseSensitive","convertValuesToStrings","treeList","keyComparator","_aKey","aValue","_bKey","bValue","updatedKeys","valuesToUse","getFromRows","providedValues","sortedKeys","nullableValues","removeUnavailableValues","formattedFilterText","valueToCheck","clearExistingSelection","itemLabel","formattedValue","tooltipValue","setFilter","valueModel","numValues","excelMode","isGroupCol","loading","providedValueFormatter","isRefData","isLoading","filterListName","isTree","eSetFilterList","hasIndeterminateExpandState","selectedListener","expandedListener","itemParams","translateKey","listItem","eMiniFilter","applyMiniFilterWhileTyping","hideResults","applyImmediately","recursiveGroupSelection","childItem","recursiveExpansion","newMiniFilter","recursiveChildSelectionCheck","childSelected","selectAllItem","recursiveCollapse","oldRow","isSelectAllSelected","setValueModel","statusPanels","leftStatusPanelComponents","componentConfig","centerStatusPanelComponents","rightStatusPanelComponents","statusBarComponents","ePanelComponent","componentDetails","componentDetail","totalRowCount","filteredRowCount","totalRowCountValue","filteredRowCountValue","eventListener","selectedRowCount","statusBarValueComponent","refComponentName","aggregationPanelConfig","numberCount","cellsSoFar","gotResult","gotNumberResult","firstRenderedRow","bufferSize","afterBuffer","lastRenderedRow","firstNodeOutOfRange","lastNodeOutOfRange","callbackCount","keepRenderedRows","ZINDICIES","xData","xMinMax","oldHighlightedDatum","yData","dataType","xValueType","xType","setSmallestXInterval","shrunkWidth","shrunkHeight","p2","tooltipOptions","tooltipRendererResult","chartElement","contentHtml","tooltipRect","containerRect","buttOrNull","roundOrSquare","fillData","strokeData","yMinMax","yMin","yMax","firstValidX","lastValidX","previousX","xAxisLine","selectionData","highlightSize","highlightFill","highlightStroke","highlightStrokeWidth","markerFormat","strokePath","fillPath","xCrosshairLine","xLine","yCrosshairLine","yLine","BarColumnNodeTag","gaps","valueAxisDomain","nodeFormatter","nodeFill","nodeStroke","nodeStrokeWidth","nodeFormat","axisLine","labelPlacement","invalidDatum","midPoint","isPositiveY","textWidth","positiveBoundary","negativeBoundary","textHeight","sparkline","defaultOffset","validator","firstTimeIn","updateSparkline","LicenseManager","_component_Plus","moduleType","treeNodeMap","dirName","currentPath","indexLength","currentAbsolutePath","sps","joinSps","newModuleForm","_component_yv_vjson_tree","_component_YvStudioModuleDialog","_component_el_container","_component_el_aside","_component_el_main","travItem","treeNode","columnNode","_component_YvDesignerDataStructure","_component_YvDesignerRefStructure","tmpId","_component_el_collapse","_component_el_collapse_item","ctn","fld","prec","targetDOM","retList","selItem","rec","_component_Hide","_component_CopyDocument","_component_Delete","_component_Bem","_component_DefaultLayoutDesign","si","componentOptions","bizMixin","BizMix","currentYvStudioDesign","raw2","vuePath","vuePathLastModified","designJsPath","designJsPathLastModified","selectedDialogId","bindKey","eventContent","componentDesc","selectedWidget","seq","DialogDefault","DrawerDefault","dialogId","newWindow","nowId","eventMap","review","designJs","_component_YvPreview","_withModifiers","_component_Memo","_component_Place","_component_yv_designer_paint","_component_el_dropdown","_component_el_dropdown_menu","_component_el_dropdown_item","_component_yv_preview_code","_component_el_descriptions","_component_el_descriptions_item","sqlEditorData","renameParams","_resolveComponent","tableInfo","sqlOperationType","initData","_component_YvDatabaseSqlEditorDialog","columnInfo","dbType","columnDomain","columnDomainList","column_list","_component_yv_database_sql_editor_dialog","_component_YvDatabaseTableDialog","uiType","vDomainId","saveParams","modifyRow","removeRow","_this_1","tableData","loadingInstance","databaseData","database","databaseNames","databaseNode","tableNames","dataStructSyncTabName","columnDomainManageTabName","tabInfo","tabs_1","tabs_1_1","nextTab","dictTypes","dynamicTypes","dictType","defaultDynamicType","dynamicType","dictItemList","distDictItemList","dictItemList_1","dictItemList_1_1","distDictItem","is_dynamic","dictSelectedRows","maxDictItemSortNo","sortNo","newRows","modifyRows","varNames","_createCommentVNode","filters_1","dataArr","design","_component_yv_vjson_layout","pathIgnoreCase","reqBody","reqBodyIgnoreCase","respBody","respBodyIgnoreCase","requestBody_1","responseBody_1","apiInfo","_component_ApiConfigDialog","_component_ApiInfoConfigDialog","request_body_language","response_body_language","headers","stringHeaders","parseObj","apiId","_component_ApiConfig","_component_ApiLogs","templateId","templateParams","treeNodes","templateParams_1","templateParams_1_1","templateParam","wh","project","isEnable","operationName","templateIdx","printConditionList","conditionIdx","printTemplateList","printTemplate","_resolveDirective","printCondition","printTerminal","templatePaperTypeList","paperType","printTemplatePaperList","whList","distWhList","distPaperTypes","templatePaperIds","Element","eventNames","fen","oen","offsetHeight","offsetWidth","eles","ele","cindex","xn","yn","sri","sci","eri","eci","ri","rowFilter","addRet","dsr","dsc","der","dec","refs","Selector","currentd","undoItems","redoItems","getCell","rset","fset","ctext","cbWithin","rn","it1","merge","sources","obj1","obj2","v1","v2","ai","objOrAry","oldv","inits","initv","ifv","getv","al1","al2","num1","num2","exceptSet","what","srcCellRange","dstCellRange","autofill","dsri","dsci","deri","deci","drn","dcn","isAdd","dn","ii","jj","nri","nci","ncell","ncellmm","ndata","rndata","ks","indexWidth","messages","clearLangList","nrefs","dst","srn","scn","clipboard","bss","cstyle","multiple","ns","mergeIndexes","mri","mci","mrl","mcl","scrollOffsety","fsh","frset","scrollOffsetx","fsw","rowRange","crange","settings","copyText","resetSheet","eventTrigger","contentToPaste","cellContent","clipboardContent","txt","srcRange","cri","cci","nfont","autoFilter","oldCell","oldText","vIndex","scroll","exceptRowSet","left0","top0","fary","oldAry","insertHeaderFooter","newTableHeader","tableHeader","tableFooter","pageHeader","pageFooter","deleteHeaderFooter","rsize","csize","freeze","fci","fri","history","showToolbar","showBottomBar","exceptRows","exceptRowTH","viewRange","rlen","clen","frary","nstyle","pageHeaderList","pageFooterList","startRowIdx","footers","enumObj","listAll","tables","hasFoundHeader","lastFootRowIdx","docTable","lastRowIdx","movefunc","upfunc","spanx","spany","startx","starty","push","currentListener","create","fire","exec","removeListener","once","execCalllback","removeAllListeners","hoverEl","lineEl","unhideHoverEl","startEvt","cRect","contentDistance","cssKey","useHideInput","autoFocus","of","ftwidth","ftheight","br","tl","freezeHeight","freezeWidth","coffset","indexesUpdated","lastri","lastci","ern","ecn","filterItems","itemClick","cdate","startDate","datess","week","cvalue","bodyEl","trs","tds","calendar","inputText","textlineEl","textEl","areaOffset","txts","maxTxtSize","fontWidth","tlineWidth","h1","twidth","itxt","selectionEnd","ntxt","altKey","suggest","sit","eit","formulas","viewFn","suggestPosition","areaEl","elOffset","sOffset","datepicker","buildMenuItem","buildMenu","menus","isHide","hideEl","mode2","vhf","pt","subStrs","fnArgType","fnArgOperator","fnArgsLen","oldc","ex","ey","rangelen","nc","subExpr","cellRender","fl","srcStack","formulaMap","cellList","fc","formula","getCellText","ary","valign","blheight","blwidth","floffset","fw","fh","mtxt","textWrap","strike","biw","ntxts","txtWidth","textLine","txtHeight","xys","dtextcb","bgcolor","rindex","yoffset","draw","xoffset","sortedRowMap","nrindex","frozen","dbox","cellText","afRange","filteredTranslateFunc","exceptRowTotalHeight","sumHeight","sumWidth","nty","ntx","ch","ftw","fth","theight","bgColor","fixText","fixTextColor","startY","startH","endH","recStartY","recHeight","freezeViewRange","ne","oneMmsPx","tableHeaderRanges","tableFooterRanges","pageHeaderRanges","pageFooterRanges","widthOfPx","scrollOffset","heightOfPx","scrollYOffset","elBox","tip","contentEl","aligns","naligns","buildTd","colorPalette","beforei","lineTypeEls","iti","borderPalette","nfontSizes","Format","DropdownFontsize","nfonts","nformats","DropdownMore","moreBtns","btns","moreEl","btns2","sumWidth2","list1","list2","btn","widthFn","FontSize","extendToolbar","hint","getTitle","mf","rf","cf","minvf","maxvf","svf","vf","attrs","clsName","filterbEl","filterValues","filterhEl","sortAscEl","sortDescEl","tindex","dimmer","verticalScrollbar","horizontalScrollbar","tableOffset","toolbar","rowResizer","colResizer","tableEl","tRect","deltaY","deltaX","loopValue","vFunc","moveY","rh","moveX","tempY","tempX","temp","erth","fwidth","fheight","overlayerEl","overlayerCEl","tOffset","vRect","cdata","sortFilter","isAutofillEl","cellRect","sPosition","modalValidation","itext","showContextmenu","click","addFunc","swapFunc","deleteFunc","updateFunc","nindex","deleteEl","selectors","rootEl","ds","nd","fieldTypeList","datetimeFormatterList","fieldType","ds_json","jsonObj","existFields","fieldMap","existFields_1","existFields_1_1","existField","ds_sql","_component_el_color_picker","_component_YvDesignerBaseProps","serialData","loadData","paramDetail","jsonDatasource","sqlDatasource","finallyCallback","_component_YvDesignerProps","_component_YvDesignerSQLDatasource","_component_YvDesignerJsonDatasource","_pushScopeId","_popScopeId","_component_YvStudioPrintTemplateDatasourceSql","_component_YvStudioPrintTemplateDatasourceJson","templateContent","URL","rawFile","_component_YvStudioPrintTemplateDatasource","_component_el_link","templateTypeList","deletePrintTemplateNameList","confirmMsg","template_paper_name","templateType","templatePaper","_component_YvDesignSpread","_component_yv_studio_print_template_designer","printerList","printTerminalNames","server_addr","printTerminalIds","printPlan","printer","printStates","pageNo","printTaskIds","printTask","printState","menuId","_component_el_menu","report","report_id","upData","downData","widgetPath","sqlCord","widgetjs","columnDataList","sqlCode","_component_RefreshRight","_component_Minus","handleSize"],"mappings":"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EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,EAAY;AAAA,E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"}